(()=>{var __webpack_modules__={7:(__unused_webpack_module,exports,__webpack_require__)=>{"use strict";eval("\n\nvar Alias = __webpack_require__(6027);\nvar identity = __webpack_require__(9141);\nvar composeCollection = __webpack_require__(3783);\nvar composeScalar = __webpack_require__(7303);\nvar resolveEnd = __webpack_require__(2026);\nvar utilEmptyScalarPosition = __webpack_require__(2913);\n\nconst CN = { composeNode, composeEmptyNode };\nfunction composeNode(ctx, token, props, onError) {\n const atKey = ctx.atKey;\n const { spaceBefore, comment, anchor, tag } = props;\n let node;\n let isSrcToken = true;\n switch (token.type) {\n case 'alias':\n node = composeAlias(ctx, token, onError);\n if (anchor || tag)\n onError(token, 'ALIAS_PROPS', 'An alias node must not specify any properties');\n break;\n case 'scalar':\n case 'single-quoted-scalar':\n case 'double-quoted-scalar':\n case 'block-scalar':\n node = composeScalar.composeScalar(ctx, token, tag, onError);\n if (anchor)\n node.anchor = anchor.source.substring(1);\n break;\n case 'block-map':\n case 'block-seq':\n case 'flow-collection':\n node = composeCollection.composeCollection(CN, ctx, token, props, onError);\n if (anchor)\n node.anchor = anchor.source.substring(1);\n break;\n default: {\n const message = token.type === 'error'\n ? token.message\n : `Unsupported token (type: ${token.type})`;\n onError(token, 'UNEXPECTED_TOKEN', message);\n node = composeEmptyNode(ctx, token.offset, undefined, null, props, onError);\n isSrcToken = false;\n }\n }\n if (anchor && node.anchor === '')\n onError(anchor, 'BAD_ALIAS', 'Anchor cannot be an empty string');\n if (atKey &&\n ctx.options.stringKeys &&\n (!identity.isScalar(node) ||\n typeof node.value !== 'string' ||\n (node.tag && node.tag !== 'tag:yaml.org,2002:str'))) {\n const msg = 'With stringKeys, all keys must be strings';\n onError(tag ?? token, 'NON_STRING_KEY', msg);\n }\n if (spaceBefore)\n node.spaceBefore = true;\n if (comment) {\n if (token.type === 'scalar' && token.source === '')\n node.comment = comment;\n else\n node.commentBefore = comment;\n }\n // @ts-expect-error Type checking misses meaning of isSrcToken\n if (ctx.options.keepSourceTokens && isSrcToken)\n node.srcToken = token;\n return node;\n}\nfunction composeEmptyNode(ctx, offset, before, pos, { spaceBefore, comment, anchor, tag, end }, onError) {\n const token = {\n type: 'scalar',\n offset: utilEmptyScalarPosition.emptyScalarPosition(offset, before, pos),\n indent: -1,\n source: ''\n };\n const node = composeScalar.composeScalar(ctx, token, tag, onError);\n if (anchor) {\n node.anchor = anchor.source.substring(1);\n if (node.anchor === '')\n onError(anchor, 'BAD_ALIAS', 'Anchor cannot be an empty string');\n }\n if (spaceBefore)\n node.spaceBefore = true;\n if (comment) {\n node.comment = comment;\n node.range[2] = end;\n }\n return node;\n}\nfunction composeAlias({ options }, { offset, source, end }, onError) {\n const alias = new Alias.Alias(source.substring(1));\n if (alias.source === '')\n onError(offset, 'BAD_ALIAS', 'Alias cannot be an empty string');\n if (alias.source.endsWith(':'))\n onError(offset + source.length - 1, 'BAD_ALIAS', 'Alias ending in : is ambiguous', true);\n const valueEnd = offset + source.length;\n const re = resolveEnd.resolveEnd(end, valueEnd, options.strict, onError);\n alias.range = [offset, valueEnd, re.offset];\n if (re.comment)\n alias.comment = re.comment;\n return alias;\n}\n\nexports.composeEmptyNode = composeEmptyNode;\nexports.composeNode = composeNode;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBbUI7QUFDdkMsZUFBZSxtQkFBTyxDQUFDLElBQXNCO0FBQzdDLHdCQUF3QixtQkFBTyxDQUFDLElBQXlCO0FBQ3pELG9CQUFvQixtQkFBTyxDQUFDLElBQXFCO0FBQ2pELGlCQUFpQixtQkFBTyxDQUFDLElBQWtCO0FBQzNDLDhCQUE4QixtQkFBTyxDQUFDLElBQWlDOztBQUV2RSxhQUFhO0FBQ2I7QUFDQTtBQUNBLFlBQVksb0NBQW9DO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEMsV0FBVztBQUN6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNEQUFzRCx3Q0FBd0M7QUFDOUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixTQUFTLElBQUkscUJBQXFCO0FBQzFEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx3QkFBd0I7QUFDeEIsbUJBQW1CIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vb2JzaWRpYW4tbWluZG1hcC1uZXh0Z2VuLy4vbm9kZV9tb2R1bGVzLy5wbnBtL3lhbWxAMi44LjAvbm9kZV9tb2R1bGVzL3lhbWwvZGlzdC9jb21wb3NlL2NvbXBvc2Utbm9kZS5qcz9hZTAzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEFsaWFzID0gcmVxdWlyZSgnLi4vbm9kZXMvQWxpYXMuanMnKTtcbnZhciBpZGVudGl0eSA9IHJlcXVpcmUoJy4uL25vZGVzL2lkZW50aXR5LmpzJyk7XG52YXIgY29tcG9zZUNvbGxlY3Rpb24gPSByZXF1aXJlKCcuL2NvbXBvc2UtY29sbGVjdGlvbi5qcycpO1xudmFyIGNvbXBvc2VTY2FsYXIgPSByZXF1aXJlKCcuL2NvbXBvc2Utc2NhbGFyLmpzJyk7XG52YXIgcmVzb2x2ZUVuZCA9IHJlcXVpcmUoJy4vcmVzb2x2ZS1lbmQuanMnKTtcbnZhciB1dGlsRW1wdHlTY2FsYXJQb3NpdGlvbiA9IHJlcXVpcmUoJy4vdXRpbC1lbXB0eS1zY2FsYXItcG9zaXRpb24uanMnKTtcblxuY29uc3QgQ04gPSB7IGNvbXBvc2VOb2RlLCBjb21wb3NlRW1wdHlOb2RlIH07XG5mdW5jdGlvbiBjb21wb3NlTm9kZShjdHgsIHRva2VuLCBwcm9wcywgb25FcnJvcikge1xuICAgIGNvbnN0IGF0S2V5ID0gY3R4LmF0S2V5O1xuICAgIGNvbnN0IHsgc3BhY2VCZWZvcmUsIGNvbW1lbnQsIGFuY2hvciwgdGFnIH0gPSBwcm9wcztcbiAgICBsZXQgbm9kZTtcbiAgICBsZXQgaXNTcmNUb2tlbiA9IHRydWU7XG4gICAgc3dpdGNoICh0b2tlbi50eXBlKSB7XG4gICAgICAgIGNhc2UgJ2FsaWFzJzpcbiAgICAgICAgICAgIG5vZGUgPSBjb21wb3NlQWxpYXMoY3R4LCB0b2tlbiwgb25FcnJvcik7XG4gICAgICAgICAgICBpZiAoYW5jaG9yIHx8IHRhZylcbiAgICAgICAgICAgICAgICBvbkVycm9yKHRva2VuLCAnQUxJQVNfUFJPUFMnLCAnQW4gYWxpYXMgbm9kZSBtdXN0IG5vdCBzcGVjaWZ5IGFueSBwcm9wZXJ0aWVzJyk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnc2NhbGFyJzpcbiAgICAgICAgY2FzZSAnc2luZ2xlLXF1b3RlZC1zY2FsYXInOlxuICAgICAgICBjYXNlICdkb3VibGUtcXVvdGVkLXNjYWxhcic6XG4gICAgICAgIGNhc2UgJ2Jsb2NrLXNjYWxhcic6XG4gICAgICAgICAgICBub2RlID0gY29tcG9zZVNjYWxhci5jb21wb3NlU2NhbGFyKGN0eCwgdG9rZW4sIHRhZywgb25FcnJvcik7XG4gICAgICAgICAgICBpZiAoYW5jaG9yKVxuICAgICAgICAgICAgICAgIG5vZGUuYW5jaG9yID0gYW5jaG9yLnNvdXJjZS5zdWJzdHJpbmcoMSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnYmxvY2stbWFwJzpcbiAgICAgICAgY2FzZSAnYmxvY2stc2VxJzpcbiAgICAgICAgY2FzZSAnZmxvdy1jb2xsZWN0aW9uJzpcbiAgICAgICAgICAgIG5vZGUgPSBjb21wb3NlQ29sbGVjdGlvbi5jb21wb3NlQ29sbGVjdGlvbihDTiwgY3R4LCB0b2tlbiwgcHJvcHMsIG9uRXJyb3IpO1xuICAgICAgICAgICAgaWYgKGFuY2hvcilcbiAgICAgICAgICAgICAgICBub2RlLmFuY2hvciA9IGFuY2hvci5zb3VyY2Uuc3Vic3RyaW5nKDEpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSB0b2tlbi50eXBlID09PSAnZXJyb3InXG4gICAgICAgICAgICAgICAgPyB0b2tlbi5tZXNzYWdlXG4gICAgICAgICAgICAgICAgOiBgVW5zdXBwb3J0ZWQgdG9rZW4gKHR5cGU6ICR7dG9rZW4udHlwZX0pYDtcbiAgICAgICAgICAgIG9uRXJyb3IodG9rZW4sICdVTkVYUEVDVEVEX1RPS0VOJywgbWVzc2FnZSk7XG4gICAgICAgICAgICBub2RlID0gY29tcG9zZUVtcHR5Tm9kZShjdHgsIHRva2VuLm9mZnNldCwgdW5kZWZpbmVkLCBudWxsLCBwcm9wcywgb25FcnJvcik7XG4gICAgICAgICAgICBpc1NyY1Rva2VuID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKGFuY2hvciAmJiBub2RlLmFuY2hvciA9PT0gJycpXG4gICAgICAgIG9uRXJyb3IoYW5jaG9yLCAnQkFEX0FMSUFTJywgJ0FuY2hvciBjYW5ub3QgYmUgYW4gZW1wdHkgc3RyaW5nJyk7XG4gICAgaWYgKGF0S2V5ICYmXG4gICAgICAgIGN0eC5vcHRpb25zLnN0cmluZ0tleXMgJiZcbiAgICAgICAgKCFpZGVudGl0eS5pc1NjYWxhcihub2RlKSB8fFxuICAgICAgICAgICAgdHlwZW9mIG5vZGUudmFsdWUgIT09ICdzdHJpbmcnIHx8XG4gICAgICAgICAgICAobm9kZS50YWcgJiYgbm9kZS50YWcgIT09ICd0YWc6eWFtbC5vcmcsMjAwMjpzdHInKSkpIHtcbiAgICAgICAgY29uc3QgbXNnID0gJ1dpdGggc3RyaW5nS2V5cywgYWxsIGtleXMgbXVzdCBiZSBzdHJpbmdzJztcbiAgICAgICAgb25FcnJvcih0YWcgPz8gdG9rZW4sICdOT05fU1RSSU5HX0tFWScsIG1zZyk7XG4gICAgfVxuICAgIGlmIChzcGFjZUJlZm9yZSlcbiAgICAgICAgbm9kZS5zcGFjZUJlZm9yZSA9IHRydWU7XG4gICAgaWYgKGNvbW1lbnQpIHtcbiAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09ICdzY2FsYXInICYmIHRva2VuLnNvdXJjZSA9PT0gJycpXG4gICAgICAgICAgICBub2RlLmNvbW1lbnQgPSBjb21tZW50O1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICBub2RlLmNvbW1lbnRCZWZvcmUgPSBjb21tZW50O1xuICAgIH1cbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIFR5cGUgY2hlY2tpbmcgbWlzc2VzIG1lYW5pbmcgb2YgaXNTcmNUb2tlblxuICAgIGlmIChjdHgub3B0aW9ucy5rZWVwU291cmNlVG9rZW5zICYmIGlzU3JjVG9rZW4pXG4gICAgICAgIG5vZGUuc3JjVG9rZW4gPSB0b2tlbjtcbiAgICByZXR1cm4gbm9kZTtcbn1cbmZ1bmN0aW9uIGNvbXBvc2VFbXB0eU5vZGUoY3R4LCBvZmZzZXQsIGJlZm9yZSwgcG9zLCB7IHNwYWNlQmVmb3JlLCBjb21tZW50LCBhbmNob3IsIHRhZywgZW5kIH0sIG9uRXJyb3IpIHtcbiAgICBjb25zdCB0b2tlbiA9IHtcbiAgICAgICAgdHlwZTogJ3NjYWxhcicsXG4gICAgICAgIG9mZnNldDogdXRpbEVtcHR5U2NhbGFyUG9zaXRpb24uZW1wdHlTY2FsYXJQb3NpdGlvbihvZmZzZXQsIGJlZm9yZSwgcG9zKSxcbiAgICAgICAgaW5kZW50OiAtMSxcbiAgICAgICAgc291cmNlOiAnJ1xuICAgIH07XG4gICAgY29uc3Qgbm9kZSA9IGNvbXBvc2VTY2FsYXIuY29tcG9zZVNjYWxhcihjdHgsIHRva2VuLCB0YWcsIG9uRXJyb3IpO1xuICAgIGlmIChhbmNob3IpIHtcbiAgICAgICAgbm9kZS5hbmNob3IgPSBhbmNob3Iuc291cmNlLnN1YnN0cmluZygxKTtcbiAgICAgICAgaWYgKG5vZGUuYW5jaG9yID09PSAnJylcbiAgICAgICAgICAgIG9uRXJyb3IoYW5jaG9yLCAnQkFEX0FMSUFTJywgJ0FuY2hvciBjYW5ub3QgYmUgYW4gZW1wdHkgc3RyaW5nJyk7XG4gICAgfVxuICAgIGlmIChzcGFjZUJlZm9yZSlcbiAgICAgICAgbm9kZS5zcGFjZUJlZm9yZSA9IHRydWU7XG4gICAgaWYgKGNvbW1lbnQpIHtcbiAgICAgICAgbm9kZS5jb21tZW50ID0gY29tbWVudDtcbiAgICAgICAgbm9kZS5yYW5nZVsyXSA9IGVuZDtcbiAgICB9XG4gICAgcmV0dXJuIG5vZGU7XG59XG5mdW5jdGlvbiBjb21wb3NlQWxpYXMoeyBvcHRpb25zIH0sIHsgb2Zmc2V0LCBzb3VyY2UsIGVuZCB9LCBvbkVycm9yKSB7XG4gICAgY29uc3QgYWxpYXMgPSBuZXcgQWxpYXMuQWxpYXMoc291cmNlLnN1YnN0cmluZygxKSk7XG4gICAgaWYgKGFsaWFzLnNvdXJjZSA9PT0gJycpXG4gICAgICAgIG9uRXJyb3Iob2Zmc2V0LCAnQkFEX0FMSUFTJywgJ0FsaWFzIGNhbm5vdCBiZSBhbiBlbXB0eSBzdHJpbmcnKTtcbiAgICBpZiAoYWxpYXMuc291cmNlLmVuZHNXaXRoKCc6JykpXG4gICAgICAgIG9uRXJyb3Iob2Zmc2V0ICsgc291cmNlLmxlbmd0aCAtIDEsICdCQURfQUxJQVMnLCAnQWxpYXMgZW5kaW5nIGluIDogaXMgYW1iaWd1b3VzJywgdHJ1ZSk7XG4gICAgY29uc3QgdmFsdWVFbmQgPSBvZmZzZXQgKyBzb3VyY2UubGVuZ3RoO1xuICAgIGNvbnN0IHJlID0gcmVzb2x2ZUVuZC5yZXNvbHZlRW5kKGVuZCwgdmFsdWVFbmQsIG9wdGlvbnMuc3RyaWN0LCBvbkVycm9yKTtcbiAgICBhbGlhcy5yYW5nZSA9IFtvZmZzZXQsIHZhbHVlRW5kLCByZS5vZmZzZXRdO1xuICAgIGlmIChyZS5jb21tZW50KVxuICAgICAgICBhbGlhcy5jb21tZW50ID0gcmUuY29tbWVudDtcbiAgICByZXR1cm4gYWxpYXM7XG59XG5cbmV4cG9ydHMuY29tcG9zZUVtcHR5Tm9kZSA9IGNvbXBvc2VFbXB0eU5vZGU7XG5leHBvcnRzLmNvbXBvc2VOb2RlID0gY29tcG9zZU5vZGU7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///7\n")},58:module=>{eval("/**\n * callbag-reject\n * -----------\n *\n * Callbag operator that rejects all source items that satisfy a predicate function.\n * Works on either pullable or listenable sources.\n *\n * `npm install callbag-reject`\n *\n * Example:\n *\n * const forEach = require('callbag-for-each');\n * const fromIter = require('callbag-from-iter');\n * const pipe = require('callbag-pipe');\n * const reject = require('callbag-reject'); \n * \n * const isEven = n => n % 2 === 0;\n *\n * pipe(\n * fromIter([1, 2, 3, 4]),\n * reject(isEven),\n * forEach(console.log) // 1, 3\n * );\n */\n\nconst reject = r => source => (start, sink) => {\n let ask;\n start === 0 && source(start, (t, d) => {\n if (t === start) {\n ask = d;\n }\n if (t === 1) {\n try {\n r(d) ? ask(t) : sink(t, d);\n } catch (e) {\n sink(2, e);\n }\n return;\n }\n sink(t, d);\n });\n};\n\nmodule.exports = reject;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTguanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vb2JzaWRpYW4tbWluZG1hcC1uZXh0Z2VuLy4vbm9kZV9tb2R1bGVzLy5wbnBtL2NhbGxiYWctcmVqZWN0QDEuMC4wL25vZGVfbW9kdWxlcy9jYWxsYmFnLXJlamVjdC9yZWFkbWUuanM/MGQxOSJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIGNhbGxiYWctcmVqZWN0XG4gKiAtLS0tLS0tLS0tLVxuICpcbiAqIENhbGxiYWcgb3BlcmF0b3IgdGhhdCByZWplY3RzIGFsbCBzb3VyY2UgaXRlbXMgdGhhdCBzYXRpc2Z5IGEgcHJlZGljYXRlIGZ1bmN0aW9uLlxuICogV29ya3Mgb24gZWl0aGVyIHB1bGxhYmxlIG9yIGxpc3RlbmFibGUgc291cmNlcy5cbiAqXG4gKiBgbnBtIGluc3RhbGwgY2FsbGJhZy1yZWplY3RgXG4gKlxuICogRXhhbXBsZTpcbiAqXG4gKiAgICAgY29uc3QgZm9yRWFjaCA9IHJlcXVpcmUoJ2NhbGxiYWctZm9yLWVhY2gnKTtcbiAqICAgICBjb25zdCBmcm9tSXRlciA9IHJlcXVpcmUoJ2NhbGxiYWctZnJvbS1pdGVyJyk7XG4gKiAgICAgY29uc3QgcGlwZSA9IHJlcXVpcmUoJ2NhbGxiYWctcGlwZScpO1xuICogICAgIGNvbnN0IHJlamVjdCA9IHJlcXVpcmUoJ2NhbGxiYWctcmVqZWN0Jyk7IFxuICogXG4gKiAgICAgY29uc3QgaXNFdmVuID0gbiA9PiBuICUgMiA9PT0gMDtcbiAqXG4gKiAgICAgcGlwZShcbiAqICAgICAgIGZyb21JdGVyKFsxLCAyLCAzLCA0XSksXG4gKiAgICAgICByZWplY3QoaXNFdmVuKSxcbiAqICAgICAgIGZvckVhY2goY29uc29sZS5sb2cpIC8vIDEsIDNcbiAqICAgICApO1xuICovXG5cbmNvbnN0IHJlamVjdCA9IHIgPT4gc291cmNlID0+IChzdGFydCwgc2luaykgPT4ge1xuICBsZXQgYXNrO1xuICBzdGFydCA9PT0gMCAmJiBzb3VyY2Uoc3RhcnQsICh0LCBkKSA9PiB7XG4gICAgaWYgKHQgPT09IHN0YXJ0KSB7XG4gICAgICBhc2sgPSBkO1xuICAgIH1cbiAgICBpZiAodCA9PT0gMSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcihkKSA/IGFzayh0KSA6IHNpbmsodCwgZCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHNpbmsoMiwgZSk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHNpbmsodCwgZCk7XG4gIH0pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSByZWplY3Q7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///58\n")},130:module=>{eval("/*\nLanguage: STEP Part 21\nContributors: Adam Joseph Cook \nDescription: Syntax highlighter for STEP Part 21 files (ISO 10303-21).\nWebsite: https://en.wikipedia.org/wiki/ISO_10303-21\nCategory: syntax\n*/\n\nfunction step21(hljs) {\n const STEP21_IDENT_RE = '[A-Z_][A-Z0-9_.]*';\n const STEP21_KEYWORDS = {\n $pattern: STEP21_IDENT_RE,\n keyword: [\n \"HEADER\",\n \"ENDSEC\",\n \"DATA\"\n ]\n };\n const STEP21_START = {\n className: 'meta',\n begin: 'ISO-10303-21;',\n relevance: 10\n };\n const STEP21_CLOSE = {\n className: 'meta',\n begin: 'END-ISO-10303-21;',\n relevance: 10\n };\n\n return {\n name: 'STEP Part 21',\n aliases: [\n 'p21',\n 'step',\n 'stp'\n ],\n case_insensitive: true, // STEP 21 is case insensitive in theory, in practice all non-comments are capitalized.\n keywords: STEP21_KEYWORDS,\n contains: [\n STEP21_START,\n STEP21_CLOSE,\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE,\n hljs.COMMENT('/\\\\*\\\\*!', '\\\\*/'),\n hljs.C_NUMBER_MODE,\n hljs.inherit(hljs.APOS_STRING_MODE, { illegal: null }),\n hljs.inherit(hljs.QUOTE_STRING_MODE, { illegal: null }),\n {\n className: 'string',\n begin: \"'\",\n end: \"'\"\n },\n {\n className: 'symbol',\n variants: [\n {\n begin: '#',\n end: '\\\\d+',\n illegal: '\\\\W'\n }\n ]\n }\n ]\n };\n}\n\nmodule.exports = step21;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTMwLmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QjtBQUM3QjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNENBQTRDLGVBQWU7QUFDM0QsNkNBQTZDLGVBQWU7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9vYnNpZGlhbi1taW5kbWFwLW5leHRnZW4vLi9ub2RlX21vZHVsZXMvLnBucG0vaGlnaGxpZ2h0LmpzQDExLjExLjEvbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3N0ZXAyMS5qcz84OTUxIl0sInNvdXJjZXNDb250ZW50IjpbIi8qXG5MYW5ndWFnZTogU1RFUCBQYXJ0IDIxXG5Db250cmlidXRvcnM6IEFkYW0gSm9zZXBoIENvb2sgPGFkYW0uam9zZXBoLmNvb2tAZ21haWwuY29tPlxuRGVzY3JpcHRpb246IFN5bnRheCBoaWdobGlnaHRlciBmb3IgU1RFUCBQYXJ0IDIxIGZpbGVzIChJU08gMTAzMDMtMjEpLlxuV2Vic2l0ZTogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSVNPXzEwMzAzLTIxXG5DYXRlZ29yeTogc3ludGF4XG4qL1xuXG5mdW5jdGlvbiBzdGVwMjEoaGxqcykge1xuICBjb25zdCBTVEVQMjFfSURFTlRfUkUgPSAnW0EtWl9dW0EtWjAtOV8uXSonO1xuICBjb25zdCBTVEVQMjFfS0VZV09SRFMgPSB7XG4gICAgJHBhdHRlcm46IFNURVAyMV9JREVOVF9SRSxcbiAgICBrZXl3b3JkOiBbXG4gICAgICBcIkhFQURFUlwiLFxuICAgICAgXCJFTkRTRUNcIixcbiAgICAgIFwiREFUQVwiXG4gICAgXVxuICB9O1xuICBjb25zdCBTVEVQMjFfU1RBUlQgPSB7XG4gICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgYmVnaW46ICdJU08tMTAzMDMtMjE7JyxcbiAgICByZWxldmFuY2U6IDEwXG4gIH07XG4gIGNvbnN0IFNURVAyMV9DTE9TRSA9IHtcbiAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICBiZWdpbjogJ0VORC1JU08tMTAzMDMtMjE7JyxcbiAgICByZWxldmFuY2U6IDEwXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnU1RFUCBQYXJ0IDIxJyxcbiAgICBhbGlhc2VzOiBbXG4gICAgICAncDIxJyxcbiAgICAgICdzdGVwJyxcbiAgICAgICdzdHAnXG4gICAgXSxcbiAgICBjYXNlX2luc2Vuc2l0aXZlOiB0cnVlLCAvLyBTVEVQIDIxIGlzIGNhc2UgaW5zZW5zaXRpdmUgaW4gdGhlb3J5LCBpbiBwcmFjdGljZSBhbGwgbm9uLWNvbW1lbnRzIGFyZSBjYXBpdGFsaXplZC5cbiAgICBrZXl3b3JkczogU1RFUDIxX0tFWVdPUkRTLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBTVEVQMjFfU1RBUlQsXG4gICAgICBTVEVQMjFfQ0xPU0UsXG4gICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5DT01NRU5UKCcvXFxcXCpcXFxcKiEnLCAnXFxcXCovJyksXG4gICAgICBobGpzLkNfTlVNQkVSX01PREUsXG4gICAgICBobGpzLmluaGVyaXQoaGxqcy5BUE9TX1NUUklOR19NT0RFLCB7IGlsbGVnYWw6IG51bGwgfSksXG4gICAgICBobGpzLmluaGVyaXQoaGxqcy5RVU9URV9TVFJJTkdfTU9ERSwgeyBpbGxlZ2FsOiBudWxsIH0pLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICBiZWdpbjogXCInXCIsXG4gICAgICAgIGVuZDogXCInXCJcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3N5bWJvbCcsXG4gICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46ICcjJyxcbiAgICAgICAgICAgIGVuZDogJ1xcXFxkKycsXG4gICAgICAgICAgICBpbGxlZ2FsOiAnXFxcXFcnXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9XG4gICAgXVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0ZXAyMTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///130\n")},132:module=>{eval("/*\nLanguage: LLVM IR\nAuthor: Michael Rodler \nDescription: language used as intermediate representation in the LLVM compiler framework\nWebsite: https://llvm.org/docs/LangRef.html\nCategory: assembler\nAudit: 2020\n*/\n\n/** @type LanguageFn */\nfunction llvm(hljs) {\n const regex = hljs.regex;\n const IDENT_RE = /([-a-zA-Z$._][\\w$.-]*)/;\n const TYPE = {\n className: 'type',\n begin: /\\bi\\d+(?=\\s|\\b)/\n };\n const OPERATOR = {\n className: 'operator',\n relevance: 0,\n begin: /=/\n };\n const PUNCTUATION = {\n className: 'punctuation',\n relevance: 0,\n begin: /,/\n };\n const NUMBER = {\n className: 'number',\n variants: [\n { begin: /[su]?0[xX][KMLHR]?[a-fA-F0-9]+/ },\n { begin: /[-+]?\\d+(?:[.]\\d+)?(?:[eE][-+]?\\d+(?:[.]\\d+)?)?/ }\n ],\n relevance: 0\n };\n const LABEL = {\n className: 'symbol',\n variants: [ { begin: /^\\s*[a-z]+:/ }, // labels\n ],\n relevance: 0\n };\n const VARIABLE = {\n className: 'variable',\n variants: [\n { begin: regex.concat(/%/, IDENT_RE) },\n { begin: /%\\d+/ },\n { begin: /#\\d+/ },\n ]\n };\n const FUNCTION = {\n className: 'title',\n variants: [\n { begin: regex.concat(/@/, IDENT_RE) },\n { begin: /@\\d+/ },\n { begin: regex.concat(/!/, IDENT_RE) },\n { begin: regex.concat(/!\\d+/, IDENT_RE) },\n // https://llvm.org/docs/LangRef.html#namedmetadatastructure\n // obviously a single digit can also be used in this fashion\n { begin: /!\\d+/ }\n ]\n };\n\n return {\n name: 'LLVM IR',\n // TODO: split into different categories of keywords\n keywords: {\n keyword: 'begin end true false declare define global '\n + 'constant private linker_private internal '\n + 'available_externally linkonce linkonce_odr weak '\n + 'weak_odr appending dllimport dllexport common '\n + 'default hidden protected extern_weak external '\n + 'thread_local zeroinitializer undef null to tail '\n + 'target triple datalayout volatile nuw nsw nnan '\n + 'ninf nsz arcp fast exact inbounds align '\n + 'addrspace section alias module asm sideeffect '\n + 'gc dbg linker_private_weak attributes blockaddress '\n + 'initialexec localdynamic localexec prefix unnamed_addr '\n + 'ccc fastcc coldcc x86_stdcallcc x86_fastcallcc '\n + 'arm_apcscc arm_aapcscc arm_aapcs_vfpcc ptx_device '\n + 'ptx_kernel intel_ocl_bicc msp430_intrcc spir_func '\n + 'spir_kernel x86_64_sysvcc x86_64_win64cc x86_thiscallcc '\n + 'cc c signext zeroext inreg sret nounwind '\n + 'noreturn noalias nocapture byval nest readnone '\n + 'readonly inlinehint noinline alwaysinline optsize ssp '\n + 'sspreq noredzone noimplicitfloat naked builtin cold '\n + 'nobuiltin noduplicate nonlazybind optnone returns_twice '\n + 'sanitize_address sanitize_memory sanitize_thread sspstrong '\n + 'uwtable returned type opaque eq ne slt sgt '\n + 'sle sge ult ugt ule uge oeq one olt ogt '\n + 'ole oge ord uno ueq une x acq_rel acquire '\n + 'alignstack atomic catch cleanup filter inteldialect '\n + 'max min monotonic nand personality release seq_cst '\n + 'singlethread umax umin unordered xchg add fadd '\n + 'sub fsub mul fmul udiv sdiv fdiv urem srem '\n + 'frem shl lshr ashr and or xor icmp fcmp '\n + 'phi call trunc zext sext fptrunc fpext uitofp '\n + 'sitofp fptoui fptosi inttoptr ptrtoint bitcast '\n + 'addrspacecast select va_arg ret br switch invoke '\n + 'unwind unreachable indirectbr landingpad resume '\n + 'malloc alloca free load store getelementptr '\n + 'extractelement insertelement shufflevector getresult '\n + 'extractvalue insertvalue atomicrmw cmpxchg fence '\n + 'argmemonly',\n type: 'void half bfloat float double fp128 x86_fp80 ppc_fp128 '\n + 'x86_amx x86_mmx ptr label token metadata opaque'\n },\n contains: [\n TYPE,\n // this matches \"empty comments\"...\n // ...because it's far more likely this is a statement terminator in\n // another language than an actual comment\n hljs.COMMENT(/;\\s*$/, null, { relevance: 0 }),\n hljs.COMMENT(/;/, /$/),\n {\n className: 'string',\n begin: /\"/,\n end: /\"/,\n contains: [\n {\n className: 'char.escape',\n match: /\\\\\\d\\d/\n }\n ]\n },\n FUNCTION,\n PUNCTUATION,\n OPERATOR,\n VARIABLE,\n LABEL,\n NUMBER\n ]\n };\n}\n\nmodule.exports = llvm;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTMyLmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSx5Q0FBeUM7QUFDakQsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0Isc0JBQXNCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsb0NBQW9DO0FBQzVDLFFBQVEsZUFBZTtBQUN2QixRQUFRLGVBQWU7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsb0NBQW9DO0FBQzVDLFFBQVEsZUFBZTtBQUN2QixRQUFRLG9DQUFvQztBQUM1QyxRQUFRLHVDQUF1QztBQUMvQztBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQixlQUFlLGNBQWM7QUFDbEQscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL29ic2lkaWFuLW1pbmRtYXAtbmV4dGdlbi8uL25vZGVfbW9kdWxlcy8ucG5wbS9oaWdobGlnaHQuanNAMTEuMTEuMS9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvbGx2bS5qcz81MDRhIl0sInNvdXJjZXNDb250ZW50IjpbIi8qXG5MYW5ndWFnZTogTExWTSBJUlxuQXV0aG9yOiBNaWNoYWVsIFJvZGxlciA8Y29udGFjdEBmMHJraS5hdD5cbkRlc2NyaXB0aW9uOiBsYW5ndWFnZSB1c2VkIGFzIGludGVybWVkaWF0ZSByZXByZXNlbnRhdGlvbiBpbiB0aGUgTExWTSBjb21waWxlciBmcmFtZXdvcmtcbldlYnNpdGU6IGh0dHBzOi8vbGx2bS5vcmcvZG9jcy9MYW5nUmVmLmh0bWxcbkNhdGVnb3J5OiBhc3NlbWJsZXJcbkF1ZGl0OiAyMDIwXG4qL1xuXG4vKiogQHR5cGUgTGFuZ3VhZ2VGbiAqL1xuZnVuY3Rpb24gbGx2bShobGpzKSB7XG4gIGNvbnN0IHJlZ2V4ID0gaGxqcy5yZWdleDtcbiAgY29uc3QgSURFTlRfUkUgPSAvKFstYS16QS1aJC5fXVtcXHckLi1dKikvO1xuICBjb25zdCBUWVBFID0ge1xuICAgIGNsYXNzTmFtZTogJ3R5cGUnLFxuICAgIGJlZ2luOiAvXFxiaVxcZCsoPz1cXHN8XFxiKS9cbiAgfTtcbiAgY29uc3QgT1BFUkFUT1IgPSB7XG4gICAgY2xhc3NOYW1lOiAnb3BlcmF0b3InLFxuICAgIHJlbGV2YW5jZTogMCxcbiAgICBiZWdpbjogLz0vXG4gIH07XG4gIGNvbnN0IFBVTkNUVUFUSU9OID0ge1xuICAgIGNsYXNzTmFtZTogJ3B1bmN0dWF0aW9uJyxcbiAgICByZWxldmFuY2U6IDAsXG4gICAgYmVnaW46IC8sL1xuICB9O1xuICBjb25zdCBOVU1CRVIgPSB7XG4gICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICB2YXJpYW50czogW1xuICAgICAgeyBiZWdpbjogL1tzdV0/MFt4WF1bS01MSFJdP1thLWZBLUYwLTldKy8gfSxcbiAgICAgIHsgYmVnaW46IC9bLStdP1xcZCsoPzpbLl1cXGQrKT8oPzpbZUVdWy0rXT9cXGQrKD86Wy5dXFxkKyk/KT8vIH1cbiAgICBdLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuICBjb25zdCBMQUJFTCA9IHtcbiAgICBjbGFzc05hbWU6ICdzeW1ib2wnLFxuICAgIHZhcmlhbnRzOiBbIHsgYmVnaW46IC9eXFxzKlthLXpdKzovIH0sIC8vIGxhYmVsc1xuICAgIF0sXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG4gIGNvbnN0IFZBUklBQkxFID0ge1xuICAgIGNsYXNzTmFtZTogJ3ZhcmlhYmxlJyxcbiAgICB2YXJpYW50czogW1xuICAgICAgeyBiZWdpbjogcmVnZXguY29uY2F0KC8lLywgSURFTlRfUkUpIH0sXG4gICAgICB7IGJlZ2luOiAvJVxcZCsvIH0sXG4gICAgICB7IGJlZ2luOiAvI1xcZCsvIH0sXG4gICAgXVxuICB9O1xuICBjb25zdCBGVU5DVElPTiA9IHtcbiAgICBjbGFzc05hbWU6ICd0aXRsZScsXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHsgYmVnaW46IHJlZ2V4LmNvbmNhdCgvQC8sIElERU5UX1JFKSB9LFxuICAgICAgeyBiZWdpbjogL0BcXGQrLyB9LFxuICAgICAgeyBiZWdpbjogcmVnZXguY29uY2F0KC8hLywgSURFTlRfUkUpIH0sXG4gICAgICB7IGJlZ2luOiByZWdleC5jb25jYXQoLyFcXGQrLywgSURFTlRfUkUpIH0sXG4gICAgICAvLyBodHRwczovL2xsdm0ub3JnL2RvY3MvTGFuZ1JlZi5odG1sI25hbWVkbWV0YWRhdGFzdHJ1Y3R1cmVcbiAgICAgIC8vIG9idmlvdXNseSBhIHNpbmdsZSBkaWdpdCBjYW4gYWxzbyBiZSB1c2VkIGluIHRoaXMgZmFzaGlvblxuICAgICAgeyBiZWdpbjogLyFcXGQrLyB9XG4gICAgXVxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogJ0xMVk0gSVInLFxuICAgIC8vIFRPRE86IHNwbGl0IGludG8gZGlmZmVyZW50IGNhdGVnb3JpZXMgb2Yga2V5d29yZHNcbiAgICBrZXl3b3Jkczoge1xuICAgICAga2V5d29yZDogJ2JlZ2luIGVuZCB0cnVlIGZhbHNlIGRlY2xhcmUgZGVmaW5lIGdsb2JhbCAnXG4gICAgICAgICsgJ2NvbnN0YW50IHByaXZhdGUgbGlua2VyX3ByaXZhdGUgaW50ZXJuYWwgJ1xuICAgICAgICArICdhdmFpbGFibGVfZXh0ZXJuYWxseSBsaW5rb25jZSBsaW5rb25jZV9vZHIgd2VhayAnXG4gICAgICAgICsgJ3dlYWtfb2RyIGFwcGVuZGluZyBkbGxpbXBvcnQgZGxsZXhwb3J0IGNvbW1vbiAnXG4gICAgICAgICsgJ2RlZmF1bHQgaGlkZGVuIHByb3RlY3RlZCBleHRlcm5fd2VhayBleHRlcm5hbCAnXG4gICAgICAgICsgJ3RocmVhZF9sb2NhbCB6ZXJvaW5pdGlhbGl6ZXIgdW5kZWYgbnVsbCB0byB0YWlsICdcbiAgICAgICAgKyAndGFyZ2V0IHRyaXBsZSBkYXRhbGF5b3V0IHZvbGF0aWxlIG51dyBuc3cgbm5hbiAnXG4gICAgICAgICsgJ25pbmYgbnN6IGFyY3AgZmFzdCBleGFjdCBpbmJvdW5kcyBhbGlnbiAnXG4gICAgICAgICsgJ2FkZHJzcGFjZSBzZWN0aW9uIGFsaWFzIG1vZHVsZSBhc20gc2lkZWVmZmVjdCAnXG4gICAgICAgICsgJ2djIGRiZyBsaW5rZXJfcHJpdmF0ZV93ZWFrIGF0dHJpYnV0ZXMgYmxvY2thZGRyZXNzICdcbiAgICAgICAgKyAnaW5pdGlhbGV4ZWMgbG9jYWxkeW5hbWljIGxvY2FsZXhlYyBwcmVmaXggdW5uYW1lZF9hZGRyICdcbiAgICAgICAgKyAnY2NjIGZhc3RjYyBjb2xkY2MgeDg2X3N0ZGNhbGxjYyB4ODZfZmFzdGNhbGxjYyAnXG4gICAgICAgICsgJ2FybV9hcGNzY2MgYXJtX2FhcGNzY2MgYXJtX2FhcGNzX3ZmcGNjIHB0eF9kZXZpY2UgJ1xuICAgICAgICArICdwdHhfa2VybmVsIGludGVsX29jbF9iaWNjIG1zcDQzMF9pbnRyY2Mgc3Bpcl9mdW5jICdcbiAgICAgICAgKyAnc3Bpcl9rZXJuZWwgeDg2XzY0X3N5c3ZjYyB4ODZfNjRfd2luNjRjYyB4ODZfdGhpc2NhbGxjYyAnXG4gICAgICAgICsgJ2NjIGMgc2lnbmV4dCB6ZXJvZXh0IGlucmVnIHNyZXQgbm91bndpbmQgJ1xuICAgICAgICArICdub3JldHVybiBub2FsaWFzIG5vY2FwdHVyZSBieXZhbCBuZXN0IHJlYWRub25lICdcbiAgICAgICAgKyAncmVhZG9ubHkgaW5saW5laGludCBub2lubGluZSBhbHdheXNpbmxpbmUgb3B0c2l6ZSBzc3AgJ1xuICAgICAgICArICdzc3ByZXEgbm9yZWR6b25lIG5vaW1wbGljaXRmbG9hdCBuYWtlZCBidWlsdGluIGNvbGQgJ1xuICAgICAgICArICdub2J1aWx0aW4gbm9kdXBsaWNhdGUgbm9ubGF6eWJpbmQgb3B0bm9uZSByZXR1cm5zX3R3aWNlICdcbiAgICAgICAgKyAnc2FuaXRpemVfYWRkcmVzcyBzYW5pdGl6ZV9tZW1vcnkgc2FuaXRpemVfdGhyZWFkIHNzcHN0cm9uZyAnXG4gICAgICAgICsgJ3V3dGFibGUgcmV0dXJuZWQgdHlwZSBvcGFxdWUgZXEgbmUgc2x0IHNndCAnXG4gICAgICAgICsgJ3NsZSBzZ2UgdWx0IHVndCB1bGUgdWdlIG9lcSBvbmUgb2x0IG9ndCAnXG4gICAgICAgICsgJ29sZSBvZ2Ugb3JkIHVubyB1ZXEgdW5lIHggYWNxX3JlbCBhY3F1aXJlICdcbiAgICAgICAgKyAnYWxpZ25zdGFjayBhdG9taWMgY2F0Y2ggY2xlYW51cCBmaWx0ZXIgaW50ZWxkaWFsZWN0ICdcbiAgICAgICAgKyAnbWF4IG1pbiBtb25vdG9uaWMgbmFuZCBwZXJzb25hbGl0eSByZWxlYXNlIHNlcV9jc3QgJ1xuICAgICAgICArICdzaW5nbGV0aHJlYWQgdW1heCB1bWluIHVub3JkZXJlZCB4Y2hnIGFkZCBmYWRkICdcbiAgICAgICAgKyAnc3ViIGZzdWIgbXVsIGZtdWwgdWRpdiBzZGl2IGZkaXYgdXJlbSBzcmVtICdcbiAgICAgICAgKyAnZnJlbSBzaGwgbHNociBhc2hyIGFuZCBvciB4b3IgaWNtcCBmY21wICdcbiAgICAgICAgKyAncGhpIGNhbGwgdHJ1bmMgemV4dCBzZXh0IGZwdHJ1bmMgZnBleHQgdWl0b2ZwICdcbiAgICAgICAgKyAnc2l0b2ZwIGZwdG91aSBmcHRvc2kgaW50dG9wdHIgcHRydG9pbnQgYml0Y2FzdCAnXG4gICAgICAgICsgJ2FkZHJzcGFjZWNhc3Qgc2VsZWN0IHZhX2FyZyByZXQgYnIgc3dpdGNoIGludm9rZSAnXG4gICAgICAgICsgJ3Vud2luZCB1bnJlYWNoYWJsZSBpbmRpcmVjdGJyIGxhbmRpbmdwYWQgcmVzdW1lICdcbiAgICAgICAgKyAnbWFsbG9jIGFsbG9jYSBmcmVlIGxvYWQgc3RvcmUgZ2V0ZWxlbWVudHB0ciAnXG4gICAgICAgICsgJ2V4dHJhY3RlbGVtZW50IGluc2VydGVsZW1lbnQgc2h1ZmZsZXZlY3RvciBnZXRyZXN1bHQgJ1xuICAgICAgICArICdleHRyYWN0dmFsdWUgaW5zZXJ0dmFsdWUgYXRvbWljcm13IGNtcHhjaGcgZmVuY2UgJ1xuICAgICAgICArICdhcmdtZW1vbmx5JyxcbiAgICAgIHR5cGU6ICd2b2lkIGhhbGYgYmZsb2F0IGZsb2F0IGRvdWJsZSBmcDEyOCB4ODZfZnA4MCBwcGNfZnAxMjggJ1xuICAgICAgICArICd4ODZfYW14IHg4Nl9tbXggcHRyIGxhYmVsIHRva2VuIG1ldGFkYXRhIG9wYXF1ZSdcbiAgICB9LFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBUWVBFLFxuICAgICAgLy8gdGhpcyBtYXRjaGVzIFwiZW1wdHkgY29tbWVudHNcIi4uLlxuICAgICAgLy8gLi4uYmVjYXVzZSBpdCdzIGZhciBtb3JlIGxpa2VseSB0aGlzIGlzIGEgc3RhdGVtZW50IHRlcm1pbmF0b3IgaW5cbiAgICAgIC8vIGFub3RoZXIgbGFuZ3VhZ2UgdGhhbiBhbiBhY3R1YWwgY29tbWVudFxuICAgICAgaGxqcy5DT01NRU5UKC87XFxzKiQvLCBudWxsLCB7IHJlbGV2YW5jZTogMCB9KSxcbiAgICAgIGhsanMuQ09NTUVOVCgvOy8sIC8kLyksXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgIGJlZ2luOiAvXCIvLFxuICAgICAgICBlbmQ6IC9cIi8sXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAnY2hhci5lc2NhcGUnLFxuICAgICAgICAgICAgbWF0Y2g6IC9cXFxcXFxkXFxkL1xuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIEZVTkNUSU9OLFxuICAgICAgUFVOQ1RVQVRJT04sXG4gICAgICBPUEVSQVRPUixcbiAgICAgIFZBUklBQkxFLFxuICAgICAgTEFCRUwsXG4gICAgICBOVU1CRVJcbiAgICBdXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbGx2bTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///132\n")},140:module=>{eval("/*\nLanguage: RenderMan RIB\nAuthor: Konstantin Evdokimenko \nContributors: Shuen-Huei Guan \nWebsite: https://renderman.pixar.com/resources/RenderMan_20/ribBinding.html\nCategory: graphics\n*/\n\nfunction rib(hljs) {\n return {\n name: 'RenderMan RIB',\n keywords:\n 'ArchiveRecord AreaLightSource Atmosphere Attribute AttributeBegin AttributeEnd Basis '\n + 'Begin Blobby Bound Clipping ClippingPlane Color ColorSamples ConcatTransform Cone '\n + 'CoordinateSystem CoordSysTransform CropWindow Curves Cylinder DepthOfField Detail '\n + 'DetailRange Disk Displacement Display End ErrorHandler Exposure Exterior Format '\n + 'FrameAspectRatio FrameBegin FrameEnd GeneralPolygon GeometricApproximation Geometry '\n + 'Hider Hyperboloid Identity Illuminate Imager Interior LightSource '\n + 'MakeCubeFaceEnvironment MakeLatLongEnvironment MakeShadow MakeTexture Matte '\n + 'MotionBegin MotionEnd NuPatch ObjectBegin ObjectEnd ObjectInstance Opacity Option '\n + 'Orientation Paraboloid Patch PatchMesh Perspective PixelFilter PixelSamples '\n + 'PixelVariance Points PointsGeneralPolygons PointsPolygons Polygon Procedural Projection '\n + 'Quantize ReadArchive RelativeDetail ReverseOrientation Rotate Scale ScreenWindow '\n + 'ShadingInterpolation ShadingRate Shutter Sides Skew SolidBegin SolidEnd Sphere '\n + 'SubdivisionMesh Surface TextureCoordinates Torus Transform TransformBegin TransformEnd '\n + 'TransformPoints Translate TrimCurve WorldBegin WorldEnd',\n illegal: '{eval('/*\nLanguage: ISBL\nAuthor: Dmitriy Tarasov \nDescription: built-in language DIRECTUM\nCategory: enterprise\n*/\n\nfunction isbl(hljs) {\n // Определение идентификаторов\n const UNDERSCORE_IDENT_RE = "[A-Za-zА-Яа-яёЁ_!][A-Za-zА-Яа-яёЁ_0-9]*";\n\n // Определение имен функций\n const FUNCTION_NAME_IDENT_RE = "[A-Za-zА-Яа-яёЁ_][A-Za-zА-Яа-яёЁ_0-9]*";\n\n // keyword : ключевые слова\n const KEYWORD =\n "and и else иначе endexcept endfinally endforeach конецвсе endif конецесли endwhile конецпока "\n + "except exitfor finally foreach все if если in в not не or или try while пока ";\n\n // SYSRES Constants\n const sysres_constants =\n "SYSRES_CONST_ACCES_RIGHT_TYPE_EDIT "\n + "SYSRES_CONST_ACCES_RIGHT_TYPE_FULL "\n + "SYSRES_CONST_ACCES_RIGHT_TYPE_VIEW "\n + "SYSRES_CONST_ACCESS_MODE_REQUISITE_CODE "\n + "SYSRES_CONST_ACCESS_NO_ACCESS_VIEW "\n + "SYSRES_CONST_ACCESS_NO_ACCESS_VIEW_CODE "\n + "SYSRES_CONST_ACCESS_RIGHTS_ADD_REQUISITE_CODE "\n + "SYSRES_CONST_ACCESS_RIGHTS_ADD_REQUISITE_YES_CODE "\n + "SYSRES_CONST_ACCESS_RIGHTS_CHANGE_REQUISITE_CODE "\n + "SYSRES_CONST_ACCESS_RIGHTS_CHANGE_REQUISITE_YES_CODE "\n + "SYSRES_CONST_ACCESS_RIGHTS_DELETE_REQUISITE_CODE "\n + "SYSRES_CONST_ACCESS_RIGHTS_DELETE_REQUISITE_YES_CODE "\n + "SYSRES_CONST_ACCESS_RIGHTS_EXECUTE_REQUISITE_CODE "\n + "SYSRES_CONST_ACCESS_RIGHTS_EXECUTE_REQUISITE_YES_CODE "\n + "SYSRES_CONST_ACCESS_RIGHTS_NO_ACCESS_REQUISITE_CODE "\n + "SYSRES_CONST_ACCESS_RIGHTS_NO_ACCESS_REQUISITE_YES_CODE "\n + "SYSRES_CONST_ACCESS_RIGHTS_RATIFY_REQUISITE_CODE "\n + "SYSRES_CONST_ACCESS_RIGHTS_RATIFY_REQUISITE_YES_CODE "\n + "SYSRES_CONST_ACCESS_RIGHTS_REQUISITE_CODE "\n + "SYSRES_CONST_ACCESS_RIGHTS_VIEW "\n + "SYSRES_CONST_ACCESS_RIGHTS_VIEW_CODE "\n + "SYSRES_CONST_ACCESS_RIGHTS_VIEW_REQUISITE_CODE "\n + "SYSRES_CONST_ACCESS_RIGHTS_VIEW_REQUISITE_YES_CODE "\n + "SYSRES_CONST_ACCESS_TYPE_CHANGE "\n + "SYSRES_CONST_ACCESS_TYPE_CHANGE_CODE "\n + "SYSRES_CONST_ACCESS_TYPE_EXISTS "\n + "SYSRES_CONST_ACCESS_TYPE_EXISTS_CODE "\n + "SYSRES_CONST_ACCESS_TYPE_FULL "\n + "SYSRES_CONST_ACCESS_TYPE_FULL_CODE "\n + "SYSRES_CONST_ACCESS_TYPE_VIEW "\n + "SYSRES_CONST_ACCESS_TYPE_VIEW_CODE "\n + "SYSRES_CONST_ACTION_TYPE_ABORT "\n + "SYSRES_CONST_ACTION_TYPE_ACCEPT "\n + "SYSRES_CONST_ACTION_TYPE_ACCESS_RIGHTS "\n + "SYSRES_CONST_ACTION_TYPE_ADD_ATTACHMENT "\n + "SYSRES_CONST_ACTION_TYPE_CHANGE_CARD "\n + "SYSRES_CONST_ACTION_TYPE_CHANGE_KIND "\n + "SYSRES_CONST_ACTION_TYPE_CHANGE_STORAGE "\n + "SYSRES_CONST_ACTION_TYPE_CONTINUE "\n + "SYSRES_CONST_ACTION_TYPE_COPY "\n + "SYSRES_CONST_ACTION_TYPE_CREATE "\n + "SYSRES_CONST_ACTION_TYPE_CREATE_VERSION "\n + "SYSRES_CONST_ACTION_TYPE_DELETE "\n + "SYSRES_CONST_ACTION_TYPE_DELETE_ATTACHMENT "\n + "SYSRES_CONST_ACTION_TYPE_DELETE_VERSION "\n + "SYSRES_CONST_ACTION_TYPE_DISABLE_DELEGATE_ACCESS_RIGHTS "\n + "SYSRES_CONST_ACTION_TYPE_ENABLE_DELEGATE_ACCESS_RIGHTS "\n + "SYSRES_CONST_ACTION_TYPE_ENCRYPTION_BY_CERTIFICATE "\n + "SYSRES_CONST_ACTION_TYPE_ENCRYPTION_BY_CERTIFICATE_AND_PASSWORD "\n + "SYSRES_CONST_ACTION_TYPE_ENCRYPTION_BY_PASSWORD "\n + "SYSRES_CONST_ACTION_TYPE_EXPORT_WITH_LOCK "\n + "SYSRES_CONST_ACTION_TYPE_EXPORT_WITHOUT_LOCK "\n + "SYSRES_CONST_ACTION_TYPE_IMPORT_WITH_UNLOCK "\n + "SYSRES_CONST_ACTION_TYPE_IMPORT_WITHOUT_UNLOCK "\n + "SYSRES_CONST_ACTION_TYPE_LIFE_CYCLE_STAGE "\n + "SYSRES_CONST_ACTION_TYPE_LOCK "\n + "SYSRES_CONST_ACTION_TYPE_LOCK_FOR_SERVER "\n + "SYSRES_CONST_ACTION_TYPE_LOCK_MODIFY "\n + "SYSRES_CONST_ACTION_TYPE_MARK_AS_READED "\n + "SYSRES_CONST_ACTION_TYPE_MARK_AS_UNREADED "\n + "SYSRES_CONST_ACTION_TYPE_MODIFY "\n + "SYSRES_CONST_ACTION_TYPE_MODIFY_CARD "\n + "SYSRES_CONST_ACTION_TYPE_MOVE_TO_ARCHIVE "\n + "SYSRES_CONST_ACTION_TYPE_OFF_ENCRYPTION "\n + "SYSRES_CONST_ACTION_TYPE_PASSWORD_CHANGE "\n + "SYSRES_CONST_ACTION_TYPE_PERFORM "\n + "SYSRES_CONST_ACTION_TYPE_RECOVER_FROM_LOCAL_COPY "\n + "SYSRES_CONST_ACTION_TYPE_RESTART "\n + "SYSRES_CONST_ACTION_TYPE_RESTORE_FROM_ARCHIVE "\n + "SYSRES_CONST_ACTION_TYPE_REVISION "\n + "SYSRES_CONST_ACTION_TYPE_SEND_BY_MAIL "\n + "SYSRES_CONST_ACTION_TYPE_SIGN "\n + "SYSRES_CONST_ACTION_TYPE_START "\n + "SYSRES_CONST_ACTION_TYPE_UNLOCK "\n + "SYSRES_CONST_ACTION_TYPE_UNLOCK_FROM_SERVER "\n + "SYSRES_CONST_ACTION_TYPE_VERSION_STATE "\n + "SYSRES_CONST_ACTION_TYPE_VERSION_VISIBILITY "\n + "SYSRES_CONST_ACTION_TYPE_VIEW "\n + "SYSRES_CONST_ACTION_TYPE_VIEW_SHADOW_COPY "\n + "SYSRES_CONST_ACTION_TYPE_WORKFLOW_DESCRIPTION_MODIFY "\n + "SYSRES_CONST_ACTION_TYPE_WRITE_HISTORY "\n + "SYSRES_CONST_ACTIVE_VERSION_STATE_PICK_VALUE "\n + "SYSRES_CONST_ADD_REFERENCE_MODE_NAME "\n + "SYSRES_CONST_ADDITION_REQUISITE_CODE "\n + "SYSRES_CONST_ADDITIONAL_PARAMS_REQUISITE_CODE "\n + "SYSRES_CONST_ADITIONAL_JOB_END_DATE_REQUISITE_NAME "\n + "SYSRES_CONST_ADITIONAL_JOB_READ_REQUISITE_NAME "\n + "SYSRES_CONST_ADITIONAL_JOB_START_DATE_REQUISITE_NAME "\n + "SYSRES_CONST_ADITIONAL_JOB_STATE_REQUISITE_NAME "\n + "SYSRES_CONST_ADMINISTRATION_HISTORY_ADDING_USER_TO_GROUP_ACTION "\n + "SYSRES_CONST_ADMINISTRATION_HISTORY_ADDING_USER_TO_GROUP_ACTION_CODE "\n + "SYSRES_CONST_ADMINISTRATION_HISTORY_CREATION_COMP_ACTION "\n + "SYSRES_CONST_ADMINISTRATION_HISTORY_CREATION_COMP_ACTION_CODE "\n + "SYSRES_CONST_ADMINISTRATION_HISTORY_CREATION_GROUP_ACTION "\n + "SYSRES_CONST_ADMINISTRATION_HISTORY_CREATION_GROUP_ACTION_CODE "\n + "SYSRES_CONST_ADMINISTRATION_HISTORY_CREATION_USER_ACTION "\n + "SYSRES_CONST_ADMINISTRATION_HISTORY_CREATION_USER_ACTION_CODE "\n + "SYSRES_CONST_ADMINISTRATION_HISTORY_DATABASE_USER_CREATION "\n + "SYSRES_CONST_ADMINISTRATION_HISTORY_DATABASE_USER_CREATION_ACTION "\n + "SYSRES_CONST_ADMINISTRATION_HISTORY_DATABASE_USER_DELETION "\n + "SYSRES_CONST_ADMINISTRATION_HISTORY_DATABASE_USER_DELETION_ACTION "\n + "SYSRES_CONST_ADMINISTRATION_HISTORY_DELETION_COMP_ACTION "\n + "SYSRES_CONST_ADMINISTRATION_HISTORY_DELETION_COMP_ACTION_CODE "\n + "SYSRES_CONST_ADMINISTRATION_HISTORY_DELETION_GROUP_ACTION "\n + "SYSRES_CONST_ADMINISTRATION_HISTORY_DELETION_GROUP_ACTION_CODE "\n + "SYSRES_CONST_ADMINISTRATION_HISTORY_DELETION_USER_ACTION "\n + "SYSRES_CONST_ADMINISTRATION_HISTORY_DELETION_USER_ACTION_CODE "\n + "SYSRES_CONST_ADMINISTRATION_HISTORY_DELETION_USER_FROM_GROUP_ACTION "\n + "SYSRES_CONST_ADMINISTRATION_HISTORY_DELETION_USER_FROM_GROUP_ACTION_CODE "\n + "SYSRES_CONST_ADMINISTRATION_HISTORY_GRANTING_FILTERER_ACTION "\n + "SYSRES_CONST_ADMINISTRATION_HISTORY_GRANTING_FILTERER_ACTION_CODE "\n + "SYSRES_CONST_ADMINISTRATION_HISTORY_GRANTING_FILTERER_RESTRICTION_ACTION "\n + "SYSRES_CONST_ADMINISTRATION_HISTORY_GRANTING_FILTERER_RESTRICTION_ACTION_CODE "\n + "SYSRES_CONST_ADMINISTRATION_HISTORY_GRANTING_PRIVILEGE_ACTION "\n + "SYSRES_CONST_ADMINISTRATION_HISTORY_GRANTING_PRIVILEGE_ACTION_CODE "\n + "SYSRES_CONST_ADMINISTRATION_HISTORY_GRANTING_RIGHTS_ACTION "\n + "SYSRES_CONST_ADMINISTRATION_HISTORY_GRANTING_RIGHTS_ACTION_CODE "\n + "SYSRES_CONST_ADMINISTRATION_HISTORY_IS_MAIN_SERVER_CHANGED_ACTION "\n + "SYSRES_CONST_ADMINISTRATION_HISTORY_IS_MAIN_SERVER_CHANGED_ACTION_CODE "\n + "SYSRES_CONST_ADMINISTRATION_HISTORY_IS_PUBLIC_CHANGED_ACTION "\n + "SYSRES_CONST_ADMINISTRATION_HISTORY_IS_PUBLIC_CHANGED_ACTION_CODE "\n + "SYSRES_CONST_ADMINISTRATION_HISTORY_REMOVING_FILTERER_ACTION "\n + "SYSRES_CONST_ADMINISTRATION_HISTORY_REMOVING_FILTERER_ACTION_CODE "\n + "SYSRES_CONST_ADMINISTRATION_HISTORY_REMOVING_FILTERER_RESTRICTION_ACTION "\n + "SYSRES_CONST_ADMINISTRATION_HISTORY_REMOVING_FILTERER_RESTRICTION_ACTION_CODE "\n + "SYSRES_CONST_ADMINISTRATION_HISTORY_REMOVING_PRIVILEGE_ACTION "\n + "SYSRES_CONST_ADMINISTRATION_HISTORY_REMOVING_PRIVILEGE_ACTION_CODE "\n + "SYSRES_CONST_ADMINISTRATION_HISTORY_REMOVING_RIGHTS_ACTION "\n + "SYSRES_CONST_ADMINISTRATION_HISTORY_REMOVING_RIGHTS_ACTION_CODE "\n + "SYSRES_CONST_ADMINISTRATION_HISTORY_SERVER_LOGIN_CREATION "\n + "SYSRES_CONST_ADMINISTRATION_HISTORY_SERVER_LOGIN_CREATION_ACTION "\n + "SYSRES_CONST_ADMINISTRATION_HISTORY_SERVER_LOGIN_DELETION "\n + "SYSRES_CONST_ADMINISTRATION_HISTORY_SERVER_LOGIN_DELETION_ACTION "\n + "SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_CATEGORY_ACTION "\n + "SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_CATEGORY_ACTION_CODE "\n + "SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_COMP_TITLE_ACTION "\n + "SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_COMP_TITLE_ACTION_CODE "\n + "SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_FULL_NAME_ACTION "\n + "SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_FULL_NAME_ACTION_CODE "\n + "SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_GROUP_ACTION "\n + "SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_GROUP_ACTION_CODE "\n + "SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_PARENT_GROUP_ACTION "\n + "SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_PARENT_GROUP_ACTION_CODE "\n + "SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_USER_AUTH_TYPE_ACTION "\n + "SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_USER_AUTH_TYPE_ACTION_CODE "\n + "SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_USER_LOGIN_ACTION "\n + "SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_USER_LOGIN_ACTION_CODE "\n + "SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_USER_STATUS_ACTION "\n + "SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_USER_STATUS_ACTION_CODE "\n + "SYSRES_CONST_ADMINISTRATION_HISTORY_USER_PASSWORD_CHANGE "\n + "SYSRES_CONST_ADMINISTRATION_HISTORY_USER_PASSWORD_CHANGE_ACTION "\n + "SYSRES_CONST_ALL_ACCEPT_CONDITION_RUS "\n + "SYSRES_CONST_ALL_USERS_GROUP "\n + "SYSRES_CONST_ALL_USERS_GROUP_NAME "\n + "SYSRES_CONST_ALL_USERS_SERVER_GROUP_NAME "\n + "SYSRES_CONST_ALLOWED_ACCESS_TYPE_CODE "\n + "SYSRES_CONST_ALLOWED_ACCESS_TYPE_NAME "\n + "SYSRES_CONST_APP_VIEWER_TYPE_REQUISITE_CODE "\n + "SYSRES_CONST_APPROVING_SIGNATURE_NAME "\n + "SYSRES_CONST_APPROVING_SIGNATURE_REQUISITE_CODE "\n + "SYSRES_CONST_ASSISTANT_SUBSTITUE_TYPE "\n + "SYSRES_CONST_ASSISTANT_SUBSTITUE_TYPE_CODE "\n + "SYSRES_CONST_ATTACH_TYPE_COMPONENT_TOKEN "\n + "SYSRES_CONST_ATTACH_TYPE_DOC "\n + "SYSRES_CONST_ATTACH_TYPE_EDOC "\n + "SYSRES_CONST_ATTACH_TYPE_FOLDER "\n + "SYSRES_CONST_ATTACH_TYPE_JOB "\n + "SYSRES_CONST_ATTACH_TYPE_REFERENCE "\n + "SYSRES_CONST_ATTACH_TYPE_TASK "\n + "SYSRES_CONST_AUTH_ENCODED_PASSWORD "\n + "SYSRES_CONST_AUTH_ENCODED_PASSWORD_CODE "\n + "SYSRES_CONST_AUTH_NOVELL "\n + "SYSRES_CONST_AUTH_PASSWORD "\n + "SYSRES_CONST_AUTH_PASSWORD_CODE "\n + "SYSRES_CONST_AUTH_WINDOWS "\n + "SYSRES_CONST_AUTHENTICATING_SIGNATURE_NAME "\n + "SYSRES_CONST_AUTHENTICATING_SIGNATURE_REQUISITE_CODE "\n + "SYSRES_CONST_AUTO_ENUM_METHOD_FLAG "\n + "SYSRES_CONST_AUTO_NUMERATION_CODE "\n + "SYSRES_CONST_AUTO_STRONG_ENUM_METHOD_FLAG "\n + "SYSRES_CONST_AUTOTEXT_NAME_REQUISITE_CODE "\n + "SYSRES_CONST_AUTOTEXT_TEXT_REQUISITE_CODE "\n + "SYSRES_CONST_AUTOTEXT_USAGE_ALL "\n + "SYSRES_CONST_AUTOTEXT_USAGE_ALL_CODE "\n + "SYSRES_CONST_AUTOTEXT_USAGE_SIGN "\n + "SYSRES_CONST_AUTOTEXT_USAGE_SIGN_CODE "\n + "SYSRES_CONST_AUTOTEXT_USAGE_WORK "\n + "SYSRES_CONST_AUTOTEXT_USAGE_WORK_CODE "\n + "SYSRES_CONST_AUTOTEXT_USE_ANYWHERE_CODE "\n + "SYSRES_CONST_AUTOTEXT_USE_ON_SIGNING_CODE "\n + "SYSRES_CONST_AUTOTEXT_USE_ON_WORK_CODE "\n + "SYSRES_CONST_BEGIN_DATE_REQUISITE_CODE "\n + "SYSRES_CONST_BLACK_LIFE_CYCLE_STAGE_FONT_COLOR "\n + "SYSRES_CONST_BLUE_LIFE_CYCLE_STAGE_FONT_COLOR "\n + "SYSRES_CONST_BTN_PART "\n + "SYSRES_CONST_CALCULATED_ROLE_TYPE_CODE "\n + "SYSRES_CONST_CALL_TYPE_VARIABLE_BUTTON_VALUE "\n + "SYSRES_CONST_CALL_TYPE_VARIABLE_PROGRAM_VALUE "\n + "SYSRES_CONST_CANCEL_MESSAGE_FUNCTION_RESULT "\n + "SYSRES_CONST_CARD_PART "\n + "SYSRES_CONST_CARD_REFERENCE_MODE_NAME "\n + "SYSRES_CONST_CERTIFICATE_TYPE_REQUISITE_ENCRYPT_VALUE "\n + "SYSRES_CONST_CERTIFICATE_TYPE_REQUISITE_SIGN_AND_ENCRYPT_VALUE "\n + "SYSRES_CONST_CERTIFICATE_TYPE_REQUISITE_SIGN_VALUE "\n + "SYSRES_CONST_CHECK_PARAM_VALUE_DATE_PARAM_TYPE "\n + "SYSRES_CONST_CHECK_PARAM_VALUE_FLOAT_PARAM_TYPE "\n + "SYSRES_CONST_CHECK_PARAM_VALUE_INTEGER_PARAM_TYPE "\n + "SYSRES_CONST_CHECK_PARAM_VALUE_PICK_PARAM_TYPE "\n + "SYSRES_CONST_CHECK_PARAM_VALUE_REEFRENCE_PARAM_TYPE "\n + "SYSRES_CONST_CLOSED_RECORD_FLAG_VALUE_FEMININE "\n + "SYSRES_CONST_CLOSED_RECORD_FLAG_VALUE_MASCULINE "\n + "SYSRES_CONST_CODE_COMPONENT_TYPE_ADMIN "\n + "SYSRES_CONST_CODE_COMPONENT_TYPE_DEVELOPER "\n + "SYSRES_CONST_CODE_COMPONENT_TYPE_DOCS "\n + "SYSRES_CONST_CODE_COMPONENT_TYPE_EDOC_CARDS "\n + "SYSRES_CONST_CODE_COMPONENT_TYPE_EXTERNAL_EXECUTABLE "\n + "SYSRES_CONST_CODE_COMPONENT_TYPE_OTHER "\n + "SYSRES_CONST_CODE_COMPONENT_TYPE_REFERENCE "\n + "SYSRES_CONST_CODE_COMPONENT_TYPE_REPORT "\n + "SYSRES_CONST_CODE_COMPONENT_TYPE_SCRIPT "\n + "SYSRES_CONST_CODE_COMPONENT_TYPE_URL "\n + "SYSRES_CONST_CODE_REQUISITE_ACCESS "\n + "SYSRES_CONST_CODE_REQUISITE_CODE "\n + "SYSRES_CONST_CODE_REQUISITE_COMPONENT "\n + "SYSRES_CONST_CODE_REQUISITE_DESCRIPTION "\n + "SYSRES_CONST_CODE_REQUISITE_EXCLUDE_COMPONENT "\n + "SYSRES_CONST_CODE_REQUISITE_RECORD "\n + "SYSRES_CONST_COMMENT_REQ_CODE "\n + "SYSRES_CONST_COMMON_SETTINGS_REQUISITE_CODE "\n + "SYSRES_CONST_COMP_CODE_GRD "\n + "SYSRES_CONST_COMPONENT_GROUP_TYPE_REQUISITE_CODE "\n + "SYSRES_CONST_COMPONENT_TYPE_ADMIN_COMPONENTS "\n + "SYSRES_CONST_COMPONENT_TYPE_DEVELOPER_COMPONENTS "\n + "SYSRES_CONST_COMPONENT_TYPE_DOCS "\n + "SYSRES_CONST_COMPONENT_TYPE_EDOC_CARDS "\n + "SYSRES_CONST_COMPONENT_TYPE_EDOCS "\n + "SYSRES_CONST_COMPONENT_TYPE_EXTERNAL_EXECUTABLE "\n + "SYSRES_CONST_COMPONENT_TYPE_OTHER "\n + "SYSRES_CONST_COMPONENT_TYPE_REFERENCE_TYPES "\n + "SYSRES_CONST_COMPONENT_TYPE_REFERENCES "\n + "SYSRES_CONST_COMPONENT_TYPE_REPORTS "\n + "SYSRES_CONST_COMPONENT_TYPE_SCRIPTS "\n + "SYSRES_CONST_COMPONENT_TYPE_URL "\n + "SYSRES_CONST_COMPONENTS_REMOTE_SERVERS_VIEW_CODE "\n + "SYSRES_CONST_CONDITION_BLOCK_DESCRIPTION "\n + "SYSRES_CONST_CONST_FIRM_STATUS_COMMON "\n + "SYSRES_CONST_CONST_FIRM_STATUS_INDIVIDUAL "\n + "SYSRES_CONST_CONST_NEGATIVE_VALUE "\n + "SYSRES_CONST_CONST_POSITIVE_VALUE "\n + "SYSRES_CONST_CONST_SERVER_STATUS_DONT_REPLICATE "\n + "SYSRES_CONST_CONST_SERVER_STATUS_REPLICATE "\n + "SYSRES_CONST_CONTENTS_REQUISITE_CODE "\n + "SYSRES_CONST_DATA_TYPE_BOOLEAN "\n + "SYSRES_CONST_DATA_TYPE_DATE "\n + "SYSRES_CONST_DATA_TYPE_FLOAT "\n + "SYSRES_CONST_DATA_TYPE_INTEGER "\n + "SYSRES_CONST_DATA_TYPE_PICK "\n + "SYSRES_CONST_DATA_TYPE_REFERENCE "\n + "SYSRES_CONST_DATA_TYPE_STRING "\n + "SYSRES_CONST_DATA_TYPE_TEXT "\n + "SYSRES_CONST_DATA_TYPE_VARIANT "\n + "SYSRES_CONST_DATE_CLOSE_REQ_CODE "\n + "SYSRES_CONST_DATE_FORMAT_DATE_ONLY_CHAR "\n + "SYSRES_CONST_DATE_OPEN_REQ_CODE "\n + "SYSRES_CONST_DATE_REQUISITE "\n + "SYSRES_CONST_DATE_REQUISITE_CODE "\n + "SYSRES_CONST_DATE_REQUISITE_NAME "\n + "SYSRES_CONST_DATE_REQUISITE_TYPE "\n + "SYSRES_CONST_DATE_TYPE_CHAR "\n + "SYSRES_CONST_DATETIME_FORMAT_VALUE "\n + "SYSRES_CONST_DEA_ACCESS_RIGHTS_ACTION_CODE "\n + "SYSRES_CONST_DESCRIPTION_LOCALIZE_ID_REQUISITE_CODE "\n + "SYSRES_CONST_DESCRIPTION_REQUISITE_CODE "\n + "SYSRES_CONST_DET1_PART "\n + "SYSRES_CONST_DET2_PART "\n + "SYSRES_CONST_DET3_PART "\n + "SYSRES_CONST_DET4_PART "\n + "SYSRES_CONST_DET5_PART "\n + "SYSRES_CONST_DET6_PART "\n + "SYSRES_CONST_DETAIL_DATASET_KEY_REQUISITE_CODE "\n + "SYSRES_CONST_DETAIL_PICK_REQUISITE_CODE "\n + "SYSRES_CONST_DETAIL_REQ_CODE "\n + "SYSRES_CONST_DO_NOT_USE_ACCESS_TYPE_CODE "\n + "SYSRES_CONST_DO_NOT_USE_ACCESS_TYPE_NAME "\n + "SYSRES_CONST_DO_NOT_USE_ON_VIEW_ACCESS_TYPE_CODE "\n + "SYSRES_CONST_DO_NOT_USE_ON_VIEW_ACCESS_TYPE_NAME "\n + "SYSRES_CONST_DOCUMENT_STORAGES_CODE "\n + "SYSRES_CONST_DOCUMENT_TEMPLATES_TYPE_NAME "\n + "SYSRES_CONST_DOUBLE_REQUISITE_CODE "\n + "SYSRES_CONST_EDITOR_CLOSE_FILE_OBSERV_TYPE_CODE "\n + "SYSRES_CONST_EDITOR_CLOSE_PROCESS_OBSERV_TYPE_CODE "\n + "SYSRES_CONST_EDITOR_TYPE_REQUISITE_CODE "\n + "SYSRES_CONST_EDITORS_APPLICATION_NAME_REQUISITE_CODE "\n + "SYSRES_CONST_EDITORS_CREATE_SEVERAL_PROCESSES_REQUISITE_CODE "\n + "SYSRES_CONST_EDITORS_EXTENSION_REQUISITE_CODE "\n + "SYSRES_CONST_EDITORS_OBSERVER_BY_PROCESS_TYPE "\n + "SYSRES_CONST_EDITORS_REFERENCE_CODE "\n + "SYSRES_CONST_EDITORS_REPLACE_SPEC_CHARS_REQUISITE_CODE "\n + "SYSRES_CONST_EDITORS_USE_PLUGINS_REQUISITE_CODE "\n + "SYSRES_CONST_EDITORS_VIEW_DOCUMENT_OPENED_TO_EDIT_CODE "\n + "SYSRES_CONST_EDOC_CARD_TYPE_REQUISITE_CODE "\n + "SYSRES_CONST_EDOC_CARD_TYPES_LINK_REQUISITE_CODE "\n + "SYSRES_CONST_EDOC_CERTIFICATE_AND_PASSWORD_ENCODE_CODE "\n + "SYSRES_CONST_EDOC_CERTIFICATE_ENCODE_CODE "\n + "SYSRES_CONST_EDOC_DATE_REQUISITE_CODE "\n + "SYSRES_CONST_EDOC_KIND_REFERENCE_CODE "\n + "SYSRES_CONST_EDOC_KINDS_BY_TEMPLATE_ACTION_CODE "\n + "SYSRES_CONST_EDOC_MANAGE_ACCESS_CODE "\n + "SYSRES_CONST_EDOC_NONE_ENCODE_CODE "\n + "SYSRES_CONST_EDOC_NUMBER_REQUISITE_CODE "\n + "SYSRES_CONST_EDOC_PASSWORD_ENCODE_CODE "\n + "SYSRES_CONST_EDOC_READONLY_ACCESS_CODE "\n + "SYSRES_CONST_EDOC_SHELL_LIFE_TYPE_VIEW_VALUE "\n + "SYSRES_CONST_EDOC_SIZE_RESTRICTION_PRIORITY_REQUISITE_CODE "\n + "SYSRES_CONST_EDOC_STORAGE_CHECK_ACCESS_RIGHTS_REQUISITE_CODE "\n + "SYSRES_CONST_EDOC_STORAGE_COMPUTER_NAME_REQUISITE_CODE "\n + "SYSRES_CONST_EDOC_STORAGE_DATABASE_NAME_REQUISITE_CODE "\n + "SYSRES_CONST_EDOC_STORAGE_EDIT_IN_STORAGE_REQUISITE_CODE "\n + "SYSRES_CONST_EDOC_STORAGE_LOCAL_PATH_REQUISITE_CODE "\n + "SYSRES_CONST_EDOC_STORAGE_SHARED_SOURCE_NAME_REQUISITE_CODE "\n + "SYSRES_CONST_EDOC_TEMPLATE_REQUISITE_CODE "\n + "SYSRES_CONST_EDOC_TYPES_REFERENCE_CODE "\n + "SYSRES_CONST_EDOC_VERSION_ACTIVE_STAGE_CODE "\n + "SYSRES_CONST_EDOC_VERSION_DESIGN_STAGE_CODE "\n + "SYSRES_CONST_EDOC_VERSION_OBSOLETE_STAGE_CODE "\n + "SYSRES_CONST_EDOC_WRITE_ACCES_CODE "\n + "SYSRES_CONST_EDOCUMENT_CARD_REQUISITES_REFERENCE_CODE_SELECTED_REQUISITE "\n + "SYSRES_CONST_ENCODE_CERTIFICATE_TYPE_CODE "\n + "SYSRES_CONST_END_DATE_REQUISITE_CODE "\n + "SYSRES_CONST_ENUMERATION_TYPE_REQUISITE_CODE "\n + "SYSRES_CONST_EXECUTE_ACCESS_RIGHTS_TYPE_CODE "\n + "SYSRES_CONST_EXECUTIVE_FILE_STORAGE_TYPE "\n + "SYSRES_CONST_EXIST_CONST "\n + "SYSRES_CONST_EXIST_VALUE "\n + "SYSRES_CONST_EXPORT_LOCK_TYPE_ASK "\n + "SYSRES_CONST_EXPORT_LOCK_TYPE_WITH_LOCK "\n + "SYSRES_CONST_EXPORT_LOCK_TYPE_WITHOUT_LOCK "\n + "SYSRES_CONST_EXPORT_VERSION_TYPE_ASK "\n + "SYSRES_CONST_EXPORT_VERSION_TYPE_LAST "\n + "SYSRES_CONST_EXPORT_VERSION_TYPE_LAST_ACTIVE "\n + "SYSRES_CONST_EXTENSION_REQUISITE_CODE "\n + "SYSRES_CONST_FILTER_NAME_REQUISITE_CODE "\n + "SYSRES_CONST_FILTER_REQUISITE_CODE "\n + "SYSRES_CONST_FILTER_TYPE_COMMON_CODE "\n + "SYSRES_CONST_FILTER_TYPE_COMMON_NAME "\n + "SYSRES_CONST_FILTER_TYPE_USER_CODE "\n + "SYSRES_CONST_FILTER_TYPE_USER_NAME "\n + "SYSRES_CONST_FILTER_VALUE_REQUISITE_NAME "\n + "SYSRES_CONST_FLOAT_NUMBER_FORMAT_CHAR "\n + "SYSRES_CONST_FLOAT_REQUISITE_TYPE "\n + "SYSRES_CONST_FOLDER_AUTHOR_VALUE "\n + "SYSRES_CONST_FOLDER_KIND_ANY_OBJECTS "\n + "SYSRES_CONST_FOLDER_KIND_COMPONENTS "\n + "SYSRES_CONST_FOLDER_KIND_EDOCS "\n + "SYSRES_CONST_FOLDER_KIND_JOBS "\n + "SYSRES_CONST_FOLDER_KIND_TASKS "\n + "SYSRES_CONST_FOLDER_TYPE_COMMON "\n + "SYSRES_CONST_FOLDER_TYPE_COMPONENT "\n + "SYSRES_CONST_FOLDER_TYPE_FAVORITES "\n + "SYSRES_CONST_FOLDER_TYPE_INBOX "\n + "SYSRES_CONST_FOLDER_TYPE_OUTBOX "\n + "SYSRES_CONST_FOLDER_TYPE_QUICK_LAUNCH "\n + "SYSRES_CONST_FOLDER_TYPE_SEARCH "\n + "SYSRES_CONST_FOLDER_TYPE_SHORTCUTS "\n + "SYSRES_CONST_FOLDER_TYPE_USER "\n + "SYSRES_CONST_FROM_DICTIONARY_ENUM_METHOD_FLAG "\n + "SYSRES_CONST_FULL_SUBSTITUTE_TYPE "\n + "SYSRES_CONST_FULL_SUBSTITUTE_TYPE_CODE "\n + "SYSRES_CONST_FUNCTION_CANCEL_RESULT "\n + "SYSRES_CONST_FUNCTION_CATEGORY_SYSTEM "\n + "SYSRES_CONST_FUNCTION_CATEGORY_USER "\n + "SYSRES_CONST_FUNCTION_FAILURE_RESULT "\n + "SYSRES_CONST_FUNCTION_SAVE_RESULT "\n + "SYSRES_CONST_GENERATED_REQUISITE "\n + "SYSRES_CONST_GREEN_LIFE_CYCLE_STAGE_FONT_COLOR "\n + "SYSRES_CONST_GROUP_ACCOUNT_TYPE_VALUE_CODE "\n + "SYSRES_CONST_GROUP_CATEGORY_NORMAL_CODE "\n + "SYSRES_CONST_GROUP_CATEGORY_NORMAL_NAME "\n + "SYSRES_CONST_GROUP_CATEGORY_SERVICE_CODE "\n + "SYSRES_CONST_GROUP_CATEGORY_SERVICE_NAME "\n + "SYSRES_CONST_GROUP_COMMON_CATEGORY_FIELD_VALUE "\n + "SYSRES_CONST_GROUP_FULL_NAME_REQUISITE_CODE "\n + "SYSRES_CONST_GROUP_NAME_REQUISITE_CODE "\n + "SYSRES_CONST_GROUP_RIGHTS_T_REQUISITE_CODE "\n + "SYSRES_CONST_GROUP_SERVER_CODES_REQUISITE_CODE "\n + "SYSRES_CONST_GROUP_SERVER_NAME_REQUISITE_CODE "\n + "SYSRES_CONST_GROUP_SERVICE_CATEGORY_FIELD_VALUE "\n + "SYSRES_CONST_GROUP_USER_REQUISITE_CODE "\n + "SYSRES_CONST_GROUPS_REFERENCE_CODE "\n + "SYSRES_CONST_GROUPS_REQUISITE_CODE "\n + "SYSRES_CONST_HIDDEN_MODE_NAME "\n + "SYSRES_CONST_HIGH_LVL_REQUISITE_CODE "\n + "SYSRES_CONST_HISTORY_ACTION_CREATE_CODE "\n + "SYSRES_CONST_HISTORY_ACTION_DELETE_CODE "\n + "SYSRES_CONST_HISTORY_ACTION_EDIT_CODE "\n + "SYSRES_CONST_HOUR_CHAR "\n + "SYSRES_CONST_ID_REQUISITE_CODE "\n + "SYSRES_CONST_IDSPS_REQUISITE_CODE "\n + "SYSRES_CONST_IMAGE_MODE_COLOR "\n + "SYSRES_CONST_IMAGE_MODE_GREYSCALE "\n + "SYSRES_CONST_IMAGE_MODE_MONOCHROME "\n + "SYSRES_CONST_IMPORTANCE_HIGH "\n + "SYSRES_CONST_IMPORTANCE_LOW "\n + "SYSRES_CONST_IMPORTANCE_NORMAL "\n + "SYSRES_CONST_IN_DESIGN_VERSION_STATE_PICK_VALUE "\n + "SYSRES_CONST_INCOMING_WORK_RULE_TYPE_CODE "\n + "SYSRES_CONST_INT_REQUISITE "\n + "SYSRES_CONST_INT_REQUISITE_TYPE "\n + "SYSRES_CONST_INTEGER_NUMBER_FORMAT_CHAR "\n + "SYSRES_CONST_INTEGER_TYPE_CHAR "\n + "SYSRES_CONST_IS_GENERATED_REQUISITE_NEGATIVE_VALUE "\n + "SYSRES_CONST_IS_PUBLIC_ROLE_REQUISITE_CODE "\n + "SYSRES_CONST_IS_REMOTE_USER_NEGATIVE_VALUE "\n + "SYSRES_CONST_IS_REMOTE_USER_POSITIVE_VALUE "\n + "SYSRES_CONST_IS_STORED_REQUISITE_NEGATIVE_VALUE "\n + "SYSRES_CONST_IS_STORED_REQUISITE_STORED_VALUE "\n + "SYSRES_CONST_ITALIC_LIFE_CYCLE_STAGE_DRAW_STYLE "\n + "SYSRES_CONST_JOB_BLOCK_DESCRIPTION "\n + "SYSRES_CONST_JOB_KIND_CONTROL_JOB "\n + "SYSRES_CONST_JOB_KIND_JOB "\n + "SYSRES_CONST_JOB_KIND_NOTICE "\n + "SYSRES_CONST_JOB_STATE_ABORTED "\n + "SYSRES_CONST_JOB_STATE_COMPLETE "\n + "SYSRES_CONST_JOB_STATE_WORKING "\n + "SYSRES_CONST_KIND_REQUISITE_CODE "\n + "SYSRES_CONST_KIND_REQUISITE_NAME "\n + "SYSRES_CONST_KINDS_CREATE_SHADOW_COPIES_REQUISITE_CODE "\n + "SYSRES_CONST_KINDS_DEFAULT_EDOC_LIFE_STAGE_REQUISITE_CODE "\n + "SYSRES_CONST_KINDS_EDOC_ALL_TEPLATES_ALLOWED_REQUISITE_CODE "\n + "SYSRES_CONST_KINDS_EDOC_ALLOW_LIFE_CYCLE_STAGE_CHANGING_REQUISITE_CODE "\n + "SYSRES_CONST_KINDS_EDOC_ALLOW_MULTIPLE_ACTIVE_VERSIONS_REQUISITE_CODE "\n + "SYSRES_CONST_KINDS_EDOC_SHARE_ACCES_RIGHTS_BY_DEFAULT_CODE "\n + "SYSRES_CONST_KINDS_EDOC_TEMPLATE_REQUISITE_CODE "\n + "SYSRES_CONST_KINDS_EDOC_TYPE_REQUISITE_CODE "\n + "SYSRES_CONST_KINDS_SIGNERS_REQUISITES_CODE "\n + "SYSRES_CONST_KOD_INPUT_TYPE "\n + "SYSRES_CONST_LAST_UPDATE_DATE_REQUISITE_CODE "\n + "SYSRES_CONST_LIFE_CYCLE_START_STAGE_REQUISITE_CODE "\n + "SYSRES_CONST_LILAC_LIFE_CYCLE_STAGE_FONT_COLOR "\n + "SYSRES_CONST_LINK_OBJECT_KIND_COMPONENT "\n + "SYSRES_CONST_LINK_OBJECT_KIND_DOCUMENT "\n + "SYSRES_CONST_LINK_OBJECT_KIND_EDOC "\n + "SYSRES_CONST_LINK_OBJECT_KIND_FOLDER "\n + "SYSRES_CONST_LINK_OBJECT_KIND_JOB "\n + "SYSRES_CONST_LINK_OBJECT_KIND_REFERENCE "\n + "SYSRES_CONST_LINK_OBJECT_KIND_TASK "\n + "SYSRES_CONST_LINK_REF_TYPE_REQUISITE_CODE "\n + "SYSRES_CONST_LIST_REFERENCE_MODE_NAME "\n + "SYSRES_CONST_LOCALIZATION_DICTIONARY_MAIN_VIEW_CODE "\n + "SYSRES_CONST_MAIN_VIEW_CODE "\n + "SYSRES_CONST_MANUAL_ENUM_METHOD_FLAG "\n + "SYSRES_CONST_MASTER_COMP_TYPE_REQUISITE_CODE "\n + "SYSRES_CONST_MASTER_TABLE_REC_ID_REQUISITE_CODE "\n + "SYSRES_CONST_MAXIMIZED_MODE_NAME "\n + "SYSRES_CONST_ME_VALUE "\n + "SYSRES_CONST_MESSAGE_ATTENTION_CAPTION "\n + "SYSRES_CONST_MESSAGE_CONFIRMATION_CAPTION "\n + "SYSRES_CONST_MESSAGE_ERROR_CAPTION "\n + "SYSRES_CONST_MESSAGE_INFORMATION_CAPTION "\n + "SYSRES_CONST_MINIMIZED_MODE_NAME "\n + "SYSRES_CONST_MINUTE_CHAR "\n + "SYSRES_CONST_MODULE_REQUISITE_CODE "\n + "SYSRES_CONST_MONITORING_BLOCK_DESCRIPTION "\n + "SYSRES_CONST_MONTH_FORMAT_VALUE "\n + "SYSRES_CONST_NAME_LOCALIZE_ID_REQUISITE_CODE "\n + "SYSRES_CONST_NAME_REQUISITE_CODE "\n + "SYSRES_CONST_NAME_SINGULAR_REQUISITE_CODE "\n + "SYSRES_CONST_NAMEAN_INPUT_TYPE "\n + "SYSRES_CONST_NEGATIVE_PICK_VALUE "\n + "SYSRES_CONST_NEGATIVE_VALUE "\n + "SYSRES_CONST_NO "\n + "SYSRES_CONST_NO_PICK_VALUE "\n + "SYSRES_CONST_NO_SIGNATURE_REQUISITE_CODE "\n + "SYSRES_CONST_NO_VALUE "\n + "SYSRES_CONST_NONE_ACCESS_RIGHTS_TYPE_CODE "\n + "SYSRES_CONST_NONOPERATING_RECORD_FLAG_VALUE "\n + "SYSRES_CONST_NONOPERATING_RECORD_FLAG_VALUE_MASCULINE "\n + "SYSRES_CONST_NORMAL_ACCESS_RIGHTS_TYPE_CODE "\n + "SYSRES_CONST_NORMAL_LIFE_CYCLE_STAGE_DRAW_STYLE "\n + "SYSRES_CONST_NORMAL_MODE_NAME "\n + "SYSRES_CONST_NOT_ALLOWED_ACCESS_TYPE_CODE "\n + "SYSRES_CONST_NOT_ALLOWED_ACCESS_TYPE_NAME "\n + "SYSRES_CONST_NOTE_REQUISITE_CODE "\n + "SYSRES_CONST_NOTICE_BLOCK_DESCRIPTION "\n + "SYSRES_CONST_NUM_REQUISITE "\n + "SYSRES_CONST_NUM_STR_REQUISITE_CODE "\n + "SYSRES_CONST_NUMERATION_AUTO_NOT_STRONG "\n + "SYSRES_CONST_NUMERATION_AUTO_STRONG "\n + "SYSRES_CONST_NUMERATION_FROM_DICTONARY "\n + "SYSRES_CONST_NUMERATION_MANUAL "\n + "SYSRES_CONST_NUMERIC_TYPE_CHAR "\n + "SYSRES_CONST_NUMREQ_REQUISITE_CODE "\n + "SYSRES_CONST_OBSOLETE_VERSION_STATE_PICK_VALUE "\n + "SYSRES_CONST_OPERATING_RECORD_FLAG_VALUE "\n + "SYSRES_CONST_OPERATING_RECORD_FLAG_VALUE_CODE "\n + "SYSRES_CONST_OPERATING_RECORD_FLAG_VALUE_FEMININE "\n + "SYSRES_CONST_OPERATING_RECORD_FLAG_VALUE_MASCULINE "\n + "SYSRES_CONST_OPTIONAL_FORM_COMP_REQCODE_PREFIX "\n + "SYSRES_CONST_ORANGE_LIFE_CYCLE_STAGE_FONT_COLOR "\n + "SYSRES_CONST_ORIGINALREF_REQUISITE_CODE "\n + "SYSRES_CONST_OURFIRM_REF_CODE "\n + "SYSRES_CONST_OURFIRM_REQUISITE_CODE "\n + "SYSRES_CONST_OURFIRM_VAR "\n + "SYSRES_CONST_OUTGOING_WORK_RULE_TYPE_CODE "\n + "SYSRES_CONST_PICK_NEGATIVE_RESULT "\n + "SYSRES_CONST_PICK_POSITIVE_RESULT "\n + "SYSRES_CONST_PICK_REQUISITE "\n + "SYSRES_CONST_PICK_REQUISITE_TYPE "\n + "SYSRES_CONST_PICK_TYPE_CHAR "\n + "SYSRES_CONST_PLAN_STATUS_REQUISITE_CODE "\n + "SYSRES_CONST_PLATFORM_VERSION_COMMENT "\n + "SYSRES_CONST_PLUGINS_SETTINGS_DESCRIPTION_REQUISITE_CODE "\n + "SYSRES_CONST_POSITIVE_PICK_VALUE "\n + "SYSRES_CONST_POWER_TO_CREATE_ACTION_CODE "\n + "SYSRES_CONST_POWER_TO_SIGN_ACTION_CODE "\n + "SYSRES_CONST_PRIORITY_REQUISITE_CODE "\n + "SYSRES_CONST_QUALIFIED_TASK_TYPE "\n + "SYSRES_CONST_QUALIFIED_TASK_TYPE_CODE "\n + "SYSRES_CONST_RECSTAT_REQUISITE_CODE "\n + "SYSRES_CONST_RED_LIFE_CYCLE_STAGE_FONT_COLOR "\n + "SYSRES_CONST_REF_ID_T_REF_TYPE_REQUISITE_CODE "\n + "SYSRES_CONST_REF_REQUISITE "\n + "SYSRES_CONST_REF_REQUISITE_TYPE "\n + "SYSRES_CONST_REF_REQUISITES_REFERENCE_CODE_SELECTED_REQUISITE "\n + "SYSRES_CONST_REFERENCE_RECORD_HISTORY_CREATE_ACTION_CODE "\n + "SYSRES_CONST_REFERENCE_RECORD_HISTORY_DELETE_ACTION_CODE "\n + "SYSRES_CONST_REFERENCE_RECORD_HISTORY_MODIFY_ACTION_CODE "\n + "SYSRES_CONST_REFERENCE_TYPE_CHAR "\n + "SYSRES_CONST_REFERENCE_TYPE_REQUISITE_NAME "\n + "SYSRES_CONST_REFERENCES_ADD_PARAMS_REQUISITE_CODE "\n + "SYSRES_CONST_REFERENCES_DISPLAY_REQUISITE_REQUISITE_CODE "\n + "SYSRES_CONST_REMOTE_SERVER_STATUS_WORKING "\n + "SYSRES_CONST_REMOTE_SERVER_TYPE_MAIN "\n + "SYSRES_CONST_REMOTE_SERVER_TYPE_SECONDARY "\n + "SYSRES_CONST_REMOTE_USER_FLAG_VALUE_CODE "\n + "SYSRES_CONST_REPORT_APP_EDITOR_INTERNAL "\n + "SYSRES_CONST_REPORT_BASE_REPORT_ID_REQUISITE_CODE "\n + "SYSRES_CONST_REPORT_BASE_REPORT_REQUISITE_CODE "\n + "SYSRES_CONST_REPORT_SCRIPT_REQUISITE_CODE "\n + "SYSRES_CONST_REPORT_TEMPLATE_REQUISITE_CODE "\n + "SYSRES_CONST_REPORT_VIEWER_CODE_REQUISITE_CODE "\n + "SYSRES_CONST_REQ_ALLOW_COMPONENT_DEFAULT_VALUE "\n + "SYSRES_CONST_REQ_ALLOW_RECORD_DEFAULT_VALUE "\n + "SYSRES_CONST_REQ_ALLOW_SERVER_COMPONENT_DEFAULT_VALUE "\n + "SYSRES_CONST_REQ_MODE_AVAILABLE_CODE "\n + "SYSRES_CONST_REQ_MODE_EDIT_CODE "\n + "SYSRES_CONST_REQ_MODE_HIDDEN_CODE "\n + "SYSRES_CONST_REQ_MODE_NOT_AVAILABLE_CODE "\n + "SYSRES_CONST_REQ_MODE_VIEW_CODE "\n + "SYSRES_CONST_REQ_NUMBER_REQUISITE_CODE "\n + "SYSRES_CONST_REQ_SECTION_VALUE "\n + "SYSRES_CONST_REQ_TYPE_VALUE "\n + "SYSRES_CONST_REQUISITE_FORMAT_BY_UNIT "\n + "SYSRES_CONST_REQUISITE_FORMAT_DATE_FULL "\n + "SYSRES_CONST_REQUISITE_FORMAT_DATE_TIME "\n + "SYSRES_CONST_REQUISITE_FORMAT_LEFT "\n + "SYSRES_CONST_REQUISITE_FORMAT_RIGHT "\n + "SYSRES_CONST_REQUISITE_FORMAT_WITHOUT_UNIT "\n + "SYSRES_CONST_REQUISITE_NUMBER_REQUISITE_CODE "\n + "SYSRES_CONST_REQUISITE_SECTION_ACTIONS "\n + "SYSRES_CONST_REQUISITE_SECTION_BUTTON "\n + "SYSRES_CONST_REQUISITE_SECTION_BUTTONS "\n + "SYSRES_CONST_REQUISITE_SECTION_CARD "\n + "SYSRES_CONST_REQUISITE_SECTION_TABLE "\n + "SYSRES_CONST_REQUISITE_SECTION_TABLE10 "\n + "SYSRES_CONST_REQUISITE_SECTION_TABLE11 "\n + "SYSRES_CONST_REQUISITE_SECTION_TABLE12 "\n + "SYSRES_CONST_REQUISITE_SECTION_TABLE13 "\n + "SYSRES_CONST_REQUISITE_SECTION_TABLE14 "\n + "SYSRES_CONST_REQUISITE_SECTION_TABLE15 "\n + "SYSRES_CONST_REQUISITE_SECTION_TABLE16 "\n + "SYSRES_CONST_REQUISITE_SECTION_TABLE17 "\n + "SYSRES_CONST_REQUISITE_SECTION_TABLE18 "\n + "SYSRES_CONST_REQUISITE_SECTION_TABLE19 "\n + "SYSRES_CONST_REQUISITE_SECTION_TABLE2 "\n + "SYSRES_CONST_REQUISITE_SECTION_TABLE20 "\n + "SYSRES_CONST_REQUISITE_SECTION_TABLE21 "\n + "SYSRES_CONST_REQUISITE_SECTION_TABLE22 "\n + "SYSRES_CONST_REQUISITE_SECTION_TABLE23 "\n + "SYSRES_CONST_REQUISITE_SECTION_TABLE24 "\n + "SYSRES_CONST_REQUISITE_SECTION_TABLE3 "\n + "SYSRES_CONST_REQUISITE_SECTION_TABLE4 "\n + "SYSRES_CONST_REQUISITE_SECTION_TABLE5 "\n + "SYSRES_CONST_REQUISITE_SECTION_TABLE6 "\n + "SYSRES_CONST_REQUISITE_SECTION_TABLE7 "\n + "SYSRES_CONST_REQUISITE_SECTION_TABLE8 "\n + "SYSRES_CONST_REQUISITE_SECTION_TABLE9 "\n + "SYSRES_CONST_REQUISITES_PSEUDOREFERENCE_REQUISITE_NUMBER_REQUISITE_CODE "\n + "SYSRES_CONST_RIGHT_ALIGNMENT_CODE "\n + "SYSRES_CONST_ROLES_REFERENCE_CODE "\n + "SYSRES_CONST_ROUTE_STEP_AFTER_RUS "\n + "SYSRES_CONST_ROUTE_STEP_AND_CONDITION_RUS "\n + "SYSRES_CONST_ROUTE_STEP_OR_CONDITION_RUS "\n + "SYSRES_CONST_ROUTE_TYPE_COMPLEX "\n + "SYSRES_CONST_ROUTE_TYPE_PARALLEL "\n + "SYSRES_CONST_ROUTE_TYPE_SERIAL "\n + "SYSRES_CONST_SBDATASETDESC_NEGATIVE_VALUE "\n + "SYSRES_CONST_SBDATASETDESC_POSITIVE_VALUE "\n + "SYSRES_CONST_SBVIEWSDESC_POSITIVE_VALUE "\n + "SYSRES_CONST_SCRIPT_BLOCK_DESCRIPTION "\n + "SYSRES_CONST_SEARCH_BY_TEXT_REQUISITE_CODE "\n + "SYSRES_CONST_SEARCHES_COMPONENT_CONTENT "\n + "SYSRES_CONST_SEARCHES_CRITERIA_ACTION_NAME "\n + "SYSRES_CONST_SEARCHES_EDOC_CONTENT "\n + "SYSRES_CONST_SEARCHES_FOLDER_CONTENT "\n + "SYSRES_CONST_SEARCHES_JOB_CONTENT "\n + "SYSRES_CONST_SEARCHES_REFERENCE_CODE "\n + "SYSRES_CONST_SEARCHES_TASK_CONTENT "\n + "SYSRES_CONST_SECOND_CHAR "\n + "SYSRES_CONST_SECTION_REQUISITE_ACTIONS_VALUE "\n + "SYSRES_CONST_SECTION_REQUISITE_CARD_VALUE "\n + "SYSRES_CONST_SECTION_REQUISITE_CODE "\n + "SYSRES_CONST_SECTION_REQUISITE_DETAIL_1_VALUE "\n + "SYSRES_CONST_SECTION_REQUISITE_DETAIL_2_VALUE "\n + "SYSRES_CONST_SECTION_REQUISITE_DETAIL_3_VALUE "\n + "SYSRES_CONST_SECTION_REQUISITE_DETAIL_4_VALUE "\n + "SYSRES_CONST_SECTION_REQUISITE_DETAIL_5_VALUE "\n + "SYSRES_CONST_SECTION_REQUISITE_DETAIL_6_VALUE "\n + "SYSRES_CONST_SELECT_REFERENCE_MODE_NAME "\n + "SYSRES_CONST_SELECT_TYPE_SELECTABLE "\n + "SYSRES_CONST_SELECT_TYPE_SELECTABLE_ONLY_CHILD "\n + "SYSRES_CONST_SELECT_TYPE_SELECTABLE_WITH_CHILD "\n + "SYSRES_CONST_SELECT_TYPE_UNSLECTABLE "\n + "SYSRES_CONST_SERVER_TYPE_MAIN "\n + "SYSRES_CONST_SERVICE_USER_CATEGORY_FIELD_VALUE "\n + "SYSRES_CONST_SETTINGS_USER_REQUISITE_CODE "\n + "SYSRES_CONST_SIGNATURE_AND_ENCODE_CERTIFICATE_TYPE_CODE "\n + "SYSRES_CONST_SIGNATURE_CERTIFICATE_TYPE_CODE "\n + "SYSRES_CONST_SINGULAR_TITLE_REQUISITE_CODE "\n + "SYSRES_CONST_SQL_SERVER_AUTHENTIFICATION_FLAG_VALUE_CODE "\n + "SYSRES_CONST_SQL_SERVER_ENCODE_AUTHENTIFICATION_FLAG_VALUE_CODE "\n + "SYSRES_CONST_STANDART_ROUTE_REFERENCE_CODE "\n + "SYSRES_CONST_STANDART_ROUTE_REFERENCE_COMMENT_REQUISITE_CODE "\n + "SYSRES_CONST_STANDART_ROUTES_GROUPS_REFERENCE_CODE "\n + "SYSRES_CONST_STATE_REQ_NAME "\n + "SYSRES_CONST_STATE_REQUISITE_ACTIVE_VALUE "\n + "SYSRES_CONST_STATE_REQUISITE_CLOSED_VALUE "\n + "SYSRES_CONST_STATE_REQUISITE_CODE "\n + "SYSRES_CONST_STATIC_ROLE_TYPE_CODE "\n + "SYSRES_CONST_STATUS_PLAN_DEFAULT_VALUE "\n + "SYSRES_CONST_STATUS_VALUE_AUTOCLEANING "\n + "SYSRES_CONST_STATUS_VALUE_BLUE_SQUARE "\n + "SYSRES_CONST_STATUS_VALUE_COMPLETE "\n + "SYSRES_CONST_STATUS_VALUE_GREEN_SQUARE "\n + "SYSRES_CONST_STATUS_VALUE_ORANGE_SQUARE "\n + "SYSRES_CONST_STATUS_VALUE_PURPLE_SQUARE "\n + "SYSRES_CONST_STATUS_VALUE_RED_SQUARE "\n + "SYSRES_CONST_STATUS_VALUE_SUSPEND "\n + "SYSRES_CONST_STATUS_VALUE_YELLOW_SQUARE "\n + "SYSRES_CONST_STDROUTE_SHOW_TO_USERS_REQUISITE_CODE "\n + "SYSRES_CONST_STORAGE_TYPE_FILE "\n + "SYSRES_CONST_STORAGE_TYPE_SQL_SERVER "\n + "SYSRES_CONST_STR_REQUISITE "\n + "SYSRES_CONST_STRIKEOUT_LIFE_CYCLE_STAGE_DRAW_STYLE "\n + "SYSRES_CONST_STRING_FORMAT_LEFT_ALIGN_CHAR "\n + "SYSRES_CONST_STRING_FORMAT_RIGHT_ALIGN_CHAR "\n + "SYSRES_CONST_STRING_REQUISITE_CODE "\n + "SYSRES_CONST_STRING_REQUISITE_TYPE "\n + "SYSRES_CONST_STRING_TYPE_CHAR "\n + "SYSRES_CONST_SUBSTITUTES_PSEUDOREFERENCE_CODE "\n + "SYSRES_CONST_SUBTASK_BLOCK_DESCRIPTION "\n + "SYSRES_CONST_SYSTEM_SETTING_CURRENT_USER_PARAM_VALUE "\n + "SYSRES_CONST_SYSTEM_SETTING_EMPTY_VALUE_PARAM_VALUE "\n + "SYSRES_CONST_SYSTEM_VERSION_COMMENT "\n + "SYSRES_CONST_TASK_ACCESS_TYPE_ALL "\n + "SYSRES_CONST_TASK_ACCESS_TYPE_ALL_MEMBERS "\n + "SYSRES_CONST_TASK_ACCESS_TYPE_MANUAL "\n + "SYSRES_CONST_TASK_ENCODE_TYPE_CERTIFICATION "\n + "SYSRES_CONST_TASK_ENCODE_TYPE_CERTIFICATION_AND_PASSWORD "\n + "SYSRES_CONST_TASK_ENCODE_TYPE_NONE "\n + "SYSRES_CONST_TASK_ENCODE_TYPE_PASSWORD "\n + "SYSRES_CONST_TASK_ROUTE_ALL_CONDITION "\n + "SYSRES_CONST_TASK_ROUTE_AND_CONDITION "\n + "SYSRES_CONST_TASK_ROUTE_OR_CONDITION "\n + "SYSRES_CONST_TASK_STATE_ABORTED "\n + "SYSRES_CONST_TASK_STATE_COMPLETE "\n + "SYSRES_CONST_TASK_STATE_CONTINUED "\n + "SYSRES_CONST_TASK_STATE_CONTROL "\n + "SYSRES_CONST_TASK_STATE_INIT "\n + "SYSRES_CONST_TASK_STATE_WORKING "\n + "SYSRES_CONST_TASK_TITLE "\n + "SYSRES_CONST_TASK_TYPES_GROUPS_REFERENCE_CODE "\n + "SYSRES_CONST_TASK_TYPES_REFERENCE_CODE "\n + "SYSRES_CONST_TEMPLATES_REFERENCE_CODE "\n + "SYSRES_CONST_TEST_DATE_REQUISITE_NAME "\n + "SYSRES_CONST_TEST_DEV_DATABASE_NAME "\n + "SYSRES_CONST_TEST_DEV_SYSTEM_CODE "\n + "SYSRES_CONST_TEST_EDMS_DATABASE_NAME "\n + "SYSRES_CONST_TEST_EDMS_MAIN_CODE "\n + "SYSRES_CONST_TEST_EDMS_MAIN_DB_NAME "\n + "SYSRES_CONST_TEST_EDMS_SECOND_CODE "\n + "SYSRES_CONST_TEST_EDMS_SECOND_DB_NAME "\n + "SYSRES_CONST_TEST_EDMS_SYSTEM_CODE "\n + "SYSRES_CONST_TEST_NUMERIC_REQUISITE_NAME "\n + "SYSRES_CONST_TEXT_REQUISITE "\n + "SYSRES_CONST_TEXT_REQUISITE_CODE "\n + "SYSRES_CONST_TEXT_REQUISITE_TYPE "\n + "SYSRES_CONST_TEXT_TYPE_CHAR "\n + "SYSRES_CONST_TYPE_CODE_REQUISITE_CODE "\n + "SYSRES_CONST_TYPE_REQUISITE_CODE "\n + "SYSRES_CONST_UNDEFINED_LIFE_CYCLE_STAGE_FONT_COLOR "\n + "SYSRES_CONST_UNITS_SECTION_ID_REQUISITE_CODE "\n + "SYSRES_CONST_UNITS_SECTION_REQUISITE_CODE "\n + "SYSRES_CONST_UNOPERATING_RECORD_FLAG_VALUE_CODE "\n + "SYSRES_CONST_UNSTORED_DATA_REQUISITE_CODE "\n + "SYSRES_CONST_UNSTORED_DATA_REQUISITE_NAME "\n + "SYSRES_CONST_USE_ACCESS_TYPE_CODE "\n + "SYSRES_CONST_USE_ACCESS_TYPE_NAME "\n + "SYSRES_CONST_USER_ACCOUNT_TYPE_VALUE_CODE "\n + "SYSRES_CONST_USER_ADDITIONAL_INFORMATION_REQUISITE_CODE "\n + "SYSRES_CONST_USER_AND_GROUP_ID_FROM_PSEUDOREFERENCE_REQUISITE_CODE "\n + "SYSRES_CONST_USER_CATEGORY_NORMAL "\n + "SYSRES_CONST_USER_CERTIFICATE_REQUISITE_CODE "\n + "SYSRES_CONST_USER_CERTIFICATE_STATE_REQUISITE_CODE "\n + "SYSRES_CONST_USER_CERTIFICATE_SUBJECT_NAME_REQUISITE_CODE "\n + "SYSRES_CONST_USER_CERTIFICATE_THUMBPRINT_REQUISITE_CODE "\n + "SYSRES_CONST_USER_COMMON_CATEGORY "\n + "SYSRES_CONST_USER_COMMON_CATEGORY_CODE "\n + "SYSRES_CONST_USER_FULL_NAME_REQUISITE_CODE "\n + "SYSRES_CONST_USER_GROUP_TYPE_REQUISITE_CODE "\n + "SYSRES_CONST_USER_LOGIN_REQUISITE_CODE "\n + "SYSRES_CONST_USER_REMOTE_CONTROLLER_REQUISITE_CODE "\n + "SYSRES_CONST_USER_REMOTE_SYSTEM_REQUISITE_CODE "\n + "SYSRES_CONST_USER_RIGHTS_T_REQUISITE_CODE "\n + "SYSRES_CONST_USER_SERVER_NAME_REQUISITE_CODE "\n + "SYSRES_CONST_USER_SERVICE_CATEGORY "\n + "SYSRES_CONST_USER_SERVICE_CATEGORY_CODE "\n + "SYSRES_CONST_USER_STATUS_ADMINISTRATOR_CODE "\n + "SYSRES_CONST_USER_STATUS_ADMINISTRATOR_NAME "\n + "SYSRES_CONST_USER_STATUS_DEVELOPER_CODE "\n + "SYSRES_CONST_USER_STATUS_DEVELOPER_NAME "\n + "SYSRES_CONST_USER_STATUS_DISABLED_CODE "\n + "SYSRES_CONST_USER_STATUS_DISABLED_NAME "\n + "SYSRES_CONST_USER_STATUS_SYSTEM_DEVELOPER_CODE "\n + "SYSRES_CONST_USER_STATUS_USER_CODE "\n + "SYSRES_CONST_USER_STATUS_USER_NAME "\n + "SYSRES_CONST_USER_STATUS_USER_NAME_DEPRECATED "\n + "SYSRES_CONST_USER_TYPE_FIELD_VALUE_USER "\n + "SYSRES_CONST_USER_TYPE_REQUISITE_CODE "\n + "SYSRES_CONST_USERS_CONTROLLER_REQUISITE_CODE "\n + "SYSRES_CONST_USERS_IS_MAIN_SERVER_REQUISITE_CODE "\n + "SYSRES_CONST_USERS_REFERENCE_CODE "\n + "SYSRES_CONST_USERS_REGISTRATION_CERTIFICATES_ACTION_NAME "\n + "SYSRES_CONST_USERS_REQUISITE_CODE "\n + "SYSRES_CONST_USERS_SYSTEM_REQUISITE_CODE "\n + "SYSRES_CONST_USERS_USER_ACCESS_RIGHTS_TYPR_REQUISITE_CODE "\n + "SYSRES_CONST_USERS_USER_AUTHENTICATION_REQUISITE_CODE "\n + "SYSRES_CONST_USERS_USER_COMPONENT_REQUISITE_CODE "\n + "SYSRES_CONST_USERS_USER_GROUP_REQUISITE_CODE "\n + "SYSRES_CONST_USERS_VIEW_CERTIFICATES_ACTION_NAME "\n + "SYSRES_CONST_VIEW_DEFAULT_CODE "\n + "SYSRES_CONST_VIEW_DEFAULT_NAME "\n + "SYSRES_CONST_VIEWER_REQUISITE_CODE "\n + "SYSRES_CONST_WAITING_BLOCK_DESCRIPTION "\n + "SYSRES_CONST_WIZARD_FORM_LABEL_TEST_STRING "\n + "SYSRES_CONST_WIZARD_QUERY_PARAM_HEIGHT_ETALON_STRING "\n + "SYSRES_CONST_WIZARD_REFERENCE_COMMENT_REQUISITE_CODE "\n + "SYSRES_CONST_WORK_RULES_DESCRIPTION_REQUISITE_CODE "\n + "SYSRES_CONST_WORK_TIME_CALENDAR_REFERENCE_CODE "\n + "SYSRES_CONST_WORK_WORKFLOW_HARD_ROUTE_TYPE_VALUE "\n + "SYSRES_CONST_WORK_WORKFLOW_HARD_ROUTE_TYPE_VALUE_CODE "\n + "SYSRES_CONST_WORK_WORKFLOW_HARD_ROUTE_TYPE_VALUE_CODE_RUS "\n + "SYSRES_CONST_WORK_WORKFLOW_SOFT_ROUTE_TYPE_VALUE_CODE_RUS "\n + "SYSRES_CONST_WORKFLOW_ROUTE_TYPR_HARD "\n + "SYSRES_CONST_WORKFLOW_ROUTE_TYPR_SOFT "\n + "SYSRES_CONST_XML_ENCODING "\n + "SYSRES_CONST_XREC_STAT_REQUISITE_CODE "\n + "SYSRES_CONST_XRECID_FIELD_NAME "\n + "SYSRES_CONST_YES "\n + "SYSRES_CONST_YES_NO_2_REQUISITE_CODE "\n + "SYSRES_CONST_YES_NO_REQUISITE_CODE "\n + "SYSRES_CONST_YES_NO_T_REF_TYPE_REQUISITE_CODE "\n + "SYSRES_CONST_YES_PICK_VALUE "\n + "SYSRES_CONST_YES_VALUE ";\n\n // Base constant\n const base_constants = "CR FALSE nil NO_VALUE NULL TAB TRUE YES_VALUE ";\n\n // Base group name\n const base_group_name_constants =\n "ADMINISTRATORS_GROUP_NAME CUSTOMIZERS_GROUP_NAME DEVELOPERS_GROUP_NAME SERVICE_USERS_GROUP_NAME ";\n\n // Decision block properties\n const decision_block_properties_constants =\n "DECISION_BLOCK_FIRST_OPERAND_PROPERTY DECISION_BLOCK_NAME_PROPERTY DECISION_BLOCK_OPERATION_PROPERTY "\n + "DECISION_BLOCK_RESULT_TYPE_PROPERTY DECISION_BLOCK_SECOND_OPERAND_PROPERTY ";\n\n // File extension\n const file_extension_constants =\n "ANY_FILE_EXTENTION COMPRESSED_DOCUMENT_EXTENSION EXTENDED_DOCUMENT_EXTENSION "\n + "SHORT_COMPRESSED_DOCUMENT_EXTENSION SHORT_EXTENDED_DOCUMENT_EXTENSION ";\n\n // Job block properties\n const job_block_properties_constants =\n "JOB_BLOCK_ABORT_DEADLINE_PROPERTY "\n + "JOB_BLOCK_AFTER_FINISH_EVENT "\n + "JOB_BLOCK_AFTER_QUERY_PARAMETERS_EVENT "\n + "JOB_BLOCK_ATTACHMENT_PROPERTY "\n + "JOB_BLOCK_ATTACHMENTS_RIGHTS_GROUP_PROPERTY "\n + "JOB_BLOCK_ATTACHMENTS_RIGHTS_TYPE_PROPERTY "\n + "JOB_BLOCK_BEFORE_QUERY_PARAMETERS_EVENT "\n + "JOB_BLOCK_BEFORE_START_EVENT "\n + "JOB_BLOCK_CREATED_JOBS_PROPERTY "\n + "JOB_BLOCK_DEADLINE_PROPERTY "\n + "JOB_BLOCK_EXECUTION_RESULTS_PROPERTY "\n + "JOB_BLOCK_IS_PARALLEL_PROPERTY "\n + "JOB_BLOCK_IS_RELATIVE_ABORT_DEADLINE_PROPERTY "\n + "JOB_BLOCK_IS_RELATIVE_DEADLINE_PROPERTY "\n + "JOB_BLOCK_JOB_TEXT_PROPERTY "\n + "JOB_BLOCK_NAME_PROPERTY "\n + "JOB_BLOCK_NEED_SIGN_ON_PERFORM_PROPERTY "\n + "JOB_BLOCK_PERFORMER_PROPERTY "\n + "JOB_BLOCK_RELATIVE_ABORT_DEADLINE_TYPE_PROPERTY "\n + "JOB_BLOCK_RELATIVE_DEADLINE_TYPE_PROPERTY "\n + "JOB_BLOCK_SUBJECT_PROPERTY ";\n\n // Language code\n const language_code_constants = "ENGLISH_LANGUAGE_CODE RUSSIAN_LANGUAGE_CODE ";\n\n // Launching external applications\n const launching_external_applications_constants =\n "smHidden smMaximized smMinimized smNormal wmNo wmYes ";\n\n // Link kind\n const link_kind_constants =\n "COMPONENT_TOKEN_LINK_KIND "\n + "DOCUMENT_LINK_KIND "\n + "EDOCUMENT_LINK_KIND "\n + "FOLDER_LINK_KIND "\n + "JOB_LINK_KIND "\n + "REFERENCE_LINK_KIND "\n + "TASK_LINK_KIND ";\n\n // Lock type\n const lock_type_constants =\n "COMPONENT_TOKEN_LOCK_TYPE EDOCUMENT_VERSION_LOCK_TYPE ";\n\n // Monitor block properties\n const monitor_block_properties_constants =\n "MONITOR_BLOCK_AFTER_FINISH_EVENT "\n + "MONITOR_BLOCK_BEFORE_START_EVENT "\n + "MONITOR_BLOCK_DEADLINE_PROPERTY "\n + "MONITOR_BLOCK_INTERVAL_PROPERTY "\n + "MONITOR_BLOCK_INTERVAL_TYPE_PROPERTY "\n + "MONITOR_BLOCK_IS_RELATIVE_DEADLINE_PROPERTY "\n + "MONITOR_BLOCK_NAME_PROPERTY "\n + "MONITOR_BLOCK_RELATIVE_DEADLINE_TYPE_PROPERTY "\n + "MONITOR_BLOCK_SEARCH_SCRIPT_PROPERTY ";\n\n // Notice block properties\n const notice_block_properties_constants =\n "NOTICE_BLOCK_AFTER_FINISH_EVENT "\n + "NOTICE_BLOCK_ATTACHMENT_PROPERTY "\n + "NOTICE_BLOCK_ATTACHMENTS_RIGHTS_GROUP_PROPERTY "\n + "NOTICE_BLOCK_ATTACHMENTS_RIGHTS_TYPE_PROPERTY "\n + "NOTICE_BLOCK_BEFORE_START_EVENT "\n + "NOTICE_BLOCK_CREATED_NOTICES_PROPERTY "\n + "NOTICE_BLOCK_DEADLINE_PROPERTY "\n + "NOTICE_BLOCK_IS_RELATIVE_DEADLINE_PROPERTY "\n + "NOTICE_BLOCK_NAME_PROPERTY "\n + "NOTICE_BLOCK_NOTICE_TEXT_PROPERTY "\n + "NOTICE_BLOCK_PERFORMER_PROPERTY "\n + "NOTICE_BLOCK_RELATIVE_DEADLINE_TYPE_PROPERTY "\n + "NOTICE_BLOCK_SUBJECT_PROPERTY ";\n\n // Object events\n const object_events_constants =\n "dseAfterCancel "\n + "dseAfterClose "\n + "dseAfterDelete "\n + "dseAfterDeleteOutOfTransaction "\n + "dseAfterInsert "\n + "dseAfterOpen "\n + "dseAfterScroll "\n + "dseAfterUpdate "\n + "dseAfterUpdateOutOfTransaction "\n + "dseBeforeCancel "\n + "dseBeforeClose "\n + "dseBeforeDelete "\n + "dseBeforeDetailUpdate "\n + "dseBeforeInsert "\n + "dseBeforeOpen "\n + "dseBeforeUpdate "\n + "dseOnAnyRequisiteChange "\n + "dseOnCloseRecord "\n + "dseOnDeleteError "\n + "dseOnOpenRecord "\n + "dseOnPrepareUpdate "\n + "dseOnUpdateError "\n + "dseOnUpdateRatifiedRecord "\n + "dseOnValidDelete "\n + "dseOnValidUpdate "\n + "reOnChange "\n + "reOnChangeValues "\n + "SELECTION_BEGIN_ROUTE_EVENT "\n + "SELECTION_END_ROUTE_EVENT ";\n\n // Object params\n const object_params_constants =\n "CURRENT_PERIOD_IS_REQUIRED "\n + "PREVIOUS_CARD_TYPE_NAME "\n + "SHOW_RECORD_PROPERTIES_FORM ";\n\n // Other\n const other_constants =\n "ACCESS_RIGHTS_SETTING_DIALOG_CODE "\n + "ADMINISTRATOR_USER_CODE "\n + "ANALYTIC_REPORT_TYPE "\n + "asrtHideLocal "\n + "asrtHideRemote "\n + "CALCULATED_ROLE_TYPE_CODE "\n + "COMPONENTS_REFERENCE_DEVELOPER_VIEW_CODE "\n + "DCTS_TEST_PROTOCOLS_FOLDER_PATH "\n + "E_EDOC_VERSION_ALREADY_APPROVINGLY_SIGNED "\n + "E_EDOC_VERSION_ALREADY_APPROVINGLY_SIGNED_BY_USER "\n + "E_EDOC_VERSION_ALREDY_SIGNED "\n + "E_EDOC_VERSION_ALREDY_SIGNED_BY_USER "\n + "EDOC_TYPES_CODE_REQUISITE_FIELD_NAME "\n + "EDOCUMENTS_ALIAS_NAME "\n + "FILES_FOLDER_PATH "\n + "FILTER_OPERANDS_DELIMITER "\n + "FILTER_OPERATIONS_DELIMITER "\n + "FORMCARD_NAME "\n + "FORMLIST_NAME "\n + "GET_EXTENDED_DOCUMENT_EXTENSION_CREATION_MODE "\n + "GET_EXTENDED_DOCUMENT_EXTENSION_IMPORT_MODE "\n + "INTEGRATED_REPORT_TYPE "\n + "IS_BUILDER_APPLICATION_ROLE "\n + "IS_BUILDER_APPLICATION_ROLE2 "\n + "IS_BUILDER_USERS "\n + "ISBSYSDEV "\n + "LOG_FOLDER_PATH "\n + "mbCancel "\n + "mbNo "\n + "mbNoToAll "\n + "mbOK "\n + "mbYes "\n + "mbYesToAll "\n + "MEMORY_DATASET_DESRIPTIONS_FILENAME "\n + "mrNo "\n + "mrNoToAll "\n + "mrYes "\n + "mrYesToAll "\n + "MULTIPLE_SELECT_DIALOG_CODE "\n + "NONOPERATING_RECORD_FLAG_FEMININE "\n + "NONOPERATING_RECORD_FLAG_MASCULINE "\n + "OPERATING_RECORD_FLAG_FEMININE "\n + "OPERATING_RECORD_FLAG_MASCULINE "\n + "PROFILING_SETTINGS_COMMON_SETTINGS_CODE_VALUE "\n + "PROGRAM_INITIATED_LOOKUP_ACTION "\n + "ratDelete "\n + "ratEdit "\n + "ratInsert "\n + "REPORT_TYPE "\n + "REQUIRED_PICK_VALUES_VARIABLE "\n + "rmCard "\n + "rmList "\n + "SBRTE_PROGID_DEV "\n + "SBRTE_PROGID_RELEASE "\n + "STATIC_ROLE_TYPE_CODE "\n + "SUPPRESS_EMPTY_TEMPLATE_CREATION "\n + "SYSTEM_USER_CODE "\n + "UPDATE_DIALOG_DATASET "\n + "USED_IN_OBJECT_HINT_PARAM "\n + "USER_INITIATED_LOOKUP_ACTION "\n + "USER_NAME_FORMAT "\n + "USER_SELECTION_RESTRICTIONS "\n + "WORKFLOW_TEST_PROTOCOLS_FOLDER_PATH "\n + "ELS_SUBTYPE_CONTROL_NAME "\n + "ELS_FOLDER_KIND_CONTROL_NAME "\n + "REPEAT_PROCESS_CURRENT_OBJECT_EXCEPTION_NAME ";\n\n // Privileges\n const privileges_constants =\n "PRIVILEGE_COMPONENT_FULL_ACCESS "\n + "PRIVILEGE_DEVELOPMENT_EXPORT "\n + "PRIVILEGE_DEVELOPMENT_IMPORT "\n + "PRIVILEGE_DOCUMENT_DELETE "\n + "PRIVILEGE_ESD "\n + "PRIVILEGE_FOLDER_DELETE "\n + "PRIVILEGE_MANAGE_ACCESS_RIGHTS "\n + "PRIVILEGE_MANAGE_REPLICATION "\n + "PRIVILEGE_MANAGE_SESSION_SERVER "\n + "PRIVILEGE_OBJECT_FULL_ACCESS "\n + "PRIVILEGE_OBJECT_VIEW "\n + "PRIVILEGE_RESERVE_LICENSE "\n + "PRIVILEGE_SYSTEM_CUSTOMIZE "\n + "PRIVILEGE_SYSTEM_DEVELOP "\n + "PRIVILEGE_SYSTEM_INSTALL "\n + "PRIVILEGE_TASK_DELETE "\n + "PRIVILEGE_USER_PLUGIN_SETTINGS_CUSTOMIZE "\n + "PRIVILEGES_PSEUDOREFERENCE_CODE ";\n\n // Pseudoreference code\n const pseudoreference_code_constants =\n "ACCESS_TYPES_PSEUDOREFERENCE_CODE "\n + "ALL_AVAILABLE_COMPONENTS_PSEUDOREFERENCE_CODE "\n + "ALL_AVAILABLE_PRIVILEGES_PSEUDOREFERENCE_CODE "\n + "ALL_REPLICATE_COMPONENTS_PSEUDOREFERENCE_CODE "\n + "AVAILABLE_DEVELOPERS_COMPONENTS_PSEUDOREFERENCE_CODE "\n + "COMPONENTS_PSEUDOREFERENCE_CODE "\n + "FILTRATER_SETTINGS_CONFLICTS_PSEUDOREFERENCE_CODE "\n + "GROUPS_PSEUDOREFERENCE_CODE "\n + "RECEIVE_PROTOCOL_PSEUDOREFERENCE_CODE "\n + "REFERENCE_REQUISITE_PSEUDOREFERENCE_CODE "\n + "REFERENCE_REQUISITES_PSEUDOREFERENCE_CODE "\n + "REFTYPES_PSEUDOREFERENCE_CODE "\n + "REPLICATION_SEANCES_DIARY_PSEUDOREFERENCE_CODE "\n + "SEND_PROTOCOL_PSEUDOREFERENCE_CODE "\n + "SUBSTITUTES_PSEUDOREFERENCE_CODE "\n + "SYSTEM_SETTINGS_PSEUDOREFERENCE_CODE "\n + "UNITS_PSEUDOREFERENCE_CODE "\n + "USERS_PSEUDOREFERENCE_CODE "\n + "VIEWERS_PSEUDOREFERENCE_CODE ";\n\n // Requisite ISBCertificateType values\n const requisite_ISBCertificateType_values_constants =\n "CERTIFICATE_TYPE_ENCRYPT "\n + "CERTIFICATE_TYPE_SIGN "\n + "CERTIFICATE_TYPE_SIGN_AND_ENCRYPT ";\n\n // Requisite ISBEDocStorageType values\n const requisite_ISBEDocStorageType_values_constants =\n "STORAGE_TYPE_FILE "\n + "STORAGE_TYPE_NAS_CIFS "\n + "STORAGE_TYPE_SAPERION "\n + "STORAGE_TYPE_SQL_SERVER ";\n\n // Requisite CompType2 values\n const requisite_compType2_values_constants =\n "COMPTYPE2_REQUISITE_DOCUMENTS_VALUE "\n + "COMPTYPE2_REQUISITE_TASKS_VALUE "\n + "COMPTYPE2_REQUISITE_FOLDERS_VALUE "\n + "COMPTYPE2_REQUISITE_REFERENCES_VALUE ";\n\n // Requisite name\n const requisite_name_constants =\n "SYSREQ_CODE "\n + "SYSREQ_COMPTYPE2 "\n + "SYSREQ_CONST_AVAILABLE_FOR_WEB "\n + "SYSREQ_CONST_COMMON_CODE "\n + "SYSREQ_CONST_COMMON_VALUE "\n + "SYSREQ_CONST_FIRM_CODE "\n + "SYSREQ_CONST_FIRM_STATUS "\n + "SYSREQ_CONST_FIRM_VALUE "\n + "SYSREQ_CONST_SERVER_STATUS "\n + "SYSREQ_CONTENTS "\n + "SYSREQ_DATE_OPEN "\n + "SYSREQ_DATE_CLOSE "\n + "SYSREQ_DESCRIPTION "\n + "SYSREQ_DESCRIPTION_LOCALIZE_ID "\n + "SYSREQ_DOUBLE "\n + "SYSREQ_EDOC_ACCESS_TYPE "\n + "SYSREQ_EDOC_AUTHOR "\n + "SYSREQ_EDOC_CREATED "\n + "SYSREQ_EDOC_DELEGATE_RIGHTS_REQUISITE_CODE "\n + "SYSREQ_EDOC_EDITOR "\n + "SYSREQ_EDOC_ENCODE_TYPE "\n + "SYSREQ_EDOC_ENCRYPTION_PLUGIN_NAME "\n + "SYSREQ_EDOC_ENCRYPTION_PLUGIN_VERSION "\n + "SYSREQ_EDOC_EXPORT_DATE "\n + "SYSREQ_EDOC_EXPORTER "\n + "SYSREQ_EDOC_KIND "\n + "SYSREQ_EDOC_LIFE_STAGE_NAME "\n + "SYSREQ_EDOC_LOCKED_FOR_SERVER_CODE "\n + "SYSREQ_EDOC_MODIFIED "\n + "SYSREQ_EDOC_NAME "\n + "SYSREQ_EDOC_NOTE "\n + "SYSREQ_EDOC_QUALIFIED_ID "\n + "SYSREQ_EDOC_SESSION_KEY "\n + "SYSREQ_EDOC_SESSION_KEY_ENCRYPTION_PLUGIN_NAME "\n + "SYSREQ_EDOC_SESSION_KEY_ENCRYPTION_PLUGIN_VERSION "\n + "SYSREQ_EDOC_SIGNATURE_TYPE "\n + "SYSREQ_EDOC_SIGNED "\n + "SYSREQ_EDOC_STORAGE "\n + "SYSREQ_EDOC_STORAGES_ARCHIVE_STORAGE "\n + "SYSREQ_EDOC_STORAGES_CHECK_RIGHTS "\n + "SYSREQ_EDOC_STORAGES_COMPUTER_NAME "\n + "SYSREQ_EDOC_STORAGES_EDIT_IN_STORAGE "\n + "SYSREQ_EDOC_STORAGES_EXECUTIVE_STORAGE "\n + "SYSREQ_EDOC_STORAGES_FUNCTION "\n + "SYSREQ_EDOC_STORAGES_INITIALIZED "\n + "SYSREQ_EDOC_STORAGES_LOCAL_PATH "\n + "SYSREQ_EDOC_STORAGES_SAPERION_DATABASE_NAME "\n + "SYSREQ_EDOC_STORAGES_SEARCH_BY_TEXT "\n + "SYSREQ_EDOC_STORAGES_SERVER_NAME "\n + "SYSREQ_EDOC_STORAGES_SHARED_SOURCE_NAME "\n + "SYSREQ_EDOC_STORAGES_TYPE "\n + "SYSREQ_EDOC_TEXT_MODIFIED "\n + "SYSREQ_EDOC_TYPE_ACT_CODE "\n + "SYSREQ_EDOC_TYPE_ACT_DESCRIPTION "\n + "SYSREQ_EDOC_TYPE_ACT_DESCRIPTION_LOCALIZE_ID "\n + "SYSREQ_EDOC_TYPE_ACT_ON_EXECUTE "\n + "SYSREQ_EDOC_TYPE_ACT_ON_EXECUTE_EXISTS "\n + "SYSREQ_EDOC_TYPE_ACT_SECTION "\n + "SYSREQ_EDOC_TYPE_ADD_PARAMS "\n + "SYSREQ_EDOC_TYPE_COMMENT "\n + "SYSREQ_EDOC_TYPE_EVENT_TEXT "\n + "SYSREQ_EDOC_TYPE_NAME_IN_SINGULAR "\n + "SYSREQ_EDOC_TYPE_NAME_IN_SINGULAR_LOCALIZE_ID "\n + "SYSREQ_EDOC_TYPE_NAME_LOCALIZE_ID "\n + "SYSREQ_EDOC_TYPE_NUMERATION_METHOD "\n + "SYSREQ_EDOC_TYPE_PSEUDO_REQUISITE_CODE "\n + "SYSREQ_EDOC_TYPE_REQ_CODE "\n + "SYSREQ_EDOC_TYPE_REQ_DESCRIPTION "\n + "SYSREQ_EDOC_TYPE_REQ_DESCRIPTION_LOCALIZE_ID "\n + "SYSREQ_EDOC_TYPE_REQ_IS_LEADING "\n + "SYSREQ_EDOC_TYPE_REQ_IS_REQUIRED "\n + "SYSREQ_EDOC_TYPE_REQ_NUMBER "\n + "SYSREQ_EDOC_TYPE_REQ_ON_CHANGE "\n + "SYSREQ_EDOC_TYPE_REQ_ON_CHANGE_EXISTS "\n + "SYSREQ_EDOC_TYPE_REQ_ON_SELECT "\n + "SYSREQ_EDOC_TYPE_REQ_ON_SELECT_KIND "\n + "SYSREQ_EDOC_TYPE_REQ_SECTION "\n + "SYSREQ_EDOC_TYPE_VIEW_CARD "\n + "SYSREQ_EDOC_TYPE_VIEW_CODE "\n + "SYSREQ_EDOC_TYPE_VIEW_COMMENT "\n + "SYSREQ_EDOC_TYPE_VIEW_IS_MAIN "\n + "SYSREQ_EDOC_TYPE_VIEW_NAME "\n + "SYSREQ_EDOC_TYPE_VIEW_NAME_LOCALIZE_ID "\n + "SYSREQ_EDOC_VERSION_AUTHOR "\n + "SYSREQ_EDOC_VERSION_CRC "\n + "SYSREQ_EDOC_VERSION_DATA "\n + "SYSREQ_EDOC_VERSION_EDITOR "\n + "SYSREQ_EDOC_VERSION_EXPORT_DATE "\n + "SYSREQ_EDOC_VERSION_EXPORTER "\n + "SYSREQ_EDOC_VERSION_HIDDEN "\n + "SYSREQ_EDOC_VERSION_LIFE_STAGE "\n + "SYSREQ_EDOC_VERSION_MODIFIED "\n + "SYSREQ_EDOC_VERSION_NOTE "\n + "SYSREQ_EDOC_VERSION_SIGNATURE_TYPE "\n + "SYSREQ_EDOC_VERSION_SIGNED "\n + "SYSREQ_EDOC_VERSION_SIZE "\n + "SYSREQ_EDOC_VERSION_SOURCE "\n + "SYSREQ_EDOC_VERSION_TEXT_MODIFIED "\n + "SYSREQ_EDOCKIND_DEFAULT_VERSION_STATE_CODE "\n + "SYSREQ_FOLDER_KIND "\n + "SYSREQ_FUNC_CATEGORY "\n + "SYSREQ_FUNC_COMMENT "\n + "SYSREQ_FUNC_GROUP "\n + "SYSREQ_FUNC_GROUP_COMMENT "\n + "SYSREQ_FUNC_GROUP_NUMBER "\n + "SYSREQ_FUNC_HELP "\n + "SYSREQ_FUNC_PARAM_DEF_VALUE "\n + "SYSREQ_FUNC_PARAM_IDENT "\n + "SYSREQ_FUNC_PARAM_NUMBER "\n + "SYSREQ_FUNC_PARAM_TYPE "\n + "SYSREQ_FUNC_TEXT "\n + "SYSREQ_GROUP_CATEGORY "\n + "SYSREQ_ID "\n + "SYSREQ_LAST_UPDATE "\n + "SYSREQ_LEADER_REFERENCE "\n + "SYSREQ_LINE_NUMBER "\n + "SYSREQ_MAIN_RECORD_ID "\n + "SYSREQ_NAME "\n + "SYSREQ_NAME_LOCALIZE_ID "\n + "SYSREQ_NOTE "\n + "SYSREQ_ORIGINAL_RECORD "\n + "SYSREQ_OUR_FIRM "\n + "SYSREQ_PROFILING_SETTINGS_BATCH_LOGING "\n + "SYSREQ_PROFILING_SETTINGS_BATCH_SIZE "\n + "SYSREQ_PROFILING_SETTINGS_PROFILING_ENABLED "\n + "SYSREQ_PROFILING_SETTINGS_SQL_PROFILING_ENABLED "\n + "SYSREQ_PROFILING_SETTINGS_START_LOGGED "\n + "SYSREQ_RECORD_STATUS "\n + "SYSREQ_REF_REQ_FIELD_NAME "\n + "SYSREQ_REF_REQ_FORMAT "\n + "SYSREQ_REF_REQ_GENERATED "\n + "SYSREQ_REF_REQ_LENGTH "\n + "SYSREQ_REF_REQ_PRECISION "\n + "SYSREQ_REF_REQ_REFERENCE "\n + "SYSREQ_REF_REQ_SECTION "\n + "SYSREQ_REF_REQ_STORED "\n + "SYSREQ_REF_REQ_TOKENS "\n + "SYSREQ_REF_REQ_TYPE "\n + "SYSREQ_REF_REQ_VIEW "\n + "SYSREQ_REF_TYPE_ACT_CODE "\n + "SYSREQ_REF_TYPE_ACT_DESCRIPTION "\n + "SYSREQ_REF_TYPE_ACT_DESCRIPTION_LOCALIZE_ID "\n + "SYSREQ_REF_TYPE_ACT_ON_EXECUTE "\n + "SYSREQ_REF_TYPE_ACT_ON_EXECUTE_EXISTS "\n + "SYSREQ_REF_TYPE_ACT_SECTION "\n + "SYSREQ_REF_TYPE_ADD_PARAMS "\n + "SYSREQ_REF_TYPE_COMMENT "\n + "SYSREQ_REF_TYPE_COMMON_SETTINGS "\n + "SYSREQ_REF_TYPE_DISPLAY_REQUISITE_NAME "\n + "SYSREQ_REF_TYPE_EVENT_TEXT "\n + "SYSREQ_REF_TYPE_MAIN_LEADING_REF "\n + "SYSREQ_REF_TYPE_NAME_IN_SINGULAR "\n + "SYSREQ_REF_TYPE_NAME_IN_SINGULAR_LOCALIZE_ID "\n + "SYSREQ_REF_TYPE_NAME_LOCALIZE_ID "\n + "SYSREQ_REF_TYPE_NUMERATION_METHOD "\n + "SYSREQ_REF_TYPE_REQ_CODE "\n + "SYSREQ_REF_TYPE_REQ_DESCRIPTION "\n + "SYSREQ_REF_TYPE_REQ_DESCRIPTION_LOCALIZE_ID "\n + "SYSREQ_REF_TYPE_REQ_IS_CONTROL "\n + "SYSREQ_REF_TYPE_REQ_IS_FILTER "\n + "SYSREQ_REF_TYPE_REQ_IS_LEADING "\n + "SYSREQ_REF_TYPE_REQ_IS_REQUIRED "\n + "SYSREQ_REF_TYPE_REQ_NUMBER "\n + "SYSREQ_REF_TYPE_REQ_ON_CHANGE "\n + "SYSREQ_REF_TYPE_REQ_ON_CHANGE_EXISTS "\n + "SYSREQ_REF_TYPE_REQ_ON_SELECT "\n + "SYSREQ_REF_TYPE_REQ_ON_SELECT_KIND "\n + "SYSREQ_REF_TYPE_REQ_SECTION "\n + "SYSREQ_REF_TYPE_VIEW_CARD "\n + "SYSREQ_REF_TYPE_VIEW_CODE "\n + "SYSREQ_REF_TYPE_VIEW_COMMENT "\n + "SYSREQ_REF_TYPE_VIEW_IS_MAIN "\n + "SYSREQ_REF_TYPE_VIEW_NAME "\n + "SYSREQ_REF_TYPE_VIEW_NAME_LOCALIZE_ID "\n + "SYSREQ_REFERENCE_TYPE_ID "\n + "SYSREQ_STATE "\n + "SYSREQ_STATЕ "\n + "SYSREQ_SYSTEM_SETTINGS_VALUE "\n + "SYSREQ_TYPE "\n + "SYSREQ_UNIT "\n + "SYSREQ_UNIT_ID "\n + "SYSREQ_USER_GROUPS_GROUP_FULL_NAME "\n + "SYSREQ_USER_GROUPS_GROUP_NAME "\n + "SYSREQ_USER_GROUPS_GROUP_SERVER_NAME "\n + "SYSREQ_USERS_ACCESS_RIGHTS "\n + "SYSREQ_USERS_AUTHENTICATION "\n + "SYSREQ_USERS_CATEGORY "\n + "SYSREQ_USERS_COMPONENT "\n + "SYSREQ_USERS_COMPONENT_USER_IS_PUBLIC "\n + "SYSREQ_USERS_DOMAIN "\n + "SYSREQ_USERS_FULL_USER_NAME "\n + "SYSREQ_USERS_GROUP "\n + "SYSREQ_USERS_IS_MAIN_SERVER "\n + "SYSREQ_USERS_LOGIN "\n + "SYSREQ_USERS_REFERENCE_USER_IS_PUBLIC "\n + "SYSREQ_USERS_STATUS "\n + "SYSREQ_USERS_USER_CERTIFICATE "\n + "SYSREQ_USERS_USER_CERTIFICATE_INFO "\n + "SYSREQ_USERS_USER_CERTIFICATE_PLUGIN_NAME "\n + "SYSREQ_USERS_USER_CERTIFICATE_PLUGIN_VERSION "\n + "SYSREQ_USERS_USER_CERTIFICATE_STATE "\n + "SYSREQ_USERS_USER_CERTIFICATE_SUBJECT_NAME "\n + "SYSREQ_USERS_USER_CERTIFICATE_THUMBPRINT "\n + "SYSREQ_USERS_USER_DEFAULT_CERTIFICATE "\n + "SYSREQ_USERS_USER_DESCRIPTION "\n + "SYSREQ_USERS_USER_GLOBAL_NAME "\n + "SYSREQ_USERS_USER_LOGIN "\n + "SYSREQ_USERS_USER_MAIN_SERVER "\n + "SYSREQ_USERS_USER_TYPE "\n + "SYSREQ_WORK_RULES_FOLDER_ID ";\n\n // Result\n const result_constants = "RESULT_VAR_NAME RESULT_VAR_NAME_ENG ";\n\n // Rule identification\n const rule_identification_constants =\n "AUTO_NUMERATION_RULE_ID "\n + "CANT_CHANGE_ID_REQUISITE_RULE_ID "\n + "CANT_CHANGE_OURFIRM_REQUISITE_RULE_ID "\n + "CHECK_CHANGING_REFERENCE_RECORD_USE_RULE_ID "\n + "CHECK_CODE_REQUISITE_RULE_ID "\n + "CHECK_DELETING_REFERENCE_RECORD_USE_RULE_ID "\n + "CHECK_FILTRATER_CHANGES_RULE_ID "\n + "CHECK_RECORD_INTERVAL_RULE_ID "\n + "CHECK_REFERENCE_INTERVAL_RULE_ID "\n + "CHECK_REQUIRED_DATA_FULLNESS_RULE_ID "\n + "CHECK_REQUIRED_REQUISITES_FULLNESS_RULE_ID "\n + "MAKE_RECORD_UNRATIFIED_RULE_ID "\n + "RESTORE_AUTO_NUMERATION_RULE_ID "\n + "SET_FIRM_CONTEXT_FROM_RECORD_RULE_ID "\n + "SET_FIRST_RECORD_IN_LIST_FORM_RULE_ID "\n + "SET_IDSPS_VALUE_RULE_ID "\n + "SET_NEXT_CODE_VALUE_RULE_ID "\n + "SET_OURFIRM_BOUNDS_RULE_ID "\n + "SET_OURFIRM_REQUISITE_RULE_ID ";\n\n // Script block properties\n const script_block_properties_constants =\n "SCRIPT_BLOCK_AFTER_FINISH_EVENT "\n + "SCRIPT_BLOCK_BEFORE_START_EVENT "\n + "SCRIPT_BLOCK_EXECUTION_RESULTS_PROPERTY "\n + "SCRIPT_BLOCK_NAME_PROPERTY "\n + "SCRIPT_BLOCK_SCRIPT_PROPERTY ";\n\n // Subtask block properties\n const subtask_block_properties_constants =\n "SUBTASK_BLOCK_ABORT_DEADLINE_PROPERTY "\n + "SUBTASK_BLOCK_AFTER_FINISH_EVENT "\n + "SUBTASK_BLOCK_ASSIGN_PARAMS_EVENT "\n + "SUBTASK_BLOCK_ATTACHMENTS_PROPERTY "\n + "SUBTASK_BLOCK_ATTACHMENTS_RIGHTS_GROUP_PROPERTY "\n + "SUBTASK_BLOCK_ATTACHMENTS_RIGHTS_TYPE_PROPERTY "\n + "SUBTASK_BLOCK_BEFORE_START_EVENT "\n + "SUBTASK_BLOCK_CREATED_TASK_PROPERTY "\n + "SUBTASK_BLOCK_CREATION_EVENT "\n + "SUBTASK_BLOCK_DEADLINE_PROPERTY "\n + "SUBTASK_BLOCK_IMPORTANCE_PROPERTY "\n + "SUBTASK_BLOCK_INITIATOR_PROPERTY "\n + "SUBTASK_BLOCK_IS_RELATIVE_ABORT_DEADLINE_PROPERTY "\n + "SUBTASK_BLOCK_IS_RELATIVE_DEADLINE_PROPERTY "\n + "SUBTASK_BLOCK_JOBS_TYPE_PROPERTY "\n + "SUBTASK_BLOCK_NAME_PROPERTY "\n + "SUBTASK_BLOCK_PARALLEL_ROUTE_PROPERTY "\n + "SUBTASK_BLOCK_PERFORMERS_PROPERTY "\n + "SUBTASK_BLOCK_RELATIVE_ABORT_DEADLINE_TYPE_PROPERTY "\n + "SUBTASK_BLOCK_RELATIVE_DEADLINE_TYPE_PROPERTY "\n + "SUBTASK_BLOCK_REQUIRE_SIGN_PROPERTY "\n + "SUBTASK_BLOCK_STANDARD_ROUTE_PROPERTY "\n + "SUBTASK_BLOCK_START_EVENT "\n + "SUBTASK_BLOCK_STEP_CONTROL_PROPERTY "\n + "SUBTASK_BLOCK_SUBJECT_PROPERTY "\n + "SUBTASK_BLOCK_TASK_CONTROL_PROPERTY "\n + "SUBTASK_BLOCK_TEXT_PROPERTY "\n + "SUBTASK_BLOCK_UNLOCK_ATTACHMENTS_ON_STOP_PROPERTY "\n + "SUBTASK_BLOCK_USE_STANDARD_ROUTE_PROPERTY "\n + "SUBTASK_BLOCK_WAIT_FOR_TASK_COMPLETE_PROPERTY ";\n\n // System component\n const system_component_constants =\n "SYSCOMP_CONTROL_JOBS "\n + "SYSCOMP_FOLDERS "\n + "SYSCOMP_JOBS "\n + "SYSCOMP_NOTICES "\n + "SYSCOMP_TASKS ";\n\n // System dialogs\n const system_dialogs_constants =\n "SYSDLG_CREATE_EDOCUMENT "\n + "SYSDLG_CREATE_EDOCUMENT_VERSION "\n + "SYSDLG_CURRENT_PERIOD "\n + "SYSDLG_EDIT_FUNCTION_HELP "\n + "SYSDLG_EDOCUMENT_KINDS_FOR_TEMPLATE "\n + "SYSDLG_EXPORT_MULTIPLE_EDOCUMENTS "\n + "SYSDLG_EXPORT_SINGLE_EDOCUMENT "\n + "SYSDLG_IMPORT_EDOCUMENT "\n + "SYSDLG_MULTIPLE_SELECT "\n + "SYSDLG_SETUP_ACCESS_RIGHTS "\n + "SYSDLG_SETUP_DEFAULT_RIGHTS "\n + "SYSDLG_SETUP_FILTER_CONDITION "\n + "SYSDLG_SETUP_SIGN_RIGHTS "\n + "SYSDLG_SETUP_TASK_OBSERVERS "\n + "SYSDLG_SETUP_TASK_ROUTE "\n + "SYSDLG_SETUP_USERS_LIST "\n + "SYSDLG_SIGN_EDOCUMENT "\n + "SYSDLG_SIGN_MULTIPLE_EDOCUMENTS ";\n\n // System reference names\n const system_reference_names_constants =\n "SYSREF_ACCESS_RIGHTS_TYPES "\n + "SYSREF_ADMINISTRATION_HISTORY "\n + "SYSREF_ALL_AVAILABLE_COMPONENTS "\n + "SYSREF_ALL_AVAILABLE_PRIVILEGES "\n + "SYSREF_ALL_REPLICATING_COMPONENTS "\n + "SYSREF_AVAILABLE_DEVELOPERS_COMPONENTS "\n + "SYSREF_CALENDAR_EVENTS "\n + "SYSREF_COMPONENT_TOKEN_HISTORY "\n + "SYSREF_COMPONENT_TOKENS "\n + "SYSREF_COMPONENTS "\n + "SYSREF_CONSTANTS "\n + "SYSREF_DATA_RECEIVE_PROTOCOL "\n + "SYSREF_DATA_SEND_PROTOCOL "\n + "SYSREF_DIALOGS "\n + "SYSREF_DIALOGS_REQUISITES "\n + "SYSREF_EDITORS "\n + "SYSREF_EDOC_CARDS "\n + "SYSREF_EDOC_TYPES "\n + "SYSREF_EDOCUMENT_CARD_REQUISITES "\n + "SYSREF_EDOCUMENT_CARD_TYPES "\n + "SYSREF_EDOCUMENT_CARD_TYPES_REFERENCE "\n + "SYSREF_EDOCUMENT_CARDS "\n + "SYSREF_EDOCUMENT_HISTORY "\n + "SYSREF_EDOCUMENT_KINDS "\n + "SYSREF_EDOCUMENT_REQUISITES "\n + "SYSREF_EDOCUMENT_SIGNATURES "\n + "SYSREF_EDOCUMENT_TEMPLATES "\n + "SYSREF_EDOCUMENT_TEXT_STORAGES "\n + "SYSREF_EDOCUMENT_VIEWS "\n + "SYSREF_FILTERER_SETUP_CONFLICTS "\n + "SYSREF_FILTRATER_SETTING_CONFLICTS "\n + "SYSREF_FOLDER_HISTORY "\n + "SYSREF_FOLDERS "\n + "SYSREF_FUNCTION_GROUPS "\n + "SYSREF_FUNCTION_PARAMS "\n + "SYSREF_FUNCTIONS "\n + "SYSREF_JOB_HISTORY "\n + "SYSREF_LINKS "\n + "SYSREF_LOCALIZATION_DICTIONARY "\n + "SYSREF_LOCALIZATION_LANGUAGES "\n + "SYSREF_MODULES "\n + "SYSREF_PRIVILEGES "\n + "SYSREF_RECORD_HISTORY "\n + "SYSREF_REFERENCE_REQUISITES "\n + "SYSREF_REFERENCE_TYPE_VIEWS "\n + "SYSREF_REFERENCE_TYPES "\n + "SYSREF_REFERENCES "\n + "SYSREF_REFERENCES_REQUISITES "\n + "SYSREF_REMOTE_SERVERS "\n + "SYSREF_REPLICATION_SESSIONS_LOG "\n + "SYSREF_REPLICATION_SESSIONS_PROTOCOL "\n + "SYSREF_REPORTS "\n + "SYSREF_ROLES "\n + "SYSREF_ROUTE_BLOCK_GROUPS "\n + "SYSREF_ROUTE_BLOCKS "\n + "SYSREF_SCRIPTS "\n + "SYSREF_SEARCHES "\n + "SYSREF_SERVER_EVENTS "\n + "SYSREF_SERVER_EVENTS_HISTORY "\n + "SYSREF_STANDARD_ROUTE_GROUPS "\n + "SYSREF_STANDARD_ROUTES "\n + "SYSREF_STATUSES "\n + "SYSREF_SYSTEM_SETTINGS "\n + "SYSREF_TASK_HISTORY "\n + "SYSREF_TASK_KIND_GROUPS "\n + "SYSREF_TASK_KINDS "\n + "SYSREF_TASK_RIGHTS "\n + "SYSREF_TASK_SIGNATURES "\n + "SYSREF_TASKS "\n + "SYSREF_UNITS "\n + "SYSREF_USER_GROUPS "\n + "SYSREF_USER_GROUPS_REFERENCE "\n + "SYSREF_USER_SUBSTITUTION "\n + "SYSREF_USERS "\n + "SYSREF_USERS_REFERENCE "\n + "SYSREF_VIEWERS "\n + "SYSREF_WORKING_TIME_CALENDARS ";\n\n // Table name\n const table_name_constants =\n "ACCESS_RIGHTS_TABLE_NAME "\n + "EDMS_ACCESS_TABLE_NAME "\n + "EDOC_TYPES_TABLE_NAME ";\n\n // Test\n const test_constants =\n "TEST_DEV_DB_NAME "\n + "TEST_DEV_SYSTEM_CODE "\n + "TEST_EDMS_DB_NAME "\n + "TEST_EDMS_MAIN_CODE "\n + "TEST_EDMS_MAIN_DB_NAME "\n + "TEST_EDMS_SECOND_CODE "\n + "TEST_EDMS_SECOND_DB_NAME "\n + "TEST_EDMS_SYSTEM_CODE "\n + "TEST_ISB5_MAIN_CODE "\n + "TEST_ISB5_SECOND_CODE "\n + "TEST_SQL_SERVER_2005_NAME "\n + "TEST_SQL_SERVER_NAME ";\n\n // Using the dialog windows\n const using_the_dialog_windows_constants =\n "ATTENTION_CAPTION "\n + "cbsCommandLinks "\n + "cbsDefault "\n + "CONFIRMATION_CAPTION "\n + "ERROR_CAPTION "\n + "INFORMATION_CAPTION "\n + "mrCancel "\n + "mrOk ";\n\n // Using the document\n const using_the_document_constants =\n "EDOC_VERSION_ACTIVE_STAGE_CODE "\n + "EDOC_VERSION_DESIGN_STAGE_CODE "\n + "EDOC_VERSION_OBSOLETE_STAGE_CODE ";\n\n // Using the EA and encryption\n const using_the_EA_and_encryption_constants =\n "cpDataEnciphermentEnabled "\n + "cpDigitalSignatureEnabled "\n + "cpID "\n + "cpIssuer "\n + "cpPluginVersion "\n + "cpSerial "\n + "cpSubjectName "\n + "cpSubjSimpleName "\n + "cpValidFromDate "\n + "cpValidToDate ";\n\n // Using the ISBL-editor\n const using_the_ISBL_editor_constants =\n "ISBL_SYNTAX " + "NO_SYNTAX " + "XML_SYNTAX ";\n\n // Wait block properties\n const wait_block_properties_constants =\n "WAIT_BLOCK_AFTER_FINISH_EVENT "\n + "WAIT_BLOCK_BEFORE_START_EVENT "\n + "WAIT_BLOCK_DEADLINE_PROPERTY "\n + "WAIT_BLOCK_IS_RELATIVE_DEADLINE_PROPERTY "\n + "WAIT_BLOCK_NAME_PROPERTY "\n + "WAIT_BLOCK_RELATIVE_DEADLINE_TYPE_PROPERTY ";\n\n // SYSRES Common\n const sysres_common_constants =\n "SYSRES_COMMON "\n + "SYSRES_CONST "\n + "SYSRES_MBFUNC "\n + "SYSRES_SBDATA "\n + "SYSRES_SBGUI "\n + "SYSRES_SBINTF "\n + "SYSRES_SBREFDSC "\n + "SYSRES_SQLERRORS "\n + "SYSRES_SYSCOMP ";\n\n // Константы ==> built_in\n const CONSTANTS =\n sysres_constants\n + base_constants\n + base_group_name_constants\n + decision_block_properties_constants\n + file_extension_constants\n + job_block_properties_constants\n + language_code_constants\n + launching_external_applications_constants\n + link_kind_constants\n + lock_type_constants\n + monitor_block_properties_constants\n + notice_block_properties_constants\n + object_events_constants\n + object_params_constants\n + other_constants\n + privileges_constants\n + pseudoreference_code_constants\n + requisite_ISBCertificateType_values_constants\n + requisite_ISBEDocStorageType_values_constants\n + requisite_compType2_values_constants\n + requisite_name_constants\n + result_constants\n + rule_identification_constants\n + script_block_properties_constants\n + subtask_block_properties_constants\n + system_component_constants\n + system_dialogs_constants\n + system_reference_names_constants\n + table_name_constants\n + test_constants\n + using_the_dialog_windows_constants\n + using_the_document_constants\n + using_the_EA_and_encryption_constants\n + using_the_ISBL_editor_constants\n + wait_block_properties_constants\n + sysres_common_constants;\n\n // enum TAccountType\n const TAccountType = "atUser atGroup atRole ";\n\n // enum TActionEnabledMode\n const TActionEnabledMode =\n "aemEnabledAlways "\n + "aemDisabledAlways "\n + "aemEnabledOnBrowse "\n + "aemEnabledOnEdit "\n + "aemDisabledOnBrowseEmpty ";\n\n // enum TAddPosition\n const TAddPosition = "apBegin apEnd ";\n\n // enum TAlignment\n const TAlignment = "alLeft alRight ";\n\n // enum TAreaShowMode\n const TAreaShowMode =\n "asmNever "\n + "asmNoButCustomize "\n + "asmAsLastTime "\n + "asmYesButCustomize "\n + "asmAlways ";\n\n // enum TCertificateInvalidationReason\n const TCertificateInvalidationReason = "cirCommon cirRevoked ";\n\n // enum TCertificateType\n const TCertificateType = "ctSignature ctEncode ctSignatureEncode ";\n\n // enum TCheckListBoxItemState\n const TCheckListBoxItemState = "clbUnchecked clbChecked clbGrayed ";\n\n // enum TCloseOnEsc\n const TCloseOnEsc = "ceISB ceAlways ceNever ";\n\n // enum TCompType\n const TCompType =\n "ctDocument "\n + "ctReference "\n + "ctScript "\n + "ctUnknown "\n + "ctReport "\n + "ctDialog "\n + "ctFunction "\n + "ctFolder "\n + "ctEDocument "\n + "ctTask "\n + "ctJob "\n + "ctNotice "\n + "ctControlJob ";\n\n // enum TConditionFormat\n const TConditionFormat = "cfInternal cfDisplay ";\n\n // enum TConnectionIntent\n const TConnectionIntent = "ciUnspecified ciWrite ciRead ";\n\n // enum TContentKind\n const TContentKind =\n "ckFolder "\n + "ckEDocument "\n + "ckTask "\n + "ckJob "\n + "ckComponentToken "\n + "ckAny "\n + "ckReference "\n + "ckScript "\n + "ckReport "\n + "ckDialog ";\n\n // enum TControlType\n const TControlType =\n "ctISBLEditor "\n + "ctBevel "\n + "ctButton "\n + "ctCheckListBox "\n + "ctComboBox "\n + "ctComboEdit "\n + "ctGrid "\n + "ctDBCheckBox "\n + "ctDBComboBox "\n + "ctDBEdit "\n + "ctDBEllipsis "\n + "ctDBMemo "\n + "ctDBNavigator "\n + "ctDBRadioGroup "\n + "ctDBStatusLabel "\n + "ctEdit "\n + "ctGroupBox "\n + "ctInplaceHint "\n + "ctMemo "\n + "ctPanel "\n + "ctListBox "\n + "ctRadioButton "\n + "ctRichEdit "\n + "ctTabSheet "\n + "ctWebBrowser "\n + "ctImage "\n + "ctHyperLink "\n + "ctLabel "\n + "ctDBMultiEllipsis "\n + "ctRibbon "\n + "ctRichView "\n + "ctInnerPanel "\n + "ctPanelGroup "\n + "ctBitButton ";\n\n // enum TCriterionContentType\n const TCriterionContentType =\n "cctDate "\n + "cctInteger "\n + "cctNumeric "\n + "cctPick "\n + "cctReference "\n + "cctString "\n + "cctText ";\n\n // enum TCultureType\n const TCultureType = "cltInternal cltPrimary cltGUI ";\n\n // enum TDataSetEventType\n const TDataSetEventType =\n "dseBeforeOpen "\n + "dseAfterOpen "\n + "dseBeforeClose "\n + "dseAfterClose "\n + "dseOnValidDelete "\n + "dseBeforeDelete "\n + "dseAfterDelete "\n + "dseAfterDeleteOutOfTransaction "\n + "dseOnDeleteError "\n + "dseBeforeInsert "\n + "dseAfterInsert "\n + "dseOnValidUpdate "\n + "dseBeforeUpdate "\n + "dseOnUpdateRatifiedRecord "\n + "dseAfterUpdate "\n + "dseAfterUpdateOutOfTransaction "\n + "dseOnUpdateError "\n + "dseAfterScroll "\n + "dseOnOpenRecord "\n + "dseOnCloseRecord "\n + "dseBeforeCancel "\n + "dseAfterCancel "\n + "dseOnUpdateDeadlockError "\n + "dseBeforeDetailUpdate "\n + "dseOnPrepareUpdate "\n + "dseOnAnyRequisiteChange ";\n\n // enum TDataSetState\n const TDataSetState = "dssEdit dssInsert dssBrowse dssInActive ";\n\n // enum TDateFormatType\n const TDateFormatType = "dftDate dftShortDate dftDateTime dftTimeStamp ";\n\n // enum TDateOffsetType\n const TDateOffsetType = "dotDays dotHours dotMinutes dotSeconds ";\n\n // enum TDateTimeKind\n const TDateTimeKind = "dtkndLocal dtkndUTC ";\n\n // enum TDeaAccessRights\n const TDeaAccessRights = "arNone arView arEdit arFull ";\n\n // enum TDocumentDefaultAction\n const TDocumentDefaultAction = "ddaView ddaEdit ";\n\n // enum TEditMode\n const TEditMode =\n "emLock "\n + "emEdit "\n + "emSign "\n + "emExportWithLock "\n + "emImportWithUnlock "\n + "emChangeVersionNote "\n + "emOpenForModify "\n + "emChangeLifeStage "\n + "emDelete "\n + "emCreateVersion "\n + "emImport "\n + "emUnlockExportedWithLock "\n + "emStart "\n + "emAbort "\n + "emReInit "\n + "emMarkAsReaded "\n + "emMarkAsUnreaded "\n + "emPerform "\n + "emAccept "\n + "emResume "\n + "emChangeRights "\n + "emEditRoute "\n + "emEditObserver "\n + "emRecoveryFromLocalCopy "\n + "emChangeWorkAccessType "\n + "emChangeEncodeTypeToCertificate "\n + "emChangeEncodeTypeToPassword "\n + "emChangeEncodeTypeToNone "\n + "emChangeEncodeTypeToCertificatePassword "\n + "emChangeStandardRoute "\n + "emGetText "\n + "emOpenForView "\n + "emMoveToStorage "\n + "emCreateObject "\n + "emChangeVersionHidden "\n + "emDeleteVersion "\n + "emChangeLifeCycleStage "\n + "emApprovingSign "\n + "emExport "\n + "emContinue "\n + "emLockFromEdit "\n + "emUnLockForEdit "\n + "emLockForServer "\n + "emUnlockFromServer "\n + "emDelegateAccessRights "\n + "emReEncode ";\n\n // enum TEditorCloseObservType\n const TEditorCloseObservType = "ecotFile ecotProcess ";\n\n // enum TEdmsApplicationAction\n const TEdmsApplicationAction = "eaGet eaCopy eaCreate eaCreateStandardRoute ";\n\n // enum TEDocumentLockType\n const TEDocumentLockType = "edltAll edltNothing edltQuery ";\n\n // enum TEDocumentStepShowMode\n const TEDocumentStepShowMode = "essmText essmCard ";\n\n // enum TEDocumentStepVersionType\n const TEDocumentStepVersionType = "esvtLast esvtLastActive esvtSpecified ";\n\n // enum TEDocumentStorageFunction\n const TEDocumentStorageFunction = "edsfExecutive edsfArchive ";\n\n // enum TEDocumentStorageType\n const TEDocumentStorageType = "edstSQLServer edstFile ";\n\n // enum TEDocumentVersionSourceType\n const TEDocumentVersionSourceType =\n "edvstNone edvstEDocumentVersionCopy edvstFile edvstTemplate edvstScannedFile ";\n\n // enum TEDocumentVersionState\n const TEDocumentVersionState = "vsDefault vsDesign vsActive vsObsolete ";\n\n // enum TEncodeType\n const TEncodeType = "etNone etCertificate etPassword etCertificatePassword ";\n\n // enum TExceptionCategory\n const TExceptionCategory = "ecException ecWarning ecInformation ";\n\n // enum TExportedSignaturesType\n const TExportedSignaturesType = "estAll estApprovingOnly ";\n\n // enum TExportedVersionType\n const TExportedVersionType = "evtLast evtLastActive evtQuery ";\n\n // enum TFieldDataType\n const TFieldDataType =\n "fdtString "\n + "fdtNumeric "\n + "fdtInteger "\n + "fdtDate "\n + "fdtText "\n + "fdtUnknown "\n + "fdtWideString "\n + "fdtLargeInteger ";\n\n // enum TFolderType\n const TFolderType =\n "ftInbox "\n + "ftOutbox "\n + "ftFavorites "\n + "ftCommonFolder "\n + "ftUserFolder "\n + "ftComponents "\n + "ftQuickLaunch "\n + "ftShortcuts "\n + "ftSearch ";\n\n // enum TGridRowHeight\n const TGridRowHeight = "grhAuto " + "grhX1 " + "grhX2 " + "grhX3 ";\n\n // enum THyperlinkType\n const THyperlinkType = "hltText " + "hltRTF " + "hltHTML ";\n\n // enum TImageFileFormat\n const TImageFileFormat =\n "iffBMP "\n + "iffJPEG "\n + "iffMultiPageTIFF "\n + "iffSinglePageTIFF "\n + "iffTIFF "\n + "iffPNG ";\n\n // enum TImageMode\n const TImageMode = "im8bGrayscale " + "im24bRGB " + "im1bMonochrome ";\n\n // enum TImageType\n const TImageType = "itBMP " + "itJPEG " + "itWMF " + "itPNG ";\n\n // enum TInplaceHintKind\n const TInplaceHintKind =\n "ikhInformation " + "ikhWarning " + "ikhError " + "ikhNoIcon ";\n\n // enum TISBLContext\n const TISBLContext =\n "icUnknown "\n + "icScript "\n + "icFunction "\n + "icIntegratedReport "\n + "icAnalyticReport "\n + "icDataSetEventHandler "\n + "icActionHandler "\n + "icFormEventHandler "\n + "icLookUpEventHandler "\n + "icRequisiteChangeEventHandler "\n + "icBeforeSearchEventHandler "\n + "icRoleCalculation "\n + "icSelectRouteEventHandler "\n + "icBlockPropertyCalculation "\n + "icBlockQueryParamsEventHandler "\n + "icChangeSearchResultEventHandler "\n + "icBlockEventHandler "\n + "icSubTaskInitEventHandler "\n + "icEDocDataSetEventHandler "\n + "icEDocLookUpEventHandler "\n + "icEDocActionHandler "\n + "icEDocFormEventHandler "\n + "icEDocRequisiteChangeEventHandler "\n + "icStructuredConversionRule "\n + "icStructuredConversionEventBefore "\n + "icStructuredConversionEventAfter "\n + "icWizardEventHandler "\n + "icWizardFinishEventHandler "\n + "icWizardStepEventHandler "\n + "icWizardStepFinishEventHandler "\n + "icWizardActionEnableEventHandler "\n + "icWizardActionExecuteEventHandler "\n + "icCreateJobsHandler "\n + "icCreateNoticesHandler "\n + "icBeforeLookUpEventHandler "\n + "icAfterLookUpEventHandler "\n + "icTaskAbortEventHandler "\n + "icWorkflowBlockActionHandler "\n + "icDialogDataSetEventHandler "\n + "icDialogActionHandler "\n + "icDialogLookUpEventHandler "\n + "icDialogRequisiteChangeEventHandler "\n + "icDialogFormEventHandler "\n + "icDialogValidCloseEventHandler "\n + "icBlockFormEventHandler "\n + "icTaskFormEventHandler "\n + "icReferenceMethod "\n + "icEDocMethod "\n + "icDialogMethod "\n + "icProcessMessageHandler ";\n\n // enum TItemShow\n const TItemShow = "isShow " + "isHide " + "isByUserSettings ";\n\n // enum TJobKind\n const TJobKind = "jkJob " + "jkNotice " + "jkControlJob ";\n\n // enum TJoinType\n const TJoinType = "jtInner " + "jtLeft " + "jtRight " + "jtFull " + "jtCross ";\n\n // enum TLabelPos\n const TLabelPos = "lbpAbove " + "lbpBelow " + "lbpLeft " + "lbpRight ";\n\n // enum TLicensingType\n const TLicensingType = "eltPerConnection " + "eltPerUser ";\n\n // enum TLifeCycleStageFontColor\n const TLifeCycleStageFontColor =\n "sfcUndefined "\n + "sfcBlack "\n + "sfcGreen "\n + "sfcRed "\n + "sfcBlue "\n + "sfcOrange "\n + "sfcLilac ";\n\n // enum TLifeCycleStageFontStyle\n const TLifeCycleStageFontStyle = "sfsItalic " + "sfsStrikeout " + "sfsNormal ";\n\n // enum TLockableDevelopmentComponentType\n const TLockableDevelopmentComponentType =\n "ldctStandardRoute "\n + "ldctWizard "\n + "ldctScript "\n + "ldctFunction "\n + "ldctRouteBlock "\n + "ldctIntegratedReport "\n + "ldctAnalyticReport "\n + "ldctReferenceType "\n + "ldctEDocumentType "\n + "ldctDialog "\n + "ldctServerEvents ";\n\n // enum TMaxRecordCountRestrictionType\n const TMaxRecordCountRestrictionType =\n "mrcrtNone " + "mrcrtUser " + "mrcrtMaximal " + "mrcrtCustom ";\n\n // enum TRangeValueType\n const TRangeValueType =\n "vtEqual " + "vtGreaterOrEqual " + "vtLessOrEqual " + "vtRange ";\n\n // enum TRelativeDate\n const TRelativeDate =\n "rdYesterday "\n + "rdToday "\n + "rdTomorrow "\n + "rdThisWeek "\n + "rdThisMonth "\n + "rdThisYear "\n + "rdNextMonth "\n + "rdNextWeek "\n + "rdLastWeek "\n + "rdLastMonth ";\n\n // enum TReportDestination\n const TReportDestination = "rdWindow " + "rdFile " + "rdPrinter ";\n\n // enum TReqDataType\n const TReqDataType =\n "rdtString "\n + "rdtNumeric "\n + "rdtInteger "\n + "rdtDate "\n + "rdtReference "\n + "rdtAccount "\n + "rdtText "\n + "rdtPick "\n + "rdtUnknown "\n + "rdtLargeInteger "\n + "rdtDocument ";\n\n // enum TRequisiteEventType\n const TRequisiteEventType = "reOnChange " + "reOnChangeValues ";\n\n // enum TSBTimeType\n const TSBTimeType = "ttGlobal " + "ttLocal " + "ttUser " + "ttSystem ";\n\n // enum TSearchShowMode\n const TSearchShowMode =\n "ssmBrowse " + "ssmSelect " + "ssmMultiSelect " + "ssmBrowseModal ";\n\n // enum TSelectMode\n const TSelectMode = "smSelect " + "smLike " + "smCard ";\n\n // enum TSignatureType\n const TSignatureType = "stNone " + "stAuthenticating " + "stApproving ";\n\n // enum TSignerContentType\n const TSignerContentType = "sctString " + "sctStream ";\n\n // enum TStringsSortType\n const TStringsSortType = "sstAnsiSort " + "sstNaturalSort ";\n\n // enum TStringValueType\n const TStringValueType = "svtEqual " + "svtContain ";\n\n // enum TStructuredObjectAttributeType\n const TStructuredObjectAttributeType =\n "soatString "\n + "soatNumeric "\n + "soatInteger "\n + "soatDatetime "\n + "soatReferenceRecord "\n + "soatText "\n + "soatPick "\n + "soatBoolean "\n + "soatEDocument "\n + "soatAccount "\n + "soatIntegerCollection "\n + "soatNumericCollection "\n + "soatStringCollection "\n + "soatPickCollection "\n + "soatDatetimeCollection "\n + "soatBooleanCollection "\n + "soatReferenceRecordCollection "\n + "soatEDocumentCollection "\n + "soatAccountCollection "\n + "soatContents "\n + "soatUnknown ";\n\n // enum TTaskAbortReason\n const TTaskAbortReason = "tarAbortByUser " + "tarAbortByWorkflowException ";\n\n // enum TTextValueType\n const TTextValueType = "tvtAllWords " + "tvtExactPhrase " + "tvtAnyWord ";\n\n // enum TUserObjectStatus\n const TUserObjectStatus =\n "usNone "\n + "usCompleted "\n + "usRedSquare "\n + "usBlueSquare "\n + "usYellowSquare "\n + "usGreenSquare "\n + "usOrangeSquare "\n + "usPurpleSquare "\n + "usFollowUp ";\n\n // enum TUserType\n const TUserType =\n "utUnknown "\n + "utUser "\n + "utDeveloper "\n + "utAdministrator "\n + "utSystemDeveloper "\n + "utDisconnected ";\n\n // enum TValuesBuildType\n const TValuesBuildType =\n "btAnd " + "btDetailAnd " + "btOr " + "btNotOr " + "btOnly ";\n\n // enum TViewMode\n const TViewMode = "vmView " + "vmSelect " + "vmNavigation ";\n\n // enum TViewSelectionMode\n const TViewSelectionMode =\n "vsmSingle " + "vsmMultiple " + "vsmMultipleCheck " + "vsmNoSelection ";\n\n // enum TWizardActionType\n const TWizardActionType =\n "wfatPrevious " + "wfatNext " + "wfatCancel " + "wfatFinish ";\n\n // enum TWizardFormElementProperty\n const TWizardFormElementProperty =\n "wfepUndefined "\n + "wfepText3 "\n + "wfepText6 "\n + "wfepText9 "\n + "wfepSpinEdit "\n + "wfepDropDown "\n + "wfepRadioGroup "\n + "wfepFlag "\n + "wfepText12 "\n + "wfepText15 "\n + "wfepText18 "\n + "wfepText21 "\n + "wfepText24 "\n + "wfepText27 "\n + "wfepText30 "\n + "wfepRadioGroupColumn1 "\n + "wfepRadioGroupColumn2 "\n + "wfepRadioGroupColumn3 ";\n\n // enum TWizardFormElementType\n const TWizardFormElementType =\n "wfetQueryParameter " + "wfetText " + "wfetDelimiter " + "wfetLabel ";\n\n // enum TWizardParamType\n const TWizardParamType =\n "wptString "\n + "wptInteger "\n + "wptNumeric "\n + "wptBoolean "\n + "wptDateTime "\n + "wptPick "\n + "wptText "\n + "wptUser "\n + "wptUserList "\n + "wptEDocumentInfo "\n + "wptEDocumentInfoList "\n + "wptReferenceRecordInfo "\n + "wptReferenceRecordInfoList "\n + "wptFolderInfo "\n + "wptTaskInfo "\n + "wptContents "\n + "wptFileName "\n + "wptDate ";\n\n // enum TWizardStepResult\n const TWizardStepResult =\n "wsrComplete "\n + "wsrGoNext "\n + "wsrGoPrevious "\n + "wsrCustom "\n + "wsrCancel "\n + "wsrGoFinal ";\n\n // enum TWizardStepType\n const TWizardStepType =\n "wstForm "\n + "wstEDocument "\n + "wstTaskCard "\n + "wstReferenceRecordCard "\n + "wstFinal ";\n\n // enum TWorkAccessType\n const TWorkAccessType = "waAll " + "waPerformers " + "waManual ";\n\n // enum TWorkflowBlockType\n const TWorkflowBlockType =\n "wsbStart "\n + "wsbFinish "\n + "wsbNotice "\n + "wsbStep "\n + "wsbDecision "\n + "wsbWait "\n + "wsbMonitor "\n + "wsbScript "\n + "wsbConnector "\n + "wsbSubTask "\n + "wsbLifeCycleStage "\n + "wsbPause ";\n\n // enum TWorkflowDataType\n const TWorkflowDataType =\n "wdtInteger "\n + "wdtFloat "\n + "wdtString "\n + "wdtPick "\n + "wdtDateTime "\n + "wdtBoolean "\n + "wdtTask "\n + "wdtJob "\n + "wdtFolder "\n + "wdtEDocument "\n + "wdtReferenceRecord "\n + "wdtUser "\n + "wdtGroup "\n + "wdtRole "\n + "wdtIntegerCollection "\n + "wdtFloatCollection "\n + "wdtStringCollection "\n + "wdtPickCollection "\n + "wdtDateTimeCollection "\n + "wdtBooleanCollection "\n + "wdtTaskCollection "\n + "wdtJobCollection "\n + "wdtFolderCollection "\n + "wdtEDocumentCollection "\n + "wdtReferenceRecordCollection "\n + "wdtUserCollection "\n + "wdtGroupCollection "\n + "wdtRoleCollection "\n + "wdtContents "\n + "wdtUserList "\n + "wdtSearchDescription "\n + "wdtDeadLine "\n + "wdtPickSet "\n + "wdtAccountCollection ";\n\n // enum TWorkImportance\n const TWorkImportance = "wiLow " + "wiNormal " + "wiHigh ";\n\n // enum TWorkRouteType\n const TWorkRouteType = "wrtSoft " + "wrtHard ";\n\n // enum TWorkState\n const TWorkState =\n "wsInit "\n + "wsRunning "\n + "wsDone "\n + "wsControlled "\n + "wsAborted "\n + "wsContinued ";\n\n // enum TWorkTextBuildingMode\n const TWorkTextBuildingMode =\n "wtmFull " + "wtmFromCurrent " + "wtmOnlyCurrent ";\n\n // Перечисления\n const ENUMS =\n TAccountType\n + TActionEnabledMode\n + TAddPosition\n + TAlignment\n + TAreaShowMode\n + TCertificateInvalidationReason\n + TCertificateType\n + TCheckListBoxItemState\n + TCloseOnEsc\n + TCompType\n + TConditionFormat\n + TConnectionIntent\n + TContentKind\n + TControlType\n + TCriterionContentType\n + TCultureType\n + TDataSetEventType\n + TDataSetState\n + TDateFormatType\n + TDateOffsetType\n + TDateTimeKind\n + TDeaAccessRights\n + TDocumentDefaultAction\n + TEditMode\n + TEditorCloseObservType\n + TEdmsApplicationAction\n + TEDocumentLockType\n + TEDocumentStepShowMode\n + TEDocumentStepVersionType\n + TEDocumentStorageFunction\n + TEDocumentStorageType\n + TEDocumentVersionSourceType\n + TEDocumentVersionState\n + TEncodeType\n + TExceptionCategory\n + TExportedSignaturesType\n + TExportedVersionType\n + TFieldDataType\n + TFolderType\n + TGridRowHeight\n + THyperlinkType\n + TImageFileFormat\n + TImageMode\n + TImageType\n + TInplaceHintKind\n + TISBLContext\n + TItemShow\n + TJobKind\n + TJoinType\n + TLabelPos\n + TLicensingType\n + TLifeCycleStageFontColor\n + TLifeCycleStageFontStyle\n + TLockableDevelopmentComponentType\n + TMaxRecordCountRestrictionType\n + TRangeValueType\n + TRelativeDate\n + TReportDestination\n + TReqDataType\n + TRequisiteEventType\n + TSBTimeType\n + TSearchShowMode\n + TSelectMode\n + TSignatureType\n + TSignerContentType\n + TStringsSortType\n + TStringValueType\n + TStructuredObjectAttributeType\n + TTaskAbortReason\n + TTextValueType\n + TUserObjectStatus\n + TUserType\n + TValuesBuildType\n + TViewMode\n + TViewSelectionMode\n + TWizardActionType\n + TWizardFormElementProperty\n + TWizardFormElementType\n + TWizardParamType\n + TWizardStepResult\n + TWizardStepType\n + TWorkAccessType\n + TWorkflowBlockType\n + TWorkflowDataType\n + TWorkImportance\n + TWorkRouteType\n + TWorkState\n + TWorkTextBuildingMode;\n\n // Системные функции ==> SYSFUNCTIONS\n const system_functions =\n "AddSubString "\n + "AdjustLineBreaks "\n + "AmountInWords "\n + "Analysis "\n + "ArrayDimCount "\n + "ArrayHighBound "\n + "ArrayLowBound "\n + "ArrayOf "\n + "ArrayReDim "\n + "Assert "\n + "Assigned "\n + "BeginOfMonth "\n + "BeginOfPeriod "\n + "BuildProfilingOperationAnalysis "\n + "CallProcedure "\n + "CanReadFile "\n + "CArrayElement "\n + "CDataSetRequisite "\n + "ChangeDate "\n + "ChangeReferenceDataset "\n + "Char "\n + "CharPos "\n + "CheckParam "\n + "CheckParamValue "\n + "CompareStrings "\n + "ConstantExists "\n + "ControlState "\n + "ConvertDateStr "\n + "Copy "\n + "CopyFile "\n + "CreateArray "\n + "CreateCachedReference "\n + "CreateConnection "\n + "CreateDialog "\n + "CreateDualListDialog "\n + "CreateEditor "\n + "CreateException "\n + "CreateFile "\n + "CreateFolderDialog "\n + "CreateInputDialog "\n + "CreateLinkFile "\n + "CreateList "\n + "CreateLock "\n + "CreateMemoryDataSet "\n + "CreateObject "\n + "CreateOpenDialog "\n + "CreateProgress "\n + "CreateQuery "\n + "CreateReference "\n + "CreateReport "\n + "CreateSaveDialog "\n + "CreateScript "\n + "CreateSQLPivotFunction "\n + "CreateStringList "\n + "CreateTreeListSelectDialog "\n + "CSelectSQL "\n + "CSQL "\n + "CSubString "\n + "CurrentUserID "\n + "CurrentUserName "\n + "CurrentVersion "\n + "DataSetLocateEx "\n + "DateDiff "\n + "DateTimeDiff "\n + "DateToStr "\n + "DayOfWeek "\n + "DeleteFile "\n + "DirectoryExists "\n + "DisableCheckAccessRights "\n + "DisableCheckFullShowingRestriction "\n + "DisableMassTaskSendingRestrictions "\n + "DropTable "\n + "DupeString "\n + "EditText "\n + "EnableCheckAccessRights "\n + "EnableCheckFullShowingRestriction "\n + "EnableMassTaskSendingRestrictions "\n + "EndOfMonth "\n + "EndOfPeriod "\n + "ExceptionExists "\n + "ExceptionsOff "\n + "ExceptionsOn "\n + "Execute "\n + "ExecuteProcess "\n + "Exit "\n + "ExpandEnvironmentVariables "\n + "ExtractFileDrive "\n + "ExtractFileExt "\n + "ExtractFileName "\n + "ExtractFilePath "\n + "ExtractParams "\n + "FileExists "\n + "FileSize "\n + "FindFile "\n + "FindSubString "\n + "FirmContext "\n + "ForceDirectories "\n + "Format "\n + "FormatDate "\n + "FormatNumeric "\n + "FormatSQLDate "\n + "FormatString "\n + "FreeException "\n + "GetComponent "\n + "GetComponentLaunchParam "\n + "GetConstant "\n + "GetLastException "\n + "GetReferenceRecord "\n + "GetRefTypeByRefID "\n + "GetTableID "\n + "GetTempFolder "\n + "IfThen "\n + "In "\n + "IndexOf "\n + "InputDialog "\n + "InputDialogEx "\n + "InteractiveMode "\n + "IsFileLocked "\n + "IsGraphicFile "\n + "IsNumeric "\n + "Length "\n + "LoadString "\n + "LoadStringFmt "\n + "LocalTimeToUTC "\n + "LowerCase "\n + "Max "\n + "MessageBox "\n + "MessageBoxEx "\n + "MimeDecodeBinary "\n + "MimeDecodeString "\n + "MimeEncodeBinary "\n + "MimeEncodeString "\n + "Min "\n + "MoneyInWords "\n + "MoveFile "\n + "NewID "\n + "Now "\n + "OpenFile "\n + "Ord "\n + "Precision "\n + "Raise "\n + "ReadCertificateFromFile "\n + "ReadFile "\n + "ReferenceCodeByID "\n + "ReferenceNumber "\n + "ReferenceRequisiteMode "\n + "ReferenceRequisiteValue "\n + "RegionDateSettings "\n + "RegionNumberSettings "\n + "RegionTimeSettings "\n + "RegRead "\n + "RegWrite "\n + "RenameFile "\n + "Replace "\n + "Round "\n + "SelectServerCode "\n + "SelectSQL "\n + "ServerDateTime "\n + "SetConstant "\n + "SetManagedFolderFieldsState "\n + "ShowConstantsInputDialog "\n + "ShowMessage "\n + "Sleep "\n + "Split "\n + "SQL "\n + "SQL2XLSTAB "\n + "SQLProfilingSendReport "\n + "StrToDate "\n + "SubString "\n + "SubStringCount "\n + "SystemSetting "\n + "Time "\n + "TimeDiff "\n + "Today "\n + "Transliterate "\n + "Trim "\n + "UpperCase "\n + "UserStatus "\n + "UTCToLocalTime "\n + "ValidateXML "\n + "VarIsClear "\n + "VarIsEmpty "\n + "VarIsNull "\n + "WorkTimeDiff "\n + "WriteFile "\n + "WriteFileEx "\n + "WriteObjectHistory "\n + "Анализ "\n + "БазаДанных "\n + "БлокЕсть "\n + "БлокЕстьРасш "\n + "БлокИнфо "\n + "БлокСнять "\n + "БлокСнятьРасш "\n + "БлокУстановить "\n + "Ввод "\n + "ВводМеню "\n + "ВедС "\n + "ВедСпр "\n + "ВерхняяГраницаМассива "\n + "ВнешПрогр "\n + "Восст "\n + "ВременнаяПапка "\n + "Время "\n + "ВыборSQL "\n + "ВыбратьЗапись "\n + "ВыделитьСтр "\n + "Вызвать "\n + "Выполнить "\n + "ВыпПрогр "\n + "ГрафическийФайл "\n + "ГруппаДополнительно "\n + "ДатаВремяСерв "\n + "ДеньНедели "\n + "ДиалогДаНет "\n + "ДлинаСтр "\n + "ДобПодстр "\n + "ЕПусто "\n + "ЕслиТо "\n + "ЕЧисло "\n + "ЗамПодстр "\n + "ЗаписьСправочника "\n + "ЗначПоляСпр "\n + "ИДТипСпр "\n + "ИзвлечьДиск "\n + "ИзвлечьИмяФайла "\n + "ИзвлечьПуть "\n + "ИзвлечьРасширение "\n + "ИзмДат "\n + "ИзменитьРазмерМассива "\n + "ИзмеренийМассива "\n + "ИмяОрг "\n + "ИмяПоляСпр "\n + "Индекс "\n + "ИндикаторЗакрыть "\n + "ИндикаторОткрыть "\n + "ИндикаторШаг "\n + "ИнтерактивныйРежим "\n + "ИтогТблСпр "\n + "КодВидВедСпр "\n + "КодВидСпрПоИД "\n + "КодПоAnalit "\n + "КодСимвола "\n + "КодСпр "\n + "КолПодстр "\n + "КолПроп "\n + "КонМес "\n + "Конст "\n + "КонстЕсть "\n + "КонстЗнач "\n + "КонТран "\n + "КопироватьФайл "\n + "КопияСтр "\n + "КПериод "\n + "КСтрТблСпр "\n + "Макс "\n + "МаксСтрТблСпр "\n + "Массив "\n + "Меню "\n + "МенюРасш "\n + "Мин "\n + "НаборДанныхНайтиРасш "\n + "НаимВидСпр "\n + "НаимПоAnalit "\n + "НаимСпр "\n + "НастроитьПереводыСтрок "\n + "НачМес "\n + "НачТран "\n + "НижняяГраницаМассива "\n + "НомерСпр "\n + "НПериод "\n + "Окно "\n + "Окр "\n + "Окружение "\n + "ОтлИнфДобавить "\n + "ОтлИнфУдалить "\n + "Отчет "\n + "ОтчетАнал "\n + "ОтчетИнт "\n + "ПапкаСуществует "\n + "Пауза "\n + "ПВыборSQL "\n + "ПереименоватьФайл "\n + "Переменные "\n + "ПереместитьФайл "\n + "Подстр "\n + "ПоискПодстр "\n + "ПоискСтр "\n + "ПолучитьИДТаблицы "\n + "ПользовательДополнительно "\n + "ПользовательИД "\n + "ПользовательИмя "\n + "ПользовательСтатус "\n + "Прервать "\n + "ПроверитьПараметр "\n + "ПроверитьПараметрЗнач "\n + "ПроверитьУсловие "\n + "РазбСтр "\n + "РазнВремя "\n + "РазнДат "\n + "РазнДатаВремя "\n + "РазнРабВремя "\n + "РегУстВрем "\n + "РегУстДат "\n + "РегУстЧсл "\n + "РедТекст "\n + "РеестрЗапись "\n + "РеестрСписокИменПарам "\n + "РеестрЧтение "\n + "РеквСпр "\n + "РеквСпрПр "\n + "Сегодня "\n + "Сейчас "\n + "Сервер "\n + "СерверПроцессИД "\n + "СертификатФайлСчитать "\n + "СжПроб "\n + "Символ "\n + "СистемаДиректумКод "\n + "СистемаИнформация "\n + "СистемаКод "\n + "Содержит "\n + "СоединениеЗакрыть "\n + "СоединениеОткрыть "\n + "СоздатьДиалог "\n + "СоздатьДиалогВыбораИзДвухСписков "\n + "СоздатьДиалогВыбораПапки "\n + "СоздатьДиалогОткрытияФайла "\n + "СоздатьДиалогСохраненияФайла "\n + "СоздатьЗапрос "\n + "СоздатьИндикатор "\n + "СоздатьИсключение "\n + "СоздатьКэшированныйСправочник "\n + "СоздатьМассив "\n + "СоздатьНаборДанных "\n + "СоздатьОбъект "\n + "СоздатьОтчет "\n + "СоздатьПапку "\n + "СоздатьРедактор "\n + "СоздатьСоединение "\n + "СоздатьСписок "\n + "СоздатьСписокСтрок "\n + "СоздатьСправочник "\n + "СоздатьСценарий "\n + "СоздСпр "\n + "СостСпр "\n + "Сохр "\n + "СохрСпр "\n + "СписокСистем "\n + "Спр "\n + "Справочник "\n + "СпрБлокЕсть "\n + "СпрБлокСнять "\n + "СпрБлокСнятьРасш "\n + "СпрБлокУстановить "\n + "СпрИзмНабДан "\n + "СпрКод "\n + "СпрНомер "\n + "СпрОбновить "\n + "СпрОткрыть "\n + "СпрОтменить "\n + "СпрПарам "\n + "СпрПолеЗнач "\n + "СпрПолеИмя "\n + "СпрРекв "\n + "СпрРеквВведЗн "\n + "СпрРеквНовые "\n + "СпрРеквПр "\n + "СпрРеквПредЗн "\n + "СпрРеквРежим "\n + "СпрРеквТипТекст "\n + "СпрСоздать "\n + "СпрСост "\n + "СпрСохранить "\n + "СпрТблИтог "\n + "СпрТблСтр "\n + "СпрТблСтрКол "\n + "СпрТблСтрМакс "\n + "СпрТблСтрМин "\n + "СпрТблСтрПред "\n + "СпрТблСтрСлед "\n + "СпрТблСтрСозд "\n + "СпрТблСтрУд "\n + "СпрТекПредст "\n + "СпрУдалить "\n + "СравнитьСтр "\n + "СтрВерхРегистр "\n + "СтрНижнРегистр "\n + "СтрТблСпр "\n + "СумПроп "\n + "Сценарий "\n + "СценарийПарам "\n + "ТекВерсия "\n + "ТекОрг "\n + "Точн "\n + "Тран "\n + "Транслитерация "\n + "УдалитьТаблицу "\n + "УдалитьФайл "\n + "УдСпр "\n + "УдСтрТблСпр "\n + "Уст "\n + "УстановкиКонстант "\n + "ФайлАтрибутСчитать "\n + "ФайлАтрибутУстановить "\n + "ФайлВремя "\n + "ФайлВремяУстановить "\n + "ФайлВыбрать "\n + "ФайлЗанят "\n + "ФайлЗаписать "\n + "ФайлИскать "\n + "ФайлКопировать "\n + "ФайлМожноЧитать "\n + "ФайлОткрыть "\n + "ФайлПереименовать "\n + "ФайлПерекодировать "\n + "ФайлПереместить "\n + "ФайлПросмотреть "\n + "ФайлРазмер "\n + "ФайлСоздать "\n + "ФайлСсылкаСоздать "\n + "ФайлСуществует "\n + "ФайлСчитать "\n + "ФайлУдалить "\n + "ФмтSQLДат "\n + "ФмтДат "\n + "ФмтСтр "\n + "ФмтЧсл "\n + "Формат "\n + "ЦМассивЭлемент "\n + "ЦНаборДанныхРеквизит "\n + "ЦПодстр ";\n\n // Предопределенные переменные ==> built_in\n const predefined_variables =\n "AltState "\n + "Application "\n + "CallType "\n + "ComponentTokens "\n + "CreatedJobs "\n + "CreatedNotices "\n + "ControlState "\n + "DialogResult "\n + "Dialogs "\n + "EDocuments "\n + "EDocumentVersionSource "\n + "Folders "\n + "GlobalIDs "\n + "Job "\n + "Jobs "\n + "InputValue "\n + "LookUpReference "\n + "LookUpRequisiteNames "\n + "LookUpSearch "\n + "Object "\n + "ParentComponent "\n + "Processes "\n + "References "\n + "Requisite "\n + "ReportName "\n + "Reports "\n + "Result "\n + "Scripts "\n + "Searches "\n + "SelectedAttachments "\n + "SelectedItems "\n + "SelectMode "\n + "Sender "\n + "ServerEvents "\n + "ServiceFactory "\n + "ShiftState "\n + "SubTask "\n + "SystemDialogs "\n + "Tasks "\n + "Wizard "\n + "Wizards "\n + "Work "\n + "ВызовСпособ "\n + "ИмяОтчета "\n + "РеквЗнач ";\n\n // Интерфейсы ==> type\n const interfaces =\n "IApplication "\n + "IAccessRights "\n + "IAccountRepository "\n + "IAccountSelectionRestrictions "\n + "IAction "\n + "IActionList "\n + "IAdministrationHistoryDescription "\n + "IAnchors "\n + "IApplication "\n + "IArchiveInfo "\n + "IAttachment "\n + "IAttachmentList "\n + "ICheckListBox "\n + "ICheckPointedList "\n + "IColumn "\n + "IComponent "\n + "IComponentDescription "\n + "IComponentToken "\n + "IComponentTokenFactory "\n + "IComponentTokenInfo "\n + "ICompRecordInfo "\n + "IConnection "\n + "IContents "\n + "IControl "\n + "IControlJob "\n + "IControlJobInfo "\n + "IControlList "\n + "ICrypto "\n + "ICrypto2 "\n + "ICustomJob "\n + "ICustomJobInfo "\n + "ICustomListBox "\n + "ICustomObjectWizardStep "\n + "ICustomWork "\n + "ICustomWorkInfo "\n + "IDataSet "\n + "IDataSetAccessInfo "\n + "IDataSigner "\n + "IDateCriterion "\n + "IDateRequisite "\n + "IDateRequisiteDescription "\n + "IDateValue "\n + "IDeaAccessRights "\n + "IDeaObjectInfo "\n + "IDevelopmentComponentLock "\n + "IDialog "\n + "IDialogFactory "\n + "IDialogPickRequisiteItems "\n + "IDialogsFactory "\n + "IDICSFactory "\n + "IDocRequisite "\n + "IDocumentInfo "\n + "IDualListDialog "\n + "IECertificate "\n + "IECertificateInfo "\n + "IECertificates "\n + "IEditControl "\n + "IEditorForm "\n + "IEdmsExplorer "\n + "IEdmsObject "\n + "IEdmsObjectDescription "\n + "IEdmsObjectFactory "\n + "IEdmsObjectInfo "\n + "IEDocument "\n + "IEDocumentAccessRights "\n + "IEDocumentDescription "\n + "IEDocumentEditor "\n + "IEDocumentFactory "\n + "IEDocumentInfo "\n + "IEDocumentStorage "\n + "IEDocumentVersion "\n + "IEDocumentVersionListDialog "\n + "IEDocumentVersionSource "\n + "IEDocumentWizardStep "\n + "IEDocVerSignature "\n + "IEDocVersionState "\n + "IEnabledMode "\n + "IEncodeProvider "\n + "IEncrypter "\n + "IEvent "\n + "IEventList "\n + "IException "\n + "IExternalEvents "\n + "IExternalHandler "\n + "IFactory "\n + "IField "\n + "IFileDialog "\n + "IFolder "\n + "IFolderDescription "\n + "IFolderDialog "\n + "IFolderFactory "\n + "IFolderInfo "\n + "IForEach "\n + "IForm "\n + "IFormTitle "\n + "IFormWizardStep "\n + "IGlobalIDFactory "\n + "IGlobalIDInfo "\n + "IGrid "\n + "IHasher "\n + "IHistoryDescription "\n + "IHyperLinkControl "\n + "IImageButton "\n + "IImageControl "\n + "IInnerPanel "\n + "IInplaceHint "\n + "IIntegerCriterion "\n + "IIntegerList "\n + "IIntegerRequisite "\n + "IIntegerValue "\n + "IISBLEditorForm "\n + "IJob "\n + "IJobDescription "\n + "IJobFactory "\n + "IJobForm "\n + "IJobInfo "\n + "ILabelControl "\n + "ILargeIntegerCriterion "\n + "ILargeIntegerRequisite "\n + "ILargeIntegerValue "\n + "ILicenseInfo "\n + "ILifeCycleStage "\n + "IList "\n + "IListBox "\n + "ILocalIDInfo "\n + "ILocalization "\n + "ILock "\n + "IMemoryDataSet "\n + "IMessagingFactory "\n + "IMetadataRepository "\n + "INotice "\n + "INoticeInfo "\n + "INumericCriterion "\n + "INumericRequisite "\n + "INumericValue "\n + "IObject "\n + "IObjectDescription "\n + "IObjectImporter "\n + "IObjectInfo "\n + "IObserver "\n + "IPanelGroup "\n + "IPickCriterion "\n + "IPickProperty "\n + "IPickRequisite "\n + "IPickRequisiteDescription "\n + "IPickRequisiteItem "\n + "IPickRequisiteItems "\n + "IPickValue "\n + "IPrivilege "\n + "IPrivilegeList "\n + "IProcess "\n + "IProcessFactory "\n + "IProcessMessage "\n + "IProgress "\n + "IProperty "\n + "IPropertyChangeEvent "\n + "IQuery "\n + "IReference "\n + "IReferenceCriterion "\n + "IReferenceEnabledMode "\n + "IReferenceFactory "\n + "IReferenceHistoryDescription "\n + "IReferenceInfo "\n + "IReferenceRecordCardWizardStep "\n + "IReferenceRequisiteDescription "\n + "IReferencesFactory "\n + "IReferenceValue "\n + "IRefRequisite "\n + "IReport "\n + "IReportFactory "\n + "IRequisite "\n + "IRequisiteDescription "\n + "IRequisiteDescriptionList "\n + "IRequisiteFactory "\n + "IRichEdit "\n + "IRouteStep "\n + "IRule "\n + "IRuleList "\n + "ISchemeBlock "\n + "IScript "\n + "IScriptFactory "\n + "ISearchCriteria "\n + "ISearchCriterion "\n + "ISearchDescription "\n + "ISearchFactory "\n + "ISearchFolderInfo "\n + "ISearchForObjectDescription "\n + "ISearchResultRestrictions "\n + "ISecuredContext "\n + "ISelectDialog "\n + "IServerEvent "\n + "IServerEventFactory "\n + "IServiceDialog "\n + "IServiceFactory "\n + "ISignature "\n + "ISignProvider "\n + "ISignProvider2 "\n + "ISignProvider3 "\n + "ISimpleCriterion "\n + "IStringCriterion "\n + "IStringList "\n + "IStringRequisite "\n + "IStringRequisiteDescription "\n + "IStringValue "\n + "ISystemDialogsFactory "\n + "ISystemInfo "\n + "ITabSheet "\n + "ITask "\n + "ITaskAbortReasonInfo "\n + "ITaskCardWizardStep "\n + "ITaskDescription "\n + "ITaskFactory "\n + "ITaskInfo "\n + "ITaskRoute "\n + "ITextCriterion "\n + "ITextRequisite "\n + "ITextValue "\n + "ITreeListSelectDialog "\n + "IUser "\n + "IUserList "\n + "IValue "\n + "IView "\n + "IWebBrowserControl "\n + "IWizard "\n + "IWizardAction "\n + "IWizardFactory "\n + "IWizardFormElement "\n + "IWizardParam "\n + "IWizardPickParam "\n + "IWizardReferenceParam "\n + "IWizardStep "\n + "IWorkAccessRights "\n + "IWorkDescription "\n + "IWorkflowAskableParam "\n + "IWorkflowAskableParams "\n + "IWorkflowBlock "\n + "IWorkflowBlockResult "\n + "IWorkflowEnabledMode "\n + "IWorkflowParam "\n + "IWorkflowPickParam "\n + "IWorkflowReferenceParam "\n + "IWorkState "\n + "IWorkTreeCustomNode "\n + "IWorkTreeJobNode "\n + "IWorkTreeTaskNode "\n + "IXMLEditorForm "\n + "SBCrypto ";\n\n // built_in : встроенные или библиотечные объекты (константы, перечисления)\n const BUILTIN = CONSTANTS + ENUMS;\n\n // class: встроенные наборы значений, системные объекты, фабрики\n const CLASS = predefined_variables;\n\n // literal : примитивные типы\n const LITERAL = "null true false nil ";\n\n // number : числа\n const NUMBERS = {\n className: "number",\n begin: hljs.NUMBER_RE,\n relevance: 0\n };\n\n // string : строки\n const STRINGS = {\n className: "string",\n variants: [\n {\n begin: \'"\',\n end: \'"\'\n },\n {\n begin: "\'",\n end: "\'"\n }\n ]\n };\n\n // Токены\n const DOCTAGS = {\n className: "doctag",\n begin: "\\\\b(?:TODO|DONE|BEGIN|END|STUB|CHG|FIXME|NOTE|BUG|XXX)\\\\b",\n relevance: 0\n };\n\n // Однострочный комментарий\n const ISBL_LINE_COMMENT_MODE = {\n className: "comment",\n begin: "//",\n end: "$",\n relevance: 0,\n contains: [\n hljs.PHRASAL_WORDS_MODE,\n DOCTAGS\n ]\n };\n\n // Многострочный комментарий\n const ISBL_BLOCK_COMMENT_MODE = {\n className: "comment",\n begin: "/\\\\*",\n end: "\\\\*/",\n relevance: 0,\n contains: [\n hljs.PHRASAL_WORDS_MODE,\n DOCTAGS\n ]\n };\n\n // comment : комментарии\n const COMMENTS = { variants: [\n ISBL_LINE_COMMENT_MODE,\n ISBL_BLOCK_COMMENT_MODE\n ] };\n\n // keywords : ключевые слова\n const KEYWORDS = {\n $pattern: UNDERSCORE_IDENT_RE,\n keyword: KEYWORD,\n built_in: BUILTIN,\n class: CLASS,\n literal: LITERAL\n };\n\n // methods : методы\n const METHODS = {\n begin: "\\\\.\\\\s*" + hljs.UNDERSCORE_IDENT_RE,\n keywords: KEYWORDS,\n relevance: 0\n };\n\n // type : встроенные типы\n const TYPES = {\n className: "type",\n begin: ":[ \\\\t]*(" + interfaces.trim().replace(/\\s/g, "|") + ")",\n end: "[ \\\\t]*=",\n excludeEnd: true\n };\n\n // variables : переменные\n const VARIABLES = {\n className: "variable",\n keywords: KEYWORDS,\n begin: UNDERSCORE_IDENT_RE,\n relevance: 0,\n contains: [\n TYPES,\n METHODS\n ]\n };\n\n // Имена функций\n const FUNCTION_TITLE = FUNCTION_NAME_IDENT_RE + "\\\\(";\n\n const TITLE_MODE = {\n className: "title",\n keywords: {\n $pattern: UNDERSCORE_IDENT_RE,\n built_in: system_functions\n },\n begin: FUNCTION_TITLE,\n end: "\\\\(",\n returnBegin: true,\n excludeEnd: true\n };\n\n // function : функции\n const FUNCTIONS = {\n className: "function",\n begin: FUNCTION_TITLE,\n end: "\\\\)$",\n returnBegin: true,\n keywords: KEYWORDS,\n illegal: "[\\\\[\\\\]\\\\|\\\\$\\\\?%,~#@]",\n contains: [\n TITLE_MODE,\n METHODS,\n VARIABLES,\n STRINGS,\n NUMBERS,\n COMMENTS\n ]\n };\n\n return {\n name: \'ISBL\',\n case_insensitive: true,\n keywords: KEYWORDS,\n illegal: "\\\\$|\\\\?|%|,|;$|~|#|@|{"use strict";eval("\n\nconst yaml = __webpack_require__(3384);\n\n/**\n * Default engines\n */\n\nconst engines = exports = module.exports;\n\n/**\n * YAML\n */\n\nengines.yaml = {\n parse: yaml.safeLoad.bind(yaml),\n stringify: yaml.safeDump.bind(yaml)\n};\n\n/**\n * JSON\n */\n\nengines.json = {\n parse: JSON.parse.bind(JSON),\n stringify: function(obj, options) {\n const opts = Object.assign({replacer: null, space: 2}, options);\n return JSON.stringify(obj, opts.replacer, opts.space);\n }\n};\n\n/**\n * JavaScript\n */\n\nengines.javascript = {\n parse: function parse(str, options, wrap) {\n /* eslint no-eval: 0 */\n try {\n if (wrap !== false) {\n str = '(function() {\\nreturn ' + str.trim() + ';\\n}());';\n }\n return eval(str) || {};\n } catch (err) {\n if (wrap !== false && /(unexpected|identifier)/i.test(err.message)) {\n return parse(str, options, false);\n }\n throw new SyntaxError(err);\n }\n },\n stringify: function() {\n throw new Error('stringifying JavaScript is not supported');\n }\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTYzLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLGFBQWEsbUJBQU8sQ0FBQyxJQUFTOztBQUU5QjtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0MseUJBQXlCO0FBQ3pEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0Qiw0QkFBNEIsR0FBRyxJQUFJO0FBQy9EO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL29ic2lkaWFuLW1pbmRtYXAtbmV4dGdlbi8uL25vZGVfbW9kdWxlcy8ucG5wbS9ncmF5LW1hdHRlckA0LjAuMy9ub2RlX21vZHVsZXMvZ3JheS1tYXR0ZXIvbGliL2VuZ2luZXMuanM/ODBjYSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmNvbnN0IHlhbWwgPSByZXF1aXJlKCdqcy15YW1sJyk7XG5cbi8qKlxuICogRGVmYXVsdCBlbmdpbmVzXG4gKi9cblxuY29uc3QgZW5naW5lcyA9IGV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cztcblxuLyoqXG4gKiBZQU1MXG4gKi9cblxuZW5naW5lcy55YW1sID0ge1xuICBwYXJzZTogeWFtbC5zYWZlTG9hZC5iaW5kKHlhbWwpLFxuICBzdHJpbmdpZnk6IHlhbWwuc2FmZUR1bXAuYmluZCh5YW1sKVxufTtcblxuLyoqXG4gKiBKU09OXG4gKi9cblxuZW5naW5lcy5qc29uID0ge1xuICBwYXJzZTogSlNPTi5wYXJzZS5iaW5kKEpTT04pLFxuICBzdHJpbmdpZnk6IGZ1bmN0aW9uKG9iaiwgb3B0aW9ucykge1xuICAgIGNvbnN0IG9wdHMgPSBPYmplY3QuYXNzaWduKHtyZXBsYWNlcjogbnVsbCwgc3BhY2U6IDJ9LCBvcHRpb25zKTtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkob2JqLCBvcHRzLnJlcGxhY2VyLCBvcHRzLnNwYWNlKTtcbiAgfVxufTtcblxuLyoqXG4gKiBKYXZhU2NyaXB0XG4gKi9cblxuZW5naW5lcy5qYXZhc2NyaXB0ID0ge1xuICBwYXJzZTogZnVuY3Rpb24gcGFyc2Uoc3RyLCBvcHRpb25zLCB3cmFwKSB7XG4gICAgLyogZXNsaW50IG5vLWV2YWw6IDAgKi9cbiAgICB0cnkge1xuICAgICAgaWYgKHdyYXAgIT09IGZhbHNlKSB7XG4gICAgICAgIHN0ciA9ICcoZnVuY3Rpb24oKSB7XFxucmV0dXJuICcgKyBzdHIudHJpbSgpICsgJztcXG59KCkpOyc7XG4gICAgICB9XG4gICAgICByZXR1cm4gZXZhbChzdHIpIHx8IHt9O1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKHdyYXAgIT09IGZhbHNlICYmIC8odW5leHBlY3RlZHxpZGVudGlmaWVyKS9pLnRlc3QoZXJyLm1lc3NhZ2UpKSB7XG4gICAgICAgIHJldHVybiBwYXJzZShzdHIsIG9wdGlvbnMsIGZhbHNlKTtcbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcihlcnIpO1xuICAgIH1cbiAgfSxcbiAgc3RyaW5naWZ5OiBmdW5jdGlvbigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3N0cmluZ2lmeWluZyBKYXZhU2NyaXB0IGlzIG5vdCBzdXBwb3J0ZWQnKTtcbiAgfVxufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///163\n")},181:I=>{"use strict";I.exports=require("buffer")},200:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n sg: () => (/* reexport */ debounce),\n Ay: () => (/* binding */ callbag),\n dM: () => (/* reexport */ callbag_drop_repeats),\n pb: () => (/* reexport */ (readme_default())),\n qI: () => (/* reexport */ (callbag_flat_map_default())),\n Rt: () => (/* reexport */ callbag_from_event),\n Sx: () => (/* reexport */ callbag_from_promise),\n Tj: () => (/* reexport */ (callbag_map_readme_default())),\n h1: () => (/* reexport */ callbag_merge_readme),\n Ju: () => (/* reexport */ callbag_pairwise_es),\n jB: () => (/* reexport */ callbag_partition_es),\n ku: () => (/* reexport */ (callbag_reject_readme_default())),\n kY: () => (/* reexport */ callbag_remember_esm),\n ZZ: () => (/* reexport */ callbag_start_with),\n QK: () => (/* reexport */ callbag_take_until)\n});\n\n// UNUSED EXPORTS: completeWhen, create, of, pipe, share, subject, subscribe, take\n\n;// ./node_modules/.pnpm/callbag-create@2.1.3/node_modules/callbag-create/index.js\nconst create = prod => (start, sink) => {\n if (start !== 0) return;\n if (typeof prod !== 'function') {\n sink(0, () => {});\n sink(2);\n return;\n }\n let end = false;\n let clean;\n sink(0, (t) => {\n if (!end) {\n end = t === 2;\n if (end && typeof clean === 'function') clean();\n }\n });\n if (end) return;\n clean = prod((v) => {\n if (!end) sink(1, v);\n }, (e) => {\n if (!end && e !== undefined) {\n end = true;\n sink(2, e);\n }\n }, () => {\n if (!end) {\n end = true;\n sink(2);\n }\n });\n};\n\n/* harmony default export */ const callbag_create = (create);\n\n;// ./node_modules/.pnpm/callbag-drop-repeats@1.1.0/node_modules/callbag-drop-repeats/index.js\nconst dropRepeats = pred => src => (start, sink) => {\n const INIT = {};\n let cache = INIT;\n let ask;\n const equals = pred || ((a, b) => a === b);\n start === 0 && src(start, (t, d) => {\n if (t === start) ask = d;\n if (t === 1) return cache !== INIT && equals(cache, d) ? ask(t) : sink(t, cache = d);\n sink(t, d);\n });\n};\n\n/* harmony default export */ const callbag_drop_repeats = (dropRepeats);\n\n// EXTERNAL MODULE: ./node_modules/.pnpm/callbag-filter@1.1.0/node_modules/callbag-filter/readme.js\nvar readme = __webpack_require__(6091);\nvar readme_default = /*#__PURE__*/__webpack_require__.n(readme);\n// EXTERNAL MODULE: ./node_modules/.pnpm/callbag-flat-map@1.0.2/node_modules/callbag-flat-map/index.js\nvar callbag_flat_map = __webpack_require__(1812);\nvar callbag_flat_map_default = /*#__PURE__*/__webpack_require__.n(callbag_flat_map);\n;// ./node_modules/.pnpm/callbag-from-event@1.3.0/node_modules/callbag-from-event/index.js\nconst fromEvent = (node, name, options) => (start, sink) => {\n if (start !== 0) return;\n let disposed = false;\n const handler = ev => {\n sink(1, ev)\n };\n\n sink(0, t => {\n if (t !== 2) {\n return;\n }\n disposed = true;\n if (node.removeEventListener) node.removeEventListener(name, handler, options);\n else if (node.removeListener) node.removeListener(name, handler);\n else throw new Error('cannot remove listener from node. No method found.');\n });\n\n if (disposed) {\n return;\n }\n\n if (node.addEventListener) node.addEventListener(name, handler, options);\n else if (node.addListener) node.addListener(name, handler);\n else throw new Error('cannot add listener to node. No method found.');\n};\n\n/* harmony default export */ const callbag_from_event = (fromEvent);\n\n;// ./node_modules/.pnpm/callbag-from-promise@1.3.0/node_modules/callbag-from-promise/index.js\nconst fromPromise = promise => (start, sink) => {\n if (start !== 0) return;\n let ended = false;\n const onfulfilled = val => {\n if (ended) return;\n sink(1, val);\n if (ended) return;\n sink(2);\n };\n const onrejected = (err = new Error()) => {\n if (ended) return;\n sink(2, err);\n };\n promise.then(onfulfilled, onrejected);\n sink(0, t => {\n if (t === 2) ended = true;\n });\n};\n\n/* harmony default export */ const callbag_from_promise = (fromPromise);\n\n// EXTERNAL MODULE: ./node_modules/.pnpm/callbag-map@1.1.0/node_modules/callbag-map/readme.js\nvar callbag_map_readme = __webpack_require__(3149);\nvar callbag_map_readme_default = /*#__PURE__*/__webpack_require__.n(callbag_map_readme);\n;// ./node_modules/.pnpm/callbag-merge@3.2.2/node_modules/callbag-merge/readme.js\n/**\n * callbag-merge\n * -------------\n *\n * Callbag factory that merges data from multiple callbag sources. Works well\n * with listenable sources, and while it may work for some pullable sources,\n * it is only designed for listenable sources.\n *\n * `npm install callbag-merge`\n *\n * Example:\n *\n * const interval = require('callbag-interval');\n * const forEach = require('callbag-for-each');\n * const merge = require('callbag-merge');\n *\n * const source = merge(interval(100), interval(350));\n *\n * forEach(x => console.log(x))(source); // 0\n * // 1\n * // 2\n * // 0\n * // 3\n * // 4\n * // 5\n * // ...\n */\n\nfunction merge(...sources) {\n return (start, sink) => {\n if (start !== 0) return;\n const n = sources.length;\n const sourceTalkbacks = new Array(n);\n let startCount = 0;\n let endCount = 0;\n let ended = false;\n const talkback = (t, d) => {\n if (t === 2) ended = true;\n for (let i = 0; i < n; i++) sourceTalkbacks[i] && sourceTalkbacks[i](t, d);\n };\n for (let i = 0; i < n; i++) {\n if (ended) return;\n sources[i](0, (t, d) => {\n if (t === 0) {\n sourceTalkbacks[i] = d;\n if (++startCount === 1) sink(0, talkback);\n } else if (t === 2 && d) {\n ended = true;\n for (let j = 0; j < n; j++) {\n if (j !== i) sourceTalkbacks[j] && sourceTalkbacks[j](2);\n }\n sink(2, d);\n } else if (t === 2) {\n sourceTalkbacks[i] = void 0;\n if (++endCount === n) sink(2);\n } else sink(t, d);\n });\n }\n };\n}\n\n/* harmony default export */ const callbag_merge_readme = (merge);\n\n;// ./node_modules/.pnpm/callbag-of@2.0.1/node_modules/callbag-of/dist/callbag-of.esm.js\nfunction of() {\n for (var _len = arguments.length, values = new Array(_len), _key = 0; _key < _len; _key++) {\n values[_key] = arguments[_key];\n }\n\n return function (start, sink) {\n if (start !== 0) return;\n var copy = values.slice();\n var disposed = false;\n sink(0, function (type) {\n if (type !== 2) return;\n disposed = true;\n copy.length = 0;\n });\n\n while (copy.length !== 0) {\n sink(1, copy.shift());\n }\n\n if (disposed) return;\n sink(2);\n };\n}\n\n/* harmony default export */ const callbag_of_esm = (of);\n\n;// ./node_modules/.pnpm/callbag-pairwise@1.0.1/node_modules/callbag-pairwise/dist/callbag-pairwise.es.js\nfunction pairwise(source) {\n return function (start, sink) {\n if (start !== 0) return;\n var inited = 0;\n var prev;\n var current;\n var talkback;\n source(0, function (type, data) {\n if (type === 0) {\n talkback = data;\n }\n\n if (type !== 1) {\n sink(type, data);\n return;\n }\n var _ref = [current, data];\n prev = _ref[0];\n current = _ref[1];\n inited++;\n\n if (inited < 2) {\n talkback(1);\n return;\n }\n\n sink(1, [prev, current]);\n });\n };\n}\n\n/* harmony default export */ const callbag_pairwise_es = (pairwise);\n\n;// ./node_modules/.pnpm/callbag-partition@1.0.0/node_modules/callbag-partition/dist/callbag-partition.es.js\n\n\nvar negate = function negate(fn) {\n return function (arg) {\n return !fn(arg);\n };\n};\n\nfunction partition(predicate) {\n return function (source) {\n return [readme_default()(predicate)(source), readme_default()(negate(predicate))(source)];\n };\n}\n\n/* harmony default export */ const callbag_partition_es = (partition);\n\n// EXTERNAL MODULE: ./node_modules/.pnpm/callbag-pipe@1.2.0/node_modules/callbag-pipe/readme.js\nvar callbag_pipe_readme = __webpack_require__(6464);\nvar callbag_pipe_readme_default = /*#__PURE__*/__webpack_require__.n(callbag_pipe_readme);\n// EXTERNAL MODULE: ./node_modules/.pnpm/callbag-reject@1.0.0/node_modules/callbag-reject/readme.js\nvar callbag_reject_readme = __webpack_require__(58);\nvar callbag_reject_readme_default = /*#__PURE__*/__webpack_require__.n(callbag_reject_readme);\n;// ./node_modules/.pnpm/callbag-remember@2.0.0/node_modules/callbag-remember/dist/callbag-remember.esm.js\nvar noop = function noop() {};\n\nvar UNIQUE = {};\nfunction remember(source) {\n var sinks = [];\n var inited = false;\n var endValue = UNIQUE;\n var sourceTalkback;\n var value;\n return function (start, sink) {\n if (start !== 0) return;\n\n if (endValue !== UNIQUE) {\n sink(0, noop);\n\n if (inited) {\n sink(1, value);\n }\n\n sink(2, endValue);\n return;\n }\n\n sinks.push(sink);\n\n var talkback = function talkback(type, data) {\n if (type === 2) {\n var index = sinks.indexOf(sink);\n\n if (index !== -1) {\n sinks.splice(index, 1);\n }\n\n return;\n }\n\n if (endValue !== UNIQUE) {\n return;\n }\n\n sourceTalkback(type, data);\n };\n\n if (sinks.length === 1) {\n source(0, function (type, data) {\n if (type === 0) {\n sourceTalkback = data;\n sink(0, talkback);\n return;\n }\n\n if (type === 1) {\n inited = true;\n value = data;\n }\n\n var sinksCopy = sinks.slice(0);\n\n if (type === 2) {\n endValue = data;\n sinks = null;\n }\n\n sinksCopy.forEach(function (sink) {\n sink(type, data);\n });\n });\n return;\n }\n\n sink(0, talkback);\n\n if (inited && endValue === UNIQUE) {\n sink(1, value);\n }\n };\n}\n\n/* harmony default export */ const callbag_remember_esm = (remember);\n\n;// ./node_modules/.pnpm/callbag-share@1.3.0/node_modules/callbag-share/index.js\nconst share = source => {\n let sinks = [];\n let sourceTalkback;\n\n return function shared(start, sink) {\n if (start !== 0) return;\n sinks.push(sink);\n\n const talkback = (t, d) => {\n if (t === 2) {\n const i = sinks.indexOf(sink);\n if (i > -1) sinks.splice(i, 1);\n if (!sinks.length) sourceTalkback(2);\n } else {\n sourceTalkback(t, d);\n }\n };\n\n if (sinks.length === 1) {\n source(0, (t, d) => {\n if (t === 0) {\n sourceTalkback = d;\n sink(0, talkback);\n } else for (let s of sinks.slice(0)) s(t, d);\n if (t === 2) sinks = [];\n });\n return\n }\n\n sink(0, talkback);\n }\n};\n\n/* harmony default export */ const callbag_share = (share);\n\n;// ./node_modules/.pnpm/callbag-start-with@3.1.0/node_modules/callbag-start-with/index.js\n\nconst startWith = (...xs) => inputSource => (start, outputSink) => {\n if (start !== 0) return;\n let disposed = false;\n let inputTalkback;\n let trackPull = false;\n let lastPull;\n\n outputSink(0, (ot, od) => {\n if (trackPull && ot === 1) {\n lastPull = [1, od];\n }\n\n if (ot === 2) {\n disposed = true;\n xs.length = 0;\n }\n\n if (!inputTalkback) return;\n inputTalkback(ot, od);\n });\n\n while (xs.length !== 0) {\n if (xs.length === 1) {\n trackPull = true;\n }\n outputSink(1, xs.shift());\n }\n\n if (disposed) return;\n\n inputSource(0, (it, id) => {\n if (it === 0) {\n inputTalkback = id;\n trackPull = false;\n\n if (lastPull) {\n inputTalkback(...lastPull);\n lastPull = null;\n }\n return;\n }\n outputSink(it, id);\n });\n};\n\n/* harmony default export */ const callbag_start_with = (startWith);\n\n;// ./node_modules/.pnpm/callbag-subscribe@1.5.1/node_modules/callbag-subscribe/index.js\nconst subscribe = (listener = {}) => source => {\n if (typeof listener === \"function\") {\n listener = { next: listener };\n }\n\n let { next, error, complete } = listener;\n let talkback;\n\n source(0, (t, d) => {\n if (t === 0) {\n talkback = d;\n }\n if (t === 1 && next) next(d);\n if (t === 1 || t === 0) talkback(1); // Pull\n if (t === 2 && !d && complete) complete();\n if (t === 2 && !!d && error) error( d );\n });\n\n const dispose = () => {\n if (talkback) talkback(2);\n }\n\n return dispose;\n}\n\n/* harmony default export */ const callbag_subscribe = (subscribe);\n\n// EXTERNAL MODULE: ./node_modules/.pnpm/callbag-take@1.5.0/node_modules/callbag-take/index.js\nvar callbag_take = __webpack_require__(4869);\nvar callbag_take_default = /*#__PURE__*/__webpack_require__.n(callbag_take);\n;// ./node_modules/.pnpm/callbag-take-until@3.0.2/node_modules/callbag-take-until/index.js\nconst callbag_take_until_UNIQUE = {};\n\nconst takeUntil = notifier => source => (start, sink) => {\n if (start !== 0) return;\n let sourceTalkback;\n let notifierTalkback;\n let inited = false;\n let done = callbag_take_until_UNIQUE;\n\n source(0, (type, data) => {\n if (type === 0) {\n sourceTalkback = data;\n\n notifier(0, (t, d) => {\n if (t === 0) {\n notifierTalkback = d;\n notifierTalkback(1);\n return;\n }\n if (t === 1) {\n done = void 0;\n notifierTalkback(2);\n sourceTalkback(2);\n if (inited) sink(2);\n return;\n }\n if (t === 2) {\n notifierTalkback = null;\n if (d != null) {\n done = d;\n sourceTalkback(2);\n if (inited) sink(t, d);\n }\n }\n });\n\n inited = true;\n\n sink(0, (t, d) => {\n if (done !== callbag_take_until_UNIQUE) return;\n if (t === 2 && notifierTalkback) notifierTalkback(2);\n sourceTalkback(t, d);\n });\n\n if (done !== callbag_take_until_UNIQUE) sink(2, done);\n return;\n }\n\n if (type === 2 && notifierTalkback) notifierTalkback(2);\n sink(type, data);\n });\n};\n\n/* harmony default export */ const callbag_take_until = (takeUntil);\n\n;// ./node_modules/.pnpm/callbag-debounce@4.0.0/node_modules/callbag-debounce/es/debounce.js\n/**\n * Debounces the given listenable source\n *\n * @param {number} wait - The number of ms to wait before letting a value pass\n * @returns {Function}\n */\nfunction debounce(wait) {\n return function (source) { return function (start, sink) {\n if (start !== 0)\n return;\n var timeout;\n var shouldTerminate = false;\n source(0, function (t, d) {\n if (t === 0) {\n // handle talkback from sink\n sink(t, function (t2, val) {\n // cleanup when terminated by sink\n if (t2 === 2 && timeout !== undefined) {\n clearTimeout(timeout);\n timeout = undefined;\n }\n // pass all talkback to source\n d(t2, val);\n });\n }\n else if (t === 1 || (t === 2 && d === undefined)) {\n // t === 1 means the source is emitting a value\n // t === 2 and d === undefined means the source emits a completion\n if (t === 2) {\n if (!timeout) {\n // There is not pending value, we can terminate the stream\n return sink(t, d);\n }\n else {\n // We keep track that the stream should terminate after the next value is emitted\n shouldTerminate = true;\n return;\n }\n }\n if (timeout) {\n clearTimeout(timeout);\n }\n timeout = setTimeout(function () {\n sink(t, d);\n if (shouldTerminate) {\n sink(2);\n }\n timeout = undefined;\n }, wait);\n }\n else {\n /*\n * nothing specific to do when the source\n * sends a t === 2 d !== undefined signal\n */\n sink(t, d);\n }\n });\n }; };\n}\n//# sourceMappingURL=debounce.js.map\n;// ./node_modules/.pnpm/callbag-toolkit@1.1.3/node_modules/callbag-toolkit/esm/types.js\nconst START = 0;\nconst DATA = 1;\nconst END = 2;\n//# sourceMappingURL=types.js.map\n;// ./node_modules/.pnpm/callbag-toolkit@1.1.3/node_modules/callbag-toolkit/esm/create.js\n/* eslint-disable @typescript-eslint/no-use-before-define,@typescript-eslint/no-unused-expressions,no-return-assign */\n\nconst create_createConsumer = ({ next, complete, error, start, end }) => (...args) => {\n if (start && args[0] === START) {\n /** talkback */\n const upstream = args[1];\n start({\n stop: () => void upstream(END),\n pull: () => void upstream(DATA),\n });\n }\n else if (next && args[0] === DATA && args.length === 2) {\n const data = args[1];\n next(data);\n }\n else if ((error || complete || end) && args[0] === END) {\n const errorValue = args[1];\n if (error && errorValue !== undefined)\n error(errorValue);\n else if (complete)\n complete();\n // consumer dispose logic\n if (end)\n end();\n }\n};\nconst assertActive = (state, method) => {\n if (state === 'active')\n return true;\n // eslint-disable-next-line no-console\n console.error(`This callbag source ${state === 'disposed'\n ? 'was previously disposed'\n : state === 'ended'\n ? 'has previously ended'\n : 'has not been started'}, but '${method}' was invoked.`);\n return false;\n};\nconst assertInactive = (state, method) => {\n if (state !== 'active')\n return true;\n // eslint-disable-next-line no-console\n console.error(`This callbag source is already active, but '${method}' was invoked.`);\n return false;\n};\nconst createSource = (onConsume) => (...args) => {\n if (args[0] !== START)\n return;\n let state = 'inactive';\n const markDisposed = () => state !== 'disposed' && (state = 'disposed');\n let init = false;\n /** talkback: handle messages from the sink back to this source */\n // eslint-disable-next-line @typescript-eslint/no-shadow\n const upstream = (...args) => {\n if (state === 'disposed')\n return;\n if (init) {\n // got a request from the sink for the next value, let's process it\n if (askToPull && args[0] === DATA)\n askToPull();\n else if (args[0] === END)\n markDisposed() && (dispose === null || dispose === void 0 ? void 0 : dispose());\n }\n else {\n init = args;\n }\n };\n /** sink */\n const downstream = args[1];\n const consumer = onConsume({\n start: () => {\n if (!assertInactive(state, 'start'))\n return;\n downstream(START, upstream);\n state = 'active';\n },\n next: (data) => {\n if (!assertActive(state, 'next'))\n return;\n downstream(DATA, data);\n },\n error: (error) => {\n // assert, but passthrough errors so that clean-up may take place\n assertActive(state, 'error');\n downstream(END, error);\n state = 'ended';\n },\n complete: () => {\n // assert, but passthrough errors so that clean-up may take place\n assertActive(state, 'complete');\n downstream(END);\n state = 'ended';\n },\n });\n const dispose = typeof consumer === 'function' ? consumer : consumer === null || consumer === void 0 ? void 0 : consumer.stop;\n const askToPull = typeof consumer === 'object' ? consumer === null || consumer === void 0 ? void 0 : consumer.pull : undefined;\n if (init)\n upstream(...init);\n init = true;\n};\n//# sourceMappingURL=create.js.map\n;// ./node_modules/.pnpm/callbag-toolkit@1.1.3/node_modules/callbag-toolkit/esm/consume.js\n\n\nconst consumeSourceWithConsumer = (source, consumer) => void source(START, consumer);\nconst defaultConsumptionManagement = {\n pull: () => {\n throw new Error(`Cannot pull from source that is not started.`);\n },\n stop: () => {\n throw new Error(`Cannot stop a source that is not started.`);\n },\n};\nconst consumeSource = (source, consumerHandlers, lazyStart = false) => {\n let consumptionManagement = defaultConsumptionManagement;\n const consumer = create_createConsumer(Object.assign(Object.assign({}, consumerHandlers), { start: (management) => {\n var _a;\n consumptionManagement = management;\n (_a = consumerHandlers === null || consumerHandlers === void 0 ? void 0 : consumerHandlers.start) === null || _a === void 0 ? void 0 : _a.call(consumerHandlers, management);\n }, end: () => {\n var _a;\n consumptionManagement = defaultConsumptionManagement;\n (_a = consumerHandlers === null || consumerHandlers === void 0 ? void 0 : consumerHandlers.end) === null || _a === void 0 ? void 0 : _a.call(consumerHandlers);\n } }));\n const isStarted = () => consumptionManagement !== defaultConsumptionManagement;\n const start = () => !(isStarted() || void consumeSourceWithConsumer(source, consumer));\n if (!lazyStart)\n start();\n return {\n pull: () => void consumptionManagement.pull(),\n stop: () => void consumptionManagement.stop(),\n start,\n get started() {\n return isStarted();\n },\n };\n};\nconst consumeSynchronously = (source) => {\n const emittedValues = [];\n let error;\n let consumptionManagement = defaultConsumptionManagement;\n let didComplete = false;\n const consumer = createConsumer({\n next: (data) => {\n emittedValues.push(data);\n },\n complete: () => {\n didComplete = true;\n },\n error: (e) => {\n error = e;\n },\n start: (management) => {\n consumptionManagement = management;\n },\n });\n consumeSourceWithConsumer(source, consumer);\n if (consumptionManagement === defaultConsumptionManagement) {\n throw new Error(`Could not consume synchronously, because the source never started.`);\n }\n if (!didComplete) {\n consumptionManagement.stop();\n throw new Error(`Could not consume, because the source never completed synchronously.`);\n }\n if (error)\n throw error;\n return emittedValues;\n};\n//# sourceMappingURL=consume.js.map\n;// ./src/utilities/callbag.ts\nvar __defProp = Object.defineProperty;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n if (__getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(b)) {\n if (__propIsEnum.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n }\n return a;\n};\nvar __objRest = (source, exclude) => {\n var target = {};\n for (var prop in source)\n if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)\n target[prop] = source[prop];\n if (source != null && __getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(source)) {\n if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))\n target[prop] = source[prop];\n }\n return target;\n};\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst subject = () => {\n let next;\n return {\n source: callbag_share(callbag_create((next_) => {\n next = next_;\n })),\n push: (v) => next && next(v)\n };\n};\nconst completeWhen = (trigger) => (subject2) => createSource((_a) => {\n var _b = _a, { complete } = _b, rest = __objRest(_b, [\"complete\"]);\n const subjectConsumption = consumeSource(subject2, __spreadValues({\n complete() {\n triggerConsumption.stop();\n subjectConsumption.stop();\n }\n }, rest));\n const triggerConsumption = consumeSource(trigger, {\n next() {\n triggerConsumption.stop();\n subjectConsumption.stop();\n complete();\n },\n complete() {\n triggerConsumption.stop();\n }\n });\n return () => {\n triggerConsumption.stop();\n subjectConsumption.stop();\n };\n});\nconst subscribe2 = (source, listener) => callbag_pipe_readme_default()(source, callbag_subscribe(listener));\nconst Callbag = {\n create: callbag_create,\n completeWhen,\n debounce: debounce,\n distinct: callbag_drop_repeats,\n filter: (readme_default()),\n flatMap: (callbag_flat_map_default()),\n fromEvent: callbag_from_event,\n fromPromise: callbag_from_promise,\n map: (callbag_map_readme_default()),\n merge: callbag_merge_readme,\n of: callbag_of_esm,\n pairwise: callbag_pairwise_es,\n partition: callbag_partition_es,\n pipe: (callbag_pipe_readme_default()),\n reject: (callbag_reject_readme_default()),\n remember: callbag_remember_esm,\n share: callbag_share,\n startWith: callbag_start_with,\n subject,\n subscribe: subscribe2,\n take: (callbag_take_default()),\n takeUntil: callbag_take_until\n};\n\n/* harmony default export */ const callbag = (Callbag);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjAwLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQSxxREFBZSxNQUFNLEVBQUM7OztBQy9CdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBLDJEQUFlLFdBQVcsRUFBQzs7Ozs7Ozs7O0FDWjNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEseURBQWUsU0FBUyxFQUFDOzs7QUMxQnpCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBLDJEQUFlLFdBQVcsRUFBQzs7Ozs7O0FDbkIzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQixPQUFPO0FBQzdCO0FBQ0Esb0JBQW9CLE9BQU87QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBLDBCQUEwQixPQUFPO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsVUFBVTtBQUNWLE9BQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUEsMkRBQWUsS0FBSyxFQUFDOzs7QUM3RHJCO0FBQ0Esd0VBQXdFLGFBQWE7QUFDckY7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEscURBQWUsRUFBRSxFQUFDOzs7QUN4QmxCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBLDBEQUFlLFFBQVEsRUFBQzs7O0FDL0JZOztBQUVwQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxZQUFZLGdCQUFNLHFCQUFxQixnQkFBTTtBQUM3QztBQUNBOztBQUVBLDJEQUFlLFNBQVMsRUFBQzs7Ozs7Ozs7O0FDZHpCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSwyREFBZSxRQUFRLEVBQUM7OztBQzlFeEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLG9EQUFlLEtBQUssRUFBQzs7OztBQ2hDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQSx5REFBZSxTQUFTLEVBQUM7OztBQzlDekIsZ0NBQWdDO0FBQ2hDO0FBQ0EsaUJBQWlCO0FBQ2pCOztBQUVBLFFBQVEsd0JBQXdCO0FBQ2hDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQ0FBMEM7QUFDMUM7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsd0RBQWUsU0FBUyxFQUFDOzs7Ozs7QUN6QnpCLE1BQU0seUJBQU07O0FBRVo7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEseUJBQU07O0FBRW5CO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPOztBQUVQOztBQUVBO0FBQ0EscUJBQXFCLHlCQUFNO0FBQzNCO0FBQ0E7QUFDQSxPQUFPOztBQUVQLG1CQUFtQix5QkFBTTtBQUN6QjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUEseURBQWUsU0FBUyxFQUFDOzs7QUNyRHpCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixhQUFhO0FBQ2I7QUFDTztBQUNQLCtCQUErQjtBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLG9DOztBQzVETztBQUNBO0FBQ0E7QUFDUCxpQzs7QUNIQTtBQUMyQztBQUNwQyxNQUFNLHFCQUFjLE1BQU0sbUNBQW1DO0FBQ3BFLDZCQUE2QixLQUFLO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBLHNDQUFzQyxHQUFHO0FBQ3pDLHNDQUFzQyxJQUFJO0FBQzFDLFNBQVM7QUFDVDtBQUNBLGlDQUFpQyxJQUFJO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBLHVEQUF1RCxHQUFHO0FBQzFEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUM7QUFDekM7QUFDQTtBQUNBO0FBQ0EscUNBQXFDLFNBQVMsT0FBTztBQUNyRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpRUFBaUUsT0FBTztBQUN4RTtBQUNBO0FBQ087QUFDUCxvQkFBb0IsS0FBSztBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUNBQXlDLElBQUk7QUFDN0M7QUFDQSxpQ0FBaUMsR0FBRztBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsS0FBSztBQUM1QjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsSUFBSTtBQUMzQixTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLEdBQUc7QUFDMUI7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLEdBQUc7QUFDMUI7QUFDQSxTQUFTO0FBQ1QsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtDOztBQ25HMEM7QUFDVjtBQUN6QixvRUFBb0UsS0FBSztBQUNoRjtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNPO0FBQ1A7QUFDQSxxQkFBcUIscUJBQWMsK0JBQStCLHVCQUF1QjtBQUN6RjtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDbEVtQjtBQUNFO0FBQ0Y7QUFDQztBQUNFO0FBQ0U7QUFDUjtBQUNFO0FBQ0g7QUFDTTtBQUNDO0FBQ0w7QUFDRTtBQUNFO0FBQ0g7QUFDSTtBQUNBO0FBQ0w7QUFDSztBQUNHO0FBR21CO0FBRzVDLE1BQU0sVUFBVSxNQUFzRDtBQUNwRSxNQUFJO0FBQ0osU0FBTztBQUFBLElBQ0wsUUFBUSxhQUFLLENBQUMsY0FBTSxDQUFJLFdBQVM7QUFBQyxhQUFPO0FBQUEsSUFBSyxDQUFDLENBQUM7QUFBQSxJQUNoRCxNQUFNLENBQUMsTUFBUyxRQUFRLEtBQUssQ0FBQztBQUFBLEVBQ2hDO0FBQ0Y7QUFFQSxNQUFNLGVBQWUsQ0FBQyxZQUE2QixDQUFJQSxhQUNyRCxZQUFZLENBQUMsQ0FBQyxPQUEwQjtBQUExQixlQUFFLFdBbENsQixJQWtDZ0IsSUFBZSxpQkFBZixJQUFlLENBQWI7QUFDZCxRQUFNLHFCQUFxQixhQUFhLENBQUNBLFVBQVM7QUFBQSxJQUNoRCxXQUFXO0FBQ1QseUJBQW1CLEtBQUs7QUFDeEIseUJBQW1CLEtBQUs7QUFBQSxJQUMxQjtBQUFBLEtBQ0csS0FDSjtBQUNELFFBQU0scUJBQXFCLGFBQWEsQ0FBQyxTQUFTO0FBQUEsSUFDaEQsT0FBTztBQUNMLHlCQUFtQixLQUFLO0FBQ3hCLHlCQUFtQixLQUFLO0FBQ3hCLGVBQVM7QUFBQSxJQUNYO0FBQUEsSUFDQSxXQUFXO0FBQ1QseUJBQW1CLEtBQUs7QUFBQSxJQUMxQjtBQUFBLEVBQ0YsQ0FBQztBQUNELFNBQU8sTUFBTTtBQUNYLHVCQUFtQixLQUFLO0FBQ3hCLHVCQUFtQixLQUFLO0FBQUEsRUFDMUI7QUFDRixDQUFDO0FBUUgsTUFBTSxhQUFhLENBQUksUUFBbUIsYUFBMEMsNkJBQUksQ0FBQyxRQUFRLGlCQUFTLENBQUMsUUFBUSxDQUFDO0FBSXBILE1BQU0sVUFBVTtBQUFBLEVBQ2QsTUFBTTtBQUFOLEVBQ0E7QUFBQSxFQUNBLFFBQVE7QUFBUixFQUNBLFFBQVE7QUFBUixFQUNBLE1BQU07QUFBTixFQUNBLE9BQU87QUFBUCxFQUNBLFNBQVM7QUFBVCxFQUNBLFdBQVc7QUFBWCxFQUNBLEdBQUc7QUFBSCxFQUNBLEtBQUs7QUFBTCxFQUNBLEVBQUU7QUFBRixFQUNBLFFBQVE7QUFBUixFQUNBLFNBQVM7QUFBVCxFQUNBLElBQUk7QUFBSixFQUNBLE1BQU07QUFBTixFQUNBLFFBQVE7QUFBUixFQUNBLEtBQUs7QUFBTCxFQUNBLFNBQVM7QUFBVCxFQUNBO0FBQUEsRUFDQSxXQUFXO0FBQUEsRUFDWCxJQUFJO0FBQUosRUFDQSxTQUFTO0FBQ1g7QUF3QkU7QUFHRiw4Q0FBZSxPQUFPIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vb2JzaWRpYW4tbWluZG1hcC1uZXh0Z2VuLy4vbm9kZV9tb2R1bGVzLy5wbnBtL2NhbGxiYWctY3JlYXRlQDIuMS4zL25vZGVfbW9kdWxlcy9jYWxsYmFnLWNyZWF0ZS9pbmRleC5qcz9hMTBlIiwid2VicGFjazovL29ic2lkaWFuLW1pbmRtYXAtbmV4dGdlbi8uL25vZGVfbW9kdWxlcy8ucG5wbS9jYWxsYmFnLWRyb3AtcmVwZWF0c0AxLjEuMC9ub2RlX21vZHVsZXMvY2FsbGJhZy1kcm9wLXJlcGVhdHMvaW5kZXguanM/MjMzZCIsIndlYnBhY2s6Ly9vYnNpZGlhbi1taW5kbWFwLW5leHRnZW4vLi9ub2RlX21vZHVsZXMvLnBucG0vY2FsbGJhZy1mcm9tLWV2ZW50QDEuMy4wL25vZGVfbW9kdWxlcy9jYWxsYmFnLWZyb20tZXZlbnQvaW5kZXguanM/ZDRlOSIsIndlYnBhY2s6Ly9vYnNpZGlhbi1taW5kbWFwLW5leHRnZW4vLi9ub2RlX21vZHVsZXMvLnBucG0vY2FsbGJhZy1mcm9tLXByb21pc2VAMS4zLjAvbm9kZV9tb2R1bGVzL2NhbGxiYWctZnJvbS1wcm9taXNlL2luZGV4LmpzPzZmZDciLCJ3ZWJwYWNrOi8vb2JzaWRpYW4tbWluZG1hcC1uZXh0Z2VuLy4vbm9kZV9tb2R1bGVzLy5wbnBtL2NhbGxiYWctbWVyZ2VAMy4yLjIvbm9kZV9tb2R1bGVzL2NhbGxiYWctbWVyZ2UvcmVhZG1lLmpzP2Y0NDciLCJ3ZWJwYWNrOi8vb2JzaWRpYW4tbWluZG1hcC1uZXh0Z2VuLy4vbm9kZV9tb2R1bGVzLy5wbnBtL2NhbGxiYWctb2ZAMi4wLjEvbm9kZV9tb2R1bGVzL2NhbGxiYWctb2YvZGlzdC9jYWxsYmFnLW9mLmVzbS5qcz9iMDNhIiwid2VicGFjazovL29ic2lkaWFuLW1pbmRtYXAtbmV4dGdlbi8uL25vZGVfbW9kdWxlcy8ucG5wbS9jYWxsYmFnLXBhaXJ3aXNlQDEuMC4xL25vZGVfbW9kdWxlcy9jYWxsYmFnLXBhaXJ3aXNlL2Rpc3QvY2FsbGJhZy1wYWlyd2lzZS5lcy5qcz9kYjNkIiwid2VicGFjazovL29ic2lkaWFuLW1pbmRtYXAtbmV4dGdlbi8uL25vZGVfbW9kdWxlcy8ucG5wbS9jYWxsYmFnLXBhcnRpdGlvbkAxLjAuMC9ub2RlX21vZHVsZXMvY2FsbGJhZy1wYXJ0aXRpb24vZGlzdC9jYWxsYmFnLXBhcnRpdGlvbi5lcy5qcz85NzQ4Iiwid2VicGFjazovL29ic2lkaWFuLW1pbmRtYXAtbmV4dGdlbi8uL25vZGVfbW9kdWxlcy8ucG5wbS9jYWxsYmFnLXJlbWVtYmVyQDIuMC4wL25vZGVfbW9kdWxlcy9jYWxsYmFnLXJlbWVtYmVyL2Rpc3QvY2FsbGJhZy1yZW1lbWJlci5lc20uanM/OGE4ZCIsIndlYnBhY2s6Ly9vYnNpZGlhbi1taW5kbWFwLW5leHRnZW4vLi9ub2RlX21vZHVsZXMvLnBucG0vY2FsbGJhZy1zaGFyZUAxLjMuMC9ub2RlX21vZHVsZXMvY2FsbGJhZy1zaGFyZS9pbmRleC5qcz9kNWE1Iiwid2VicGFjazovL29ic2lkaWFuLW1pbmRtYXAtbmV4dGdlbi8uL25vZGVfbW9kdWxlcy8ucG5wbS9jYWxsYmFnLXN0YXJ0LXdpdGhAMy4xLjAvbm9kZV9tb2R1bGVzL2NhbGxiYWctc3RhcnQtd2l0aC9pbmRleC5qcz9jZDg5Iiwid2VicGFjazovL29ic2lkaWFuLW1pbmRtYXAtbmV4dGdlbi8uL25vZGVfbW9kdWxlcy8ucG5wbS9jYWxsYmFnLXN1YnNjcmliZUAxLjUuMS9ub2RlX21vZHVsZXMvY2FsbGJhZy1zdWJzY3JpYmUvaW5kZXguanM/OGEwZSIsIndlYnBhY2s6Ly9vYnNpZGlhbi1taW5kbWFwLW5leHRnZW4vLi9ub2RlX21vZHVsZXMvLnBucG0vY2FsbGJhZy10YWtlLXVudGlsQDMuMC4yL25vZGVfbW9kdWxlcy9jYWxsYmFnLXRha2UtdW50aWwvaW5kZXguanM/ODFjMCIsIndlYnBhY2s6Ly9vYnNpZGlhbi1taW5kbWFwLW5leHRnZW4vLi9ub2RlX21vZHVsZXMvLnBucG0vY2FsbGJhZy1kZWJvdW5jZUA0LjAuMC9ub2RlX21vZHVsZXMvY2FsbGJhZy1kZWJvdW5jZS9lcy9kZWJvdW5jZS5qcz9lNzJkIiwid2VicGFjazovL29ic2lkaWFuLW1pbmRtYXAtbmV4dGdlbi8uL25vZGVfbW9kdWxlcy8ucG5wbS9jYWxsYmFnLXRvb2xraXRAMS4xLjMvbm9kZV9tb2R1bGVzL2NhbGxiYWctdG9vbGtpdC9lc20vdHlwZXMuanM/YjZiMiIsIndlYnBhY2s6Ly9vYnNpZGlhbi1taW5kbWFwLW5leHRnZW4vLi9ub2RlX21vZHVsZXMvLnBucG0vY2FsbGJhZy10b29sa2l0QDEuMS4zL25vZGVfbW9kdWxlcy9jYWxsYmFnLXRvb2xraXQvZXNtL2NyZWF0ZS5qcz9kYzk4Iiwid2VicGFjazovL29ic2lkaWFuLW1pbmRtYXAtbmV4dGdlbi8uL25vZGVfbW9kdWxlcy8ucG5wbS9jYWxsYmFnLXRvb2xraXRAMS4xLjMvbm9kZV9tb2R1bGVzL2NhbGxiYWctdG9vbGtpdC9lc20vY29uc3VtZS5qcz85MjE3Iiwid2VicGFjazovL29ic2lkaWFuLW1pbmRtYXAtbmV4dGdlbi8uL3NyYy91dGlsaXRpZXMvY2FsbGJhZy50cz9iNDM5Il0sInNvdXJjZXNDb250ZW50IjpbImNvbnN0IGNyZWF0ZSA9IHByb2QgPT4gKHN0YXJ0LCBzaW5rKSA9PiB7XG4gIGlmIChzdGFydCAhPT0gMCkgcmV0dXJuO1xuICBpZiAodHlwZW9mIHByb2QgIT09ICdmdW5jdGlvbicpIHtcbiAgICBzaW5rKDAsICgpID0+IHt9KTtcbiAgICBzaW5rKDIpO1xuICAgIHJldHVybjtcbiAgfVxuICBsZXQgZW5kID0gZmFsc2U7XG4gIGxldCBjbGVhbjtcbiAgc2luaygwLCAodCkgPT4ge1xuICAgIGlmICghZW5kKSB7XG4gICAgICBlbmQgPSB0ID09PSAyO1xuICAgICAgaWYgKGVuZCAmJiB0eXBlb2YgY2xlYW4gPT09ICdmdW5jdGlvbicpIGNsZWFuKCk7XG4gICAgfVxuICB9KTtcbiAgaWYgKGVuZCkgcmV0dXJuO1xuICBjbGVhbiA9IHByb2QoKHYpID0+IHtcbiAgICBpZiAoIWVuZCkgc2luaygxLCB2KTtcbiAgfSwgKGUpID0+IHtcbiAgICBpZiAoIWVuZCAmJiBlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGVuZCA9IHRydWU7XG4gICAgICBzaW5rKDIsIGUpO1xuICAgIH1cbiAgfSwgKCkgPT4ge1xuICAgIGlmICghZW5kKSB7XG4gICAgICBlbmQgPSB0cnVlO1xuICAgICAgc2luaygyKTtcbiAgICB9XG4gIH0pO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY3JlYXRlO1xuIiwiY29uc3QgZHJvcFJlcGVhdHMgPSBwcmVkID0+IHNyYyA9PiAoc3RhcnQsIHNpbmspID0+IHtcbiAgY29uc3QgSU5JVCA9IHt9O1xuICBsZXQgY2FjaGUgPSBJTklUO1xuICBsZXQgYXNrO1xuICBjb25zdCBlcXVhbHMgPSBwcmVkIHx8ICgoYSwgYikgPT4gYSA9PT0gYik7XG4gIHN0YXJ0ID09PSAwICYmIHNyYyhzdGFydCwgKHQsIGQpID0+IHtcbiAgICBpZiAodCA9PT0gc3RhcnQpIGFzayA9IGQ7XG4gICAgaWYgKHQgPT09IDEpIHJldHVybiBjYWNoZSAhPT0gSU5JVCAmJiBlcXVhbHMoY2FjaGUsIGQpID8gYXNrKHQpIDogc2luayh0LCBjYWNoZSA9IGQpO1xuICAgIHNpbmsodCwgZCk7XG4gIH0pO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgZHJvcFJlcGVhdHM7XG4iLCJjb25zdCBmcm9tRXZlbnQgPSAobm9kZSwgbmFtZSwgb3B0aW9ucykgPT4gKHN0YXJ0LCBzaW5rKSA9PiB7XG4gIGlmIChzdGFydCAhPT0gMCkgcmV0dXJuO1xuICBsZXQgZGlzcG9zZWQgPSBmYWxzZTtcbiAgY29uc3QgaGFuZGxlciA9IGV2ID0+IHtcbiAgICBzaW5rKDEsIGV2KVxuICB9O1xuXG4gIHNpbmsoMCwgdCA9PiB7XG4gICAgaWYgKHQgIT09IDIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZGlzcG9zZWQgPSB0cnVlO1xuICAgIGlmIChub2RlLnJlbW92ZUV2ZW50TGlzdGVuZXIpIG5vZGUucmVtb3ZlRXZlbnRMaXN0ZW5lcihuYW1lLCBoYW5kbGVyLCBvcHRpb25zKTtcbiAgICBlbHNlIGlmIChub2RlLnJlbW92ZUxpc3RlbmVyKSBub2RlLnJlbW92ZUxpc3RlbmVyKG5hbWUsIGhhbmRsZXIpO1xuICAgIGVsc2UgdGhyb3cgbmV3IEVycm9yKCdjYW5ub3QgcmVtb3ZlIGxpc3RlbmVyIGZyb20gbm9kZS4gTm8gbWV0aG9kIGZvdW5kLicpO1xuICB9KTtcblxuICBpZiAoZGlzcG9zZWQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAobm9kZS5hZGRFdmVudExpc3RlbmVyKSBub2RlLmFkZEV2ZW50TGlzdGVuZXIobmFtZSwgaGFuZGxlciwgb3B0aW9ucyk7XG4gIGVsc2UgaWYgKG5vZGUuYWRkTGlzdGVuZXIpIG5vZGUuYWRkTGlzdGVuZXIobmFtZSwgaGFuZGxlcik7XG4gIGVsc2UgdGhyb3cgbmV3IEVycm9yKCdjYW5ub3QgYWRkIGxpc3RlbmVyIHRvIG5vZGUuIE5vIG1ldGhvZCBmb3VuZC4nKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZyb21FdmVudDtcbiIsImNvbnN0IGZyb21Qcm9taXNlID0gcHJvbWlzZSA9PiAoc3RhcnQsIHNpbmspID0+IHtcbiAgaWYgKHN0YXJ0ICE9PSAwKSByZXR1cm47XG4gIGxldCBlbmRlZCA9IGZhbHNlO1xuICBjb25zdCBvbmZ1bGZpbGxlZCA9IHZhbCA9PiB7XG4gICAgaWYgKGVuZGVkKSByZXR1cm47XG4gICAgc2luaygxLCB2YWwpO1xuICAgIGlmIChlbmRlZCkgcmV0dXJuO1xuICAgIHNpbmsoMik7XG4gIH07XG4gIGNvbnN0IG9ucmVqZWN0ZWQgPSAoZXJyID0gbmV3IEVycm9yKCkpID0+IHtcbiAgICBpZiAoZW5kZWQpIHJldHVybjtcbiAgICBzaW5rKDIsIGVycik7XG4gIH07XG4gIHByb21pc2UudGhlbihvbmZ1bGZpbGxlZCwgb25yZWplY3RlZCk7XG4gIHNpbmsoMCwgdCA9PiB7XG4gICAgaWYgKHQgPT09IDIpIGVuZGVkID0gdHJ1ZTtcbiAgfSk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBmcm9tUHJvbWlzZTtcbiIsIi8qKlxuICogY2FsbGJhZy1tZXJnZVxuICogLS0tLS0tLS0tLS0tLVxuICpcbiAqIENhbGxiYWcgZmFjdG9yeSB0aGF0IG1lcmdlcyBkYXRhIGZyb20gbXVsdGlwbGUgY2FsbGJhZyBzb3VyY2VzLiBXb3JrcyB3ZWxsXG4gKiB3aXRoIGxpc3RlbmFibGUgc291cmNlcywgYW5kIHdoaWxlIGl0IG1heSB3b3JrIGZvciBzb21lIHB1bGxhYmxlIHNvdXJjZXMsXG4gKiBpdCBpcyBvbmx5IGRlc2lnbmVkIGZvciBsaXN0ZW5hYmxlIHNvdXJjZXMuXG4gKlxuICogYG5wbSBpbnN0YWxsIGNhbGxiYWctbWVyZ2VgXG4gKlxuICogRXhhbXBsZTpcbiAqXG4gKiAgICAgY29uc3QgaW50ZXJ2YWwgPSByZXF1aXJlKCdjYWxsYmFnLWludGVydmFsJyk7XG4gKiAgICAgY29uc3QgZm9yRWFjaCA9IHJlcXVpcmUoJ2NhbGxiYWctZm9yLWVhY2gnKTtcbiAqICAgICBjb25zdCBtZXJnZSA9IHJlcXVpcmUoJ2NhbGxiYWctbWVyZ2UnKTtcbiAqXG4gKiAgICAgY29uc3Qgc291cmNlID0gbWVyZ2UoaW50ZXJ2YWwoMTAwKSwgaW50ZXJ2YWwoMzUwKSk7XG4gKlxuICogICAgIGZvckVhY2goeCA9PiBjb25zb2xlLmxvZyh4KSkoc291cmNlKTsgLy8gMFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gM1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gNFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gNVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gLi4uXG4gKi9cblxuZnVuY3Rpb24gbWVyZ2UoLi4uc291cmNlcykge1xuICByZXR1cm4gKHN0YXJ0LCBzaW5rKSA9PiB7XG4gICAgaWYgKHN0YXJ0ICE9PSAwKSByZXR1cm47XG4gICAgY29uc3QgbiA9IHNvdXJjZXMubGVuZ3RoO1xuICAgIGNvbnN0IHNvdXJjZVRhbGtiYWNrcyA9IG5ldyBBcnJheShuKTtcbiAgICBsZXQgc3RhcnRDb3VudCA9IDA7XG4gICAgbGV0IGVuZENvdW50ID0gMDtcbiAgICBsZXQgZW5kZWQgPSBmYWxzZTtcbiAgICBjb25zdCB0YWxrYmFjayA9ICh0LCBkKSA9PiB7XG4gICAgICBpZiAodCA9PT0gMikgZW5kZWQgPSB0cnVlO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuOyBpKyspIHNvdXJjZVRhbGtiYWNrc1tpXSAmJiBzb3VyY2VUYWxrYmFja3NbaV0odCwgZCk7XG4gICAgfTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG47IGkrKykge1xuICAgICAgaWYgKGVuZGVkKSByZXR1cm47XG4gICAgICBzb3VyY2VzW2ldKDAsICh0LCBkKSA9PiB7XG4gICAgICAgIGlmICh0ID09PSAwKSB7XG4gICAgICAgICAgc291cmNlVGFsa2JhY2tzW2ldID0gZDtcbiAgICAgICAgICBpZiAoKytzdGFydENvdW50ID09PSAxKSBzaW5rKDAsIHRhbGtiYWNrKTtcbiAgICAgICAgfSBlbHNlIGlmICh0ID09PSAyICYmIGQpIHtcbiAgICAgICAgICBlbmRlZCA9IHRydWU7XG4gICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBuOyBqKyspIHtcbiAgICAgICAgICAgIGlmIChqICE9PSBpKSBzb3VyY2VUYWxrYmFja3Nbal0gJiYgc291cmNlVGFsa2JhY2tzW2pdKDIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzaW5rKDIsIGQpO1xuICAgICAgICB9IGVsc2UgaWYgKHQgPT09IDIpIHtcbiAgICAgICAgICBzb3VyY2VUYWxrYmFja3NbaV0gPSB2b2lkIDA7XG4gICAgICAgICAgaWYgKCsrZW5kQ291bnQgPT09IG4pIHNpbmsoMik7XG4gICAgICAgIH0gZWxzZSBzaW5rKHQsIGQpO1xuICAgICAgfSk7XG4gICAgfVxuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBtZXJnZTtcbiIsImZ1bmN0aW9uIG9mKCkge1xuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgdmFsdWVzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIHZhbHVlc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAoc3RhcnQsIHNpbmspIHtcbiAgICBpZiAoc3RhcnQgIT09IDApIHJldHVybjtcbiAgICB2YXIgY29weSA9IHZhbHVlcy5zbGljZSgpO1xuICAgIHZhciBkaXNwb3NlZCA9IGZhbHNlO1xuICAgIHNpbmsoMCwgZnVuY3Rpb24gKHR5cGUpIHtcbiAgICAgIGlmICh0eXBlICE9PSAyKSByZXR1cm47XG4gICAgICBkaXNwb3NlZCA9IHRydWU7XG4gICAgICBjb3B5Lmxlbmd0aCA9IDA7XG4gICAgfSk7XG5cbiAgICB3aGlsZSAoY29weS5sZW5ndGggIT09IDApIHtcbiAgICAgIHNpbmsoMSwgY29weS5zaGlmdCgpKTtcbiAgICB9XG5cbiAgICBpZiAoZGlzcG9zZWQpIHJldHVybjtcbiAgICBzaW5rKDIpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBvZjtcbiIsImZ1bmN0aW9uIHBhaXJ3aXNlKHNvdXJjZSkge1xuICByZXR1cm4gZnVuY3Rpb24gKHN0YXJ0LCBzaW5rKSB7XG4gICAgaWYgKHN0YXJ0ICE9PSAwKSByZXR1cm47XG4gICAgdmFyIGluaXRlZCA9IDA7XG4gICAgdmFyIHByZXY7XG4gICAgdmFyIGN1cnJlbnQ7XG4gICAgdmFyIHRhbGtiYWNrO1xuICAgIHNvdXJjZSgwLCBmdW5jdGlvbiAodHlwZSwgZGF0YSkge1xuICAgICAgaWYgKHR5cGUgPT09IDApIHtcbiAgICAgICAgdGFsa2JhY2sgPSBkYXRhO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZSAhPT0gMSkge1xuICAgICAgICBzaW5rKHR5cGUsIGRhdGEpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB2YXIgX3JlZiA9IFtjdXJyZW50LCBkYXRhXTtcbiAgICAgIHByZXYgPSBfcmVmWzBdO1xuICAgICAgY3VycmVudCA9IF9yZWZbMV07XG4gICAgICBpbml0ZWQrKztcblxuICAgICAgaWYgKGluaXRlZCA8IDIpIHtcbiAgICAgICAgdGFsa2JhY2soMSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgc2luaygxLCBbcHJldiwgY3VycmVudF0pO1xuICAgIH0pO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBwYWlyd2lzZTtcbiIsImltcG9ydCBmaWx0ZXIgZnJvbSAnY2FsbGJhZy1maWx0ZXInO1xuXG52YXIgbmVnYXRlID0gZnVuY3Rpb24gbmVnYXRlKGZuKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoYXJnKSB7XG4gICAgcmV0dXJuICFmbihhcmcpO1xuICB9O1xufTtcblxuZnVuY3Rpb24gcGFydGl0aW9uKHByZWRpY2F0ZSkge1xuICByZXR1cm4gZnVuY3Rpb24gKHNvdXJjZSkge1xuICAgIHJldHVybiBbZmlsdGVyKHByZWRpY2F0ZSkoc291cmNlKSwgZmlsdGVyKG5lZ2F0ZShwcmVkaWNhdGUpKShzb3VyY2UpXTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgcGFydGl0aW9uO1xuIiwidmFyIG5vb3AgPSBmdW5jdGlvbiBub29wKCkge307XG5cbnZhciBVTklRVUUgPSB7fTtcbmZ1bmN0aW9uIHJlbWVtYmVyKHNvdXJjZSkge1xuICB2YXIgc2lua3MgPSBbXTtcbiAgdmFyIGluaXRlZCA9IGZhbHNlO1xuICB2YXIgZW5kVmFsdWUgPSBVTklRVUU7XG4gIHZhciBzb3VyY2VUYWxrYmFjaztcbiAgdmFyIHZhbHVlO1xuICByZXR1cm4gZnVuY3Rpb24gKHN0YXJ0LCBzaW5rKSB7XG4gICAgaWYgKHN0YXJ0ICE9PSAwKSByZXR1cm47XG5cbiAgICBpZiAoZW5kVmFsdWUgIT09IFVOSVFVRSkge1xuICAgICAgc2luaygwLCBub29wKTtcblxuICAgICAgaWYgKGluaXRlZCkge1xuICAgICAgICBzaW5rKDEsIHZhbHVlKTtcbiAgICAgIH1cblxuICAgICAgc2luaygyLCBlbmRWYWx1ZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc2lua3MucHVzaChzaW5rKTtcblxuICAgIHZhciB0YWxrYmFjayA9IGZ1bmN0aW9uIHRhbGtiYWNrKHR5cGUsIGRhdGEpIHtcbiAgICAgIGlmICh0eXBlID09PSAyKSB7XG4gICAgICAgIHZhciBpbmRleCA9IHNpbmtzLmluZGV4T2Yoc2luayk7XG5cbiAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICAgIHNpbmtzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChlbmRWYWx1ZSAhPT0gVU5JUVVFKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgc291cmNlVGFsa2JhY2sodHlwZSwgZGF0YSk7XG4gICAgfTtcblxuICAgIGlmIChzaW5rcy5sZW5ndGggPT09IDEpIHtcbiAgICAgIHNvdXJjZSgwLCBmdW5jdGlvbiAodHlwZSwgZGF0YSkge1xuICAgICAgICBpZiAodHlwZSA9PT0gMCkge1xuICAgICAgICAgIHNvdXJjZVRhbGtiYWNrID0gZGF0YTtcbiAgICAgICAgICBzaW5rKDAsIHRhbGtiYWNrKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZSA9PT0gMSkge1xuICAgICAgICAgIGluaXRlZCA9IHRydWU7XG4gICAgICAgICAgdmFsdWUgPSBkYXRhO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHNpbmtzQ29weSA9IHNpbmtzLnNsaWNlKDApO1xuXG4gICAgICAgIGlmICh0eXBlID09PSAyKSB7XG4gICAgICAgICAgZW5kVmFsdWUgPSBkYXRhO1xuICAgICAgICAgIHNpbmtzID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHNpbmtzQ29weS5mb3JFYWNoKGZ1bmN0aW9uIChzaW5rKSB7XG4gICAgICAgICAgc2luayh0eXBlLCBkYXRhKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzaW5rKDAsIHRhbGtiYWNrKTtcblxuICAgIGlmIChpbml0ZWQgJiYgZW5kVmFsdWUgPT09IFVOSVFVRSkge1xuICAgICAgc2luaygxLCB2YWx1ZSk7XG4gICAgfVxuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCByZW1lbWJlcjtcbiIsImNvbnN0IHNoYXJlID0gc291cmNlID0+IHtcbiAgbGV0IHNpbmtzID0gW107XG4gIGxldCBzb3VyY2VUYWxrYmFjaztcblxuICByZXR1cm4gZnVuY3Rpb24gc2hhcmVkKHN0YXJ0LCBzaW5rKSB7XG4gICAgaWYgKHN0YXJ0ICE9PSAwKSByZXR1cm47XG4gICAgc2lua3MucHVzaChzaW5rKTtcblxuICAgIGNvbnN0IHRhbGtiYWNrID0gKHQsIGQpID0+IHtcbiAgICAgIGlmICh0ID09PSAyKSB7XG4gICAgICAgIGNvbnN0IGkgPSBzaW5rcy5pbmRleE9mKHNpbmspO1xuICAgICAgICBpZiAoaSA+IC0xKSBzaW5rcy5zcGxpY2UoaSwgMSk7XG4gICAgICAgIGlmICghc2lua3MubGVuZ3RoKSBzb3VyY2VUYWxrYmFjaygyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNvdXJjZVRhbGtiYWNrKHQsIGQpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAoc2lua3MubGVuZ3RoID09PSAxKSB7XG4gICAgICBzb3VyY2UoMCwgKHQsIGQpID0+IHtcbiAgICAgICAgaWYgKHQgPT09IDApIHtcbiAgICAgICAgICBzb3VyY2VUYWxrYmFjayA9IGQ7XG4gICAgICAgICAgc2luaygwLCB0YWxrYmFjayk7XG4gICAgICAgIH0gZWxzZSBmb3IgKGxldCBzIG9mIHNpbmtzLnNsaWNlKDApKSBzKHQsIGQpO1xuICAgICAgICBpZiAodCA9PT0gMikgc2lua3MgPSBbXTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgc2luaygwLCB0YWxrYmFjayk7XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IHNoYXJlO1xuIiwiXG5jb25zdCBzdGFydFdpdGggPSAoLi4ueHMpID0+IGlucHV0U291cmNlID0+IChzdGFydCwgb3V0cHV0U2luaykgPT4ge1xuICBpZiAoc3RhcnQgIT09IDApIHJldHVybjtcbiAgbGV0IGRpc3Bvc2VkID0gZmFsc2U7XG4gIGxldCBpbnB1dFRhbGtiYWNrO1xuICBsZXQgdHJhY2tQdWxsID0gZmFsc2U7XG4gIGxldCBsYXN0UHVsbDtcblxuICBvdXRwdXRTaW5rKDAsIChvdCwgb2QpID0+IHtcbiAgICBpZiAodHJhY2tQdWxsICYmIG90ID09PSAxKSB7XG4gICAgICBsYXN0UHVsbCA9IFsxLCBvZF07XG4gICAgfVxuXG4gICAgaWYgKG90ID09PSAyKSB7XG4gICAgICBkaXNwb3NlZCA9IHRydWU7XG4gICAgICB4cy5sZW5ndGggPSAwO1xuICAgIH1cblxuICAgIGlmICghaW5wdXRUYWxrYmFjaykgcmV0dXJuO1xuICAgIGlucHV0VGFsa2JhY2sob3QsIG9kKTtcbiAgfSk7XG5cbiAgd2hpbGUgKHhzLmxlbmd0aCAhPT0gMCkge1xuICAgIGlmICh4cy5sZW5ndGggPT09IDEpIHtcbiAgICAgIHRyYWNrUHVsbCA9IHRydWU7XG4gICAgfVxuICAgIG91dHB1dFNpbmsoMSwgeHMuc2hpZnQoKSk7XG4gIH1cblxuICBpZiAoZGlzcG9zZWQpIHJldHVybjtcblxuICBpbnB1dFNvdXJjZSgwLCAoaXQsIGlkKSA9PiB7XG4gICAgaWYgKGl0ID09PSAwKSB7XG4gICAgICBpbnB1dFRhbGtiYWNrID0gaWQ7XG4gICAgICB0cmFja1B1bGwgPSBmYWxzZTtcblxuICAgICAgaWYgKGxhc3RQdWxsKSB7XG4gICAgICAgIGlucHV0VGFsa2JhY2soLi4ubGFzdFB1bGwpO1xuICAgICAgICBsYXN0UHVsbCA9IG51bGw7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIG91dHB1dFNpbmsoaXQsIGlkKTtcbiAgfSk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBzdGFydFdpdGg7XG4iLCJjb25zdCBzdWJzY3JpYmUgPSAobGlzdGVuZXIgPSB7fSkgPT4gc291cmNlID0+IHtcbiAgaWYgKHR5cGVvZiBsaXN0ZW5lciA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgbGlzdGVuZXIgPSB7IG5leHQ6IGxpc3RlbmVyIH07XG4gIH1cblxuICBsZXQgeyBuZXh0LCBlcnJvciwgY29tcGxldGUgfSA9IGxpc3RlbmVyO1xuICBsZXQgdGFsa2JhY2s7XG5cbiAgc291cmNlKDAsICh0LCBkKSA9PiB7XG4gICAgaWYgKHQgPT09IDApIHtcbiAgICAgIHRhbGtiYWNrID0gZDtcbiAgICB9XG4gICAgaWYgKHQgPT09IDEgJiYgbmV4dCkgbmV4dChkKTtcbiAgICBpZiAodCA9PT0gMSB8fCB0ID09PSAwKSB0YWxrYmFjaygxKTsgIC8vIFB1bGxcbiAgICBpZiAodCA9PT0gMiAmJiAhZCAmJiBjb21wbGV0ZSkgY29tcGxldGUoKTtcbiAgICBpZiAodCA9PT0gMiAmJiAhIWQgJiYgZXJyb3IpIGVycm9yKCBkICk7XG4gIH0pO1xuXG4gIGNvbnN0IGRpc3Bvc2UgPSAoKSA9PiB7XG4gICAgaWYgKHRhbGtiYWNrKSB0YWxrYmFjaygyKTtcbiAgfVxuXG4gIHJldHVybiBkaXNwb3NlO1xufVxuXG5leHBvcnQgZGVmYXVsdCBzdWJzY3JpYmU7XG4iLCJjb25zdCBVTklRVUUgPSB7fTtcblxuY29uc3QgdGFrZVVudGlsID0gbm90aWZpZXIgPT4gc291cmNlID0+IChzdGFydCwgc2luaykgPT4ge1xuICBpZiAoc3RhcnQgIT09IDApIHJldHVybjtcbiAgbGV0IHNvdXJjZVRhbGtiYWNrO1xuICBsZXQgbm90aWZpZXJUYWxrYmFjaztcbiAgbGV0IGluaXRlZCA9IGZhbHNlO1xuICBsZXQgZG9uZSA9IFVOSVFVRTtcblxuICBzb3VyY2UoMCwgKHR5cGUsIGRhdGEpID0+IHtcbiAgICBpZiAodHlwZSA9PT0gMCkge1xuICAgICAgc291cmNlVGFsa2JhY2sgPSBkYXRhO1xuXG4gICAgICBub3RpZmllcigwLCAodCwgZCkgPT4ge1xuICAgICAgICBpZiAodCA9PT0gMCkge1xuICAgICAgICAgIG5vdGlmaWVyVGFsa2JhY2sgPSBkO1xuICAgICAgICAgIG5vdGlmaWVyVGFsa2JhY2soMSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0ID09PSAxKSB7XG4gICAgICAgICAgZG9uZSA9IHZvaWQgMDtcbiAgICAgICAgICBub3RpZmllclRhbGtiYWNrKDIpO1xuICAgICAgICAgIHNvdXJjZVRhbGtiYWNrKDIpO1xuICAgICAgICAgIGlmIChpbml0ZWQpIHNpbmsoMik7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0ID09PSAyKSB7XG4gICAgICAgICAgbm90aWZpZXJUYWxrYmFjayA9IG51bGw7XG4gICAgICAgICAgaWYgKGQgIT0gbnVsbCkge1xuICAgICAgICAgICAgZG9uZSA9IGQ7XG4gICAgICAgICAgICBzb3VyY2VUYWxrYmFjaygyKTtcbiAgICAgICAgICAgIGlmIChpbml0ZWQpIHNpbmsodCwgZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgaW5pdGVkID0gdHJ1ZTtcblxuICAgICAgc2luaygwLCAodCwgZCkgPT4ge1xuICAgICAgICBpZiAoZG9uZSAhPT0gVU5JUVVFKSByZXR1cm47XG4gICAgICAgIGlmICh0ID09PSAyICYmIG5vdGlmaWVyVGFsa2JhY2spIG5vdGlmaWVyVGFsa2JhY2soMik7XG4gICAgICAgIHNvdXJjZVRhbGtiYWNrKHQsIGQpO1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChkb25lICE9PSBVTklRVUUpIHNpbmsoMiwgZG9uZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHR5cGUgPT09IDIgJiYgbm90aWZpZXJUYWxrYmFjaykgbm90aWZpZXJUYWxrYmFjaygyKTtcbiAgICBzaW5rKHR5cGUsIGRhdGEpO1xuICB9KTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHRha2VVbnRpbDtcbiIsIi8qKlxuICogRGVib3VuY2VzIHRoZSBnaXZlbiBsaXN0ZW5hYmxlIHNvdXJjZVxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSB3YWl0IC0gVGhlIG51bWJlciBvZiBtcyB0byB3YWl0IGJlZm9yZSBsZXR0aW5nIGEgdmFsdWUgcGFzc1xuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVib3VuY2Uod2FpdCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAoc291cmNlKSB7IHJldHVybiBmdW5jdGlvbiAoc3RhcnQsIHNpbmspIHtcbiAgICAgICAgaWYgKHN0YXJ0ICE9PSAwKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB2YXIgdGltZW91dDtcbiAgICAgICAgdmFyIHNob3VsZFRlcm1pbmF0ZSA9IGZhbHNlO1xuICAgICAgICBzb3VyY2UoMCwgZnVuY3Rpb24gKHQsIGQpIHtcbiAgICAgICAgICAgIGlmICh0ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgLy8gaGFuZGxlIHRhbGtiYWNrIGZyb20gc2lua1xuICAgICAgICAgICAgICAgIHNpbmsodCwgZnVuY3Rpb24gKHQyLCB2YWwpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gY2xlYW51cCB3aGVuIHRlcm1pbmF0ZWQgYnkgc2lua1xuICAgICAgICAgICAgICAgICAgICBpZiAodDIgPT09IDIgJiYgdGltZW91dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIHBhc3MgYWxsIHRhbGtiYWNrIHRvIHNvdXJjZVxuICAgICAgICAgICAgICAgICAgICBkKHQyLCB2YWwpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodCA9PT0gMSB8fCAodCA9PT0gMiAmJiBkID09PSB1bmRlZmluZWQpKSB7XG4gICAgICAgICAgICAgICAgLy8gdCA9PT0gMSBtZWFucyB0aGUgc291cmNlIGlzIGVtaXR0aW5nIGEgdmFsdWVcbiAgICAgICAgICAgICAgICAvLyB0ID09PSAyIGFuZCBkID09PSB1bmRlZmluZWQgbWVhbnMgdGhlIHNvdXJjZSBlbWl0cyBhIGNvbXBsZXRpb25cbiAgICAgICAgICAgICAgICBpZiAodCA9PT0gMikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXRpbWVvdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZXJlIGlzIG5vdCBwZW5kaW5nIHZhbHVlLCB3ZSBjYW4gdGVybWluYXRlIHRoZSBzdHJlYW1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzaW5rKHQsIGQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2Uga2VlcCB0cmFjayB0aGF0IHRoZSBzdHJlYW0gc2hvdWxkIHRlcm1pbmF0ZSBhZnRlciB0aGUgbmV4dCB2YWx1ZSBpcyBlbWl0dGVkXG4gICAgICAgICAgICAgICAgICAgICAgICBzaG91bGRUZXJtaW5hdGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBzaW5rKHQsIGQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2hvdWxkVGVybWluYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaW5rKDIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRpbWVvdXQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgfSwgd2FpdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvKlxuICAgICAgICAgICAgICAgICAqIG5vdGhpbmcgc3BlY2lmaWMgdG8gZG8gd2hlbiB0aGUgc291cmNlXG4gICAgICAgICAgICAgICAgICogc2VuZHMgYSB0ID09PSAyIGQgIT09IHVuZGVmaW5lZCBzaWduYWxcbiAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICBzaW5rKHQsIGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9OyB9O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGVib3VuY2UuanMubWFwIiwiZXhwb3J0IGNvbnN0IFNUQVJUID0gMDtcbmV4cG9ydCBjb25zdCBEQVRBID0gMTtcbmV4cG9ydCBjb25zdCBFTkQgPSAyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dHlwZXMuanMubWFwIiwiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVzZS1iZWZvcmUtZGVmaW5lLEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtZXhwcmVzc2lvbnMsbm8tcmV0dXJuLWFzc2lnbiAqL1xuaW1wb3J0IHsgREFUQSwgRU5ELCBTVEFSVCB9IGZyb20gJy4vdHlwZXMnO1xuZXhwb3J0IGNvbnN0IGNyZWF0ZUNvbnN1bWVyID0gKHsgbmV4dCwgY29tcGxldGUsIGVycm9yLCBzdGFydCwgZW5kIH0pID0+ICguLi5hcmdzKSA9PiB7XG4gICAgaWYgKHN0YXJ0ICYmIGFyZ3NbMF0gPT09IFNUQVJUKSB7XG4gICAgICAgIC8qKiB0YWxrYmFjayAqL1xuICAgICAgICBjb25zdCB1cHN0cmVhbSA9IGFyZ3NbMV07XG4gICAgICAgIHN0YXJ0KHtcbiAgICAgICAgICAgIHN0b3A6ICgpID0+IHZvaWQgdXBzdHJlYW0oRU5EKSxcbiAgICAgICAgICAgIHB1bGw6ICgpID0+IHZvaWQgdXBzdHJlYW0oREFUQSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBlbHNlIGlmIChuZXh0ICYmIGFyZ3NbMF0gPT09IERBVEEgJiYgYXJncy5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IGFyZ3NbMV07XG4gICAgICAgIG5leHQoZGF0YSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKChlcnJvciB8fCBjb21wbGV0ZSB8fCBlbmQpICYmIGFyZ3NbMF0gPT09IEVORCkge1xuICAgICAgICBjb25zdCBlcnJvclZhbHVlID0gYXJnc1sxXTtcbiAgICAgICAgaWYgKGVycm9yICYmIGVycm9yVmFsdWUgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIGVycm9yKGVycm9yVmFsdWUpO1xuICAgICAgICBlbHNlIGlmIChjb21wbGV0ZSlcbiAgICAgICAgICAgIGNvbXBsZXRlKCk7XG4gICAgICAgIC8vIGNvbnN1bWVyIGRpc3Bvc2UgbG9naWNcbiAgICAgICAgaWYgKGVuZClcbiAgICAgICAgICAgIGVuZCgpO1xuICAgIH1cbn07XG5jb25zdCBhc3NlcnRBY3RpdmUgPSAoc3RhdGUsIG1ldGhvZCkgPT4ge1xuICAgIGlmIChzdGF0ZSA9PT0gJ2FjdGl2ZScpXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgY29uc29sZS5lcnJvcihgVGhpcyBjYWxsYmFnIHNvdXJjZSAke3N0YXRlID09PSAnZGlzcG9zZWQnXG4gICAgICAgID8gJ3dhcyBwcmV2aW91c2x5IGRpc3Bvc2VkJ1xuICAgICAgICA6IHN0YXRlID09PSAnZW5kZWQnXG4gICAgICAgICAgICA/ICdoYXMgcHJldmlvdXNseSBlbmRlZCdcbiAgICAgICAgICAgIDogJ2hhcyBub3QgYmVlbiBzdGFydGVkJ30sIGJ1dCAnJHttZXRob2R9JyB3YXMgaW52b2tlZC5gKTtcbiAgICByZXR1cm4gZmFsc2U7XG59O1xuY29uc3QgYXNzZXJ0SW5hY3RpdmUgPSAoc3RhdGUsIG1ldGhvZCkgPT4ge1xuICAgIGlmIChzdGF0ZSAhPT0gJ2FjdGl2ZScpXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgY29uc29sZS5lcnJvcihgVGhpcyBjYWxsYmFnIHNvdXJjZSBpcyBhbHJlYWR5IGFjdGl2ZSwgYnV0ICcke21ldGhvZH0nIHdhcyBpbnZva2VkLmApO1xuICAgIHJldHVybiBmYWxzZTtcbn07XG5leHBvcnQgY29uc3QgY3JlYXRlU291cmNlID0gKG9uQ29uc3VtZSkgPT4gKC4uLmFyZ3MpID0+IHtcbiAgICBpZiAoYXJnc1swXSAhPT0gU1RBUlQpXG4gICAgICAgIHJldHVybjtcbiAgICBsZXQgc3RhdGUgPSAnaW5hY3RpdmUnO1xuICAgIGNvbnN0IG1hcmtEaXNwb3NlZCA9ICgpID0+IHN0YXRlICE9PSAnZGlzcG9zZWQnICYmIChzdGF0ZSA9ICdkaXNwb3NlZCcpO1xuICAgIGxldCBpbml0ID0gZmFsc2U7XG4gICAgLyoqIHRhbGtiYWNrOiBoYW5kbGUgbWVzc2FnZXMgZnJvbSB0aGUgc2luayBiYWNrIHRvIHRoaXMgc291cmNlICovXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1zaGFkb3dcbiAgICBjb25zdCB1cHN0cmVhbSA9ICguLi5hcmdzKSA9PiB7XG4gICAgICAgIGlmIChzdGF0ZSA9PT0gJ2Rpc3Bvc2VkJylcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKGluaXQpIHtcbiAgICAgICAgICAgIC8vIGdvdCBhIHJlcXVlc3QgZnJvbSB0aGUgc2luayBmb3IgdGhlIG5leHQgdmFsdWUsIGxldCdzIHByb2Nlc3MgaXRcbiAgICAgICAgICAgIGlmIChhc2tUb1B1bGwgJiYgYXJnc1swXSA9PT0gREFUQSlcbiAgICAgICAgICAgICAgICBhc2tUb1B1bGwoKTtcbiAgICAgICAgICAgIGVsc2UgaWYgKGFyZ3NbMF0gPT09IEVORClcbiAgICAgICAgICAgICAgICBtYXJrRGlzcG9zZWQoKSAmJiAoZGlzcG9zZSA9PT0gbnVsbCB8fCBkaXNwb3NlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBkaXNwb3NlKCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaW5pdCA9IGFyZ3M7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIC8qKiBzaW5rICovXG4gICAgY29uc3QgZG93bnN0cmVhbSA9IGFyZ3NbMV07XG4gICAgY29uc3QgY29uc3VtZXIgPSBvbkNvbnN1bWUoe1xuICAgICAgICBzdGFydDogKCkgPT4ge1xuICAgICAgICAgICAgaWYgKCFhc3NlcnRJbmFjdGl2ZShzdGF0ZSwgJ3N0YXJ0JykpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgZG93bnN0cmVhbShTVEFSVCwgdXBzdHJlYW0pO1xuICAgICAgICAgICAgc3RhdGUgPSAnYWN0aXZlJztcbiAgICAgICAgfSxcbiAgICAgICAgbmV4dDogKGRhdGEpID0+IHtcbiAgICAgICAgICAgIGlmICghYXNzZXJ0QWN0aXZlKHN0YXRlLCAnbmV4dCcpKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGRvd25zdHJlYW0oREFUQSwgZGF0YSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgIC8vIGFzc2VydCwgYnV0IHBhc3N0aHJvdWdoIGVycm9ycyBzbyB0aGF0IGNsZWFuLXVwIG1heSB0YWtlIHBsYWNlXG4gICAgICAgICAgICBhc3NlcnRBY3RpdmUoc3RhdGUsICdlcnJvcicpO1xuICAgICAgICAgICAgZG93bnN0cmVhbShFTkQsIGVycm9yKTtcbiAgICAgICAgICAgIHN0YXRlID0gJ2VuZGVkJztcbiAgICAgICAgfSxcbiAgICAgICAgY29tcGxldGU6ICgpID0+IHtcbiAgICAgICAgICAgIC8vIGFzc2VydCwgYnV0IHBhc3N0aHJvdWdoIGVycm9ycyBzbyB0aGF0IGNsZWFuLXVwIG1heSB0YWtlIHBsYWNlXG4gICAgICAgICAgICBhc3NlcnRBY3RpdmUoc3RhdGUsICdjb21wbGV0ZScpO1xuICAgICAgICAgICAgZG93bnN0cmVhbShFTkQpO1xuICAgICAgICAgICAgc3RhdGUgPSAnZW5kZWQnO1xuICAgICAgICB9LFxuICAgIH0pO1xuICAgIGNvbnN0IGRpc3Bvc2UgPSB0eXBlb2YgY29uc3VtZXIgPT09ICdmdW5jdGlvbicgPyBjb25zdW1lciA6IGNvbnN1bWVyID09PSBudWxsIHx8IGNvbnN1bWVyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjb25zdW1lci5zdG9wO1xuICAgIGNvbnN0IGFza1RvUHVsbCA9IHR5cGVvZiBjb25zdW1lciA9PT0gJ29iamVjdCcgPyBjb25zdW1lciA9PT0gbnVsbCB8fCBjb25zdW1lciA9PT0gdm9pZCAwID8gdm9pZCAwIDogY29uc3VtZXIucHVsbCA6IHVuZGVmaW5lZDtcbiAgICBpZiAoaW5pdClcbiAgICAgICAgdXBzdHJlYW0oLi4uaW5pdCk7XG4gICAgaW5pdCA9IHRydWU7XG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y3JlYXRlLmpzLm1hcCIsImltcG9ydCB7IGNyZWF0ZUNvbnN1bWVyIH0gZnJvbSAnLi9jcmVhdGUnO1xuaW1wb3J0IHsgU1RBUlQgfSBmcm9tICcuL3R5cGVzJztcbmV4cG9ydCBjb25zdCBjb25zdW1lU291cmNlV2l0aENvbnN1bWVyID0gKHNvdXJjZSwgY29uc3VtZXIpID0+IHZvaWQgc291cmNlKFNUQVJULCBjb25zdW1lcik7XG5jb25zdCBkZWZhdWx0Q29uc3VtcHRpb25NYW5hZ2VtZW50ID0ge1xuICAgIHB1bGw6ICgpID0+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgcHVsbCBmcm9tIHNvdXJjZSB0aGF0IGlzIG5vdCBzdGFydGVkLmApO1xuICAgIH0sXG4gICAgc3RvcDogKCkgPT4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBzdG9wIGEgc291cmNlIHRoYXQgaXMgbm90IHN0YXJ0ZWQuYCk7XG4gICAgfSxcbn07XG5leHBvcnQgY29uc3QgY29uc3VtZVNvdXJjZSA9IChzb3VyY2UsIGNvbnN1bWVySGFuZGxlcnMsIGxhenlTdGFydCA9IGZhbHNlKSA9PiB7XG4gICAgbGV0IGNvbnN1bXB0aW9uTWFuYWdlbWVudCA9IGRlZmF1bHRDb25zdW1wdGlvbk1hbmFnZW1lbnQ7XG4gICAgY29uc3QgY29uc3VtZXIgPSBjcmVhdGVDb25zdW1lcihPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGNvbnN1bWVySGFuZGxlcnMpLCB7IHN0YXJ0OiAobWFuYWdlbWVudCkgPT4ge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgY29uc3VtcHRpb25NYW5hZ2VtZW50ID0gbWFuYWdlbWVudDtcbiAgICAgICAgICAgIChfYSA9IGNvbnN1bWVySGFuZGxlcnMgPT09IG51bGwgfHwgY29uc3VtZXJIYW5kbGVycyA9PT0gdm9pZCAwID8gdm9pZCAwIDogY29uc3VtZXJIYW5kbGVycy5zdGFydCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNhbGwoY29uc3VtZXJIYW5kbGVycywgbWFuYWdlbWVudCk7XG4gICAgICAgIH0sIGVuZDogKCkgPT4ge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgY29uc3VtcHRpb25NYW5hZ2VtZW50ID0gZGVmYXVsdENvbnN1bXB0aW9uTWFuYWdlbWVudDtcbiAgICAgICAgICAgIChfYSA9IGNvbnN1bWVySGFuZGxlcnMgPT09IG51bGwgfHwgY29uc3VtZXJIYW5kbGVycyA9PT0gdm9pZCAwID8gdm9pZCAwIDogY29uc3VtZXJIYW5kbGVycy5lbmQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jYWxsKGNvbnN1bWVySGFuZGxlcnMpO1xuICAgICAgICB9IH0pKTtcbiAgICBjb25zdCBpc1N0YXJ0ZWQgPSAoKSA9PiBjb25zdW1wdGlvbk1hbmFnZW1lbnQgIT09IGRlZmF1bHRDb25zdW1wdGlvbk1hbmFnZW1lbnQ7XG4gICAgY29uc3Qgc3RhcnQgPSAoKSA9PiAhKGlzU3RhcnRlZCgpIHx8IHZvaWQgY29uc3VtZVNvdXJjZVdpdGhDb25zdW1lcihzb3VyY2UsIGNvbnN1bWVyKSk7XG4gICAgaWYgKCFsYXp5U3RhcnQpXG4gICAgICAgIHN0YXJ0KCk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgcHVsbDogKCkgPT4gdm9pZCBjb25zdW1wdGlvbk1hbmFnZW1lbnQucHVsbCgpLFxuICAgICAgICBzdG9wOiAoKSA9PiB2b2lkIGNvbnN1bXB0aW9uTWFuYWdlbWVudC5zdG9wKCksXG4gICAgICAgIHN0YXJ0LFxuICAgICAgICBnZXQgc3RhcnRlZCgpIHtcbiAgICAgICAgICAgIHJldHVybiBpc1N0YXJ0ZWQoKTtcbiAgICAgICAgfSxcbiAgICB9O1xufTtcbmV4cG9ydCBjb25zdCBjb25zdW1lU3luY2hyb25vdXNseSA9IChzb3VyY2UpID0+IHtcbiAgICBjb25zdCBlbWl0dGVkVmFsdWVzID0gW107XG4gICAgbGV0IGVycm9yO1xuICAgIGxldCBjb25zdW1wdGlvbk1hbmFnZW1lbnQgPSBkZWZhdWx0Q29uc3VtcHRpb25NYW5hZ2VtZW50O1xuICAgIGxldCBkaWRDb21wbGV0ZSA9IGZhbHNlO1xuICAgIGNvbnN0IGNvbnN1bWVyID0gY3JlYXRlQ29uc3VtZXIoe1xuICAgICAgICBuZXh0OiAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgZW1pdHRlZFZhbHVlcy5wdXNoKGRhdGEpO1xuICAgICAgICB9LFxuICAgICAgICBjb21wbGV0ZTogKCkgPT4ge1xuICAgICAgICAgICAgZGlkQ29tcGxldGUgPSB0cnVlO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKGUpID0+IHtcbiAgICAgICAgICAgIGVycm9yID0gZTtcbiAgICAgICAgfSxcbiAgICAgICAgc3RhcnQ6IChtYW5hZ2VtZW50KSA9PiB7XG4gICAgICAgICAgICBjb25zdW1wdGlvbk1hbmFnZW1lbnQgPSBtYW5hZ2VtZW50O1xuICAgICAgICB9LFxuICAgIH0pO1xuICAgIGNvbnN1bWVTb3VyY2VXaXRoQ29uc3VtZXIoc291cmNlLCBjb25zdW1lcik7XG4gICAgaWYgKGNvbnN1bXB0aW9uTWFuYWdlbWVudCA9PT0gZGVmYXVsdENvbnN1bXB0aW9uTWFuYWdlbWVudCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBjb25zdW1lIHN5bmNocm9ub3VzbHksIGJlY2F1c2UgdGhlIHNvdXJjZSBuZXZlciBzdGFydGVkLmApO1xuICAgIH1cbiAgICBpZiAoIWRpZENvbXBsZXRlKSB7XG4gICAgICAgIGNvbnN1bXB0aW9uTWFuYWdlbWVudC5zdG9wKCk7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGNvbnN1bWUsIGJlY2F1c2UgdGhlIHNvdXJjZSBuZXZlciBjb21wbGV0ZWQgc3luY2hyb25vdXNseS5gKTtcbiAgICB9XG4gICAgaWYgKGVycm9yKVxuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICByZXR1cm4gZW1pdHRlZFZhbHVlcztcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb25zdW1lLmpzLm1hcCIsImltcG9ydCBjcmVhdGUgZnJvbSAnY2FsbGJhZy1jcmVhdGUnXG5pbXBvcnQgZGlzdGluY3QgZnJvbSAnY2FsbGJhZy1kcm9wLXJlcGVhdHMnXG5pbXBvcnQgZmlsdGVyIGZyb20gJ2NhbGxiYWctZmlsdGVyJ1xuaW1wb3J0IGZsYXRNYXAgZnJvbSAnY2FsbGJhZy1mbGF0LW1hcCdcbmltcG9ydCBmcm9tRXZlbnQgZnJvbSAnY2FsbGJhZy1mcm9tLWV2ZW50J1xuaW1wb3J0IGZyb21Qcm9taXNlIGZyb20gJ2NhbGxiYWctZnJvbS1wcm9taXNlJ1xuaW1wb3J0IG1hcCBmcm9tICdjYWxsYmFnLW1hcCdcbmltcG9ydCBtZXJnZSBmcm9tICdjYWxsYmFnLW1lcmdlJ1xuaW1wb3J0IG9mIGZyb20gJ2NhbGxiYWctb2YnXG5pbXBvcnQgcGFpcndpc2UgZnJvbSAnY2FsbGJhZy1wYWlyd2lzZSdcbmltcG9ydCBwYXJ0aXRpb24gZnJvbSAnY2FsbGJhZy1wYXJ0aXRpb24nXG5pbXBvcnQgcGlwZSBmcm9tICdjYWxsYmFnLXBpcGUnXG5pbXBvcnQgcmVqZWN0IGZyb20gJ2NhbGxiYWctcmVqZWN0J1xuaW1wb3J0IHJlbWVtYmVyIGZyb20gJ2NhbGxiYWctcmVtZW1iZXInXG5pbXBvcnQgc2hhcmUgZnJvbSAnY2FsbGJhZy1zaGFyZSdcbmltcG9ydCBzdGFydFdpdGggZnJvbSAnY2FsbGJhZy1zdGFydC13aXRoJ1xuaW1wb3J0IHN1YnNjcmliZSBmcm9tICdjYWxsYmFnLXN1YnNjcmliZSdcbmltcG9ydCB0YWtlIGZyb20gJ2NhbGxiYWctdGFrZSdcbmltcG9ydCB0YWtlVW50aWwgZnJvbSAnY2FsbGJhZy10YWtlLXVudGlsJ1xuaW1wb3J0IHsgZGVib3VuY2UgfSBmcm9tICdjYWxsYmFnLWRlYm91bmNlJ1xuXG5pbXBvcnQgeyBTb3VyY2UsIFVud3JhcFNvdXJjZSB9IGZyb20gJ2NhbGxiYWcnXG5pbXBvcnQgeyBjb25zdW1lU291cmNlLCBjcmVhdGVTb3VyY2UgfSBmcm9tICdjYWxsYmFnLXRvb2xraXQnXG5cblxuY29uc3Qgc3ViamVjdCA9IDxUPigpOiB7IHNvdXJjZTogU291cmNlPFQ+LCBwdXNoOiAodjogVCkgPT4gdm9pZCB9ID0+IHtcbiAgbGV0IG5leHQ6ICgodjogVCkgPT4gdm9pZCkgfCB1bmRlZmluZWRcbiAgcmV0dXJuIHtcbiAgICBzb3VyY2U6IHNoYXJlKGNyZWF0ZTxUPihuZXh0XyA9PiB7bmV4dCA9IG5leHRffSkpLFxuICAgIHB1c2g6ICh2OiBUKSA9PiBuZXh0ICYmIG5leHQodilcbiAgfVxufVxuXG5jb25zdCBjb21wbGV0ZVdoZW4gPSAodHJpZ2dlcjogU291cmNlPHVua25vd24+KSA9PiA8VD4oc3ViamVjdDogU291cmNlPFQ+KTogU291cmNlPFQ+ID0+XG4gIGNyZWF0ZVNvdXJjZSgoeyBjb21wbGV0ZSwgLi4ucmVzdCB9KSA9PiB7XG4gICAgY29uc3Qgc3ViamVjdENvbnN1bXB0aW9uID0gY29uc3VtZVNvdXJjZShzdWJqZWN0LCB7XG4gICAgICBjb21wbGV0ZSgpIHtcbiAgICAgICAgdHJpZ2dlckNvbnN1bXB0aW9uLnN0b3AoKVxuICAgICAgICBzdWJqZWN0Q29uc3VtcHRpb24uc3RvcCgpXG4gICAgICB9LFxuICAgICAgLi4ucmVzdFxuICAgIH0pXG4gICAgY29uc3QgdHJpZ2dlckNvbnN1bXB0aW9uID0gY29uc3VtZVNvdXJjZSh0cmlnZ2VyLCB7XG4gICAgICBuZXh0KCkge1xuICAgICAgICB0cmlnZ2VyQ29uc3VtcHRpb24uc3RvcCgpXG4gICAgICAgIHN1YmplY3RDb25zdW1wdGlvbi5zdG9wKClcbiAgICAgICAgY29tcGxldGUoKVxuICAgICAgfSxcbiAgICAgIGNvbXBsZXRlKCkge1xuICAgICAgICB0cmlnZ2VyQ29uc3VtcHRpb24uc3RvcCgpXG4gICAgICB9XG4gICAgfSlcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgdHJpZ2dlckNvbnN1bXB0aW9uLnN0b3AoKVxuICAgICAgc3ViamVjdENvbnN1bXB0aW9uLnN0b3AoKVxuICAgIH1cbiAgfSlcblxudHlwZSBMaXN0ZW5lcjxUPiA9IChkYXRhOiBUKSA9PiBhbnlcbnR5cGUgU3Vic2NyaWJlcjxUPiA9IHtcbiAgbmV4dD86IExpc3RlbmVyPFQ+LFxuICBlcnJvcj86IChlcnI6IGFueSkgPT4gYW55LFxuICBjb21wbGV0ZT86ICgpID0+IGFueSxcbn1cbmNvbnN0IHN1YnNjcmliZTIgPSA8VD4oc291cmNlOiBTb3VyY2U8VD4sIGxpc3RlbmVyOiBMaXN0ZW5lcjxUPiB8IFN1YnNjcmliZXI8VD4pID0+IHBpcGUoc291cmNlLCBzdWJzY3JpYmUobGlzdGVuZXIpKVxuXG5cblxuY29uc3QgQ2FsbGJhZyA9IHtcbiAgY3JlYXRlLFxuICBjb21wbGV0ZVdoZW4sXG4gIGRlYm91bmNlLFxuICBkaXN0aW5jdCxcbiAgZmlsdGVyLFxuICBmbGF0TWFwLFxuICBmcm9tRXZlbnQsXG4gIGZyb21Qcm9taXNlLFxuICBtYXAsXG4gIG1lcmdlLFxuICBvZixcbiAgcGFpcndpc2UsXG4gIHBhcnRpdGlvbixcbiAgcGlwZSxcbiAgcmVqZWN0LFxuICByZW1lbWJlcixcbiAgc2hhcmUsXG4gIHN0YXJ0V2l0aCxcbiAgc3ViamVjdCxcbiAgc3Vic2NyaWJlOiBzdWJzY3JpYmUyLFxuICB0YWtlLFxuICB0YWtlVW50aWxcbn1cblxuZXhwb3J0IHtcbiAgY3JlYXRlLFxuICBjb21wbGV0ZVdoZW4sXG4gIGRlYm91bmNlLFxuICBkaXN0aW5jdCxcbiAgZmlsdGVyLFxuICBmbGF0TWFwLFxuICBmcm9tRXZlbnQsXG4gIGZyb21Qcm9taXNlLFxuICBtYXAsXG4gIG1lcmdlLFxuICBvZixcbiAgcGFpcndpc2UsXG4gIHBhcnRpdGlvbixcbiAgcGlwZSxcbiAgcmVqZWN0LFxuICByZW1lbWJlcixcbiAgc2hhcmUsXG4gIHN0YXJ0V2l0aCxcbiAgc3ViamVjdCxcbiAgc3Vic2NyaWJlLFxuICB0YWtlLFxuICB0YWtlVW50aWxcbn1cblxuZXhwb3J0IGRlZmF1bHQgQ2FsbGJhZ1xuZXhwb3J0IHR5cGUgeyBTb3VyY2UsIFVud3JhcFNvdXJjZSB9XG4iXSwibmFtZXMiOlsic3ViamVjdCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///200\n")},201:module=>{eval('const SYSTEM_SYMBOLS = [\n "AASTriangle",\n "AbelianGroup",\n "Abort",\n "AbortKernels",\n "AbortProtect",\n "AbortScheduledTask",\n "Above",\n "Abs",\n "AbsArg",\n "AbsArgPlot",\n "Absolute",\n "AbsoluteCorrelation",\n "AbsoluteCorrelationFunction",\n "AbsoluteCurrentValue",\n "AbsoluteDashing",\n "AbsoluteFileName",\n "AbsoluteOptions",\n "AbsolutePointSize",\n "AbsoluteThickness",\n "AbsoluteTime",\n "AbsoluteTiming",\n "AcceptanceThreshold",\n "AccountingForm",\n "Accumulate",\n "Accuracy",\n "AccuracyGoal",\n "AcousticAbsorbingValue",\n "AcousticImpedanceValue",\n "AcousticNormalVelocityValue",\n "AcousticPDEComponent",\n "AcousticPressureCondition",\n "AcousticRadiationValue",\n "AcousticSoundHardValue",\n "AcousticSoundSoftCondition",\n "ActionDelay",\n "ActionMenu",\n "ActionMenuBox",\n "ActionMenuBoxOptions",\n "Activate",\n "Active",\n "ActiveClassification",\n "ActiveClassificationObject",\n "ActiveItem",\n "ActivePrediction",\n "ActivePredictionObject",\n "ActiveStyle",\n "AcyclicGraphQ",\n "AddOnHelpPath",\n "AddSides",\n "AddTo",\n "AddToSearchIndex",\n "AddUsers",\n "AdjacencyGraph",\n "AdjacencyList",\n "AdjacencyMatrix",\n "AdjacentMeshCells",\n "Adjugate",\n "AdjustmentBox",\n "AdjustmentBoxOptions",\n "AdjustTimeSeriesForecast",\n "AdministrativeDivisionData",\n "AffineHalfSpace",\n "AffineSpace",\n "AffineStateSpaceModel",\n "AffineTransform",\n "After",\n "AggregatedEntityClass",\n "AggregationLayer",\n "AircraftData",\n "AirportData",\n "AirPressureData",\n "AirSoundAttenuation",\n "AirTemperatureData",\n "AiryAi",\n "AiryAiPrime",\n "AiryAiZero",\n "AiryBi",\n "AiryBiPrime",\n "AiryBiZero",\n "AlgebraicIntegerQ",\n "AlgebraicNumber",\n "AlgebraicNumberDenominator",\n "AlgebraicNumberNorm",\n "AlgebraicNumberPolynomial",\n "AlgebraicNumberTrace",\n "AlgebraicRules",\n "AlgebraicRulesData",\n "Algebraics",\n "AlgebraicUnitQ",\n "Alignment",\n "AlignmentMarker",\n "AlignmentPoint",\n "All",\n "AllowAdultContent",\n "AllowChatServices",\n "AllowedCloudExtraParameters",\n "AllowedCloudParameterExtensions",\n "AllowedDimensions",\n "AllowedFrequencyRange",\n "AllowedHeads",\n "AllowGroupClose",\n "AllowIncomplete",\n "AllowInlineCells",\n "AllowKernelInitialization",\n "AllowLooseGrammar",\n "AllowReverseGroupClose",\n "AllowScriptLevelChange",\n "AllowVersionUpdate",\n "AllTrue",\n "Alphabet",\n "AlphabeticOrder",\n "AlphabeticSort",\n "AlphaChannel",\n "AlternateImage",\n "AlternatingFactorial",\n "AlternatingGroup",\n "AlternativeHypothesis",\n "Alternatives",\n "AltitudeMethod",\n "AmbientLight",\n "AmbiguityFunction",\n "AmbiguityList",\n "Analytic",\n "AnatomyData",\n "AnatomyForm",\n "AnatomyPlot3D",\n "AnatomySkinStyle",\n "AnatomyStyling",\n "AnchoredSearch",\n "And",\n "AndersonDarlingTest",\n "AngerJ",\n "AngleBisector",\n "AngleBracket",\n "AnglePath",\n "AnglePath3D",\n "AngleVector",\n "AngularGauge",\n "Animate",\n "AnimatedImage",\n "AnimationCycleOffset",\n "AnimationCycleRepetitions",\n "AnimationDirection",\n "AnimationDisplayTime",\n "AnimationRate",\n "AnimationRepetitions",\n "AnimationRunning",\n "AnimationRunTime",\n "AnimationTimeIndex",\n "AnimationVideo",\n "Animator",\n "AnimatorBox",\n "AnimatorBoxOptions",\n "AnimatorElements",\n "Annotate",\n "Annotation",\n "AnnotationDelete",\n "AnnotationKeys",\n "AnnotationRules",\n "AnnotationValue",\n "Annuity",\n "AnnuityDue",\n "Annulus",\n "AnomalyDetection",\n "AnomalyDetector",\n "AnomalyDetectorFunction",\n "Anonymous",\n "Antialiasing",\n "Antihermitian",\n "AntihermitianMatrixQ",\n "Antisymmetric",\n "AntisymmetricMatrixQ",\n "Antonyms",\n "AnyOrder",\n "AnySubset",\n "AnyTrue",\n "Apart",\n "ApartSquareFree",\n "APIFunction",\n "Appearance",\n "AppearanceElements",\n "AppearanceRules",\n "AppellF1",\n "Append",\n "AppendCheck",\n "AppendLayer",\n "AppendTo",\n "Application",\n "Apply",\n "ApplyReaction",\n "ApplySides",\n "ApplyTo",\n "ArcCos",\n "ArcCosh",\n "ArcCot",\n "ArcCoth",\n "ArcCsc",\n "ArcCsch",\n "ArcCurvature",\n "ARCHProcess",\n "ArcLength",\n "ArcSec",\n "ArcSech",\n "ArcSin",\n "ArcSinDistribution",\n "ArcSinh",\n "ArcTan",\n "ArcTanh",\n "Area",\n "Arg",\n "ArgMax",\n "ArgMin",\n "ArgumentCountQ",\n "ArgumentsOptions",\n "ARIMAProcess",\n "ArithmeticGeometricMean",\n "ARMAProcess",\n "Around",\n "AroundReplace",\n "ARProcess",\n "Array",\n "ArrayComponents",\n "ArrayDepth",\n "ArrayFilter",\n "ArrayFlatten",\n "ArrayMesh",\n "ArrayPad",\n "ArrayPlot",\n "ArrayPlot3D",\n "ArrayQ",\n "ArrayReduce",\n "ArrayResample",\n "ArrayReshape",\n "ArrayRules",\n "Arrays",\n "Arrow",\n "Arrow3DBox",\n "ArrowBox",\n "Arrowheads",\n "ASATriangle",\n "Ask",\n "AskAppend",\n "AskConfirm",\n "AskDisplay",\n "AskedQ",\n "AskedValue",\n "AskFunction",\n "AskState",\n "AskTemplateDisplay",\n "AspectRatio",\n "AspectRatioFixed",\n "Assert",\n "AssessmentFunction",\n "AssessmentResultObject",\n "AssociateTo",\n "Association",\n "AssociationFormat",\n "AssociationMap",\n "AssociationQ",\n "AssociationThread",\n "AssumeDeterministic",\n "Assuming",\n "Assumptions",\n "AstroAngularSeparation",\n "AstroBackground",\n "AstroCenter",\n "AstroDistance",\n "AstroGraphics",\n "AstroGridLines",\n "AstroGridLinesStyle",\n "AstronomicalData",\n "AstroPosition",\n "AstroProjection",\n "AstroRange",\n "AstroRangePadding",\n "AstroReferenceFrame",\n "AstroStyling",\n "AstroZoomLevel",\n "Asymptotic",\n "AsymptoticDSolveValue",\n "AsymptoticEqual",\n "AsymptoticEquivalent",\n "AsymptoticExpectation",\n "AsymptoticGreater",\n "AsymptoticGreaterEqual",\n "AsymptoticIntegrate",\n "AsymptoticLess",\n "AsymptoticLessEqual",\n "AsymptoticOutputTracker",\n "AsymptoticProbability",\n "AsymptoticProduct",\n "AsymptoticRSolveValue",\n "AsymptoticSolve",\n "AsymptoticSum",\n "Asynchronous",\n "AsynchronousTaskObject",\n "AsynchronousTasks",\n "Atom",\n "AtomCoordinates",\n "AtomCount",\n "AtomDiagramCoordinates",\n "AtomLabels",\n "AtomLabelStyle",\n "AtomList",\n "AtomQ",\n "AttachCell",\n "AttachedCell",\n "AttentionLayer",\n "Attributes",\n "Audio",\n "AudioAmplify",\n "AudioAnnotate",\n "AudioAnnotationLookup",\n "AudioBlockMap",\n "AudioCapture",\n "AudioChannelAssignment",\n "AudioChannelCombine",\n "AudioChannelMix",\n "AudioChannels",\n "AudioChannelSeparate",\n "AudioData",\n "AudioDelay",\n "AudioDelete",\n "AudioDevice",\n "AudioDistance",\n "AudioEncoding",\n "AudioFade",\n "AudioFrequencyShift",\n "AudioGenerator",\n "AudioIdentify",\n "AudioInputDevice",\n "AudioInsert",\n "AudioInstanceQ",\n "AudioIntervals",\n "AudioJoin",\n "AudioLabel",\n "AudioLength",\n "AudioLocalMeasurements",\n "AudioLooping",\n "AudioLoudness",\n "AudioMeasurements",\n "AudioNormalize",\n "AudioOutputDevice",\n "AudioOverlay",\n "AudioPad",\n "AudioPan",\n "AudioPartition",\n "AudioPause",\n "AudioPitchShift",\n "AudioPlay",\n "AudioPlot",\n "AudioQ",\n "AudioRecord",\n "AudioReplace",\n "AudioResample",\n "AudioReverb",\n "AudioReverse",\n "AudioSampleRate",\n "AudioSpectralMap",\n "AudioSpectralTransformation",\n "AudioSplit",\n "AudioStop",\n "AudioStream",\n "AudioStreams",\n "AudioTimeStretch",\n "AudioTrackApply",\n "AudioTrackSelection",\n "AudioTrim",\n "AudioType",\n "AugmentedPolyhedron",\n "AugmentedSymmetricPolynomial",\n "Authenticate",\n "Authentication",\n "AuthenticationDialog",\n "AutoAction",\n "Autocomplete",\n "AutocompletionFunction",\n "AutoCopy",\n "AutocorrelationTest",\n "AutoDelete",\n "AutoEvaluateEvents",\n "AutoGeneratedPackage",\n "AutoIndent",\n "AutoIndentSpacings",\n "AutoItalicWords",\n "AutoloadPath",\n "AutoMatch",\n "Automatic",\n "AutomaticImageSize",\n "AutoMultiplicationSymbol",\n "AutoNumberFormatting",\n "AutoOpenNotebooks",\n "AutoOpenPalettes",\n "AutoOperatorRenderings",\n "AutoQuoteCharacters",\n "AutoRefreshed",\n "AutoRemove",\n "AutorunSequencing",\n "AutoScaling",\n "AutoScroll",\n "AutoSpacing",\n "AutoStyleOptions",\n "AutoStyleWords",\n "AutoSubmitting",\n "Axes",\n "AxesEdge",\n "AxesLabel",\n "AxesOrigin",\n "AxesStyle",\n "AxiomaticTheory",\n "Axis",\n "Axis3DBox",\n "Axis3DBoxOptions",\n "AxisBox",\n "AxisBoxOptions",\n "AxisLabel",\n "AxisObject",\n "AxisStyle",\n "BabyMonsterGroupB",\n "Back",\n "BackFaceColor",\n "BackFaceGlowColor",\n "BackFaceOpacity",\n "BackFaceSpecularColor",\n "BackFaceSpecularExponent",\n "BackFaceSurfaceAppearance",\n "BackFaceTexture",\n "Background",\n "BackgroundAppearance",\n "BackgroundTasksSettings",\n "Backslash",\n "Backsubstitution",\n "Backward",\n "Ball",\n "Band",\n "BandpassFilter",\n "BandstopFilter",\n "BarabasiAlbertGraphDistribution",\n "BarChart",\n "BarChart3D",\n "BarcodeImage",\n "BarcodeRecognize",\n "BaringhausHenzeTest",\n "BarLegend",\n "BarlowProschanImportance",\n "BarnesG",\n "BarOrigin",\n "BarSpacing",\n "BartlettHannWindow",\n "BartlettWindow",\n "BaseDecode",\n "BaseEncode",\n "BaseForm",\n "Baseline",\n "BaselinePosition",\n "BaseStyle",\n "BasicRecurrentLayer",\n "BatchNormalizationLayer",\n "BatchSize",\n "BatesDistribution",\n "BattleLemarieWavelet",\n "BayesianMaximization",\n "BayesianMaximizationObject",\n "BayesianMinimization",\n "BayesianMinimizationObject",\n "Because",\n "BeckmannDistribution",\n "Beep",\n "Before",\n "Begin",\n "BeginDialogPacket",\n "BeginPackage",\n "BellB",\n "BellY",\n "Below",\n "BenfordDistribution",\n "BeniniDistribution",\n "BenktanderGibratDistribution",\n "BenktanderWeibullDistribution",\n "BernoulliB",\n "BernoulliDistribution",\n "BernoulliGraphDistribution",\n "BernoulliProcess",\n "BernsteinBasis",\n "BesagL",\n "BesselFilterModel",\n "BesselI",\n "BesselJ",\n "BesselJZero",\n "BesselK",\n "BesselY",\n "BesselYZero",\n "Beta",\n "BetaBinomialDistribution",\n "BetaDistribution",\n "BetaNegativeBinomialDistribution",\n "BetaPrimeDistribution",\n "BetaRegularized",\n "Between",\n "BetweennessCentrality",\n "Beveled",\n "BeveledPolyhedron",\n "BezierCurve",\n "BezierCurve3DBox",\n "BezierCurve3DBoxOptions",\n "BezierCurveBox",\n "BezierCurveBoxOptions",\n "BezierFunction",\n "BilateralFilter",\n "BilateralLaplaceTransform",\n "BilateralZTransform",\n "Binarize",\n "BinaryDeserialize",\n "BinaryDistance",\n "BinaryFormat",\n "BinaryImageQ",\n "BinaryRead",\n "BinaryReadList",\n "BinarySerialize",\n "BinaryWrite",\n "BinCounts",\n "BinLists",\n "BinnedVariogramList",\n "Binomial",\n "BinomialDistribution",\n "BinomialPointProcess",\n "BinomialProcess",\n "BinormalDistribution",\n "BiorthogonalSplineWavelet",\n "BioSequence",\n "BioSequenceBackTranslateList",\n "BioSequenceComplement",\n "BioSequenceInstances",\n "BioSequenceModify",\n "BioSequencePlot",\n "BioSequenceQ",\n "BioSequenceReverseComplement",\n "BioSequenceTranscribe",\n "BioSequenceTranslate",\n "BipartiteGraphQ",\n "BiquadraticFilterModel",\n "BirnbaumImportance",\n "BirnbaumSaundersDistribution",\n "BitAnd",\n "BitClear",\n "BitGet",\n "BitLength",\n "BitNot",\n "BitOr",\n "BitRate",\n "BitSet",\n "BitShiftLeft",\n "BitShiftRight",\n "BitXor",\n "BiweightLocation",\n "BiweightMidvariance",\n "Black",\n "BlackmanHarrisWindow",\n "BlackmanNuttallWindow",\n "BlackmanWindow",\n "Blank",\n "BlankForm",\n "BlankNullSequence",\n "BlankSequence",\n "Blend",\n "Block",\n "BlockchainAddressData",\n "BlockchainBase",\n "BlockchainBlockData",\n "BlockchainContractValue",\n "BlockchainData",\n "BlockchainGet",\n "BlockchainKeyEncode",\n "BlockchainPut",\n "BlockchainTokenData",\n "BlockchainTransaction",\n "BlockchainTransactionData",\n "BlockchainTransactionSign",\n "BlockchainTransactionSubmit",\n "BlockDiagonalMatrix",\n "BlockLowerTriangularMatrix",\n "BlockMap",\n "BlockRandom",\n "BlockUpperTriangularMatrix",\n "BlomqvistBeta",\n "BlomqvistBetaTest",\n "Blue",\n "Blur",\n "Blurring",\n "BodePlot",\n "BohmanWindow",\n "Bold",\n "Bond",\n "BondCount",\n "BondLabels",\n "BondLabelStyle",\n "BondList",\n "BondQ",\n "Bookmarks",\n "Boole",\n "BooleanConsecutiveFunction",\n "BooleanConvert",\n "BooleanCountingFunction",\n "BooleanFunction",\n "BooleanGraph",\n "BooleanMaxterms",\n "BooleanMinimize",\n "BooleanMinterms",\n "BooleanQ",\n "BooleanRegion",\n "Booleans",\n "BooleanStrings",\n "BooleanTable",\n "BooleanVariables",\n "BorderDimensions",\n "BorelTannerDistribution",\n "Bottom",\n "BottomHatTransform",\n "BoundaryDiscretizeGraphics",\n "BoundaryDiscretizeRegion",\n "BoundaryMesh",\n "BoundaryMeshRegion",\n "BoundaryMeshRegionQ",\n "BoundaryStyle",\n "BoundedRegionQ",\n "BoundingRegion",\n "Bounds",\n "Box",\n "BoxBaselineShift",\n "BoxData",\n "BoxDimensions",\n "Boxed",\n "Boxes",\n "BoxForm",\n "BoxFormFormatTypes",\n "BoxFrame",\n "BoxID",\n "BoxMargins",\n "BoxMatrix",\n "BoxObject",\n "BoxRatios",\n "BoxRotation",\n "BoxRotationPoint",\n "BoxStyle",\n "BoxWhiskerChart",\n "Bra",\n "BracketingBar",\n "BraKet",\n "BrayCurtisDistance",\n "BreadthFirstScan",\n "Break",\n "BridgeData",\n "BrightnessEqualize",\n "BroadcastStationData",\n "Brown",\n "BrownForsytheTest",\n "BrownianBridgeProcess",\n "BrowserCategory",\n "BSplineBasis",\n "BSplineCurve",\n "BSplineCurve3DBox",\n "BSplineCurve3DBoxOptions",\n "BSplineCurveBox",\n "BSplineCurveBoxOptions",\n "BSplineFunction",\n "BSplineSurface",\n "BSplineSurface3DBox",\n "BSplineSurface3DBoxOptions",\n "BubbleChart",\n "BubbleChart3D",\n "BubbleScale",\n "BubbleSizes",\n "BuckyballGraph",\n "BuildCompiledComponent",\n "BuildingData",\n "BulletGauge",\n "BusinessDayQ",\n "ButterflyGraph",\n "ButterworthFilterModel",\n "Button",\n "ButtonBar",\n "ButtonBox",\n "ButtonBoxOptions",\n "ButtonCell",\n "ButtonContents",\n "ButtonData",\n "ButtonEvaluator",\n "ButtonExpandable",\n "ButtonFrame",\n "ButtonFunction",\n "ButtonMargins",\n "ButtonMinHeight",\n "ButtonNote",\n "ButtonNotebook",\n "ButtonSource",\n "ButtonStyle",\n "ButtonStyleMenuListing",\n "Byte",\n "ByteArray",\n "ByteArrayFormat",\n "ByteArrayFormatQ",\n "ByteArrayQ",\n "ByteArrayToString",\n "ByteCount",\n "ByteOrdering",\n "C",\n "CachedValue",\n "CacheGraphics",\n "CachePersistence",\n "CalendarConvert",\n "CalendarData",\n "CalendarType",\n "Callout",\n "CalloutMarker",\n "CalloutStyle",\n "CallPacket",\n "CanberraDistance",\n "Cancel",\n "CancelButton",\n "CandlestickChart",\n "CanonicalGraph",\n "CanonicalizePolygon",\n "CanonicalizePolyhedron",\n "CanonicalizeRegion",\n "CanonicalName",\n "CanonicalWarpingCorrespondence",\n "CanonicalWarpingDistance",\n "CantorMesh",\n "CantorStaircase",\n "Canvas",\n "Cap",\n "CapForm",\n "CapitalDifferentialD",\n "Capitalize",\n "CapsuleShape",\n "CaptureRunning",\n "CaputoD",\n "CardinalBSplineBasis",\n "CarlemanLinearize",\n "CarlsonRC",\n "CarlsonRD",\n "CarlsonRE",\n "CarlsonRF",\n "CarlsonRG",\n "CarlsonRJ",\n "CarlsonRK",\n "CarlsonRM",\n "CarmichaelLambda",\n "CaseOrdering",\n "Cases",\n "CaseSensitive",\n "Cashflow",\n "Casoratian",\n "Cast",\n "Catalan",\n "CatalanNumber",\n "Catch",\n "CategoricalDistribution",\n "Catenate",\n "CatenateLayer",\n "CauchyDistribution",\n "CauchyMatrix",\n "CauchyPointProcess",\n "CauchyWindow",\n "CayleyGraph",\n "CDF",\n "CDFDeploy",\n "CDFInformation",\n "CDFWavelet",\n "Ceiling",\n "CelestialSystem",\n "Cell",\n "CellAutoOverwrite",\n "CellBaseline",\n "CellBoundingBox",\n "CellBracketOptions",\n "CellChangeTimes",\n "CellContents",\n "CellContext",\n "CellDingbat",\n "CellDingbatMargin",\n "CellDynamicExpression",\n "CellEditDuplicate",\n "CellElementsBoundingBox",\n "CellElementSpacings",\n "CellEpilog",\n "CellEvaluationDuplicate",\n "CellEvaluationFunction",\n "CellEvaluationLanguage",\n "CellEventActions",\n "CellFrame",\n "CellFrameColor",\n "CellFrameLabelMargins",\n "CellFrameLabels",\n "CellFrameMargins",\n "CellFrameStyle",\n "CellGroup",\n "CellGroupData",\n "CellGrouping",\n "CellGroupingRules",\n "CellHorizontalScrolling",\n "CellID",\n "CellInsertionPointCell",\n "CellLabel",\n "CellLabelAutoDelete",\n "CellLabelMargins",\n "CellLabelPositioning",\n "CellLabelStyle",\n "CellLabelTemplate",\n "CellMargins",\n "CellObject",\n "CellOpen",\n "CellPrint",\n "CellProlog",\n "Cells",\n "CellSize",\n "CellStyle",\n "CellTags",\n "CellTrayPosition",\n "CellTrayWidgets",\n "CellularAutomaton",\n "CensoredDistribution",\n "Censoring",\n "Center",\n "CenterArray",\n "CenterDot",\n "CenteredInterval",\n "CentralFeature",\n "CentralMoment",\n "CentralMomentGeneratingFunction",\n "Cepstrogram",\n "CepstrogramArray",\n "CepstrumArray",\n "CForm",\n "ChampernowneNumber",\n "ChangeOptions",\n "ChannelBase",\n "ChannelBrokerAction",\n "ChannelDatabin",\n "ChannelHistoryLength",\n "ChannelListen",\n "ChannelListener",\n "ChannelListeners",\n "ChannelListenerWait",\n "ChannelObject",\n "ChannelPreSendFunction",\n "ChannelReceiverFunction",\n "ChannelSend",\n "ChannelSubscribers",\n "ChanVeseBinarize",\n "Character",\n "CharacterCounts",\n "CharacterEncoding",\n "CharacterEncodingsPath",\n "CharacteristicFunction",\n "CharacteristicPolynomial",\n "CharacterName",\n "CharacterNormalize",\n "CharacterRange",\n "Characters",\n "ChartBaseStyle",\n "ChartElementData",\n "ChartElementDataFunction",\n "ChartElementFunction",\n "ChartElements",\n "ChartLabels",\n "ChartLayout",\n "ChartLegends",\n "ChartStyle",\n "Chebyshev1FilterModel",\n "Chebyshev2FilterModel",\n "ChebyshevDistance",\n "ChebyshevT",\n "ChebyshevU",\n "Check",\n "CheckAbort",\n "CheckAll",\n "CheckArguments",\n "Checkbox",\n "CheckboxBar",\n "CheckboxBox",\n "CheckboxBoxOptions",\n "ChemicalConvert",\n "ChemicalData",\n "ChemicalFormula",\n "ChemicalInstance",\n "ChemicalReaction",\n "ChessboardDistance",\n "ChiDistribution",\n "ChineseRemainder",\n "ChiSquareDistribution",\n "ChoiceButtons",\n "ChoiceDialog",\n "CholeskyDecomposition",\n "Chop",\n "ChromaticityPlot",\n "ChromaticityPlot3D",\n "ChromaticPolynomial",\n "Circle",\n "CircleBox",\n "CircleDot",\n "CircleMinus",\n "CirclePlus",\n "CirclePoints",\n "CircleThrough",\n "CircleTimes",\n "CirculantGraph",\n "CircularArcThrough",\n "CircularOrthogonalMatrixDistribution",\n "CircularQuaternionMatrixDistribution",\n "CircularRealMatrixDistribution",\n "CircularSymplecticMatrixDistribution",\n "CircularUnitaryMatrixDistribution",\n "Circumsphere",\n "CityData",\n "ClassifierFunction",\n "ClassifierInformation",\n "ClassifierMeasurements",\n "ClassifierMeasurementsObject",\n "Classify",\n "ClassPriors",\n "Clear",\n "ClearAll",\n "ClearAttributes",\n "ClearCookies",\n "ClearPermissions",\n "ClearSystemCache",\n "ClebschGordan",\n "ClickPane",\n "ClickToCopy",\n "ClickToCopyEnabled",\n "Clip",\n "ClipboardNotebook",\n "ClipFill",\n "ClippingStyle",\n "ClipPlanes",\n "ClipPlanesStyle",\n "ClipRange",\n "Clock",\n "ClockGauge",\n "ClockwiseContourIntegral",\n "Close",\n "Closed",\n "CloseKernels",\n "ClosenessCentrality",\n "Closing",\n "ClosingAutoSave",\n "ClosingEvent",\n "CloudAccountData",\n "CloudBase",\n "CloudConnect",\n "CloudConnections",\n "CloudDeploy",\n "CloudDirectory",\n "CloudDisconnect",\n "CloudEvaluate",\n "CloudExport",\n "CloudExpression",\n "CloudExpressions",\n "CloudFunction",\n "CloudGet",\n "CloudImport",\n "CloudLoggingData",\n "CloudObject",\n "CloudObjectInformation",\n "CloudObjectInformationData",\n "CloudObjectNameFormat",\n "CloudObjects",\n "CloudObjectURLType",\n "CloudPublish",\n "CloudPut",\n "CloudRenderingMethod",\n "CloudSave",\n "CloudShare",\n "CloudSubmit",\n "CloudSymbol",\n "CloudUnshare",\n "CloudUserID",\n "ClusterClassify",\n "ClusterDissimilarityFunction",\n "ClusteringComponents",\n "ClusteringMeasurements",\n "ClusteringTree",\n "CMYKColor",\n "Coarse",\n "CodeAssistOptions",\n "Coefficient",\n "CoefficientArrays",\n "CoefficientDomain",\n "CoefficientList",\n "CoefficientRules",\n "CoifletWavelet",\n "Collect",\n "CollinearPoints",\n "Colon",\n "ColonForm",\n "ColorBalance",\n "ColorCombine",\n "ColorConvert",\n "ColorCoverage",\n "ColorData",\n "ColorDataFunction",\n "ColorDetect",\n "ColorDistance",\n "ColorFunction",\n "ColorFunctionBinning",\n "ColorFunctionScaling",\n "Colorize",\n "ColorNegate",\n "ColorOutput",\n "ColorProfileData",\n "ColorQ",\n "ColorQuantize",\n "ColorReplace",\n "ColorRules",\n "ColorSelectorSettings",\n "ColorSeparate",\n "ColorSetter",\n "ColorSetterBox",\n "ColorSetterBoxOptions",\n "ColorSlider",\n "ColorsNear",\n "ColorSpace",\n "ColorToneMapping",\n "Column",\n "ColumnAlignments",\n "ColumnBackgrounds",\n "ColumnForm",\n "ColumnLines",\n "ColumnsEqual",\n "ColumnSpacings",\n "ColumnWidths",\n "CombinatorB",\n "CombinatorC",\n "CombinatorI",\n "CombinatorK",\n "CombinatorS",\n "CombinatorW",\n "CombinatorY",\n "CombinedEntityClass",\n "CombinerFunction",\n "CometData",\n "CommonDefaultFormatTypes",\n "Commonest",\n "CommonestFilter",\n "CommonName",\n "CommonUnits",\n "CommunityBoundaryStyle",\n "CommunityGraphPlot",\n "CommunityLabels",\n "CommunityRegionStyle",\n "CompanyData",\n "CompatibleUnitQ",\n "CompilationOptions",\n "CompilationTarget",\n "Compile",\n "Compiled",\n "CompiledCodeFunction",\n "CompiledComponent",\n "CompiledExpressionDeclaration",\n "CompiledFunction",\n "CompiledLayer",\n "CompilerCallback",\n "CompilerEnvironment",\n "CompilerEnvironmentAppend",\n "CompilerEnvironmentAppendTo",\n "CompilerEnvironmentObject",\n "CompilerOptions",\n "Complement",\n "ComplementedEntityClass",\n "CompleteGraph",\n "CompleteGraphQ",\n "CompleteIntegral",\n "CompleteKaryTree",\n "CompletionsListPacket",\n "Complex",\n "ComplexArrayPlot",\n "ComplexContourPlot",\n "Complexes",\n "ComplexExpand",\n "ComplexInfinity",\n "ComplexityFunction",\n "ComplexListPlot",\n "ComplexPlot",\n "ComplexPlot3D",\n "ComplexRegionPlot",\n "ComplexStreamPlot",\n "ComplexVectorPlot",\n "ComponentMeasurements",\n "ComponentwiseContextMenu",\n "Compose",\n "ComposeList",\n "ComposeSeries",\n "CompositeQ",\n "Composition",\n "CompoundElement",\n "CompoundExpression",\n "CompoundPoissonDistribution",\n "CompoundPoissonProcess",\n "CompoundRenewalProcess",\n "Compress",\n "CompressedData",\n "CompressionLevel",\n "ComputeUncertainty",\n "ConcaveHullMesh",\n "Condition",\n "ConditionalExpression",\n "Conditioned",\n "Cone",\n "ConeBox",\n "ConfidenceLevel",\n "ConfidenceRange",\n "ConfidenceTransform",\n "ConfigurationPath",\n "Confirm",\n "ConfirmAssert",\n "ConfirmBy",\n "ConfirmMatch",\n "ConfirmQuiet",\n "ConformationMethod",\n "ConformAudio",\n "ConformImages",\n "Congruent",\n "ConicGradientFilling",\n "ConicHullRegion",\n "ConicHullRegion3DBox",\n "ConicHullRegion3DBoxOptions",\n "ConicHullRegionBox",\n "ConicHullRegionBoxOptions",\n "ConicOptimization",\n "Conjugate",\n "ConjugateTranspose",\n "Conjunction",\n "Connect",\n "ConnectedComponents",\n "ConnectedGraphComponents",\n "ConnectedGraphQ",\n "ConnectedMeshComponents",\n "ConnectedMoleculeComponents",\n "ConnectedMoleculeQ",\n "ConnectionSettings",\n "ConnectLibraryCallbackFunction",\n "ConnectSystemModelComponents",\n "ConnectSystemModelController",\n "ConnesWindow",\n "ConoverTest",\n "ConservativeConvectionPDETerm",\n "ConsoleMessage",\n "Constant",\n "ConstantArray",\n "ConstantArrayLayer",\n "ConstantImage",\n "ConstantPlusLayer",\n "ConstantRegionQ",\n "Constants",\n "ConstantTimesLayer",\n "ConstellationData",\n "ConstrainedMax",\n "ConstrainedMin",\n "Construct",\n "Containing",\n "ContainsAll",\n "ContainsAny",\n "ContainsExactly",\n "ContainsNone",\n "ContainsOnly",\n "ContentDetectorFunction",\n "ContentFieldOptions",\n "ContentLocationFunction",\n "ContentObject",\n "ContentPadding",\n "ContentsBoundingBox",\n "ContentSelectable",\n "ContentSize",\n "Context",\n "ContextMenu",\n "Contexts",\n "ContextToFileName",\n "Continuation",\n "Continue",\n "ContinuedFraction",\n "ContinuedFractionK",\n "ContinuousAction",\n "ContinuousMarkovProcess",\n "ContinuousTask",\n "ContinuousTimeModelQ",\n "ContinuousWaveletData",\n "ContinuousWaveletTransform",\n "ContourDetect",\n "ContourGraphics",\n "ContourIntegral",\n "ContourLabels",\n "ContourLines",\n "ContourPlot",\n "ContourPlot3D",\n "Contours",\n "ContourShading",\n "ContourSmoothing",\n "ContourStyle",\n "ContraharmonicMean",\n "ContrastiveLossLayer",\n "Control",\n "ControlActive",\n "ControlAlignment",\n "ControlGroupContentsBox",\n "ControllabilityGramian",\n "ControllabilityMatrix",\n "ControllableDecomposition",\n "ControllableModelQ",\n "ControllerDuration",\n "ControllerInformation",\n "ControllerInformationData",\n "ControllerLinking",\n "ControllerManipulate",\n "ControllerMethod",\n "ControllerPath",\n "ControllerState",\n "ControlPlacement",\n "ControlsRendering",\n "ControlType",\n "ConvectionPDETerm",\n "Convergents",\n "ConversionOptions",\n "ConversionRules",\n "ConvertToPostScript",\n "ConvertToPostScriptPacket",\n "ConvexHullMesh",\n "ConvexHullRegion",\n "ConvexOptimization",\n "ConvexPolygonQ",\n "ConvexPolyhedronQ",\n "ConvexRegionQ",\n "ConvolutionLayer",\n "Convolve",\n "ConwayGroupCo1",\n "ConwayGroupCo2",\n "ConwayGroupCo3",\n "CookieFunction",\n "Cookies",\n "CoordinateBoundingBox",\n "CoordinateBoundingBoxArray",\n "CoordinateBounds",\n "CoordinateBoundsArray",\n "CoordinateChartData",\n "CoordinatesToolOptions",\n "CoordinateTransform",\n "CoordinateTransformData",\n "CoplanarPoints",\n "CoprimeQ",\n "Coproduct",\n "CopulaDistribution",\n "Copyable",\n "CopyDatabin",\n "CopyDirectory",\n "CopyFile",\n "CopyFunction",\n "CopyTag",\n "CopyToClipboard",\n "CoreNilpotentDecomposition",\n "CornerFilter",\n "CornerNeighbors",\n "Correlation",\n "CorrelationDistance",\n "CorrelationFunction",\n "CorrelationTest",\n "Cos",\n "Cosh",\n "CoshIntegral",\n "CosineDistance",\n "CosineWindow",\n "CosIntegral",\n "Cot",\n "Coth",\n "CoulombF",\n "CoulombG",\n "CoulombH1",\n "CoulombH2",\n "Count",\n "CountDistinct",\n "CountDistinctBy",\n "CounterAssignments",\n "CounterBox",\n "CounterBoxOptions",\n "CounterClockwiseContourIntegral",\n "CounterEvaluator",\n "CounterFunction",\n "CounterIncrements",\n "CounterStyle",\n "CounterStyleMenuListing",\n "CountRoots",\n "CountryData",\n "Counts",\n "CountsBy",\n "Covariance",\n "CovarianceEstimatorFunction",\n "CovarianceFunction",\n "CoxianDistribution",\n "CoxIngersollRossProcess",\n "CoxModel",\n "CoxModelFit",\n "CramerVonMisesTest",\n "CreateArchive",\n "CreateCellID",\n "CreateChannel",\n "CreateCloudExpression",\n "CreateCompilerEnvironment",\n "CreateDatabin",\n "CreateDataStructure",\n "CreateDataSystemModel",\n "CreateDialog",\n "CreateDirectory",\n "CreateDocument",\n "CreateFile",\n "CreateIntermediateDirectories",\n "CreateLicenseEntitlement",\n "CreateManagedLibraryExpression",\n "CreateNotebook",\n "CreatePacletArchive",\n "CreatePalette",\n "CreatePermissionsGroup",\n "CreateScheduledTask",\n "CreateSearchIndex",\n "CreateSystemModel",\n "CreateTemporary",\n "CreateTypeInstance",\n "CreateUUID",\n "CreateWindow",\n "CriterionFunction",\n "CriticalityFailureImportance",\n "CriticalitySuccessImportance",\n "CriticalSection",\n "Cross",\n "CrossEntropyLossLayer",\n "CrossingCount",\n "CrossingDetect",\n "CrossingPolygon",\n "CrossMatrix",\n "Csc",\n "Csch",\n "CSGRegion",\n "CSGRegionQ",\n "CSGRegionTree",\n "CTCLossLayer",\n "Cube",\n "CubeRoot",\n "Cubics",\n "Cuboid",\n "CuboidBox",\n "CuboidBoxOptions",\n "Cumulant",\n "CumulantGeneratingFunction",\n "CumulativeFeatureImpactPlot",\n "Cup",\n "CupCap",\n "Curl",\n "CurlyDoubleQuote",\n "CurlyQuote",\n "CurrencyConvert",\n "CurrentDate",\n "CurrentImage",\n "CurrentNotebookImage",\n "CurrentScreenImage",\n "CurrentValue",\n "Curry",\n "CurryApplied",\n "CurvatureFlowFilter",\n "CurveClosed",\n "Cyan",\n "CycleGraph",\n "CycleIndexPolynomial",\n "Cycles",\n "CyclicGroup",\n "Cyclotomic",\n "Cylinder",\n "CylinderBox",\n "CylinderBoxOptions",\n "CylindricalDecomposition",\n "CylindricalDecompositionFunction",\n "D",\n "DagumDistribution",\n "DamData",\n "DamerauLevenshteinDistance",\n "DampingFactor",\n "Darker",\n "Dashed",\n "Dashing",\n "DatabaseConnect",\n "DatabaseDisconnect",\n "DatabaseReference",\n "Databin",\n "DatabinAdd",\n "DatabinRemove",\n "Databins",\n "DatabinSubmit",\n "DatabinUpload",\n "DataCompression",\n "DataDistribution",\n "DataRange",\n "DataReversed",\n "Dataset",\n "DatasetDisplayPanel",\n "DatasetTheme",\n "DataStructure",\n "DataStructureQ",\n "Date",\n "DateBounds",\n "Dated",\n "DateDelimiters",\n "DateDifference",\n "DatedUnit",\n "DateFormat",\n "DateFunction",\n "DateGranularity",\n "DateHistogram",\n "DateInterval",\n "DateList",\n "DateListLogPlot",\n "DateListPlot",\n "DateListStepPlot",\n "DateObject",\n "DateObjectQ",\n "DateOverlapsQ",\n "DatePattern",\n "DatePlus",\n "DateRange",\n "DateReduction",\n "DateScale",\n "DateSelect",\n "DateString",\n "DateTicksFormat",\n "DateValue",\n "DateWithinQ",\n "DaubechiesWavelet",\n "DavisDistribution",\n "DawsonF",\n "DayCount",\n "DayCountConvention",\n "DayHemisphere",\n "DaylightQ",\n "DayMatchQ",\n "DayName",\n "DayNightTerminator",\n "DayPlus",\n "DayRange",\n "DayRound",\n "DeBruijnGraph",\n "DeBruijnSequence",\n "Debug",\n "DebugTag",\n "Decapitalize",\n "Decimal",\n "DecimalForm",\n "DeclareCompiledComponent",\n "DeclareKnownSymbols",\n "DeclarePackage",\n "Decompose",\n "DeconvolutionLayer",\n "Decrement",\n "Decrypt",\n "DecryptFile",\n "DedekindEta",\n "DeepSpaceProbeData",\n "Default",\n "Default2DTool",\n "Default3DTool",\n "DefaultAttachedCellStyle",\n "DefaultAxesStyle",\n "DefaultBaseStyle",\n "DefaultBoxStyle",\n "DefaultButton",\n "DefaultColor",\n "DefaultControlPlacement",\n "DefaultDockedCellStyle",\n "DefaultDuplicateCellStyle",\n "DefaultDuration",\n "DefaultElement",\n "DefaultFaceGridsStyle",\n "DefaultFieldHintStyle",\n "DefaultFont",\n "DefaultFontProperties",\n "DefaultFormatType",\n "DefaultFrameStyle",\n "DefaultFrameTicksStyle",\n "DefaultGridLinesStyle",\n "DefaultInlineFormatType",\n "DefaultInputFormatType",\n "DefaultLabelStyle",\n "DefaultMenuStyle",\n "DefaultNaturalLanguage",\n "DefaultNewCellStyle",\n "DefaultNewInlineCellStyle",\n "DefaultNotebook",\n "DefaultOptions",\n "DefaultOutputFormatType",\n "DefaultPrintPrecision",\n "DefaultStyle",\n "DefaultStyleDefinitions",\n "DefaultTextFormatType",\n "DefaultTextInlineFormatType",\n "DefaultTicksStyle",\n "DefaultTooltipStyle",\n "DefaultValue",\n "DefaultValues",\n "Defer",\n "DefineExternal",\n "DefineInputStreamMethod",\n "DefineOutputStreamMethod",\n "DefineResourceFunction",\n "Definition",\n "Degree",\n "DegreeCentrality",\n "DegreeGraphDistribution",\n "DegreeLexicographic",\n "DegreeReverseLexicographic",\n "DEigensystem",\n "DEigenvalues",\n "Deinitialization",\n "Del",\n "DelaunayMesh",\n "Delayed",\n "Deletable",\n "Delete",\n "DeleteAdjacentDuplicates",\n "DeleteAnomalies",\n "DeleteBorderComponents",\n "DeleteCases",\n "DeleteChannel",\n "DeleteCloudExpression",\n "DeleteContents",\n "DeleteDirectory",\n "DeleteDuplicates",\n "DeleteDuplicatesBy",\n "DeleteElements",\n "DeleteFile",\n "DeleteMissing",\n "DeleteObject",\n "DeletePermissionsKey",\n "DeleteSearchIndex",\n "DeleteSmallComponents",\n "DeleteStopwords",\n "DeleteWithContents",\n "DeletionWarning",\n "DelimitedArray",\n "DelimitedSequence",\n "Delimiter",\n "DelimiterAutoMatching",\n "DelimiterFlashTime",\n "DelimiterMatching",\n "Delimiters",\n "DeliveryFunction",\n "Dendrogram",\n "Denominator",\n "DensityGraphics",\n "DensityHistogram",\n "DensityPlot",\n "DensityPlot3D",\n "DependentVariables",\n "Deploy",\n "Deployed",\n "Depth",\n "DepthFirstScan",\n "Derivative",\n "DerivativeFilter",\n "DerivativePDETerm",\n "DerivedKey",\n "DescriptorStateSpace",\n "DesignMatrix",\n "DestroyAfterEvaluation",\n "Det",\n "DeviceClose",\n "DeviceConfigure",\n "DeviceExecute",\n "DeviceExecuteAsynchronous",\n "DeviceObject",\n "DeviceOpen",\n "DeviceOpenQ",\n "DeviceRead",\n "DeviceReadBuffer",\n "DeviceReadLatest",\n "DeviceReadList",\n "DeviceReadTimeSeries",\n "Devices",\n "DeviceStreams",\n "DeviceWrite",\n "DeviceWriteBuffer",\n "DGaussianWavelet",\n "DiacriticalPositioning",\n "Diagonal",\n "DiagonalizableMatrixQ",\n "DiagonalMatrix",\n "DiagonalMatrixQ",\n "Dialog",\n "DialogIndent",\n "DialogInput",\n "DialogLevel",\n "DialogNotebook",\n "DialogProlog",\n "DialogReturn",\n "DialogSymbols",\n "Diamond",\n "DiamondMatrix",\n "DiceDissimilarity",\n "DictionaryLookup",\n "DictionaryWordQ",\n "DifferenceDelta",\n "DifferenceOrder",\n "DifferenceQuotient",\n "DifferenceRoot",\n "DifferenceRootReduce",\n "Differences",\n "DifferentialD",\n "DifferentialRoot",\n "DifferentialRootReduce",\n "DifferentiatorFilter",\n "DiffusionPDETerm",\n "DiggleGatesPointProcess",\n "DiggleGrattonPointProcess",\n "DigitalSignature",\n "DigitBlock",\n "DigitBlockMinimum",\n "DigitCharacter",\n "DigitCount",\n "DigitQ",\n "DihedralAngle",\n "DihedralGroup",\n "Dilation",\n "DimensionalCombinations",\n "DimensionalMeshComponents",\n "DimensionReduce",\n "DimensionReducerFunction",\n "DimensionReduction",\n "Dimensions",\n "DiracComb",\n "DiracDelta",\n "DirectedEdge",\n "DirectedEdges",\n "DirectedGraph",\n "DirectedGraphQ",\n "DirectedInfinity",\n "Direction",\n "DirectionalLight",\n "Directive",\n "Directory",\n "DirectoryName",\n "DirectoryQ",\n "DirectoryStack",\n "DirichletBeta",\n "DirichletCharacter",\n "DirichletCondition",\n "DirichletConvolve",\n "DirichletDistribution",\n "DirichletEta",\n "DirichletL",\n "DirichletLambda",\n "DirichletTransform",\n "DirichletWindow",\n "DisableConsolePrintPacket",\n "DisableFormatting",\n "DiscreteAsymptotic",\n "DiscreteChirpZTransform",\n "DiscreteConvolve",\n "DiscreteDelta",\n "DiscreteHadamardTransform",\n "DiscreteIndicator",\n "DiscreteInputOutputModel",\n "DiscreteLimit",\n "DiscreteLQEstimatorGains",\n "DiscreteLQRegulatorGains",\n "DiscreteLyapunovSolve",\n "DiscreteMarkovProcess",\n "DiscreteMaxLimit",\n "DiscreteMinLimit",\n "DiscretePlot",\n "DiscretePlot3D",\n "DiscreteRatio",\n "DiscreteRiccatiSolve",\n "DiscreteShift",\n "DiscreteTimeModelQ",\n "DiscreteUniformDistribution",\n "DiscreteVariables",\n "DiscreteWaveletData",\n "DiscreteWaveletPacketTransform",\n "DiscreteWaveletTransform",\n "DiscretizeGraphics",\n "DiscretizeRegion",\n "Discriminant",\n "DisjointQ",\n "Disjunction",\n "Disk",\n "DiskBox",\n "DiskBoxOptions",\n "DiskMatrix",\n "DiskSegment",\n "Dispatch",\n "DispatchQ",\n "DispersionEstimatorFunction",\n "Display",\n "DisplayAllSteps",\n "DisplayEndPacket",\n "DisplayForm",\n "DisplayFunction",\n "DisplayPacket",\n "DisplayRules",\n "DisplayString",\n "DisplayTemporary",\n "DisplayWith",\n "DisplayWithRef",\n "DisplayWithVariable",\n "DistanceFunction",\n "DistanceMatrix",\n "DistanceTransform",\n "Distribute",\n "Distributed",\n "DistributedContexts",\n "DistributeDefinitions",\n "DistributionChart",\n "DistributionDomain",\n "DistributionFitTest",\n "DistributionParameterAssumptions",\n "DistributionParameterQ",\n "Dithering",\n "Div",\n "Divergence",\n "Divide",\n "DivideBy",\n "Dividers",\n "DivideSides",\n "Divisible",\n "Divisors",\n "DivisorSigma",\n "DivisorSum",\n "DMSList",\n "DMSString",\n "Do",\n "DockedCell",\n "DockedCells",\n "DocumentGenerator",\n "DocumentGeneratorInformation",\n "DocumentGeneratorInformationData",\n "DocumentGenerators",\n "DocumentNotebook",\n "DocumentWeightingRules",\n "Dodecahedron",\n "DomainRegistrationInformation",\n "DominantColors",\n "DominatorTreeGraph",\n "DominatorVertexList",\n "DOSTextFormat",\n "Dot",\n "DotDashed",\n "DotEqual",\n "DotLayer",\n "DotPlusLayer",\n "Dotted",\n "DoubleBracketingBar",\n "DoubleContourIntegral",\n "DoubleDownArrow",\n "DoubleLeftArrow",\n "DoubleLeftRightArrow",\n "DoubleLeftTee",\n "DoubleLongLeftArrow",\n "DoubleLongLeftRightArrow",\n "DoubleLongRightArrow",\n "DoubleRightArrow",\n "DoubleRightTee",\n "DoubleUpArrow",\n "DoubleUpDownArrow",\n "DoubleVerticalBar",\n "DoublyInfinite",\n "Down",\n "DownArrow",\n "DownArrowBar",\n "DownArrowUpArrow",\n "DownLeftRightVector",\n "DownLeftTeeVector",\n "DownLeftVector",\n "DownLeftVectorBar",\n "DownRightTeeVector",\n "DownRightVector",\n "DownRightVectorBar",\n "Downsample",\n "DownTee",\n "DownTeeArrow",\n "DownValues",\n "DownValuesFunction",\n "DragAndDrop",\n "DrawBackFaces",\n "DrawEdges",\n "DrawFrontFaces",\n "DrawHighlighted",\n "DrazinInverse",\n "Drop",\n "DropoutLayer",\n "DropShadowing",\n "DSolve",\n "DSolveChangeVariables",\n "DSolveValue",\n "Dt",\n "DualLinearProgramming",\n "DualPlanarGraph",\n "DualPolyhedron",\n "DualSystemsModel",\n "DumpGet",\n "DumpSave",\n "DuplicateFreeQ",\n "Duration",\n "Dynamic",\n "DynamicBox",\n "DynamicBoxOptions",\n "DynamicEvaluationTimeout",\n "DynamicGeoGraphics",\n "DynamicImage",\n "DynamicLocation",\n "DynamicModule",\n "DynamicModuleBox",\n "DynamicModuleBoxOptions",\n "DynamicModuleParent",\n "DynamicModuleValues",\n "DynamicName",\n "DynamicNamespace",\n "DynamicReference",\n "DynamicSetting",\n "DynamicUpdating",\n "DynamicWrapper",\n "DynamicWrapperBox",\n "DynamicWrapperBoxOptions",\n "E",\n "EarthImpactData",\n "EarthquakeData",\n "EccentricityCentrality",\n "Echo",\n "EchoEvaluation",\n "EchoFunction",\n "EchoLabel",\n "EchoTiming",\n "EclipseType",\n "EdgeAdd",\n "EdgeBetweennessCentrality",\n "EdgeCapacity",\n "EdgeCapForm",\n "EdgeChromaticNumber",\n "EdgeColor",\n "EdgeConnectivity",\n "EdgeContract",\n "EdgeCost",\n "EdgeCount",\n "EdgeCoverQ",\n "EdgeCycleMatrix",\n "EdgeDashing",\n "EdgeDelete",\n "EdgeDetect",\n "EdgeForm",\n "EdgeIndex",\n "EdgeJoinForm",\n "EdgeLabeling",\n "EdgeLabels",\n "EdgeLabelStyle",\n "EdgeList",\n "EdgeOpacity",\n "EdgeQ",\n "EdgeRenderingFunction",\n "EdgeRules",\n "EdgeShapeFunction",\n "EdgeStyle",\n "EdgeTaggedGraph",\n "EdgeTaggedGraphQ",\n "EdgeTags",\n "EdgeThickness",\n "EdgeTransitiveGraphQ",\n "EdgeValueRange",\n "EdgeValueSizes",\n "EdgeWeight",\n "EdgeWeightedGraphQ",\n "Editable",\n "EditButtonSettings",\n "EditCellTagsSettings",\n "EditDistance",\n "EffectiveInterest",\n "Eigensystem",\n "Eigenvalues",\n "EigenvectorCentrality",\n "Eigenvectors",\n "Element",\n "ElementData",\n "ElementwiseLayer",\n "ElidedForms",\n "Eliminate",\n "EliminationOrder",\n "Ellipsoid",\n "EllipticE",\n "EllipticExp",\n "EllipticExpPrime",\n "EllipticF",\n "EllipticFilterModel",\n "EllipticK",\n "EllipticLog",\n "EllipticNomeQ",\n "EllipticPi",\n "EllipticReducedHalfPeriods",\n "EllipticTheta",\n "EllipticThetaPrime",\n "EmbedCode",\n "EmbeddedHTML",\n "EmbeddedService",\n "EmbeddedSQLEntityClass",\n "EmbeddedSQLExpression",\n "EmbeddingLayer",\n "EmbeddingObject",\n "EmitSound",\n "EmphasizeSyntaxErrors",\n "EmpiricalDistribution",\n "Empty",\n "EmptyGraphQ",\n "EmptyRegion",\n "EmptySpaceF",\n "EnableConsolePrintPacket",\n "Enabled",\n "Enclose",\n "Encode",\n "Encrypt",\n "EncryptedObject",\n "EncryptFile",\n "End",\n "EndAdd",\n "EndDialogPacket",\n "EndOfBuffer",\n "EndOfFile",\n "EndOfLine",\n "EndOfString",\n "EndPackage",\n "EngineEnvironment",\n "EngineeringForm",\n "Enter",\n "EnterExpressionPacket",\n "EnterTextPacket",\n "Entity",\n "EntityClass",\n "EntityClassList",\n "EntityCopies",\n "EntityFunction",\n "EntityGroup",\n "EntityInstance",\n "EntityList",\n "EntityPrefetch",\n "EntityProperties",\n "EntityProperty",\n "EntityPropertyClass",\n "EntityRegister",\n "EntityStore",\n "EntityStores",\n "EntityTypeName",\n "EntityUnregister",\n "EntityValue",\n "Entropy",\n "EntropyFilter",\n "Environment",\n "Epilog",\n "EpilogFunction",\n "Equal",\n "EqualColumns",\n "EqualRows",\n "EqualTilde",\n "EqualTo",\n "EquatedTo",\n "Equilibrium",\n "EquirippleFilterKernel",\n "Equivalent",\n "Erf",\n "Erfc",\n "Erfi",\n "ErlangB",\n "ErlangC",\n "ErlangDistribution",\n "Erosion",\n "ErrorBox",\n "ErrorBoxOptions",\n "ErrorNorm",\n "ErrorPacket",\n "ErrorsDialogSettings",\n "EscapeRadius",\n "EstimatedBackground",\n "EstimatedDistribution",\n "EstimatedPointNormals",\n "EstimatedPointProcess",\n "EstimatedProcess",\n "EstimatedVariogramModel",\n "EstimatorGains",\n "EstimatorRegulator",\n "EuclideanDistance",\n "EulerAngles",\n "EulerCharacteristic",\n "EulerE",\n "EulerGamma",\n "EulerianGraphQ",\n "EulerMatrix",\n "EulerPhi",\n "Evaluatable",\n "Evaluate",\n "Evaluated",\n "EvaluatePacket",\n "EvaluateScheduledTask",\n "EvaluationBox",\n "EvaluationCell",\n "EvaluationCompletionAction",\n "EvaluationData",\n "EvaluationElements",\n "EvaluationEnvironment",\n "EvaluationMode",\n "EvaluationMonitor",\n "EvaluationNotebook",\n "EvaluationObject",\n "EvaluationOrder",\n "EvaluationPrivileges",\n "EvaluationRateLimit",\n "Evaluator",\n "EvaluatorNames",\n "EvenQ",\n "EventData",\n "EventEvaluator",\n "EventHandler",\n "EventHandlerTag",\n "EventLabels",\n "EventSeries",\n "ExactBlackmanWindow",\n "ExactNumberQ",\n "ExactRootIsolation",\n "ExampleData",\n "Except",\n "ExcludedContexts",\n "ExcludedForms",\n "ExcludedLines",\n "ExcludedPhysicalQuantities",\n "ExcludePods",\n "Exclusions",\n "ExclusionsStyle",\n "Exists",\n "Exit",\n "ExitDialog",\n "ExoplanetData",\n "Exp",\n "Expand",\n "ExpandAll",\n "ExpandDenominator",\n "ExpandFileName",\n "ExpandNumerator",\n "Expectation",\n "ExpectationE",\n "ExpectedValue",\n "ExpGammaDistribution",\n "ExpIntegralE",\n "ExpIntegralEi",\n "ExpirationDate",\n "Exponent",\n "ExponentFunction",\n "ExponentialDistribution",\n "ExponentialFamily",\n "ExponentialGeneratingFunction",\n "ExponentialMovingAverage",\n "ExponentialPowerDistribution",\n "ExponentPosition",\n "ExponentStep",\n "Export",\n "ExportAutoReplacements",\n "ExportByteArray",\n "ExportForm",\n "ExportPacket",\n "ExportString",\n "Expression",\n "ExpressionCell",\n "ExpressionGraph",\n "ExpressionPacket",\n "ExpressionTree",\n "ExpressionUUID",\n "ExpToTrig",\n "ExtendedEntityClass",\n "ExtendedGCD",\n "Extension",\n "ExtentElementFunction",\n "ExtentMarkers",\n "ExtentSize",\n "ExternalBundle",\n "ExternalCall",\n "ExternalDataCharacterEncoding",\n "ExternalEvaluate",\n "ExternalFunction",\n "ExternalFunctionName",\n "ExternalIdentifier",\n "ExternalObject",\n "ExternalOptions",\n "ExternalSessionObject",\n "ExternalSessions",\n "ExternalStorageBase",\n "ExternalStorageDownload",\n "ExternalStorageGet",\n "ExternalStorageObject",\n "ExternalStoragePut",\n "ExternalStorageUpload",\n "ExternalTypeSignature",\n "ExternalValue",\n "Extract",\n "ExtractArchive",\n "ExtractLayer",\n "ExtractPacletArchive",\n "ExtremeValueDistribution",\n "FaceAlign",\n "FaceForm",\n "FaceGrids",\n "FaceGridsStyle",\n "FaceRecognize",\n "FacialFeatures",\n "Factor",\n "FactorComplete",\n "Factorial",\n "Factorial2",\n "FactorialMoment",\n "FactorialMomentGeneratingFunction",\n "FactorialPower",\n "FactorInteger",\n "FactorList",\n "FactorSquareFree",\n "FactorSquareFreeList",\n "FactorTerms",\n "FactorTermsList",\n "Fail",\n "Failure",\n "FailureAction",\n "FailureDistribution",\n "FailureQ",\n "False",\n "FareySequence",\n "FARIMAProcess",\n "FeatureDistance",\n "FeatureExtract",\n "FeatureExtraction",\n "FeatureExtractor",\n "FeatureExtractorFunction",\n "FeatureImpactPlot",\n "FeatureNames",\n "FeatureNearest",\n "FeatureSpacePlot",\n "FeatureSpacePlot3D",\n "FeatureTypes",\n "FeatureValueDependencyPlot",\n "FeatureValueImpactPlot",\n "FEDisableConsolePrintPacket",\n "FeedbackLinearize",\n "FeedbackSector",\n "FeedbackSectorStyle",\n "FeedbackType",\n "FEEnableConsolePrintPacket",\n "FetalGrowthData",\n "Fibonacci",\n "Fibonorial",\n "FieldCompletionFunction",\n "FieldHint",\n "FieldHintStyle",\n "FieldMasked",\n "FieldSize",\n "File",\n "FileBaseName",\n "FileByteCount",\n "FileConvert",\n "FileDate",\n "FileExistsQ",\n "FileExtension",\n "FileFormat",\n "FileFormatProperties",\n "FileFormatQ",\n "FileHandler",\n "FileHash",\n "FileInformation",\n "FileName",\n "FileNameDepth",\n "FileNameDialogSettings",\n "FileNameDrop",\n "FileNameForms",\n "FileNameJoin",\n "FileNames",\n "FileNameSetter",\n "FileNameSplit",\n "FileNameTake",\n "FileNameToFormatList",\n "FilePrint",\n "FileSize",\n "FileSystemMap",\n "FileSystemScan",\n "FileSystemTree",\n "FileTemplate",\n "FileTemplateApply",\n "FileType",\n "FilledCurve",\n "FilledCurveBox",\n "FilledCurveBoxOptions",\n "FilledTorus",\n "FillForm",\n "Filling",\n "FillingStyle",\n "FillingTransform",\n "FilteredEntityClass",\n "FilterRules",\n "FinancialBond",\n "FinancialData",\n "FinancialDerivative",\n "FinancialIndicator",\n "Find",\n "FindAnomalies",\n "FindArgMax",\n "FindArgMin",\n "FindChannels",\n "FindClique",\n "FindClusters",\n "FindCookies",\n "FindCurvePath",\n "FindCycle",\n "FindDevices",\n "FindDistribution",\n "FindDistributionParameters",\n "FindDivisions",\n "FindEdgeColoring",\n "FindEdgeCover",\n "FindEdgeCut",\n "FindEdgeIndependentPaths",\n "FindEquationalProof",\n "FindEulerianCycle",\n "FindExternalEvaluators",\n "FindFaces",\n "FindFile",\n "FindFit",\n "FindFormula",\n "FindFundamentalCycles",\n "FindGeneratingFunction",\n "FindGeoLocation",\n "FindGeometricConjectures",\n "FindGeometricTransform",\n "FindGraphCommunities",\n "FindGraphIsomorphism",\n "FindGraphPartition",\n "FindHamiltonianCycle",\n "FindHamiltonianPath",\n "FindHiddenMarkovStates",\n "FindImageText",\n "FindIndependentEdgeSet",\n "FindIndependentVertexSet",\n "FindInstance",\n "FindIntegerNullVector",\n "FindIsomers",\n "FindIsomorphicSubgraph",\n "FindKClan",\n "FindKClique",\n "FindKClub",\n "FindKPlex",\n "FindLibrary",\n "FindLinearRecurrence",\n "FindList",\n "FindMatchingColor",\n "FindMaximum",\n "FindMaximumCut",\n "FindMaximumFlow",\n "FindMaxValue",\n "FindMeshDefects",\n "FindMinimum",\n "FindMinimumCostFlow",\n "FindMinimumCut",\n "FindMinValue",\n "FindMoleculeSubstructure",\n "FindPath",\n "FindPeaks",\n "FindPermutation",\n "FindPlanarColoring",\n "FindPointProcessParameters",\n "FindPostmanTour",\n "FindProcessParameters",\n "FindRegionTransform",\n "FindRepeat",\n "FindRoot",\n "FindSequenceFunction",\n "FindSettings",\n "FindShortestPath",\n "FindShortestTour",\n "FindSpanningTree",\n "FindSubgraphIsomorphism",\n "FindSystemModelEquilibrium",\n "FindTextualAnswer",\n "FindThreshold",\n "FindTransientRepeat",\n "FindVertexColoring",\n "FindVertexCover",\n "FindVertexCut",\n "FindVertexIndependentPaths",\n "Fine",\n "FinishDynamic",\n "FiniteAbelianGroupCount",\n "FiniteGroupCount",\n "FiniteGroupData",\n "First",\n "FirstCase",\n "FirstPassageTimeDistribution",\n "FirstPosition",\n "FischerGroupFi22",\n "FischerGroupFi23",\n "FischerGroupFi24Prime",\n "FisherHypergeometricDistribution",\n "FisherRatioTest",\n "FisherZDistribution",\n "Fit",\n "FitAll",\n "FitRegularization",\n "FittedModel",\n "FixedOrder",\n "FixedPoint",\n "FixedPointList",\n "FlashSelection",\n "Flat",\n "FlatShading",\n "Flatten",\n "FlattenAt",\n "FlattenLayer",\n "FlatTopWindow",\n "FlightData",\n "FlipView",\n "Floor",\n "FlowPolynomial",\n "Fold",\n "FoldList",\n "FoldPair",\n "FoldPairList",\n "FoldWhile",\n "FoldWhileList",\n "FollowRedirects",\n "Font",\n "FontColor",\n "FontFamily",\n "FontForm",\n "FontName",\n "FontOpacity",\n "FontPostScriptName",\n "FontProperties",\n "FontReencoding",\n "FontSize",\n "FontSlant",\n "FontSubstitutions",\n "FontTracking",\n "FontVariations",\n "FontWeight",\n "For",\n "ForAll",\n "ForAllType",\n "ForceVersionInstall",\n "Format",\n "FormatRules",\n "FormatType",\n "FormatTypeAutoConvert",\n "FormatValues",\n "FormBox",\n "FormBoxOptions",\n "FormControl",\n "FormFunction",\n "FormLayoutFunction",\n "FormObject",\n "FormPage",\n "FormProtectionMethod",\n "FormTheme",\n "FormulaData",\n "FormulaLookup",\n "FortranForm",\n "Forward",\n "ForwardBackward",\n "ForwardCloudCredentials",\n "Fourier",\n "FourierCoefficient",\n "FourierCosCoefficient",\n "FourierCosSeries",\n "FourierCosTransform",\n "FourierDCT",\n "FourierDCTFilter",\n "FourierDCTMatrix",\n "FourierDST",\n "FourierDSTMatrix",\n "FourierMatrix",\n "FourierParameters",\n "FourierSequenceTransform",\n "FourierSeries",\n "FourierSinCoefficient",\n "FourierSinSeries",\n "FourierSinTransform",\n "FourierTransform",\n "FourierTrigSeries",\n "FoxH",\n "FoxHReduce",\n "FractionalBrownianMotionProcess",\n "FractionalD",\n "FractionalGaussianNoiseProcess",\n "FractionalPart",\n "FractionBox",\n "FractionBoxOptions",\n "FractionLine",\n "Frame",\n "FrameBox",\n "FrameBoxOptions",\n "Framed",\n "FrameInset",\n "FrameLabel",\n "Frameless",\n "FrameListVideo",\n "FrameMargins",\n "FrameRate",\n "FrameStyle",\n "FrameTicks",\n "FrameTicksStyle",\n "FRatioDistribution",\n "FrechetDistribution",\n "FreeQ",\n "FrenetSerretSystem",\n "FrequencySamplingFilterKernel",\n "FresnelC",\n "FresnelF",\n "FresnelG",\n "FresnelS",\n "Friday",\n "FrobeniusNumber",\n "FrobeniusSolve",\n "FromAbsoluteTime",\n "FromCharacterCode",\n "FromCoefficientRules",\n "FromContinuedFraction",\n "FromDate",\n "FromDateString",\n "FromDigits",\n "FromDMS",\n "FromEntity",\n "FromJulianDate",\n "FromLetterNumber",\n "FromPolarCoordinates",\n "FromRawPointer",\n "FromRomanNumeral",\n "FromSphericalCoordinates",\n "FromUnixTime",\n "Front",\n "FrontEndDynamicExpression",\n "FrontEndEventActions",\n "FrontEndExecute",\n "FrontEndObject",\n "FrontEndResource",\n "FrontEndResourceString",\n "FrontEndStackSize",\n "FrontEndToken",\n "FrontEndTokenExecute",\n "FrontEndValueCache",\n "FrontEndVersion",\n "FrontFaceColor",\n "FrontFaceGlowColor",\n "FrontFaceOpacity",\n "FrontFaceSpecularColor",\n "FrontFaceSpecularExponent",\n "FrontFaceSurfaceAppearance",\n "FrontFaceTexture",\n "Full",\n "FullAxes",\n "FullDefinition",\n "FullForm",\n "FullGraphics",\n "FullInformationOutputRegulator",\n "FullOptions",\n "FullRegion",\n "FullSimplify",\n "Function",\n "FunctionAnalytic",\n "FunctionBijective",\n "FunctionCompile",\n "FunctionCompileExport",\n "FunctionCompileExportByteArray",\n "FunctionCompileExportLibrary",\n "FunctionCompileExportString",\n "FunctionContinuous",\n "FunctionConvexity",\n "FunctionDeclaration",\n "FunctionDiscontinuities",\n "FunctionDomain",\n "FunctionExpand",\n "FunctionInjective",\n "FunctionInterpolation",\n "FunctionLayer",\n "FunctionMeromorphic",\n "FunctionMonotonicity",\n "FunctionPeriod",\n "FunctionPoles",\n "FunctionRange",\n "FunctionSign",\n "FunctionSingularities",\n "FunctionSpace",\n "FunctionSurjective",\n "FussellVeselyImportance",\n "GaborFilter",\n "GaborMatrix",\n "GaborWavelet",\n "GainMargins",\n "GainPhaseMargins",\n "GalaxyData",\n "GalleryView",\n "Gamma",\n "GammaDistribution",\n "GammaRegularized",\n "GapPenalty",\n "GARCHProcess",\n "GatedRecurrentLayer",\n "Gather",\n "GatherBy",\n "GaugeFaceElementFunction",\n "GaugeFaceStyle",\n "GaugeFrameElementFunction",\n "GaugeFrameSize",\n "GaugeFrameStyle",\n "GaugeLabels",\n "GaugeMarkers",\n "GaugeStyle",\n "GaussianFilter",\n "GaussianIntegers",\n "GaussianMatrix",\n "GaussianOrthogonalMatrixDistribution",\n "GaussianSymplecticMatrixDistribution",\n "GaussianUnitaryMatrixDistribution",\n "GaussianWindow",\n "GCD",\n "GegenbauerC",\n "General",\n "GeneralizedLinearModelFit",\n "GenerateAsymmetricKeyPair",\n "GenerateConditions",\n "GeneratedAssetFormat",\n "GeneratedAssetLocation",\n "GeneratedCell",\n "GeneratedCellStyles",\n "GeneratedDocumentBinding",\n "GenerateDerivedKey",\n "GenerateDigitalSignature",\n "GenerateDocument",\n "GeneratedParameters",\n "GeneratedQuantityMagnitudes",\n "GenerateFileSignature",\n "GenerateHTTPResponse",\n "GenerateSecuredAuthenticationKey",\n "GenerateSymmetricKey",\n "GeneratingFunction",\n "GeneratorDescription",\n "GeneratorHistoryLength",\n "GeneratorOutputType",\n "Generic",\n "GenericCylindricalDecomposition",\n "GenomeData",\n "GenomeLookup",\n "GeoAntipode",\n "GeoArea",\n "GeoArraySize",\n "GeoBackground",\n "GeoBoundary",\n "GeoBoundingBox",\n "GeoBounds",\n "GeoBoundsRegion",\n "GeoBoundsRegionBoundary",\n "GeoBubbleChart",\n "GeoCenter",\n "GeoCircle",\n "GeoContourPlot",\n "GeoDensityPlot",\n "GeodesicClosing",\n "GeodesicDilation",\n "GeodesicErosion",\n "GeodesicOpening",\n "GeodesicPolyhedron",\n "GeoDestination",\n "GeodesyData",\n "GeoDirection",\n "GeoDisk",\n "GeoDisplacement",\n "GeoDistance",\n "GeoDistanceList",\n "GeoElevationData",\n "GeoEntities",\n "GeoGraphics",\n "GeoGraphPlot",\n "GeoGraphValuePlot",\n "GeogravityModelData",\n "GeoGridDirectionDifference",\n "GeoGridLines",\n "GeoGridLinesStyle",\n "GeoGridPosition",\n "GeoGridRange",\n "GeoGridRangePadding",\n "GeoGridUnitArea",\n "GeoGridUnitDistance",\n "GeoGridVector",\n "GeoGroup",\n "GeoHemisphere",\n "GeoHemisphereBoundary",\n "GeoHistogram",\n "GeoIdentify",\n "GeoImage",\n "GeoLabels",\n "GeoLength",\n "GeoListPlot",\n "GeoLocation",\n "GeologicalPeriodData",\n "GeomagneticModelData",\n "GeoMarker",\n "GeometricAssertion",\n "GeometricBrownianMotionProcess",\n "GeometricDistribution",\n "GeometricMean",\n "GeometricMeanFilter",\n "GeometricOptimization",\n "GeometricScene",\n "GeometricStep",\n "GeometricStylingRules",\n "GeometricTest",\n "GeometricTransformation",\n "GeometricTransformation3DBox",\n "GeometricTransformation3DBoxOptions",\n "GeometricTransformationBox",\n "GeometricTransformationBoxOptions",\n "GeoModel",\n "GeoNearest",\n "GeoOrientationData",\n "GeoPath",\n "GeoPolygon",\n "GeoPosition",\n "GeoPositionENU",\n "GeoPositionXYZ",\n "GeoProjection",\n "GeoProjectionData",\n "GeoRange",\n "GeoRangePadding",\n "GeoRegionValuePlot",\n "GeoResolution",\n "GeoScaleBar",\n "GeoServer",\n "GeoSmoothHistogram",\n "GeoStreamPlot",\n "GeoStyling",\n "GeoStylingImageFunction",\n "GeoVariant",\n "GeoVector",\n "GeoVectorENU",\n "GeoVectorPlot",\n "GeoVectorXYZ",\n "GeoVisibleRegion",\n "GeoVisibleRegionBoundary",\n "GeoWithinQ",\n "GeoZoomLevel",\n "GestureHandler",\n "GestureHandlerTag",\n "Get",\n "GetContext",\n "GetEnvironment",\n "GetFileName",\n "GetLinebreakInformationPacket",\n "GibbsPointProcess",\n "Glaisher",\n "GlobalClusteringCoefficient",\n "GlobalPreferences",\n "GlobalSession",\n "Glow",\n "GoldenAngle",\n "GoldenRatio",\n "GompertzMakehamDistribution",\n "GoochShading",\n "GoodmanKruskalGamma",\n "GoodmanKruskalGammaTest",\n "Goto",\n "GouraudShading",\n "Grad",\n "Gradient",\n "GradientFilter",\n "GradientFittedMesh",\n "GradientOrientationFilter",\n "GrammarApply",\n "GrammarRules",\n "GrammarToken",\n "Graph",\n "Graph3D",\n "GraphAssortativity",\n "GraphAutomorphismGroup",\n "GraphCenter",\n "GraphComplement",\n "GraphData",\n "GraphDensity",\n "GraphDiameter",\n "GraphDifference",\n "GraphDisjointUnion",\n "GraphDistance",\n "GraphDistanceMatrix",\n "GraphEmbedding",\n "GraphHighlight",\n "GraphHighlightStyle",\n "GraphHub",\n "Graphics",\n "Graphics3D",\n "Graphics3DBox",\n "Graphics3DBoxOptions",\n "GraphicsArray",\n "GraphicsBaseline",\n "GraphicsBox",\n "GraphicsBoxOptions",\n "GraphicsColor",\n "GraphicsColumn",\n "GraphicsComplex",\n "GraphicsComplex3DBox",\n "GraphicsComplex3DBoxOptions",\n "GraphicsComplexBox",\n "GraphicsComplexBoxOptions",\n "GraphicsContents",\n "GraphicsData",\n "GraphicsGrid",\n "GraphicsGridBox",\n "GraphicsGroup",\n "GraphicsGroup3DBox",\n "GraphicsGroup3DBoxOptions",\n "GraphicsGroupBox",\n "GraphicsGroupBoxOptions",\n "GraphicsGrouping",\n "GraphicsHighlightColor",\n "GraphicsRow",\n "GraphicsSpacing",\n "GraphicsStyle",\n "GraphIntersection",\n "GraphJoin",\n "GraphLayerLabels",\n "GraphLayers",\n "GraphLayerStyle",\n "GraphLayout",\n "GraphLinkEfficiency",\n "GraphPeriphery",\n "GraphPlot",\n "GraphPlot3D",\n "GraphPower",\n "GraphProduct",\n "GraphPropertyDistribution",\n "GraphQ",\n "GraphRadius",\n "GraphReciprocity",\n "GraphRoot",\n "GraphStyle",\n "GraphSum",\n "GraphTree",\n "GraphUnion",\n "Gray",\n "GrayLevel",\n "Greater",\n "GreaterEqual",\n "GreaterEqualLess",\n "GreaterEqualThan",\n "GreaterFullEqual",\n "GreaterGreater",\n "GreaterLess",\n "GreaterSlantEqual",\n "GreaterThan",\n "GreaterTilde",\n "GreekStyle",\n "Green",\n "GreenFunction",\n "Grid",\n "GridBaseline",\n "GridBox",\n "GridBoxAlignment",\n "GridBoxBackground",\n "GridBoxDividers",\n "GridBoxFrame",\n "GridBoxItemSize",\n "GridBoxItemStyle",\n "GridBoxOptions",\n "GridBoxSpacings",\n "GridCreationSettings",\n "GridDefaultElement",\n "GridElementStyleOptions",\n "GridFrame",\n "GridFrameMargins",\n "GridGraph",\n "GridLines",\n "GridLinesStyle",\n "GridVideo",\n "GroebnerBasis",\n "GroupActionBase",\n "GroupBy",\n "GroupCentralizer",\n "GroupElementFromWord",\n "GroupElementPosition",\n "GroupElementQ",\n "GroupElements",\n "GroupElementToWord",\n "GroupGenerators",\n "Groupings",\n "GroupMultiplicationTable",\n "GroupOpenerColor",\n "GroupOpenerInsideFrame",\n "GroupOrbits",\n "GroupOrder",\n "GroupPageBreakWithin",\n "GroupSetwiseStabilizer",\n "GroupStabilizer",\n "GroupStabilizerChain",\n "GroupTogetherGrouping",\n "GroupTogetherNestedGrouping",\n "GrowCutComponents",\n "Gudermannian",\n "GuidedFilter",\n "GumbelDistribution",\n "HaarWavelet",\n "HadamardMatrix",\n "HalfLine",\n "HalfNormalDistribution",\n "HalfPlane",\n "HalfSpace",\n "HalftoneShading",\n "HamiltonianGraphQ",\n "HammingDistance",\n "HammingWindow",\n "HandlerFunctions",\n "HandlerFunctionsKeys",\n "HankelH1",\n "HankelH2",\n "HankelMatrix",\n "HankelTransform",\n "HannPoissonWindow",\n "HannWindow",\n "HaradaNortonGroupHN",\n "HararyGraph",\n "HardcorePointProcess",\n "HarmonicMean",\n "HarmonicMeanFilter",\n "HarmonicNumber",\n "Hash",\n "HatchFilling",\n "HatchShading",\n "Haversine",\n "HazardFunction",\n "Head",\n "HeadCompose",\n "HeaderAlignment",\n "HeaderBackground",\n "HeaderDisplayFunction",\n "HeaderLines",\n "Headers",\n "HeaderSize",\n "HeaderStyle",\n "Heads",\n "HeatFluxValue",\n "HeatInsulationValue",\n "HeatOutflowValue",\n "HeatRadiationValue",\n "HeatSymmetryValue",\n "HeatTemperatureCondition",\n "HeatTransferPDEComponent",\n "HeatTransferValue",\n "HeavisideLambda",\n "HeavisidePi",\n "HeavisideTheta",\n "HeldGroupHe",\n "HeldPart",\n "HelmholtzPDEComponent",\n "HelpBrowserLookup",\n "HelpBrowserNotebook",\n "HelpBrowserSettings",\n "HelpViewerSettings",\n "Here",\n "HermiteDecomposition",\n "HermiteH",\n "Hermitian",\n "HermitianMatrixQ",\n "HessenbergDecomposition",\n "Hessian",\n "HeunB",\n "HeunBPrime",\n "HeunC",\n "HeunCPrime",\n "HeunD",\n "HeunDPrime",\n "HeunG",\n "HeunGPrime",\n "HeunT",\n "HeunTPrime",\n "HexadecimalCharacter",\n "Hexahedron",\n "HexahedronBox",\n "HexahedronBoxOptions",\n "HiddenItems",\n "HiddenMarkovProcess",\n "HiddenSurface",\n "Highlighted",\n "HighlightGraph",\n "HighlightImage",\n "HighlightMesh",\n "HighlightString",\n "HighpassFilter",\n "HigmanSimsGroupHS",\n "HilbertCurve",\n "HilbertFilter",\n "HilbertMatrix",\n "Histogram",\n "Histogram3D",\n "HistogramDistribution",\n "HistogramList",\n "HistogramPointDensity",\n "HistogramTransform",\n "HistogramTransformInterpolation",\n "HistoricalPeriodData",\n "HitMissTransform",\n "HITSCentrality",\n "HjorthDistribution",\n "HodgeDual",\n "HoeffdingD",\n "HoeffdingDTest",\n "Hold",\n "HoldAll",\n "HoldAllComplete",\n "HoldComplete",\n "HoldFirst",\n "HoldForm",\n "HoldPattern",\n "HoldRest",\n "HolidayCalendar",\n "HomeDirectory",\n "HomePage",\n "Horizontal",\n "HorizontalForm",\n "HorizontalGauge",\n "HorizontalScrollPosition",\n "HornerForm",\n "HostLookup",\n "HotellingTSquareDistribution",\n "HoytDistribution",\n "HTMLSave",\n "HTTPErrorResponse",\n "HTTPRedirect",\n "HTTPRequest",\n "HTTPRequestData",\n "HTTPResponse",\n "Hue",\n "HumanGrowthData",\n "HumpDownHump",\n "HumpEqual",\n "HurwitzLerchPhi",\n "HurwitzZeta",\n "HyperbolicDistribution",\n "HypercubeGraph",\n "HyperexponentialDistribution",\n "Hyperfactorial",\n "Hypergeometric0F1",\n "Hypergeometric0F1Regularized",\n "Hypergeometric1F1",\n "Hypergeometric1F1Regularized",\n "Hypergeometric2F1",\n "Hypergeometric2F1Regularized",\n "HypergeometricDistribution",\n "HypergeometricPFQ",\n "HypergeometricPFQRegularized",\n "HypergeometricU",\n "Hyperlink",\n "HyperlinkAction",\n "HyperlinkCreationSettings",\n "Hyperplane",\n "Hyphenation",\n "HyphenationOptions",\n "HypoexponentialDistribution",\n "HypothesisTestData",\n "I",\n "IconData",\n "Iconize",\n "IconizedObject",\n "IconRules",\n "Icosahedron",\n "Identity",\n "IdentityMatrix",\n "If",\n "IfCompiled",\n "IgnoreCase",\n "IgnoreDiacritics",\n "IgnoreIsotopes",\n "IgnorePunctuation",\n "IgnoreSpellCheck",\n "IgnoreStereochemistry",\n "IgnoringInactive",\n "Im",\n "Image",\n "Image3D",\n "Image3DProjection",\n "Image3DSlices",\n "ImageAccumulate",\n "ImageAdd",\n "ImageAdjust",\n "ImageAlign",\n "ImageApply",\n "ImageApplyIndexed",\n "ImageAspectRatio",\n "ImageAssemble",\n "ImageAugmentationLayer",\n "ImageBoundingBoxes",\n "ImageCache",\n "ImageCacheValid",\n "ImageCapture",\n "ImageCaptureFunction",\n "ImageCases",\n "ImageChannels",\n "ImageClip",\n "ImageCollage",\n "ImageColorSpace",\n "ImageCompose",\n "ImageContainsQ",\n "ImageContents",\n "ImageConvolve",\n "ImageCooccurrence",\n "ImageCorners",\n "ImageCorrelate",\n "ImageCorrespondingPoints",\n "ImageCrop",\n "ImageData",\n "ImageDeconvolve",\n "ImageDemosaic",\n "ImageDifference",\n "ImageDimensions",\n "ImageDisplacements",\n "ImageDistance",\n "ImageEditMode",\n "ImageEffect",\n "ImageExposureCombine",\n "ImageFeatureTrack",\n "ImageFileApply",\n "ImageFileFilter",\n "ImageFileScan",\n "ImageFilter",\n "ImageFocusCombine",\n "ImageForestingComponents",\n "ImageFormattingWidth",\n "ImageForwardTransformation",\n "ImageGraphics",\n "ImageHistogram",\n "ImageIdentify",\n "ImageInstanceQ",\n "ImageKeypoints",\n "ImageLabels",\n "ImageLegends",\n "ImageLevels",\n "ImageLines",\n "ImageMargins",\n "ImageMarker",\n "ImageMarkers",\n "ImageMeasurements",\n "ImageMesh",\n "ImageMultiply",\n "ImageOffset",\n "ImagePad",\n "ImagePadding",\n "ImagePartition",\n "ImagePeriodogram",\n "ImagePerspectiveTransformation",\n "ImagePosition",\n "ImagePreviewFunction",\n "ImagePyramid",\n "ImagePyramidApply",\n "ImageQ",\n "ImageRangeCache",\n "ImageRecolor",\n "ImageReflect",\n "ImageRegion",\n "ImageResize",\n "ImageResolution",\n "ImageRestyle",\n "ImageRotate",\n "ImageRotated",\n "ImageSaliencyFilter",\n "ImageScaled",\n "ImageScan",\n "ImageSize",\n "ImageSizeAction",\n "ImageSizeCache",\n "ImageSizeMultipliers",\n "ImageSizeRaw",\n "ImageStitch",\n "ImageSubtract",\n "ImageTake",\n "ImageTransformation",\n "ImageTrim",\n "ImageType",\n "ImageValue",\n "ImageValuePositions",\n "ImageVectorscopePlot",\n "ImageWaveformPlot",\n "ImagingDevice",\n "ImplicitD",\n "ImplicitRegion",\n "Implies",\n "Import",\n "ImportAutoReplacements",\n "ImportByteArray",\n "ImportedObject",\n "ImportOptions",\n "ImportString",\n "ImprovementImportance",\n "In",\n "Inactivate",\n "Inactive",\n "InactiveStyle",\n "IncidenceGraph",\n "IncidenceList",\n "IncidenceMatrix",\n "IncludeAromaticBonds",\n "IncludeConstantBasis",\n "IncludedContexts",\n "IncludeDefinitions",\n "IncludeDirectories",\n "IncludeFileExtension",\n "IncludeGeneratorTasks",\n "IncludeHydrogens",\n "IncludeInflections",\n "IncludeMetaInformation",\n "IncludePods",\n "IncludeQuantities",\n "IncludeRelatedTables",\n "IncludeSingularSolutions",\n "IncludeSingularTerm",\n "IncludeWindowTimes",\n "Increment",\n "IndefiniteMatrixQ",\n "Indent",\n "IndentingNewlineSpacings",\n "IndentMaxFraction",\n "IndependenceTest",\n "IndependentEdgeSetQ",\n "IndependentPhysicalQuantity",\n "IndependentUnit",\n "IndependentUnitDimension",\n "IndependentVertexSetQ",\n "Indeterminate",\n "IndeterminateThreshold",\n "IndexCreationOptions",\n "Indexed",\n "IndexEdgeTaggedGraph",\n "IndexGraph",\n "IndexTag",\n "Inequality",\n "InertEvaluate",\n "InertExpression",\n "InexactNumberQ",\n "InexactNumbers",\n "InfiniteFuture",\n "InfiniteLine",\n "InfiniteLineThrough",\n "InfinitePast",\n "InfinitePlane",\n "Infinity",\n "Infix",\n "InflationAdjust",\n "InflationMethod",\n "Information",\n "InformationData",\n "InformationDataGrid",\n "Inherited",\n "InheritScope",\n "InhomogeneousPoissonPointProcess",\n "InhomogeneousPoissonProcess",\n "InitialEvaluationHistory",\n "Initialization",\n "InitializationCell",\n "InitializationCellEvaluation",\n "InitializationCellWarning",\n "InitializationObject",\n "InitializationObjects",\n "InitializationValue",\n "Initialize",\n "InitialSeeding",\n "InlineCounterAssignments",\n "InlineCounterIncrements",\n "InlineRules",\n "Inner",\n "InnerPolygon",\n "InnerPolyhedron",\n "Inpaint",\n "Input",\n "InputAliases",\n "InputAssumptions",\n "InputAutoReplacements",\n "InputField",\n "InputFieldBox",\n "InputFieldBoxOptions",\n "InputForm",\n "InputGrouping",\n "InputNamePacket",\n "InputNotebook",\n "InputPacket",\n "InputPorts",\n "InputSettings",\n "InputStream",\n "InputString",\n "InputStringPacket",\n "InputToBoxFormPacket",\n "Insert",\n "InsertionFunction",\n "InsertionPointObject",\n "InsertLinebreaks",\n "InsertResults",\n "Inset",\n "Inset3DBox",\n "Inset3DBoxOptions",\n "InsetBox",\n "InsetBoxOptions",\n "Insphere",\n "Install",\n "InstallService",\n "InstanceNormalizationLayer",\n "InString",\n "Integer",\n "IntegerDigits",\n "IntegerExponent",\n "IntegerLength",\n "IntegerName",\n "IntegerPart",\n "IntegerPartitions",\n "IntegerQ",\n "IntegerReverse",\n "Integers",\n "IntegerString",\n "Integral",\n "Integrate",\n "IntegrateChangeVariables",\n "Interactive",\n "InteractiveTradingChart",\n "InterfaceSwitched",\n "Interlaced",\n "Interleaving",\n "InternallyBalancedDecomposition",\n "InterpolatingFunction",\n "InterpolatingPolynomial",\n "Interpolation",\n "InterpolationOrder",\n "InterpolationPoints",\n "InterpolationPrecision",\n "Interpretation",\n "InterpretationBox",\n "InterpretationBoxOptions",\n "InterpretationFunction",\n "Interpreter",\n "InterpretTemplate",\n "InterquartileRange",\n "Interrupt",\n "InterruptSettings",\n "IntersectedEntityClass",\n "IntersectingQ",\n "Intersection",\n "Interval",\n "IntervalIntersection",\n "IntervalMarkers",\n "IntervalMarkersStyle",\n "IntervalMemberQ",\n "IntervalSlider",\n "IntervalUnion",\n "Into",\n "Inverse",\n "InverseBetaRegularized",\n "InverseBilateralLaplaceTransform",\n "InverseBilateralZTransform",\n "InverseCDF",\n "InverseChiSquareDistribution",\n "InverseContinuousWaveletTransform",\n "InverseDistanceTransform",\n "InverseEllipticNomeQ",\n "InverseErf",\n "InverseErfc",\n "InverseFourier",\n "InverseFourierCosTransform",\n "InverseFourierSequenceTransform",\n "InverseFourierSinTransform",\n "InverseFourierTransform",\n "InverseFunction",\n "InverseFunctions",\n "InverseGammaDistribution",\n "InverseGammaRegularized",\n "InverseGaussianDistribution",\n "InverseGudermannian",\n "InverseHankelTransform",\n "InverseHaversine",\n "InverseImagePyramid",\n "InverseJacobiCD",\n "InverseJacobiCN",\n "InverseJacobiCS",\n "InverseJacobiDC",\n "InverseJacobiDN",\n "InverseJacobiDS",\n "InverseJacobiNC",\n "InverseJacobiND",\n "InverseJacobiNS",\n "InverseJacobiSC",\n "InverseJacobiSD",\n "InverseJacobiSN",\n "InverseLaplaceTransform",\n "InverseMellinTransform",\n "InversePermutation",\n "InverseRadon",\n "InverseRadonTransform",\n "InverseSeries",\n "InverseShortTimeFourier",\n "InverseSpectrogram",\n "InverseSurvivalFunction",\n "InverseTransformedRegion",\n "InverseWaveletTransform",\n "InverseWeierstrassP",\n "InverseWishartMatrixDistribution",\n "InverseZTransform",\n "Invisible",\n "InvisibleApplication",\n "InvisibleTimes",\n "IPAddress",\n "IrreduciblePolynomialQ",\n "IslandData",\n "IsolatingInterval",\n "IsomorphicGraphQ",\n "IsomorphicSubgraphQ",\n "IsotopeData",\n "Italic",\n "Item",\n "ItemAspectRatio",\n "ItemBox",\n "ItemBoxOptions",\n "ItemDisplayFunction",\n "ItemSize",\n "ItemStyle",\n "ItoProcess",\n "JaccardDissimilarity",\n "JacobiAmplitude",\n "Jacobian",\n "JacobiCD",\n "JacobiCN",\n "JacobiCS",\n "JacobiDC",\n "JacobiDN",\n "JacobiDS",\n "JacobiEpsilon",\n "JacobiNC",\n "JacobiND",\n "JacobiNS",\n "JacobiP",\n "JacobiSC",\n "JacobiSD",\n "JacobiSN",\n "JacobiSymbol",\n "JacobiZeta",\n "JacobiZN",\n "JankoGroupJ1",\n "JankoGroupJ2",\n "JankoGroupJ3",\n "JankoGroupJ4",\n "JarqueBeraALMTest",\n "JohnsonDistribution",\n "Join",\n "JoinAcross",\n "Joined",\n "JoinedCurve",\n "JoinedCurveBox",\n "JoinedCurveBoxOptions",\n "JoinForm",\n "JordanDecomposition",\n "JordanModelDecomposition",\n "JulianDate",\n "JuliaSetBoettcher",\n "JuliaSetIterationCount",\n "JuliaSetPlot",\n "JuliaSetPoints",\n "K",\n "KagiChart",\n "KaiserBesselWindow",\n "KaiserWindow",\n "KalmanEstimator",\n "KalmanFilter",\n "KarhunenLoeveDecomposition",\n "KaryTree",\n "KatzCentrality",\n "KCoreComponents",\n "KDistribution",\n "KEdgeConnectedComponents",\n "KEdgeConnectedGraphQ",\n "KeepExistingVersion",\n "KelvinBei",\n "KelvinBer",\n "KelvinKei",\n "KelvinKer",\n "KendallTau",\n "KendallTauTest",\n "KernelConfiguration",\n "KernelExecute",\n "KernelFunction",\n "KernelMixtureDistribution",\n "KernelObject",\n "Kernels",\n "Ket",\n "Key",\n "KeyCollisionFunction",\n "KeyComplement",\n "KeyDrop",\n "KeyDropFrom",\n "KeyExistsQ",\n "KeyFreeQ",\n "KeyIntersection",\n "KeyMap",\n "KeyMemberQ",\n "KeypointStrength",\n "Keys",\n "KeySelect",\n "KeySort",\n "KeySortBy",\n "KeyTake",\n "KeyUnion",\n "KeyValueMap",\n "KeyValuePattern",\n "Khinchin",\n "KillProcess",\n "KirchhoffGraph",\n "KirchhoffMatrix",\n "KleinInvariantJ",\n "KnapsackSolve",\n "KnightTourGraph",\n "KnotData",\n "KnownUnitQ",\n "KochCurve",\n "KolmogorovSmirnovTest",\n "KroneckerDelta",\n "KroneckerModelDecomposition",\n "KroneckerProduct",\n "KroneckerSymbol",\n "KuiperTest",\n "KumaraswamyDistribution",\n "Kurtosis",\n "KuwaharaFilter",\n "KVertexConnectedComponents",\n "KVertexConnectedGraphQ",\n "LABColor",\n "Label",\n "Labeled",\n "LabeledSlider",\n "LabelingFunction",\n "LabelingSize",\n "LabelStyle",\n "LabelVisibility",\n "LaguerreL",\n "LakeData",\n "LambdaComponents",\n "LambertW",\n "LameC",\n "LameCPrime",\n "LameEigenvalueA",\n "LameEigenvalueB",\n "LameS",\n "LameSPrime",\n "LaminaData",\n "LanczosWindow",\n "LandauDistribution",\n "Language",\n "LanguageCategory",\n "LanguageData",\n "LanguageIdentify",\n "LanguageOptions",\n "LaplaceDistribution",\n "LaplaceTransform",\n "Laplacian",\n "LaplacianFilter",\n "LaplacianGaussianFilter",\n "LaplacianPDETerm",\n "Large",\n "Larger",\n "Last",\n "Latitude",\n "LatitudeLongitude",\n "LatticeData",\n "LatticeReduce",\n "Launch",\n "LaunchKernels",\n "LayeredGraphPlot",\n "LayeredGraphPlot3D",\n "LayerSizeFunction",\n "LayoutInformation",\n "LCHColor",\n "LCM",\n "LeaderSize",\n "LeafCount",\n "LeapVariant",\n "LeapYearQ",\n "LearnDistribution",\n "LearnedDistribution",\n "LearningRate",\n "LearningRateMultipliers",\n "LeastSquares",\n "LeastSquaresFilterKernel",\n "Left",\n "LeftArrow",\n "LeftArrowBar",\n "LeftArrowRightArrow",\n "LeftDownTeeVector",\n "LeftDownVector",\n "LeftDownVectorBar",\n "LeftRightArrow",\n "LeftRightVector",\n "LeftTee",\n "LeftTeeArrow",\n "LeftTeeVector",\n "LeftTriangle",\n "LeftTriangleBar",\n "LeftTriangleEqual",\n "LeftUpDownVector",\n "LeftUpTeeVector",\n "LeftUpVector",\n "LeftUpVectorBar",\n "LeftVector",\n "LeftVectorBar",\n "LegendAppearance",\n "Legended",\n "LegendFunction",\n "LegendLabel",\n "LegendLayout",\n "LegendMargins",\n "LegendMarkers",\n "LegendMarkerSize",\n "LegendreP",\n "LegendreQ",\n "LegendreType",\n "Length",\n "LengthWhile",\n "LerchPhi",\n "Less",\n "LessEqual",\n "LessEqualGreater",\n "LessEqualThan",\n "LessFullEqual",\n "LessGreater",\n "LessLess",\n "LessSlantEqual",\n "LessThan",\n "LessTilde",\n "LetterCharacter",\n "LetterCounts",\n "LetterNumber",\n "LetterQ",\n "Level",\n "LeveneTest",\n "LeviCivitaTensor",\n "LevyDistribution",\n "Lexicographic",\n "LexicographicOrder",\n "LexicographicSort",\n "LibraryDataType",\n "LibraryFunction",\n "LibraryFunctionDeclaration",\n "LibraryFunctionError",\n "LibraryFunctionInformation",\n "LibraryFunctionLoad",\n "LibraryFunctionUnload",\n "LibraryLoad",\n "LibraryUnload",\n "LicenseEntitlementObject",\n "LicenseEntitlements",\n "LicenseID",\n "LicensingSettings",\n "LiftingFilterData",\n "LiftingWaveletTransform",\n "LightBlue",\n "LightBrown",\n "LightCyan",\n "Lighter",\n "LightGray",\n "LightGreen",\n "Lighting",\n "LightingAngle",\n "LightMagenta",\n "LightOrange",\n "LightPink",\n "LightPurple",\n "LightRed",\n "LightSources",\n "LightYellow",\n "Likelihood",\n "Limit",\n "LimitsPositioning",\n "LimitsPositioningTokens",\n "LindleyDistribution",\n "Line",\n "Line3DBox",\n "Line3DBoxOptions",\n "LinearFilter",\n "LinearFractionalOptimization",\n "LinearFractionalTransform",\n "LinearGradientFilling",\n "LinearGradientImage",\n "LinearizingTransformationData",\n "LinearLayer",\n "LinearModelFit",\n "LinearOffsetFunction",\n "LinearOptimization",\n "LinearProgramming",\n "LinearRecurrence",\n "LinearSolve",\n "LinearSolveFunction",\n "LineBox",\n "LineBoxOptions",\n "LineBreak",\n "LinebreakAdjustments",\n "LineBreakChart",\n "LinebreakSemicolonWeighting",\n "LineBreakWithin",\n "LineColor",\n "LineGraph",\n "LineIndent",\n "LineIndentMaxFraction",\n "LineIntegralConvolutionPlot",\n "LineIntegralConvolutionScale",\n "LineLegend",\n "LineOpacity",\n "LineSpacing",\n "LineWrapParts",\n "LinkActivate",\n "LinkClose",\n "LinkConnect",\n "LinkConnectedQ",\n "LinkCreate",\n "LinkError",\n "LinkFlush",\n "LinkFunction",\n "LinkHost",\n "LinkInterrupt",\n "LinkLaunch",\n "LinkMode",\n "LinkObject",\n "LinkOpen",\n "LinkOptions",\n "LinkPatterns",\n "LinkProtocol",\n "LinkRankCentrality",\n "LinkRead",\n "LinkReadHeld",\n "LinkReadyQ",\n "Links",\n "LinkService",\n "LinkWrite",\n "LinkWriteHeld",\n "LiouvilleLambda",\n "List",\n "Listable",\n "ListAnimate",\n "ListContourPlot",\n "ListContourPlot3D",\n "ListConvolve",\n "ListCorrelate",\n "ListCurvePathPlot",\n "ListDeconvolve",\n "ListDensityPlot",\n "ListDensityPlot3D",\n "Listen",\n "ListFormat",\n "ListFourierSequenceTransform",\n "ListInterpolation",\n "ListLineIntegralConvolutionPlot",\n "ListLinePlot",\n "ListLinePlot3D",\n "ListLogLinearPlot",\n "ListLogLogPlot",\n "ListLogPlot",\n "ListPicker",\n "ListPickerBox",\n "ListPickerBoxBackground",\n "ListPickerBoxOptions",\n "ListPlay",\n "ListPlot",\n "ListPlot3D",\n "ListPointPlot3D",\n "ListPolarPlot",\n "ListQ",\n "ListSliceContourPlot3D",\n "ListSliceDensityPlot3D",\n "ListSliceVectorPlot3D",\n "ListStepPlot",\n "ListStreamDensityPlot",\n "ListStreamPlot",\n "ListStreamPlot3D",\n "ListSurfacePlot3D",\n "ListVectorDensityPlot",\n "ListVectorDisplacementPlot",\n "ListVectorDisplacementPlot3D",\n "ListVectorPlot",\n "ListVectorPlot3D",\n "ListZTransform",\n "Literal",\n "LiteralSearch",\n "LiteralType",\n "LoadCompiledComponent",\n "LocalAdaptiveBinarize",\n "LocalCache",\n "LocalClusteringCoefficient",\n "LocalEvaluate",\n "LocalizeDefinitions",\n "LocalizeVariables",\n "LocalObject",\n "LocalObjects",\n "LocalResponseNormalizationLayer",\n "LocalSubmit",\n "LocalSymbol",\n "LocalTime",\n "LocalTimeZone",\n "LocationEquivalenceTest",\n "LocationTest",\n "Locator",\n "LocatorAutoCreate",\n "LocatorBox",\n "LocatorBoxOptions",\n "LocatorCentering",\n "LocatorPane",\n "LocatorPaneBox",\n "LocatorPaneBoxOptions",\n "LocatorRegion",\n "Locked",\n "Log",\n "Log10",\n "Log2",\n "LogBarnesG",\n "LogGamma",\n "LogGammaDistribution",\n "LogicalExpand",\n "LogIntegral",\n "LogisticDistribution",\n "LogisticSigmoid",\n "LogitModelFit",\n "LogLikelihood",\n "LogLinearPlot",\n "LogLogisticDistribution",\n "LogLogPlot",\n "LogMultinormalDistribution",\n "LogNormalDistribution",\n "LogPlot",\n "LogRankTest",\n "LogSeriesDistribution",\n "LongEqual",\n "Longest",\n "LongestCommonSequence",\n "LongestCommonSequencePositions",\n "LongestCommonSubsequence",\n "LongestCommonSubsequencePositions",\n "LongestMatch",\n "LongestOrderedSequence",\n "LongForm",\n "Longitude",\n "LongLeftArrow",\n "LongLeftRightArrow",\n "LongRightArrow",\n "LongShortTermMemoryLayer",\n "Lookup",\n "Loopback",\n "LoopFreeGraphQ",\n "Looping",\n "LossFunction",\n "LowerCaseQ",\n "LowerLeftArrow",\n "LowerRightArrow",\n "LowerTriangularize",\n "LowerTriangularMatrix",\n "LowerTriangularMatrixQ",\n "LowpassFilter",\n "LQEstimatorGains",\n "LQGRegulator",\n "LQOutputRegulatorGains",\n "LQRegulatorGains",\n "LUBackSubstitution",\n "LucasL",\n "LuccioSamiComponents",\n "LUDecomposition",\n "LunarEclipse",\n "LUVColor",\n "LyapunovSolve",\n "LyonsGroupLy",\n "MachineID",\n "MachineName",\n "MachineNumberQ",\n "MachinePrecision",\n "MacintoshSystemPageSetup",\n "Magenta",\n "Magnification",\n "Magnify",\n "MailAddressValidation",\n "MailExecute",\n "MailFolder",\n "MailItem",\n "MailReceiverFunction",\n "MailResponseFunction",\n "MailSearch",\n "MailServerConnect",\n "MailServerConnection",\n "MailSettings",\n "MainSolve",\n "MaintainDynamicCaches",\n "Majority",\n "MakeBoxes",\n "MakeExpression",\n "MakeRules",\n "ManagedLibraryExpressionID",\n "ManagedLibraryExpressionQ",\n "MandelbrotSetBoettcher",\n "MandelbrotSetDistance",\n "MandelbrotSetIterationCount",\n "MandelbrotSetMemberQ",\n "MandelbrotSetPlot",\n "MangoldtLambda",\n "ManhattanDistance",\n "Manipulate",\n "Manipulator",\n "MannedSpaceMissionData",\n "MannWhitneyTest",\n "MantissaExponent",\n "Manual",\n "Map",\n "MapAll",\n "MapApply",\n "MapAt",\n "MapIndexed",\n "MAProcess",\n "MapThread",\n "MarchenkoPasturDistribution",\n "MarcumQ",\n "MardiaCombinedTest",\n "MardiaKurtosisTest",\n "MardiaSkewnessTest",\n "MarginalDistribution",\n "MarkovProcessProperties",\n "Masking",\n "MassConcentrationCondition",\n "MassFluxValue",\n "MassImpermeableBoundaryValue",\n "MassOutflowValue",\n "MassSymmetryValue",\n "MassTransferValue",\n "MassTransportPDEComponent",\n "MatchingDissimilarity",\n "MatchLocalNameQ",\n "MatchLocalNames",\n "MatchQ",\n "Material",\n "MaterialShading",\n "MaternPointProcess",\n "MathematicalFunctionData",\n "MathematicaNotation",\n "MathieuC",\n "MathieuCharacteristicA",\n "MathieuCharacteristicB",\n "MathieuCharacteristicExponent",\n "MathieuCPrime",\n "MathieuGroupM11",\n "MathieuGroupM12",\n "MathieuGroupM22",\n "MathieuGroupM23",\n "MathieuGroupM24",\n "MathieuS",\n "MathieuSPrime",\n "MathMLForm",\n "MathMLText",\n "Matrices",\n "MatrixExp",\n "MatrixForm",\n "MatrixFunction",\n "MatrixLog",\n "MatrixNormalDistribution",\n "MatrixPlot",\n "MatrixPower",\n "MatrixPropertyDistribution",\n "MatrixQ",\n "MatrixRank",\n "MatrixTDistribution",\n "Max",\n "MaxBend",\n "MaxCellMeasure",\n "MaxColorDistance",\n "MaxDate",\n "MaxDetect",\n "MaxDisplayedChildren",\n "MaxDuration",\n "MaxExtraBandwidths",\n "MaxExtraConditions",\n "MaxFeatureDisplacement",\n "MaxFeatures",\n "MaxFilter",\n "MaximalBy",\n "Maximize",\n "MaxItems",\n "MaxIterations",\n "MaxLimit",\n "MaxMemoryUsed",\n "MaxMixtureKernels",\n "MaxOverlapFraction",\n "MaxPlotPoints",\n "MaxPoints",\n "MaxRecursion",\n "MaxStableDistribution",\n "MaxStepFraction",\n "MaxSteps",\n "MaxStepSize",\n "MaxTrainingRounds",\n "MaxValue",\n "MaxwellDistribution",\n "MaxWordGap",\n "McLaughlinGroupMcL",\n "Mean",\n "MeanAbsoluteLossLayer",\n "MeanAround",\n "MeanClusteringCoefficient",\n "MeanDegreeConnectivity",\n "MeanDeviation",\n "MeanFilter",\n "MeanGraphDistance",\n "MeanNeighborDegree",\n "MeanPointDensity",\n "MeanShift",\n "MeanShiftFilter",\n "MeanSquaredLossLayer",\n "Median",\n "MedianDeviation",\n "MedianFilter",\n "MedicalTestData",\n "Medium",\n "MeijerG",\n "MeijerGReduce",\n "MeixnerDistribution",\n "MellinConvolve",\n "MellinTransform",\n "MemberQ",\n "MemoryAvailable",\n "MemoryConstrained",\n "MemoryConstraint",\n "MemoryInUse",\n "MengerMesh",\n "Menu",\n "MenuAppearance",\n "MenuCommandKey",\n "MenuEvaluator",\n "MenuItem",\n "MenuList",\n "MenuPacket",\n "MenuSortingValue",\n "MenuStyle",\n "MenuView",\n "Merge",\n "MergeDifferences",\n "MergingFunction",\n "MersennePrimeExponent",\n "MersennePrimeExponentQ",\n "Mesh",\n "MeshCellCentroid",\n "MeshCellCount",\n "MeshCellHighlight",\n "MeshCellIndex",\n "MeshCellLabel",\n "MeshCellMarker",\n "MeshCellMeasure",\n "MeshCellQuality",\n "MeshCells",\n "MeshCellShapeFunction",\n "MeshCellStyle",\n "MeshConnectivityGraph",\n "MeshCoordinates",\n "MeshFunctions",\n "MeshPrimitives",\n "MeshQualityGoal",\n "MeshRange",\n "MeshRefinementFunction",\n "MeshRegion",\n "MeshRegionQ",\n "MeshShading",\n "MeshStyle",\n "Message",\n "MessageDialog",\n "MessageList",\n "MessageName",\n "MessageObject",\n "MessageOptions",\n "MessagePacket",\n "Messages",\n "MessagesNotebook",\n "MetaCharacters",\n "MetaInformation",\n "MeteorShowerData",\n "Method",\n "MethodOptions",\n "MexicanHatWavelet",\n "MeyerWavelet",\n "Midpoint",\n "MIMETypeToFormatList",\n "Min",\n "MinColorDistance",\n "MinDate",\n "MinDetect",\n "MineralData",\n "MinFilter",\n "MinimalBy",\n "MinimalPolynomial",\n "MinimalStateSpaceModel",\n "Minimize",\n "MinimumTimeIncrement",\n "MinIntervalSize",\n "MinkowskiQuestionMark",\n "MinLimit",\n "MinMax",\n "MinorPlanetData",\n "Minors",\n "MinPointSeparation",\n "MinRecursion",\n "MinSize",\n "MinStableDistribution",\n "Minus",\n "MinusPlus",\n "MinValue",\n "Missing",\n "MissingBehavior",\n "MissingDataMethod",\n "MissingDataRules",\n "MissingQ",\n "MissingString",\n "MissingStyle",\n "MissingValuePattern",\n "MissingValueSynthesis",\n "MittagLefflerE",\n "MixedFractionParts",\n "MixedGraphQ",\n "MixedMagnitude",\n "MixedRadix",\n "MixedRadixQuantity",\n "MixedUnit",\n "MixtureDistribution",\n "Mod",\n "Modal",\n "Mode",\n "ModelPredictiveController",\n "Modular",\n "ModularInverse",\n "ModularLambda",\n "Module",\n "Modulus",\n "MoebiusMu",\n "Molecule",\n "MoleculeAlign",\n "MoleculeContainsQ",\n "MoleculeDraw",\n "MoleculeEquivalentQ",\n "MoleculeFreeQ",\n "MoleculeGraph",\n "MoleculeMatchQ",\n "MoleculeMaximumCommonSubstructure",\n "MoleculeModify",\n "MoleculeName",\n "MoleculePattern",\n "MoleculePlot",\n "MoleculePlot3D",\n "MoleculeProperty",\n "MoleculeQ",\n "MoleculeRecognize",\n "MoleculeSubstructureCount",\n "MoleculeValue",\n "Moment",\n "MomentConvert",\n "MomentEvaluate",\n "MomentGeneratingFunction",\n "MomentOfInertia",\n "Monday",\n "Monitor",\n "MonomialList",\n "MonomialOrder",\n "MonsterGroupM",\n "MoonPhase",\n "MoonPosition",\n "MorletWavelet",\n "MorphologicalBinarize",\n "MorphologicalBranchPoints",\n "MorphologicalComponents",\n "MorphologicalEulerNumber",\n "MorphologicalGraph",\n "MorphologicalPerimeter",\n "MorphologicalTransform",\n "MortalityData",\n "Most",\n "MountainData",\n "MouseAnnotation",\n "MouseAppearance",\n "MouseAppearanceTag",\n "MouseButtons",\n "Mouseover",\n "MousePointerNote",\n "MousePosition",\n "MovieData",\n "MovingAverage",\n "MovingMap",\n "MovingMedian",\n "MoyalDistribution",\n "MultiaxisArrangement",\n "Multicolumn",\n "MultiedgeStyle",\n "MultigraphQ",\n "MultilaunchWarning",\n "MultiLetterItalics",\n "MultiLetterStyle",\n "MultilineFunction",\n "Multinomial",\n "MultinomialDistribution",\n "MultinormalDistribution",\n "MultiplicativeOrder",\n "Multiplicity",\n "MultiplySides",\n "MultiscriptBoxOptions",\n "Multiselection",\n "MultivariateHypergeometricDistribution",\n "MultivariatePoissonDistribution",\n "MultivariateTDistribution",\n "N",\n "NakagamiDistribution",\n "NameQ",\n "Names",\n "NamespaceBox",\n "NamespaceBoxOptions",\n "Nand",\n "NArgMax",\n "NArgMin",\n "NBernoulliB",\n "NBodySimulation",\n "NBodySimulationData",\n "NCache",\n "NCaputoD",\n "NDEigensystem",\n "NDEigenvalues",\n "NDSolve",\n "NDSolveValue",\n "Nearest",\n "NearestFunction",\n "NearestMeshCells",\n "NearestNeighborG",\n "NearestNeighborGraph",\n "NearestTo",\n "NebulaData",\n "NeedlemanWunschSimilarity",\n "Needs",\n "Negative",\n "NegativeBinomialDistribution",\n "NegativeDefiniteMatrixQ",\n "NegativeIntegers",\n "NegativelyOrientedPoints",\n "NegativeMultinomialDistribution",\n "NegativeRationals",\n "NegativeReals",\n "NegativeSemidefiniteMatrixQ",\n "NeighborhoodData",\n "NeighborhoodGraph",\n "Nest",\n "NestedGreaterGreater",\n "NestedLessLess",\n "NestedScriptRules",\n "NestGraph",\n "NestList",\n "NestTree",\n "NestWhile",\n "NestWhileList",\n "NetAppend",\n "NetArray",\n "NetArrayLayer",\n "NetBidirectionalOperator",\n "NetChain",\n "NetDecoder",\n "NetDelete",\n "NetDrop",\n "NetEncoder",\n "NetEvaluationMode",\n "NetExternalObject",\n "NetExtract",\n "NetFlatten",\n "NetFoldOperator",\n "NetGANOperator",\n "NetGraph",\n "NetInformation",\n "NetInitialize",\n "NetInsert",\n "NetInsertSharedArrays",\n "NetJoin",\n "NetMapOperator",\n "NetMapThreadOperator",\n "NetMeasurements",\n "NetModel",\n "NetNestOperator",\n "NetPairEmbeddingOperator",\n "NetPort",\n "NetPortGradient",\n "NetPrepend",\n "NetRename",\n "NetReplace",\n "NetReplacePart",\n "NetSharedArray",\n "NetStateObject",\n "NetTake",\n "NetTrain",\n "NetTrainResultsObject",\n "NetUnfold",\n "NetworkPacketCapture",\n "NetworkPacketRecording",\n "NetworkPacketRecordingDuring",\n "NetworkPacketTrace",\n "NeumannValue",\n "NevilleThetaC",\n "NevilleThetaD",\n "NevilleThetaN",\n "NevilleThetaS",\n "NewPrimitiveStyle",\n "NExpectation",\n "Next",\n "NextCell",\n "NextDate",\n "NextPrime",\n "NextScheduledTaskTime",\n "NeymanScottPointProcess",\n "NFractionalD",\n "NHoldAll",\n "NHoldFirst",\n "NHoldRest",\n "NicholsGridLines",\n "NicholsPlot",\n "NightHemisphere",\n "NIntegrate",\n "NMaximize",\n "NMaxValue",\n "NMinimize",\n "NMinValue",\n "NominalScale",\n "NominalVariables",\n "NonAssociative",\n "NoncentralBetaDistribution",\n "NoncentralChiSquareDistribution",\n "NoncentralFRatioDistribution",\n "NoncentralStudentTDistribution",\n "NonCommutativeMultiply",\n "NonConstants",\n "NondimensionalizationTransform",\n "None",\n "NoneTrue",\n "NonlinearModelFit",\n "NonlinearStateSpaceModel",\n "NonlocalMeansFilter",\n "NonNegative",\n "NonNegativeIntegers",\n "NonNegativeRationals",\n "NonNegativeReals",\n "NonPositive",\n "NonPositiveIntegers",\n "NonPositiveRationals",\n "NonPositiveReals",\n "Nor",\n "NorlundB",\n "Norm",\n "Normal",\n "NormalDistribution",\n "NormalGrouping",\n "NormalizationLayer",\n "Normalize",\n "Normalized",\n "NormalizedSquaredEuclideanDistance",\n "NormalMatrixQ",\n "NormalsFunction",\n "NormFunction",\n "Not",\n "NotCongruent",\n "NotCupCap",\n "NotDoubleVerticalBar",\n "Notebook",\n "NotebookApply",\n "NotebookAutoSave",\n "NotebookBrowseDirectory",\n "NotebookClose",\n "NotebookConvertSettings",\n "NotebookCreate",\n "NotebookDefault",\n "NotebookDelete",\n "NotebookDirectory",\n "NotebookDynamicExpression",\n "NotebookEvaluate",\n "NotebookEventActions",\n "NotebookFileName",\n "NotebookFind",\n "NotebookGet",\n "NotebookImport",\n "NotebookInformation",\n "NotebookInterfaceObject",\n "NotebookLocate",\n "NotebookObject",\n "NotebookOpen",\n "NotebookPath",\n "NotebookPrint",\n "NotebookPut",\n "NotebookRead",\n "Notebooks",\n "NotebookSave",\n "NotebookSelection",\n "NotebooksMenu",\n "NotebookTemplate",\n "NotebookWrite",\n "NotElement",\n "NotEqualTilde",\n "NotExists",\n "NotGreater",\n "NotGreaterEqual",\n "NotGreaterFullEqual",\n "NotGreaterGreater",\n "NotGreaterLess",\n "NotGreaterSlantEqual",\n "NotGreaterTilde",\n "Nothing",\n "NotHumpDownHump",\n "NotHumpEqual",\n "NotificationFunction",\n "NotLeftTriangle",\n "NotLeftTriangleBar",\n "NotLeftTriangleEqual",\n "NotLess",\n "NotLessEqual",\n "NotLessFullEqual",\n "NotLessGreater",\n "NotLessLess",\n "NotLessSlantEqual",\n "NotLessTilde",\n "NotNestedGreaterGreater",\n "NotNestedLessLess",\n "NotPrecedes",\n "NotPrecedesEqual",\n "NotPrecedesSlantEqual",\n "NotPrecedesTilde",\n "NotReverseElement",\n "NotRightTriangle",\n "NotRightTriangleBar",\n "NotRightTriangleEqual",\n "NotSquareSubset",\n "NotSquareSubsetEqual",\n "NotSquareSuperset",\n "NotSquareSupersetEqual",\n "NotSubset",\n "NotSubsetEqual",\n "NotSucceeds",\n "NotSucceedsEqual",\n "NotSucceedsSlantEqual",\n "NotSucceedsTilde",\n "NotSuperset",\n "NotSupersetEqual",\n "NotTilde",\n "NotTildeEqual",\n "NotTildeFullEqual",\n "NotTildeTilde",\n "NotVerticalBar",\n "Now",\n "NoWhitespace",\n "NProbability",\n "NProduct",\n "NProductFactors",\n "NRoots",\n "NSolve",\n "NSolveValues",\n "NSum",\n "NSumTerms",\n "NuclearExplosionData",\n "NuclearReactorData",\n "Null",\n "NullRecords",\n "NullSpace",\n "NullWords",\n "Number",\n "NumberCompose",\n "NumberDecompose",\n "NumberDigit",\n "NumberExpand",\n "NumberFieldClassNumber",\n "NumberFieldDiscriminant",\n "NumberFieldFundamentalUnits",\n "NumberFieldIntegralBasis",\n "NumberFieldNormRepresentatives",\n "NumberFieldRegulator",\n "NumberFieldRootsOfUnity",\n "NumberFieldSignature",\n "NumberForm",\n "NumberFormat",\n "NumberLinePlot",\n "NumberMarks",\n "NumberMultiplier",\n "NumberPadding",\n "NumberPoint",\n "NumberQ",\n "NumberSeparator",\n "NumberSigns",\n "NumberString",\n "Numerator",\n "NumeratorDenominator",\n "NumericalOrder",\n "NumericalSort",\n "NumericArray",\n "NumericArrayQ",\n "NumericArrayType",\n "NumericFunction",\n "NumericQ",\n "NuttallWindow",\n "NValues",\n "NyquistGridLines",\n "NyquistPlot",\n "O",\n "ObjectExistsQ",\n "ObservabilityGramian",\n "ObservabilityMatrix",\n "ObservableDecomposition",\n "ObservableModelQ",\n "OceanData",\n "Octahedron",\n "OddQ",\n "Off",\n "Offset",\n "OLEData",\n "On",\n "ONanGroupON",\n "Once",\n "OneIdentity",\n "Opacity",\n "OpacityFunction",\n "OpacityFunctionScaling",\n "Open",\n "OpenAppend",\n "Opener",\n "OpenerBox",\n "OpenerBoxOptions",\n "OpenerView",\n "OpenFunctionInspectorPacket",\n "Opening",\n "OpenRead",\n "OpenSpecialOptions",\n "OpenTemporary",\n "OpenWrite",\n "Operate",\n "OperatingSystem",\n "OperatorApplied",\n "OptimumFlowData",\n "Optional",\n "OptionalElement",\n "OptionInspectorSettings",\n "OptionQ",\n "Options",\n "OptionsPacket",\n "OptionsPattern",\n "OptionValue",\n "OptionValueBox",\n "OptionValueBoxOptions",\n "Or",\n "Orange",\n "Order",\n "OrderDistribution",\n "OrderedQ",\n "Ordering",\n "OrderingBy",\n "OrderingLayer",\n "Orderless",\n "OrderlessPatternSequence",\n "OrdinalScale",\n "OrnsteinUhlenbeckProcess",\n "Orthogonalize",\n "OrthogonalMatrixQ",\n "Out",\n "Outer",\n "OuterPolygon",\n "OuterPolyhedron",\n "OutputAutoOverwrite",\n "OutputControllabilityMatrix",\n "OutputControllableModelQ",\n "OutputForm",\n "OutputFormData",\n "OutputGrouping",\n "OutputMathEditExpression",\n "OutputNamePacket",\n "OutputPorts",\n "OutputResponse",\n "OutputSizeLimit",\n "OutputStream",\n "Over",\n "OverBar",\n "OverDot",\n "Overflow",\n "OverHat",\n "Overlaps",\n "Overlay",\n "OverlayBox",\n "OverlayBoxOptions",\n "OverlayVideo",\n "Overscript",\n "OverscriptBox",\n "OverscriptBoxOptions",\n "OverTilde",\n "OverVector",\n "OverwriteTarget",\n "OwenT",\n "OwnValues",\n "Package",\n "PackingMethod",\n "PackPaclet",\n "PacletDataRebuild",\n "PacletDirectoryAdd",\n "PacletDirectoryLoad",\n "PacletDirectoryRemove",\n "PacletDirectoryUnload",\n "PacletDisable",\n "PacletEnable",\n "PacletFind",\n "PacletFindRemote",\n "PacletInformation",\n "PacletInstall",\n "PacletInstallSubmit",\n "PacletNewerQ",\n "PacletObject",\n "PacletObjectQ",\n "PacletSite",\n "PacletSiteObject",\n "PacletSiteRegister",\n "PacletSites",\n "PacletSiteUnregister",\n "PacletSiteUpdate",\n "PacletSymbol",\n "PacletUninstall",\n "PacletUpdate",\n "PaddedForm",\n "Padding",\n "PaddingLayer",\n "PaddingSize",\n "PadeApproximant",\n "PadLeft",\n "PadRight",\n "PageBreakAbove",\n "PageBreakBelow",\n "PageBreakWithin",\n "PageFooterLines",\n "PageFooters",\n "PageHeaderLines",\n "PageHeaders",\n "PageHeight",\n "PageRankCentrality",\n "PageTheme",\n "PageWidth",\n "Pagination",\n "PairCorrelationG",\n "PairedBarChart",\n "PairedHistogram",\n "PairedSmoothHistogram",\n "PairedTTest",\n "PairedZTest",\n "PaletteNotebook",\n "PalettePath",\n "PalettesMenuSettings",\n "PalindromeQ",\n "Pane",\n "PaneBox",\n "PaneBoxOptions",\n "Panel",\n "PanelBox",\n "PanelBoxOptions",\n "Paneled",\n "PaneSelector",\n "PaneSelectorBox",\n "PaneSelectorBoxOptions",\n "PaperWidth",\n "ParabolicCylinderD",\n "ParagraphIndent",\n "ParagraphSpacing",\n "ParallelArray",\n "ParallelAxisPlot",\n "ParallelCombine",\n "ParallelDo",\n "Parallelepiped",\n "ParallelEvaluate",\n "Parallelization",\n "Parallelize",\n "ParallelKernels",\n "ParallelMap",\n "ParallelNeeds",\n "Parallelogram",\n "ParallelProduct",\n "ParallelSubmit",\n "ParallelSum",\n "ParallelTable",\n "ParallelTry",\n "Parameter",\n "ParameterEstimator",\n "ParameterMixtureDistribution",\n "ParameterVariables",\n "ParametricConvexOptimization",\n "ParametricFunction",\n "ParametricNDSolve",\n "ParametricNDSolveValue",\n "ParametricPlot",\n "ParametricPlot3D",\n "ParametricRampLayer",\n "ParametricRegion",\n "ParentBox",\n "ParentCell",\n "ParentConnect",\n "ParentDirectory",\n "ParentEdgeLabel",\n "ParentEdgeLabelFunction",\n "ParentEdgeLabelStyle",\n "ParentEdgeShapeFunction",\n "ParentEdgeStyle",\n "ParentEdgeStyleFunction",\n "ParentForm",\n "Parenthesize",\n "ParentList",\n "ParentNotebook",\n "ParetoDistribution",\n "ParetoPickandsDistribution",\n "ParkData",\n "Part",\n "PartBehavior",\n "PartialCorrelationFunction",\n "PartialD",\n "ParticleAcceleratorData",\n "ParticleData",\n "Partition",\n "PartitionGranularity",\n "PartitionsP",\n "PartitionsQ",\n "PartLayer",\n "PartOfSpeech",\n "PartProtection",\n "ParzenWindow",\n "PascalDistribution",\n "PassEventsDown",\n "PassEventsUp",\n "Paste",\n "PasteAutoQuoteCharacters",\n "PasteBoxFormInlineCells",\n "PasteButton",\n "Path",\n "PathGraph",\n "PathGraphQ",\n "Pattern",\n "PatternFilling",\n "PatternReaction",\n "PatternSequence",\n "PatternTest",\n "PauliMatrix",\n "PaulWavelet",\n "Pause",\n "PausedTime",\n "PDF",\n "PeakDetect",\n "PeanoCurve",\n "PearsonChiSquareTest",\n "PearsonCorrelationTest",\n "PearsonDistribution",\n "PenttinenPointProcess",\n "PercentForm",\n "PerfectNumber",\n "PerfectNumberQ",\n "PerformanceGoal",\n "Perimeter",\n "PeriodicBoundaryCondition",\n "PeriodicInterpolation",\n "Periodogram",\n "PeriodogramArray",\n "Permanent",\n "Permissions",\n "PermissionsGroup",\n "PermissionsGroupMemberQ",\n "PermissionsGroups",\n "PermissionsKey",\n "PermissionsKeys",\n "PermutationCycles",\n "PermutationCyclesQ",\n "PermutationGroup",\n "PermutationLength",\n "PermutationList",\n "PermutationListQ",\n "PermutationMatrix",\n "PermutationMax",\n "PermutationMin",\n "PermutationOrder",\n "PermutationPower",\n "PermutationProduct",\n "PermutationReplace",\n "Permutations",\n "PermutationSupport",\n "Permute",\n "PeronaMalikFilter",\n "Perpendicular",\n "PerpendicularBisector",\n "PersistenceLocation",\n "PersistenceTime",\n "PersistentObject",\n "PersistentObjects",\n "PersistentSymbol",\n "PersistentValue",\n "PersonData",\n "PERTDistribution",\n "PetersenGraph",\n "PhaseMargins",\n "PhaseRange",\n "PhongShading",\n "PhysicalSystemData",\n "Pi",\n "Pick",\n "PickedElements",\n "PickMode",\n "PIDData",\n "PIDDerivativeFilter",\n "PIDFeedforward",\n "PIDTune",\n "Piecewise",\n "PiecewiseExpand",\n "PieChart",\n "PieChart3D",\n "PillaiTrace",\n "PillaiTraceTest",\n "PingTime",\n "Pink",\n "PitchRecognize",\n "Pivoting",\n "PixelConstrained",\n "PixelValue",\n "PixelValuePositions",\n "Placed",\n "Placeholder",\n "PlaceholderLayer",\n "PlaceholderReplace",\n "Plain",\n "PlanarAngle",\n "PlanarFaceList",\n "PlanarGraph",\n "PlanarGraphQ",\n "PlanckRadiationLaw",\n "PlaneCurveData",\n "PlanetaryMoonData",\n "PlanetData",\n "PlantData",\n "Play",\n "PlaybackSettings",\n "PlayRange",\n "Plot",\n "Plot3D",\n "Plot3Matrix",\n "PlotDivision",\n "PlotJoined",\n "PlotLabel",\n "PlotLabels",\n "PlotLayout",\n "PlotLegends",\n "PlotMarkers",\n "PlotPoints",\n "PlotRange",\n "PlotRangeClipping",\n "PlotRangeClipPlanesStyle",\n "PlotRangePadding",\n "PlotRegion",\n "PlotStyle",\n "PlotTheme",\n "Pluralize",\n "Plus",\n "PlusMinus",\n "Pochhammer",\n "PodStates",\n "PodWidth",\n "Point",\n "Point3DBox",\n "Point3DBoxOptions",\n "PointBox",\n "PointBoxOptions",\n "PointCountDistribution",\n "PointDensity",\n "PointDensityFunction",\n "PointFigureChart",\n "PointLegend",\n "PointLight",\n "PointProcessEstimator",\n "PointProcessFitTest",\n "PointProcessParameterAssumptions",\n "PointProcessParameterQ",\n "PointSize",\n "PointStatisticFunction",\n "PointValuePlot",\n "PoissonConsulDistribution",\n "PoissonDistribution",\n "PoissonPDEComponent",\n "PoissonPointProcess",\n "PoissonProcess",\n "PoissonWindow",\n "PolarAxes",\n "PolarAxesOrigin",\n "PolarGridLines",\n "PolarPlot",\n "PolarTicks",\n "PoleZeroMarkers",\n "PolyaAeppliDistribution",\n "PolyGamma",\n "Polygon",\n "Polygon3DBox",\n "Polygon3DBoxOptions",\n "PolygonalNumber",\n "PolygonAngle",\n "PolygonBox",\n "PolygonBoxOptions",\n "PolygonCoordinates",\n "PolygonDecomposition",\n "PolygonHoleScale",\n "PolygonIntersections",\n "PolygonScale",\n "Polyhedron",\n "PolyhedronAngle",\n "PolyhedronBox",\n "PolyhedronBoxOptions",\n "PolyhedronCoordinates",\n "PolyhedronData",\n "PolyhedronDecomposition",\n "PolyhedronGenus",\n "PolyLog",\n "PolynomialExpressionQ",\n "PolynomialExtendedGCD",\n "PolynomialForm",\n "PolynomialGCD",\n "PolynomialLCM",\n "PolynomialMod",\n "PolynomialQ",\n "PolynomialQuotient",\n "PolynomialQuotientRemainder",\n "PolynomialReduce",\n "PolynomialRemainder",\n "Polynomials",\n "PolynomialSumOfSquaresList",\n "PoolingLayer",\n "PopupMenu",\n "PopupMenuBox",\n "PopupMenuBoxOptions",\n "PopupView",\n "PopupWindow",\n "Position",\n "PositionIndex",\n "PositionLargest",\n "PositionSmallest",\n "Positive",\n "PositiveDefiniteMatrixQ",\n "PositiveIntegers",\n "PositivelyOrientedPoints",\n "PositiveRationals",\n "PositiveReals",\n "PositiveSemidefiniteMatrixQ",\n "PossibleZeroQ",\n "Postfix",\n "PostScript",\n "Power",\n "PowerDistribution",\n "PowerExpand",\n "PowerMod",\n "PowerModList",\n "PowerRange",\n "PowerSpectralDensity",\n "PowersRepresentations",\n "PowerSymmetricPolynomial",\n "Precedence",\n "PrecedenceForm",\n "Precedes",\n "PrecedesEqual",\n "PrecedesSlantEqual",\n "PrecedesTilde",\n "Precision",\n "PrecisionGoal",\n "PreDecrement",\n "Predict",\n "PredictionRoot",\n "PredictorFunction",\n "PredictorInformation",\n "PredictorMeasurements",\n "PredictorMeasurementsObject",\n "PreemptProtect",\n "PreferencesPath",\n "PreferencesSettings",\n "Prefix",\n "PreIncrement",\n "Prepend",\n "PrependLayer",\n "PrependTo",\n "PreprocessingRules",\n "PreserveColor",\n "PreserveImageOptions",\n "Previous",\n "PreviousCell",\n "PreviousDate",\n "PriceGraphDistribution",\n "PrimaryPlaceholder",\n "Prime",\n "PrimeNu",\n "PrimeOmega",\n "PrimePi",\n "PrimePowerQ",\n "PrimeQ",\n "Primes",\n "PrimeZetaP",\n "PrimitivePolynomialQ",\n "PrimitiveRoot",\n "PrimitiveRootList",\n "PrincipalComponents",\n "PrincipalValue",\n "Print",\n "PrintableASCIIQ",\n "PrintAction",\n "PrintForm",\n "PrintingCopies",\n "PrintingOptions",\n "PrintingPageRange",\n "PrintingStartingPageNumber",\n "PrintingStyleEnvironment",\n "Printout3D",\n "Printout3DPreviewer",\n "PrintPrecision",\n "PrintTemporary",\n "Prism",\n "PrismBox",\n "PrismBoxOptions",\n "PrivateCellOptions",\n "PrivateEvaluationOptions",\n "PrivateFontOptions",\n "PrivateFrontEndOptions",\n "PrivateKey",\n "PrivateNotebookOptions",\n "PrivatePaths",\n "Probability",\n "ProbabilityDistribution",\n "ProbabilityPlot",\n "ProbabilityPr",\n "ProbabilityScalePlot",\n "ProbitModelFit",\n "ProcessConnection",\n "ProcessDirectory",\n "ProcessEnvironment",\n "Processes",\n "ProcessEstimator",\n "ProcessInformation",\n "ProcessObject",\n "ProcessParameterAssumptions",\n "ProcessParameterQ",\n "ProcessStateDomain",\n "ProcessStatus",\n "ProcessTimeDomain",\n "Product",\n "ProductDistribution",\n "ProductLog",\n "ProgressIndicator",\n "ProgressIndicatorBox",\n "ProgressIndicatorBoxOptions",\n "ProgressReporting",\n "Projection",\n "Prolog",\n "PromptForm",\n "ProofObject",\n "PropagateAborts",\n "Properties",\n "Property",\n "PropertyList",\n "PropertyValue",\n "Proportion",\n "Proportional",\n "Protect",\n "Protected",\n "ProteinData",\n "Pruning",\n "PseudoInverse",\n "PsychrometricPropertyData",\n "PublicKey",\n "PublisherID",\n "PulsarData",\n "PunctuationCharacter",\n "Purple",\n "Put",\n "PutAppend",\n "Pyramid",\n "PyramidBox",\n "PyramidBoxOptions",\n "QBinomial",\n "QFactorial",\n "QGamma",\n "QHypergeometricPFQ",\n "QnDispersion",\n "QPochhammer",\n "QPolyGamma",\n "QRDecomposition",\n "QuadraticIrrationalQ",\n "QuadraticOptimization",\n "Quantile",\n "QuantilePlot",\n "Quantity",\n "QuantityArray",\n "QuantityDistribution",\n "QuantityForm",\n "QuantityMagnitude",\n "QuantityQ",\n "QuantityUnit",\n "QuantityVariable",\n "QuantityVariableCanonicalUnit",\n "QuantityVariableDimensions",\n "QuantityVariableIdentifier",\n "QuantityVariablePhysicalQuantity",\n "Quartics",\n "QuartileDeviation",\n "Quartiles",\n "QuartileSkewness",\n "Query",\n "QuestionGenerator",\n "QuestionInterface",\n "QuestionObject",\n "QuestionSelector",\n "QueueingNetworkProcess",\n "QueueingProcess",\n "QueueProperties",\n "Quiet",\n "QuietEcho",\n "Quit",\n "Quotient",\n "QuotientRemainder",\n "RadialAxisPlot",\n "RadialGradientFilling",\n "RadialGradientImage",\n "RadialityCentrality",\n "RadicalBox",\n "RadicalBoxOptions",\n "RadioButton",\n "RadioButtonBar",\n "RadioButtonBox",\n "RadioButtonBoxOptions",\n "Radon",\n "RadonTransform",\n "RamanujanTau",\n "RamanujanTauL",\n "RamanujanTauTheta",\n "RamanujanTauZ",\n "Ramp",\n "Random",\n "RandomArrayLayer",\n "RandomChoice",\n "RandomColor",\n "RandomComplex",\n "RandomDate",\n "RandomEntity",\n "RandomFunction",\n "RandomGeneratorState",\n "RandomGeoPosition",\n "RandomGraph",\n "RandomImage",\n "RandomInstance",\n "RandomInteger",\n "RandomPermutation",\n "RandomPoint",\n "RandomPointConfiguration",\n "RandomPolygon",\n "RandomPolyhedron",\n "RandomPrime",\n "RandomReal",\n "RandomSample",\n "RandomSeed",\n "RandomSeeding",\n "RandomTime",\n "RandomTree",\n "RandomVariate",\n "RandomWalkProcess",\n "RandomWord",\n "Range",\n "RangeFilter",\n "RangeSpecification",\n "RankedMax",\n "RankedMin",\n "RarerProbability",\n "Raster",\n "Raster3D",\n "Raster3DBox",\n "Raster3DBoxOptions",\n "RasterArray",\n "RasterBox",\n "RasterBoxOptions",\n "Rasterize",\n "RasterSize",\n "Rational",\n "RationalExpressionQ",\n "RationalFunctions",\n "Rationalize",\n "Rationals",\n "Ratios",\n "RawArray",\n "RawBoxes",\n "RawData",\n "RawMedium",\n "RayleighDistribution",\n "Re",\n "ReactionBalance",\n "ReactionBalancedQ",\n "ReactionPDETerm",\n "Read",\n "ReadByteArray",\n "ReadLine",\n "ReadList",\n "ReadProtected",\n "ReadString",\n "Real",\n "RealAbs",\n "RealBlockDiagonalForm",\n "RealDigits",\n "RealExponent",\n "Reals",\n "RealSign",\n "Reap",\n "RebuildPacletData",\n "RecalibrationFunction",\n "RecognitionPrior",\n "RecognitionThreshold",\n "ReconstructionMesh",\n "Record",\n "RecordLists",\n "RecordSeparators",\n "Rectangle",\n "RectangleBox",\n "RectangleBoxOptions",\n "RectangleChart",\n "RectangleChart3D",\n "RectangularRepeatingElement",\n "RecurrenceFilter",\n "RecurrenceTable",\n "RecurringDigitsForm",\n "Red",\n "Reduce",\n "RefBox",\n "ReferenceLineStyle",\n "ReferenceMarkers",\n "ReferenceMarkerStyle",\n "Refine",\n "ReflectionMatrix",\n "ReflectionTransform",\n "Refresh",\n "RefreshRate",\n "Region",\n "RegionBinarize",\n "RegionBoundary",\n "RegionBoundaryStyle",\n "RegionBounds",\n "RegionCentroid",\n "RegionCongruent",\n "RegionConvert",\n "RegionDifference",\n "RegionDilation",\n "RegionDimension",\n "RegionDisjoint",\n "RegionDistance",\n "RegionDistanceFunction",\n "RegionEmbeddingDimension",\n "RegionEqual",\n "RegionErosion",\n "RegionFillingStyle",\n "RegionFit",\n "RegionFunction",\n "RegionImage",\n "RegionIntersection",\n "RegionMeasure",\n "RegionMember",\n "RegionMemberFunction",\n "RegionMoment",\n "RegionNearest",\n "RegionNearestFunction",\n "RegionPlot",\n "RegionPlot3D",\n "RegionProduct",\n "RegionQ",\n "RegionResize",\n "RegionSimilar",\n "RegionSize",\n "RegionSymmetricDifference",\n "RegionUnion",\n "RegionWithin",\n "RegisterExternalEvaluator",\n "RegularExpression",\n "Regularization",\n "RegularlySampledQ",\n "RegularPolygon",\n "ReIm",\n "ReImLabels",\n "ReImPlot",\n "ReImStyle",\n "Reinstall",\n "RelationalDatabase",\n "RelationGraph",\n "Release",\n "ReleaseHold",\n "ReliabilityDistribution",\n "ReliefImage",\n "ReliefPlot",\n "RemoteAuthorizationCaching",\n "RemoteBatchJobAbort",\n "RemoteBatchJobObject",\n "RemoteBatchJobs",\n "RemoteBatchMapSubmit",\n "RemoteBatchSubmissionEnvironment",\n "RemoteBatchSubmit",\n "RemoteConnect",\n "RemoteConnectionObject",\n "RemoteEvaluate",\n "RemoteFile",\n "RemoteInputFiles",\n "RemoteKernelObject",\n "RemoteProviderSettings",\n "RemoteRun",\n "RemoteRunProcess",\n "RemovalConditions",\n "Remove",\n "RemoveAlphaChannel",\n "RemoveAsynchronousTask",\n "RemoveAudioStream",\n "RemoveBackground",\n "RemoveChannelListener",\n "RemoveChannelSubscribers",\n "Removed",\n "RemoveDiacritics",\n "RemoveInputStreamMethod",\n "RemoveOutputStreamMethod",\n "RemoveProperty",\n "RemoveScheduledTask",\n "RemoveUsers",\n "RemoveVideoStream",\n "RenameDirectory",\n "RenameFile",\n "RenderAll",\n "RenderingOptions",\n "RenewalProcess",\n "RenkoChart",\n "RepairMesh",\n "Repeated",\n "RepeatedNull",\n "RepeatedString",\n "RepeatedTiming",\n "RepeatingElement",\n "Replace",\n "ReplaceAll",\n "ReplaceAt",\n "ReplaceHeldPart",\n "ReplaceImageValue",\n "ReplaceList",\n "ReplacePart",\n "ReplacePixelValue",\n "ReplaceRepeated",\n "ReplicateLayer",\n "RequiredPhysicalQuantities",\n "Resampling",\n "ResamplingAlgorithmData",\n "ResamplingMethod",\n "Rescale",\n "RescalingTransform",\n "ResetDirectory",\n "ResetScheduledTask",\n "ReshapeLayer",\n "Residue",\n "ResidueSum",\n "ResizeLayer",\n "Resolve",\n "ResolveContextAliases",\n "ResourceAcquire",\n "ResourceData",\n "ResourceFunction",\n "ResourceObject",\n "ResourceRegister",\n "ResourceRemove",\n "ResourceSearch",\n "ResourceSubmissionObject",\n "ResourceSubmit",\n "ResourceSystemBase",\n "ResourceSystemPath",\n "ResourceUpdate",\n "ResourceVersion",\n "ResponseForm",\n "Rest",\n "RestartInterval",\n "Restricted",\n "Resultant",\n "ResumePacket",\n "Return",\n "ReturnCreatesNewCell",\n "ReturnEntersInput",\n "ReturnExpressionPacket",\n "ReturnInputFormPacket",\n "ReturnPacket",\n "ReturnReceiptFunction",\n "ReturnTextPacket",\n "Reverse",\n "ReverseApplied",\n "ReverseBiorthogonalSplineWavelet",\n "ReverseElement",\n "ReverseEquilibrium",\n "ReverseGraph",\n "ReverseSort",\n "ReverseSortBy",\n "ReverseUpEquilibrium",\n "RevolutionAxis",\n "RevolutionPlot3D",\n "RGBColor",\n "RiccatiSolve",\n "RiceDistribution",\n "RidgeFilter",\n "RiemannR",\n "RiemannSiegelTheta",\n "RiemannSiegelZ",\n "RiemannXi",\n "Riffle",\n "Right",\n "RightArrow",\n "RightArrowBar",\n "RightArrowLeftArrow",\n "RightComposition",\n "RightCosetRepresentative",\n "RightDownTeeVector",\n "RightDownVector",\n "RightDownVectorBar",\n "RightTee",\n "RightTeeArrow",\n "RightTeeVector",\n "RightTriangle",\n "RightTriangleBar",\n "RightTriangleEqual",\n "RightUpDownVector",\n "RightUpTeeVector",\n "RightUpVector",\n "RightUpVectorBar",\n "RightVector",\n "RightVectorBar",\n "RipleyK",\n "RipleyRassonRegion",\n "RiskAchievementImportance",\n "RiskReductionImportance",\n "RobustConvexOptimization",\n "RogersTanimotoDissimilarity",\n "RollPitchYawAngles",\n "RollPitchYawMatrix",\n "RomanNumeral",\n "Root",\n "RootApproximant",\n "RootIntervals",\n "RootLocusPlot",\n "RootMeanSquare",\n "RootOfUnityQ",\n "RootReduce",\n "Roots",\n "RootSum",\n "RootTree",\n "Rotate",\n "RotateLabel",\n "RotateLeft",\n "RotateRight",\n "RotationAction",\n "RotationBox",\n "RotationBoxOptions",\n "RotationMatrix",\n "RotationTransform",\n "Round",\n "RoundImplies",\n "RoundingRadius",\n "Row",\n "RowAlignments",\n "RowBackgrounds",\n "RowBox",\n "RowHeights",\n "RowLines",\n "RowMinHeight",\n "RowReduce",\n "RowsEqual",\n "RowSpacings",\n "RSolve",\n "RSolveValue",\n "RudinShapiro",\n "RudvalisGroupRu",\n "Rule",\n "RuleCondition",\n "RuleDelayed",\n "RuleForm",\n "RulePlot",\n "RulerUnits",\n "RulesTree",\n "Run",\n "RunProcess",\n "RunScheduledTask",\n "RunThrough",\n "RuntimeAttributes",\n "RuntimeOptions",\n "RussellRaoDissimilarity",\n "SameAs",\n "SameQ",\n "SameTest",\n "SameTestProperties",\n "SampledEntityClass",\n "SampleDepth",\n "SampledSoundFunction",\n "SampledSoundList",\n "SampleRate",\n "SamplingPeriod",\n "SARIMAProcess",\n "SARMAProcess",\n "SASTriangle",\n "SatelliteData",\n "SatisfiabilityCount",\n "SatisfiabilityInstances",\n "SatisfiableQ",\n "Saturday",\n "Save",\n "Saveable",\n "SaveAutoDelete",\n "SaveConnection",\n "SaveDefinitions",\n "SavitzkyGolayMatrix",\n "SawtoothWave",\n "Scale",\n "Scaled",\n "ScaleDivisions",\n "ScaledMousePosition",\n "ScaleOrigin",\n "ScalePadding",\n "ScaleRanges",\n "ScaleRangeStyle",\n "ScalingFunctions",\n "ScalingMatrix",\n "ScalingTransform",\n "Scan",\n "ScheduledTask",\n "ScheduledTaskActiveQ",\n "ScheduledTaskInformation",\n "ScheduledTaskInformationData",\n "ScheduledTaskObject",\n "ScheduledTasks",\n "SchurDecomposition",\n "ScientificForm",\n "ScientificNotationThreshold",\n "ScorerGi",\n "ScorerGiPrime",\n "ScorerHi",\n "ScorerHiPrime",\n "ScreenRectangle",\n "ScreenStyleEnvironment",\n "ScriptBaselineShifts",\n "ScriptForm",\n "ScriptLevel",\n "ScriptMinSize",\n "ScriptRules",\n "ScriptSizeMultipliers",\n "Scrollbars",\n "ScrollingOptions",\n "ScrollPosition",\n "SearchAdjustment",\n "SearchIndexObject",\n "SearchIndices",\n "SearchQueryString",\n "SearchResultObject",\n "Sec",\n "Sech",\n "SechDistribution",\n "SecondOrderConeOptimization",\n "SectionGrouping",\n "SectorChart",\n "SectorChart3D",\n "SectorOrigin",\n "SectorSpacing",\n "SecuredAuthenticationKey",\n "SecuredAuthenticationKeys",\n "SecurityCertificate",\n "SeedRandom",\n "Select",\n "Selectable",\n "SelectComponents",\n "SelectedCells",\n "SelectedNotebook",\n "SelectFirst",\n "Selection",\n "SelectionAnimate",\n "SelectionCell",\n "SelectionCellCreateCell",\n "SelectionCellDefaultStyle",\n "SelectionCellParentStyle",\n "SelectionCreateCell",\n "SelectionDebuggerTag",\n "SelectionEvaluate",\n "SelectionEvaluateCreateCell",\n "SelectionMove",\n "SelectionPlaceholder",\n "SelectWithContents",\n "SelfLoops",\n "SelfLoopStyle",\n "SemanticImport",\n "SemanticImportString",\n "SemanticInterpretation",\n "SemialgebraicComponentInstances",\n "SemidefiniteOptimization",\n "SendMail",\n "SendMessage",\n "Sequence",\n "SequenceAlignment",\n "SequenceAttentionLayer",\n "SequenceCases",\n "SequenceCount",\n "SequenceFold",\n "SequenceFoldList",\n "SequenceForm",\n "SequenceHold",\n "SequenceIndicesLayer",\n "SequenceLastLayer",\n "SequenceMostLayer",\n "SequencePosition",\n "SequencePredict",\n "SequencePredictorFunction",\n "SequenceReplace",\n "SequenceRestLayer",\n "SequenceReverseLayer",\n "SequenceSplit",\n "Series",\n "SeriesCoefficient",\n "SeriesData",\n "SeriesTermGoal",\n "ServiceConnect",\n "ServiceDisconnect",\n "ServiceExecute",\n "ServiceObject",\n "ServiceRequest",\n "ServiceResponse",\n "ServiceSubmit",\n "SessionSubmit",\n "SessionTime",\n "Set",\n "SetAccuracy",\n "SetAlphaChannel",\n "SetAttributes",\n "Setbacks",\n "SetCloudDirectory",\n "SetCookies",\n "SetDelayed",\n "SetDirectory",\n "SetEnvironment",\n "SetFileDate",\n "SetFileFormatProperties",\n "SetOptions",\n "SetOptionsPacket",\n "SetPermissions",\n "SetPrecision",\n "SetProperty",\n "SetSecuredAuthenticationKey",\n "SetSelectedNotebook",\n "SetSharedFunction",\n "SetSharedVariable",\n "SetStreamPosition",\n "SetSystemModel",\n "SetSystemOptions",\n "Setter",\n "SetterBar",\n "SetterBox",\n "SetterBoxOptions",\n "Setting",\n "SetUsers",\n "Shading",\n "Shallow",\n "ShannonWavelet",\n "ShapiroWilkTest",\n "Share",\n "SharingList",\n "Sharpen",\n "ShearingMatrix",\n "ShearingTransform",\n "ShellRegion",\n "ShenCastanMatrix",\n "ShiftedGompertzDistribution",\n "ShiftRegisterSequence",\n "Short",\n "ShortDownArrow",\n "Shortest",\n "ShortestMatch",\n "ShortestPathFunction",\n "ShortLeftArrow",\n "ShortRightArrow",\n "ShortTimeFourier",\n "ShortTimeFourierData",\n "ShortUpArrow",\n "Show",\n "ShowAutoConvert",\n "ShowAutoSpellCheck",\n "ShowAutoStyles",\n "ShowCellBracket",\n "ShowCellLabel",\n "ShowCellTags",\n "ShowClosedCellArea",\n "ShowCodeAssist",\n "ShowContents",\n "ShowControls",\n "ShowCursorTracker",\n "ShowGroupOpenCloseIcon",\n "ShowGroupOpener",\n "ShowInvisibleCharacters",\n "ShowPageBreaks",\n "ShowPredictiveInterface",\n "ShowSelection",\n "ShowShortBoxForm",\n "ShowSpecialCharacters",\n "ShowStringCharacters",\n "ShowSyntaxStyles",\n "ShrinkingDelay",\n "ShrinkWrapBoundingBox",\n "SiderealTime",\n "SiegelTheta",\n "SiegelTukeyTest",\n "SierpinskiCurve",\n "SierpinskiMesh",\n "Sign",\n "Signature",\n "SignedRankTest",\n "SignedRegionDistance",\n "SignificanceLevel",\n "SignPadding",\n "SignTest",\n "SimilarityRules",\n "SimpleGraph",\n "SimpleGraphQ",\n "SimplePolygonQ",\n "SimplePolyhedronQ",\n "Simplex",\n "Simplify",\n "Sin",\n "Sinc",\n "SinghMaddalaDistribution",\n "SingleEvaluation",\n "SingleLetterItalics",\n "SingleLetterStyle",\n "SingularValueDecomposition",\n "SingularValueList",\n "SingularValuePlot",\n "SingularValues",\n "Sinh",\n "SinhIntegral",\n "SinIntegral",\n "SixJSymbol",\n "Skeleton",\n "SkeletonTransform",\n "SkellamDistribution",\n "Skewness",\n "SkewNormalDistribution",\n "SkinStyle",\n "Skip",\n "SliceContourPlot3D",\n "SliceDensityPlot3D",\n "SliceDistribution",\n "SliceVectorPlot3D",\n "Slider",\n "Slider2D",\n "Slider2DBox",\n "Slider2DBoxOptions",\n "SliderBox",\n "SliderBoxOptions",\n "SlideShowVideo",\n "SlideView",\n "Slot",\n "SlotSequence",\n "Small",\n "SmallCircle",\n "Smaller",\n "SmithDecomposition",\n "SmithDelayCompensator",\n "SmithWatermanSimilarity",\n "SmoothDensityHistogram",\n "SmoothHistogram",\n "SmoothHistogram3D",\n "SmoothKernelDistribution",\n "SmoothPointDensity",\n "SnDispersion",\n "Snippet",\n "SnippetsVideo",\n "SnubPolyhedron",\n "SocialMediaData",\n "Socket",\n "SocketConnect",\n "SocketListen",\n "SocketListener",\n "SocketObject",\n "SocketOpen",\n "SocketReadMessage",\n "SocketReadyQ",\n "Sockets",\n "SocketWaitAll",\n "SocketWaitNext",\n "SoftmaxLayer",\n "SokalSneathDissimilarity",\n "SolarEclipse",\n "SolarSystemFeatureData",\n "SolarTime",\n "SolidAngle",\n "SolidBoundaryLoadValue",\n "SolidData",\n "SolidDisplacementCondition",\n "SolidFixedCondition",\n "SolidMechanicsPDEComponent",\n "SolidMechanicsStrain",\n "SolidMechanicsStress",\n "SolidRegionQ",\n "Solve",\n "SolveAlways",\n "SolveDelayed",\n "SolveValues",\n "Sort",\n "SortBy",\n "SortedBy",\n "SortedEntityClass",\n "Sound",\n "SoundAndGraphics",\n "SoundNote",\n "SoundVolume",\n "SourceLink",\n "SourcePDETerm",\n "Sow",\n "Space",\n "SpaceCurveData",\n "SpaceForm",\n "Spacer",\n "Spacings",\n "Span",\n "SpanAdjustments",\n "SpanCharacterRounding",\n "SpanFromAbove",\n "SpanFromBoth",\n "SpanFromLeft",\n "SpanLineThickness",\n "SpanMaxSize",\n "SpanMinSize",\n "SpanningCharacters",\n "SpanSymmetric",\n "SparseArray",\n "SparseArrayQ",\n "SpatialBinnedPointData",\n "SpatialBoundaryCorrection",\n "SpatialEstimate",\n "SpatialEstimatorFunction",\n "SpatialGraphDistribution",\n "SpatialJ",\n "SpatialMedian",\n "SpatialNoiseLevel",\n "SpatialObservationRegionQ",\n "SpatialPointData",\n "SpatialPointSelect",\n "SpatialRandomnessTest",\n "SpatialTransformationLayer",\n "SpatialTrendFunction",\n "Speak",\n "SpeakerMatchQ",\n "SpearmanRankTest",\n "SpearmanRho",\n "SpeciesData",\n "SpecificityGoal",\n "SpectralLineData",\n "Spectrogram",\n "SpectrogramArray",\n "Specularity",\n "SpeechCases",\n "SpeechInterpreter",\n "SpeechRecognize",\n "SpeechSynthesize",\n "SpellingCorrection",\n "SpellingCorrectionList",\n "SpellingDictionaries",\n "SpellingDictionariesPath",\n "SpellingOptions",\n "Sphere",\n "SphereBox",\n "SphereBoxOptions",\n "SpherePoints",\n "SphericalBesselJ",\n "SphericalBesselY",\n "SphericalHankelH1",\n "SphericalHankelH2",\n "SphericalHarmonicY",\n "SphericalPlot3D",\n "SphericalRegion",\n "SphericalShell",\n "SpheroidalEigenvalue",\n "SpheroidalJoiningFactor",\n "SpheroidalPS",\n "SpheroidalPSPrime",\n "SpheroidalQS",\n "SpheroidalQSPrime",\n "SpheroidalRadialFactor",\n "SpheroidalS1",\n "SpheroidalS1Prime",\n "SpheroidalS2",\n "SpheroidalS2Prime",\n "Splice",\n "SplicedDistribution",\n "SplineClosed",\n "SplineDegree",\n "SplineKnots",\n "SplineWeights",\n "Split",\n "SplitBy",\n "SpokenString",\n "SpotLight",\n "Sqrt",\n "SqrtBox",\n "SqrtBoxOptions",\n "Square",\n "SquaredEuclideanDistance",\n "SquareFreeQ",\n "SquareIntersection",\n "SquareMatrixQ",\n "SquareRepeatingElement",\n "SquaresR",\n "SquareSubset",\n "SquareSubsetEqual",\n "SquareSuperset",\n "SquareSupersetEqual",\n "SquareUnion",\n "SquareWave",\n "SSSTriangle",\n "StabilityMargins",\n "StabilityMarginsStyle",\n "StableDistribution",\n "Stack",\n "StackBegin",\n "StackComplete",\n "StackedDateListPlot",\n "StackedListPlot",\n "StackInhibit",\n "StadiumShape",\n "StandardAtmosphereData",\n "StandardDeviation",\n "StandardDeviationFilter",\n "StandardForm",\n "Standardize",\n "Standardized",\n "StandardOceanData",\n "StandbyDistribution",\n "Star",\n "StarClusterData",\n "StarData",\n "StarGraph",\n "StartAsynchronousTask",\n "StartExternalSession",\n "StartingStepSize",\n "StartOfLine",\n "StartOfString",\n "StartProcess",\n "StartScheduledTask",\n "StartupSound",\n "StartWebSession",\n "StateDimensions",\n "StateFeedbackGains",\n "StateOutputEstimator",\n "StateResponse",\n "StateSpaceModel",\n "StateSpaceRealization",\n "StateSpaceTransform",\n "StateTransformationLinearize",\n "StationaryDistribution",\n "StationaryWaveletPacketTransform",\n "StationaryWaveletTransform",\n "StatusArea",\n "StatusCentrality",\n "StepMonitor",\n "StereochemistryElements",\n "StieltjesGamma",\n "StippleShading",\n "StirlingS1",\n "StirlingS2",\n "StopAsynchronousTask",\n "StoppingPowerData",\n "StopScheduledTask",\n "StrataVariables",\n "StratonovichProcess",\n "StraussHardcorePointProcess",\n "StraussPointProcess",\n "StreamColorFunction",\n "StreamColorFunctionScaling",\n "StreamDensityPlot",\n "StreamMarkers",\n "StreamPlot",\n "StreamPlot3D",\n "StreamPoints",\n "StreamPosition",\n "Streams",\n "StreamScale",\n "StreamStyle",\n "StrictInequalities",\n "String",\n "StringBreak",\n "StringByteCount",\n "StringCases",\n "StringContainsQ",\n "StringCount",\n "StringDelete",\n "StringDrop",\n "StringEndsQ",\n "StringExpression",\n "StringExtract",\n "StringForm",\n "StringFormat",\n "StringFormatQ",\n "StringFreeQ",\n "StringInsert",\n "StringJoin",\n "StringLength",\n "StringMatchQ",\n "StringPadLeft",\n "StringPadRight",\n "StringPart",\n "StringPartition",\n "StringPosition",\n "StringQ",\n "StringRepeat",\n "StringReplace",\n "StringReplaceList",\n "StringReplacePart",\n "StringReverse",\n "StringRiffle",\n "StringRotateLeft",\n "StringRotateRight",\n "StringSkeleton",\n "StringSplit",\n "StringStartsQ",\n "StringTake",\n "StringTakeDrop",\n "StringTemplate",\n "StringToByteArray",\n "StringToStream",\n "StringTrim",\n "StripBoxes",\n "StripOnInput",\n "StripStyleOnPaste",\n "StripWrapperBoxes",\n "StrokeForm",\n "Struckthrough",\n "StructuralImportance",\n "StructuredArray",\n "StructuredArrayHeadQ",\n "StructuredSelection",\n "StruveH",\n "StruveL",\n "Stub",\n "StudentTDistribution",\n "Style",\n "StyleBox",\n "StyleBoxAutoDelete",\n "StyleData",\n "StyleDefinitions",\n "StyleForm",\n "StyleHints",\n "StyleKeyMapping",\n "StyleMenuListing",\n "StyleNameDialogSettings",\n "StyleNames",\n "StylePrint",\n "StyleSheetPath",\n "Subdivide",\n "Subfactorial",\n "Subgraph",\n "SubMinus",\n "SubPlus",\n "SubresultantPolynomialRemainders",\n "SubresultantPolynomials",\n "Subresultants",\n "Subscript",\n "SubscriptBox",\n "SubscriptBoxOptions",\n "Subscripted",\n "Subsequences",\n "Subset",\n "SubsetCases",\n "SubsetCount",\n "SubsetEqual",\n "SubsetMap",\n "SubsetPosition",\n "SubsetQ",\n "SubsetReplace",\n "Subsets",\n "SubStar",\n "SubstitutionSystem",\n "Subsuperscript",\n "SubsuperscriptBox",\n "SubsuperscriptBoxOptions",\n "SubtitleEncoding",\n "SubtitleTrackSelection",\n "Subtract",\n "SubtractFrom",\n "SubtractSides",\n "SubValues",\n "Succeeds",\n "SucceedsEqual",\n "SucceedsSlantEqual",\n "SucceedsTilde",\n "Success",\n "SuchThat",\n "Sum",\n "SumConvergence",\n "SummationLayer",\n "Sunday",\n "SunPosition",\n "Sunrise",\n "Sunset",\n "SuperDagger",\n "SuperMinus",\n "SupernovaData",\n "SuperPlus",\n "Superscript",\n "SuperscriptBox",\n "SuperscriptBoxOptions",\n "Superset",\n "SupersetEqual",\n "SuperStar",\n "Surd",\n "SurdForm",\n "SurfaceAppearance",\n "SurfaceArea",\n "SurfaceColor",\n "SurfaceData",\n "SurfaceGraphics",\n "SurvivalDistribution",\n "SurvivalFunction",\n "SurvivalModel",\n "SurvivalModelFit",\n "SuspendPacket",\n "SuzukiDistribution",\n "SuzukiGroupSuz",\n "SwatchLegend",\n "Switch",\n "Symbol",\n "SymbolName",\n "SymletWavelet",\n "Symmetric",\n "SymmetricDifference",\n "SymmetricGroup",\n "SymmetricKey",\n "SymmetricMatrixQ",\n "SymmetricPolynomial",\n "SymmetricReduction",\n "Symmetrize",\n "SymmetrizedArray",\n "SymmetrizedArrayRules",\n "SymmetrizedDependentComponents",\n "SymmetrizedIndependentComponents",\n "SymmetrizedReplacePart",\n "SynchronousInitialization",\n "SynchronousUpdating",\n "Synonyms",\n "Syntax",\n "SyntaxForm",\n "SyntaxInformation",\n "SyntaxLength",\n "SyntaxPacket",\n "SyntaxQ",\n "SynthesizeMissingValues",\n "SystemCredential",\n "SystemCredentialData",\n "SystemCredentialKey",\n "SystemCredentialKeys",\n "SystemCredentialStoreObject",\n "SystemDialogInput",\n "SystemException",\n "SystemGet",\n "SystemHelpPath",\n "SystemInformation",\n "SystemInformationData",\n "SystemInstall",\n "SystemModel",\n "SystemModeler",\n "SystemModelExamples",\n "SystemModelLinearize",\n "SystemModelMeasurements",\n "SystemModelParametricSimulate",\n "SystemModelPlot",\n "SystemModelProgressReporting",\n "SystemModelReliability",\n "SystemModels",\n "SystemModelSimulate",\n "SystemModelSimulateSensitivity",\n "SystemModelSimulationData",\n "SystemOpen",\n "SystemOptions",\n "SystemProcessData",\n "SystemProcesses",\n "SystemsConnectionsModel",\n "SystemsModelControllerData",\n "SystemsModelDelay",\n "SystemsModelDelayApproximate",\n "SystemsModelDelete",\n "SystemsModelDimensions",\n "SystemsModelExtract",\n "SystemsModelFeedbackConnect",\n "SystemsModelLabels",\n "SystemsModelLinearity",\n "SystemsModelMerge",\n "SystemsModelOrder",\n "SystemsModelParallelConnect",\n "SystemsModelSeriesConnect",\n "SystemsModelStateFeedbackConnect",\n "SystemsModelVectorRelativeOrders",\n "SystemStub",\n "SystemTest",\n "Tab",\n "TabFilling",\n "Table",\n "TableAlignments",\n "TableDepth",\n "TableDirections",\n "TableForm",\n "TableHeadings",\n "TableSpacing",\n "TableView",\n "TableViewBox",\n "TableViewBoxAlignment",\n "TableViewBoxBackground",\n "TableViewBoxHeaders",\n "TableViewBoxItemSize",\n "TableViewBoxItemStyle",\n "TableViewBoxOptions",\n "TabSpacings",\n "TabView",\n "TabViewBox",\n "TabViewBoxOptions",\n "TagBox",\n "TagBoxNote",\n "TagBoxOptions",\n "TaggingRules",\n "TagSet",\n "TagSetDelayed",\n "TagStyle",\n "TagUnset",\n "Take",\n "TakeDrop",\n "TakeLargest",\n "TakeLargestBy",\n "TakeList",\n "TakeSmallest",\n "TakeSmallestBy",\n "TakeWhile",\n "Tally",\n "Tan",\n "Tanh",\n "TargetDevice",\n "TargetFunctions",\n "TargetSystem",\n "TargetUnits",\n "TaskAbort",\n "TaskExecute",\n "TaskObject",\n "TaskRemove",\n "TaskResume",\n "Tasks",\n "TaskSuspend",\n "TaskWait",\n "TautologyQ",\n "TelegraphProcess",\n "TemplateApply",\n "TemplateArgBox",\n "TemplateBox",\n "TemplateBoxOptions",\n "TemplateEvaluate",\n "TemplateExpression",\n "TemplateIf",\n "TemplateObject",\n "TemplateSequence",\n "TemplateSlot",\n "TemplateSlotSequence",\n "TemplateUnevaluated",\n "TemplateVerbatim",\n "TemplateWith",\n "TemporalData",\n "TemporalRegularity",\n "Temporary",\n "TemporaryVariable",\n "TensorContract",\n "TensorDimensions",\n "TensorExpand",\n "TensorProduct",\n "TensorQ",\n "TensorRank",\n "TensorReduce",\n "TensorSymmetry",\n "TensorTranspose",\n "TensorWedge",\n "TerminatedEvaluation",\n "TernaryListPlot",\n "TernaryPlotCorners",\n "TestID",\n "TestReport",\n "TestReportObject",\n "TestResultObject",\n "Tetrahedron",\n "TetrahedronBox",\n "TetrahedronBoxOptions",\n "TeXForm",\n "TeXSave",\n "Text",\n "Text3DBox",\n "Text3DBoxOptions",\n "TextAlignment",\n "TextBand",\n "TextBoundingBox",\n "TextBox",\n "TextCases",\n "TextCell",\n "TextClipboardType",\n "TextContents",\n "TextData",\n "TextElement",\n "TextForm",\n "TextGrid",\n "TextJustification",\n "TextLine",\n "TextPacket",\n "TextParagraph",\n "TextPosition",\n "TextRecognize",\n "TextSearch",\n "TextSearchReport",\n "TextSentences",\n "TextString",\n "TextStructure",\n "TextStyle",\n "TextTranslation",\n "Texture",\n "TextureCoordinateFunction",\n "TextureCoordinateScaling",\n "TextWords",\n "Therefore",\n "ThermodynamicData",\n "ThermometerGauge",\n "Thick",\n "Thickness",\n "Thin",\n "Thinning",\n "ThisLink",\n "ThomasPointProcess",\n "ThompsonGroupTh",\n "Thread",\n "Threaded",\n "ThreadingLayer",\n "ThreeJSymbol",\n "Threshold",\n "Through",\n "Throw",\n "ThueMorse",\n "Thumbnail",\n "Thursday",\n "TickDirection",\n "TickLabelOrientation",\n "TickLabelPositioning",\n "TickLabels",\n "TickLengths",\n "TickPositions",\n "Ticks",\n "TicksStyle",\n "TideData",\n "Tilde",\n "TildeEqual",\n "TildeFullEqual",\n "TildeTilde",\n "TimeConstrained",\n "TimeConstraint",\n "TimeDirection",\n "TimeFormat",\n "TimeGoal",\n "TimelinePlot",\n "TimeObject",\n "TimeObjectQ",\n "TimeRemaining",\n "Times",\n "TimesBy",\n "TimeSeries",\n "TimeSeriesAggregate",\n "TimeSeriesForecast",\n "TimeSeriesInsert",\n "TimeSeriesInvertibility",\n "TimeSeriesMap",\n "TimeSeriesMapThread",\n "TimeSeriesModel",\n "TimeSeriesModelFit",\n "TimeSeriesResample",\n "TimeSeriesRescale",\n "TimeSeriesShift",\n "TimeSeriesThread",\n "TimeSeriesWindow",\n "TimeSystem",\n "TimeSystemConvert",\n "TimeUsed",\n "TimeValue",\n "TimeWarpingCorrespondence",\n "TimeWarpingDistance",\n "TimeZone",\n "TimeZoneConvert",\n "TimeZoneOffset",\n "Timing",\n "Tiny",\n "TitleGrouping",\n "TitsGroupT",\n "ToBoxes",\n "ToCharacterCode",\n "ToColor",\n "ToContinuousTimeModel",\n "ToDate",\n "Today",\n "ToDiscreteTimeModel",\n "ToEntity",\n "ToeplitzMatrix",\n "ToExpression",\n "ToFileName",\n "Together",\n "Toggle",\n "ToggleFalse",\n "Toggler",\n "TogglerBar",\n "TogglerBox",\n "TogglerBoxOptions",\n "ToHeldExpression",\n "ToInvertibleTimeSeries",\n "TokenWords",\n "Tolerance",\n "ToLowerCase",\n "Tomorrow",\n "ToNumberField",\n "TooBig",\n "Tooltip",\n "TooltipBox",\n "TooltipBoxOptions",\n "TooltipDelay",\n "TooltipStyle",\n "ToonShading",\n "Top",\n "TopHatTransform",\n "ToPolarCoordinates",\n "TopologicalSort",\n "ToRadicals",\n "ToRawPointer",\n "ToRules",\n "Torus",\n "TorusGraph",\n "ToSphericalCoordinates",\n "ToString",\n "Total",\n "TotalHeight",\n "TotalLayer",\n "TotalVariationFilter",\n "TotalWidth",\n "TouchPosition",\n "TouchscreenAutoZoom",\n "TouchscreenControlPlacement",\n "ToUpperCase",\n "TourVideo",\n "Tr",\n "Trace",\n "TraceAbove",\n "TraceAction",\n "TraceBackward",\n "TraceDepth",\n "TraceDialog",\n "TraceForward",\n "TraceInternal",\n "TraceLevel",\n "TraceOff",\n "TraceOn",\n "TraceOriginal",\n "TracePrint",\n "TraceScan",\n "TrackCellChangeTimes",\n "TrackedSymbols",\n "TrackingFunction",\n "TracyWidomDistribution",\n "TradingChart",\n "TraditionalForm",\n "TraditionalFunctionNotation",\n "TraditionalNotation",\n "TraditionalOrder",\n "TrainImageContentDetector",\n "TrainingProgressCheckpointing",\n "TrainingProgressFunction",\n "TrainingProgressMeasurements",\n "TrainingProgressReporting",\n "TrainingStoppingCriterion",\n "TrainingUpdateSchedule",\n "TrainTextContentDetector",\n "TransferFunctionCancel",\n "TransferFunctionExpand",\n "TransferFunctionFactor",\n "TransferFunctionModel",\n "TransferFunctionPoles",\n "TransferFunctionTransform",\n "TransferFunctionZeros",\n "TransformationClass",\n "TransformationFunction",\n "TransformationFunctions",\n "TransformationMatrix",\n "TransformedDistribution",\n "TransformedField",\n "TransformedProcess",\n "TransformedRegion",\n "TransitionDirection",\n "TransitionDuration",\n "TransitionEffect",\n "TransitiveClosureGraph",\n "TransitiveReductionGraph",\n "Translate",\n "TranslationOptions",\n "TranslationTransform",\n "Transliterate",\n "Transparent",\n "TransparentColor",\n "Transpose",\n "TransposeLayer",\n "TrapEnterKey",\n "TrapSelection",\n "TravelDirections",\n "TravelDirectionsData",\n "TravelDistance",\n "TravelDistanceList",\n "TravelMethod",\n "TravelTime",\n "Tree",\n "TreeCases",\n "TreeChildren",\n "TreeCount",\n "TreeData",\n "TreeDelete",\n "TreeDepth",\n "TreeElementCoordinates",\n "TreeElementLabel",\n "TreeElementLabelFunction",\n "TreeElementLabelStyle",\n "TreeElementShape",\n "TreeElementShapeFunction",\n "TreeElementSize",\n "TreeElementSizeFunction",\n "TreeElementStyle",\n "TreeElementStyleFunction",\n "TreeExpression",\n "TreeExtract",\n "TreeFold",\n "TreeForm",\n "TreeGraph",\n "TreeGraphQ",\n "TreeInsert",\n "TreeLayout",\n "TreeLeafCount",\n "TreeLeafQ",\n "TreeLeaves",\n "TreeLevel",\n "TreeMap",\n "TreeMapAt",\n "TreeOutline",\n "TreePlot",\n "TreePosition",\n "TreeQ",\n "TreeReplacePart",\n "TreeRules",\n "TreeScan",\n "TreeSelect",\n "TreeSize",\n "TreeTraversalOrder",\n "TrendStyle",\n "Triangle",\n "TriangleCenter",\n "TriangleConstruct",\n "TriangleMeasurement",\n "TriangleWave",\n "TriangularDistribution",\n "TriangulateMesh",\n "Trig",\n "TrigExpand",\n "TrigFactor",\n "TrigFactorList",\n "Trigger",\n "TrigReduce",\n "TrigToExp",\n "TrimmedMean",\n "TrimmedVariance",\n "TropicalStormData",\n "True",\n "TrueQ",\n "TruncatedDistribution",\n "TruncatedPolyhedron",\n "TsallisQExponentialDistribution",\n "TsallisQGaussianDistribution",\n "TTest",\n "Tube",\n "TubeBezierCurveBox",\n "TubeBezierCurveBoxOptions",\n "TubeBox",\n "TubeBoxOptions",\n "TubeBSplineCurveBox",\n "TubeBSplineCurveBoxOptions",\n "Tuesday",\n "TukeyLambdaDistribution",\n "TukeyWindow",\n "TunnelData",\n "Tuples",\n "TuranGraph",\n "TuringMachine",\n "TuttePolynomial",\n "TwoWayRule",\n "Typed",\n "TypeDeclaration",\n "TypeEvaluate",\n "TypeHint",\n "TypeOf",\n "TypeSpecifier",\n "UnateQ",\n "Uncompress",\n "UnconstrainedParameters",\n "Undefined",\n "UnderBar",\n "Underflow",\n "Underlined",\n "Underoverscript",\n "UnderoverscriptBox",\n "UnderoverscriptBoxOptions",\n "Underscript",\n "UnderscriptBox",\n "UnderscriptBoxOptions",\n "UnderseaFeatureData",\n "UndirectedEdge",\n "UndirectedGraph",\n "UndirectedGraphQ",\n "UndoOptions",\n "UndoTrackedVariables",\n "Unequal",\n "UnequalTo",\n "Unevaluated",\n "UniformDistribution",\n "UniformGraphDistribution",\n "UniformPolyhedron",\n "UniformSumDistribution",\n "Uninstall",\n "Union",\n "UnionedEntityClass",\n "UnionPlus",\n "Unique",\n "UniqueElements",\n "UnitaryMatrixQ",\n "UnitBox",\n "UnitConvert",\n "UnitDimensions",\n "Unitize",\n "UnitRootTest",\n "UnitSimplify",\n "UnitStep",\n "UnitSystem",\n "UnitTriangle",\n "UnitVector",\n "UnitVectorLayer",\n "UnityDimensions",\n "UniverseModelData",\n "UniversityData",\n "UnixTime",\n "UnlabeledTree",\n "UnmanageObject",\n "Unprotect",\n "UnregisterExternalEvaluator",\n "UnsameQ",\n "UnsavedVariables",\n "Unset",\n "UnsetShared",\n "Until",\n "UntrackedVariables",\n "Up",\n "UpArrow",\n "UpArrowBar",\n "UpArrowDownArrow",\n "Update",\n "UpdateDynamicObjects",\n "UpdateDynamicObjectsSynchronous",\n "UpdateInterval",\n "UpdatePacletSites",\n "UpdateSearchIndex",\n "UpDownArrow",\n "UpEquilibrium",\n "UpperCaseQ",\n "UpperLeftArrow",\n "UpperRightArrow",\n "UpperTriangularize",\n "UpperTriangularMatrix",\n "UpperTriangularMatrixQ",\n "Upsample",\n "UpSet",\n "UpSetDelayed",\n "UpTee",\n "UpTeeArrow",\n "UpTo",\n "UpValues",\n "URL",\n "URLBuild",\n "URLDecode",\n "URLDispatcher",\n "URLDownload",\n "URLDownloadSubmit",\n "URLEncode",\n "URLExecute",\n "URLExpand",\n "URLFetch",\n "URLFetchAsynchronous",\n "URLParse",\n "URLQueryDecode",\n "URLQueryEncode",\n "URLRead",\n "URLResponseTime",\n "URLSave",\n "URLSaveAsynchronous",\n "URLShorten",\n "URLSubmit",\n "UseEmbeddedLibrary",\n "UseGraphicsRange",\n "UserDefinedWavelet",\n "Using",\n "UsingFrontEnd",\n "UtilityFunction",\n "V2Get",\n "ValenceErrorHandling",\n "ValenceFilling",\n "ValidationLength",\n "ValidationSet",\n "ValueBox",\n "ValueBoxOptions",\n "ValueDimensions",\n "ValueForm",\n "ValuePreprocessingFunction",\n "ValueQ",\n "Values",\n "ValuesData",\n "VandermondeMatrix",\n "Variables",\n "Variance",\n "VarianceEquivalenceTest",\n "VarianceEstimatorFunction",\n "VarianceGammaDistribution",\n "VarianceGammaPointProcess",\n "VarianceTest",\n "VariogramFunction",\n "VariogramModel",\n "VectorAngle",\n "VectorAround",\n "VectorAspectRatio",\n "VectorColorFunction",\n "VectorColorFunctionScaling",\n "VectorDensityPlot",\n "VectorDisplacementPlot",\n "VectorDisplacementPlot3D",\n "VectorGlyphData",\n "VectorGreater",\n "VectorGreaterEqual",\n "VectorLess",\n "VectorLessEqual",\n "VectorMarkers",\n "VectorPlot",\n "VectorPlot3D",\n "VectorPoints",\n "VectorQ",\n "VectorRange",\n "Vectors",\n "VectorScale",\n "VectorScaling",\n "VectorSizes",\n "VectorStyle",\n "Vee",\n "Verbatim",\n "Verbose",\n "VerificationTest",\n "VerifyConvergence",\n "VerifyDerivedKey",\n "VerifyDigitalSignature",\n "VerifyFileSignature",\n "VerifyInterpretation",\n "VerifySecurityCertificates",\n "VerifySolutions",\n "VerifyTestAssumptions",\n "VersionedPreferences",\n "VertexAdd",\n "VertexCapacity",\n "VertexChromaticNumber",\n "VertexColors",\n "VertexComponent",\n "VertexConnectivity",\n "VertexContract",\n "VertexCoordinateRules",\n "VertexCoordinates",\n "VertexCorrelationSimilarity",\n "VertexCosineSimilarity",\n "VertexCount",\n "VertexCoverQ",\n "VertexDataCoordinates",\n "VertexDegree",\n "VertexDelete",\n "VertexDiceSimilarity",\n "VertexEccentricity",\n "VertexInComponent",\n "VertexInComponentGraph",\n "VertexInDegree",\n "VertexIndex",\n "VertexJaccardSimilarity",\n "VertexLabeling",\n "VertexLabels",\n "VertexLabelStyle",\n "VertexList",\n "VertexNormals",\n "VertexOutComponent",\n "VertexOutComponentGraph",\n "VertexOutDegree",\n "VertexQ",\n "VertexRenderingFunction",\n "VertexReplace",\n "VertexShape",\n "VertexShapeFunction",\n "VertexSize",\n "VertexStyle",\n "VertexTextureCoordinates",\n "VertexTransitiveGraphQ",\n "VertexWeight",\n "VertexWeightedGraphQ",\n "Vertical",\n "VerticalBar",\n "VerticalForm",\n "VerticalGauge",\n "VerticalSeparator",\n "VerticalSlider",\n "VerticalTilde",\n "Video",\n "VideoCapture",\n "VideoCombine",\n "VideoDelete",\n "VideoEncoding",\n "VideoExtractFrames",\n "VideoFrameList",\n "VideoFrameMap",\n "VideoGenerator",\n "VideoInsert",\n "VideoIntervals",\n "VideoJoin",\n "VideoMap",\n "VideoMapList",\n "VideoMapTimeSeries",\n "VideoPadding",\n "VideoPause",\n "VideoPlay",\n "VideoQ",\n "VideoRecord",\n "VideoReplace",\n "VideoScreenCapture",\n "VideoSplit",\n "VideoStop",\n "VideoStream",\n "VideoStreams",\n "VideoTimeStretch",\n "VideoTrackSelection",\n "VideoTranscode",\n "VideoTransparency",\n "VideoTrim",\n "ViewAngle",\n "ViewCenter",\n "ViewMatrix",\n "ViewPoint",\n "ViewPointSelectorSettings",\n "ViewPort",\n "ViewProjection",\n "ViewRange",\n "ViewVector",\n "ViewVertical",\n "VirtualGroupData",\n "Visible",\n "VisibleCell",\n "VoiceStyleData",\n "VoigtDistribution",\n "VolcanoData",\n "Volume",\n "VonMisesDistribution",\n "VoronoiMesh",\n "WaitAll",\n "WaitAsynchronousTask",\n "WaitNext",\n "WaitUntil",\n "WakebyDistribution",\n "WalleniusHypergeometricDistribution",\n "WaringYuleDistribution",\n "WarpingCorrespondence",\n "WarpingDistance",\n "WatershedComponents",\n "WatsonUSquareTest",\n "WattsStrogatzGraphDistribution",\n "WaveletBestBasis",\n "WaveletFilterCoefficients",\n "WaveletImagePlot",\n "WaveletListPlot",\n "WaveletMapIndexed",\n "WaveletMatrixPlot",\n "WaveletPhi",\n "WaveletPsi",\n "WaveletScale",\n "WaveletScalogram",\n "WaveletThreshold",\n "WavePDEComponent",\n "WeaklyConnectedComponents",\n "WeaklyConnectedGraphComponents",\n "WeaklyConnectedGraphQ",\n "WeakStationarity",\n "WeatherData",\n "WeatherForecastData",\n "WebAudioSearch",\n "WebColumn",\n "WebElementObject",\n "WeberE",\n "WebExecute",\n "WebImage",\n "WebImageSearch",\n "WebItem",\n "WebPageMetaInformation",\n "WebRow",\n "WebSearch",\n "WebSessionObject",\n "WebSessions",\n "WebWindowObject",\n "Wedge",\n "Wednesday",\n "WeibullDistribution",\n "WeierstrassE1",\n "WeierstrassE2",\n "WeierstrassE3",\n "WeierstrassEta1",\n "WeierstrassEta2",\n "WeierstrassEta3",\n "WeierstrassHalfPeriods",\n "WeierstrassHalfPeriodW1",\n "WeierstrassHalfPeriodW2",\n "WeierstrassHalfPeriodW3",\n "WeierstrassInvariantG2",\n "WeierstrassInvariantG3",\n "WeierstrassInvariants",\n "WeierstrassP",\n "WeierstrassPPrime",\n "WeierstrassSigma",\n "WeierstrassZeta",\n "WeightedAdjacencyGraph",\n "WeightedAdjacencyMatrix",\n "WeightedData",\n "WeightedGraphQ",\n "Weights",\n "WelchWindow",\n "WheelGraph",\n "WhenEvent",\n "Which",\n "While",\n "White",\n "WhiteNoiseProcess",\n "WhitePoint",\n "Whitespace",\n "WhitespaceCharacter",\n "WhittakerM",\n "WhittakerW",\n "WholeCellGroupOpener",\n "WienerFilter",\n "WienerProcess",\n "WignerD",\n "WignerSemicircleDistribution",\n "WikidataData",\n "WikidataSearch",\n "WikipediaData",\n "WikipediaSearch",\n "WilksW",\n "WilksWTest",\n "WindDirectionData",\n "WindingCount",\n "WindingPolygon",\n "WindowClickSelect",\n "WindowElements",\n "WindowFloating",\n "WindowFrame",\n "WindowFrameElements",\n "WindowMargins",\n "WindowMovable",\n "WindowOpacity",\n "WindowPersistentStyles",\n "WindowSelected",\n "WindowSize",\n "WindowStatusArea",\n "WindowTitle",\n "WindowToolbars",\n "WindowWidth",\n "WindSpeedData",\n "WindVectorData",\n "WinsorizedMean",\n "WinsorizedVariance",\n "WishartMatrixDistribution",\n "With",\n "WithCleanup",\n "WithLock",\n "WolframAlpha",\n "WolframAlphaDate",\n "WolframAlphaQuantity",\n "WolframAlphaResult",\n "WolframCloudSettings",\n "WolframLanguageData",\n "Word",\n "WordBoundary",\n "WordCharacter",\n "WordCloud",\n "WordCount",\n "WordCounts",\n "WordData",\n "WordDefinition",\n "WordFrequency",\n "WordFrequencyData",\n "WordList",\n "WordOrientation",\n "WordSearch",\n "WordSelectionFunction",\n "WordSeparators",\n "WordSpacings",\n "WordStem",\n "WordTranslation",\n "WorkingPrecision",\n "WrapAround",\n "Write",\n "WriteLine",\n "WriteString",\n "Wronskian",\n "XMLElement",\n "XMLObject",\n "XMLTemplate",\n "Xnor",\n "Xor",\n "XYZColor",\n "Yellow",\n "Yesterday",\n "YuleDissimilarity",\n "ZernikeR",\n "ZeroSymmetric",\n "ZeroTest",\n "ZeroWidthTimes",\n "Zeta",\n "ZetaZero",\n "ZIPCodeData",\n "ZipfDistribution",\n "ZoomCenter",\n "ZoomFactor",\n "ZTest",\n "ZTransform",\n "$Aborted",\n "$ActivationGroupID",\n "$ActivationKey",\n "$ActivationUserRegistered",\n "$AddOnsDirectory",\n "$AllowDataUpdates",\n "$AllowExternalChannelFunctions",\n "$AllowInternet",\n "$AssertFunction",\n "$Assumptions",\n "$AsynchronousTask",\n "$AudioDecoders",\n "$AudioEncoders",\n "$AudioInputDevices",\n "$AudioOutputDevices",\n "$BaseDirectory",\n "$BasePacletsDirectory",\n "$BatchInput",\n "$BatchOutput",\n "$BlockchainBase",\n "$BoxForms",\n "$ByteOrdering",\n "$CacheBaseDirectory",\n "$Canceled",\n "$ChannelBase",\n "$CharacterEncoding",\n "$CharacterEncodings",\n "$CloudAccountName",\n "$CloudBase",\n "$CloudConnected",\n "$CloudConnection",\n "$CloudCreditsAvailable",\n "$CloudEvaluation",\n "$CloudExpressionBase",\n "$CloudObjectNameFormat",\n "$CloudObjectURLType",\n "$CloudRootDirectory",\n "$CloudSymbolBase",\n "$CloudUserID",\n "$CloudUserUUID",\n "$CloudVersion",\n "$CloudVersionNumber",\n "$CloudWolframEngineVersionNumber",\n "$CommandLine",\n "$CompilationTarget",\n "$CompilerEnvironment",\n "$ConditionHold",\n "$ConfiguredKernels",\n "$Context",\n "$ContextAliases",\n "$ContextPath",\n "$ControlActiveSetting",\n "$Cookies",\n "$CookieStore",\n "$CreationDate",\n "$CryptographicEllipticCurveNames",\n "$CurrentLink",\n "$CurrentTask",\n "$CurrentWebSession",\n "$DataStructures",\n "$DateStringFormat",\n "$DefaultAudioInputDevice",\n "$DefaultAudioOutputDevice",\n "$DefaultFont",\n "$DefaultFrontEnd",\n "$DefaultImagingDevice",\n "$DefaultKernels",\n "$DefaultLocalBase",\n "$DefaultLocalKernel",\n "$DefaultMailbox",\n "$DefaultNetworkInterface",\n "$DefaultPath",\n "$DefaultProxyRules",\n "$DefaultRemoteBatchSubmissionEnvironment",\n "$DefaultRemoteKernel",\n "$DefaultSystemCredentialStore",\n "$Display",\n "$DisplayFunction",\n "$DistributedContexts",\n "$DynamicEvaluation",\n "$Echo",\n "$EmbedCodeEnvironments",\n "$EmbeddableServices",\n "$EntityStores",\n "$Epilog",\n "$EvaluationCloudBase",\n "$EvaluationCloudObject",\n "$EvaluationEnvironment",\n "$ExportFormats",\n "$ExternalIdentifierTypes",\n "$ExternalStorageBase",\n "$Failed",\n "$FinancialDataSource",\n "$FontFamilies",\n "$FormatType",\n "$FrontEnd",\n "$FrontEndSession",\n "$GeneratedAssetLocation",\n "$GeoEntityTypes",\n "$GeoLocation",\n "$GeoLocationCity",\n "$GeoLocationCountry",\n "$GeoLocationPrecision",\n "$GeoLocationSource",\n "$HistoryLength",\n "$HomeDirectory",\n "$HTMLExportRules",\n "$HTTPCookies",\n "$HTTPRequest",\n "$IgnoreEOF",\n "$ImageFormattingWidth",\n "$ImageResolution",\n "$ImagingDevice",\n "$ImagingDevices",\n "$ImportFormats",\n "$IncomingMailSettings",\n "$InitialDirectory",\n "$Initialization",\n "$InitializationContexts",\n "$Input",\n "$InputFileName",\n "$InputStreamMethods",\n "$Inspector",\n "$InstallationDate",\n "$InstallationDirectory",\n "$InterfaceEnvironment",\n "$InterpreterTypes",\n "$IterationLimit",\n "$KernelCount",\n "$KernelID",\n "$Language",\n "$LaunchDirectory",\n "$LibraryPath",\n "$LicenseExpirationDate",\n "$LicenseID",\n "$LicenseProcesses",\n "$LicenseServer",\n "$LicenseSubprocesses",\n "$LicenseType",\n "$Line",\n "$Linked",\n "$LinkSupported",\n "$LoadedFiles",\n "$LocalBase",\n "$LocalSymbolBase",\n "$MachineAddresses",\n "$MachineDomain",\n "$MachineDomains",\n "$MachineEpsilon",\n "$MachineID",\n "$MachineName",\n "$MachinePrecision",\n "$MachineType",\n "$MaxDisplayedChildren",\n "$MaxExtraPrecision",\n "$MaxLicenseProcesses",\n "$MaxLicenseSubprocesses",\n "$MaxMachineNumber",\n "$MaxNumber",\n "$MaxPiecewiseCases",\n "$MaxPrecision",\n "$MaxRootDegree",\n "$MessageGroups",\n "$MessageList",\n "$MessagePrePrint",\n "$Messages",\n "$MinMachineNumber",\n "$MinNumber",\n "$MinorReleaseNumber",\n "$MinPrecision",\n "$MobilePhone",\n "$ModuleNumber",\n "$NetworkConnected",\n "$NetworkInterfaces",\n "$NetworkLicense",\n "$NewMessage",\n "$NewSymbol",\n "$NotebookInlineStorageLimit",\n "$Notebooks",\n "$NoValue",\n "$NumberMarks",\n "$Off",\n "$OperatingSystem",\n "$Output",\n "$OutputForms",\n "$OutputSizeLimit",\n "$OutputStreamMethods",\n "$Packages",\n "$ParentLink",\n "$ParentProcessID",\n "$PasswordFile",\n "$PatchLevelID",\n "$Path",\n "$PathnameSeparator",\n "$PerformanceGoal",\n "$Permissions",\n "$PermissionsGroupBase",\n "$PersistenceBase",\n "$PersistencePath",\n "$PipeSupported",\n "$PlotTheme",\n "$Post",\n "$Pre",\n "$PreferencesDirectory",\n "$PreInitialization",\n "$PrePrint",\n "$PreRead",\n "$PrintForms",\n "$PrintLiteral",\n "$Printout3DPreviewer",\n "$ProcessID",\n "$ProcessorCount",\n "$ProcessorType",\n "$ProductInformation",\n "$ProgramName",\n "$ProgressReporting",\n "$PublisherID",\n "$RandomGeneratorState",\n "$RandomState",\n "$RecursionLimit",\n "$RegisteredDeviceClasses",\n "$RegisteredUserName",\n "$ReleaseNumber",\n "$RequesterAddress",\n "$RequesterCloudUserID",\n "$RequesterCloudUserUUID",\n "$RequesterWolframID",\n "$RequesterWolframUUID",\n "$ResourceSystemBase",\n "$ResourceSystemPath",\n "$RootDirectory",\n "$ScheduledTask",\n "$ScriptCommandLine",\n "$ScriptInputString",\n "$SecuredAuthenticationKeyTokens",\n "$ServiceCreditsAvailable",\n "$Services",\n "$SessionID",\n "$SetParentLink",\n "$SharedFunctions",\n "$SharedVariables",\n "$SoundDisplay",\n "$SoundDisplayFunction",\n "$SourceLink",\n "$SSHAuthentication",\n "$SubtitleDecoders",\n "$SubtitleEncoders",\n "$SummaryBoxDataSizeLimit",\n "$SuppressInputFormHeads",\n "$SynchronousEvaluation",\n "$SyntaxHandler",\n "$System",\n "$SystemCharacterEncoding",\n "$SystemCredentialStore",\n "$SystemID",\n "$SystemMemory",\n "$SystemShell",\n "$SystemTimeZone",\n "$SystemWordLength",\n "$TargetSystems",\n "$TemplatePath",\n "$TemporaryDirectory",\n "$TemporaryPrefix",\n "$TestFileName",\n "$TextStyle",\n "$TimedOut",\n "$TimeUnit",\n "$TimeZone",\n "$TimeZoneEntity",\n "$TopDirectory",\n "$TraceOff",\n "$TraceOn",\n "$TracePattern",\n "$TracePostAction",\n "$TracePreAction",\n "$UnitSystem",\n "$Urgent",\n "$UserAddOnsDirectory",\n "$UserAgentLanguages",\n "$UserAgentMachine",\n "$UserAgentName",\n "$UserAgentOperatingSystem",\n "$UserAgentString",\n "$UserAgentVersion",\n "$UserBaseDirectory",\n "$UserBasePacletsDirectory",\n "$UserDocumentsDirectory",\n "$Username",\n "$UserName",\n "$UserURLBase",\n "$Version",\n "$VersionNumber",\n "$VideoDecoders",\n "$VideoEncoders",\n "$VoiceStyles",\n "$WolframDocumentsDirectory",\n "$WolframID",\n "$WolframUUID"\n];\n\n/*\nLanguage: Wolfram Language\nDescription: The Wolfram Language is the programming language used in Wolfram Mathematica, a modern technical computing system spanning most areas of technical computing.\nAuthors: Patrick Scheibe , Robert Jacobson \nWebsite: https://www.wolfram.com/mathematica/\nCategory: scientific\n*/\n\n\n/** @type LanguageFn */\nfunction mathematica(hljs) {\n const regex = hljs.regex;\n /*\n This rather scary looking matching of Mathematica numbers is carefully explained by Robert Jacobson here:\n https://wltools.github.io/LanguageSpec/Specification/Syntax/Number-representations/\n */\n const BASE_RE = /([2-9]|[1-2]\\d|[3][0-5])\\^\\^/;\n const BASE_DIGITS_RE = /(\\w*\\.\\w+|\\w+\\.\\w*|\\w+)/;\n const NUMBER_RE = /(\\d*\\.\\d+|\\d+\\.\\d*|\\d+)/;\n const BASE_NUMBER_RE = regex.either(regex.concat(BASE_RE, BASE_DIGITS_RE), NUMBER_RE);\n\n const ACCURACY_RE = /``[+-]?(\\d*\\.\\d+|\\d+\\.\\d*|\\d+)/;\n const PRECISION_RE = /`([+-]?(\\d*\\.\\d+|\\d+\\.\\d*|\\d+))?/;\n const APPROXIMATE_NUMBER_RE = regex.either(ACCURACY_RE, PRECISION_RE);\n\n const SCIENTIFIC_NOTATION_RE = /\\*\\^[+-]?\\d+/;\n\n const MATHEMATICA_NUMBER_RE = regex.concat(\n BASE_NUMBER_RE,\n regex.optional(APPROXIMATE_NUMBER_RE),\n regex.optional(SCIENTIFIC_NOTATION_RE)\n );\n\n const NUMBERS = {\n className: \'number\',\n relevance: 0,\n begin: MATHEMATICA_NUMBER_RE\n };\n\n const SYMBOL_RE = /[a-zA-Z$][a-zA-Z0-9$]*/;\n const SYSTEM_SYMBOLS_SET = new Set(SYSTEM_SYMBOLS);\n /** @type {Mode} */\n const SYMBOLS = { variants: [\n {\n className: \'builtin-symbol\',\n begin: SYMBOL_RE,\n // for performance out of fear of regex.either(...Mathematica.SYSTEM_SYMBOLS)\n "on:begin": (match, response) => {\n if (!SYSTEM_SYMBOLS_SET.has(match[0])) response.ignoreMatch();\n }\n },\n {\n className: \'symbol\',\n relevance: 0,\n begin: SYMBOL_RE\n }\n ] };\n\n const NAMED_CHARACTER = {\n className: \'named-character\',\n begin: /\\\\\\[[$a-zA-Z][$a-zA-Z0-9]+\\]/\n };\n\n const OPERATORS = {\n className: \'operator\',\n relevance: 0,\n begin: /[+\\-*/,;.:@~=><&|_`\'^?!%]+/\n };\n const PATTERNS = {\n className: \'pattern\',\n relevance: 0,\n begin: /([a-zA-Z$][a-zA-Z0-9$]*)?_+([a-zA-Z$][a-zA-Z0-9$]*)?/\n };\n\n const SLOTS = {\n className: \'slot\',\n relevance: 0,\n begin: /#[a-zA-Z$][a-zA-Z0-9$]*|#+[0-9]?/\n };\n\n const BRACES = {\n className: \'brace\',\n relevance: 0,\n begin: /[[\\](){}]/\n };\n\n const MESSAGES = {\n className: \'message-name\',\n relevance: 0,\n begin: regex.concat("::", SYMBOL_RE)\n };\n\n return {\n name: \'Mathematica\',\n aliases: [\n \'mma\',\n \'wl\'\n ],\n classNameAliases: {\n brace: \'punctuation\',\n pattern: \'type\',\n slot: \'type\',\n symbol: \'variable\',\n \'named-character\': \'variable\',\n \'builtin-symbol\': \'built_in\',\n \'message-name\': \'string\'\n },\n contains: [\n hljs.COMMENT(/\\(\\*/, /\\*\\)/, { contains: [ \'self\' ] }),\n PATTERNS,\n SLOTS,\n MESSAGES,\n SYMBOLS,\n NAMED_CHARACTER,\n hljs.QUOTE_STRING_MODE,\n NUMBERS,\n OPERATORS,\n BRACES\n ]\n };\n}\n\nmodule.exports = mathematica;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjAxLmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsYUFBYSxNQUFNO0FBQ25CLG9CQUFvQjtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQjtBQUNwQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxxQ0FBcUMsc0JBQXNCO0FBQzNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL29ic2lkaWFuLW1pbmRtYXAtbmV4dGdlbi8uL25vZGVfbW9kdWxlcy8ucG5wbS9oaWdobGlnaHQuanNAMTEuMTEuMS9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvbWF0aGVtYXRpY2EuanM/M2U5YyJdLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBTWVNURU1fU1lNQk9MUyA9IFtcbiAgXCJBQVNUcmlhbmdsZVwiLFxuICBcIkFiZWxpYW5Hcm91cFwiLFxuICBcIkFib3J0XCIsXG4gIFwiQWJvcnRLZXJuZWxzXCIsXG4gIFwiQWJvcnRQcm90ZWN0XCIsXG4gIFwiQWJvcnRTY2hlZHVsZWRUYXNrXCIsXG4gIFwiQWJvdmVcIixcbiAgXCJBYnNcIixcbiAgXCJBYnNBcmdcIixcbiAgXCJBYnNBcmdQbG90XCIsXG4gIFwiQWJzb2x1dGVcIixcbiAgXCJBYnNvbHV0ZUNvcnJlbGF0aW9uXCIsXG4gIFwiQWJzb2x1dGVDb3JyZWxhdGlvbkZ1bmN0aW9uXCIsXG4gIFwiQWJzb2x1dGVDdXJyZW50VmFsdWVcIixcbiAgXCJBYnNvbHV0ZURhc2hpbmdcIixcbiAgXCJBYnNvbHV0ZUZpbGVOYW1lXCIsXG4gIFwiQWJzb2x1dGVPcHRpb25zXCIsXG4gIFwiQWJzb2x1dGVQb2ludFNpemVcIixcbiAgXCJBYnNvbHV0ZVRoaWNrbmVzc1wiLFxuICBcIkFic29sdXRlVGltZVwiLFxuICBcIkFic29sdXRlVGltaW5nXCIsXG4gIFwiQWNjZXB0YW5jZVRocmVzaG9sZFwiLFxuICBcIkFjY291bnRpbmdGb3JtXCIsXG4gIFwiQWNjdW11bGF0ZVwiLFxuICBcIkFjY3VyYWN5XCIsXG4gIFwiQWNjdXJhY3lHb2FsXCIsXG4gIFwiQWNvdXN0aWNBYnNvcmJpbmdWYWx1ZVwiLFxuICBcIkFjb3VzdGljSW1wZWRhbmNlVmFsdWVcIixcbiAgXCJBY291c3RpY05vcm1hbFZlbG9jaXR5VmFsdWVcIixcbiAgXCJBY291c3RpY1BERUNvbXBvbmVudFwiLFxuICBcIkFjb3VzdGljUHJlc3N1cmVDb25kaXRpb25cIixcbiAgXCJBY291c3RpY1JhZGlhdGlvblZhbHVlXCIsXG4gIFwiQWNvdXN0aWNTb3VuZEhhcmRWYWx1ZVwiLFxuICBcIkFjb3VzdGljU291bmRTb2Z0Q29uZGl0aW9uXCIsXG4gIFwiQWN0aW9uRGVsYXlcIixcbiAgXCJBY3Rpb25NZW51XCIsXG4gIFwiQWN0aW9uTWVudUJveFwiLFxuICBcIkFjdGlvbk1lbnVCb3hPcHRpb25zXCIsXG4gIFwiQWN0aXZhdGVcIixcbiAgXCJBY3RpdmVcIixcbiAgXCJBY3RpdmVDbGFzc2lmaWNhdGlvblwiLFxuICBcIkFjdGl2ZUNsYXNzaWZpY2F0aW9uT2JqZWN0XCIsXG4gIFwiQWN0aXZlSXRlbVwiLFxuICBcIkFjdGl2ZVByZWRpY3Rpb25cIixcbiAgXCJBY3RpdmVQcmVkaWN0aW9uT2JqZWN0XCIsXG4gIFwiQWN0aXZlU3R5bGVcIixcbiAgXCJBY3ljbGljR3JhcGhRXCIsXG4gIFwiQWRkT25IZWxwUGF0aFwiLFxuICBcIkFkZFNpZGVzXCIsXG4gIFwiQWRkVG9cIixcbiAgXCJBZGRUb1NlYXJjaEluZGV4XCIsXG4gIFwiQWRkVXNlcnNcIixcbiAgXCJBZGphY2VuY3lHcmFwaFwiLFxuICBcIkFkamFjZW5jeUxpc3RcIixcbiAgXCJBZGphY2VuY3lNYXRyaXhcIixcbiAgXCJBZGphY2VudE1lc2hDZWxsc1wiLFxuICBcIkFkanVnYXRlXCIsXG4gIFwiQWRqdXN0bWVudEJveFwiLFxuICBcIkFkanVzdG1lbnRCb3hPcHRpb25zXCIsXG4gIFwiQWRqdXN0VGltZVNlcmllc0ZvcmVjYXN0XCIsXG4gIFwiQWRtaW5pc3RyYXRpdmVEaXZpc2lvbkRhdGFcIixcbiAgXCJBZmZpbmVIYWxmU3BhY2VcIixcbiAgXCJBZmZpbmVTcGFjZVwiLFxuICBcIkFmZmluZVN0YXRlU3BhY2VNb2RlbFwiLFxuICBcIkFmZmluZVRyYW5zZm9ybVwiLFxuICBcIkFmdGVyXCIsXG4gIFwiQWdncmVnYXRlZEVudGl0eUNsYXNzXCIsXG4gIFwiQWdncmVnYXRpb25MYXllclwiLFxuICBcIkFpcmNyYWZ0RGF0YVwiLFxuICBcIkFpcnBvcnREYXRhXCIsXG4gIFwiQWlyUHJlc3N1cmVEYXRhXCIsXG4gIFwiQWlyU291bmRBdHRlbnVhdGlvblwiLFxuICBcIkFpclRlbXBlcmF0dXJlRGF0YVwiLFxuICBcIkFpcnlBaVwiLFxuICBcIkFpcnlBaVByaW1lXCIsXG4gIFwiQWlyeUFpWmVyb1wiLFxuICBcIkFpcnlCaVwiLFxuICBcIkFpcnlCaVByaW1lXCIsXG4gIFwiQWlyeUJpWmVyb1wiLFxuICBcIkFsZ2VicmFpY0ludGVnZXJRXCIsXG4gIFwiQWxnZWJyYWljTnVtYmVyXCIsXG4gIFwiQWxnZWJyYWljTnVtYmVyRGVub21pbmF0b3JcIixcbiAgXCJBbGdlYnJhaWNOdW1iZXJOb3JtXCIsXG4gIFwiQWxnZWJyYWljTnVtYmVyUG9seW5vbWlhbFwiLFxuICBcIkFsZ2VicmFpY051bWJlclRyYWNlXCIsXG4gIFwiQWxnZWJyYWljUnVsZXNcIixcbiAgXCJBbGdlYnJhaWNSdWxlc0RhdGFcIixcbiAgXCJBbGdlYnJhaWNzXCIsXG4gIFwiQWxnZWJyYWljVW5pdFFcIixcbiAgXCJBbGlnbm1lbnRcIixcbiAgXCJBbGlnbm1lbnRNYXJrZXJcIixcbiAgXCJBbGlnbm1lbnRQb2ludFwiLFxuICBcIkFsbFwiLFxuICBcIkFsbG93QWR1bHRDb250ZW50XCIsXG4gIFwiQWxsb3dDaGF0U2VydmljZXNcIixcbiAgXCJBbGxvd2VkQ2xvdWRFeHRyYVBhcmFtZXRlcnNcIixcbiAgXCJBbGxvd2VkQ2xvdWRQYXJhbWV0ZXJFeHRlbnNpb25zXCIsXG4gIFwiQWxsb3dlZERpbWVuc2lvbnNcIixcbiAgXCJBbGxvd2VkRnJlcXVlbmN5UmFuZ2VcIixcbiAgXCJBbGxvd2VkSGVhZHNcIixcbiAgXCJBbGxvd0dyb3VwQ2xvc2VcIixcbiAgXCJBbGxvd0luY29tcGxldGVcIixcbiAgXCJBbGxvd0lubGluZUNlbGxzXCIsXG4gIFwiQWxsb3dLZXJuZWxJbml0aWFsaXphdGlvblwiLFxuICBcIkFsbG93TG9vc2VHcmFtbWFyXCIsXG4gIFwiQWxsb3dSZXZlcnNlR3JvdXBDbG9zZVwiLFxuICBcIkFsbG93U2NyaXB0TGV2ZWxDaGFuZ2VcIixcbiAgXCJBbGxvd1ZlcnNpb25VcGRhdGVcIixcbiAgXCJBbGxUcnVlXCIsXG4gIFwiQWxwaGFiZXRcIixcbiAgXCJBbHBoYWJldGljT3JkZXJcIixcbiAgXCJBbHBoYWJldGljU29ydFwiLFxuICBcIkFscGhhQ2hhbm5lbFwiLFxuICBcIkFsdGVybmF0ZUltYWdlXCIsXG4gIFwiQWx0ZXJuYXRpbmdGYWN0b3JpYWxcIixcbiAgXCJBbHRlcm5hdGluZ0dyb3VwXCIsXG4gIFwiQWx0ZXJuYXRpdmVIeXBvdGhlc2lzXCIsXG4gIFwiQWx0ZXJuYXRpdmVzXCIsXG4gIFwiQWx0aXR1ZGVNZXRob2RcIixcbiAgXCJBbWJpZW50TGlnaHRcIixcbiAgXCJBbWJpZ3VpdHlGdW5jdGlvblwiLFxuICBcIkFtYmlndWl0eUxpc3RcIixcbiAgXCJBbmFseXRpY1wiLFxuICBcIkFuYXRvbXlEYXRhXCIsXG4gIFwiQW5hdG9teUZvcm1cIixcbiAgXCJBbmF0b215UGxvdDNEXCIsXG4gIFwiQW5hdG9teVNraW5TdHlsZVwiLFxuICBcIkFuYXRvbXlTdHlsaW5nXCIsXG4gIFwiQW5jaG9yZWRTZWFyY2hcIixcbiAgXCJBbmRcIixcbiAgXCJBbmRlcnNvbkRhcmxpbmdUZXN0XCIsXG4gIFwiQW5nZXJKXCIsXG4gIFwiQW5nbGVCaXNlY3RvclwiLFxuICBcIkFuZ2xlQnJhY2tldFwiLFxuICBcIkFuZ2xlUGF0aFwiLFxuICBcIkFuZ2xlUGF0aDNEXCIsXG4gIFwiQW5nbGVWZWN0b3JcIixcbiAgXCJBbmd1bGFyR2F1Z2VcIixcbiAgXCJBbmltYXRlXCIsXG4gIFwiQW5pbWF0ZWRJbWFnZVwiLFxuICBcIkFuaW1hdGlvbkN5Y2xlT2Zmc2V0XCIsXG4gIFwiQW5pbWF0aW9uQ3ljbGVSZXBldGl0aW9uc1wiLFxuICBcIkFuaW1hdGlvbkRpcmVjdGlvblwiLFxuICBcIkFuaW1hdGlvbkRpc3BsYXlUaW1lXCIsXG4gIFwiQW5pbWF0aW9uUmF0ZVwiLFxuICBcIkFuaW1hdGlvblJlcGV0aXRpb25zXCIsXG4gIFwiQW5pbWF0aW9uUnVubmluZ1wiLFxuICBcIkFuaW1hdGlvblJ1blRpbWVcIixcbiAgXCJBbmltYXRpb25UaW1lSW5kZXhcIixcbiAgXCJBbmltYXRpb25WaWRlb1wiLFxuICBcIkFuaW1hdG9yXCIsXG4gIFwiQW5pbWF0b3JCb3hcIixcbiAgXCJBbmltYXRvckJveE9wdGlvbnNcIixcbiAgXCJBbmltYXRvckVsZW1lbnRzXCIsXG4gIFwiQW5ub3RhdGVcIixcbiAgXCJBbm5vdGF0aW9uXCIsXG4gIFwiQW5ub3RhdGlvbkRlbGV0ZVwiLFxuICBcIkFubm90YXRpb25LZXlzXCIsXG4gIFwiQW5ub3RhdGlvblJ1bGVzXCIsXG4gIFwiQW5ub3RhdGlvblZhbHVlXCIsXG4gIFwiQW5udWl0eVwiLFxuICBcIkFubnVpdHlEdWVcIixcbiAgXCJBbm51bHVzXCIsXG4gIFwiQW5vbWFseURldGVjdGlvblwiLFxuICBcIkFub21hbHlEZXRlY3RvclwiLFxuICBcIkFub21hbHlEZXRlY3RvckZ1bmN0aW9uXCIsXG4gIFwiQW5vbnltb3VzXCIsXG4gIFwiQW50aWFsaWFzaW5nXCIsXG4gIFwiQW50aWhlcm1pdGlhblwiLFxuICBcIkFudGloZXJtaXRpYW5NYXRyaXhRXCIsXG4gIFwiQW50aXN5bW1ldHJpY1wiLFxuICBcIkFudGlzeW1tZXRyaWNNYXRyaXhRXCIsXG4gIFwiQW50b255bXNcIixcbiAgXCJBbnlPcmRlclwiLFxuICBcIkFueVN1YnNldFwiLFxuICBcIkFueVRydWVcIixcbiAgXCJBcGFydFwiLFxuICBcIkFwYXJ0U3F1YXJlRnJlZVwiLFxuICBcIkFQSUZ1bmN0aW9uXCIsXG4gIFwiQXBwZWFyYW5jZVwiLFxuICBcIkFwcGVhcmFuY2VFbGVtZW50c1wiLFxuICBcIkFwcGVhcmFuY2VSdWxlc1wiLFxuICBcIkFwcGVsbEYxXCIsXG4gIFwiQXBwZW5kXCIsXG4gIFwiQXBwZW5kQ2hlY2tcIixcbiAgXCJBcHBlbmRMYXllclwiLFxuICBcIkFwcGVuZFRvXCIsXG4gIFwiQXBwbGljYXRpb25cIixcbiAgXCJBcHBseVwiLFxuICBcIkFwcGx5UmVhY3Rpb25cIixcbiAgXCJBcHBseVNpZGVzXCIsXG4gIFwiQXBwbHlUb1wiLFxuICBcIkFyY0Nvc1wiLFxuICBcIkFyY0Nvc2hcIixcbiAgXCJBcmNDb3RcIixcbiAgXCJBcmNDb3RoXCIsXG4gIFwiQXJjQ3NjXCIsXG4gIFwiQXJjQ3NjaFwiLFxuICBcIkFyY0N1cnZhdHVyZVwiLFxuICBcIkFSQ0hQcm9jZXNzXCIsXG4gIFwiQXJjTGVuZ3RoXCIsXG4gIFwiQXJjU2VjXCIsXG4gIFwiQXJjU2VjaFwiLFxuICBcIkFyY1NpblwiLFxuICBcIkFyY1NpbkRpc3RyaWJ1dGlvblwiLFxuICBcIkFyY1NpbmhcIixcbiAgXCJBcmNUYW5cIixcbiAgXCJBcmNUYW5oXCIsXG4gIFwiQXJlYVwiLFxuICBcIkFyZ1wiLFxuICBcIkFyZ01heFwiLFxuICBcIkFyZ01pblwiLFxuICBcIkFyZ3VtZW50Q291bnRRXCIsXG4gIFwiQXJndW1lbnRzT3B0aW9uc1wiLFxuICBcIkFSSU1BUHJvY2Vzc1wiLFxuICBcIkFyaXRobWV0aWNHZW9tZXRyaWNNZWFuXCIsXG4gIFwiQVJNQVByb2Nlc3NcIixcbiAgXCJBcm91bmRcIixcbiAgXCJBcm91bmRSZXBsYWNlXCIsXG4gIFwiQVJQcm9jZXNzXCIsXG4gIFwiQXJyYXlcIixcbiAgXCJBcnJheUNvbXBvbmVudHNcIixcbiAgXCJBcnJheURlcHRoXCIsXG4gIFwiQXJyYXlGaWx0ZXJcIixcbiAgXCJBcnJheUZsYXR0ZW5cIixcbiAgXCJBcnJheU1lc2hcIixcbiAgXCJBcnJheVBhZFwiLFxuICBcIkFycmF5UGxvdFwiLFxuICBcIkFycmF5UGxvdDNEXCIsXG4gIFwiQXJyYXlRXCIsXG4gIFwiQXJyYXlSZWR1Y2VcIixcbiAgXCJBcnJheVJlc2FtcGxlXCIsXG4gIFwiQXJyYXlSZXNoYXBlXCIsXG4gIFwiQXJyYXlSdWxlc1wiLFxuICBcIkFycmF5c1wiLFxuICBcIkFycm93XCIsXG4gIFwiQXJyb3czREJveFwiLFxuICBcIkFycm93Qm94XCIsXG4gIFwiQXJyb3doZWFkc1wiLFxuICBcIkFTQVRyaWFuZ2xlXCIsXG4gIFwiQXNrXCIsXG4gIFwiQXNrQXBwZW5kXCIsXG4gIFwiQXNrQ29uZmlybVwiLFxuICBcIkFza0Rpc3BsYXlcIixcbiAgXCJBc2tlZFFcIixcbiAgXCJBc2tlZFZhbHVlXCIsXG4gIFwiQXNrRnVuY3Rpb25cIixcbiAgXCJBc2tTdGF0ZVwiLFxuICBcIkFza1RlbXBsYXRlRGlzcGxheVwiLFxuICBcIkFzcGVjdFJhdGlvXCIsXG4gIFwiQXNwZWN0UmF0aW9GaXhlZFwiLFxuICBcIkFzc2VydFwiLFxuICBcIkFzc2Vzc21lbnRGdW5jdGlvblwiLFxuICBcIkFzc2Vzc21lbnRSZXN1bHRPYmplY3RcIixcbiAgXCJBc3NvY2lhdGVUb1wiLFxuICBcIkFzc29jaWF0aW9uXCIsXG4gIFwiQXNzb2NpYXRpb25Gb3JtYXRcIixcbiAgXCJBc3NvY2lhdGlvbk1hcFwiLFxuICBcIkFzc29jaWF0aW9uUVwiLFxuICBcIkFzc29jaWF0aW9uVGhyZWFkXCIsXG4gIFwiQXNzdW1lRGV0ZXJtaW5pc3RpY1wiLFxuICBcIkFzc3VtaW5nXCIsXG4gIFwiQXNzdW1wdGlvbnNcIixcbiAgXCJBc3Ryb0FuZ3VsYXJTZXBhcmF0aW9uXCIsXG4gIFwiQXN0cm9CYWNrZ3JvdW5kXCIsXG4gIFwiQXN0cm9DZW50ZXJcIixcbiAgXCJBc3Ryb0Rpc3RhbmNlXCIsXG4gIFwiQXN0cm9HcmFwaGljc1wiLFxuICBcIkFzdHJvR3JpZExpbmVzXCIsXG4gIFwiQXN0cm9HcmlkTGluZXNTdHlsZVwiLFxuICBcIkFzdHJvbm9taWNhbERhdGFcIixcbiAgXCJBc3Ryb1Bvc2l0aW9uXCIsXG4gIFwiQXN0cm9Qcm9qZWN0aW9uXCIsXG4gIFwiQXN0cm9SYW5nZVwiLFxuICBcIkFzdHJvUmFuZ2VQYWRkaW5nXCIsXG4gIFwiQXN0cm9SZWZlcmVuY2VGcmFtZVwiLFxuICBcIkFzdHJvU3R5bGluZ1wiLFxuICBcIkFzdHJvWm9vbUxldmVsXCIsXG4gIFwiQXN5bXB0b3RpY1wiLFxuICBcIkFzeW1wdG90aWNEU29sdmVWYWx1ZVwiLFxuICBcIkFzeW1wdG90aWNFcXVhbFwiLFxuICBcIkFzeW1wdG90aWNFcXVpdmFsZW50XCIsXG4gIFwiQXN5bXB0b3RpY0V4cGVjdGF0aW9uXCIsXG4gIFwiQXN5bXB0b3RpY0dyZWF0ZXJcIixcbiAgXCJBc3ltcHRvdGljR3JlYXRlckVxdWFsXCIsXG4gIFwiQXN5bXB0b3RpY0ludGVncmF0ZVwiLFxuICBcIkFzeW1wdG90aWNMZXNzXCIsXG4gIFwiQXN5bXB0b3RpY0xlc3NFcXVhbFwiLFxuICBcIkFzeW1wdG90aWNPdXRwdXRUcmFja2VyXCIsXG4gIFwiQXN5bXB0b3RpY1Byb2JhYmlsaXR5XCIsXG4gIFwiQXN5bXB0b3RpY1Byb2R1Y3RcIixcbiAgXCJBc3ltcHRvdGljUlNvbHZlVmFsdWVcIixcbiAgXCJBc3ltcHRvdGljU29sdmVcIixcbiAgXCJBc3ltcHRvdGljU3VtXCIsXG4gIFwiQXN5bmNocm9ub3VzXCIsXG4gIFwiQXN5bmNocm9ub3VzVGFza09iamVjdFwiLFxuICBcIkFzeW5jaHJvbm91c1Rhc2tzXCIsXG4gIFwiQXRvbVwiLFxuICBcIkF0b21Db29yZGluYXRlc1wiLFxuICBcIkF0b21Db3VudFwiLFxuICBcIkF0b21EaWFncmFtQ29vcmRpbmF0ZXNcIixcbiAgXCJBdG9tTGFiZWxzXCIsXG4gIFwiQXRvbUxhYmVsU3R5bGVcIixcbiAgXCJBdG9tTGlzdFwiLFxuICBcIkF0b21RXCIsXG4gIFwiQXR0YWNoQ2VsbFwiLFxuICBcIkF0dGFjaGVkQ2VsbFwiLFxuICBcIkF0dGVudGlvbkxheWVyXCIsXG4gIFwiQXR0cmlidXRlc1wiLFxuICBcIkF1ZGlvXCIsXG4gIFwiQXVkaW9BbXBsaWZ5XCIsXG4gIFwiQXVkaW9Bbm5vdGF0ZVwiLFxuICBcIkF1ZGlvQW5ub3RhdGlvbkxvb2t1cFwiLFxuICBcIkF1ZGlvQmxvY2tNYXBcIixcbiAgXCJBdWRpb0NhcHR1cmVcIixcbiAgXCJBdWRpb0NoYW5uZWxBc3NpZ25tZW50XCIsXG4gIFwiQXVkaW9DaGFubmVsQ29tYmluZVwiLFxuICBcIkF1ZGlvQ2hhbm5lbE1peFwiLFxuICBcIkF1ZGlvQ2hhbm5lbHNcIixcbiAgXCJBdWRpb0NoYW5uZWxTZXBhcmF0ZVwiLFxuICBcIkF1ZGlvRGF0YVwiLFxuICBcIkF1ZGlvRGVsYXlcIixcbiAgXCJBdWRpb0RlbGV0ZVwiLFxuICBcIkF1ZGlvRGV2aWNlXCIsXG4gIFwiQXVkaW9EaXN0YW5jZVwiLFxuICBcIkF1ZGlvRW5jb2RpbmdcIixcbiAgXCJBdWRpb0ZhZGVcIixcbiAgXCJBdWRpb0ZyZXF1ZW5jeVNoaWZ0XCIsXG4gIFwiQXVkaW9HZW5lcmF0b3JcIixcbiAgXCJBdWRpb0lkZW50aWZ5XCIsXG4gIFwiQXVkaW9JbnB1dERldmljZVwiLFxuICBcIkF1ZGlvSW5zZXJ0XCIsXG4gIFwiQXVkaW9JbnN0YW5jZVFcIixcbiAgXCJBdWRpb0ludGVydmFsc1wiLFxuICBcIkF1ZGlvSm9pblwiLFxuICBcIkF1ZGlvTGFiZWxcIixcbiAgXCJBdWRpb0xlbmd0aFwiLFxuICBcIkF1ZGlvTG9jYWxNZWFzdXJlbWVudHNcIixcbiAgXCJBdWRpb0xvb3BpbmdcIixcbiAgXCJBdWRpb0xvdWRuZXNzXCIsXG4gIFwiQXVkaW9NZWFzdXJlbWVudHNcIixcbiAgXCJBdWRpb05vcm1hbGl6ZVwiLFxuICBcIkF1ZGlvT3V0cHV0RGV2aWNlXCIsXG4gIFwiQXVkaW9PdmVybGF5XCIsXG4gIFwiQXVkaW9QYWRcIixcbiAgXCJBdWRpb1BhblwiLFxuICBcIkF1ZGlvUGFydGl0aW9uXCIsXG4gIFwiQXVkaW9QYXVzZVwiLFxuICBcIkF1ZGlvUGl0Y2hTaGlmdFwiLFxuICBcIkF1ZGlvUGxheVwiLFxuICBcIkF1ZGlvUGxvdFwiLFxuICBcIkF1ZGlvUVwiLFxuICBcIkF1ZGlvUmVjb3JkXCIsXG4gIFwiQXVkaW9SZXBsYWNlXCIsXG4gIFwiQXVkaW9SZXNhbXBsZVwiLFxuICBcIkF1ZGlvUmV2ZXJiXCIsXG4gIFwiQXVkaW9SZXZlcnNlXCIsXG4gIFwiQXVkaW9TYW1wbGVSYXRlXCIsXG4gIFwiQXVkaW9TcGVjdHJhbE1hcFwiLFxuICBcIkF1ZGlvU3BlY3RyYWxUcmFuc2Zvcm1hdGlvblwiLFxuICBcIkF1ZGlvU3BsaXRcIixcbiAgXCJBdWRpb1N0b3BcIixcbiAgXCJBdWRpb1N0cmVhbVwiLFxuICBcIkF1ZGlvU3RyZWFtc1wiLFxuICBcIkF1ZGlvVGltZVN0cmV0Y2hcIixcbiAgXCJBdWRpb1RyYWNrQXBwbHlcIixcbiAgXCJBdWRpb1RyYWNrU2VsZWN0aW9uXCIsXG4gIFwiQXVkaW9UcmltXCIsXG4gIFwiQXVkaW9UeXBlXCIsXG4gIFwiQXVnbWVudGVkUG9seWhlZHJvblwiLFxuICBcIkF1Z21lbnRlZFN5bW1ldHJpY1BvbHlub21pYWxcIixcbiAgXCJBdXRoZW50aWNhdGVcIixcbiAgXCJBdXRoZW50aWNhdGlvblwiLFxuICBcIkF1dGhlbnRpY2F0aW9uRGlhbG9nXCIsXG4gIFwiQXV0b0FjdGlvblwiLFxuICBcIkF1dG9jb21wbGV0ZVwiLFxuICBcIkF1dG9jb21wbGV0aW9uRnVuY3Rpb25cIixcbiAgXCJBdXRvQ29weVwiLFxuICBcIkF1dG9jb3JyZWxhdGlvblRlc3RcIixcbiAgXCJBdXRvRGVsZXRlXCIsXG4gIFwiQXV0b0V2YWx1YXRlRXZlbnRzXCIsXG4gIFwiQXV0b0dlbmVyYXRlZFBhY2thZ2VcIixcbiAgXCJBdXRvSW5kZW50XCIsXG4gIFwiQXV0b0luZGVudFNwYWNpbmdzXCIsXG4gIFwiQXV0b0l0YWxpY1dvcmRzXCIsXG4gIFwiQXV0b2xvYWRQYXRoXCIsXG4gIFwiQXV0b01hdGNoXCIsXG4gIFwiQXV0b21hdGljXCIsXG4gIFwiQXV0b21hdGljSW1hZ2VTaXplXCIsXG4gIFwiQXV0b011bHRpcGxpY2F0aW9uU3ltYm9sXCIsXG4gIFwiQXV0b051bWJlckZvcm1hdHRpbmdcIixcbiAgXCJBdXRvT3Blbk5vdGVib29rc1wiLFxuICBcIkF1dG9PcGVuUGFsZXR0ZXNcIixcbiAgXCJBdXRvT3BlcmF0b3JSZW5kZXJpbmdzXCIsXG4gIFwiQXV0b1F1b3RlQ2hhcmFjdGVyc1wiLFxuICBcIkF1dG9SZWZyZXNoZWRcIixcbiAgXCJBdXRvUmVtb3ZlXCIsXG4gIFwiQXV0b3J1blNlcXVlbmNpbmdcIixcbiAgXCJBdXRvU2NhbGluZ1wiLFxuICBcIkF1dG9TY3JvbGxcIixcbiAgXCJBdXRvU3BhY2luZ1wiLFxuICBcIkF1dG9TdHlsZU9wdGlvbnNcIixcbiAgXCJBdXRvU3R5bGVXb3Jkc1wiLFxuICBcIkF1dG9TdWJtaXR0aW5nXCIsXG4gIFwiQXhlc1wiLFxuICBcIkF4ZXNFZGdlXCIsXG4gIFwiQXhlc0xhYmVsXCIsXG4gIFwiQXhlc09yaWdpblwiLFxuICBcIkF4ZXNTdHlsZVwiLFxuICBcIkF4aW9tYXRpY1RoZW9yeVwiLFxuICBcIkF4aXNcIixcbiAgXCJBeGlzM0RCb3hcIixcbiAgXCJBeGlzM0RCb3hPcHRpb25zXCIsXG4gIFwiQXhpc0JveFwiLFxuICBcIkF4aXNCb3hPcHRpb25zXCIsXG4gIFwiQXhpc0xhYmVsXCIsXG4gIFwiQXhpc09iamVjdFwiLFxuICBcIkF4aXNTdHlsZVwiLFxuICBcIkJhYnlNb25zdGVyR3JvdXBCXCIsXG4gIFwiQmFja1wiLFxuICBcIkJhY2tGYWNlQ29sb3JcIixcbiAgXCJCYWNrRmFjZUdsb3dDb2xvclwiLFxuICBcIkJhY2tGYWNlT3BhY2l0eVwiLFxuICBcIkJhY2tGYWNlU3BlY3VsYXJDb2xvclwiLFxuICBcIkJhY2tGYWNlU3BlY3VsYXJFeHBvbmVudFwiLFxuICBcIkJhY2tGYWNlU3VyZmFjZUFwcGVhcmFuY2VcIixcbiAgXCJCYWNrRmFjZVRleHR1cmVcIixcbiAgXCJCYWNrZ3JvdW5kXCIsXG4gIFwiQmFja2dyb3VuZEFwcGVhcmFuY2VcIixcbiAgXCJCYWNrZ3JvdW5kVGFza3NTZXR0aW5nc1wiLFxuICBcIkJhY2tzbGFzaFwiLFxuICBcIkJhY2tzdWJzdGl0dXRpb25cIixcbiAgXCJCYWNrd2FyZFwiLFxuICBcIkJhbGxcIixcbiAgXCJCYW5kXCIsXG4gIFwiQmFuZHBhc3NGaWx0ZXJcIixcbiAgXCJCYW5kc3RvcEZpbHRlclwiLFxuICBcIkJhcmFiYXNpQWxiZXJ0R3JhcGhEaXN0cmlidXRpb25cIixcbiAgXCJCYXJDaGFydFwiLFxuICBcIkJhckNoYXJ0M0RcIixcbiAgXCJCYXJjb2RlSW1hZ2VcIixcbiAgXCJCYXJjb2RlUmVjb2duaXplXCIsXG4gIFwiQmFyaW5naGF1c0hlbnplVGVzdFwiLFxuICBcIkJhckxlZ2VuZFwiLFxuICBcIkJhcmxvd1Byb3NjaGFuSW1wb3J0YW5jZVwiLFxuICBcIkJhcm5lc0dcIixcbiAgXCJCYXJPcmlnaW5cIixcbiAgXCJCYXJTcGFjaW5nXCIsXG4gIFwiQmFydGxldHRIYW5uV2luZG93XCIsXG4gIFwiQmFydGxldHRXaW5kb3dcIixcbiAgXCJCYXNlRGVjb2RlXCIsXG4gIFwiQmFzZUVuY29kZVwiLFxuICBcIkJhc2VGb3JtXCIsXG4gIFwiQmFzZWxpbmVcIixcbiAgXCJCYXNlbGluZVBvc2l0aW9uXCIsXG4gIFwiQmFzZVN0eWxlXCIsXG4gIFwiQmFzaWNSZWN1cnJlbnRMYXllclwiLFxuICBcIkJhdGNoTm9ybWFsaXphdGlvbkxheWVyXCIsXG4gIFwiQmF0Y2hTaXplXCIsXG4gIFwiQmF0ZXNEaXN0cmlidXRpb25cIixcbiAgXCJCYXR0bGVMZW1hcmllV2F2ZWxldFwiLFxuICBcIkJheWVzaWFuTWF4aW1pemF0aW9uXCIsXG4gIFwiQmF5ZXNpYW5NYXhpbWl6YXRpb25PYmplY3RcIixcbiAgXCJCYXllc2lhbk1pbmltaXphdGlvblwiLFxuICBcIkJheWVzaWFuTWluaW1pemF0aW9uT2JqZWN0XCIsXG4gIFwiQmVjYXVzZVwiLFxuICBcIkJlY2ttYW5uRGlzdHJpYnV0aW9uXCIsXG4gIFwiQmVlcFwiLFxuICBcIkJlZm9yZVwiLFxuICBcIkJlZ2luXCIsXG4gIFwiQmVnaW5EaWFsb2dQYWNrZXRcIixcbiAgXCJCZWdpblBhY2thZ2VcIixcbiAgXCJCZWxsQlwiLFxuICBcIkJlbGxZXCIsXG4gIFwiQmVsb3dcIixcbiAgXCJCZW5mb3JkRGlzdHJpYnV0aW9uXCIsXG4gIFwiQmVuaW5pRGlzdHJpYnV0aW9uXCIsXG4gIFwiQmVua3RhbmRlckdpYnJhdERpc3RyaWJ1dGlvblwiLFxuICBcIkJlbmt0YW5kZXJXZWlidWxsRGlzdHJpYnV0aW9uXCIsXG4gIFwiQmVybm91bGxpQlwiLFxuICBcIkJlcm5vdWxsaURpc3RyaWJ1dGlvblwiLFxuICBcIkJlcm5vdWxsaUdyYXBoRGlzdHJpYnV0aW9uXCIsXG4gIFwiQmVybm91bGxpUHJvY2Vzc1wiLFxuICBcIkJlcm5zdGVpbkJhc2lzXCIsXG4gIFwiQmVzYWdMXCIsXG4gIFwiQmVzc2VsRmlsdGVyTW9kZWxcIixcbiAgXCJCZXNzZWxJXCIsXG4gIFwiQmVzc2VsSlwiLFxuICBcIkJlc3NlbEpaZXJvXCIsXG4gIFwiQmVzc2VsS1wiLFxuICBcIkJlc3NlbFlcIixcbiAgXCJCZXNzZWxZWmVyb1wiLFxuICBcIkJldGFcIixcbiAgXCJCZXRhQmlub21pYWxEaXN0cmlidXRpb25cIixcbiAgXCJCZXRhRGlzdHJpYnV0aW9uXCIsXG4gIFwiQmV0YU5lZ2F0aXZlQmlub21pYWxEaXN0cmlidXRpb25cIixcbiAgXCJCZXRhUHJpbWVEaXN0cmlidXRpb25cIixcbiAgXCJCZXRhUmVndWxhcml6ZWRcIixcbiAgXCJCZXR3ZWVuXCIsXG4gIFwiQmV0d2Vlbm5lc3NDZW50cmFsaXR5XCIsXG4gIFwiQmV2ZWxlZFwiLFxuICBcIkJldmVsZWRQb2x5aGVkcm9uXCIsXG4gIFwiQmV6aWVyQ3VydmVcIixcbiAgXCJCZXppZXJDdXJ2ZTNEQm94XCIsXG4gIFwiQmV6aWVyQ3VydmUzREJveE9wdGlvbnNcIixcbiAgXCJCZXppZXJDdXJ2ZUJveFwiLFxuICBcIkJlemllckN1cnZlQm94T3B0aW9uc1wiLFxuICBcIkJlemllckZ1bmN0aW9uXCIsXG4gIFwiQmlsYXRlcmFsRmlsdGVyXCIsXG4gIFwiQmlsYXRlcmFsTGFwbGFjZVRyYW5zZm9ybVwiLFxuICBcIkJpbGF0ZXJhbFpUcmFuc2Zvcm1cIixcbiAgXCJCaW5hcml6ZVwiLFxuICBcIkJpbmFyeURlc2VyaWFsaXplXCIsXG4gIFwiQmluYXJ5RGlzdGFuY2VcIixcbiAgXCJCaW5hcnlGb3JtYXRcIixcbiAgXCJCaW5hcnlJbWFnZVFcIixcbiAgXCJCaW5hcnlSZWFkXCIsXG4gIFwiQmluYXJ5UmVhZExpc3RcIixcbiAgXCJCaW5hcnlTZXJpYWxpemVcIixcbiAgXCJCaW5hcnlXcml0ZVwiLFxuICBcIkJpbkNvdW50c1wiLFxuICBcIkJpbkxpc3RzXCIsXG4gIFwiQmlubmVkVmFyaW9ncmFtTGlzdFwiLFxuICBcIkJpbm9taWFsXCIsXG4gIFwiQmlub21pYWxEaXN0cmlidXRpb25cIixcbiAgXCJCaW5vbWlhbFBvaW50UHJvY2Vzc1wiLFxuICBcIkJpbm9taWFsUHJvY2Vzc1wiLFxuICBcIkJpbm9ybWFsRGlzdHJpYnV0aW9uXCIsXG4gIFwiQmlvcnRob2dvbmFsU3BsaW5lV2F2ZWxldFwiLFxuICBcIkJpb1NlcXVlbmNlXCIsXG4gIFwiQmlvU2VxdWVuY2VCYWNrVHJhbnNsYXRlTGlzdFwiLFxuICBcIkJpb1NlcXVlbmNlQ29tcGxlbWVudFwiLFxuICBcIkJpb1NlcXVlbmNlSW5zdGFuY2VzXCIsXG4gIFwiQmlvU2VxdWVuY2VNb2RpZnlcIixcbiAgXCJCaW9TZXF1ZW5jZVBsb3RcIixcbiAgXCJCaW9TZXF1ZW5jZVFcIixcbiAgXCJCaW9TZXF1ZW5jZVJldmVyc2VDb21wbGVtZW50XCIsXG4gIFwiQmlvU2VxdWVuY2VUcmFuc2NyaWJlXCIsXG4gIFwiQmlvU2VxdWVuY2VUcmFuc2xhdGVcIixcbiAgXCJCaXBhcnRpdGVHcmFwaFFcIixcbiAgXCJCaXF1YWRyYXRpY0ZpbHRlck1vZGVsXCIsXG4gIFwiQmlybmJhdW1JbXBvcnRhbmNlXCIsXG4gIFwiQmlybmJhdW1TYXVuZGVyc0Rpc3RyaWJ1dGlvblwiLFxuICBcIkJpdEFuZFwiLFxuICBcIkJpdENsZWFyXCIsXG4gIFwiQml0R2V0XCIsXG4gIFwiQml0TGVuZ3RoXCIsXG4gIFwiQml0Tm90XCIsXG4gIFwiQml0T3JcIixcbiAgXCJCaXRSYXRlXCIsXG4gIFwiQml0U2V0XCIsXG4gIFwiQml0U2hpZnRMZWZ0XCIsXG4gIFwiQml0U2hpZnRSaWdodFwiLFxuICBcIkJpdFhvclwiLFxuICBcIkJpd2VpZ2h0TG9jYXRpb25cIixcbiAgXCJCaXdlaWdodE1pZHZhcmlhbmNlXCIsXG4gIFwiQmxhY2tcIixcbiAgXCJCbGFja21hbkhhcnJpc1dpbmRvd1wiLFxuICBcIkJsYWNrbWFuTnV0dGFsbFdpbmRvd1wiLFxuICBcIkJsYWNrbWFuV2luZG93XCIsXG4gIFwiQmxhbmtcIixcbiAgXCJCbGFua0Zvcm1cIixcbiAgXCJCbGFua051bGxTZXF1ZW5jZVwiLFxuICBcIkJsYW5rU2VxdWVuY2VcIixcbiAgXCJCbGVuZFwiLFxuICBcIkJsb2NrXCIsXG4gIFwiQmxvY2tjaGFpbkFkZHJlc3NEYXRhXCIsXG4gIFwiQmxvY2tjaGFpbkJhc2VcIixcbiAgXCJCbG9ja2NoYWluQmxvY2tEYXRhXCIsXG4gIFwiQmxvY2tjaGFpbkNvbnRyYWN0VmFsdWVcIixcbiAgXCJCbG9ja2NoYWluRGF0YVwiLFxuICBcIkJsb2NrY2hhaW5HZXRcIixcbiAgXCJCbG9ja2NoYWluS2V5RW5jb2RlXCIsXG4gIFwiQmxvY2tjaGFpblB1dFwiLFxuICBcIkJsb2NrY2hhaW5Ub2tlbkRhdGFcIixcbiAgXCJCbG9ja2NoYWluVHJhbnNhY3Rpb25cIixcbiAgXCJCbG9ja2NoYWluVHJhbnNhY3Rpb25EYXRhXCIsXG4gIFwiQmxvY2tjaGFpblRyYW5zYWN0aW9uU2lnblwiLFxuICBcIkJsb2NrY2hhaW5UcmFuc2FjdGlvblN1Ym1pdFwiLFxuICBcIkJsb2NrRGlhZ29uYWxNYXRyaXhcIixcbiAgXCJCbG9ja0xvd2VyVHJpYW5ndWxhck1hdHJpeFwiLFxuICBcIkJsb2NrTWFwXCIsXG4gIFwiQmxvY2tSYW5kb21cIixcbiAgXCJCbG9ja1VwcGVyVHJpYW5ndWxhck1hdHJpeFwiLFxuICBcIkJsb21xdmlzdEJldGFcIixcbiAgXCJCbG9tcXZpc3RCZXRhVGVzdFwiLFxuICBcIkJsdWVcIixcbiAgXCJCbHVyXCIsXG4gIFwiQmx1cnJpbmdcIixcbiAgXCJCb2RlUGxvdFwiLFxuICBcIkJvaG1hbldpbmRvd1wiLFxuICBcIkJvbGRcIixcbiAgXCJCb25kXCIsXG4gIFwiQm9uZENvdW50XCIsXG4gIFwiQm9uZExhYmVsc1wiLFxuICBcIkJvbmRMYWJlbFN0eWxlXCIsXG4gIFwiQm9uZExpc3RcIixcbiAgXCJCb25kUVwiLFxuICBcIkJvb2ttYXJrc1wiLFxuICBcIkJvb2xlXCIsXG4gIFwiQm9vbGVhbkNvbnNlY3V0aXZlRnVuY3Rpb25cIixcbiAgXCJCb29sZWFuQ29udmVydFwiLFxuICBcIkJvb2xlYW5Db3VudGluZ0Z1bmN0aW9uXCIsXG4gIFwiQm9vbGVhbkZ1bmN0aW9uXCIsXG4gIFwiQm9vbGVhbkdyYXBoXCIsXG4gIFwiQm9vbGVhbk1heHRlcm1zXCIsXG4gIFwiQm9vbGVhbk1pbmltaXplXCIsXG4gIFwiQm9vbGVhbk1pbnRlcm1zXCIsXG4gIFwiQm9vbGVhblFcIixcbiAgXCJCb29sZWFuUmVnaW9uXCIsXG4gIFwiQm9vbGVhbnNcIixcbiAgXCJCb29sZWFuU3RyaW5nc1wiLFxuICBcIkJvb2xlYW5UYWJsZVwiLFxuICBcIkJvb2xlYW5WYXJpYWJsZXNcIixcbiAgXCJCb3JkZXJEaW1lbnNpb25zXCIsXG4gIFwiQm9yZWxUYW5uZXJEaXN0cmlidXRpb25cIixcbiAgXCJCb3R0b21cIixcbiAgXCJCb3R0b21IYXRUcmFuc2Zvcm1cIixcbiAgXCJCb3VuZGFyeURpc2NyZXRpemVHcmFwaGljc1wiLFxuICBcIkJvdW5kYXJ5RGlzY3JldGl6ZVJlZ2lvblwiLFxuICBcIkJvdW5kYXJ5TWVzaFwiLFxuICBcIkJvdW5kYXJ5TWVzaFJlZ2lvblwiLFxuICBcIkJvdW5kYXJ5TWVzaFJlZ2lvblFcIixcbiAgXCJCb3VuZGFyeVN0eWxlXCIsXG4gIFwiQm91bmRlZFJlZ2lvblFcIixcbiAgXCJCb3VuZGluZ1JlZ2lvblwiLFxuICBcIkJvdW5kc1wiLFxuICBcIkJveFwiLFxuICBcIkJveEJhc2VsaW5lU2hpZnRcIixcbiAgXCJCb3hEYXRhXCIsXG4gIFwiQm94RGltZW5zaW9uc1wiLFxuICBcIkJveGVkXCIsXG4gIFwiQm94ZXNcIixcbiAgXCJCb3hGb3JtXCIsXG4gIFwiQm94Rm9ybUZvcm1hdFR5cGVzXCIsXG4gIFwiQm94RnJhbWVcIixcbiAgXCJCb3hJRFwiLFxuICBcIkJveE1hcmdpbnNcIixcbiAgXCJCb3hNYXRyaXhcIixcbiAgXCJCb3hPYmplY3RcIixcbiAgXCJCb3hSYXRpb3NcIixcbiAgXCJCb3hSb3RhdGlvblwiLFxuICBcIkJveFJvdGF0aW9uUG9pbnRcIixcbiAgXCJCb3hTdHlsZVwiLFxuICBcIkJveFdoaXNrZXJDaGFydFwiLFxuICBcIkJyYVwiLFxuICBcIkJyYWNrZXRpbmdCYXJcIixcbiAgXCJCcmFLZXRcIixcbiAgXCJCcmF5Q3VydGlzRGlzdGFuY2VcIixcbiAgXCJCcmVhZHRoRmlyc3RTY2FuXCIsXG4gIFwiQnJlYWtcIixcbiAgXCJCcmlkZ2VEYXRhXCIsXG4gIFwiQnJpZ2h0bmVzc0VxdWFsaXplXCIsXG4gIFwiQnJvYWRjYXN0U3RhdGlvbkRhdGFcIixcbiAgXCJCcm93blwiLFxuICBcIkJyb3duRm9yc3l0aGVUZXN0XCIsXG4gIFwiQnJvd25pYW5CcmlkZ2VQcm9jZXNzXCIsXG4gIFwiQnJvd3NlckNhdGVnb3J5XCIsXG4gIFwiQlNwbGluZUJhc2lzXCIsXG4gIFwiQlNwbGluZUN1cnZlXCIsXG4gIFwiQlNwbGluZUN1cnZlM0RCb3hcIixcbiAgXCJCU3BsaW5lQ3VydmUzREJveE9wdGlvbnNcIixcbiAgXCJCU3BsaW5lQ3VydmVCb3hcIixcbiAgXCJCU3BsaW5lQ3VydmVCb3hPcHRpb25zXCIsXG4gIFwiQlNwbGluZUZ1bmN0aW9uXCIsXG4gIFwiQlNwbGluZVN1cmZhY2VcIixcbiAgXCJCU3BsaW5lU3VyZmFjZTNEQm94XCIsXG4gIFwiQlNwbGluZVN1cmZhY2UzREJveE9wdGlvbnNcIixcbiAgXCJCdWJibGVDaGFydFwiLFxuICBcIkJ1YmJsZUNoYXJ0M0RcIixcbiAgXCJCdWJibGVTY2FsZVwiLFxuICBcIkJ1YmJsZVNpemVzXCIsXG4gIFwiQnVja3liYWxsR3JhcGhcIixcbiAgXCJCdWlsZENvbXBpbGVkQ29tcG9uZW50XCIsXG4gIFwiQnVpbGRpbmdEYXRhXCIsXG4gIFwiQnVsbGV0R2F1Z2VcIixcbiAgXCJCdXNpbmVzc0RheVFcIixcbiAgXCJCdXR0ZXJmbHlHcmFwaFwiLFxuICBcIkJ1dHRlcndvcnRoRmlsdGVyTW9kZWxcIixcbiAgXCJCdXR0b25cIixcbiAgXCJCdXR0b25CYXJcIixcbiAgXCJCdXR0b25Cb3hcIixcbiAgXCJCdXR0b25Cb3hPcHRpb25zXCIsXG4gIFwiQnV0dG9uQ2VsbFwiLFxuICBcIkJ1dHRvbkNvbnRlbnRzXCIsXG4gIFwiQnV0dG9uRGF0YVwiLFxuICBcIkJ1dHRvbkV2YWx1YXRvclwiLFxuICBcIkJ1dHRvbkV4cGFuZGFibGVcIixcbiAgXCJCdXR0b25GcmFtZVwiLFxuICBcIkJ1dHRvbkZ1bmN0aW9uXCIsXG4gIFwiQnV0dG9uTWFyZ2luc1wiLFxuICBcIkJ1dHRvbk1pbkhlaWdodFwiLFxuICBcIkJ1dHRvbk5vdGVcIixcbiAgXCJCdXR0b25Ob3RlYm9va1wiLFxuICBcIkJ1dHRvblNvdXJjZVwiLFxuICBcIkJ1dHRvblN0eWxlXCIsXG4gIFwiQnV0dG9uU3R5bGVNZW51TGlzdGluZ1wiLFxuICBcIkJ5dGVcIixcbiAgXCJCeXRlQXJyYXlcIixcbiAgXCJCeXRlQXJyYXlGb3JtYXRcIixcbiAgXCJCeXRlQXJyYXlGb3JtYXRRXCIsXG4gIFwiQnl0ZUFycmF5UVwiLFxuICBcIkJ5dGVBcnJheVRvU3RyaW5nXCIsXG4gIFwiQnl0ZUNvdW50XCIsXG4gIFwiQnl0ZU9yZGVyaW5nXCIsXG4gIFwiQ1wiLFxuICBcIkNhY2hlZFZhbHVlXCIsXG4gIFwiQ2FjaGVHcmFwaGljc1wiLFxuICBcIkNhY2hlUGVyc2lzdGVuY2VcIixcbiAgXCJDYWxlbmRhckNvbnZlcnRcIixcbiAgXCJDYWxlbmRhckRhdGFcIixcbiAgXCJDYWxlbmRhclR5cGVcIixcbiAgXCJDYWxsb3V0XCIsXG4gIFwiQ2FsbG91dE1hcmtlclwiLFxuICBcIkNhbGxvdXRTdHlsZVwiLFxuICBcIkNhbGxQYWNrZXRcIixcbiAgXCJDYW5iZXJyYURpc3RhbmNlXCIsXG4gIFwiQ2FuY2VsXCIsXG4gIFwiQ2FuY2VsQnV0dG9uXCIsXG4gIFwiQ2FuZGxlc3RpY2tDaGFydFwiLFxuICBcIkNhbm9uaWNhbEdyYXBoXCIsXG4gIFwiQ2Fub25pY2FsaXplUG9seWdvblwiLFxuICBcIkNhbm9uaWNhbGl6ZVBvbHloZWRyb25cIixcbiAgXCJDYW5vbmljYWxpemVSZWdpb25cIixcbiAgXCJDYW5vbmljYWxOYW1lXCIsXG4gIFwiQ2Fub25pY2FsV2FycGluZ0NvcnJlc3BvbmRlbmNlXCIsXG4gIFwiQ2Fub25pY2FsV2FycGluZ0Rpc3RhbmNlXCIsXG4gIFwiQ2FudG9yTWVzaFwiLFxuICBcIkNhbnRvclN0YWlyY2FzZVwiLFxuICBcIkNhbnZhc1wiLFxuICBcIkNhcFwiLFxuICBcIkNhcEZvcm1cIixcbiAgXCJDYXBpdGFsRGlmZmVyZW50aWFsRFwiLFxuICBcIkNhcGl0YWxpemVcIixcbiAgXCJDYXBzdWxlU2hhcGVcIixcbiAgXCJDYXB0dXJlUnVubmluZ1wiLFxuICBcIkNhcHV0b0RcIixcbiAgXCJDYXJkaW5hbEJTcGxpbmVCYXNpc1wiLFxuICBcIkNhcmxlbWFuTGluZWFyaXplXCIsXG4gIFwiQ2FybHNvblJDXCIsXG4gIFwiQ2FybHNvblJEXCIsXG4gIFwiQ2FybHNvblJFXCIsXG4gIFwiQ2FybHNvblJGXCIsXG4gIFwiQ2FybHNvblJHXCIsXG4gIFwiQ2FybHNvblJKXCIsXG4gIFwiQ2FybHNvblJLXCIsXG4gIFwiQ2FybHNvblJNXCIsXG4gIFwiQ2FybWljaGFlbExhbWJkYVwiLFxuICBcIkNhc2VPcmRlcmluZ1wiLFxuICBcIkNhc2VzXCIsXG4gIFwiQ2FzZVNlbnNpdGl2ZVwiLFxuICBcIkNhc2hmbG93XCIsXG4gIFwiQ2Fzb3JhdGlhblwiLFxuICBcIkNhc3RcIixcbiAgXCJDYXRhbGFuXCIsXG4gIFwiQ2F0YWxhbk51bWJlclwiLFxuICBcIkNhdGNoXCIsXG4gIFwiQ2F0ZWdvcmljYWxEaXN0cmlidXRpb25cIixcbiAgXCJDYXRlbmF0ZVwiLFxuICBcIkNhdGVuYXRlTGF5ZXJcIixcbiAgXCJDYXVjaHlEaXN0cmlidXRpb25cIixcbiAgXCJDYXVjaHlNYXRyaXhcIixcbiAgXCJDYXVjaHlQb2ludFByb2Nlc3NcIixcbiAgXCJDYXVjaHlXaW5kb3dcIixcbiAgXCJDYXlsZXlHcmFwaFwiLFxuICBcIkNERlwiLFxuICBcIkNERkRlcGxveVwiLFxuICBcIkNERkluZm9ybWF0aW9uXCIsXG4gIFwiQ0RGV2F2ZWxldFwiLFxuICBcIkNlaWxpbmdcIixcbiAgXCJDZWxlc3RpYWxTeXN0ZW1cIixcbiAgXCJDZWxsXCIsXG4gIFwiQ2VsbEF1dG9PdmVyd3JpdGVcIixcbiAgXCJDZWxsQmFzZWxpbmVcIixcbiAgXCJDZWxsQm91bmRpbmdCb3hcIixcbiAgXCJDZWxsQnJhY2tldE9wdGlvbnNcIixcbiAgXCJDZWxsQ2hhbmdlVGltZXNcIixcbiAgXCJDZWxsQ29udGVudHNcIixcbiAgXCJDZWxsQ29udGV4dFwiLFxuICBcIkNlbGxEaW5nYmF0XCIsXG4gIFwiQ2VsbERpbmdiYXRNYXJnaW5cIixcbiAgXCJDZWxsRHluYW1pY0V4cHJlc3Npb25cIixcbiAgXCJDZWxsRWRpdER1cGxpY2F0ZVwiLFxuICBcIkNlbGxFbGVtZW50c0JvdW5kaW5nQm94XCIsXG4gIFwiQ2VsbEVsZW1lbnRTcGFjaW5nc1wiLFxuICBcIkNlbGxFcGlsb2dcIixcbiAgXCJDZWxsRXZhbHVhdGlvbkR1cGxpY2F0ZVwiLFxuICBcIkNlbGxFdmFsdWF0aW9uRnVuY3Rpb25cIixcbiAgXCJDZWxsRXZhbHVhdGlvbkxhbmd1YWdlXCIsXG4gIFwiQ2VsbEV2ZW50QWN0aW9uc1wiLFxuICBcIkNlbGxGcmFtZVwiLFxuICBcIkNlbGxGcmFtZUNvbG9yXCIsXG4gIFwiQ2VsbEZyYW1lTGFiZWxNYXJnaW5zXCIsXG4gIFwiQ2VsbEZyYW1lTGFiZWxzXCIsXG4gIFwiQ2VsbEZyYW1lTWFyZ2luc1wiLFxuICBcIkNlbGxGcmFtZVN0eWxlXCIsXG4gIFwiQ2VsbEdyb3VwXCIsXG4gIFwiQ2VsbEdyb3VwRGF0YVwiLFxuICBcIkNlbGxHcm91cGluZ1wiLFxuICBcIkNlbGxHcm91cGluZ1J1bGVzXCIsXG4gIFwiQ2VsbEhvcml6b250YWxTY3JvbGxpbmdcIixcbiAgXCJDZWxsSURcIixcbiAgXCJDZWxsSW5zZXJ0aW9uUG9pbnRDZWxsXCIsXG4gIFwiQ2VsbExhYmVsXCIsXG4gIFwiQ2VsbExhYmVsQXV0b0RlbGV0ZVwiLFxuICBcIkNlbGxMYWJlbE1hcmdpbnNcIixcbiAgXCJDZWxsTGFiZWxQb3NpdGlvbmluZ1wiLFxuICBcIkNlbGxMYWJlbFN0eWxlXCIsXG4gIFwiQ2VsbExhYmVsVGVtcGxhdGVcIixcbiAgXCJDZWxsTWFyZ2luc1wiLFxuICBcIkNlbGxPYmplY3RcIixcbiAgXCJDZWxsT3BlblwiLFxuICBcIkNlbGxQcmludFwiLFxuICBcIkNlbGxQcm9sb2dcIixcbiAgXCJDZWxsc1wiLFxuICBcIkNlbGxTaXplXCIsXG4gIFwiQ2VsbFN0eWxlXCIsXG4gIFwiQ2VsbFRhZ3NcIixcbiAgXCJDZWxsVHJheVBvc2l0aW9uXCIsXG4gIFwiQ2VsbFRyYXlXaWRnZXRzXCIsXG4gIFwiQ2VsbHVsYXJBdXRvbWF0b25cIixcbiAgXCJDZW5zb3JlZERpc3RyaWJ1dGlvblwiLFxuICBcIkNlbnNvcmluZ1wiLFxuICBcIkNlbnRlclwiLFxuICBcIkNlbnRlckFycmF5XCIsXG4gIFwiQ2VudGVyRG90XCIsXG4gIFwiQ2VudGVyZWRJbnRlcnZhbFwiLFxuICBcIkNlbnRyYWxGZWF0dXJlXCIsXG4gIFwiQ2VudHJhbE1vbWVudFwiLFxuICBcIkNlbnRyYWxNb21lbnRHZW5lcmF0aW5nRnVuY3Rpb25cIixcbiAgXCJDZXBzdHJvZ3JhbVwiLFxuICBcIkNlcHN0cm9ncmFtQXJyYXlcIixcbiAgXCJDZXBzdHJ1bUFycmF5XCIsXG4gIFwiQ0Zvcm1cIixcbiAgXCJDaGFtcGVybm93bmVOdW1iZXJcIixcbiAgXCJDaGFuZ2VPcHRpb25zXCIsXG4gIFwiQ2hhbm5lbEJhc2VcIixcbiAgXCJDaGFubmVsQnJva2VyQWN0aW9uXCIsXG4gIFwiQ2hhbm5lbERhdGFiaW5cIixcbiAgXCJDaGFubmVsSGlzdG9yeUxlbmd0aFwiLFxuICBcIkNoYW5uZWxMaXN0ZW5cIixcbiAgXCJDaGFubmVsTGlzdGVuZXJcIixcbiAgXCJDaGFubmVsTGlzdGVuZXJzXCIsXG4gIFwiQ2hhbm5lbExpc3RlbmVyV2FpdFwiLFxuICBcIkNoYW5uZWxPYmplY3RcIixcbiAgXCJDaGFubmVsUHJlU2VuZEZ1bmN0aW9uXCIsXG4gIFwiQ2hhbm5lbFJlY2VpdmVyRnVuY3Rpb25cIixcbiAgXCJDaGFubmVsU2VuZFwiLFxuICBcIkNoYW5uZWxTdWJzY3JpYmVyc1wiLFxuICBcIkNoYW5WZXNlQmluYXJpemVcIixcbiAgXCJDaGFyYWN0ZXJcIixcbiAgXCJDaGFyYWN0ZXJDb3VudHNcIixcbiAgXCJDaGFyYWN0ZXJFbmNvZGluZ1wiLFxuICBcIkNoYXJhY3RlckVuY29kaW5nc1BhdGhcIixcbiAgXCJDaGFyYWN0ZXJpc3RpY0Z1bmN0aW9uXCIsXG4gIFwiQ2hhcmFjdGVyaXN0aWNQb2x5bm9taWFsXCIsXG4gIFwiQ2hhcmFjdGVyTmFtZVwiLFxuICBcIkNoYXJhY3Rlck5vcm1hbGl6ZVwiLFxuICBcIkNoYXJhY3RlclJhbmdlXCIsXG4gIFwiQ2hhcmFjdGVyc1wiLFxuICBcIkNoYXJ0QmFzZVN0eWxlXCIsXG4gIFwiQ2hhcnRFbGVtZW50RGF0YVwiLFxuICBcIkNoYXJ0RWxlbWVudERhdGFGdW5jdGlvblwiLFxuICBcIkNoYXJ0RWxlbWVudEZ1bmN0aW9uXCIsXG4gIFwiQ2hhcnRFbGVtZW50c1wiLFxuICBcIkNoYXJ0TGFiZWxzXCIsXG4gIFwiQ2hhcnRMYXlvdXRcIixcbiAgXCJDaGFydExlZ2VuZHNcIixcbiAgXCJDaGFydFN0eWxlXCIsXG4gIFwiQ2hlYnlzaGV2MUZpbHRlck1vZGVsXCIsXG4gIFwiQ2hlYnlzaGV2MkZpbHRlck1vZGVsXCIsXG4gIFwiQ2hlYnlzaGV2RGlzdGFuY2VcIixcbiAgXCJDaGVieXNoZXZUXCIsXG4gIFwiQ2hlYnlzaGV2VVwiLFxuICBcIkNoZWNrXCIsXG4gIFwiQ2hlY2tBYm9ydFwiLFxuICBcIkNoZWNrQWxsXCIsXG4gIFwiQ2hlY2tBcmd1bWVudHNcIixcbiAgXCJDaGVja2JveFwiLFxuICBcIkNoZWNrYm94QmFyXCIsXG4gIFwiQ2hlY2tib3hCb3hcIixcbiAgXCJDaGVja2JveEJveE9wdGlvbnNcIixcbiAgXCJDaGVtaWNhbENvbnZlcnRcIixcbiAgXCJDaGVtaWNhbERhdGFcIixcbiAgXCJDaGVtaWNhbEZvcm11bGFcIixcbiAgXCJDaGVtaWNhbEluc3RhbmNlXCIsXG4gIFwiQ2hlbWljYWxSZWFjdGlvblwiLFxuICBcIkNoZXNzYm9hcmREaXN0YW5jZVwiLFxuICBcIkNoaURpc3RyaWJ1dGlvblwiLFxuICBcIkNoaW5lc2VSZW1haW5kZXJcIixcbiAgXCJDaGlTcXVhcmVEaXN0cmlidXRpb25cIixcbiAgXCJDaG9pY2VCdXR0b25zXCIsXG4gIFwiQ2hvaWNlRGlhbG9nXCIsXG4gIFwiQ2hvbGVza3lEZWNvbXBvc2l0aW9uXCIsXG4gIFwiQ2hvcFwiLFxuICBcIkNocm9tYXRpY2l0eVBsb3RcIixcbiAgXCJDaHJvbWF0aWNpdHlQbG90M0RcIixcbiAgXCJDaHJvbWF0aWNQb2x5bm9taWFsXCIsXG4gIFwiQ2lyY2xlXCIsXG4gIFwiQ2lyY2xlQm94XCIsXG4gIFwiQ2lyY2xlRG90XCIsXG4gIFwiQ2lyY2xlTWludXNcIixcbiAgXCJDaXJjbGVQbHVzXCIsXG4gIFwiQ2lyY2xlUG9pbnRzXCIsXG4gIFwiQ2lyY2xlVGhyb3VnaFwiLFxuICBcIkNpcmNsZVRpbWVzXCIsXG4gIFwiQ2lyY3VsYW50R3JhcGhcIixcbiAgXCJDaXJjdWxhckFyY1Rocm91Z2hcIixcbiAgXCJDaXJjdWxhck9ydGhvZ29uYWxNYXRyaXhEaXN0cmlidXRpb25cIixcbiAgXCJDaXJjdWxhclF1YXRlcm5pb25NYXRyaXhEaXN0cmlidXRpb25cIixcbiAgXCJDaXJjdWxhclJlYWxNYXRyaXhEaXN0cmlidXRpb25cIixcbiAgXCJDaXJjdWxhclN5bXBsZWN0aWNNYXRyaXhEaXN0cmlidXRpb25cIixcbiAgXCJDaXJjdWxhclVuaXRhcnlNYXRyaXhEaXN0cmlidXRpb25cIixcbiAgXCJDaXJjdW1zcGhlcmVcIixcbiAgXCJDaXR5RGF0YVwiLFxuICBcIkNsYXNzaWZpZXJGdW5jdGlvblwiLFxuICBcIkNsYXNzaWZpZXJJbmZvcm1hdGlvblwiLFxuICBcIkNsYXNzaWZpZXJNZWFzdXJlbWVudHNcIixcbiAgXCJDbGFzc2lmaWVyTWVhc3VyZW1lbnRzT2JqZWN0XCIsXG4gIFwiQ2xhc3NpZnlcIixcbiAgXCJDbGFzc1ByaW9yc1wiLFxuICBcIkNsZWFyXCIsXG4gIFwiQ2xlYXJBbGxcIixcbiAgXCJDbGVhckF0dHJpYnV0ZXNcIixcbiAgXCJDbGVhckNvb2tpZXNcIixcbiAgXCJDbGVhclBlcm1pc3Npb25zXCIsXG4gIFwiQ2xlYXJTeXN0ZW1DYWNoZVwiLFxuICBcIkNsZWJzY2hHb3JkYW5cIixcbiAgXCJDbGlja1BhbmVcIixcbiAgXCJDbGlja1RvQ29weVwiLFxuICBcIkNsaWNrVG9Db3B5RW5hYmxlZFwiLFxuICBcIkNsaXBcIixcbiAgXCJDbGlwYm9hcmROb3RlYm9va1wiLFxuICBcIkNsaXBGaWxsXCIsXG4gIFwiQ2xpcHBpbmdTdHlsZVwiLFxuICBcIkNsaXBQbGFuZXNcIixcbiAgXCJDbGlwUGxhbmVzU3R5bGVcIixcbiAgXCJDbGlwUmFuZ2VcIixcbiAgXCJDbG9ja1wiLFxuICBcIkNsb2NrR2F1Z2VcIixcbiAgXCJDbG9ja3dpc2VDb250b3VySW50ZWdyYWxcIixcbiAgXCJDbG9zZVwiLFxuICBcIkNsb3NlZFwiLFxuICBcIkNsb3NlS2VybmVsc1wiLFxuICBcIkNsb3NlbmVzc0NlbnRyYWxpdHlcIixcbiAgXCJDbG9zaW5nXCIsXG4gIFwiQ2xvc2luZ0F1dG9TYXZlXCIsXG4gIFwiQ2xvc2luZ0V2ZW50XCIsXG4gIFwiQ2xvdWRBY2NvdW50RGF0YVwiLFxuICBcIkNsb3VkQmFzZVwiLFxuICBcIkNsb3VkQ29ubmVjdFwiLFxuICBcIkNsb3VkQ29ubmVjdGlvbnNcIixcbiAgXCJDbG91ZERlcGxveVwiLFxuICBcIkNsb3VkRGlyZWN0b3J5XCIsXG4gIFwiQ2xvdWREaXNjb25uZWN0XCIsXG4gIFwiQ2xvdWRFdmFsdWF0ZVwiLFxuICBcIkNsb3VkRXhwb3J0XCIsXG4gIFwiQ2xvdWRFeHByZXNzaW9uXCIsXG4gIFwiQ2xvdWRFeHByZXNzaW9uc1wiLFxuICBcIkNsb3VkRnVuY3Rpb25cIixcbiAgXCJDbG91ZEdldFwiLFxuICBcIkNsb3VkSW1wb3J0XCIsXG4gIFwiQ2xvdWRMb2dnaW5nRGF0YVwiLFxuICBcIkNsb3VkT2JqZWN0XCIsXG4gIFwiQ2xvdWRPYmplY3RJbmZvcm1hdGlvblwiLFxuICBcIkNsb3VkT2JqZWN0SW5mb3JtYXRpb25EYXRhXCIsXG4gIFwiQ2xvdWRPYmplY3ROYW1lRm9ybWF0XCIsXG4gIFwiQ2xvdWRPYmplY3RzXCIsXG4gIFwiQ2xvdWRPYmplY3RVUkxUeXBlXCIsXG4gIFwiQ2xvdWRQdWJsaXNoXCIsXG4gIFwiQ2xvdWRQdXRcIixcbiAgXCJDbG91ZFJlbmRlcmluZ01ldGhvZFwiLFxuICBcIkNsb3VkU2F2ZVwiLFxuICBcIkNsb3VkU2hhcmVcIixcbiAgXCJDbG91ZFN1Ym1pdFwiLFxuICBcIkNsb3VkU3ltYm9sXCIsXG4gIFwiQ2xvdWRVbnNoYXJlXCIsXG4gIFwiQ2xvdWRVc2VySURcIixcbiAgXCJDbHVzdGVyQ2xhc3NpZnlcIixcbiAgXCJDbHVzdGVyRGlzc2ltaWxhcml0eUZ1bmN0aW9uXCIsXG4gIFwiQ2x1c3RlcmluZ0NvbXBvbmVudHNcIixcbiAgXCJDbHVzdGVyaW5nTWVhc3VyZW1lbnRzXCIsXG4gIFwiQ2x1c3RlcmluZ1RyZWVcIixcbiAgXCJDTVlLQ29sb3JcIixcbiAgXCJDb2Fyc2VcIixcbiAgXCJDb2RlQXNzaXN0T3B0aW9uc1wiLFxuICBcIkNvZWZmaWNpZW50XCIsXG4gIFwiQ29lZmZpY2llbnRBcnJheXNcIixcbiAgXCJDb2VmZmljaWVudERvbWFpblwiLFxuICBcIkNvZWZmaWNpZW50TGlzdFwiLFxuICBcIkNvZWZmaWNpZW50UnVsZXNcIixcbiAgXCJDb2lmbGV0V2F2ZWxldFwiLFxuICBcIkNvbGxlY3RcIixcbiAgXCJDb2xsaW5lYXJQb2ludHNcIixcbiAgXCJDb2xvblwiLFxuICBcIkNvbG9uRm9ybVwiLFxuICBcIkNvbG9yQmFsYW5jZVwiLFxuICBcIkNvbG9yQ29tYmluZVwiLFxuICBcIkNvbG9yQ29udmVydFwiLFxuICBcIkNvbG9yQ292ZXJhZ2VcIixcbiAgXCJDb2xvckRhdGFcIixcbiAgXCJDb2xvckRhdGFGdW5jdGlvblwiLFxuICBcIkNvbG9yRGV0ZWN0XCIsXG4gIFwiQ29sb3JEaXN0YW5jZVwiLFxuICBcIkNvbG9yRnVuY3Rpb25cIixcbiAgXCJDb2xvckZ1bmN0aW9uQmlubmluZ1wiLFxuICBcIkNvbG9yRnVuY3Rpb25TY2FsaW5nXCIsXG4gIFwiQ29sb3JpemVcIixcbiAgXCJDb2xvck5lZ2F0ZVwiLFxuICBcIkNvbG9yT3V0cHV0XCIsXG4gIFwiQ29sb3JQcm9maWxlRGF0YVwiLFxuICBcIkNvbG9yUVwiLFxuICBcIkNvbG9yUXVhbnRpemVcIixcbiAgXCJDb2xvclJlcGxhY2VcIixcbiAgXCJDb2xvclJ1bGVzXCIsXG4gIFwiQ29sb3JTZWxlY3RvclNldHRpbmdzXCIsXG4gIFwiQ29sb3JTZXBhcmF0ZVwiLFxuICBcIkNvbG9yU2V0dGVyXCIsXG4gIFwiQ29sb3JTZXR0ZXJCb3hcIixcbiAgXCJDb2xvclNldHRlckJveE9wdGlvbnNcIixcbiAgXCJDb2xvclNsaWRlclwiLFxuICBcIkNvbG9yc05lYXJcIixcbiAgXCJDb2xvclNwYWNlXCIsXG4gIFwiQ29sb3JUb25lTWFwcGluZ1wiLFxuICBcIkNvbHVtblwiLFxuICBcIkNvbHVtbkFsaWdubWVudHNcIixcbiAgXCJDb2x1bW5CYWNrZ3JvdW5kc1wiLFxuICBcIkNvbHVtbkZvcm1cIixcbiAgXCJDb2x1bW5MaW5lc1wiLFxuICBcIkNvbHVtbnNFcXVhbFwiLFxuICBcIkNvbHVtblNwYWNpbmdzXCIsXG4gIFwiQ29sdW1uV2lkdGhzXCIsXG4gIFwiQ29tYmluYXRvckJcIixcbiAgXCJDb21iaW5hdG9yQ1wiLFxuICBcIkNvbWJpbmF0b3JJXCIsXG4gIFwiQ29tYmluYXRvcktcIixcbiAgXCJDb21iaW5hdG9yU1wiLFxuICBcIkNvbWJpbmF0b3JXXCIsXG4gIFwiQ29tYmluYXRvcllcIixcbiAgXCJDb21iaW5lZEVudGl0eUNsYXNzXCIsXG4gIFwiQ29tYmluZXJGdW5jdGlvblwiLFxuICBcIkNvbWV0RGF0YVwiLFxuICBcIkNvbW1vbkRlZmF1bHRGb3JtYXRUeXBlc1wiLFxuICBcIkNvbW1vbmVzdFwiLFxuICBcIkNvbW1vbmVzdEZpbHRlclwiLFxuICBcIkNvbW1vbk5hbWVcIixcbiAgXCJDb21tb25Vbml0c1wiLFxuICBcIkNvbW11bml0eUJvdW5kYXJ5U3R5bGVcIixcbiAgXCJDb21tdW5pdHlHcmFwaFBsb3RcIixcbiAgXCJDb21tdW5pdHlMYWJlbHNcIixcbiAgXCJDb21tdW5pdHlSZWdpb25TdHlsZVwiLFxuICBcIkNvbXBhbnlEYXRhXCIsXG4gIFwiQ29tcGF0aWJsZVVuaXRRXCIsXG4gIFwiQ29tcGlsYXRpb25PcHRpb25zXCIsXG4gIFwiQ29tcGlsYXRpb25UYXJnZXRcIixcbiAgXCJDb21waWxlXCIsXG4gIFwiQ29tcGlsZWRcIixcbiAgXCJDb21waWxlZENvZGVGdW5jdGlvblwiLFxuICBcIkNvbXBpbGVkQ29tcG9uZW50XCIsXG4gIFwiQ29tcGlsZWRFeHByZXNzaW9uRGVjbGFyYXRpb25cIixcbiAgXCJDb21waWxlZEZ1bmN0aW9uXCIsXG4gIFwiQ29tcGlsZWRMYXllclwiLFxuICBcIkNvbXBpbGVyQ2FsbGJhY2tcIixcbiAgXCJDb21waWxlckVudmlyb25tZW50XCIsXG4gIFwiQ29tcGlsZXJFbnZpcm9ubWVudEFwcGVuZFwiLFxuICBcIkNvbXBpbGVyRW52aXJvbm1lbnRBcHBlbmRUb1wiLFxuICBcIkNvbXBpbGVyRW52aXJvbm1lbnRPYmplY3RcIixcbiAgXCJDb21waWxlck9wdGlvbnNcIixcbiAgXCJDb21wbGVtZW50XCIsXG4gIFwiQ29tcGxlbWVudGVkRW50aXR5Q2xhc3NcIixcbiAgXCJDb21wbGV0ZUdyYXBoXCIsXG4gIFwiQ29tcGxldGVHcmFwaFFcIixcbiAgXCJDb21wbGV0ZUludGVncmFsXCIsXG4gIFwiQ29tcGxldGVLYXJ5VHJlZVwiLFxuICBcIkNvbXBsZXRpb25zTGlzdFBhY2tldFwiLFxuICBcIkNvbXBsZXhcIixcbiAgXCJDb21wbGV4QXJyYXlQbG90XCIsXG4gIFwiQ29tcGxleENvbnRvdXJQbG90XCIsXG4gIFwiQ29tcGxleGVzXCIsXG4gIFwiQ29tcGxleEV4cGFuZFwiLFxuICBcIkNvbXBsZXhJbmZpbml0eVwiLFxuICBcIkNvbXBsZXhpdHlGdW5jdGlvblwiLFxuICBcIkNvbXBsZXhMaXN0UGxvdFwiLFxuICBcIkNvbXBsZXhQbG90XCIsXG4gIFwiQ29tcGxleFBsb3QzRFwiLFxuICBcIkNvbXBsZXhSZWdpb25QbG90XCIsXG4gIFwiQ29tcGxleFN0cmVhbVBsb3RcIixcbiAgXCJDb21wbGV4VmVjdG9yUGxvdFwiLFxuICBcIkNvbXBvbmVudE1lYXN1cmVtZW50c1wiLFxuICBcIkNvbXBvbmVudHdpc2VDb250ZXh0TWVudVwiLFxuICBcIkNvbXBvc2VcIixcbiAgXCJDb21wb3NlTGlzdFwiLFxuICBcIkNvbXBvc2VTZXJpZXNcIixcbiAgXCJDb21wb3NpdGVRXCIsXG4gIFwiQ29tcG9zaXRpb25cIixcbiAgXCJDb21wb3VuZEVsZW1lbnRcIixcbiAgXCJDb21wb3VuZEV4cHJlc3Npb25cIixcbiAgXCJDb21wb3VuZFBvaXNzb25EaXN0cmlidXRpb25cIixcbiAgXCJDb21wb3VuZFBvaXNzb25Qcm9jZXNzXCIsXG4gIFwiQ29tcG91bmRSZW5ld2FsUHJvY2Vzc1wiLFxuICBcIkNvbXByZXNzXCIsXG4gIFwiQ29tcHJlc3NlZERhdGFcIixcbiAgXCJDb21wcmVzc2lvbkxldmVsXCIsXG4gIFwiQ29tcHV0ZVVuY2VydGFpbnR5XCIsXG4gIFwiQ29uY2F2ZUh1bGxNZXNoXCIsXG4gIFwiQ29uZGl0aW9uXCIsXG4gIFwiQ29uZGl0aW9uYWxFeHByZXNzaW9uXCIsXG4gIFwiQ29uZGl0aW9uZWRcIixcbiAgXCJDb25lXCIsXG4gIFwiQ29uZUJveFwiLFxuICBcIkNvbmZpZGVuY2VMZXZlbFwiLFxuICBcIkNvbmZpZGVuY2VSYW5nZVwiLFxuICBcIkNvbmZpZGVuY2VUcmFuc2Zvcm1cIixcbiAgXCJDb25maWd1cmF0aW9uUGF0aFwiLFxuICBcIkNvbmZpcm1cIixcbiAgXCJDb25maXJtQXNzZXJ0XCIsXG4gIFwiQ29uZmlybUJ5XCIsXG4gIFwiQ29uZmlybU1hdGNoXCIsXG4gIFwiQ29uZmlybVF1aWV0XCIsXG4gIFwiQ29uZm9ybWF0aW9uTWV0aG9kXCIsXG4gIFwiQ29uZm9ybUF1ZGlvXCIsXG4gIFwiQ29uZm9ybUltYWdlc1wiLFxuICBcIkNvbmdydWVudFwiLFxuICBcIkNvbmljR3JhZGllbnRGaWxsaW5nXCIsXG4gIFwiQ29uaWNIdWxsUmVnaW9uXCIsXG4gIFwiQ29uaWNIdWxsUmVnaW9uM0RCb3hcIixcbiAgXCJDb25pY0h1bGxSZWdpb24zREJveE9wdGlvbnNcIixcbiAgXCJDb25pY0h1bGxSZWdpb25Cb3hcIixcbiAgXCJDb25pY0h1bGxSZWdpb25Cb3hPcHRpb25zXCIsXG4gIFwiQ29uaWNPcHRpbWl6YXRpb25cIixcbiAgXCJDb25qdWdhdGVcIixcbiAgXCJDb25qdWdhdGVUcmFuc3Bvc2VcIixcbiAgXCJDb25qdW5jdGlvblwiLFxuICBcIkNvbm5lY3RcIixcbiAgXCJDb25uZWN0ZWRDb21wb25lbnRzXCIsXG4gIFwiQ29ubmVjdGVkR3JhcGhDb21wb25lbnRzXCIsXG4gIFwiQ29ubmVjdGVkR3JhcGhRXCIsXG4gIFwiQ29ubmVjdGVkTWVzaENvbXBvbmVudHNcIixcbiAgXCJDb25uZWN0ZWRNb2xlY3VsZUNvbXBvbmVudHNcIixcbiAgXCJDb25uZWN0ZWRNb2xlY3VsZVFcIixcbiAgXCJDb25uZWN0aW9uU2V0dGluZ3NcIixcbiAgXCJDb25uZWN0TGlicmFyeUNhbGxiYWNrRnVuY3Rpb25cIixcbiAgXCJDb25uZWN0U3lzdGVtTW9kZWxDb21wb25lbnRzXCIsXG4gIFwiQ29ubmVjdFN5c3RlbU1vZGVsQ29udHJvbGxlclwiLFxuICBcIkNvbm5lc1dpbmRvd1wiLFxuICBcIkNvbm92ZXJUZXN0XCIsXG4gIFwiQ29uc2VydmF0aXZlQ29udmVjdGlvblBERVRlcm1cIixcbiAgXCJDb25zb2xlTWVzc2FnZVwiLFxuICBcIkNvbnN0YW50XCIsXG4gIFwiQ29uc3RhbnRBcnJheVwiLFxuICBcIkNvbnN0YW50QXJyYXlMYXllclwiLFxuICBcIkNvbnN0YW50SW1hZ2VcIixcbiAgXCJDb25zdGFudFBsdXNMYXllclwiLFxuICBcIkNvbnN0YW50UmVnaW9uUVwiLFxuICBcIkNvbnN0YW50c1wiLFxuICBcIkNvbnN0YW50VGltZXNMYXllclwiLFxuICBcIkNvbnN0ZWxsYXRpb25EYXRhXCIsXG4gIFwiQ29uc3RyYWluZWRNYXhcIixcbiAgXCJDb25zdHJhaW5lZE1pblwiLFxuICBcIkNvbnN0cnVjdFwiLFxuICBcIkNvbnRhaW5pbmdcIixcbiAgXCJDb250YWluc0FsbFwiLFxuICBcIkNvbnRhaW5zQW55XCIsXG4gIFwiQ29udGFpbnNFeGFjdGx5XCIsXG4gIFwiQ29udGFpbnNOb25lXCIsXG4gIFwiQ29udGFpbnNPbmx5XCIsXG4gIFwiQ29udGVudERldGVjdG9yRnVuY3Rpb25cIixcbiAgXCJDb250ZW50RmllbGRPcHRpb25zXCIsXG4gIFwiQ29udGVudExvY2F0aW9uRnVuY3Rpb25cIixcbiAgXCJDb250ZW50T2JqZWN0XCIsXG4gIFwiQ29udGVudFBhZGRpbmdcIixcbiAgXCJDb250ZW50c0JvdW5kaW5nQm94XCIsXG4gIFwiQ29udGVudFNlbGVjdGFibGVcIixcbiAgXCJDb250ZW50U2l6ZVwiLFxuICBcIkNvbnRleHRcIixcbiAgXCJDb250ZXh0TWVudVwiLFxuICBcIkNvbnRleHRzXCIsXG4gIFwiQ29udGV4dFRvRmlsZU5hbWVcIixcbiAgXCJDb250aW51YXRpb25cIixcbiAgXCJDb250aW51ZVwiLFxuICBcIkNvbnRpbnVlZEZyYWN0aW9uXCIsXG4gIFwiQ29udGludWVkRnJhY3Rpb25LXCIsXG4gIFwiQ29udGludW91c0FjdGlvblwiLFxuICBcIkNvbnRpbnVvdXNNYXJrb3ZQcm9jZXNzXCIsXG4gIFwiQ29udGludW91c1Rhc2tcIixcbiAgXCJDb250aW51b3VzVGltZU1vZGVsUVwiLFxuICBcIkNvbnRpbnVvdXNXYXZlbGV0RGF0YVwiLFxuICBcIkNvbnRpbnVvdXNXYXZlbGV0VHJhbnNmb3JtXCIsXG4gIFwiQ29udG91ckRldGVjdFwiLFxuICBcIkNvbnRvdXJHcmFwaGljc1wiLFxuICBcIkNvbnRvdXJJbnRlZ3JhbFwiLFxuICBcIkNvbnRvdXJMYWJlbHNcIixcbiAgXCJDb250b3VyTGluZXNcIixcbiAgXCJDb250b3VyUGxvdFwiLFxuICBcIkNvbnRvdXJQbG90M0RcIixcbiAgXCJDb250b3Vyc1wiLFxuICBcIkNvbnRvdXJTaGFkaW5nXCIsXG4gIFwiQ29udG91clNtb290aGluZ1wiLFxuICBcIkNvbnRvdXJTdHlsZVwiLFxuICBcIkNvbnRyYWhhcm1vbmljTWVhblwiLFxuICBcIkNvbnRyYXN0aXZlTG9zc0xheWVyXCIsXG4gIFwiQ29udHJvbFwiLFxuICBcIkNvbnRyb2xBY3RpdmVcIixcbiAgXCJDb250cm9sQWxpZ25tZW50XCIsXG4gIFwiQ29udHJvbEdyb3VwQ29udGVudHNCb3hcIixcbiAgXCJDb250cm9sbGFiaWxpdHlHcmFtaWFuXCIsXG4gIFwiQ29udHJvbGxhYmlsaXR5TWF0cml4XCIsXG4gIFwiQ29udHJvbGxhYmxlRGVjb21wb3NpdGlvblwiLFxuICBcIkNvbnRyb2xsYWJsZU1vZGVsUVwiLFxuICBcIkNvbnRyb2xsZXJEdXJhdGlvblwiLFxuICBcIkNvbnRyb2xsZXJJbmZvcm1hdGlvblwiLFxuICBcIkNvbnRyb2xsZXJJbmZvcm1hdGlvbkRhdGFcIixcbiAgXCJDb250cm9sbGVyTGlua2luZ1wiLFxuICBcIkNvbnRyb2xsZXJNYW5pcHVsYXRlXCIsXG4gIFwiQ29udHJvbGxlck1ldGhvZFwiLFxuICBcIkNvbnRyb2xsZXJQYXRoXCIsXG4gIFwiQ29udHJvbGxlclN0YXRlXCIsXG4gIFwiQ29udHJvbFBsYWNlbWVudFwiLFxuICBcIkNvbnRyb2xzUmVuZGVyaW5nXCIsXG4gIFwiQ29udHJvbFR5cGVcIixcbiAgXCJDb252ZWN0aW9uUERFVGVybVwiLFxuICBcIkNvbnZlcmdlbnRzXCIsXG4gIFwiQ29udmVyc2lvbk9wdGlvbnNcIixcbiAgXCJDb252ZXJzaW9uUnVsZXNcIixcbiAgXCJDb252ZXJ0VG9Qb3N0U2NyaXB0XCIsXG4gIFwiQ29udmVydFRvUG9zdFNjcmlwdFBhY2tldFwiLFxuICBcIkNvbnZleEh1bGxNZXNoXCIsXG4gIFwiQ29udmV4SHVsbFJlZ2lvblwiLFxuICBcIkNvbnZleE9wdGltaXphdGlvblwiLFxuICBcIkNvbnZleFBvbHlnb25RXCIsXG4gIFwiQ29udmV4UG9seWhlZHJvblFcIixcbiAgXCJDb252ZXhSZWdpb25RXCIsXG4gIFwiQ29udm9sdXRpb25MYXllclwiLFxuICBcIkNvbnZvbHZlXCIsXG4gIFwiQ29ud2F5R3JvdXBDbzFcIixcbiAgXCJDb253YXlHcm91cENvMlwiLFxuICBcIkNvbndheUdyb3VwQ28zXCIsXG4gIFwiQ29va2llRnVuY3Rpb25cIixcbiAgXCJDb29raWVzXCIsXG4gIFwiQ29vcmRpbmF0ZUJvdW5kaW5nQm94XCIsXG4gIFwiQ29vcmRpbmF0ZUJvdW5kaW5nQm94QXJyYXlcIixcbiAgXCJDb29yZGluYXRlQm91bmRzXCIsXG4gIFwiQ29vcmRpbmF0ZUJvdW5kc0FycmF5XCIsXG4gIFwiQ29vcmRpbmF0ZUNoYXJ0RGF0YVwiLFxuICBcIkNvb3JkaW5hdGVzVG9vbE9wdGlvbnNcIixcbiAgXCJDb29yZGluYXRlVHJhbnNmb3JtXCIsXG4gIFwiQ29vcmRpbmF0ZVRyYW5zZm9ybURhdGFcIixcbiAgXCJDb3BsYW5hclBvaW50c1wiLFxuICBcIkNvcHJpbWVRXCIsXG4gIFwiQ29wcm9kdWN0XCIsXG4gIFwiQ29wdWxhRGlzdHJpYnV0aW9uXCIsXG4gIFwiQ29weWFibGVcIixcbiAgXCJDb3B5RGF0YWJpblwiLFxuICBcIkNvcHlEaXJlY3RvcnlcIixcbiAgXCJDb3B5RmlsZVwiLFxuICBcIkNvcHlGdW5jdGlvblwiLFxuICBcIkNvcHlUYWdcIixcbiAgXCJDb3B5VG9DbGlwYm9hcmRcIixcbiAgXCJDb3JlTmlscG90ZW50RGVjb21wb3NpdGlvblwiLFxuICBcIkNvcm5lckZpbHRlclwiLFxuICBcIkNvcm5lck5laWdoYm9yc1wiLFxuICBcIkNvcnJlbGF0aW9uXCIsXG4gIFwiQ29ycmVsYXRpb25EaXN0YW5jZVwiLFxuICBcIkNvcnJlbGF0aW9uRnVuY3Rpb25cIixcbiAgXCJDb3JyZWxhdGlvblRlc3RcIixcbiAgXCJDb3NcIixcbiAgXCJDb3NoXCIsXG4gIFwiQ29zaEludGVncmFsXCIsXG4gIFwiQ29zaW5lRGlzdGFuY2VcIixcbiAgXCJDb3NpbmVXaW5kb3dcIixcbiAgXCJDb3NJbnRlZ3JhbFwiLFxuICBcIkNvdFwiLFxuICBcIkNvdGhcIixcbiAgXCJDb3Vsb21iRlwiLFxuICBcIkNvdWxvbWJHXCIsXG4gIFwiQ291bG9tYkgxXCIsXG4gIFwiQ291bG9tYkgyXCIsXG4gIFwiQ291bnRcIixcbiAgXCJDb3VudERpc3RpbmN0XCIsXG4gIFwiQ291bnREaXN0aW5jdEJ5XCIsXG4gIFwiQ291bnRlckFzc2lnbm1lbnRzXCIsXG4gIFwiQ291bnRlckJveFwiLFxuICBcIkNvdW50ZXJCb3hPcHRpb25zXCIsXG4gIFwiQ291bnRlckNsb2Nrd2lzZUNvbnRvdXJJbnRlZ3JhbFwiLFxuICBcIkNvdW50ZXJFdmFsdWF0b3JcIixcbiAgXCJDb3VudGVyRnVuY3Rpb25cIixcbiAgXCJDb3VudGVySW5jcmVtZW50c1wiLFxuICBcIkNvdW50ZXJTdHlsZVwiLFxuICBcIkNvdW50ZXJTdHlsZU1lbnVMaXN0aW5nXCIsXG4gIFwiQ291bnRSb290c1wiLFxuICBcIkNvdW50cnlEYXRhXCIsXG4gIFwiQ291bnRzXCIsXG4gIFwiQ291bnRzQnlcIixcbiAgXCJDb3ZhcmlhbmNlXCIsXG4gIFwiQ292YXJpYW5jZUVzdGltYXRvckZ1bmN0aW9uXCIsXG4gIFwiQ292YXJpYW5jZUZ1bmN0aW9uXCIsXG4gIFwiQ294aWFuRGlzdHJpYnV0aW9uXCIsXG4gIFwiQ294SW5nZXJzb2xsUm9zc1Byb2Nlc3NcIixcbiAgXCJDb3hNb2RlbFwiLFxuICBcIkNveE1vZGVsRml0XCIsXG4gIFwiQ3JhbWVyVm9uTWlzZXNUZXN0XCIsXG4gIFwiQ3JlYXRlQXJjaGl2ZVwiLFxuICBcIkNyZWF0ZUNlbGxJRFwiLFxuICBcIkNyZWF0ZUNoYW5uZWxcIixcbiAgXCJDcmVhdGVDbG91ZEV4cHJlc3Npb25cIixcbiAgXCJDcmVhdGVDb21waWxlckVudmlyb25tZW50XCIsXG4gIFwiQ3JlYXRlRGF0YWJpblwiLFxuICBcIkNyZWF0ZURhdGFTdHJ1Y3R1cmVcIixcbiAgXCJDcmVhdGVEYXRhU3lzdGVtTW9kZWxcIixcbiAgXCJDcmVhdGVEaWFsb2dcIixcbiAgXCJDcmVhdGVEaXJlY3RvcnlcIixcbiAgXCJDcmVhdGVEb2N1bWVudFwiLFxuICBcIkNyZWF0ZUZpbGVcIixcbiAgXCJDcmVhdGVJbnRlcm1lZGlhdGVEaXJlY3Rvcmllc1wiLFxuICBcIkNyZWF0ZUxpY2Vuc2VFbnRpdGxlbWVudFwiLFxuICBcIkNyZWF0ZU1hbmFnZWRMaWJyYXJ5RXhwcmVzc2lvblwiLFxuICBcIkNyZWF0ZU5vdGVib29rXCIsXG4gIFwiQ3JlYXRlUGFjbGV0QXJjaGl2ZVwiLFxuICBcIkNyZWF0ZVBhbGV0dGVcIixcbiAgXCJDcmVhdGVQZXJtaXNzaW9uc0dyb3VwXCIsXG4gIFwiQ3JlYXRlU2NoZWR1bGVkVGFza1wiLFxuICBcIkNyZWF0ZVNlYXJjaEluZGV4XCIsXG4gIFwiQ3JlYXRlU3lzdGVtTW9kZWxcIixcbiAgXCJDcmVhdGVUZW1wb3JhcnlcIixcbiAgXCJDcmVhdGVUeXBlSW5zdGFuY2VcIixcbiAgXCJDcmVhdGVVVUlEXCIsXG4gIFwiQ3JlYXRlV2luZG93XCIsXG4gIFwiQ3JpdGVyaW9uRnVuY3Rpb25cIixcbiAgXCJDcml0aWNhbGl0eUZhaWx1cmVJbXBvcnRhbmNlXCIsXG4gIFwiQ3JpdGljYWxpdHlTdWNjZXNzSW1wb3J0YW5jZVwiLFxuICBcIkNyaXRpY2FsU2VjdGlvblwiLFxuICBcIkNyb3NzXCIsXG4gIFwiQ3Jvc3NFbnRyb3B5TG9zc0xheWVyXCIsXG4gIFwiQ3Jvc3NpbmdDb3VudFwiLFxuICBcIkNyb3NzaW5nRGV0ZWN0XCIsXG4gIFwiQ3Jvc3NpbmdQb2x5Z29uXCIsXG4gIFwiQ3Jvc3NNYXRyaXhcIixcbiAgXCJDc2NcIixcbiAgXCJDc2NoXCIsXG4gIFwiQ1NHUmVnaW9uXCIsXG4gIFwiQ1NHUmVnaW9uUVwiLFxuICBcIkNTR1JlZ2lvblRyZWVcIixcbiAgXCJDVENMb3NzTGF5ZXJcIixcbiAgXCJDdWJlXCIsXG4gIFwiQ3ViZVJvb3RcIixcbiAgXCJDdWJpY3NcIixcbiAgXCJDdWJvaWRcIixcbiAgXCJDdWJvaWRCb3hcIixcbiAgXCJDdWJvaWRCb3hPcHRpb25zXCIsXG4gIFwiQ3VtdWxhbnRcIixcbiAgXCJDdW11bGFudEdlbmVyYXRpbmdGdW5jdGlvblwiLFxuICBcIkN1bXVsYXRpdmVGZWF0dXJlSW1wYWN0UGxvdFwiLFxuICBcIkN1cFwiLFxuICBcIkN1cENhcFwiLFxuICBcIkN1cmxcIixcbiAgXCJDdXJseURvdWJsZVF1b3RlXCIsXG4gIFwiQ3VybHlRdW90ZVwiLFxuICBcIkN1cnJlbmN5Q29udmVydFwiLFxuICBcIkN1cnJlbnREYXRlXCIsXG4gIFwiQ3VycmVudEltYWdlXCIsXG4gIFwiQ3VycmVudE5vdGVib29rSW1hZ2VcIixcbiAgXCJDdXJyZW50U2NyZWVuSW1hZ2VcIixcbiAgXCJDdXJyZW50VmFsdWVcIixcbiAgXCJDdXJyeVwiLFxuICBcIkN1cnJ5QXBwbGllZFwiLFxuICBcIkN1cnZhdHVyZUZsb3dGaWx0ZXJcIixcbiAgXCJDdXJ2ZUNsb3NlZFwiLFxuICBcIkN5YW5cIixcbiAgXCJDeWNsZUdyYXBoXCIsXG4gIFwiQ3ljbGVJbmRleFBvbHlub21pYWxcIixcbiAgXCJDeWNsZXNcIixcbiAgXCJDeWNsaWNHcm91cFwiLFxuICBcIkN5Y2xvdG9taWNcIixcbiAgXCJDeWxpbmRlclwiLFxuICBcIkN5bGluZGVyQm94XCIsXG4gIFwiQ3lsaW5kZXJCb3hPcHRpb25zXCIsXG4gIFwiQ3lsaW5kcmljYWxEZWNvbXBvc2l0aW9uXCIsXG4gIFwiQ3lsaW5kcmljYWxEZWNvbXBvc2l0aW9uRnVuY3Rpb25cIixcbiAgXCJEXCIsXG4gIFwiRGFndW1EaXN0cmlidXRpb25cIixcbiAgXCJEYW1EYXRhXCIsXG4gIFwiRGFtZXJhdUxldmVuc2h0ZWluRGlzdGFuY2VcIixcbiAgXCJEYW1waW5nRmFjdG9yXCIsXG4gIFwiRGFya2VyXCIsXG4gIFwiRGFzaGVkXCIsXG4gIFwiRGFzaGluZ1wiLFxuICBcIkRhdGFiYXNlQ29ubmVjdFwiLFxuICBcIkRhdGFiYXNlRGlzY29ubmVjdFwiLFxuICBcIkRhdGFiYXNlUmVmZXJlbmNlXCIsXG4gIFwiRGF0YWJpblwiLFxuICBcIkRhdGFiaW5BZGRcIixcbiAgXCJEYXRhYmluUmVtb3ZlXCIsXG4gIFwiRGF0YWJpbnNcIixcbiAgXCJEYXRhYmluU3VibWl0XCIsXG4gIFwiRGF0YWJpblVwbG9hZFwiLFxuICBcIkRhdGFDb21wcmVzc2lvblwiLFxuICBcIkRhdGFEaXN0cmlidXRpb25cIixcbiAgXCJEYXRhUmFuZ2VcIixcbiAgXCJEYXRhUmV2ZXJzZWRcIixcbiAgXCJEYXRhc2V0XCIsXG4gIFwiRGF0YXNldERpc3BsYXlQYW5lbFwiLFxuICBcIkRhdGFzZXRUaGVtZVwiLFxuICBcIkRhdGFTdHJ1Y3R1cmVcIixcbiAgXCJEYXRhU3RydWN0dXJlUVwiLFxuICBcIkRhdGVcIixcbiAgXCJEYXRlQm91bmRzXCIsXG4gIFwiRGF0ZWRcIixcbiAgXCJEYXRlRGVsaW1pdGVyc1wiLFxuICBcIkRhdGVEaWZmZXJlbmNlXCIsXG4gIFwiRGF0ZWRVbml0XCIsXG4gIFwiRGF0ZUZvcm1hdFwiLFxuICBcIkRhdGVGdW5jdGlvblwiLFxuICBcIkRhdGVHcmFudWxhcml0eVwiLFxuICBcIkRhdGVIaXN0b2dyYW1cIixcbiAgXCJEYXRlSW50ZXJ2YWxcIixcbiAgXCJEYXRlTGlzdFwiLFxuICBcIkRhdGVMaXN0TG9nUGxvdFwiLFxuICBcIkRhdGVMaXN0UGxvdFwiLFxuICBcIkRhdGVMaXN0U3RlcFBsb3RcIixcbiAgXCJEYXRlT2JqZWN0XCIsXG4gIFwiRGF0ZU9iamVjdFFcIixcbiAgXCJEYXRlT3ZlcmxhcHNRXCIsXG4gIFwiRGF0ZVBhdHRlcm5cIixcbiAgXCJEYXRlUGx1c1wiLFxuICBcIkRhdGVSYW5nZVwiLFxuICBcIkRhdGVSZWR1Y3Rpb25cIixcbiAgXCJEYXRlU2NhbGVcIixcbiAgXCJEYXRlU2VsZWN0XCIsXG4gIFwiRGF0ZVN0cmluZ1wiLFxuICBcIkRhdGVUaWNrc0Zvcm1hdFwiLFxuICBcIkRhdGVWYWx1ZVwiLFxuICBcIkRhdGVXaXRoaW5RXCIsXG4gIFwiRGF1YmVjaGllc1dhdmVsZXRcIixcbiAgXCJEYXZpc0Rpc3RyaWJ1dGlvblwiLFxuICBcIkRhd3NvbkZcIixcbiAgXCJEYXlDb3VudFwiLFxuICBcIkRheUNvdW50Q29udmVudGlvblwiLFxuICBcIkRheUhlbWlzcGhlcmVcIixcbiAgXCJEYXlsaWdodFFcIixcbiAgXCJEYXlNYXRjaFFcIixcbiAgXCJEYXlOYW1lXCIsXG4gIFwiRGF5TmlnaHRUZXJtaW5hdG9yXCIsXG4gIFwiRGF5UGx1c1wiLFxuICBcIkRheVJhbmdlXCIsXG4gIFwiRGF5Um91bmRcIixcbiAgXCJEZUJydWlqbkdyYXBoXCIsXG4gIFwiRGVCcnVpam5TZXF1ZW5jZVwiLFxuICBcIkRlYnVnXCIsXG4gIFwiRGVidWdUYWdcIixcbiAgXCJEZWNhcGl0YWxpemVcIixcbiAgXCJEZWNpbWFsXCIsXG4gIFwiRGVjaW1hbEZvcm1cIixcbiAgXCJEZWNsYXJlQ29tcGlsZWRDb21wb25lbnRcIixcbiAgXCJEZWNsYXJlS25vd25TeW1ib2xzXCIsXG4gIFwiRGVjbGFyZVBhY2thZ2VcIixcbiAgXCJEZWNvbXBvc2VcIixcbiAgXCJEZWNvbnZvbHV0aW9uTGF5ZXJcIixcbiAgXCJEZWNyZW1lbnRcIixcbiAgXCJEZWNyeXB0XCIsXG4gIFwiRGVjcnlwdEZpbGVcIixcbiAgXCJEZWRla2luZEV0YVwiLFxuICBcIkRlZXBTcGFjZVByb2JlRGF0YVwiLFxuICBcIkRlZmF1bHRcIixcbiAgXCJEZWZhdWx0MkRUb29sXCIsXG4gIFwiRGVmYXVsdDNEVG9vbFwiLFxuICBcIkRlZmF1bHRBdHRhY2hlZENlbGxTdHlsZVwiLFxuICBcIkRlZmF1bHRBeGVzU3R5bGVcIixcbiAgXCJEZWZhdWx0QmFzZVN0eWxlXCIsXG4gIFwiRGVmYXVsdEJveFN0eWxlXCIsXG4gIFwiRGVmYXVsdEJ1dHRvblwiLFxuICBcIkRlZmF1bHRDb2xvclwiLFxuICBcIkRlZmF1bHRDb250cm9sUGxhY2VtZW50XCIsXG4gIFwiRGVmYXVsdERvY2tlZENlbGxTdHlsZVwiLFxuICBcIkRlZmF1bHREdXBsaWNhdGVDZWxsU3R5bGVcIixcbiAgXCJEZWZhdWx0RHVyYXRpb25cIixcbiAgXCJEZWZhdWx0RWxlbWVudFwiLFxuICBcIkRlZmF1bHRGYWNlR3JpZHNTdHlsZVwiLFxuICBcIkRlZmF1bHRGaWVsZEhpbnRTdHlsZVwiLFxuICBcIkRlZmF1bHRGb250XCIsXG4gIFwiRGVmYXVsdEZvbnRQcm9wZXJ0aWVzXCIsXG4gIFwiRGVmYXVsdEZvcm1hdFR5cGVcIixcbiAgXCJEZWZhdWx0RnJhbWVTdHlsZVwiLFxuICBcIkRlZmF1bHRGcmFtZVRpY2tzU3R5bGVcIixcbiAgXCJEZWZhdWx0R3JpZExpbmVzU3R5bGVcIixcbiAgXCJEZWZhdWx0SW5saW5lRm9ybWF0VHlwZVwiLFxuICBcIkRlZmF1bHRJbnB1dEZvcm1hdFR5cGVcIixcbiAgXCJEZWZhdWx0TGFiZWxTdHlsZVwiLFxuICBcIkRlZmF1bHRNZW51U3R5bGVcIixcbiAgXCJEZWZhdWx0TmF0dXJhbExhbmd1YWdlXCIsXG4gIFwiRGVmYXVsdE5ld0NlbGxTdHlsZVwiLFxuICBcIkRlZmF1bHROZXdJbmxpbmVDZWxsU3R5bGVcIixcbiAgXCJEZWZhdWx0Tm90ZWJvb2tcIixcbiAgXCJEZWZhdWx0T3B0aW9uc1wiLFxuICBcIkRlZmF1bHRPdXRwdXRGb3JtYXRUeXBlXCIsXG4gIFwiRGVmYXVsdFByaW50UHJlY2lzaW9uXCIsXG4gIFwiRGVmYXVsdFN0eWxlXCIsXG4gIFwiRGVmYXVsdFN0eWxlRGVmaW5pdGlvbnNcIixcbiAgXCJEZWZhdWx0VGV4dEZvcm1hdFR5cGVcIixcbiAgXCJEZWZhdWx0VGV4dElubGluZUZvcm1hdFR5cGVcIixcbiAgXCJEZWZhdWx0VGlja3NTdHlsZVwiLFxuICBcIkRlZmF1bHRUb29sdGlwU3R5bGVcIixcbiAgXCJEZWZhdWx0VmFsdWVcIixcbiAgXCJEZWZhdWx0VmFsdWVzXCIsXG4gIFwiRGVmZXJcIixcbiAgXCJEZWZpbmVFeHRlcm5hbFwiLFxuICBcIkRlZmluZUlucHV0U3RyZWFtTWV0aG9kXCIsXG4gIFwiRGVmaW5lT3V0cHV0U3RyZWFtTWV0aG9kXCIsXG4gIFwiRGVmaW5lUmVzb3VyY2VGdW5jdGlvblwiLFxuICBcIkRlZmluaXRpb25cIixcbiAgXCJEZWdyZWVcIixcbiAgXCJEZWdyZWVDZW50cmFsaXR5XCIsXG4gIFwiRGVncmVlR3JhcGhEaXN0cmlidXRpb25cIixcbiAgXCJEZWdyZWVMZXhpY29ncmFwaGljXCIsXG4gIFwiRGVncmVlUmV2ZXJzZUxleGljb2dyYXBoaWNcIixcbiAgXCJERWlnZW5zeXN0ZW1cIixcbiAgXCJERWlnZW52YWx1ZXNcIixcbiAgXCJEZWluaXRpYWxpemF0aW9uXCIsXG4gIFwiRGVsXCIsXG4gIFwiRGVsYXVuYXlNZXNoXCIsXG4gIFwiRGVsYXllZFwiLFxuICBcIkRlbGV0YWJsZVwiLFxuICBcIkRlbGV0ZVwiLFxuICBcIkRlbGV0ZUFkamFjZW50RHVwbGljYXRlc1wiLFxuICBcIkRlbGV0ZUFub21hbGllc1wiLFxuICBcIkRlbGV0ZUJvcmRlckNvbXBvbmVudHNcIixcbiAgXCJEZWxldGVDYXNlc1wiLFxuICBcIkRlbGV0ZUNoYW5uZWxcIixcbiAgXCJEZWxldGVDbG91ZEV4cHJlc3Npb25cIixcbiAgXCJEZWxldGVDb250ZW50c1wiLFxuICBcIkRlbGV0ZURpcmVjdG9yeVwiLFxuICBcIkRlbGV0ZUR1cGxpY2F0ZXNcIixcbiAgXCJEZWxldGVEdXBsaWNhdGVzQnlcIixcbiAgXCJEZWxldGVFbGVtZW50c1wiLFxuICBcIkRlbGV0ZUZpbGVcIixcbiAgXCJEZWxldGVNaXNzaW5nXCIsXG4gIFwiRGVsZXRlT2JqZWN0XCIsXG4gIFwiRGVsZXRlUGVybWlzc2lvbnNLZXlcIixcbiAgXCJEZWxldGVTZWFyY2hJbmRleFwiLFxuICBcIkRlbGV0ZVNtYWxsQ29tcG9uZW50c1wiLFxuICBcIkRlbGV0ZVN0b3B3b3Jkc1wiLFxuICBcIkRlbGV0ZVdpdGhDb250ZW50c1wiLFxuICBcIkRlbGV0aW9uV2FybmluZ1wiLFxuICBcIkRlbGltaXRlZEFycmF5XCIsXG4gIFwiRGVsaW1pdGVkU2VxdWVuY2VcIixcbiAgXCJEZWxpbWl0ZXJcIixcbiAgXCJEZWxpbWl0ZXJBdXRvTWF0Y2hpbmdcIixcbiAgXCJEZWxpbWl0ZXJGbGFzaFRpbWVcIixcbiAgXCJEZWxpbWl0ZXJNYXRjaGluZ1wiLFxuICBcIkRlbGltaXRlcnNcIixcbiAgXCJEZWxpdmVyeUZ1bmN0aW9uXCIsXG4gIFwiRGVuZHJvZ3JhbVwiLFxuICBcIkRlbm9taW5hdG9yXCIsXG4gIFwiRGVuc2l0eUdyYXBoaWNzXCIsXG4gIFwiRGVuc2l0eUhpc3RvZ3JhbVwiLFxuICBcIkRlbnNpdHlQbG90XCIsXG4gIFwiRGVuc2l0eVBsb3QzRFwiLFxuICBcIkRlcGVuZGVudFZhcmlhYmxlc1wiLFxuICBcIkRlcGxveVwiLFxuICBcIkRlcGxveWVkXCIsXG4gIFwiRGVwdGhcIixcbiAgXCJEZXB0aEZpcnN0U2NhblwiLFxuICBcIkRlcml2YXRpdmVcIixcbiAgXCJEZXJpdmF0aXZlRmlsdGVyXCIsXG4gIFwiRGVyaXZhdGl2ZVBERVRlcm1cIixcbiAgXCJEZXJpdmVkS2V5XCIsXG4gIFwiRGVzY3JpcHRvclN0YXRlU3BhY2VcIixcbiAgXCJEZXNpZ25NYXRyaXhcIixcbiAgXCJEZXN0cm95QWZ0ZXJFdmFsdWF0aW9uXCIsXG4gIFwiRGV0XCIsXG4gIFwiRGV2aWNlQ2xvc2VcIixcbiAgXCJEZXZpY2VDb25maWd1cmVcIixcbiAgXCJEZXZpY2VFeGVjdXRlXCIsXG4gIFwiRGV2aWNlRXhlY3V0ZUFzeW5jaHJvbm91c1wiLFxuICBcIkRldmljZU9iamVjdFwiLFxuICBcIkRldmljZU9wZW5cIixcbiAgXCJEZXZpY2VPcGVuUVwiLFxuICBcIkRldmljZVJlYWRcIixcbiAgXCJEZXZpY2VSZWFkQnVmZmVyXCIsXG4gIFwiRGV2aWNlUmVhZExhdGVzdFwiLFxuICBcIkRldmljZVJlYWRMaXN0XCIsXG4gIFwiRGV2aWNlUmVhZFRpbWVTZXJpZXNcIixcbiAgXCJEZXZpY2VzXCIsXG4gIFwiRGV2aWNlU3RyZWFtc1wiLFxuICBcIkRldmljZVdyaXRlXCIsXG4gIFwiRGV2aWNlV3JpdGVCdWZmZXJcIixcbiAgXCJER2F1c3NpYW5XYXZlbGV0XCIsXG4gIFwiRGlhY3JpdGljYWxQb3NpdGlvbmluZ1wiLFxuICBcIkRpYWdvbmFsXCIsXG4gIFwiRGlhZ29uYWxpemFibGVNYXRyaXhRXCIsXG4gIFwiRGlhZ29uYWxNYXRyaXhcIixcbiAgXCJEaWFnb25hbE1hdHJpeFFcIixcbiAgXCJEaWFsb2dcIixcbiAgXCJEaWFsb2dJbmRlbnRcIixcbiAgXCJEaWFsb2dJbnB1dFwiLFxuICBcIkRpYWxvZ0xldmVsXCIsXG4gIFwiRGlhbG9nTm90ZWJvb2tcIixcbiAgXCJEaWFsb2dQcm9sb2dcIixcbiAgXCJEaWFsb2dSZXR1cm5cIixcbiAgXCJEaWFsb2dTeW1ib2xzXCIsXG4gIFwiRGlhbW9uZFwiLFxuICBcIkRpYW1vbmRNYXRyaXhcIixcbiAgXCJEaWNlRGlzc2ltaWxhcml0eVwiLFxuICBcIkRpY3Rpb25hcnlMb29rdXBcIixcbiAgXCJEaWN0aW9uYXJ5V29yZFFcIixcbiAgXCJEaWZmZXJlbmNlRGVsdGFcIixcbiAgXCJEaWZmZXJlbmNlT3JkZXJcIixcbiAgXCJEaWZmZXJlbmNlUXVvdGllbnRcIixcbiAgXCJEaWZmZXJlbmNlUm9vdFwiLFxuICBcIkRpZmZlcmVuY2VSb290UmVkdWNlXCIsXG4gIFwiRGlmZmVyZW5jZXNcIixcbiAgXCJEaWZmZXJlbnRpYWxEXCIsXG4gIFwiRGlmZmVyZW50aWFsUm9vdFwiLFxuICBcIkRpZmZlcmVudGlhbFJvb3RSZWR1Y2VcIixcbiAgXCJEaWZmZXJlbnRpYXRvckZpbHRlclwiLFxuICBcIkRpZmZ1c2lvblBERVRlcm1cIixcbiAgXCJEaWdnbGVHYXRlc1BvaW50UHJvY2Vzc1wiLFxuICBcIkRpZ2dsZUdyYXR0b25Qb2ludFByb2Nlc3NcIixcbiAgXCJEaWdpdGFsU2lnbmF0dXJlXCIsXG4gIFwiRGlnaXRCbG9ja1wiLFxuICBcIkRpZ2l0QmxvY2tNaW5pbXVtXCIsXG4gIFwiRGlnaXRDaGFyYWN0ZXJcIixcbiAgXCJEaWdpdENvdW50XCIsXG4gIFwiRGlnaXRRXCIsXG4gIFwiRGloZWRyYWxBbmdsZVwiLFxuICBcIkRpaGVkcmFsR3JvdXBcIixcbiAgXCJEaWxhdGlvblwiLFxuICBcIkRpbWVuc2lvbmFsQ29tYmluYXRpb25zXCIsXG4gIFwiRGltZW5zaW9uYWxNZXNoQ29tcG9uZW50c1wiLFxuICBcIkRpbWVuc2lvblJlZHVjZVwiLFxuICBcIkRpbWVuc2lvblJlZHVjZXJGdW5jdGlvblwiLFxuICBcIkRpbWVuc2lvblJlZHVjdGlvblwiLFxuICBcIkRpbWVuc2lvbnNcIixcbiAgXCJEaXJhY0NvbWJcIixcbiAgXCJEaXJhY0RlbHRhXCIsXG4gIFwiRGlyZWN0ZWRFZGdlXCIsXG4gIFwiRGlyZWN0ZWRFZGdlc1wiLFxuICBcIkRpcmVjdGVkR3JhcGhcIixcbiAgXCJEaXJlY3RlZEdyYXBoUVwiLFxuICBcIkRpcmVjdGVkSW5maW5pdHlcIixcbiAgXCJEaXJlY3Rpb25cIixcbiAgXCJEaXJlY3Rpb25hbExpZ2h0XCIsXG4gIFwiRGlyZWN0aXZlXCIsXG4gIFwiRGlyZWN0b3J5XCIsXG4gIFwiRGlyZWN0b3J5TmFtZVwiLFxuICBcIkRpcmVjdG9yeVFcIixcbiAgXCJEaXJlY3RvcnlTdGFja1wiLFxuICBcIkRpcmljaGxldEJldGFcIixcbiAgXCJEaXJpY2hsZXRDaGFyYWN0ZXJcIixcbiAgXCJEaXJpY2hsZXRDb25kaXRpb25cIixcbiAgXCJEaXJpY2hsZXRDb252b2x2ZVwiLFxuICBcIkRpcmljaGxldERpc3RyaWJ1dGlvblwiLFxuICBcIkRpcmljaGxldEV0YVwiLFxuICBcIkRpcmljaGxldExcIixcbiAgXCJEaXJpY2hsZXRMYW1iZGFcIixcbiAgXCJEaXJpY2hsZXRUcmFuc2Zvcm1cIixcbiAgXCJEaXJpY2hsZXRXaW5kb3dcIixcbiAgXCJEaXNhYmxlQ29uc29sZVByaW50UGFja2V0XCIsXG4gIFwiRGlzYWJsZUZvcm1hdHRpbmdcIixcbiAgXCJEaXNjcmV0ZUFzeW1wdG90aWNcIixcbiAgXCJEaXNjcmV0ZUNoaXJwWlRyYW5zZm9ybVwiLFxuICBcIkRpc2NyZXRlQ29udm9sdmVcIixcbiAgXCJEaXNjcmV0ZURlbHRhXCIsXG4gIFwiRGlzY3JldGVIYWRhbWFyZFRyYW5zZm9ybVwiLFxuICBcIkRpc2NyZXRlSW5kaWNhdG9yXCIsXG4gIFwiRGlzY3JldGVJbnB1dE91dHB1dE1vZGVsXCIsXG4gIFwiRGlzY3JldGVMaW1pdFwiLFxuICBcIkRpc2NyZXRlTFFFc3RpbWF0b3JHYWluc1wiLFxuICBcIkRpc2NyZXRlTFFSZWd1bGF0b3JHYWluc1wiLFxuICBcIkRpc2NyZXRlTHlhcHVub3ZTb2x2ZVwiLFxuICBcIkRpc2NyZXRlTWFya292UHJvY2Vzc1wiLFxuICBcIkRpc2NyZXRlTWF4TGltaXRcIixcbiAgXCJEaXNjcmV0ZU1pbkxpbWl0XCIsXG4gIFwiRGlzY3JldGVQbG90XCIsXG4gIFwiRGlzY3JldGVQbG90M0RcIixcbiAgXCJEaXNjcmV0ZVJhdGlvXCIsXG4gIFwiRGlzY3JldGVSaWNjYXRpU29sdmVcIixcbiAgXCJEaXNjcmV0ZVNoaWZ0XCIsXG4gIFwiRGlzY3JldGVUaW1lTW9kZWxRXCIsXG4gIFwiRGlzY3JldGVVbmlmb3JtRGlzdHJpYnV0aW9uXCIsXG4gIFwiRGlzY3JldGVWYXJpYWJsZXNcIixcbiAgXCJEaXNjcmV0ZVdhdmVsZXREYXRhXCIsXG4gIFwiRGlzY3JldGVXYXZlbGV0UGFja2V0VHJhbnNmb3JtXCIsXG4gIFwiRGlzY3JldGVXYXZlbGV0VHJhbnNmb3JtXCIsXG4gIFwiRGlzY3JldGl6ZUdyYXBoaWNzXCIsXG4gIFwiRGlzY3JldGl6ZVJlZ2lvblwiLFxuICBcIkRpc2NyaW1pbmFudFwiLFxuICBcIkRpc2pvaW50UVwiLFxuICBcIkRpc2p1bmN0aW9uXCIsXG4gIFwiRGlza1wiLFxuICBcIkRpc2tCb3hcIixcbiAgXCJEaXNrQm94T3B0aW9uc1wiLFxuICBcIkRpc2tNYXRyaXhcIixcbiAgXCJEaXNrU2VnbWVudFwiLFxuICBcIkRpc3BhdGNoXCIsXG4gIFwiRGlzcGF0Y2hRXCIsXG4gIFwiRGlzcGVyc2lvbkVzdGltYXRvckZ1bmN0aW9uXCIsXG4gIFwiRGlzcGxheVwiLFxuICBcIkRpc3BsYXlBbGxTdGVwc1wiLFxuICBcIkRpc3BsYXlFbmRQYWNrZXRcIixcbiAgXCJEaXNwbGF5Rm9ybVwiLFxuICBcIkRpc3BsYXlGdW5jdGlvblwiLFxuICBcIkRpc3BsYXlQYWNrZXRcIixcbiAgXCJEaXNwbGF5UnVsZXNcIixcbiAgXCJEaXNwbGF5U3RyaW5nXCIsXG4gIFwiRGlzcGxheVRlbXBvcmFyeVwiLFxuICBcIkRpc3BsYXlXaXRoXCIsXG4gIFwiRGlzcGxheVdpdGhSZWZcIixcbiAgXCJEaXNwbGF5V2l0aFZhcmlhYmxlXCIsXG4gIFwiRGlzdGFuY2VGdW5jdGlvblwiLFxuICBcIkRpc3RhbmNlTWF0cml4XCIsXG4gIFwiRGlzdGFuY2VUcmFuc2Zvcm1cIixcbiAgXCJEaXN0cmlidXRlXCIsXG4gIFwiRGlzdHJpYnV0ZWRcIixcbiAgXCJEaXN0cmlidXRlZENvbnRleHRzXCIsXG4gIFwiRGlzdHJpYnV0ZURlZmluaXRpb25zXCIsXG4gIFwiRGlzdHJpYnV0aW9uQ2hhcnRcIixcbiAgXCJEaXN0cmlidXRpb25Eb21haW5cIixcbiAgXCJEaXN0cmlidXRpb25GaXRUZXN0XCIsXG4gIFwiRGlzdHJpYnV0aW9uUGFyYW1ldGVyQXNzdW1wdGlvbnNcIixcbiAgXCJEaXN0cmlidXRpb25QYXJhbWV0ZXJRXCIsXG4gIFwiRGl0aGVyaW5nXCIsXG4gIFwiRGl2XCIsXG4gIFwiRGl2ZXJnZW5jZVwiLFxuICBcIkRpdmlkZVwiLFxuICBcIkRpdmlkZUJ5XCIsXG4gIFwiRGl2aWRlcnNcIixcbiAgXCJEaXZpZGVTaWRlc1wiLFxuICBcIkRpdmlzaWJsZVwiLFxuICBcIkRpdmlzb3JzXCIsXG4gIFwiRGl2aXNvclNpZ21hXCIsXG4gIFwiRGl2aXNvclN1bVwiLFxuICBcIkRNU0xpc3RcIixcbiAgXCJETVNTdHJpbmdcIixcbiAgXCJEb1wiLFxuICBcIkRvY2tlZENlbGxcIixcbiAgXCJEb2NrZWRDZWxsc1wiLFxuICBcIkRvY3VtZW50R2VuZXJhdG9yXCIsXG4gIFwiRG9jdW1lbnRHZW5lcmF0b3JJbmZvcm1hdGlvblwiLFxuICBcIkRvY3VtZW50R2VuZXJhdG9ySW5mb3JtYXRpb25EYXRhXCIsXG4gIFwiRG9jdW1lbnRHZW5lcmF0b3JzXCIsXG4gIFwiRG9jdW1lbnROb3RlYm9va1wiLFxuICBcIkRvY3VtZW50V2VpZ2h0aW5nUnVsZXNcIixcbiAgXCJEb2RlY2FoZWRyb25cIixcbiAgXCJEb21haW5SZWdpc3RyYXRpb25JbmZvcm1hdGlvblwiLFxuICBcIkRvbWluYW50Q29sb3JzXCIsXG4gIFwiRG9taW5hdG9yVHJlZUdyYXBoXCIsXG4gIFwiRG9taW5hdG9yVmVydGV4TGlzdFwiLFxuICBcIkRPU1RleHRGb3JtYXRcIixcbiAgXCJEb3RcIixcbiAgXCJEb3REYXNoZWRcIixcbiAgXCJEb3RFcXVhbFwiLFxuICBcIkRvdExheWVyXCIsXG4gIFwiRG90UGx1c0xheWVyXCIsXG4gIFwiRG90dGVkXCIsXG4gIFwiRG91YmxlQnJhY2tldGluZ0JhclwiLFxuICBcIkRvdWJsZUNvbnRvdXJJbnRlZ3JhbFwiLFxuICBcIkRvdWJsZURvd25BcnJvd1wiLFxuICBcIkRvdWJsZUxlZnRBcnJvd1wiLFxuICBcIkRvdWJsZUxlZnRSaWdodEFycm93XCIsXG4gIFwiRG91YmxlTGVmdFRlZVwiLFxuICBcIkRvdWJsZUxvbmdMZWZ0QXJyb3dcIixcbiAgXCJEb3VibGVMb25nTGVmdFJpZ2h0QXJyb3dcIixcbiAgXCJEb3VibGVMb25nUmlnaHRBcnJvd1wiLFxuICBcIkRvdWJsZVJpZ2h0QXJyb3dcIixcbiAgXCJEb3VibGVSaWdodFRlZVwiLFxuICBcIkRvdWJsZVVwQXJyb3dcIixcbiAgXCJEb3VibGVVcERvd25BcnJvd1wiLFxuICBcIkRvdWJsZVZlcnRpY2FsQmFyXCIsXG4gIFwiRG91Ymx5SW5maW5pdGVcIixcbiAgXCJEb3duXCIsXG4gIFwiRG93bkFycm93XCIsXG4gIFwiRG93bkFycm93QmFyXCIsXG4gIFwiRG93bkFycm93VXBBcnJvd1wiLFxuICBcIkRvd25MZWZ0UmlnaHRWZWN0b3JcIixcbiAgXCJEb3duTGVmdFRlZVZlY3RvclwiLFxuICBcIkRvd25MZWZ0VmVjdG9yXCIsXG4gIFwiRG93bkxlZnRWZWN0b3JCYXJcIixcbiAgXCJEb3duUmlnaHRUZWVWZWN0b3JcIixcbiAgXCJEb3duUmlnaHRWZWN0b3JcIixcbiAgXCJEb3duUmlnaHRWZWN0b3JCYXJcIixcbiAgXCJEb3duc2FtcGxlXCIsXG4gIFwiRG93blRlZVwiLFxuICBcIkRvd25UZWVBcnJvd1wiLFxuICBcIkRvd25WYWx1ZXNcIixcbiAgXCJEb3duVmFsdWVzRnVuY3Rpb25cIixcbiAgXCJEcmFnQW5kRHJvcFwiLFxuICBcIkRyYXdCYWNrRmFjZXNcIixcbiAgXCJEcmF3RWRnZXNcIixcbiAgXCJEcmF3RnJvbnRGYWNlc1wiLFxuICBcIkRyYXdIaWdobGlnaHRlZFwiLFxuICBcIkRyYXppbkludmVyc2VcIixcbiAgXCJEcm9wXCIsXG4gIFwiRHJvcG91dExheWVyXCIsXG4gIFwiRHJvcFNoYWRvd2luZ1wiLFxuICBcIkRTb2x2ZVwiLFxuICBcIkRTb2x2ZUNoYW5nZVZhcmlhYmxlc1wiLFxuICBcIkRTb2x2ZVZhbHVlXCIsXG4gIFwiRHRcIixcbiAgXCJEdWFsTGluZWFyUHJvZ3JhbW1pbmdcIixcbiAgXCJEdWFsUGxhbmFyR3JhcGhcIixcbiAgXCJEdWFsUG9seWhlZHJvblwiLFxuICBcIkR1YWxTeXN0ZW1zTW9kZWxcIixcbiAgXCJEdW1wR2V0XCIsXG4gIFwiRHVtcFNhdmVcIixcbiAgXCJEdXBsaWNhdGVGcmVlUVwiLFxuICBcIkR1cmF0aW9uXCIsXG4gIFwiRHluYW1pY1wiLFxuICBcIkR5bmFtaWNCb3hcIixcbiAgXCJEeW5hbWljQm94T3B0aW9uc1wiLFxuICBcIkR5bmFtaWNFdmFsdWF0aW9uVGltZW91dFwiLFxuICBcIkR5bmFtaWNHZW9HcmFwaGljc1wiLFxuICBcIkR5bmFtaWNJbWFnZVwiLFxuICBcIkR5bmFtaWNMb2NhdGlvblwiLFxuICBcIkR5bmFtaWNNb2R1bGVcIixcbiAgXCJEeW5hbWljTW9kdWxlQm94XCIsXG4gIFwiRHluYW1pY01vZHVsZUJveE9wdGlvbnNcIixcbiAgXCJEeW5hbWljTW9kdWxlUGFyZW50XCIsXG4gIFwiRHluYW1pY01vZHVsZVZhbHVlc1wiLFxuICBcIkR5bmFtaWNOYW1lXCIsXG4gIFwiRHluYW1pY05hbWVzcGFjZVwiLFxuICBcIkR5bmFtaWNSZWZlcmVuY2VcIixcbiAgXCJEeW5hbWljU2V0dGluZ1wiLFxuICBcIkR5bmFtaWNVcGRhdGluZ1wiLFxuICBcIkR5bmFtaWNXcmFwcGVyXCIsXG4gIFwiRHluYW1pY1dyYXBwZXJCb3hcIixcbiAgXCJEeW5hbWljV3JhcHBlckJveE9wdGlvbnNcIixcbiAgXCJFXCIsXG4gIFwiRWFydGhJbXBhY3REYXRhXCIsXG4gIFwiRWFydGhxdWFrZURhdGFcIixcbiAgXCJFY2NlbnRyaWNpdHlDZW50cmFsaXR5XCIsXG4gIFwiRWNob1wiLFxuICBcIkVjaG9FdmFsdWF0aW9uXCIsXG4gIFwiRWNob0Z1bmN0aW9uXCIsXG4gIFwiRWNob0xhYmVsXCIsXG4gIFwiRWNob1RpbWluZ1wiLFxuICBcIkVjbGlwc2VUeXBlXCIsXG4gIFwiRWRnZUFkZFwiLFxuICBcIkVkZ2VCZXR3ZWVubmVzc0NlbnRyYWxpdHlcIixcbiAgXCJFZGdlQ2FwYWNpdHlcIixcbiAgXCJFZGdlQ2FwRm9ybVwiLFxuICBcIkVkZ2VDaHJvbWF0aWNOdW1iZXJcIixcbiAgXCJFZGdlQ29sb3JcIixcbiAgXCJFZGdlQ29ubmVjdGl2aXR5XCIsXG4gIFwiRWRnZUNvbnRyYWN0XCIsXG4gIFwiRWRnZUNvc3RcIixcbiAgXCJFZGdlQ291bnRcIixcbiAgXCJFZGdlQ292ZXJRXCIsXG4gIFwiRWRnZUN5Y2xlTWF0cml4XCIsXG4gIFwiRWRnZURhc2hpbmdcIixcbiAgXCJFZGdlRGVsZXRlXCIsXG4gIFwiRWRnZURldGVjdFwiLFxuICBcIkVkZ2VGb3JtXCIsXG4gIFwiRWRnZUluZGV4XCIsXG4gIFwiRWRnZUpvaW5Gb3JtXCIsXG4gIFwiRWRnZUxhYmVsaW5nXCIsXG4gIFwiRWRnZUxhYmVsc1wiLFxuICBcIkVkZ2VMYWJlbFN0eWxlXCIsXG4gIFwiRWRnZUxpc3RcIixcbiAgXCJFZGdlT3BhY2l0eVwiLFxuICBcIkVkZ2VRXCIsXG4gIFwiRWRnZVJlbmRlcmluZ0Z1bmN0aW9uXCIsXG4gIFwiRWRnZVJ1bGVzXCIsXG4gIFwiRWRnZVNoYXBlRnVuY3Rpb25cIixcbiAgXCJFZGdlU3R5bGVcIixcbiAgXCJFZGdlVGFnZ2VkR3JhcGhcIixcbiAgXCJFZGdlVGFnZ2VkR3JhcGhRXCIsXG4gIFwiRWRnZVRhZ3NcIixcbiAgXCJFZGdlVGhpY2tuZXNzXCIsXG4gIFwiRWRnZVRyYW5zaXRpdmVHcmFwaFFcIixcbiAgXCJFZGdlVmFsdWVSYW5nZVwiLFxuICBcIkVkZ2VWYWx1ZVNpemVzXCIsXG4gIFwiRWRnZVdlaWdodFwiLFxuICBcIkVkZ2VXZWlnaHRlZEdyYXBoUVwiLFxuICBcIkVkaXRhYmxlXCIsXG4gIFwiRWRpdEJ1dHRvblNldHRpbmdzXCIsXG4gIFwiRWRpdENlbGxUYWdzU2V0dGluZ3NcIixcbiAgXCJFZGl0RGlzdGFuY2VcIixcbiAgXCJFZmZlY3RpdmVJbnRlcmVzdFwiLFxuICBcIkVpZ2Vuc3lzdGVtXCIsXG4gIFwiRWlnZW52YWx1ZXNcIixcbiAgXCJFaWdlbnZlY3RvckNlbnRyYWxpdHlcIixcbiAgXCJFaWdlbnZlY3RvcnNcIixcbiAgXCJFbGVtZW50XCIsXG4gIFwiRWxlbWVudERhdGFcIixcbiAgXCJFbGVtZW50d2lzZUxheWVyXCIsXG4gIFwiRWxpZGVkRm9ybXNcIixcbiAgXCJFbGltaW5hdGVcIixcbiAgXCJFbGltaW5hdGlvbk9yZGVyXCIsXG4gIFwiRWxsaXBzb2lkXCIsXG4gIFwiRWxsaXB0aWNFXCIsXG4gIFwiRWxsaXB0aWNFeHBcIixcbiAgXCJFbGxpcHRpY0V4cFByaW1lXCIsXG4gIFwiRWxsaXB0aWNGXCIsXG4gIFwiRWxsaXB0aWNGaWx0ZXJNb2RlbFwiLFxuICBcIkVsbGlwdGljS1wiLFxuICBcIkVsbGlwdGljTG9nXCIsXG4gIFwiRWxsaXB0aWNOb21lUVwiLFxuICBcIkVsbGlwdGljUGlcIixcbiAgXCJFbGxpcHRpY1JlZHVjZWRIYWxmUGVyaW9kc1wiLFxuICBcIkVsbGlwdGljVGhldGFcIixcbiAgXCJFbGxpcHRpY1RoZXRhUHJpbWVcIixcbiAgXCJFbWJlZENvZGVcIixcbiAgXCJFbWJlZGRlZEhUTUxcIixcbiAgXCJFbWJlZGRlZFNlcnZpY2VcIixcbiAgXCJFbWJlZGRlZFNRTEVudGl0eUNsYXNzXCIsXG4gIFwiRW1iZWRkZWRTUUxFeHByZXNzaW9uXCIsXG4gIFwiRW1iZWRkaW5nTGF5ZXJcIixcbiAgXCJFbWJlZGRpbmdPYmplY3RcIixcbiAgXCJFbWl0U291bmRcIixcbiAgXCJFbXBoYXNpemVTeW50YXhFcnJvcnNcIixcbiAgXCJFbXBpcmljYWxEaXN0cmlidXRpb25cIixcbiAgXCJFbXB0eVwiLFxuICBcIkVtcHR5R3JhcGhRXCIsXG4gIFwiRW1wdHlSZWdpb25cIixcbiAgXCJFbXB0eVNwYWNlRlwiLFxuICBcIkVuYWJsZUNvbnNvbGVQcmludFBhY2tldFwiLFxuICBcIkVuYWJsZWRcIixcbiAgXCJFbmNsb3NlXCIsXG4gIFwiRW5jb2RlXCIsXG4gIFwiRW5jcnlwdFwiLFxuICBcIkVuY3J5cHRlZE9iamVjdFwiLFxuICBcIkVuY3J5cHRGaWxlXCIsXG4gIFwiRW5kXCIsXG4gIFwiRW5kQWRkXCIsXG4gIFwiRW5kRGlhbG9nUGFja2V0XCIsXG4gIFwiRW5kT2ZCdWZmZXJcIixcbiAgXCJFbmRPZkZpbGVcIixcbiAgXCJFbmRPZkxpbmVcIixcbiAgXCJFbmRPZlN0cmluZ1wiLFxuICBcIkVuZFBhY2thZ2VcIixcbiAgXCJFbmdpbmVFbnZpcm9ubWVudFwiLFxuICBcIkVuZ2luZWVyaW5nRm9ybVwiLFxuICBcIkVudGVyXCIsXG4gIFwiRW50ZXJFeHByZXNzaW9uUGFja2V0XCIsXG4gIFwiRW50ZXJUZXh0UGFja2V0XCIsXG4gIFwiRW50aXR5XCIsXG4gIFwiRW50aXR5Q2xhc3NcIixcbiAgXCJFbnRpdHlDbGFzc0xpc3RcIixcbiAgXCJFbnRpdHlDb3BpZXNcIixcbiAgXCJFbnRpdHlGdW5jdGlvblwiLFxuICBcIkVudGl0eUdyb3VwXCIsXG4gIFwiRW50aXR5SW5zdGFuY2VcIixcbiAgXCJFbnRpdHlMaXN0XCIsXG4gIFwiRW50aXR5UHJlZmV0Y2hcIixcbiAgXCJFbnRpdHlQcm9wZXJ0aWVzXCIsXG4gIFwiRW50aXR5UHJvcGVydHlcIixcbiAgXCJFbnRpdHlQcm9wZXJ0eUNsYXNzXCIsXG4gIFwiRW50aXR5UmVnaXN0ZXJcIixcbiAgXCJFbnRpdHlTdG9yZVwiLFxuICBcIkVudGl0eVN0b3Jlc1wiLFxuICBcIkVudGl0eVR5cGVOYW1lXCIsXG4gIFwiRW50aXR5VW5yZWdpc3RlclwiLFxuICBcIkVudGl0eVZhbHVlXCIsXG4gIFwiRW50cm9weVwiLFxuICBcIkVudHJvcHlGaWx0ZXJcIixcbiAgXCJFbnZpcm9ubWVudFwiLFxuICBcIkVwaWxvZ1wiLFxuICBcIkVwaWxvZ0Z1bmN0aW9uXCIsXG4gIFwiRXF1YWxcIixcbiAgXCJFcXVhbENvbHVtbnNcIixcbiAgXCJFcXVhbFJvd3NcIixcbiAgXCJFcXVhbFRpbGRlXCIsXG4gIFwiRXF1YWxUb1wiLFxuICBcIkVxdWF0ZWRUb1wiLFxuICBcIkVxdWlsaWJyaXVtXCIsXG4gIFwiRXF1aXJpcHBsZUZpbHRlcktlcm5lbFwiLFxuICBcIkVxdWl2YWxlbnRcIixcbiAgXCJFcmZcIixcbiAgXCJFcmZjXCIsXG4gIFwiRXJmaVwiLFxuICBcIkVybGFuZ0JcIixcbiAgXCJFcmxhbmdDXCIsXG4gIFwiRXJsYW5nRGlzdHJpYnV0aW9uXCIsXG4gIFwiRXJvc2lvblwiLFxuICBcIkVycm9yQm94XCIsXG4gIFwiRXJyb3JCb3hPcHRpb25zXCIsXG4gIFwiRXJyb3JOb3JtXCIsXG4gIFwiRXJyb3JQYWNrZXRcIixcbiAgXCJFcnJvcnNEaWFsb2dTZXR0aW5nc1wiLFxuICBcIkVzY2FwZVJhZGl1c1wiLFxuICBcIkVzdGltYXRlZEJhY2tncm91bmRcIixcbiAgXCJFc3RpbWF0ZWREaXN0cmlidXRpb25cIixcbiAgXCJFc3RpbWF0ZWRQb2ludE5vcm1hbHNcIixcbiAgXCJFc3RpbWF0ZWRQb2ludFByb2Nlc3NcIixcbiAgXCJFc3RpbWF0ZWRQcm9jZXNzXCIsXG4gIFwiRXN0aW1hdGVkVmFyaW9ncmFtTW9kZWxcIixcbiAgXCJFc3RpbWF0b3JHYWluc1wiLFxuICBcIkVzdGltYXRvclJlZ3VsYXRvclwiLFxuICBcIkV1Y2xpZGVhbkRpc3RhbmNlXCIsXG4gIFwiRXVsZXJBbmdsZXNcIixcbiAgXCJFdWxlckNoYXJhY3RlcmlzdGljXCIsXG4gIFwiRXVsZXJFXCIsXG4gIFwiRXVsZXJHYW1tYVwiLFxuICBcIkV1bGVyaWFuR3JhcGhRXCIsXG4gIFwiRXVsZXJNYXRyaXhcIixcbiAgXCJFdWxlclBoaVwiLFxuICBcIkV2YWx1YXRhYmxlXCIsXG4gIFwiRXZhbHVhdGVcIixcbiAgXCJFdmFsdWF0ZWRcIixcbiAgXCJFdmFsdWF0ZVBhY2tldFwiLFxuICBcIkV2YWx1YXRlU2NoZWR1bGVkVGFza1wiLFxuICBcIkV2YWx1YXRpb25Cb3hcIixcbiAgXCJFdmFsdWF0aW9uQ2VsbFwiLFxuICBcIkV2YWx1YXRpb25Db21wbGV0aW9uQWN0aW9uXCIsXG4gIFwiRXZhbHVhdGlvbkRhdGFcIixcbiAgXCJFdmFsdWF0aW9uRWxlbWVudHNcIixcbiAgXCJFdmFsdWF0aW9uRW52aXJvbm1lbnRcIixcbiAgXCJFdmFsdWF0aW9uTW9kZVwiLFxuICBcIkV2YWx1YXRpb25Nb25pdG9yXCIsXG4gIFwiRXZhbHVhdGlvbk5vdGVib29rXCIsXG4gIFwiRXZhbHVhdGlvbk9iamVjdFwiLFxuICBcIkV2YWx1YXRpb25PcmRlclwiLFxuICBcIkV2YWx1YXRpb25Qcml2aWxlZ2VzXCIsXG4gIFwiRXZhbHVhdGlvblJhdGVMaW1pdFwiLFxuICBcIkV2YWx1YXRvclwiLFxuICBcIkV2YWx1YXRvck5hbWVzXCIsXG4gIFwiRXZlblFcIixcbiAgXCJFdmVudERhdGFcIixcbiAgXCJFdmVudEV2YWx1YXRvclwiLFxuICBcIkV2ZW50SGFuZGxlclwiLFxuICBcIkV2ZW50SGFuZGxlclRhZ1wiLFxuICBcIkV2ZW50TGFiZWxzXCIsXG4gIFwiRXZlbnRTZXJpZXNcIixcbiAgXCJFeGFjdEJsYWNrbWFuV2luZG93XCIsXG4gIFwiRXhhY3ROdW1iZXJRXCIsXG4gIFwiRXhhY3RSb290SXNvbGF0aW9uXCIsXG4gIFwiRXhhbXBsZURhdGFcIixcbiAgXCJFeGNlcHRcIixcbiAgXCJFeGNsdWRlZENvbnRleHRzXCIsXG4gIFwiRXhjbHVkZWRGb3Jtc1wiLFxuICBcIkV4Y2x1ZGVkTGluZXNcIixcbiAgXCJFeGNsdWRlZFBoeXNpY2FsUXVhbnRpdGllc1wiLFxuICBcIkV4Y2x1ZGVQb2RzXCIsXG4gIFwiRXhjbHVzaW9uc1wiLFxuICBcIkV4Y2x1c2lvbnNTdHlsZVwiLFxuICBcIkV4aXN0c1wiLFxuICBcIkV4aXRcIixcbiAgXCJFeGl0RGlhbG9nXCIsXG4gIFwiRXhvcGxhbmV0RGF0YVwiLFxuICBcIkV4cFwiLFxuICBcIkV4cGFuZFwiLFxuICBcIkV4cGFuZEFsbFwiLFxuICBcIkV4cGFuZERlbm9taW5hdG9yXCIsXG4gIFwiRXhwYW5kRmlsZU5hbWVcIixcbiAgXCJFeHBhbmROdW1lcmF0b3JcIixcbiAgXCJFeHBlY3RhdGlvblwiLFxuICBcIkV4cGVjdGF0aW9uRVwiLFxuICBcIkV4cGVjdGVkVmFsdWVcIixcbiAgXCJFeHBHYW1tYURpc3RyaWJ1dGlvblwiLFxuICBcIkV4cEludGVncmFsRVwiLFxuICBcIkV4cEludGVncmFsRWlcIixcbiAgXCJFeHBpcmF0aW9uRGF0ZVwiLFxuICBcIkV4cG9uZW50XCIsXG4gIFwiRXhwb25lbnRGdW5jdGlvblwiLFxuICBcIkV4cG9uZW50aWFsRGlzdHJpYnV0aW9uXCIsXG4gIFwiRXhwb25lbnRpYWxGYW1pbHlcIixcbiAgXCJFeHBvbmVudGlhbEdlbmVyYXRpbmdGdW5jdGlvblwiLFxuICBcIkV4cG9uZW50aWFsTW92aW5nQXZlcmFnZVwiLFxuICBcIkV4cG9uZW50aWFsUG93ZXJEaXN0cmlidXRpb25cIixcbiAgXCJFeHBvbmVudFBvc2l0aW9uXCIsXG4gIFwiRXhwb25lbnRTdGVwXCIsXG4gIFwiRXhwb3J0XCIsXG4gIFwiRXhwb3J0QXV0b1JlcGxhY2VtZW50c1wiLFxuICBcIkV4cG9ydEJ5dGVBcnJheVwiLFxuICBcIkV4cG9ydEZvcm1cIixcbiAgXCJFeHBvcnRQYWNrZXRcIixcbiAgXCJFeHBvcnRTdHJpbmdcIixcbiAgXCJFeHByZXNzaW9uXCIsXG4gIFwiRXhwcmVzc2lvbkNlbGxcIixcbiAgXCJFeHByZXNzaW9uR3JhcGhcIixcbiAgXCJFeHByZXNzaW9uUGFja2V0XCIsXG4gIFwiRXhwcmVzc2lvblRyZWVcIixcbiAgXCJFeHByZXNzaW9uVVVJRFwiLFxuICBcIkV4cFRvVHJpZ1wiLFxuICBcIkV4dGVuZGVkRW50aXR5Q2xhc3NcIixcbiAgXCJFeHRlbmRlZEdDRFwiLFxuICBcIkV4dGVuc2lvblwiLFxuICBcIkV4dGVudEVsZW1lbnRGdW5jdGlvblwiLFxuICBcIkV4dGVudE1hcmtlcnNcIixcbiAgXCJFeHRlbnRTaXplXCIsXG4gIFwiRXh0ZXJuYWxCdW5kbGVcIixcbiAgXCJFeHRlcm5hbENhbGxcIixcbiAgXCJFeHRlcm5hbERhdGFDaGFyYWN0ZXJFbmNvZGluZ1wiLFxuICBcIkV4dGVybmFsRXZhbHVhdGVcIixcbiAgXCJFeHRlcm5hbEZ1bmN0aW9uXCIsXG4gIFwiRXh0ZXJuYWxGdW5jdGlvbk5hbWVcIixcbiAgXCJFeHRlcm5hbElkZW50aWZpZXJcIixcbiAgXCJFeHRlcm5hbE9iamVjdFwiLFxuICBcIkV4dGVybmFsT3B0aW9uc1wiLFxuICBcIkV4dGVybmFsU2Vzc2lvbk9iamVjdFwiLFxuICBcIkV4dGVybmFsU2Vzc2lvbnNcIixcbiAgXCJFeHRlcm5hbFN0b3JhZ2VCYXNlXCIsXG4gIFwiRXh0ZXJuYWxTdG9yYWdlRG93bmxvYWRcIixcbiAgXCJFeHRlcm5hbFN0b3JhZ2VHZXRcIixcbiAgXCJFeHRlcm5hbFN0b3JhZ2VPYmplY3RcIixcbiAgXCJFeHRlcm5hbFN0b3JhZ2VQdXRcIixcbiAgXCJFeHRlcm5hbFN0b3JhZ2VVcGxvYWRcIixcbiAgXCJFeHRlcm5hbFR5cGVTaWduYXR1cmVcIixcbiAgXCJFeHRlcm5hbFZhbHVlXCIsXG4gIFwiRXh0cmFjdFwiLFxuICBcIkV4dHJhY3RBcmNoaXZlXCIsXG4gIFwiRXh0cmFjdExheWVyXCIsXG4gIFwiRXh0cmFjdFBhY2xldEFyY2hpdmVcIixcbiAgXCJFeHRyZW1lVmFsdWVEaXN0cmlidXRpb25cIixcbiAgXCJGYWNlQWxpZ25cIixcbiAgXCJGYWNlRm9ybVwiLFxuICBcIkZhY2VHcmlkc1wiLFxuICBcIkZhY2VHcmlkc1N0eWxlXCIsXG4gIFwiRmFjZVJlY29nbml6ZVwiLFxuICBcIkZhY2lhbEZlYXR1cmVzXCIsXG4gIFwiRmFjdG9yXCIsXG4gIFwiRmFjdG9yQ29tcGxldGVcIixcbiAgXCJGYWN0b3JpYWxcIixcbiAgXCJGYWN0b3JpYWwyXCIsXG4gIFwiRmFjdG9yaWFsTW9tZW50XCIsXG4gIFwiRmFjdG9yaWFsTW9tZW50R2VuZXJhdGluZ0Z1bmN0aW9uXCIsXG4gIFwiRmFjdG9yaWFsUG93ZXJcIixcbiAgXCJGYWN0b3JJbnRlZ2VyXCIsXG4gIFwiRmFjdG9yTGlzdFwiLFxuICBcIkZhY3RvclNxdWFyZUZyZWVcIixcbiAgXCJGYWN0b3JTcXVhcmVGcmVlTGlzdFwiLFxuICBcIkZhY3RvclRlcm1zXCIsXG4gIFwiRmFjdG9yVGVybXNMaXN0XCIsXG4gIFwiRmFpbFwiLFxuICBcIkZhaWx1cmVcIixcbiAgXCJGYWlsdXJlQWN0aW9uXCIsXG4gIFwiRmFpbHVyZURpc3RyaWJ1dGlvblwiLFxuICBcIkZhaWx1cmVRXCIsXG4gIFwiRmFsc2VcIixcbiAgXCJGYXJleVNlcXVlbmNlXCIsXG4gIFwiRkFSSU1BUHJvY2Vzc1wiLFxuICBcIkZlYXR1cmVEaXN0YW5jZVwiLFxuICBcIkZlYXR1cmVFeHRyYWN0XCIsXG4gIFwiRmVhdHVyZUV4dHJhY3Rpb25cIixcbiAgXCJGZWF0dXJlRXh0cmFjdG9yXCIsXG4gIFwiRmVhdHVyZUV4dHJhY3RvckZ1bmN0aW9uXCIsXG4gIFwiRmVhdHVyZUltcGFjdFBsb3RcIixcbiAgXCJGZWF0dXJlTmFtZXNcIixcbiAgXCJGZWF0dXJlTmVhcmVzdFwiLFxuICBcIkZlYXR1cmVTcGFjZVBsb3RcIixcbiAgXCJGZWF0dXJlU3BhY2VQbG90M0RcIixcbiAgXCJGZWF0dXJlVHlwZXNcIixcbiAgXCJGZWF0dXJlVmFsdWVEZXBlbmRlbmN5UGxvdFwiLFxuICBcIkZlYXR1cmVWYWx1ZUltcGFjdFBsb3RcIixcbiAgXCJGRURpc2FibGVDb25zb2xlUHJpbnRQYWNrZXRcIixcbiAgXCJGZWVkYmFja0xpbmVhcml6ZVwiLFxuICBcIkZlZWRiYWNrU2VjdG9yXCIsXG4gIFwiRmVlZGJhY2tTZWN0b3JTdHlsZVwiLFxuICBcIkZlZWRiYWNrVHlwZVwiLFxuICBcIkZFRW5hYmxlQ29uc29sZVByaW50UGFja2V0XCIsXG4gIFwiRmV0YWxHcm93dGhEYXRhXCIsXG4gIFwiRmlib25hY2NpXCIsXG4gIFwiRmlib25vcmlhbFwiLFxuICBcIkZpZWxkQ29tcGxldGlvbkZ1bmN0aW9uXCIsXG4gIFwiRmllbGRIaW50XCIsXG4gIFwiRmllbGRIaW50U3R5bGVcIixcbiAgXCJGaWVsZE1hc2tlZFwiLFxuICBcIkZpZWxkU2l6ZVwiLFxuICBcIkZpbGVcIixcbiAgXCJGaWxlQmFzZU5hbWVcIixcbiAgXCJGaWxlQnl0ZUNvdW50XCIsXG4gIFwiRmlsZUNvbnZlcnRcIixcbiAgXCJGaWxlRGF0ZVwiLFxuICBcIkZpbGVFeGlzdHNRXCIsXG4gIFwiRmlsZUV4dGVuc2lvblwiLFxuICBcIkZpbGVGb3JtYXRcIixcbiAgXCJGaWxlRm9ybWF0UHJvcGVydGllc1wiLFxuICBcIkZpbGVGb3JtYXRRXCIsXG4gIFwiRmlsZUhhbmRsZXJcIixcbiAgXCJGaWxlSGFzaFwiLFxuICBcIkZpbGVJbmZvcm1hdGlvblwiLFxuICBcIkZpbGVOYW1lXCIsXG4gIFwiRmlsZU5hbWVEZXB0aFwiLFxuICBcIkZpbGVOYW1lRGlhbG9nU2V0dGluZ3NcIixcbiAgXCJGaWxlTmFtZURyb3BcIixcbiAgXCJGaWxlTmFtZUZvcm1zXCIsXG4gIFwiRmlsZU5hbWVKb2luXCIsXG4gIFwiRmlsZU5hbWVzXCIsXG4gIFwiRmlsZU5hbWVTZXR0ZXJcIixcbiAgXCJGaWxlTmFtZVNwbGl0XCIsXG4gIFwiRmlsZU5hbWVUYWtlXCIsXG4gIFwiRmlsZU5hbWVUb0Zvcm1hdExpc3RcIixcbiAgXCJGaWxlUHJpbnRcIixcbiAgXCJGaWxlU2l6ZVwiLFxuICBcIkZpbGVTeXN0ZW1NYXBcIixcbiAgXCJGaWxlU3lzdGVtU2NhblwiLFxuICBcIkZpbGVTeXN0ZW1UcmVlXCIsXG4gIFwiRmlsZVRlbXBsYXRlXCIsXG4gIFwiRmlsZVRlbXBsYXRlQXBwbHlcIixcbiAgXCJGaWxlVHlwZVwiLFxuICBcIkZpbGxlZEN1cnZlXCIsXG4gIFwiRmlsbGVkQ3VydmVCb3hcIixcbiAgXCJGaWxsZWRDdXJ2ZUJveE9wdGlvbnNcIixcbiAgXCJGaWxsZWRUb3J1c1wiLFxuICBcIkZpbGxGb3JtXCIsXG4gIFwiRmlsbGluZ1wiLFxuICBcIkZpbGxpbmdTdHlsZVwiLFxuICBcIkZpbGxpbmdUcmFuc2Zvcm1cIixcbiAgXCJGaWx0ZXJlZEVudGl0eUNsYXNzXCIsXG4gIFwiRmlsdGVyUnVsZXNcIixcbiAgXCJGaW5hbmNpYWxCb25kXCIsXG4gIFwiRmluYW5jaWFsRGF0YVwiLFxuICBcIkZpbmFuY2lhbERlcml2YXRpdmVcIixcbiAgXCJGaW5hbmNpYWxJbmRpY2F0b3JcIixcbiAgXCJGaW5kXCIsXG4gIFwiRmluZEFub21hbGllc1wiLFxuICBcIkZpbmRBcmdNYXhcIixcbiAgXCJGaW5kQXJnTWluXCIsXG4gIFwiRmluZENoYW5uZWxzXCIsXG4gIFwiRmluZENsaXF1ZVwiLFxuICBcIkZpbmRDbHVzdGVyc1wiLFxuICBcIkZpbmRDb29raWVzXCIsXG4gIFwiRmluZEN1cnZlUGF0aFwiLFxuICBcIkZpbmRDeWNsZVwiLFxuICBcIkZpbmREZXZpY2VzXCIsXG4gIFwiRmluZERpc3RyaWJ1dGlvblwiLFxuICBcIkZpbmREaXN0cmlidXRpb25QYXJhbWV0ZXJzXCIsXG4gIFwiRmluZERpdmlzaW9uc1wiLFxuICBcIkZpbmRFZGdlQ29sb3JpbmdcIixcbiAgXCJGaW5kRWRnZUNvdmVyXCIsXG4gIFwiRmluZEVkZ2VDdXRcIixcbiAgXCJGaW5kRWRnZUluZGVwZW5kZW50UGF0aHNcIixcbiAgXCJGaW5kRXF1YXRpb25hbFByb29mXCIsXG4gIFwiRmluZEV1bGVyaWFuQ3ljbGVcIixcbiAgXCJGaW5kRXh0ZXJuYWxFdmFsdWF0b3JzXCIsXG4gIFwiRmluZEZhY2VzXCIsXG4gIFwiRmluZEZpbGVcIixcbiAgXCJGaW5kRml0XCIsXG4gIFwiRmluZEZvcm11bGFcIixcbiAgXCJGaW5kRnVuZGFtZW50YWxDeWNsZXNcIixcbiAgXCJGaW5kR2VuZXJhdGluZ0Z1bmN0aW9uXCIsXG4gIFwiRmluZEdlb0xvY2F0aW9uXCIsXG4gIFwiRmluZEdlb21ldHJpY0NvbmplY3R1cmVzXCIsXG4gIFwiRmluZEdlb21ldHJpY1RyYW5zZm9ybVwiLFxuICBcIkZpbmRHcmFwaENvbW11bml0aWVzXCIsXG4gIFwiRmluZEdyYXBoSXNvbW9ycGhpc21cIixcbiAgXCJGaW5kR3JhcGhQYXJ0aXRpb25cIixcbiAgXCJGaW5kSGFtaWx0b25pYW5DeWNsZVwiLFxuICBcIkZpbmRIYW1pbHRvbmlhblBhdGhcIixcbiAgXCJGaW5kSGlkZGVuTWFya292U3RhdGVzXCIsXG4gIFwiRmluZEltYWdlVGV4dFwiLFxuICBcIkZpbmRJbmRlcGVuZGVudEVkZ2VTZXRcIixcbiAgXCJGaW5kSW5kZXBlbmRlbnRWZXJ0ZXhTZXRcIixcbiAgXCJGaW5kSW5zdGFuY2VcIixcbiAgXCJGaW5kSW50ZWdlck51bGxWZWN0b3JcIixcbiAgXCJGaW5kSXNvbWVyc1wiLFxuICBcIkZpbmRJc29tb3JwaGljU3ViZ3JhcGhcIixcbiAgXCJGaW5kS0NsYW5cIixcbiAgXCJGaW5kS0NsaXF1ZVwiLFxuICBcIkZpbmRLQ2x1YlwiLFxuICBcIkZpbmRLUGxleFwiLFxuICBcIkZpbmRMaWJyYXJ5XCIsXG4gIFwiRmluZExpbmVhclJlY3VycmVuY2VcIixcbiAgXCJGaW5kTGlzdFwiLFxuICBcIkZpbmRNYXRjaGluZ0NvbG9yXCIsXG4gIFwiRmluZE1heGltdW1cIixcbiAgXCJGaW5kTWF4aW11bUN1dFwiLFxuICBcIkZpbmRNYXhpbXVtRmxvd1wiLFxuICBcIkZpbmRNYXhWYWx1ZVwiLFxuICBcIkZpbmRNZXNoRGVmZWN0c1wiLFxuICBcIkZpbmRNaW5pbXVtXCIsXG4gIFwiRmluZE1pbmltdW1Db3N0Rmxvd1wiLFxuICBcIkZpbmRNaW5pbXVtQ3V0XCIsXG4gIFwiRmluZE1pblZhbHVlXCIsXG4gIFwiRmluZE1vbGVjdWxlU3Vic3RydWN0dXJlXCIsXG4gIFwiRmluZFBhdGhcIixcbiAgXCJGaW5kUGVha3NcIixcbiAgXCJGaW5kUGVybXV0YXRpb25cIixcbiAgXCJGaW5kUGxhbmFyQ29sb3JpbmdcIixcbiAgXCJGaW5kUG9pbnRQcm9jZXNzUGFyYW1ldGVyc1wiLFxuICBcIkZpbmRQb3N0bWFuVG91clwiLFxuICBcIkZpbmRQcm9jZXNzUGFyYW1ldGVyc1wiLFxuICBcIkZpbmRSZWdpb25UcmFuc2Zvcm1cIixcbiAgXCJGaW5kUmVwZWF0XCIsXG4gIFwiRmluZFJvb3RcIixcbiAgXCJGaW5kU2VxdWVuY2VGdW5jdGlvblwiLFxuICBcIkZpbmRTZXR0aW5nc1wiLFxuICBcIkZpbmRTaG9ydGVzdFBhdGhcIixcbiAgXCJGaW5kU2hvcnRlc3RUb3VyXCIsXG4gIFwiRmluZFNwYW5uaW5nVHJlZVwiLFxuICBcIkZpbmRTdWJncmFwaElzb21vcnBoaXNtXCIsXG4gIFwiRmluZFN5c3RlbU1vZGVsRXF1aWxpYnJpdW1cIixcbiAgXCJGaW5kVGV4dHVhbEFuc3dlclwiLFxuICBcIkZpbmRUaHJlc2hvbGRcIixcbiAgXCJGaW5kVHJhbnNpZW50UmVwZWF0XCIsXG4gIFwiRmluZFZlcnRleENvbG9yaW5nXCIsXG4gIFwiRmluZFZlcnRleENvdmVyXCIsXG4gIFwiRmluZFZlcnRleEN1dFwiLFxuICBcIkZpbmRWZXJ0ZXhJbmRlcGVuZGVudFBhdGhzXCIsXG4gIFwiRmluZVwiLFxuICBcIkZpbmlzaER5bmFtaWNcIixcbiAgXCJGaW5pdGVBYmVsaWFuR3JvdXBDb3VudFwiLFxuICBcIkZpbml0ZUdyb3VwQ291bnRcIixcbiAgXCJGaW5pdGVHcm91cERhdGFcIixcbiAgXCJGaXJzdFwiLFxuICBcIkZpcnN0Q2FzZVwiLFxuICBcIkZpcnN0UGFzc2FnZVRpbWVEaXN0cmlidXRpb25cIixcbiAgXCJGaXJzdFBvc2l0aW9uXCIsXG4gIFwiRmlzY2hlckdyb3VwRmkyMlwiLFxuICBcIkZpc2NoZXJHcm91cEZpMjNcIixcbiAgXCJGaXNjaGVyR3JvdXBGaTI0UHJpbWVcIixcbiAgXCJGaXNoZXJIeXBlcmdlb21ldHJpY0Rpc3RyaWJ1dGlvblwiLFxuICBcIkZpc2hlclJhdGlvVGVzdFwiLFxuICBcIkZpc2hlclpEaXN0cmlidXRpb25cIixcbiAgXCJGaXRcIixcbiAgXCJGaXRBbGxcIixcbiAgXCJGaXRSZWd1bGFyaXphdGlvblwiLFxuICBcIkZpdHRlZE1vZGVsXCIsXG4gIFwiRml4ZWRPcmRlclwiLFxuICBcIkZpeGVkUG9pbnRcIixcbiAgXCJGaXhlZFBvaW50TGlzdFwiLFxuICBcIkZsYXNoU2VsZWN0aW9uXCIsXG4gIFwiRmxhdFwiLFxuICBcIkZsYXRTaGFkaW5nXCIsXG4gIFwiRmxhdHRlblwiLFxuICBcIkZsYXR0ZW5BdFwiLFxuICBcIkZsYXR0ZW5MYXllclwiLFxuICBcIkZsYXRUb3BXaW5kb3dcIixcbiAgXCJGbGlnaHREYXRhXCIsXG4gIFwiRmxpcFZpZXdcIixcbiAgXCJGbG9vclwiLFxuICBcIkZsb3dQb2x5bm9taWFsXCIsXG4gIFwiRm9sZFwiLFxuICBcIkZvbGRMaXN0XCIsXG4gIFwiRm9sZFBhaXJcIixcbiAgXCJGb2xkUGFpckxpc3RcIixcbiAgXCJGb2xkV2hpbGVcIixcbiAgXCJGb2xkV2hpbGVMaXN0XCIsXG4gIFwiRm9sbG93UmVkaXJlY3RzXCIsXG4gIFwiRm9udFwiLFxuICBcIkZvbnRDb2xvclwiLFxuICBcIkZvbnRGYW1pbHlcIixcbiAgXCJGb250Rm9ybVwiLFxuICBcIkZvbnROYW1lXCIsXG4gIFwiRm9udE9wYWNpdHlcIixcbiAgXCJGb250UG9zdFNjcmlwdE5hbWVcIixcbiAgXCJGb250UHJvcGVydGllc1wiLFxuICBcIkZvbnRSZWVuY29kaW5nXCIsXG4gIFwiRm9udFNpemVcIixcbiAgXCJGb250U2xhbnRcIixcbiAgXCJGb250U3Vic3RpdHV0aW9uc1wiLFxuICBcIkZvbnRUcmFja2luZ1wiLFxuICBcIkZvbnRWYXJpYXRpb25zXCIsXG4gIFwiRm9udFdlaWdodFwiLFxuICBcIkZvclwiLFxuICBcIkZvckFsbFwiLFxuICBcIkZvckFsbFR5cGVcIixcbiAgXCJGb3JjZVZlcnNpb25JbnN0YWxsXCIsXG4gIFwiRm9ybWF0XCIsXG4gIFwiRm9ybWF0UnVsZXNcIixcbiAgXCJGb3JtYXRUeXBlXCIsXG4gIFwiRm9ybWF0VHlwZUF1dG9Db252ZXJ0XCIsXG4gIFwiRm9ybWF0VmFsdWVzXCIsXG4gIFwiRm9ybUJveFwiLFxuICBcIkZvcm1Cb3hPcHRpb25zXCIsXG4gIFwiRm9ybUNvbnRyb2xcIixcbiAgXCJGb3JtRnVuY3Rpb25cIixcbiAgXCJGb3JtTGF5b3V0RnVuY3Rpb25cIixcbiAgXCJGb3JtT2JqZWN0XCIsXG4gIFwiRm9ybVBhZ2VcIixcbiAgXCJGb3JtUHJvdGVjdGlvbk1ldGhvZFwiLFxuICBcIkZvcm1UaGVtZVwiLFxuICBcIkZvcm11bGFEYXRhXCIsXG4gIFwiRm9ybXVsYUxvb2t1cFwiLFxuICBcIkZvcnRyYW5Gb3JtXCIsXG4gIFwiRm9yd2FyZFwiLFxuICBcIkZvcndhcmRCYWNrd2FyZFwiLFxuICBcIkZvcndhcmRDbG91ZENyZWRlbnRpYWxzXCIsXG4gIFwiRm91cmllclwiLFxuICBcIkZvdXJpZXJDb2VmZmljaWVudFwiLFxuICBcIkZvdXJpZXJDb3NDb2VmZmljaWVudFwiLFxuICBcIkZvdXJpZXJDb3NTZXJpZXNcIixcbiAgXCJGb3VyaWVyQ29zVHJhbnNmb3JtXCIsXG4gIFwiRm91cmllckRDVFwiLFxuICBcIkZvdXJpZXJEQ1RGaWx0ZXJcIixcbiAgXCJGb3VyaWVyRENUTWF0cml4XCIsXG4gIFwiRm91cmllckRTVFwiLFxuICBcIkZvdXJpZXJEU1RNYXRyaXhcIixcbiAgXCJGb3VyaWVyTWF0cml4XCIsXG4gIFwiRm91cmllclBhcmFtZXRlcnNcIixcbiAgXCJGb3VyaWVyU2VxdWVuY2VUcmFuc2Zvcm1cIixcbiAgXCJGb3VyaWVyU2VyaWVzXCIsXG4gIFwiRm91cmllclNpbkNvZWZmaWNpZW50XCIsXG4gIFwiRm91cmllclNpblNlcmllc1wiLFxuICBcIkZvdXJpZXJTaW5UcmFuc2Zvcm1cIixcbiAgXCJGb3VyaWVyVHJhbnNmb3JtXCIsXG4gIFwiRm91cmllclRyaWdTZXJpZXNcIixcbiAgXCJGb3hIXCIsXG4gIFwiRm94SFJlZHVjZVwiLFxuICBcIkZyYWN0aW9uYWxCcm93bmlhbk1vdGlvblByb2Nlc3NcIixcbiAgXCJGcmFjdGlvbmFsRFwiLFxuICBcIkZyYWN0aW9uYWxHYXVzc2lhbk5vaXNlUHJvY2Vzc1wiLFxuICBcIkZyYWN0aW9uYWxQYXJ0XCIsXG4gIFwiRnJhY3Rpb25Cb3hcIixcbiAgXCJGcmFjdGlvbkJveE9wdGlvbnNcIixcbiAgXCJGcmFjdGlvbkxpbmVcIixcbiAgXCJGcmFtZVwiLFxuICBcIkZyYW1lQm94XCIsXG4gIFwiRnJhbWVCb3hPcHRpb25zXCIsXG4gIFwiRnJhbWVkXCIsXG4gIFwiRnJhbWVJbnNldFwiLFxuICBcIkZyYW1lTGFiZWxcIixcbiAgXCJGcmFtZWxlc3NcIixcbiAgXCJGcmFtZUxpc3RWaWRlb1wiLFxuICBcIkZyYW1lTWFyZ2luc1wiLFxuICBcIkZyYW1lUmF0ZVwiLFxuICBcIkZyYW1lU3R5bGVcIixcbiAgXCJGcmFtZVRpY2tzXCIsXG4gIFwiRnJhbWVUaWNrc1N0eWxlXCIsXG4gIFwiRlJhdGlvRGlzdHJpYnV0aW9uXCIsXG4gIFwiRnJlY2hldERpc3RyaWJ1dGlvblwiLFxuICBcIkZyZWVRXCIsXG4gIFwiRnJlbmV0U2VycmV0U3lzdGVtXCIsXG4gIFwiRnJlcXVlbmN5U2FtcGxpbmdGaWx0ZXJLZXJuZWxcIixcbiAgXCJGcmVzbmVsQ1wiLFxuICBcIkZyZXNuZWxGXCIsXG4gIFwiRnJlc25lbEdcIixcbiAgXCJGcmVzbmVsU1wiLFxuICBcIkZyaWRheVwiLFxuICBcIkZyb2Jlbml1c051bWJlclwiLFxuICBcIkZyb2Jlbml1c1NvbHZlXCIsXG4gIFwiRnJvbUFic29sdXRlVGltZVwiLFxuICBcIkZyb21DaGFyYWN0ZXJDb2RlXCIsXG4gIFwiRnJvbUNvZWZmaWNpZW50UnVsZXNcIixcbiAgXCJGcm9tQ29udGludWVkRnJhY3Rpb25cIixcbiAgXCJGcm9tRGF0ZVwiLFxuICBcIkZyb21EYXRlU3RyaW5nXCIsXG4gIFwiRnJvbURpZ2l0c1wiLFxuICBcIkZyb21ETVNcIixcbiAgXCJGcm9tRW50aXR5XCIsXG4gIFwiRnJvbUp1bGlhbkRhdGVcIixcbiAgXCJGcm9tTGV0dGVyTnVtYmVyXCIsXG4gIFwiRnJvbVBvbGFyQ29vcmRpbmF0ZXNcIixcbiAgXCJGcm9tUmF3UG9pbnRlclwiLFxuICBcIkZyb21Sb21hbk51bWVyYWxcIixcbiAgXCJGcm9tU3BoZXJpY2FsQ29vcmRpbmF0ZXNcIixcbiAgXCJGcm9tVW5peFRpbWVcIixcbiAgXCJGcm9udFwiLFxuICBcIkZyb250RW5kRHluYW1pY0V4cHJlc3Npb25cIixcbiAgXCJGcm9udEVuZEV2ZW50QWN0aW9uc1wiLFxuICBcIkZyb250RW5kRXhlY3V0ZVwiLFxuICBcIkZyb250RW5kT2JqZWN0XCIsXG4gIFwiRnJvbnRFbmRSZXNvdXJjZVwiLFxuICBcIkZyb250RW5kUmVzb3VyY2VTdHJpbmdcIixcbiAgXCJGcm9udEVuZFN0YWNrU2l6ZVwiLFxuICBcIkZyb250RW5kVG9rZW5cIixcbiAgXCJGcm9udEVuZFRva2VuRXhlY3V0ZVwiLFxuICBcIkZyb250RW5kVmFsdWVDYWNoZVwiLFxuICBcIkZyb250RW5kVmVyc2lvblwiLFxuICBcIkZyb250RmFjZUNvbG9yXCIsXG4gIFwiRnJvbnRGYWNlR2xvd0NvbG9yXCIsXG4gIFwiRnJvbnRGYWNlT3BhY2l0eVwiLFxuICBcIkZyb250RmFjZVNwZWN1bGFyQ29sb3JcIixcbiAgXCJGcm9udEZhY2VTcGVjdWxhckV4cG9uZW50XCIsXG4gIFwiRnJvbnRGYWNlU3VyZmFjZUFwcGVhcmFuY2VcIixcbiAgXCJGcm9udEZhY2VUZXh0dXJlXCIsXG4gIFwiRnVsbFwiLFxuICBcIkZ1bGxBeGVzXCIsXG4gIFwiRnVsbERlZmluaXRpb25cIixcbiAgXCJGdWxsRm9ybVwiLFxuICBcIkZ1bGxHcmFwaGljc1wiLFxuICBcIkZ1bGxJbmZvcm1hdGlvbk91dHB1dFJlZ3VsYXRvclwiLFxuICBcIkZ1bGxPcHRpb25zXCIsXG4gIFwiRnVsbFJlZ2lvblwiLFxuICBcIkZ1bGxTaW1wbGlmeVwiLFxuICBcIkZ1bmN0aW9uXCIsXG4gIFwiRnVuY3Rpb25BbmFseXRpY1wiLFxuICBcIkZ1bmN0aW9uQmlqZWN0aXZlXCIsXG4gIFwiRnVuY3Rpb25Db21waWxlXCIsXG4gIFwiRnVuY3Rpb25Db21waWxlRXhwb3J0XCIsXG4gIFwiRnVuY3Rpb25Db21waWxlRXhwb3J0Qnl0ZUFycmF5XCIsXG4gIFwiRnVuY3Rpb25Db21waWxlRXhwb3J0TGlicmFyeVwiLFxuICBcIkZ1bmN0aW9uQ29tcGlsZUV4cG9ydFN0cmluZ1wiLFxuICBcIkZ1bmN0aW9uQ29udGludW91c1wiLFxuICBcIkZ1bmN0aW9uQ29udmV4aXR5XCIsXG4gIFwiRnVuY3Rpb25EZWNsYXJhdGlvblwiLFxuICBcIkZ1bmN0aW9uRGlzY29udGludWl0aWVzXCIsXG4gIFwiRnVuY3Rpb25Eb21haW5cIixcbiAgXCJGdW5jdGlvbkV4cGFuZFwiLFxuICBcIkZ1bmN0aW9uSW5qZWN0aXZlXCIsXG4gIFwiRnVuY3Rpb25JbnRlcnBvbGF0aW9uXCIsXG4gIFwiRnVuY3Rpb25MYXllclwiLFxuICBcIkZ1bmN0aW9uTWVyb21vcnBoaWNcIixcbiAgXCJGdW5jdGlvbk1vbm90b25pY2l0eVwiLFxuICBcIkZ1bmN0aW9uUGVyaW9kXCIsXG4gIFwiRnVuY3Rpb25Qb2xlc1wiLFxuICBcIkZ1bmN0aW9uUmFuZ2VcIixcbiAgXCJGdW5jdGlvblNpZ25cIixcbiAgXCJGdW5jdGlvblNpbmd1bGFyaXRpZXNcIixcbiAgXCJGdW5jdGlvblNwYWNlXCIsXG4gIFwiRnVuY3Rpb25TdXJqZWN0aXZlXCIsXG4gIFwiRnVzc2VsbFZlc2VseUltcG9ydGFuY2VcIixcbiAgXCJHYWJvckZpbHRlclwiLFxuICBcIkdhYm9yTWF0cml4XCIsXG4gIFwiR2Fib3JXYXZlbGV0XCIsXG4gIFwiR2Fpbk1hcmdpbnNcIixcbiAgXCJHYWluUGhhc2VNYXJnaW5zXCIsXG4gIFwiR2FsYXh5RGF0YVwiLFxuICBcIkdhbGxlcnlWaWV3XCIsXG4gIFwiR2FtbWFcIixcbiAgXCJHYW1tYURpc3RyaWJ1dGlvblwiLFxuICBcIkdhbW1hUmVndWxhcml6ZWRcIixcbiAgXCJHYXBQZW5hbHR5XCIsXG4gIFwiR0FSQ0hQcm9jZXNzXCIsXG4gIFwiR2F0ZWRSZWN1cnJlbnRMYXllclwiLFxuICBcIkdhdGhlclwiLFxuICBcIkdhdGhlckJ5XCIsXG4gIFwiR2F1Z2VGYWNlRWxlbWVudEZ1bmN0aW9uXCIsXG4gIFwiR2F1Z2VGYWNlU3R5bGVcIixcbiAgXCJHYXVnZUZyYW1lRWxlbWVudEZ1bmN0aW9uXCIsXG4gIFwiR2F1Z2VGcmFtZVNpemVcIixcbiAgXCJHYXVnZUZyYW1lU3R5bGVcIixcbiAgXCJHYXVnZUxhYmVsc1wiLFxuICBcIkdhdWdlTWFya2Vyc1wiLFxuICBcIkdhdWdlU3R5bGVcIixcbiAgXCJHYXVzc2lhbkZpbHRlclwiLFxuICBcIkdhdXNzaWFuSW50ZWdlcnNcIixcbiAgXCJHYXVzc2lhbk1hdHJpeFwiLFxuICBcIkdhdXNzaWFuT3J0aG9nb25hbE1hdHJpeERpc3RyaWJ1dGlvblwiLFxuICBcIkdhdXNzaWFuU3ltcGxlY3RpY01hdHJpeERpc3RyaWJ1dGlvblwiLFxuICBcIkdhdXNzaWFuVW5pdGFyeU1hdHJpeERpc3RyaWJ1dGlvblwiLFxuICBcIkdhdXNzaWFuV2luZG93XCIsXG4gIFwiR0NEXCIsXG4gIFwiR2VnZW5iYXVlckNcIixcbiAgXCJHZW5lcmFsXCIsXG4gIFwiR2VuZXJhbGl6ZWRMaW5lYXJNb2RlbEZpdFwiLFxuICBcIkdlbmVyYXRlQXN5bW1ldHJpY0tleVBhaXJcIixcbiAgXCJHZW5lcmF0ZUNvbmRpdGlvbnNcIixcbiAgXCJHZW5lcmF0ZWRBc3NldEZvcm1hdFwiLFxuICBcIkdlbmVyYXRlZEFzc2V0TG9jYXRpb25cIixcbiAgXCJHZW5lcmF0ZWRDZWxsXCIsXG4gIFwiR2VuZXJhdGVkQ2VsbFN0eWxlc1wiLFxuICBcIkdlbmVyYXRlZERvY3VtZW50QmluZGluZ1wiLFxuICBcIkdlbmVyYXRlRGVyaXZlZEtleVwiLFxuICBcIkdlbmVyYXRlRGlnaXRhbFNpZ25hdHVyZVwiLFxuICBcIkdlbmVyYXRlRG9jdW1lbnRcIixcbiAgXCJHZW5lcmF0ZWRQYXJhbWV0ZXJzXCIsXG4gIFwiR2VuZXJhdGVkUXVhbnRpdHlNYWduaXR1ZGVzXCIsXG4gIFwiR2VuZXJhdGVGaWxlU2lnbmF0dXJlXCIsXG4gIFwiR2VuZXJhdGVIVFRQUmVzcG9uc2VcIixcbiAgXCJHZW5lcmF0ZVNlY3VyZWRBdXRoZW50aWNhdGlvbktleVwiLFxuICBcIkdlbmVyYXRlU3ltbWV0cmljS2V5XCIsXG4gIFwiR2VuZXJhdGluZ0Z1bmN0aW9uXCIsXG4gIFwiR2VuZXJhdG9yRGVzY3JpcHRpb25cIixcbiAgXCJHZW5lcmF0b3JIaXN0b3J5TGVuZ3RoXCIsXG4gIFwiR2VuZXJhdG9yT3V0cHV0VHlwZVwiLFxuICBcIkdlbmVyaWNcIixcbiAgXCJHZW5lcmljQ3lsaW5kcmljYWxEZWNvbXBvc2l0aW9uXCIsXG4gIFwiR2Vub21lRGF0YVwiLFxuICBcIkdlbm9tZUxvb2t1cFwiLFxuICBcIkdlb0FudGlwb2RlXCIsXG4gIFwiR2VvQXJlYVwiLFxuICBcIkdlb0FycmF5U2l6ZVwiLFxuICBcIkdlb0JhY2tncm91bmRcIixcbiAgXCJHZW9Cb3VuZGFyeVwiLFxuICBcIkdlb0JvdW5kaW5nQm94XCIsXG4gIFwiR2VvQm91bmRzXCIsXG4gIFwiR2VvQm91bmRzUmVnaW9uXCIsXG4gIFwiR2VvQm91bmRzUmVnaW9uQm91bmRhcnlcIixcbiAgXCJHZW9CdWJibGVDaGFydFwiLFxuICBcIkdlb0NlbnRlclwiLFxuICBcIkdlb0NpcmNsZVwiLFxuICBcIkdlb0NvbnRvdXJQbG90XCIsXG4gIFwiR2VvRGVuc2l0eVBsb3RcIixcbiAgXCJHZW9kZXNpY0Nsb3NpbmdcIixcbiAgXCJHZW9kZXNpY0RpbGF0aW9uXCIsXG4gIFwiR2VvZGVzaWNFcm9zaW9uXCIsXG4gIFwiR2VvZGVzaWNPcGVuaW5nXCIsXG4gIFwiR2VvZGVzaWNQb2x5aGVkcm9uXCIsXG4gIFwiR2VvRGVzdGluYXRpb25cIixcbiAgXCJHZW9kZXN5RGF0YVwiLFxuICBcIkdlb0RpcmVjdGlvblwiLFxuICBcIkdlb0Rpc2tcIixcbiAgXCJHZW9EaXNwbGFjZW1lbnRcIixcbiAgXCJHZW9EaXN0YW5jZVwiLFxuICBcIkdlb0Rpc3RhbmNlTGlzdFwiLFxuICBcIkdlb0VsZXZhdGlvbkRhdGFcIixcbiAgXCJHZW9FbnRpdGllc1wiLFxuICBcIkdlb0dyYXBoaWNzXCIsXG4gIFwiR2VvR3JhcGhQbG90XCIsXG4gIFwiR2VvR3JhcGhWYWx1ZVBsb3RcIixcbiAgXCJHZW9ncmF2aXR5TW9kZWxEYXRhXCIsXG4gIFwiR2VvR3JpZERpcmVjdGlvbkRpZmZlcmVuY2VcIixcbiAgXCJHZW9HcmlkTGluZXNcIixcbiAgXCJHZW9HcmlkTGluZXNTdHlsZVwiLFxuICBcIkdlb0dyaWRQb3NpdGlvblwiLFxuICBcIkdlb0dyaWRSYW5nZVwiLFxuICBcIkdlb0dyaWRSYW5nZVBhZGRpbmdcIixcbiAgXCJHZW9HcmlkVW5pdEFyZWFcIixcbiAgXCJHZW9HcmlkVW5pdERpc3RhbmNlXCIsXG4gIFwiR2VvR3JpZFZlY3RvclwiLFxuICBcIkdlb0dyb3VwXCIsXG4gIFwiR2VvSGVtaXNwaGVyZVwiLFxuICBcIkdlb0hlbWlzcGhlcmVCb3VuZGFyeVwiLFxuICBcIkdlb0hpc3RvZ3JhbVwiLFxuICBcIkdlb0lkZW50aWZ5XCIsXG4gIFwiR2VvSW1hZ2VcIixcbiAgXCJHZW9MYWJlbHNcIixcbiAgXCJHZW9MZW5ndGhcIixcbiAgXCJHZW9MaXN0UGxvdFwiLFxuICBcIkdlb0xvY2F0aW9uXCIsXG4gIFwiR2VvbG9naWNhbFBlcmlvZERhdGFcIixcbiAgXCJHZW9tYWduZXRpY01vZGVsRGF0YVwiLFxuICBcIkdlb01hcmtlclwiLFxuICBcIkdlb21ldHJpY0Fzc2VydGlvblwiLFxuICBcIkdlb21ldHJpY0Jyb3duaWFuTW90aW9uUHJvY2Vzc1wiLFxuICBcIkdlb21ldHJpY0Rpc3RyaWJ1dGlvblwiLFxuICBcIkdlb21ldHJpY01lYW5cIixcbiAgXCJHZW9tZXRyaWNNZWFuRmlsdGVyXCIsXG4gIFwiR2VvbWV0cmljT3B0aW1pemF0aW9uXCIsXG4gIFwiR2VvbWV0cmljU2NlbmVcIixcbiAgXCJHZW9tZXRyaWNTdGVwXCIsXG4gIFwiR2VvbWV0cmljU3R5bGluZ1J1bGVzXCIsXG4gIFwiR2VvbWV0cmljVGVzdFwiLFxuICBcIkdlb21ldHJpY1RyYW5zZm9ybWF0aW9uXCIsXG4gIFwiR2VvbWV0cmljVHJhbnNmb3JtYXRpb24zREJveFwiLFxuICBcIkdlb21ldHJpY1RyYW5zZm9ybWF0aW9uM0RCb3hPcHRpb25zXCIsXG4gIFwiR2VvbWV0cmljVHJhbnNmb3JtYXRpb25Cb3hcIixcbiAgXCJHZW9tZXRyaWNUcmFuc2Zvcm1hdGlvbkJveE9wdGlvbnNcIixcbiAgXCJHZW9Nb2RlbFwiLFxuICBcIkdlb05lYXJlc3RcIixcbiAgXCJHZW9PcmllbnRhdGlvbkRhdGFcIixcbiAgXCJHZW9QYXRoXCIsXG4gIFwiR2VvUG9seWdvblwiLFxuICBcIkdlb1Bvc2l0aW9uXCIsXG4gIFwiR2VvUG9zaXRpb25FTlVcIixcbiAgXCJHZW9Qb3NpdGlvblhZWlwiLFxuICBcIkdlb1Byb2plY3Rpb25cIixcbiAgXCJHZW9Qcm9qZWN0aW9uRGF0YVwiLFxuICBcIkdlb1JhbmdlXCIsXG4gIFwiR2VvUmFuZ2VQYWRkaW5nXCIsXG4gIFwiR2VvUmVnaW9uVmFsdWVQbG90XCIsXG4gIFwiR2VvUmVzb2x1dGlvblwiLFxuICBcIkdlb1NjYWxlQmFyXCIsXG4gIFwiR2VvU2VydmVyXCIsXG4gIFwiR2VvU21vb3RoSGlzdG9ncmFtXCIsXG4gIFwiR2VvU3RyZWFtUGxvdFwiLFxuICBcIkdlb1N0eWxpbmdcIixcbiAgXCJHZW9TdHlsaW5nSW1hZ2VGdW5jdGlvblwiLFxuICBcIkdlb1ZhcmlhbnRcIixcbiAgXCJHZW9WZWN0b3JcIixcbiAgXCJHZW9WZWN0b3JFTlVcIixcbiAgXCJHZW9WZWN0b3JQbG90XCIsXG4gIFwiR2VvVmVjdG9yWFlaXCIsXG4gIFwiR2VvVmlzaWJsZVJlZ2lvblwiLFxuICBcIkdlb1Zpc2libGVSZWdpb25Cb3VuZGFyeVwiLFxuICBcIkdlb1dpdGhpblFcIixcbiAgXCJHZW9ab29tTGV2ZWxcIixcbiAgXCJHZXN0dXJlSGFuZGxlclwiLFxuICBcIkdlc3R1cmVIYW5kbGVyVGFnXCIsXG4gIFwiR2V0XCIsXG4gIFwiR2V0Q29udGV4dFwiLFxuICBcIkdldEVudmlyb25tZW50XCIsXG4gIFwiR2V0RmlsZU5hbWVcIixcbiAgXCJHZXRMaW5lYnJlYWtJbmZvcm1hdGlvblBhY2tldFwiLFxuICBcIkdpYmJzUG9pbnRQcm9jZXNzXCIsXG4gIFwiR2xhaXNoZXJcIixcbiAgXCJHbG9iYWxDbHVzdGVyaW5nQ29lZmZpY2llbnRcIixcbiAgXCJHbG9iYWxQcmVmZXJlbmNlc1wiLFxuICBcIkdsb2JhbFNlc3Npb25cIixcbiAgXCJHbG93XCIsXG4gIFwiR29sZGVuQW5nbGVcIixcbiAgXCJHb2xkZW5SYXRpb1wiLFxuICBcIkdvbXBlcnR6TWFrZWhhbURpc3RyaWJ1dGlvblwiLFxuICBcIkdvb2NoU2hhZGluZ1wiLFxuICBcIkdvb2RtYW5LcnVza2FsR2FtbWFcIixcbiAgXCJHb29kbWFuS3J1c2thbEdhbW1hVGVzdFwiLFxuICBcIkdvdG9cIixcbiAgXCJHb3VyYXVkU2hhZGluZ1wiLFxuICBcIkdyYWRcIixcbiAgXCJHcmFkaWVudFwiLFxuICBcIkdyYWRpZW50RmlsdGVyXCIsXG4gIFwiR3JhZGllbnRGaXR0ZWRNZXNoXCIsXG4gIFwiR3JhZGllbnRPcmllbnRhdGlvbkZpbHRlclwiLFxuICBcIkdyYW1tYXJBcHBseVwiLFxuICBcIkdyYW1tYXJSdWxlc1wiLFxuICBcIkdyYW1tYXJUb2tlblwiLFxuICBcIkdyYXBoXCIsXG4gIFwiR3JhcGgzRFwiLFxuICBcIkdyYXBoQXNzb3J0YXRpdml0eVwiLFxuICBcIkdyYXBoQXV0b21vcnBoaXNtR3JvdXBcIixcbiAgXCJHcmFwaENlbnRlclwiLFxuICBcIkdyYXBoQ29tcGxlbWVudFwiLFxuICBcIkdyYXBoRGF0YVwiLFxuICBcIkdyYXBoRGVuc2l0eVwiLFxuICBcIkdyYXBoRGlhbWV0ZXJcIixcbiAgXCJHcmFwaERpZmZlcmVuY2VcIixcbiAgXCJHcmFwaERpc2pvaW50VW5pb25cIixcbiAgXCJHcmFwaERpc3RhbmNlXCIsXG4gIFwiR3JhcGhEaXN0YW5jZU1hdHJpeFwiLFxuICBcIkdyYXBoRW1iZWRkaW5nXCIsXG4gIFwiR3JhcGhIaWdobGlnaHRcIixcbiAgXCJHcmFwaEhpZ2hsaWdodFN0eWxlXCIsXG4gIFwiR3JhcGhIdWJcIixcbiAgXCJHcmFwaGljc1wiLFxuICBcIkdyYXBoaWNzM0RcIixcbiAgXCJHcmFwaGljczNEQm94XCIsXG4gIFwiR3JhcGhpY3MzREJveE9wdGlvbnNcIixcbiAgXCJHcmFwaGljc0FycmF5XCIsXG4gIFwiR3JhcGhpY3NCYXNlbGluZVwiLFxuICBcIkdyYXBoaWNzQm94XCIsXG4gIFwiR3JhcGhpY3NCb3hPcHRpb25zXCIsXG4gIFwiR3JhcGhpY3NDb2xvclwiLFxuICBcIkdyYXBoaWNzQ29sdW1uXCIsXG4gIFwiR3JhcGhpY3NDb21wbGV4XCIsXG4gIFwiR3JhcGhpY3NDb21wbGV4M0RCb3hcIixcbiAgXCJHcmFwaGljc0NvbXBsZXgzREJveE9wdGlvbnNcIixcbiAgXCJHcmFwaGljc0NvbXBsZXhCb3hcIixcbiAgXCJHcmFwaGljc0NvbXBsZXhCb3hPcHRpb25zXCIsXG4gIFwiR3JhcGhpY3NDb250ZW50c1wiLFxuICBcIkdyYXBoaWNzRGF0YVwiLFxuICBcIkdyYXBoaWNzR3JpZFwiLFxuICBcIkdyYXBoaWNzR3JpZEJveFwiLFxuICBcIkdyYXBoaWNzR3JvdXBcIixcbiAgXCJHcmFwaGljc0dyb3VwM0RCb3hcIixcbiAgXCJHcmFwaGljc0dyb3VwM0RCb3hPcHRpb25zXCIsXG4gIFwiR3JhcGhpY3NHcm91cEJveFwiLFxuICBcIkdyYXBoaWNzR3JvdXBCb3hPcHRpb25zXCIsXG4gIFwiR3JhcGhpY3NHcm91cGluZ1wiLFxuICBcIkdyYXBoaWNzSGlnaGxpZ2h0Q29sb3JcIixcbiAgXCJHcmFwaGljc1Jvd1wiLFxuICBcIkdyYXBoaWNzU3BhY2luZ1wiLFxuICBcIkdyYXBoaWNzU3R5bGVcIixcbiAgXCJHcmFwaEludGVyc2VjdGlvblwiLFxuICBcIkdyYXBoSm9pblwiLFxuICBcIkdyYXBoTGF5ZXJMYWJlbHNcIixcbiAgXCJHcmFwaExheWVyc1wiLFxuICBcIkdyYXBoTGF5ZXJTdHlsZVwiLFxuICBcIkdyYXBoTGF5b3V0XCIsXG4gIFwiR3JhcGhMaW5rRWZmaWNpZW5jeVwiLFxuICBcIkdyYXBoUGVyaXBoZXJ5XCIsXG4gIFwiR3JhcGhQbG90XCIsXG4gIFwiR3JhcGhQbG90M0RcIixcbiAgXCJHcmFwaFBvd2VyXCIsXG4gIFwiR3JhcGhQcm9kdWN0XCIsXG4gIFwiR3JhcGhQcm9wZXJ0eURpc3RyaWJ1dGlvblwiLFxuICBcIkdyYXBoUVwiLFxuICBcIkdyYXBoUmFkaXVzXCIsXG4gIFwiR3JhcGhSZWNpcHJvY2l0eVwiLFxuICBcIkdyYXBoUm9vdFwiLFxuICBcIkdyYXBoU3R5bGVcIixcbiAgXCJHcmFwaFN1bVwiLFxuICBcIkdyYXBoVHJlZVwiLFxuICBcIkdyYXBoVW5pb25cIixcbiAgXCJHcmF5XCIsXG4gIFwiR3JheUxldmVsXCIsXG4gIFwiR3JlYXRlclwiLFxuICBcIkdyZWF0ZXJFcXVhbFwiLFxuICBcIkdyZWF0ZXJFcXVhbExlc3NcIixcbiAgXCJHcmVhdGVyRXF1YWxUaGFuXCIsXG4gIFwiR3JlYXRlckZ1bGxFcXVhbFwiLFxuICBcIkdyZWF0ZXJHcmVhdGVyXCIsXG4gIFwiR3JlYXRlckxlc3NcIixcbiAgXCJHcmVhdGVyU2xhbnRFcXVhbFwiLFxuICBcIkdyZWF0ZXJUaGFuXCIsXG4gIFwiR3JlYXRlclRpbGRlXCIsXG4gIFwiR3JlZWtTdHlsZVwiLFxuICBcIkdyZWVuXCIsXG4gIFwiR3JlZW5GdW5jdGlvblwiLFxuICBcIkdyaWRcIixcbiAgXCJHcmlkQmFzZWxpbmVcIixcbiAgXCJHcmlkQm94XCIsXG4gIFwiR3JpZEJveEFsaWdubWVudFwiLFxuICBcIkdyaWRCb3hCYWNrZ3JvdW5kXCIsXG4gIFwiR3JpZEJveERpdmlkZXJzXCIsXG4gIFwiR3JpZEJveEZyYW1lXCIsXG4gIFwiR3JpZEJveEl0ZW1TaXplXCIsXG4gIFwiR3JpZEJveEl0ZW1TdHlsZVwiLFxuICBcIkdyaWRCb3hPcHRpb25zXCIsXG4gIFwiR3JpZEJveFNwYWNpbmdzXCIsXG4gIFwiR3JpZENyZWF0aW9uU2V0dGluZ3NcIixcbiAgXCJHcmlkRGVmYXVsdEVsZW1lbnRcIixcbiAgXCJHcmlkRWxlbWVudFN0eWxlT3B0aW9uc1wiLFxuICBcIkdyaWRGcmFtZVwiLFxuICBcIkdyaWRGcmFtZU1hcmdpbnNcIixcbiAgXCJHcmlkR3JhcGhcIixcbiAgXCJHcmlkTGluZXNcIixcbiAgXCJHcmlkTGluZXNTdHlsZVwiLFxuICBcIkdyaWRWaWRlb1wiLFxuICBcIkdyb2VibmVyQmFzaXNcIixcbiAgXCJHcm91cEFjdGlvbkJhc2VcIixcbiAgXCJHcm91cEJ5XCIsXG4gIFwiR3JvdXBDZW50cmFsaXplclwiLFxuICBcIkdyb3VwRWxlbWVudEZyb21Xb3JkXCIsXG4gIFwiR3JvdXBFbGVtZW50UG9zaXRpb25cIixcbiAgXCJHcm91cEVsZW1lbnRRXCIsXG4gIFwiR3JvdXBFbGVtZW50c1wiLFxuICBcIkdyb3VwRWxlbWVudFRvV29yZFwiLFxuICBcIkdyb3VwR2VuZXJhdG9yc1wiLFxuICBcIkdyb3VwaW5nc1wiLFxuICBcIkdyb3VwTXVsdGlwbGljYXRpb25UYWJsZVwiLFxuICBcIkdyb3VwT3BlbmVyQ29sb3JcIixcbiAgXCJHcm91cE9wZW5lckluc2lkZUZyYW1lXCIsXG4gIFwiR3JvdXBPcmJpdHNcIixcbiAgXCJHcm91cE9yZGVyXCIsXG4gIFwiR3JvdXBQYWdlQnJlYWtXaXRoaW5cIixcbiAgXCJHcm91cFNldHdpc2VTdGFiaWxpemVyXCIsXG4gIFwiR3JvdXBTdGFiaWxpemVyXCIsXG4gIFwiR3JvdXBTdGFiaWxpemVyQ2hhaW5cIixcbiAgXCJHcm91cFRvZ2V0aGVyR3JvdXBpbmdcIixcbiAgXCJHcm91cFRvZ2V0aGVyTmVzdGVkR3JvdXBpbmdcIixcbiAgXCJHcm93Q3V0Q29tcG9uZW50c1wiLFxuICBcIkd1ZGVybWFubmlhblwiLFxuICBcIkd1aWRlZEZpbHRlclwiLFxuICBcIkd1bWJlbERpc3RyaWJ1dGlvblwiLFxuICBcIkhhYXJXYXZlbGV0XCIsXG4gIFwiSGFkYW1hcmRNYXRyaXhcIixcbiAgXCJIYWxmTGluZVwiLFxuICBcIkhhbGZOb3JtYWxEaXN0cmlidXRpb25cIixcbiAgXCJIYWxmUGxhbmVcIixcbiAgXCJIYWxmU3BhY2VcIixcbiAgXCJIYWxmdG9uZVNoYWRpbmdcIixcbiAgXCJIYW1pbHRvbmlhbkdyYXBoUVwiLFxuICBcIkhhbW1pbmdEaXN0YW5jZVwiLFxuICBcIkhhbW1pbmdXaW5kb3dcIixcbiAgXCJIYW5kbGVyRnVuY3Rpb25zXCIsXG4gIFwiSGFuZGxlckZ1bmN0aW9uc0tleXNcIixcbiAgXCJIYW5rZWxIMVwiLFxuICBcIkhhbmtlbEgyXCIsXG4gIFwiSGFua2VsTWF0cml4XCIsXG4gIFwiSGFua2VsVHJhbnNmb3JtXCIsXG4gIFwiSGFublBvaXNzb25XaW5kb3dcIixcbiAgXCJIYW5uV2luZG93XCIsXG4gIFwiSGFyYWRhTm9ydG9uR3JvdXBITlwiLFxuICBcIkhhcmFyeUdyYXBoXCIsXG4gIFwiSGFyZGNvcmVQb2ludFByb2Nlc3NcIixcbiAgXCJIYXJtb25pY01lYW5cIixcbiAgXCJIYXJtb25pY01lYW5GaWx0ZXJcIixcbiAgXCJIYXJtb25pY051bWJlclwiLFxuICBcIkhhc2hcIixcbiAgXCJIYXRjaEZpbGxpbmdcIixcbiAgXCJIYXRjaFNoYWRpbmdcIixcbiAgXCJIYXZlcnNpbmVcIixcbiAgXCJIYXphcmRGdW5jdGlvblwiLFxuICBcIkhlYWRcIixcbiAgXCJIZWFkQ29tcG9zZVwiLFxuICBcIkhlYWRlckFsaWdubWVudFwiLFxuICBcIkhlYWRlckJhY2tncm91bmRcIixcbiAgXCJIZWFkZXJEaXNwbGF5RnVuY3Rpb25cIixcbiAgXCJIZWFkZXJMaW5lc1wiLFxuICBcIkhlYWRlcnNcIixcbiAgXCJIZWFkZXJTaXplXCIsXG4gIFwiSGVhZGVyU3R5bGVcIixcbiAgXCJIZWFkc1wiLFxuICBcIkhlYXRGbHV4VmFsdWVcIixcbiAgXCJIZWF0SW5zdWxhdGlvblZhbHVlXCIsXG4gIFwiSGVhdE91dGZsb3dWYWx1ZVwiLFxuICBcIkhlYXRSYWRpYXRpb25WYWx1ZVwiLFxuICBcIkhlYXRTeW1tZXRyeVZhbHVlXCIsXG4gIFwiSGVhdFRlbXBlcmF0dXJlQ29uZGl0aW9uXCIsXG4gIFwiSGVhdFRyYW5zZmVyUERFQ29tcG9uZW50XCIsXG4gIFwiSGVhdFRyYW5zZmVyVmFsdWVcIixcbiAgXCJIZWF2aXNpZGVMYW1iZGFcIixcbiAgXCJIZWF2aXNpZGVQaVwiLFxuICBcIkhlYXZpc2lkZVRoZXRhXCIsXG4gIFwiSGVsZEdyb3VwSGVcIixcbiAgXCJIZWxkUGFydFwiLFxuICBcIkhlbG1ob2x0elBERUNvbXBvbmVudFwiLFxuICBcIkhlbHBCcm93c2VyTG9va3VwXCIsXG4gIFwiSGVscEJyb3dzZXJOb3RlYm9va1wiLFxuICBcIkhlbHBCcm93c2VyU2V0dGluZ3NcIixcbiAgXCJIZWxwVmlld2VyU2V0dGluZ3NcIixcbiAgXCJIZXJlXCIsXG4gIFwiSGVybWl0ZURlY29tcG9zaXRpb25cIixcbiAgXCJIZXJtaXRlSFwiLFxuICBcIkhlcm1pdGlhblwiLFxuICBcIkhlcm1pdGlhbk1hdHJpeFFcIixcbiAgXCJIZXNzZW5iZXJnRGVjb21wb3NpdGlvblwiLFxuICBcIkhlc3NpYW5cIixcbiAgXCJIZXVuQlwiLFxuICBcIkhldW5CUHJpbWVcIixcbiAgXCJIZXVuQ1wiLFxuICBcIkhldW5DUHJpbWVcIixcbiAgXCJIZXVuRFwiLFxuICBcIkhldW5EUHJpbWVcIixcbiAgXCJIZXVuR1wiLFxuICBcIkhldW5HUHJpbWVcIixcbiAgXCJIZXVuVFwiLFxuICBcIkhldW5UUHJpbWVcIixcbiAgXCJIZXhhZGVjaW1hbENoYXJhY3RlclwiLFxuICBcIkhleGFoZWRyb25cIixcbiAgXCJIZXhhaGVkcm9uQm94XCIsXG4gIFwiSGV4YWhlZHJvbkJveE9wdGlvbnNcIixcbiAgXCJIaWRkZW5JdGVtc1wiLFxuICBcIkhpZGRlbk1hcmtvdlByb2Nlc3NcIixcbiAgXCJIaWRkZW5TdXJmYWNlXCIsXG4gIFwiSGlnaGxpZ2h0ZWRcIixcbiAgXCJIaWdobGlnaHRHcmFwaFwiLFxuICBcIkhpZ2hsaWdodEltYWdlXCIsXG4gIFwiSGlnaGxpZ2h0TWVzaFwiLFxuICBcIkhpZ2hsaWdodFN0cmluZ1wiLFxuICBcIkhpZ2hwYXNzRmlsdGVyXCIsXG4gIFwiSGlnbWFuU2ltc0dyb3VwSFNcIixcbiAgXCJIaWxiZXJ0Q3VydmVcIixcbiAgXCJIaWxiZXJ0RmlsdGVyXCIsXG4gIFwiSGlsYmVydE1hdHJpeFwiLFxuICBcIkhpc3RvZ3JhbVwiLFxuICBcIkhpc3RvZ3JhbTNEXCIsXG4gIFwiSGlzdG9ncmFtRGlzdHJpYnV0aW9uXCIsXG4gIFwiSGlzdG9ncmFtTGlzdFwiLFxuICBcIkhpc3RvZ3JhbVBvaW50RGVuc2l0eVwiLFxuICBcIkhpc3RvZ3JhbVRyYW5zZm9ybVwiLFxuICBcIkhpc3RvZ3JhbVRyYW5zZm9ybUludGVycG9sYXRpb25cIixcbiAgXCJIaXN0b3JpY2FsUGVyaW9kRGF0YVwiLFxuICBcIkhpdE1pc3NUcmFuc2Zvcm1cIixcbiAgXCJISVRTQ2VudHJhbGl0eVwiLFxuICBcIkhqb3J0aERpc3RyaWJ1dGlvblwiLFxuICBcIkhvZGdlRHVhbFwiLFxuICBcIkhvZWZmZGluZ0RcIixcbiAgXCJIb2VmZmRpbmdEVGVzdFwiLFxuICBcIkhvbGRcIixcbiAgXCJIb2xkQWxsXCIsXG4gIFwiSG9sZEFsbENvbXBsZXRlXCIsXG4gIFwiSG9sZENvbXBsZXRlXCIsXG4gIFwiSG9sZEZpcnN0XCIsXG4gIFwiSG9sZEZvcm1cIixcbiAgXCJIb2xkUGF0dGVyblwiLFxuICBcIkhvbGRSZXN0XCIsXG4gIFwiSG9saWRheUNhbGVuZGFyXCIsXG4gIFwiSG9tZURpcmVjdG9yeVwiLFxuICBcIkhvbWVQYWdlXCIsXG4gIFwiSG9yaXpvbnRhbFwiLFxuICBcIkhvcml6b250YWxGb3JtXCIsXG4gIFwiSG9yaXpvbnRhbEdhdWdlXCIsXG4gIFwiSG9yaXpvbnRhbFNjcm9sbFBvc2l0aW9uXCIsXG4gIFwiSG9ybmVyRm9ybVwiLFxuICBcIkhvc3RMb29rdXBcIixcbiAgXCJIb3RlbGxpbmdUU3F1YXJlRGlzdHJpYnV0aW9uXCIsXG4gIFwiSG95dERpc3RyaWJ1dGlvblwiLFxuICBcIkhUTUxTYXZlXCIsXG4gIFwiSFRUUEVycm9yUmVzcG9uc2VcIixcbiAgXCJIVFRQUmVkaXJlY3RcIixcbiAgXCJIVFRQUmVxdWVzdFwiLFxuICBcIkhUVFBSZXF1ZXN0RGF0YVwiLFxuICBcIkhUVFBSZXNwb25zZVwiLFxuICBcIkh1ZVwiLFxuICBcIkh1bWFuR3Jvd3RoRGF0YVwiLFxuICBcIkh1bXBEb3duSHVtcFwiLFxuICBcIkh1bXBFcXVhbFwiLFxuICBcIkh1cndpdHpMZXJjaFBoaVwiLFxuICBcIkh1cndpdHpaZXRhXCIsXG4gIFwiSHlwZXJib2xpY0Rpc3RyaWJ1dGlvblwiLFxuICBcIkh5cGVyY3ViZUdyYXBoXCIsXG4gIFwiSHlwZXJleHBvbmVudGlhbERpc3RyaWJ1dGlvblwiLFxuICBcIkh5cGVyZmFjdG9yaWFsXCIsXG4gIFwiSHlwZXJnZW9tZXRyaWMwRjFcIixcbiAgXCJIeXBlcmdlb21ldHJpYzBGMVJlZ3VsYXJpemVkXCIsXG4gIFwiSHlwZXJnZW9tZXRyaWMxRjFcIixcbiAgXCJIeXBlcmdlb21ldHJpYzFGMVJlZ3VsYXJpemVkXCIsXG4gIFwiSHlwZXJnZW9tZXRyaWMyRjFcIixcbiAgXCJIeXBlcmdlb21ldHJpYzJGMVJlZ3VsYXJpemVkXCIsXG4gIFwiSHlwZXJnZW9tZXRyaWNEaXN0cmlidXRpb25cIixcbiAgXCJIeXBlcmdlb21ldHJpY1BGUVwiLFxuICBcIkh5cGVyZ2VvbWV0cmljUEZRUmVndWxhcml6ZWRcIixcbiAgXCJIeXBlcmdlb21ldHJpY1VcIixcbiAgXCJIeXBlcmxpbmtcIixcbiAgXCJIeXBlcmxpbmtBY3Rpb25cIixcbiAgXCJIeXBlcmxpbmtDcmVhdGlvblNldHRpbmdzXCIsXG4gIFwiSHlwZXJwbGFuZVwiLFxuICBcIkh5cGhlbmF0aW9uXCIsXG4gIFwiSHlwaGVuYXRpb25PcHRpb25zXCIsXG4gIFwiSHlwb2V4cG9uZW50aWFsRGlzdHJpYnV0aW9uXCIsXG4gIFwiSHlwb3RoZXNpc1Rlc3REYXRhXCIsXG4gIFwiSVwiLFxuICBcIkljb25EYXRhXCIsXG4gIFwiSWNvbml6ZVwiLFxuICBcIkljb25pemVkT2JqZWN0XCIsXG4gIFwiSWNvblJ1bGVzXCIsXG4gIFwiSWNvc2FoZWRyb25cIixcbiAgXCJJZGVudGl0eVwiLFxuICBcIklkZW50aXR5TWF0cml4XCIsXG4gIFwiSWZcIixcbiAgXCJJZkNvbXBpbGVkXCIsXG4gIFwiSWdub3JlQ2FzZVwiLFxuICBcIklnbm9yZURpYWNyaXRpY3NcIixcbiAgXCJJZ25vcmVJc290b3Blc1wiLFxuICBcIklnbm9yZVB1bmN0dWF0aW9uXCIsXG4gIFwiSWdub3JlU3BlbGxDaGVja1wiLFxuICBcIklnbm9yZVN0ZXJlb2NoZW1pc3RyeVwiLFxuICBcIklnbm9yaW5nSW5hY3RpdmVcIixcbiAgXCJJbVwiLFxuICBcIkltYWdlXCIsXG4gIFwiSW1hZ2UzRFwiLFxuICBcIkltYWdlM0RQcm9qZWN0aW9uXCIsXG4gIFwiSW1hZ2UzRFNsaWNlc1wiLFxuICBcIkltYWdlQWNjdW11bGF0ZVwiLFxuICBcIkltYWdlQWRkXCIsXG4gIFwiSW1hZ2VBZGp1c3RcIixcbiAgXCJJbWFnZUFsaWduXCIsXG4gIFwiSW1hZ2VBcHBseVwiLFxuICBcIkltYWdlQXBwbHlJbmRleGVkXCIsXG4gIFwiSW1hZ2VBc3BlY3RSYXRpb1wiLFxuICBcIkltYWdlQXNzZW1ibGVcIixcbiAgXCJJbWFnZUF1Z21lbnRhdGlvbkxheWVyXCIsXG4gIFwiSW1hZ2VCb3VuZGluZ0JveGVzXCIsXG4gIFwiSW1hZ2VDYWNoZVwiLFxuICBcIkltYWdlQ2FjaGVWYWxpZFwiLFxuICBcIkltYWdlQ2FwdHVyZVwiLFxuICBcIkltYWdlQ2FwdHVyZUZ1bmN0aW9uXCIsXG4gIFwiSW1hZ2VDYXNlc1wiLFxuICBcIkltYWdlQ2hhbm5lbHNcIixcbiAgXCJJbWFnZUNsaXBcIixcbiAgXCJJbWFnZUNvbGxhZ2VcIixcbiAgXCJJbWFnZUNvbG9yU3BhY2VcIixcbiAgXCJJbWFnZUNvbXBvc2VcIixcbiAgXCJJbWFnZUNvbnRhaW5zUVwiLFxuICBcIkltYWdlQ29udGVudHNcIixcbiAgXCJJbWFnZUNvbnZvbHZlXCIsXG4gIFwiSW1hZ2VDb29jY3VycmVuY2VcIixcbiAgXCJJbWFnZUNvcm5lcnNcIixcbiAgXCJJbWFnZUNvcnJlbGF0ZVwiLFxuICBcIkltYWdlQ29ycmVzcG9uZGluZ1BvaW50c1wiLFxuICBcIkltYWdlQ3JvcFwiLFxuICBcIkltYWdlRGF0YVwiLFxuICBcIkltYWdlRGVjb252b2x2ZVwiLFxuICBcIkltYWdlRGVtb3NhaWNcIixcbiAgXCJJbWFnZURpZmZlcmVuY2VcIixcbiAgXCJJbWFnZURpbWVuc2lvbnNcIixcbiAgXCJJbWFnZURpc3BsYWNlbWVudHNcIixcbiAgXCJJbWFnZURpc3RhbmNlXCIsXG4gIFwiSW1hZ2VFZGl0TW9kZVwiLFxuICBcIkltYWdlRWZmZWN0XCIsXG4gIFwiSW1hZ2VFeHBvc3VyZUNvbWJpbmVcIixcbiAgXCJJbWFnZUZlYXR1cmVUcmFja1wiLFxuICBcIkltYWdlRmlsZUFwcGx5XCIsXG4gIFwiSW1hZ2VGaWxlRmlsdGVyXCIsXG4gIFwiSW1hZ2VGaWxlU2NhblwiLFxuICBcIkltYWdlRmlsdGVyXCIsXG4gIFwiSW1hZ2VGb2N1c0NvbWJpbmVcIixcbiAgXCJJbWFnZUZvcmVzdGluZ0NvbXBvbmVudHNcIixcbiAgXCJJbWFnZUZvcm1hdHRpbmdXaWR0aFwiLFxuICBcIkltYWdlRm9yd2FyZFRyYW5zZm9ybWF0aW9uXCIsXG4gIFwiSW1hZ2VHcmFwaGljc1wiLFxuICBcIkltYWdlSGlzdG9ncmFtXCIsXG4gIFwiSW1hZ2VJZGVudGlmeVwiLFxuICBcIkltYWdlSW5zdGFuY2VRXCIsXG4gIFwiSW1hZ2VLZXlwb2ludHNcIixcbiAgXCJJbWFnZUxhYmVsc1wiLFxuICBcIkltYWdlTGVnZW5kc1wiLFxuICBcIkltYWdlTGV2ZWxzXCIsXG4gIFwiSW1hZ2VMaW5lc1wiLFxuICBcIkltYWdlTWFyZ2luc1wiLFxuICBcIkltYWdlTWFya2VyXCIsXG4gIFwiSW1hZ2VNYXJrZXJzXCIsXG4gIFwiSW1hZ2VNZWFzdXJlbWVudHNcIixcbiAgXCJJbWFnZU1lc2hcIixcbiAgXCJJbWFnZU11bHRpcGx5XCIsXG4gIFwiSW1hZ2VPZmZzZXRcIixcbiAgXCJJbWFnZVBhZFwiLFxuICBcIkltYWdlUGFkZGluZ1wiLFxuICBcIkltYWdlUGFydGl0aW9uXCIsXG4gIFwiSW1hZ2VQZXJpb2RvZ3JhbVwiLFxuICBcIkltYWdlUGVyc3BlY3RpdmVUcmFuc2Zvcm1hdGlvblwiLFxuICBcIkltYWdlUG9zaXRpb25cIixcbiAgXCJJbWFnZVByZXZpZXdGdW5jdGlvblwiLFxuICBcIkltYWdlUHlyYW1pZFwiLFxuICBcIkltYWdlUHlyYW1pZEFwcGx5XCIsXG4gIFwiSW1hZ2VRXCIsXG4gIFwiSW1hZ2VSYW5nZUNhY2hlXCIsXG4gIFwiSW1hZ2VSZWNvbG9yXCIsXG4gIFwiSW1hZ2VSZWZsZWN0XCIsXG4gIFwiSW1hZ2VSZWdpb25cIixcbiAgXCJJbWFnZVJlc2l6ZVwiLFxuICBcIkltYWdlUmVzb2x1dGlvblwiLFxuICBcIkltYWdlUmVzdHlsZVwiLFxuICBcIkltYWdlUm90YXRlXCIsXG4gIFwiSW1hZ2VSb3RhdGVkXCIsXG4gIFwiSW1hZ2VTYWxpZW5jeUZpbHRlclwiLFxuICBcIkltYWdlU2NhbGVkXCIsXG4gIFwiSW1hZ2VTY2FuXCIsXG4gIFwiSW1hZ2VTaXplXCIsXG4gIFwiSW1hZ2VTaXplQWN0aW9uXCIsXG4gIFwiSW1hZ2VTaXplQ2FjaGVcIixcbiAgXCJJbWFnZVNpemVNdWx0aXBsaWVyc1wiLFxuICBcIkltYWdlU2l6ZVJhd1wiLFxuICBcIkltYWdlU3RpdGNoXCIsXG4gIFwiSW1hZ2VTdWJ0cmFjdFwiLFxuICBcIkltYWdlVGFrZVwiLFxuICBcIkltYWdlVHJhbnNmb3JtYXRpb25cIixcbiAgXCJJbWFnZVRyaW1cIixcbiAgXCJJbWFnZVR5cGVcIixcbiAgXCJJbWFnZVZhbHVlXCIsXG4gIFwiSW1hZ2VWYWx1ZVBvc2l0aW9uc1wiLFxuICBcIkltYWdlVmVjdG9yc2NvcGVQbG90XCIsXG4gIFwiSW1hZ2VXYXZlZm9ybVBsb3RcIixcbiAgXCJJbWFnaW5nRGV2aWNlXCIsXG4gIFwiSW1wbGljaXREXCIsXG4gIFwiSW1wbGljaXRSZWdpb25cIixcbiAgXCJJbXBsaWVzXCIsXG4gIFwiSW1wb3J0XCIsXG4gIFwiSW1wb3J0QXV0b1JlcGxhY2VtZW50c1wiLFxuICBcIkltcG9ydEJ5dGVBcnJheVwiLFxuICBcIkltcG9ydGVkT2JqZWN0XCIsXG4gIFwiSW1wb3J0T3B0aW9uc1wiLFxuICBcIkltcG9ydFN0cmluZ1wiLFxuICBcIkltcHJvdmVtZW50SW1wb3J0YW5jZVwiLFxuICBcIkluXCIsXG4gIFwiSW5hY3RpdmF0ZVwiLFxuICBcIkluYWN0aXZlXCIsXG4gIFwiSW5hY3RpdmVTdHlsZVwiLFxuICBcIkluY2lkZW5jZUdyYXBoXCIsXG4gIFwiSW5jaWRlbmNlTGlzdFwiLFxuICBcIkluY2lkZW5jZU1hdHJpeFwiLFxuICBcIkluY2x1ZGVBcm9tYXRpY0JvbmRzXCIsXG4gIFwiSW5jbHVkZUNvbnN0YW50QmFzaXNcIixcbiAgXCJJbmNsdWRlZENvbnRleHRzXCIsXG4gIFwiSW5jbHVkZURlZmluaXRpb25zXCIsXG4gIFwiSW5jbHVkZURpcmVjdG9yaWVzXCIsXG4gIFwiSW5jbHVkZUZpbGVFeHRlbnNpb25cIixcbiAgXCJJbmNsdWRlR2VuZXJhdG9yVGFza3NcIixcbiAgXCJJbmNsdWRlSHlkcm9nZW5zXCIsXG4gIFwiSW5jbHVkZUluZmxlY3Rpb25zXCIsXG4gIFwiSW5jbHVkZU1ldGFJbmZvcm1hdGlvblwiLFxuICBcIkluY2x1ZGVQb2RzXCIsXG4gIFwiSW5jbHVkZVF1YW50aXRpZXNcIixcbiAgXCJJbmNsdWRlUmVsYXRlZFRhYmxlc1wiLFxuICBcIkluY2x1ZGVTaW5ndWxhclNvbHV0aW9uc1wiLFxuICBcIkluY2x1ZGVTaW5ndWxhclRlcm1cIixcbiAgXCJJbmNsdWRlV2luZG93VGltZXNcIixcbiAgXCJJbmNyZW1lbnRcIixcbiAgXCJJbmRlZmluaXRlTWF0cml4UVwiLFxuICBcIkluZGVudFwiLFxuICBcIkluZGVudGluZ05ld2xpbmVTcGFjaW5nc1wiLFxuICBcIkluZGVudE1heEZyYWN0aW9uXCIsXG4gIFwiSW5kZXBlbmRlbmNlVGVzdFwiLFxuICBcIkluZGVwZW5kZW50RWRnZVNldFFcIixcbiAgXCJJbmRlcGVuZGVudFBoeXNpY2FsUXVhbnRpdHlcIixcbiAgXCJJbmRlcGVuZGVudFVuaXRcIixcbiAgXCJJbmRlcGVuZGVudFVuaXREaW1lbnNpb25cIixcbiAgXCJJbmRlcGVuZGVudFZlcnRleFNldFFcIixcbiAgXCJJbmRldGVybWluYXRlXCIsXG4gIFwiSW5kZXRlcm1pbmF0ZVRocmVzaG9sZFwiLFxuICBcIkluZGV4Q3JlYXRpb25PcHRpb25zXCIsXG4gIFwiSW5kZXhlZFwiLFxuICBcIkluZGV4RWRnZVRhZ2dlZEdyYXBoXCIsXG4gIFwiSW5kZXhHcmFwaFwiLFxuICBcIkluZGV4VGFnXCIsXG4gIFwiSW5lcXVhbGl0eVwiLFxuICBcIkluZXJ0RXZhbHVhdGVcIixcbiAgXCJJbmVydEV4cHJlc3Npb25cIixcbiAgXCJJbmV4YWN0TnVtYmVyUVwiLFxuICBcIkluZXhhY3ROdW1iZXJzXCIsXG4gIFwiSW5maW5pdGVGdXR1cmVcIixcbiAgXCJJbmZpbml0ZUxpbmVcIixcbiAgXCJJbmZpbml0ZUxpbmVUaHJvdWdoXCIsXG4gIFwiSW5maW5pdGVQYXN0XCIsXG4gIFwiSW5maW5pdGVQbGFuZVwiLFxuICBcIkluZmluaXR5XCIsXG4gIFwiSW5maXhcIixcbiAgXCJJbmZsYXRpb25BZGp1c3RcIixcbiAgXCJJbmZsYXRpb25NZXRob2RcIixcbiAgXCJJbmZvcm1hdGlvblwiLFxuICBcIkluZm9ybWF0aW9uRGF0YVwiLFxuICBcIkluZm9ybWF0aW9uRGF0YUdyaWRcIixcbiAgXCJJbmhlcml0ZWRcIixcbiAgXCJJbmhlcml0U2NvcGVcIixcbiAgXCJJbmhvbW9nZW5lb3VzUG9pc3NvblBvaW50UHJvY2Vzc1wiLFxuICBcIkluaG9tb2dlbmVvdXNQb2lzc29uUHJvY2Vzc1wiLFxuICBcIkluaXRpYWxFdmFsdWF0aW9uSGlzdG9yeVwiLFxuICBcIkluaXRpYWxpemF0aW9uXCIsXG4gIFwiSW5pdGlhbGl6YXRpb25DZWxsXCIsXG4gIFwiSW5pdGlhbGl6YXRpb25DZWxsRXZhbHVhdGlvblwiLFxuICBcIkluaXRpYWxpemF0aW9uQ2VsbFdhcm5pbmdcIixcbiAgXCJJbml0aWFsaXphdGlvbk9iamVjdFwiLFxuICBcIkluaXRpYWxpemF0aW9uT2JqZWN0c1wiLFxuICBcIkluaXRpYWxpemF0aW9uVmFsdWVcIixcbiAgXCJJbml0aWFsaXplXCIsXG4gIFwiSW5pdGlhbFNlZWRpbmdcIixcbiAgXCJJbmxpbmVDb3VudGVyQXNzaWdubWVudHNcIixcbiAgXCJJbmxpbmVDb3VudGVySW5jcmVtZW50c1wiLFxuICBcIklubGluZVJ1bGVzXCIsXG4gIFwiSW5uZXJcIixcbiAgXCJJbm5lclBvbHlnb25cIixcbiAgXCJJbm5lclBvbHloZWRyb25cIixcbiAgXCJJbnBhaW50XCIsXG4gIFwiSW5wdXRcIixcbiAgXCJJbnB1dEFsaWFzZXNcIixcbiAgXCJJbnB1dEFzc3VtcHRpb25zXCIsXG4gIFwiSW5wdXRBdXRvUmVwbGFjZW1lbnRzXCIsXG4gIFwiSW5wdXRGaWVsZFwiLFxuICBcIklucHV0RmllbGRCb3hcIixcbiAgXCJJbnB1dEZpZWxkQm94T3B0aW9uc1wiLFxuICBcIklucHV0Rm9ybVwiLFxuICBcIklucHV0R3JvdXBpbmdcIixcbiAgXCJJbnB1dE5hbWVQYWNrZXRcIixcbiAgXCJJbnB1dE5vdGVib29rXCIsXG4gIFwiSW5wdXRQYWNrZXRcIixcbiAgXCJJbnB1dFBvcnRzXCIsXG4gIFwiSW5wdXRTZXR0aW5nc1wiLFxuICBcIklucHV0U3RyZWFtXCIsXG4gIFwiSW5wdXRTdHJpbmdcIixcbiAgXCJJbnB1dFN0cmluZ1BhY2tldFwiLFxuICBcIklucHV0VG9Cb3hGb3JtUGFja2V0XCIsXG4gIFwiSW5zZXJ0XCIsXG4gIFwiSW5zZXJ0aW9uRnVuY3Rpb25cIixcbiAgXCJJbnNlcnRpb25Qb2ludE9iamVjdFwiLFxuICBcIkluc2VydExpbmVicmVha3NcIixcbiAgXCJJbnNlcnRSZXN1bHRzXCIsXG4gIFwiSW5zZXRcIixcbiAgXCJJbnNldDNEQm94XCIsXG4gIFwiSW5zZXQzREJveE9wdGlvbnNcIixcbiAgXCJJbnNldEJveFwiLFxuICBcIkluc2V0Qm94T3B0aW9uc1wiLFxuICBcIkluc3BoZXJlXCIsXG4gIFwiSW5zdGFsbFwiLFxuICBcIkluc3RhbGxTZXJ2aWNlXCIsXG4gIFwiSW5zdGFuY2VOb3JtYWxpemF0aW9uTGF5ZXJcIixcbiAgXCJJblN0cmluZ1wiLFxuICBcIkludGVnZXJcIixcbiAgXCJJbnRlZ2VyRGlnaXRzXCIsXG4gIFwiSW50ZWdlckV4cG9uZW50XCIsXG4gIFwiSW50ZWdlckxlbmd0aFwiLFxuICBcIkludGVnZXJOYW1lXCIsXG4gIFwiSW50ZWdlclBhcnRcIixcbiAgXCJJbnRlZ2VyUGFydGl0aW9uc1wiLFxuICBcIkludGVnZXJRXCIsXG4gIFwiSW50ZWdlclJldmVyc2VcIixcbiAgXCJJbnRlZ2Vyc1wiLFxuICBcIkludGVnZXJTdHJpbmdcIixcbiAgXCJJbnRlZ3JhbFwiLFxuICBcIkludGVncmF0ZVwiLFxuICBcIkludGVncmF0ZUNoYW5nZVZhcmlhYmxlc1wiLFxuICBcIkludGVyYWN0aXZlXCIsXG4gIFwiSW50ZXJhY3RpdmVUcmFkaW5nQ2hhcnRcIixcbiAgXCJJbnRlcmZhY2VTd2l0Y2hlZFwiLFxuICBcIkludGVybGFjZWRcIixcbiAgXCJJbnRlcmxlYXZpbmdcIixcbiAgXCJJbnRlcm5hbGx5QmFsYW5jZWREZWNvbXBvc2l0aW9uXCIsXG4gIFwiSW50ZXJwb2xhdGluZ0Z1bmN0aW9uXCIsXG4gIFwiSW50ZXJwb2xhdGluZ1BvbHlub21pYWxcIixcbiAgXCJJbnRlcnBvbGF0aW9uXCIsXG4gIFwiSW50ZXJwb2xhdGlvbk9yZGVyXCIsXG4gIFwiSW50ZXJwb2xhdGlvblBvaW50c1wiLFxuICBcIkludGVycG9sYXRpb25QcmVjaXNpb25cIixcbiAgXCJJbnRlcnByZXRhdGlvblwiLFxuICBcIkludGVycHJldGF0aW9uQm94XCIsXG4gIFwiSW50ZXJwcmV0YXRpb25Cb3hPcHRpb25zXCIsXG4gIFwiSW50ZXJwcmV0YXRpb25GdW5jdGlvblwiLFxuICBcIkludGVycHJldGVyXCIsXG4gIFwiSW50ZXJwcmV0VGVtcGxhdGVcIixcbiAgXCJJbnRlcnF1YXJ0aWxlUmFuZ2VcIixcbiAgXCJJbnRlcnJ1cHRcIixcbiAgXCJJbnRlcnJ1cHRTZXR0aW5nc1wiLFxuICBcIkludGVyc2VjdGVkRW50aXR5Q2xhc3NcIixcbiAgXCJJbnRlcnNlY3RpbmdRXCIsXG4gIFwiSW50ZXJzZWN0aW9uXCIsXG4gIFwiSW50ZXJ2YWxcIixcbiAgXCJJbnRlcnZhbEludGVyc2VjdGlvblwiLFxuICBcIkludGVydmFsTWFya2Vyc1wiLFxuICBcIkludGVydmFsTWFya2Vyc1N0eWxlXCIsXG4gIFwiSW50ZXJ2YWxNZW1iZXJRXCIsXG4gIFwiSW50ZXJ2YWxTbGlkZXJcIixcbiAgXCJJbnRlcnZhbFVuaW9uXCIsXG4gIFwiSW50b1wiLFxuICBcIkludmVyc2VcIixcbiAgXCJJbnZlcnNlQmV0YVJlZ3VsYXJpemVkXCIsXG4gIFwiSW52ZXJzZUJpbGF0ZXJhbExhcGxhY2VUcmFuc2Zvcm1cIixcbiAgXCJJbnZlcnNlQmlsYXRlcmFsWlRyYW5zZm9ybVwiLFxuICBcIkludmVyc2VDREZcIixcbiAgXCJJbnZlcnNlQ2hpU3F1YXJlRGlzdHJpYnV0aW9uXCIsXG4gIFwiSW52ZXJzZUNvbnRpbnVvdXNXYXZlbGV0VHJhbnNmb3JtXCIsXG4gIFwiSW52ZXJzZURpc3RhbmNlVHJhbnNmb3JtXCIsXG4gIFwiSW52ZXJzZUVsbGlwdGljTm9tZVFcIixcbiAgXCJJbnZlcnNlRXJmXCIsXG4gIFwiSW52ZXJzZUVyZmNcIixcbiAgXCJJbnZlcnNlRm91cmllclwiLFxuICBcIkludmVyc2VGb3VyaWVyQ29zVHJhbnNmb3JtXCIsXG4gIFwiSW52ZXJzZUZvdXJpZXJTZXF1ZW5jZVRyYW5zZm9ybVwiLFxuICBcIkludmVyc2VGb3VyaWVyU2luVHJhbnNmb3JtXCIsXG4gIFwiSW52ZXJzZUZvdXJpZXJUcmFuc2Zvcm1cIixcbiAgXCJJbnZlcnNlRnVuY3Rpb25cIixcbiAgXCJJbnZlcnNlRnVuY3Rpb25zXCIsXG4gIFwiSW52ZXJzZUdhbW1hRGlzdHJpYnV0aW9uXCIsXG4gIFwiSW52ZXJzZUdhbW1hUmVndWxhcml6ZWRcIixcbiAgXCJJbnZlcnNlR2F1c3NpYW5EaXN0cmlidXRpb25cIixcbiAgXCJJbnZlcnNlR3VkZXJtYW5uaWFuXCIsXG4gIFwiSW52ZXJzZUhhbmtlbFRyYW5zZm9ybVwiLFxuICBcIkludmVyc2VIYXZlcnNpbmVcIixcbiAgXCJJbnZlcnNlSW1hZ2VQeXJhbWlkXCIsXG4gIFwiSW52ZXJzZUphY29iaUNEXCIsXG4gIFwiSW52ZXJzZUphY29iaUNOXCIsXG4gIFwiSW52ZXJzZUphY29iaUNTXCIsXG4gIFwiSW52ZXJzZUphY29iaURDXCIsXG4gIFwiSW52ZXJzZUphY29iaUROXCIsXG4gIFwiSW52ZXJzZUphY29iaURTXCIsXG4gIFwiSW52ZXJzZUphY29iaU5DXCIsXG4gIFwiSW52ZXJzZUphY29iaU5EXCIsXG4gIFwiSW52ZXJzZUphY29iaU5TXCIsXG4gIFwiSW52ZXJzZUphY29iaVNDXCIsXG4gIFwiSW52ZXJzZUphY29iaVNEXCIsXG4gIFwiSW52ZXJzZUphY29iaVNOXCIsXG4gIFwiSW52ZXJzZUxhcGxhY2VUcmFuc2Zvcm1cIixcbiAgXCJJbnZlcnNlTWVsbGluVHJhbnNmb3JtXCIsXG4gIFwiSW52ZXJzZVBlcm11dGF0aW9uXCIsXG4gIFwiSW52ZXJzZVJhZG9uXCIsXG4gIFwiSW52ZXJzZVJhZG9uVHJhbnNmb3JtXCIsXG4gIFwiSW52ZXJzZVNlcmllc1wiLFxuICBcIkludmVyc2VTaG9ydFRpbWVGb3VyaWVyXCIsXG4gIFwiSW52ZXJzZVNwZWN0cm9ncmFtXCIsXG4gIFwiSW52ZXJzZVN1cnZpdmFsRnVuY3Rpb25cIixcbiAgXCJJbnZlcnNlVHJhbnNmb3JtZWRSZWdpb25cIixcbiAgXCJJbnZlcnNlV2F2ZWxldFRyYW5zZm9ybVwiLFxuICBcIkludmVyc2VXZWllcnN0cmFzc1BcIixcbiAgXCJJbnZlcnNlV2lzaGFydE1hdHJpeERpc3RyaWJ1dGlvblwiLFxuICBcIkludmVyc2VaVHJhbnNmb3JtXCIsXG4gIFwiSW52aXNpYmxlXCIsXG4gIFwiSW52aXNpYmxlQXBwbGljYXRpb25cIixcbiAgXCJJbnZpc2libGVUaW1lc1wiLFxuICBcIklQQWRkcmVzc1wiLFxuICBcIklycmVkdWNpYmxlUG9seW5vbWlhbFFcIixcbiAgXCJJc2xhbmREYXRhXCIsXG4gIFwiSXNvbGF0aW5nSW50ZXJ2YWxcIixcbiAgXCJJc29tb3JwaGljR3JhcGhRXCIsXG4gIFwiSXNvbW9ycGhpY1N1YmdyYXBoUVwiLFxuICBcIklzb3RvcGVEYXRhXCIsXG4gIFwiSXRhbGljXCIsXG4gIFwiSXRlbVwiLFxuICBcIkl0ZW1Bc3BlY3RSYXRpb1wiLFxuICBcIkl0ZW1Cb3hcIixcbiAgXCJJdGVtQm94T3B0aW9uc1wiLFxuICBcIkl0ZW1EaXNwbGF5RnVuY3Rpb25cIixcbiAgXCJJdGVtU2l6ZVwiLFxuICBcIkl0ZW1TdHlsZVwiLFxuICBcIkl0b1Byb2Nlc3NcIixcbiAgXCJKYWNjYXJkRGlzc2ltaWxhcml0eVwiLFxuICBcIkphY29iaUFtcGxpdHVkZVwiLFxuICBcIkphY29iaWFuXCIsXG4gIFwiSmFjb2JpQ0RcIixcbiAgXCJKYWNvYmlDTlwiLFxuICBcIkphY29iaUNTXCIsXG4gIFwiSmFjb2JpRENcIixcbiAgXCJKYWNvYmlETlwiLFxuICBcIkphY29iaURTXCIsXG4gIFwiSmFjb2JpRXBzaWxvblwiLFxuICBcIkphY29iaU5DXCIsXG4gIFwiSmFjb2JpTkRcIixcbiAgXCJKYWNvYmlOU1wiLFxuICBcIkphY29iaVBcIixcbiAgXCJKYWNvYmlTQ1wiLFxuICBcIkphY29iaVNEXCIsXG4gIFwiSmFjb2JpU05cIixcbiAgXCJKYWNvYmlTeW1ib2xcIixcbiAgXCJKYWNvYmlaZXRhXCIsXG4gIFwiSmFjb2JpWk5cIixcbiAgXCJKYW5rb0dyb3VwSjFcIixcbiAgXCJKYW5rb0dyb3VwSjJcIixcbiAgXCJKYW5rb0dyb3VwSjNcIixcbiAgXCJKYW5rb0dyb3VwSjRcIixcbiAgXCJKYXJxdWVCZXJhQUxNVGVzdFwiLFxuICBcIkpvaG5zb25EaXN0cmlidXRpb25cIixcbiAgXCJKb2luXCIsXG4gIFwiSm9pbkFjcm9zc1wiLFxuICBcIkpvaW5lZFwiLFxuICBcIkpvaW5lZEN1cnZlXCIsXG4gIFwiSm9pbmVkQ3VydmVCb3hcIixcbiAgXCJKb2luZWRDdXJ2ZUJveE9wdGlvbnNcIixcbiAgXCJKb2luRm9ybVwiLFxuICBcIkpvcmRhbkRlY29tcG9zaXRpb25cIixcbiAgXCJKb3JkYW5Nb2RlbERlY29tcG9zaXRpb25cIixcbiAgXCJKdWxpYW5EYXRlXCIsXG4gIFwiSnVsaWFTZXRCb2V0dGNoZXJcIixcbiAgXCJKdWxpYVNldEl0ZXJhdGlvbkNvdW50XCIsXG4gIFwiSnVsaWFTZXRQbG90XCIsXG4gIFwiSnVsaWFTZXRQb2ludHNcIixcbiAgXCJLXCIsXG4gIFwiS2FnaUNoYXJ0XCIsXG4gIFwiS2Fpc2VyQmVzc2VsV2luZG93XCIsXG4gIFwiS2Fpc2VyV2luZG93XCIsXG4gIFwiS2FsbWFuRXN0aW1hdG9yXCIsXG4gIFwiS2FsbWFuRmlsdGVyXCIsXG4gIFwiS2FyaHVuZW5Mb2V2ZURlY29tcG9zaXRpb25cIixcbiAgXCJLYXJ5VHJlZVwiLFxuICBcIkthdHpDZW50cmFsaXR5XCIsXG4gIFwiS0NvcmVDb21wb25lbnRzXCIsXG4gIFwiS0Rpc3RyaWJ1dGlvblwiLFxuICBcIktFZGdlQ29ubmVjdGVkQ29tcG9uZW50c1wiLFxuICBcIktFZGdlQ29ubmVjdGVkR3JhcGhRXCIsXG4gIFwiS2VlcEV4aXN0aW5nVmVyc2lvblwiLFxuICBcIktlbHZpbkJlaVwiLFxuICBcIktlbHZpbkJlclwiLFxuICBcIktlbHZpbktlaVwiLFxuICBcIktlbHZpbktlclwiLFxuICBcIktlbmRhbGxUYXVcIixcbiAgXCJLZW5kYWxsVGF1VGVzdFwiLFxuICBcIktlcm5lbENvbmZpZ3VyYXRpb25cIixcbiAgXCJLZXJuZWxFeGVjdXRlXCIsXG4gIFwiS2VybmVsRnVuY3Rpb25cIixcbiAgXCJLZXJuZWxNaXh0dXJlRGlzdHJpYnV0aW9uXCIsXG4gIFwiS2VybmVsT2JqZWN0XCIsXG4gIFwiS2VybmVsc1wiLFxuICBcIktldFwiLFxuICBcIktleVwiLFxuICBcIktleUNvbGxpc2lvbkZ1bmN0aW9uXCIsXG4gIFwiS2V5Q29tcGxlbWVudFwiLFxuICBcIktleURyb3BcIixcbiAgXCJLZXlEcm9wRnJvbVwiLFxuICBcIktleUV4aXN0c1FcIixcbiAgXCJLZXlGcmVlUVwiLFxuICBcIktleUludGVyc2VjdGlvblwiLFxuICBcIktleU1hcFwiLFxuICBcIktleU1lbWJlclFcIixcbiAgXCJLZXlwb2ludFN0cmVuZ3RoXCIsXG4gIFwiS2V5c1wiLFxuICBcIktleVNlbGVjdFwiLFxuICBcIktleVNvcnRcIixcbiAgXCJLZXlTb3J0QnlcIixcbiAgXCJLZXlUYWtlXCIsXG4gIFwiS2V5VW5pb25cIixcbiAgXCJLZXlWYWx1ZU1hcFwiLFxuICBcIktleVZhbHVlUGF0dGVyblwiLFxuICBcIktoaW5jaGluXCIsXG4gIFwiS2lsbFByb2Nlc3NcIixcbiAgXCJLaXJjaGhvZmZHcmFwaFwiLFxuICBcIktpcmNoaG9mZk1hdHJpeFwiLFxuICBcIktsZWluSW52YXJpYW50SlwiLFxuICBcIktuYXBzYWNrU29sdmVcIixcbiAgXCJLbmlnaHRUb3VyR3JhcGhcIixcbiAgXCJLbm90RGF0YVwiLFxuICBcIktub3duVW5pdFFcIixcbiAgXCJLb2NoQ3VydmVcIixcbiAgXCJLb2xtb2dvcm92U21pcm5vdlRlc3RcIixcbiAgXCJLcm9uZWNrZXJEZWx0YVwiLFxuICBcIktyb25lY2tlck1vZGVsRGVjb21wb3NpdGlvblwiLFxuICBcIktyb25lY2tlclByb2R1Y3RcIixcbiAgXCJLcm9uZWNrZXJTeW1ib2xcIixcbiAgXCJLdWlwZXJUZXN0XCIsXG4gIFwiS3VtYXJhc3dhbXlEaXN0cmlidXRpb25cIixcbiAgXCJLdXJ0b3Npc1wiLFxuICBcIkt1d2FoYXJhRmlsdGVyXCIsXG4gIFwiS1ZlcnRleENvbm5lY3RlZENvbXBvbmVudHNcIixcbiAgXCJLVmVydGV4Q29ubmVjdGVkR3JhcGhRXCIsXG4gIFwiTEFCQ29sb3JcIixcbiAgXCJMYWJlbFwiLFxuICBcIkxhYmVsZWRcIixcbiAgXCJMYWJlbGVkU2xpZGVyXCIsXG4gIFwiTGFiZWxpbmdGdW5jdGlvblwiLFxuICBcIkxhYmVsaW5nU2l6ZVwiLFxuICBcIkxhYmVsU3R5bGVcIixcbiAgXCJMYWJlbFZpc2liaWxpdHlcIixcbiAgXCJMYWd1ZXJyZUxcIixcbiAgXCJMYWtlRGF0YVwiLFxuICBcIkxhbWJkYUNvbXBvbmVudHNcIixcbiAgXCJMYW1iZXJ0V1wiLFxuICBcIkxhbWVDXCIsXG4gIFwiTGFtZUNQcmltZVwiLFxuICBcIkxhbWVFaWdlbnZhbHVlQVwiLFxuICBcIkxhbWVFaWdlbnZhbHVlQlwiLFxuICBcIkxhbWVTXCIsXG4gIFwiTGFtZVNQcmltZVwiLFxuICBcIkxhbWluYURhdGFcIixcbiAgXCJMYW5jem9zV2luZG93XCIsXG4gIFwiTGFuZGF1RGlzdHJpYnV0aW9uXCIsXG4gIFwiTGFuZ3VhZ2VcIixcbiAgXCJMYW5ndWFnZUNhdGVnb3J5XCIsXG4gIFwiTGFuZ3VhZ2VEYXRhXCIsXG4gIFwiTGFuZ3VhZ2VJZGVudGlmeVwiLFxuICBcIkxhbmd1YWdlT3B0aW9uc1wiLFxuICBcIkxhcGxhY2VEaXN0cmlidXRpb25cIixcbiAgXCJMYXBsYWNlVHJhbnNmb3JtXCIsXG4gIFwiTGFwbGFjaWFuXCIsXG4gIFwiTGFwbGFjaWFuRmlsdGVyXCIsXG4gIFwiTGFwbGFjaWFuR2F1c3NpYW5GaWx0ZXJcIixcbiAgXCJMYXBsYWNpYW5QREVUZXJtXCIsXG4gIFwiTGFyZ2VcIixcbiAgXCJMYXJnZXJcIixcbiAgXCJMYXN0XCIsXG4gIFwiTGF0aXR1ZGVcIixcbiAgXCJMYXRpdHVkZUxvbmdpdHVkZVwiLFxuICBcIkxhdHRpY2VEYXRhXCIsXG4gIFwiTGF0dGljZVJlZHVjZVwiLFxuICBcIkxhdW5jaFwiLFxuICBcIkxhdW5jaEtlcm5lbHNcIixcbiAgXCJMYXllcmVkR3JhcGhQbG90XCIsXG4gIFwiTGF5ZXJlZEdyYXBoUGxvdDNEXCIsXG4gIFwiTGF5ZXJTaXplRnVuY3Rpb25cIixcbiAgXCJMYXlvdXRJbmZvcm1hdGlvblwiLFxuICBcIkxDSENvbG9yXCIsXG4gIFwiTENNXCIsXG4gIFwiTGVhZGVyU2l6ZVwiLFxuICBcIkxlYWZDb3VudFwiLFxuICBcIkxlYXBWYXJpYW50XCIsXG4gIFwiTGVhcFllYXJRXCIsXG4gIFwiTGVhcm5EaXN0cmlidXRpb25cIixcbiAgXCJMZWFybmVkRGlzdHJpYnV0aW9uXCIsXG4gIFwiTGVhcm5pbmdSYXRlXCIsXG4gIFwiTGVhcm5pbmdSYXRlTXVsdGlwbGllcnNcIixcbiAgXCJMZWFzdFNxdWFyZXNcIixcbiAgXCJMZWFzdFNxdWFyZXNGaWx0ZXJLZXJuZWxcIixcbiAgXCJMZWZ0XCIsXG4gIFwiTGVmdEFycm93XCIsXG4gIFwiTGVmdEFycm93QmFyXCIsXG4gIFwiTGVmdEFycm93UmlnaHRBcnJvd1wiLFxuICBcIkxlZnREb3duVGVlVmVjdG9yXCIsXG4gIFwiTGVmdERvd25WZWN0b3JcIixcbiAgXCJMZWZ0RG93blZlY3RvckJhclwiLFxuICBcIkxlZnRSaWdodEFycm93XCIsXG4gIFwiTGVmdFJpZ2h0VmVjdG9yXCIsXG4gIFwiTGVmdFRlZVwiLFxuICBcIkxlZnRUZWVBcnJvd1wiLFxuICBcIkxlZnRUZWVWZWN0b3JcIixcbiAgXCJMZWZ0VHJpYW5nbGVcIixcbiAgXCJMZWZ0VHJpYW5nbGVCYXJcIixcbiAgXCJMZWZ0VHJpYW5nbGVFcXVhbFwiLFxuICBcIkxlZnRVcERvd25WZWN0b3JcIixcbiAgXCJMZWZ0VXBUZWVWZWN0b3JcIixcbiAgXCJMZWZ0VXBWZWN0b3JcIixcbiAgXCJMZWZ0VXBWZWN0b3JCYXJcIixcbiAgXCJMZWZ0VmVjdG9yXCIsXG4gIFwiTGVmdFZlY3RvckJhclwiLFxuICBcIkxlZ2VuZEFwcGVhcmFuY2VcIixcbiAgXCJMZWdlbmRlZFwiLFxuICBcIkxlZ2VuZEZ1bmN0aW9uXCIsXG4gIFwiTGVnZW5kTGFiZWxcIixcbiAgXCJMZWdlbmRMYXlvdXRcIixcbiAgXCJMZWdlbmRNYXJnaW5zXCIsXG4gIFwiTGVnZW5kTWFya2Vyc1wiLFxuICBcIkxlZ2VuZE1hcmtlclNpemVcIixcbiAgXCJMZWdlbmRyZVBcIixcbiAgXCJMZWdlbmRyZVFcIixcbiAgXCJMZWdlbmRyZVR5cGVcIixcbiAgXCJMZW5ndGhcIixcbiAgXCJMZW5ndGhXaGlsZVwiLFxuICBcIkxlcmNoUGhpXCIsXG4gIFwiTGVzc1wiLFxuICBcIkxlc3NFcXVhbFwiLFxuICBcIkxlc3NFcXVhbEdyZWF0ZXJcIixcbiAgXCJMZXNzRXF1YWxUaGFuXCIsXG4gIFwiTGVzc0Z1bGxFcXVhbFwiLFxuICBcIkxlc3NHcmVhdGVyXCIsXG4gIFwiTGVzc0xlc3NcIixcbiAgXCJMZXNzU2xhbnRFcXVhbFwiLFxuICBcIkxlc3NUaGFuXCIsXG4gIFwiTGVzc1RpbGRlXCIsXG4gIFwiTGV0dGVyQ2hhcmFjdGVyXCIsXG4gIFwiTGV0dGVyQ291bnRzXCIsXG4gIFwiTGV0dGVyTnVtYmVyXCIsXG4gIFwiTGV0dGVyUVwiLFxuICBcIkxldmVsXCIsXG4gIFwiTGV2ZW5lVGVzdFwiLFxuICBcIkxldmlDaXZpdGFUZW5zb3JcIixcbiAgXCJMZXZ5RGlzdHJpYnV0aW9uXCIsXG4gIFwiTGV4aWNvZ3JhcGhpY1wiLFxuICBcIkxleGljb2dyYXBoaWNPcmRlclwiLFxuICBcIkxleGljb2dyYXBoaWNTb3J0XCIsXG4gIFwiTGlicmFyeURhdGFUeXBlXCIsXG4gIFwiTGlicmFyeUZ1bmN0aW9uXCIsXG4gIFwiTGlicmFyeUZ1bmN0aW9uRGVjbGFyYXRpb25cIixcbiAgXCJMaWJyYXJ5RnVuY3Rpb25FcnJvclwiLFxuICBcIkxpYnJhcnlGdW5jdGlvbkluZm9ybWF0aW9uXCIsXG4gIFwiTGlicmFyeUZ1bmN0aW9uTG9hZFwiLFxuICBcIkxpYnJhcnlGdW5jdGlvblVubG9hZFwiLFxuICBcIkxpYnJhcnlMb2FkXCIsXG4gIFwiTGlicmFyeVVubG9hZFwiLFxuICBcIkxpY2Vuc2VFbnRpdGxlbWVudE9iamVjdFwiLFxuICBcIkxpY2Vuc2VFbnRpdGxlbWVudHNcIixcbiAgXCJMaWNlbnNlSURcIixcbiAgXCJMaWNlbnNpbmdTZXR0aW5nc1wiLFxuICBcIkxpZnRpbmdGaWx0ZXJEYXRhXCIsXG4gIFwiTGlmdGluZ1dhdmVsZXRUcmFuc2Zvcm1cIixcbiAgXCJMaWdodEJsdWVcIixcbiAgXCJMaWdodEJyb3duXCIsXG4gIFwiTGlnaHRDeWFuXCIsXG4gIFwiTGlnaHRlclwiLFxuICBcIkxpZ2h0R3JheVwiLFxuICBcIkxpZ2h0R3JlZW5cIixcbiAgXCJMaWdodGluZ1wiLFxuICBcIkxpZ2h0aW5nQW5nbGVcIixcbiAgXCJMaWdodE1hZ2VudGFcIixcbiAgXCJMaWdodE9yYW5nZVwiLFxuICBcIkxpZ2h0UGlua1wiLFxuICBcIkxpZ2h0UHVycGxlXCIsXG4gIFwiTGlnaHRSZWRcIixcbiAgXCJMaWdodFNvdXJjZXNcIixcbiAgXCJMaWdodFllbGxvd1wiLFxuICBcIkxpa2VsaWhvb2RcIixcbiAgXCJMaW1pdFwiLFxuICBcIkxpbWl0c1Bvc2l0aW9uaW5nXCIsXG4gIFwiTGltaXRzUG9zaXRpb25pbmdUb2tlbnNcIixcbiAgXCJMaW5kbGV5RGlzdHJpYnV0aW9uXCIsXG4gIFwiTGluZVwiLFxuICBcIkxpbmUzREJveFwiLFxuICBcIkxpbmUzREJveE9wdGlvbnNcIixcbiAgXCJMaW5lYXJGaWx0ZXJcIixcbiAgXCJMaW5lYXJGcmFjdGlvbmFsT3B0aW1pemF0aW9uXCIsXG4gIFwiTGluZWFyRnJhY3Rpb25hbFRyYW5zZm9ybVwiLFxuICBcIkxpbmVhckdyYWRpZW50RmlsbGluZ1wiLFxuICBcIkxpbmVhckdyYWRpZW50SW1hZ2VcIixcbiAgXCJMaW5lYXJpemluZ1RyYW5zZm9ybWF0aW9uRGF0YVwiLFxuICBcIkxpbmVhckxheWVyXCIsXG4gIFwiTGluZWFyTW9kZWxGaXRcIixcbiAgXCJMaW5lYXJPZmZzZXRGdW5jdGlvblwiLFxuICBcIkxpbmVhck9wdGltaXphdGlvblwiLFxuICBcIkxpbmVhclByb2dyYW1taW5nXCIsXG4gIFwiTGluZWFyUmVjdXJyZW5jZVwiLFxuICBcIkxpbmVhclNvbHZlXCIsXG4gIFwiTGluZWFyU29sdmVGdW5jdGlvblwiLFxuICBcIkxpbmVCb3hcIixcbiAgXCJMaW5lQm94T3B0aW9uc1wiLFxuICBcIkxpbmVCcmVha1wiLFxuICBcIkxpbmVicmVha0FkanVzdG1lbnRzXCIsXG4gIFwiTGluZUJyZWFrQ2hhcnRcIixcbiAgXCJMaW5lYnJlYWtTZW1pY29sb25XZWlnaHRpbmdcIixcbiAgXCJMaW5lQnJlYWtXaXRoaW5cIixcbiAgXCJMaW5lQ29sb3JcIixcbiAgXCJMaW5lR3JhcGhcIixcbiAgXCJMaW5lSW5kZW50XCIsXG4gIFwiTGluZUluZGVudE1heEZyYWN0aW9uXCIsXG4gIFwiTGluZUludGVncmFsQ29udm9sdXRpb25QbG90XCIsXG4gIFwiTGluZUludGVncmFsQ29udm9sdXRpb25TY2FsZVwiLFxuICBcIkxpbmVMZWdlbmRcIixcbiAgXCJMaW5lT3BhY2l0eVwiLFxuICBcIkxpbmVTcGFjaW5nXCIsXG4gIFwiTGluZVdyYXBQYXJ0c1wiLFxuICBcIkxpbmtBY3RpdmF0ZVwiLFxuICBcIkxpbmtDbG9zZVwiLFxuICBcIkxpbmtDb25uZWN0XCIsXG4gIFwiTGlua0Nvbm5lY3RlZFFcIixcbiAgXCJMaW5rQ3JlYXRlXCIsXG4gIFwiTGlua0Vycm9yXCIsXG4gIFwiTGlua0ZsdXNoXCIsXG4gIFwiTGlua0Z1bmN0aW9uXCIsXG4gIFwiTGlua0hvc3RcIixcbiAgXCJMaW5rSW50ZXJydXB0XCIsXG4gIFwiTGlua0xhdW5jaFwiLFxuICBcIkxpbmtNb2RlXCIsXG4gIFwiTGlua09iamVjdFwiLFxuICBcIkxpbmtPcGVuXCIsXG4gIFwiTGlua09wdGlvbnNcIixcbiAgXCJMaW5rUGF0dGVybnNcIixcbiAgXCJMaW5rUHJvdG9jb2xcIixcbiAgXCJMaW5rUmFua0NlbnRyYWxpdHlcIixcbiAgXCJMaW5rUmVhZFwiLFxuICBcIkxpbmtSZWFkSGVsZFwiLFxuICBcIkxpbmtSZWFkeVFcIixcbiAgXCJMaW5rc1wiLFxuICBcIkxpbmtTZXJ2aWNlXCIsXG4gIFwiTGlua1dyaXRlXCIsXG4gIFwiTGlua1dyaXRlSGVsZFwiLFxuICBcIkxpb3V2aWxsZUxhbWJkYVwiLFxuICBcIkxpc3RcIixcbiAgXCJMaXN0YWJsZVwiLFxuICBcIkxpc3RBbmltYXRlXCIsXG4gIFwiTGlzdENvbnRvdXJQbG90XCIsXG4gIFwiTGlzdENvbnRvdXJQbG90M0RcIixcbiAgXCJMaXN0Q29udm9sdmVcIixcbiAgXCJMaXN0Q29ycmVsYXRlXCIsXG4gIFwiTGlzdEN1cnZlUGF0aFBsb3RcIixcbiAgXCJMaXN0RGVjb252b2x2ZVwiLFxuICBcIkxpc3REZW5zaXR5UGxvdFwiLFxuICBcIkxpc3REZW5zaXR5UGxvdDNEXCIsXG4gIFwiTGlzdGVuXCIsXG4gIFwiTGlzdEZvcm1hdFwiLFxuICBcIkxpc3RGb3VyaWVyU2VxdWVuY2VUcmFuc2Zvcm1cIixcbiAgXCJMaXN0SW50ZXJwb2xhdGlvblwiLFxuICBcIkxpc3RMaW5lSW50ZWdyYWxDb252b2x1dGlvblBsb3RcIixcbiAgXCJMaXN0TGluZVBsb3RcIixcbiAgXCJMaXN0TGluZVBsb3QzRFwiLFxuICBcIkxpc3RMb2dMaW5lYXJQbG90XCIsXG4gIFwiTGlzdExvZ0xvZ1Bsb3RcIixcbiAgXCJMaXN0TG9nUGxvdFwiLFxuICBcIkxpc3RQaWNrZXJcIixcbiAgXCJMaXN0UGlja2VyQm94XCIsXG4gIFwiTGlzdFBpY2tlckJveEJhY2tncm91bmRcIixcbiAgXCJMaXN0UGlja2VyQm94T3B0aW9uc1wiLFxuICBcIkxpc3RQbGF5XCIsXG4gIFwiTGlzdFBsb3RcIixcbiAgXCJMaXN0UGxvdDNEXCIsXG4gIFwiTGlzdFBvaW50UGxvdDNEXCIsXG4gIFwiTGlzdFBvbGFyUGxvdFwiLFxuICBcIkxpc3RRXCIsXG4gIFwiTGlzdFNsaWNlQ29udG91clBsb3QzRFwiLFxuICBcIkxpc3RTbGljZURlbnNpdHlQbG90M0RcIixcbiAgXCJMaXN0U2xpY2VWZWN0b3JQbG90M0RcIixcbiAgXCJMaXN0U3RlcFBsb3RcIixcbiAgXCJMaXN0U3RyZWFtRGVuc2l0eVBsb3RcIixcbiAgXCJMaXN0U3RyZWFtUGxvdFwiLFxuICBcIkxpc3RTdHJlYW1QbG90M0RcIixcbiAgXCJMaXN0U3VyZmFjZVBsb3QzRFwiLFxuICBcIkxpc3RWZWN0b3JEZW5zaXR5UGxvdFwiLFxuICBcIkxpc3RWZWN0b3JEaXNwbGFjZW1lbnRQbG90XCIsXG4gIFwiTGlzdFZlY3RvckRpc3BsYWNlbWVudFBsb3QzRFwiLFxuICBcIkxpc3RWZWN0b3JQbG90XCIsXG4gIFwiTGlzdFZlY3RvclBsb3QzRFwiLFxuICBcIkxpc3RaVHJhbnNmb3JtXCIsXG4gIFwiTGl0ZXJhbFwiLFxuICBcIkxpdGVyYWxTZWFyY2hcIixcbiAgXCJMaXRlcmFsVHlwZVwiLFxuICBcIkxvYWRDb21waWxlZENvbXBvbmVudFwiLFxuICBcIkxvY2FsQWRhcHRpdmVCaW5hcml6ZVwiLFxuICBcIkxvY2FsQ2FjaGVcIixcbiAgXCJMb2NhbENsdXN0ZXJpbmdDb2VmZmljaWVudFwiLFxuICBcIkxvY2FsRXZhbHVhdGVcIixcbiAgXCJMb2NhbGl6ZURlZmluaXRpb25zXCIsXG4gIFwiTG9jYWxpemVWYXJpYWJsZXNcIixcbiAgXCJMb2NhbE9iamVjdFwiLFxuICBcIkxvY2FsT2JqZWN0c1wiLFxuICBcIkxvY2FsUmVzcG9uc2VOb3JtYWxpemF0aW9uTGF5ZXJcIixcbiAgXCJMb2NhbFN1Ym1pdFwiLFxuICBcIkxvY2FsU3ltYm9sXCIsXG4gIFwiTG9jYWxUaW1lXCIsXG4gIFwiTG9jYWxUaW1lWm9uZVwiLFxuICBcIkxvY2F0aW9uRXF1aXZhbGVuY2VUZXN0XCIsXG4gIFwiTG9jYXRpb25UZXN0XCIsXG4gIFwiTG9jYXRvclwiLFxuICBcIkxvY2F0b3JBdXRvQ3JlYXRlXCIsXG4gIFwiTG9jYXRvckJveFwiLFxuICBcIkxvY2F0b3JCb3hPcHRpb25zXCIsXG4gIFwiTG9jYXRvckNlbnRlcmluZ1wiLFxuICBcIkxvY2F0b3JQYW5lXCIsXG4gIFwiTG9jYXRvclBhbmVCb3hcIixcbiAgXCJMb2NhdG9yUGFuZUJveE9wdGlvbnNcIixcbiAgXCJMb2NhdG9yUmVnaW9uXCIsXG4gIFwiTG9ja2VkXCIsXG4gIFwiTG9nXCIsXG4gIFwiTG9nMTBcIixcbiAgXCJMb2cyXCIsXG4gIFwiTG9nQmFybmVzR1wiLFxuICBcIkxvZ0dhbW1hXCIsXG4gIFwiTG9nR2FtbWFEaXN0cmlidXRpb25cIixcbiAgXCJMb2dpY2FsRXhwYW5kXCIsXG4gIFwiTG9nSW50ZWdyYWxcIixcbiAgXCJMb2dpc3RpY0Rpc3RyaWJ1dGlvblwiLFxuICBcIkxvZ2lzdGljU2lnbW9pZFwiLFxuICBcIkxvZ2l0TW9kZWxGaXRcIixcbiAgXCJMb2dMaWtlbGlob29kXCIsXG4gIFwiTG9nTGluZWFyUGxvdFwiLFxuICBcIkxvZ0xvZ2lzdGljRGlzdHJpYnV0aW9uXCIsXG4gIFwiTG9nTG9nUGxvdFwiLFxuICBcIkxvZ011bHRpbm9ybWFsRGlzdHJpYnV0aW9uXCIsXG4gIFwiTG9nTm9ybWFsRGlzdHJpYnV0aW9uXCIsXG4gIFwiTG9nUGxvdFwiLFxuICBcIkxvZ1JhbmtUZXN0XCIsXG4gIFwiTG9nU2VyaWVzRGlzdHJpYnV0aW9uXCIsXG4gIFwiTG9uZ0VxdWFsXCIsXG4gIFwiTG9uZ2VzdFwiLFxuICBcIkxvbmdlc3RDb21tb25TZXF1ZW5jZVwiLFxuICBcIkxvbmdlc3RDb21tb25TZXF1ZW5jZVBvc2l0aW9uc1wiLFxuICBcIkxvbmdlc3RDb21tb25TdWJzZXF1ZW5jZVwiLFxuICBcIkxvbmdlc3RDb21tb25TdWJzZXF1ZW5jZVBvc2l0aW9uc1wiLFxuICBcIkxvbmdlc3RNYXRjaFwiLFxuICBcIkxvbmdlc3RPcmRlcmVkU2VxdWVuY2VcIixcbiAgXCJMb25nRm9ybVwiLFxuICBcIkxvbmdpdHVkZVwiLFxuICBcIkxvbmdMZWZ0QXJyb3dcIixcbiAgXCJMb25nTGVmdFJpZ2h0QXJyb3dcIixcbiAgXCJMb25nUmlnaHRBcnJvd1wiLFxuICBcIkxvbmdTaG9ydFRlcm1NZW1vcnlMYXllclwiLFxuICBcIkxvb2t1cFwiLFxuICBcIkxvb3BiYWNrXCIsXG4gIFwiTG9vcEZyZWVHcmFwaFFcIixcbiAgXCJMb29waW5nXCIsXG4gIFwiTG9zc0Z1bmN0aW9uXCIsXG4gIFwiTG93ZXJDYXNlUVwiLFxuICBcIkxvd2VyTGVmdEFycm93XCIsXG4gIFwiTG93ZXJSaWdodEFycm93XCIsXG4gIFwiTG93ZXJUcmlhbmd1bGFyaXplXCIsXG4gIFwiTG93ZXJUcmlhbmd1bGFyTWF0cml4XCIsXG4gIFwiTG93ZXJUcmlhbmd1bGFyTWF0cml4UVwiLFxuICBcIkxvd3Bhc3NGaWx0ZXJcIixcbiAgXCJMUUVzdGltYXRvckdhaW5zXCIsXG4gIFwiTFFHUmVndWxhdG9yXCIsXG4gIFwiTFFPdXRwdXRSZWd1bGF0b3JHYWluc1wiLFxuICBcIkxRUmVndWxhdG9yR2FpbnNcIixcbiAgXCJMVUJhY2tTdWJzdGl0dXRpb25cIixcbiAgXCJMdWNhc0xcIixcbiAgXCJMdWNjaW9TYW1pQ29tcG9uZW50c1wiLFxuICBcIkxVRGVjb21wb3NpdGlvblwiLFxuICBcIkx1bmFyRWNsaXBzZVwiLFxuICBcIkxVVkNvbG9yXCIsXG4gIFwiTHlhcHVub3ZTb2x2ZVwiLFxuICBcIkx5b25zR3JvdXBMeVwiLFxuICBcIk1hY2hpbmVJRFwiLFxuICBcIk1hY2hpbmVOYW1lXCIsXG4gIFwiTWFjaGluZU51bWJlclFcIixcbiAgXCJNYWNoaW5lUHJlY2lzaW9uXCIsXG4gIFwiTWFjaW50b3NoU3lzdGVtUGFnZVNldHVwXCIsXG4gIFwiTWFnZW50YVwiLFxuICBcIk1hZ25pZmljYXRpb25cIixcbiAgXCJNYWduaWZ5XCIsXG4gIFwiTWFpbEFkZHJlc3NWYWxpZGF0aW9uXCIsXG4gIFwiTWFpbEV4ZWN1dGVcIixcbiAgXCJNYWlsRm9sZGVyXCIsXG4gIFwiTWFpbEl0ZW1cIixcbiAgXCJNYWlsUmVjZWl2ZXJGdW5jdGlvblwiLFxuICBcIk1haWxSZXNwb25zZUZ1bmN0aW9uXCIsXG4gIFwiTWFpbFNlYXJjaFwiLFxuICBcIk1haWxTZXJ2ZXJDb25uZWN0XCIsXG4gIFwiTWFpbFNlcnZlckNvbm5lY3Rpb25cIixcbiAgXCJNYWlsU2V0dGluZ3NcIixcbiAgXCJNYWluU29sdmVcIixcbiAgXCJNYWludGFpbkR5bmFtaWNDYWNoZXNcIixcbiAgXCJNYWpvcml0eVwiLFxuICBcIk1ha2VCb3hlc1wiLFxuICBcIk1ha2VFeHByZXNzaW9uXCIsXG4gIFwiTWFrZVJ1bGVzXCIsXG4gIFwiTWFuYWdlZExpYnJhcnlFeHByZXNzaW9uSURcIixcbiAgXCJNYW5hZ2VkTGlicmFyeUV4cHJlc3Npb25RXCIsXG4gIFwiTWFuZGVsYnJvdFNldEJvZXR0Y2hlclwiLFxuICBcIk1hbmRlbGJyb3RTZXREaXN0YW5jZVwiLFxuICBcIk1hbmRlbGJyb3RTZXRJdGVyYXRpb25Db3VudFwiLFxuICBcIk1hbmRlbGJyb3RTZXRNZW1iZXJRXCIsXG4gIFwiTWFuZGVsYnJvdFNldFBsb3RcIixcbiAgXCJNYW5nb2xkdExhbWJkYVwiLFxuICBcIk1hbmhhdHRhbkRpc3RhbmNlXCIsXG4gIFwiTWFuaXB1bGF0ZVwiLFxuICBcIk1hbmlwdWxhdG9yXCIsXG4gIFwiTWFubmVkU3BhY2VNaXNzaW9uRGF0YVwiLFxuICBcIk1hbm5XaGl0bmV5VGVzdFwiLFxuICBcIk1hbnRpc3NhRXhwb25lbnRcIixcbiAgXCJNYW51YWxcIixcbiAgXCJNYXBcIixcbiAgXCJNYXBBbGxcIixcbiAgXCJNYXBBcHBseVwiLFxuICBcIk1hcEF0XCIsXG4gIFwiTWFwSW5kZXhlZFwiLFxuICBcIk1BUHJvY2Vzc1wiLFxuICBcIk1hcFRocmVhZFwiLFxuICBcIk1hcmNoZW5rb1Bhc3R1ckRpc3RyaWJ1dGlvblwiLFxuICBcIk1hcmN1bVFcIixcbiAgXCJNYXJkaWFDb21iaW5lZFRlc3RcIixcbiAgXCJNYXJkaWFLdXJ0b3Npc1Rlc3RcIixcbiAgXCJNYXJkaWFTa2V3bmVzc1Rlc3RcIixcbiAgXCJNYXJnaW5hbERpc3RyaWJ1dGlvblwiLFxuICBcIk1hcmtvdlByb2Nlc3NQcm9wZXJ0aWVzXCIsXG4gIFwiTWFza2luZ1wiLFxuICBcIk1hc3NDb25jZW50cmF0aW9uQ29uZGl0aW9uXCIsXG4gIFwiTWFzc0ZsdXhWYWx1ZVwiLFxuICBcIk1hc3NJbXBlcm1lYWJsZUJvdW5kYXJ5VmFsdWVcIixcbiAgXCJNYXNzT3V0Zmxvd1ZhbHVlXCIsXG4gIFwiTWFzc1N5bW1ldHJ5VmFsdWVcIixcbiAgXCJNYXNzVHJhbnNmZXJWYWx1ZVwiLFxuICBcIk1hc3NUcmFuc3BvcnRQREVDb21wb25lbnRcIixcbiAgXCJNYXRjaGluZ0Rpc3NpbWlsYXJpdHlcIixcbiAgXCJNYXRjaExvY2FsTmFtZVFcIixcbiAgXCJNYXRjaExvY2FsTmFtZXNcIixcbiAgXCJNYXRjaFFcIixcbiAgXCJNYXRlcmlhbFwiLFxuICBcIk1hdGVyaWFsU2hhZGluZ1wiLFxuICBcIk1hdGVyblBvaW50UHJvY2Vzc1wiLFxuICBcIk1hdGhlbWF0aWNhbEZ1bmN0aW9uRGF0YVwiLFxuICBcIk1hdGhlbWF0aWNhTm90YXRpb25cIixcbiAgXCJNYXRoaWV1Q1wiLFxuICBcIk1hdGhpZXVDaGFyYWN0ZXJpc3RpY0FcIixcbiAgXCJNYXRoaWV1Q2hhcmFjdGVyaXN0aWNCXCIsXG4gIFwiTWF0aGlldUNoYXJhY3RlcmlzdGljRXhwb25lbnRcIixcbiAgXCJNYXRoaWV1Q1ByaW1lXCIsXG4gIFwiTWF0aGlldUdyb3VwTTExXCIsXG4gIFwiTWF0aGlldUdyb3VwTTEyXCIsXG4gIFwiTWF0aGlldUdyb3VwTTIyXCIsXG4gIFwiTWF0aGlldUdyb3VwTTIzXCIsXG4gIFwiTWF0aGlldUdyb3VwTTI0XCIsXG4gIFwiTWF0aGlldVNcIixcbiAgXCJNYXRoaWV1U1ByaW1lXCIsXG4gIFwiTWF0aE1MRm9ybVwiLFxuICBcIk1hdGhNTFRleHRcIixcbiAgXCJNYXRyaWNlc1wiLFxuICBcIk1hdHJpeEV4cFwiLFxuICBcIk1hdHJpeEZvcm1cIixcbiAgXCJNYXRyaXhGdW5jdGlvblwiLFxuICBcIk1hdHJpeExvZ1wiLFxuICBcIk1hdHJpeE5vcm1hbERpc3RyaWJ1dGlvblwiLFxuICBcIk1hdHJpeFBsb3RcIixcbiAgXCJNYXRyaXhQb3dlclwiLFxuICBcIk1hdHJpeFByb3BlcnR5RGlzdHJpYnV0aW9uXCIsXG4gIFwiTWF0cml4UVwiLFxuICBcIk1hdHJpeFJhbmtcIixcbiAgXCJNYXRyaXhURGlzdHJpYnV0aW9uXCIsXG4gIFwiTWF4XCIsXG4gIFwiTWF4QmVuZFwiLFxuICBcIk1heENlbGxNZWFzdXJlXCIsXG4gIFwiTWF4Q29sb3JEaXN0YW5jZVwiLFxuICBcIk1heERhdGVcIixcbiAgXCJNYXhEZXRlY3RcIixcbiAgXCJNYXhEaXNwbGF5ZWRDaGlsZHJlblwiLFxuICBcIk1heER1cmF0aW9uXCIsXG4gIFwiTWF4RXh0cmFCYW5kd2lkdGhzXCIsXG4gIFwiTWF4RXh0cmFDb25kaXRpb25zXCIsXG4gIFwiTWF4RmVhdHVyZURpc3BsYWNlbWVudFwiLFxuICBcIk1heEZlYXR1cmVzXCIsXG4gIFwiTWF4RmlsdGVyXCIsXG4gIFwiTWF4aW1hbEJ5XCIsXG4gIFwiTWF4aW1pemVcIixcbiAgXCJNYXhJdGVtc1wiLFxuICBcIk1heEl0ZXJhdGlvbnNcIixcbiAgXCJNYXhMaW1pdFwiLFxuICBcIk1heE1lbW9yeVVzZWRcIixcbiAgXCJNYXhNaXh0dXJlS2VybmVsc1wiLFxuICBcIk1heE92ZXJsYXBGcmFjdGlvblwiLFxuICBcIk1heFBsb3RQb2ludHNcIixcbiAgXCJNYXhQb2ludHNcIixcbiAgXCJNYXhSZWN1cnNpb25cIixcbiAgXCJNYXhTdGFibGVEaXN0cmlidXRpb25cIixcbiAgXCJNYXhTdGVwRnJhY3Rpb25cIixcbiAgXCJNYXhTdGVwc1wiLFxuICBcIk1heFN0ZXBTaXplXCIsXG4gIFwiTWF4VHJhaW5pbmdSb3VuZHNcIixcbiAgXCJNYXhWYWx1ZVwiLFxuICBcIk1heHdlbGxEaXN0cmlidXRpb25cIixcbiAgXCJNYXhXb3JkR2FwXCIsXG4gIFwiTWNMYXVnaGxpbkdyb3VwTWNMXCIsXG4gIFwiTWVhblwiLFxuICBcIk1lYW5BYnNvbHV0ZUxvc3NMYXllclwiLFxuICBcIk1lYW5Bcm91bmRcIixcbiAgXCJNZWFuQ2x1c3RlcmluZ0NvZWZmaWNpZW50XCIsXG4gIFwiTWVhbkRlZ3JlZUNvbm5lY3Rpdml0eVwiLFxuICBcIk1lYW5EZXZpYXRpb25cIixcbiAgXCJNZWFuRmlsdGVyXCIsXG4gIFwiTWVhbkdyYXBoRGlzdGFuY2VcIixcbiAgXCJNZWFuTmVpZ2hib3JEZWdyZWVcIixcbiAgXCJNZWFuUG9pbnREZW5zaXR5XCIsXG4gIFwiTWVhblNoaWZ0XCIsXG4gIFwiTWVhblNoaWZ0RmlsdGVyXCIsXG4gIFwiTWVhblNxdWFyZWRMb3NzTGF5ZXJcIixcbiAgXCJNZWRpYW5cIixcbiAgXCJNZWRpYW5EZXZpYXRpb25cIixcbiAgXCJNZWRpYW5GaWx0ZXJcIixcbiAgXCJNZWRpY2FsVGVzdERhdGFcIixcbiAgXCJNZWRpdW1cIixcbiAgXCJNZWlqZXJHXCIsXG4gIFwiTWVpamVyR1JlZHVjZVwiLFxuICBcIk1laXhuZXJEaXN0cmlidXRpb25cIixcbiAgXCJNZWxsaW5Db252b2x2ZVwiLFxuICBcIk1lbGxpblRyYW5zZm9ybVwiLFxuICBcIk1lbWJlclFcIixcbiAgXCJNZW1vcnlBdmFpbGFibGVcIixcbiAgXCJNZW1vcnlDb25zdHJhaW5lZFwiLFxuICBcIk1lbW9yeUNvbnN0cmFpbnRcIixcbiAgXCJNZW1vcnlJblVzZVwiLFxuICBcIk1lbmdlck1lc2hcIixcbiAgXCJNZW51XCIsXG4gIFwiTWVudUFwcGVhcmFuY2VcIixcbiAgXCJNZW51Q29tbWFuZEtleVwiLFxuICBcIk1lbnVFdmFsdWF0b3JcIixcbiAgXCJNZW51SXRlbVwiLFxuICBcIk1lbnVMaXN0XCIsXG4gIFwiTWVudVBhY2tldFwiLFxuICBcIk1lbnVTb3J0aW5nVmFsdWVcIixcbiAgXCJNZW51U3R5bGVcIixcbiAgXCJNZW51Vmlld1wiLFxuICBcIk1lcmdlXCIsXG4gIFwiTWVyZ2VEaWZmZXJlbmNlc1wiLFxuICBcIk1lcmdpbmdGdW5jdGlvblwiLFxuICBcIk1lcnNlbm5lUHJpbWVFeHBvbmVudFwiLFxuICBcIk1lcnNlbm5lUHJpbWVFeHBvbmVudFFcIixcbiAgXCJNZXNoXCIsXG4gIFwiTWVzaENlbGxDZW50cm9pZFwiLFxuICBcIk1lc2hDZWxsQ291bnRcIixcbiAgXCJNZXNoQ2VsbEhpZ2hsaWdodFwiLFxuICBcIk1lc2hDZWxsSW5kZXhcIixcbiAgXCJNZXNoQ2VsbExhYmVsXCIsXG4gIFwiTWVzaENlbGxNYXJrZXJcIixcbiAgXCJNZXNoQ2VsbE1lYXN1cmVcIixcbiAgXCJNZXNoQ2VsbFF1YWxpdHlcIixcbiAgXCJNZXNoQ2VsbHNcIixcbiAgXCJNZXNoQ2VsbFNoYXBlRnVuY3Rpb25cIixcbiAgXCJNZXNoQ2VsbFN0eWxlXCIsXG4gIFwiTWVzaENvbm5lY3Rpdml0eUdyYXBoXCIsXG4gIFwiTWVzaENvb3JkaW5hdGVzXCIsXG4gIFwiTWVzaEZ1bmN0aW9uc1wiLFxuICBcIk1lc2hQcmltaXRpdmVzXCIsXG4gIFwiTWVzaFF1YWxpdHlHb2FsXCIsXG4gIFwiTWVzaFJhbmdlXCIsXG4gIFwiTWVzaFJlZmluZW1lbnRGdW5jdGlvblwiLFxuICBcIk1lc2hSZWdpb25cIixcbiAgXCJNZXNoUmVnaW9uUVwiLFxuICBcIk1lc2hTaGFkaW5nXCIsXG4gIFwiTWVzaFN0eWxlXCIsXG4gIFwiTWVzc2FnZVwiLFxuICBcIk1lc3NhZ2VEaWFsb2dcIixcbiAgXCJNZXNzYWdlTGlzdFwiLFxuICBcIk1lc3NhZ2VOYW1lXCIsXG4gIFwiTWVzc2FnZU9iamVjdFwiLFxuICBcIk1lc3NhZ2VPcHRpb25zXCIsXG4gIFwiTWVzc2FnZVBhY2tldFwiLFxuICBcIk1lc3NhZ2VzXCIsXG4gIFwiTWVzc2FnZXNOb3RlYm9va1wiLFxuICBcIk1ldGFDaGFyYWN0ZXJzXCIsXG4gIFwiTWV0YUluZm9ybWF0aW9uXCIsXG4gIFwiTWV0ZW9yU2hvd2VyRGF0YVwiLFxuICBcIk1ldGhvZFwiLFxuICBcIk1ldGhvZE9wdGlvbnNcIixcbiAgXCJNZXhpY2FuSGF0V2F2ZWxldFwiLFxuICBcIk1leWVyV2F2ZWxldFwiLFxuICBcIk1pZHBvaW50XCIsXG4gIFwiTUlNRVR5cGVUb0Zvcm1hdExpc3RcIixcbiAgXCJNaW5cIixcbiAgXCJNaW5Db2xvckRpc3RhbmNlXCIsXG4gIFwiTWluRGF0ZVwiLFxuICBcIk1pbkRldGVjdFwiLFxuICBcIk1pbmVyYWxEYXRhXCIsXG4gIFwiTWluRmlsdGVyXCIsXG4gIFwiTWluaW1hbEJ5XCIsXG4gIFwiTWluaW1hbFBvbHlub21pYWxcIixcbiAgXCJNaW5pbWFsU3RhdGVTcGFjZU1vZGVsXCIsXG4gIFwiTWluaW1pemVcIixcbiAgXCJNaW5pbXVtVGltZUluY3JlbWVudFwiLFxuICBcIk1pbkludGVydmFsU2l6ZVwiLFxuICBcIk1pbmtvd3NraVF1ZXN0aW9uTWFya1wiLFxuICBcIk1pbkxpbWl0XCIsXG4gIFwiTWluTWF4XCIsXG4gIFwiTWlub3JQbGFuZXREYXRhXCIsXG4gIFwiTWlub3JzXCIsXG4gIFwiTWluUG9pbnRTZXBhcmF0aW9uXCIsXG4gIFwiTWluUmVjdXJzaW9uXCIsXG4gIFwiTWluU2l6ZVwiLFxuICBcIk1pblN0YWJsZURpc3RyaWJ1dGlvblwiLFxuICBcIk1pbnVzXCIsXG4gIFwiTWludXNQbHVzXCIsXG4gIFwiTWluVmFsdWVcIixcbiAgXCJNaXNzaW5nXCIsXG4gIFwiTWlzc2luZ0JlaGF2aW9yXCIsXG4gIFwiTWlzc2luZ0RhdGFNZXRob2RcIixcbiAgXCJNaXNzaW5nRGF0YVJ1bGVzXCIsXG4gIFwiTWlzc2luZ1FcIixcbiAgXCJNaXNzaW5nU3RyaW5nXCIsXG4gIFwiTWlzc2luZ1N0eWxlXCIsXG4gIFwiTWlzc2luZ1ZhbHVlUGF0dGVyblwiLFxuICBcIk1pc3NpbmdWYWx1ZVN5bnRoZXNpc1wiLFxuICBcIk1pdHRhZ0xlZmZsZXJFXCIsXG4gIFwiTWl4ZWRGcmFjdGlvblBhcnRzXCIsXG4gIFwiTWl4ZWRHcmFwaFFcIixcbiAgXCJNaXhlZE1hZ25pdHVkZVwiLFxuICBcIk1peGVkUmFkaXhcIixcbiAgXCJNaXhlZFJhZGl4UXVhbnRpdHlcIixcbiAgXCJNaXhlZFVuaXRcIixcbiAgXCJNaXh0dXJlRGlzdHJpYnV0aW9uXCIsXG4gIFwiTW9kXCIsXG4gIFwiTW9kYWxcIixcbiAgXCJNb2RlXCIsXG4gIFwiTW9kZWxQcmVkaWN0aXZlQ29udHJvbGxlclwiLFxuICBcIk1vZHVsYXJcIixcbiAgXCJNb2R1bGFySW52ZXJzZVwiLFxuICBcIk1vZHVsYXJMYW1iZGFcIixcbiAgXCJNb2R1bGVcIixcbiAgXCJNb2R1bHVzXCIsXG4gIFwiTW9lYml1c011XCIsXG4gIFwiTW9sZWN1bGVcIixcbiAgXCJNb2xlY3VsZUFsaWduXCIsXG4gIFwiTW9sZWN1bGVDb250YWluc1FcIixcbiAgXCJNb2xlY3VsZURyYXdcIixcbiAgXCJNb2xlY3VsZUVxdWl2YWxlbnRRXCIsXG4gIFwiTW9sZWN1bGVGcmVlUVwiLFxuICBcIk1vbGVjdWxlR3JhcGhcIixcbiAgXCJNb2xlY3VsZU1hdGNoUVwiLFxuICBcIk1vbGVjdWxlTWF4aW11bUNvbW1vblN1YnN0cnVjdHVyZVwiLFxuICBcIk1vbGVjdWxlTW9kaWZ5XCIsXG4gIFwiTW9sZWN1bGVOYW1lXCIsXG4gIFwiTW9sZWN1bGVQYXR0ZXJuXCIsXG4gIFwiTW9sZWN1bGVQbG90XCIsXG4gIFwiTW9sZWN1bGVQbG90M0RcIixcbiAgXCJNb2xlY3VsZVByb3BlcnR5XCIsXG4gIFwiTW9sZWN1bGVRXCIsXG4gIFwiTW9sZWN1bGVSZWNvZ25pemVcIixcbiAgXCJNb2xlY3VsZVN1YnN0cnVjdHVyZUNvdW50XCIsXG4gIFwiTW9sZWN1bGVWYWx1ZVwiLFxuICBcIk1vbWVudFwiLFxuICBcIk1vbWVudENvbnZlcnRcIixcbiAgXCJNb21lbnRFdmFsdWF0ZVwiLFxuICBcIk1vbWVudEdlbmVyYXRpbmdGdW5jdGlvblwiLFxuICBcIk1vbWVudE9mSW5lcnRpYVwiLFxuICBcIk1vbmRheVwiLFxuICBcIk1vbml0b3JcIixcbiAgXCJNb25vbWlhbExpc3RcIixcbiAgXCJNb25vbWlhbE9yZGVyXCIsXG4gIFwiTW9uc3Rlckdyb3VwTVwiLFxuICBcIk1vb25QaGFzZVwiLFxuICBcIk1vb25Qb3NpdGlvblwiLFxuICBcIk1vcmxldFdhdmVsZXRcIixcbiAgXCJNb3JwaG9sb2dpY2FsQmluYXJpemVcIixcbiAgXCJNb3JwaG9sb2dpY2FsQnJhbmNoUG9pbnRzXCIsXG4gIFwiTW9ycGhvbG9naWNhbENvbXBvbmVudHNcIixcbiAgXCJNb3JwaG9sb2dpY2FsRXVsZXJOdW1iZXJcIixcbiAgXCJNb3JwaG9sb2dpY2FsR3JhcGhcIixcbiAgXCJNb3JwaG9sb2dpY2FsUGVyaW1ldGVyXCIsXG4gIFwiTW9ycGhvbG9naWNhbFRyYW5zZm9ybVwiLFxuICBcIk1vcnRhbGl0eURhdGFcIixcbiAgXCJNb3N0XCIsXG4gIFwiTW91bnRhaW5EYXRhXCIsXG4gIFwiTW91c2VBbm5vdGF0aW9uXCIsXG4gIFwiTW91c2VBcHBlYXJhbmNlXCIsXG4gIFwiTW91c2VBcHBlYXJhbmNlVGFnXCIsXG4gIFwiTW91c2VCdXR0b25zXCIsXG4gIFwiTW91c2VvdmVyXCIsXG4gIFwiTW91c2VQb2ludGVyTm90ZVwiLFxuICBcIk1vdXNlUG9zaXRpb25cIixcbiAgXCJNb3ZpZURhdGFcIixcbiAgXCJNb3ZpbmdBdmVyYWdlXCIsXG4gIFwiTW92aW5nTWFwXCIsXG4gIFwiTW92aW5nTWVkaWFuXCIsXG4gIFwiTW95YWxEaXN0cmlidXRpb25cIixcbiAgXCJNdWx0aWF4aXNBcnJhbmdlbWVudFwiLFxuICBcIk11bHRpY29sdW1uXCIsXG4gIFwiTXVsdGllZGdlU3R5bGVcIixcbiAgXCJNdWx0aWdyYXBoUVwiLFxuICBcIk11bHRpbGF1bmNoV2FybmluZ1wiLFxuICBcIk11bHRpTGV0dGVySXRhbGljc1wiLFxuICBcIk11bHRpTGV0dGVyU3R5bGVcIixcbiAgXCJNdWx0aWxpbmVGdW5jdGlvblwiLFxuICBcIk11bHRpbm9taWFsXCIsXG4gIFwiTXVsdGlub21pYWxEaXN0cmlidXRpb25cIixcbiAgXCJNdWx0aW5vcm1hbERpc3RyaWJ1dGlvblwiLFxuICBcIk11bHRpcGxpY2F0aXZlT3JkZXJcIixcbiAgXCJNdWx0aXBsaWNpdHlcIixcbiAgXCJNdWx0aXBseVNpZGVzXCIsXG4gIFwiTXVsdGlzY3JpcHRCb3hPcHRpb25zXCIsXG4gIFwiTXVsdGlzZWxlY3Rpb25cIixcbiAgXCJNdWx0aXZhcmlhdGVIeXBlcmdlb21ldHJpY0Rpc3RyaWJ1dGlvblwiLFxuICBcIk11bHRpdmFyaWF0ZVBvaXNzb25EaXN0cmlidXRpb25cIixcbiAgXCJNdWx0aXZhcmlhdGVURGlzdHJpYnV0aW9uXCIsXG4gIFwiTlwiLFxuICBcIk5ha2FnYW1pRGlzdHJpYnV0aW9uXCIsXG4gIFwiTmFtZVFcIixcbiAgXCJOYW1lc1wiLFxuICBcIk5hbWVzcGFjZUJveFwiLFxuICBcIk5hbWVzcGFjZUJveE9wdGlvbnNcIixcbiAgXCJOYW5kXCIsXG4gIFwiTkFyZ01heFwiLFxuICBcIk5BcmdNaW5cIixcbiAgXCJOQmVybm91bGxpQlwiLFxuICBcIk5Cb2R5U2ltdWxhdGlvblwiLFxuICBcIk5Cb2R5U2ltdWxhdGlvbkRhdGFcIixcbiAgXCJOQ2FjaGVcIixcbiAgXCJOQ2FwdXRvRFwiLFxuICBcIk5ERWlnZW5zeXN0ZW1cIixcbiAgXCJOREVpZ2VudmFsdWVzXCIsXG4gIFwiTkRTb2x2ZVwiLFxuICBcIk5EU29sdmVWYWx1ZVwiLFxuICBcIk5lYXJlc3RcIixcbiAgXCJOZWFyZXN0RnVuY3Rpb25cIixcbiAgXCJOZWFyZXN0TWVzaENlbGxzXCIsXG4gIFwiTmVhcmVzdE5laWdoYm9yR1wiLFxuICBcIk5lYXJlc3ROZWlnaGJvckdyYXBoXCIsXG4gIFwiTmVhcmVzdFRvXCIsXG4gIFwiTmVidWxhRGF0YVwiLFxuICBcIk5lZWRsZW1hbld1bnNjaFNpbWlsYXJpdHlcIixcbiAgXCJOZWVkc1wiLFxuICBcIk5lZ2F0aXZlXCIsXG4gIFwiTmVnYXRpdmVCaW5vbWlhbERpc3RyaWJ1dGlvblwiLFxuICBcIk5lZ2F0aXZlRGVmaW5pdGVNYXRyaXhRXCIsXG4gIFwiTmVnYXRpdmVJbnRlZ2Vyc1wiLFxuICBcIk5lZ2F0aXZlbHlPcmllbnRlZFBvaW50c1wiLFxuICBcIk5lZ2F0aXZlTXVsdGlub21pYWxEaXN0cmlidXRpb25cIixcbiAgXCJOZWdhdGl2ZVJhdGlvbmFsc1wiLFxuICBcIk5lZ2F0aXZlUmVhbHNcIixcbiAgXCJOZWdhdGl2ZVNlbWlkZWZpbml0ZU1hdHJpeFFcIixcbiAgXCJOZWlnaGJvcmhvb2REYXRhXCIsXG4gIFwiTmVpZ2hib3Job29kR3JhcGhcIixcbiAgXCJOZXN0XCIsXG4gIFwiTmVzdGVkR3JlYXRlckdyZWF0ZXJcIixcbiAgXCJOZXN0ZWRMZXNzTGVzc1wiLFxuICBcIk5lc3RlZFNjcmlwdFJ1bGVzXCIsXG4gIFwiTmVzdEdyYXBoXCIsXG4gIFwiTmVzdExpc3RcIixcbiAgXCJOZXN0VHJlZVwiLFxuICBcIk5lc3RXaGlsZVwiLFxuICBcIk5lc3RXaGlsZUxpc3RcIixcbiAgXCJOZXRBcHBlbmRcIixcbiAgXCJOZXRBcnJheVwiLFxuICBcIk5ldEFycmF5TGF5ZXJcIixcbiAgXCJOZXRCaWRpcmVjdGlvbmFsT3BlcmF0b3JcIixcbiAgXCJOZXRDaGFpblwiLFxuICBcIk5ldERlY29kZXJcIixcbiAgXCJOZXREZWxldGVcIixcbiAgXCJOZXREcm9wXCIsXG4gIFwiTmV0RW5jb2RlclwiLFxuICBcIk5ldEV2YWx1YXRpb25Nb2RlXCIsXG4gIFwiTmV0RXh0ZXJuYWxPYmplY3RcIixcbiAgXCJOZXRFeHRyYWN0XCIsXG4gIFwiTmV0RmxhdHRlblwiLFxuICBcIk5ldEZvbGRPcGVyYXRvclwiLFxuICBcIk5ldEdBTk9wZXJhdG9yXCIsXG4gIFwiTmV0R3JhcGhcIixcbiAgXCJOZXRJbmZvcm1hdGlvblwiLFxuICBcIk5ldEluaXRpYWxpemVcIixcbiAgXCJOZXRJbnNlcnRcIixcbiAgXCJOZXRJbnNlcnRTaGFyZWRBcnJheXNcIixcbiAgXCJOZXRKb2luXCIsXG4gIFwiTmV0TWFwT3BlcmF0b3JcIixcbiAgXCJOZXRNYXBUaHJlYWRPcGVyYXRvclwiLFxuICBcIk5ldE1lYXN1cmVtZW50c1wiLFxuICBcIk5ldE1vZGVsXCIsXG4gIFwiTmV0TmVzdE9wZXJhdG9yXCIsXG4gIFwiTmV0UGFpckVtYmVkZGluZ09wZXJhdG9yXCIsXG4gIFwiTmV0UG9ydFwiLFxuICBcIk5ldFBvcnRHcmFkaWVudFwiLFxuICBcIk5ldFByZXBlbmRcIixcbiAgXCJOZXRSZW5hbWVcIixcbiAgXCJOZXRSZXBsYWNlXCIsXG4gIFwiTmV0UmVwbGFjZVBhcnRcIixcbiAgXCJOZXRTaGFyZWRBcnJheVwiLFxuICBcIk5ldFN0YXRlT2JqZWN0XCIsXG4gIFwiTmV0VGFrZVwiLFxuICBcIk5ldFRyYWluXCIsXG4gIFwiTmV0VHJhaW5SZXN1bHRzT2JqZWN0XCIsXG4gIFwiTmV0VW5mb2xkXCIsXG4gIFwiTmV0d29ya1BhY2tldENhcHR1cmVcIixcbiAgXCJOZXR3b3JrUGFja2V0UmVjb3JkaW5nXCIsXG4gIFwiTmV0d29ya1BhY2tldFJlY29yZGluZ0R1cmluZ1wiLFxuICBcIk5ldHdvcmtQYWNrZXRUcmFjZVwiLFxuICBcIk5ldW1hbm5WYWx1ZVwiLFxuICBcIk5ldmlsbGVUaGV0YUNcIixcbiAgXCJOZXZpbGxlVGhldGFEXCIsXG4gIFwiTmV2aWxsZVRoZXRhTlwiLFxuICBcIk5ldmlsbGVUaGV0YVNcIixcbiAgXCJOZXdQcmltaXRpdmVTdHlsZVwiLFxuICBcIk5FeHBlY3RhdGlvblwiLFxuICBcIk5leHRcIixcbiAgXCJOZXh0Q2VsbFwiLFxuICBcIk5leHREYXRlXCIsXG4gIFwiTmV4dFByaW1lXCIsXG4gIFwiTmV4dFNjaGVkdWxlZFRhc2tUaW1lXCIsXG4gIFwiTmV5bWFuU2NvdHRQb2ludFByb2Nlc3NcIixcbiAgXCJORnJhY3Rpb25hbERcIixcbiAgXCJOSG9sZEFsbFwiLFxuICBcIk5Ib2xkRmlyc3RcIixcbiAgXCJOSG9sZFJlc3RcIixcbiAgXCJOaWNob2xzR3JpZExpbmVzXCIsXG4gIFwiTmljaG9sc1Bsb3RcIixcbiAgXCJOaWdodEhlbWlzcGhlcmVcIixcbiAgXCJOSW50ZWdyYXRlXCIsXG4gIFwiTk1heGltaXplXCIsXG4gIFwiTk1heFZhbHVlXCIsXG4gIFwiTk1pbmltaXplXCIsXG4gIFwiTk1pblZhbHVlXCIsXG4gIFwiTm9taW5hbFNjYWxlXCIsXG4gIFwiTm9taW5hbFZhcmlhYmxlc1wiLFxuICBcIk5vbkFzc29jaWF0aXZlXCIsXG4gIFwiTm9uY2VudHJhbEJldGFEaXN0cmlidXRpb25cIixcbiAgXCJOb25jZW50cmFsQ2hpU3F1YXJlRGlzdHJpYnV0aW9uXCIsXG4gIFwiTm9uY2VudHJhbEZSYXRpb0Rpc3RyaWJ1dGlvblwiLFxuICBcIk5vbmNlbnRyYWxTdHVkZW50VERpc3RyaWJ1dGlvblwiLFxuICBcIk5vbkNvbW11dGF0aXZlTXVsdGlwbHlcIixcbiAgXCJOb25Db25zdGFudHNcIixcbiAgXCJOb25kaW1lbnNpb25hbGl6YXRpb25UcmFuc2Zvcm1cIixcbiAgXCJOb25lXCIsXG4gIFwiTm9uZVRydWVcIixcbiAgXCJOb25saW5lYXJNb2RlbEZpdFwiLFxuICBcIk5vbmxpbmVhclN0YXRlU3BhY2VNb2RlbFwiLFxuICBcIk5vbmxvY2FsTWVhbnNGaWx0ZXJcIixcbiAgXCJOb25OZWdhdGl2ZVwiLFxuICBcIk5vbk5lZ2F0aXZlSW50ZWdlcnNcIixcbiAgXCJOb25OZWdhdGl2ZVJhdGlvbmFsc1wiLFxuICBcIk5vbk5lZ2F0aXZlUmVhbHNcIixcbiAgXCJOb25Qb3NpdGl2ZVwiLFxuICBcIk5vblBvc2l0aXZlSW50ZWdlcnNcIixcbiAgXCJOb25Qb3NpdGl2ZVJhdGlvbmFsc1wiLFxuICBcIk5vblBvc2l0aXZlUmVhbHNcIixcbiAgXCJOb3JcIixcbiAgXCJOb3JsdW5kQlwiLFxuICBcIk5vcm1cIixcbiAgXCJOb3JtYWxcIixcbiAgXCJOb3JtYWxEaXN0cmlidXRpb25cIixcbiAgXCJOb3JtYWxHcm91cGluZ1wiLFxuICBcIk5vcm1hbGl6YXRpb25MYXllclwiLFxuICBcIk5vcm1hbGl6ZVwiLFxuICBcIk5vcm1hbGl6ZWRcIixcbiAgXCJOb3JtYWxpemVkU3F1YXJlZEV1Y2xpZGVhbkRpc3RhbmNlXCIsXG4gIFwiTm9ybWFsTWF0cml4UVwiLFxuICBcIk5vcm1hbHNGdW5jdGlvblwiLFxuICBcIk5vcm1GdW5jdGlvblwiLFxuICBcIk5vdFwiLFxuICBcIk5vdENvbmdydWVudFwiLFxuICBcIk5vdEN1cENhcFwiLFxuICBcIk5vdERvdWJsZVZlcnRpY2FsQmFyXCIsXG4gIFwiTm90ZWJvb2tcIixcbiAgXCJOb3RlYm9va0FwcGx5XCIsXG4gIFwiTm90ZWJvb2tBdXRvU2F2ZVwiLFxuICBcIk5vdGVib29rQnJvd3NlRGlyZWN0b3J5XCIsXG4gIFwiTm90ZWJvb2tDbG9zZVwiLFxuICBcIk5vdGVib29rQ29udmVydFNldHRpbmdzXCIsXG4gIFwiTm90ZWJvb2tDcmVhdGVcIixcbiAgXCJOb3RlYm9va0RlZmF1bHRcIixcbiAgXCJOb3RlYm9va0RlbGV0ZVwiLFxuICBcIk5vdGVib29rRGlyZWN0b3J5XCIsXG4gIFwiTm90ZWJvb2tEeW5hbWljRXhwcmVzc2lvblwiLFxuICBcIk5vdGVib29rRXZhbHVhdGVcIixcbiAgXCJOb3RlYm9va0V2ZW50QWN0aW9uc1wiLFxuICBcIk5vdGVib29rRmlsZU5hbWVcIixcbiAgXCJOb3RlYm9va0ZpbmRcIixcbiAgXCJOb3RlYm9va0dldFwiLFxuICBcIk5vdGVib29rSW1wb3J0XCIsXG4gIFwiTm90ZWJvb2tJbmZvcm1hdGlvblwiLFxuICBcIk5vdGVib29rSW50ZXJmYWNlT2JqZWN0XCIsXG4gIFwiTm90ZWJvb2tMb2NhdGVcIixcbiAgXCJOb3RlYm9va09iamVjdFwiLFxuICBcIk5vdGVib29rT3BlblwiLFxuICBcIk5vdGVib29rUGF0aFwiLFxuICBcIk5vdGVib29rUHJpbnRcIixcbiAgXCJOb3RlYm9va1B1dFwiLFxuICBcIk5vdGVib29rUmVhZFwiLFxuICBcIk5vdGVib29rc1wiLFxuICBcIk5vdGVib29rU2F2ZVwiLFxuICBcIk5vdGVib29rU2VsZWN0aW9uXCIsXG4gIFwiTm90ZWJvb2tzTWVudVwiLFxuICBcIk5vdGVib29rVGVtcGxhdGVcIixcbiAgXCJOb3RlYm9va1dyaXRlXCIsXG4gIFwiTm90RWxlbWVudFwiLFxuICBcIk5vdEVxdWFsVGlsZGVcIixcbiAgXCJOb3RFeGlzdHNcIixcbiAgXCJOb3RHcmVhdGVyXCIsXG4gIFwiTm90R3JlYXRlckVxdWFsXCIsXG4gIFwiTm90R3JlYXRlckZ1bGxFcXVhbFwiLFxuICBcIk5vdEdyZWF0ZXJHcmVhdGVyXCIsXG4gIFwiTm90R3JlYXRlckxlc3NcIixcbiAgXCJOb3RHcmVhdGVyU2xhbnRFcXVhbFwiLFxuICBcIk5vdEdyZWF0ZXJUaWxkZVwiLFxuICBcIk5vdGhpbmdcIixcbiAgXCJOb3RIdW1wRG93bkh1bXBcIixcbiAgXCJOb3RIdW1wRXF1YWxcIixcbiAgXCJOb3RpZmljYXRpb25GdW5jdGlvblwiLFxuICBcIk5vdExlZnRUcmlhbmdsZVwiLFxuICBcIk5vdExlZnRUcmlhbmdsZUJhclwiLFxuICBcIk5vdExlZnRUcmlhbmdsZUVxdWFsXCIsXG4gIFwiTm90TGVzc1wiLFxuICBcIk5vdExlc3NFcXVhbFwiLFxuICBcIk5vdExlc3NGdWxsRXF1YWxcIixcbiAgXCJOb3RMZXNzR3JlYXRlclwiLFxuICBcIk5vdExlc3NMZXNzXCIsXG4gIFwiTm90TGVzc1NsYW50RXF1YWxcIixcbiAgXCJOb3RMZXNzVGlsZGVcIixcbiAgXCJOb3ROZXN0ZWRHcmVhdGVyR3JlYXRlclwiLFxuICBcIk5vdE5lc3RlZExlc3NMZXNzXCIsXG4gIFwiTm90UHJlY2VkZXNcIixcbiAgXCJOb3RQcmVjZWRlc0VxdWFsXCIsXG4gIFwiTm90UHJlY2VkZXNTbGFudEVxdWFsXCIsXG4gIFwiTm90UHJlY2VkZXNUaWxkZVwiLFxuICBcIk5vdFJldmVyc2VFbGVtZW50XCIsXG4gIFwiTm90UmlnaHRUcmlhbmdsZVwiLFxuICBcIk5vdFJpZ2h0VHJpYW5nbGVCYXJcIixcbiAgXCJOb3RSaWdodFRyaWFuZ2xlRXF1YWxcIixcbiAgXCJOb3RTcXVhcmVTdWJzZXRcIixcbiAgXCJOb3RTcXVhcmVTdWJzZXRFcXVhbFwiLFxuICBcIk5vdFNxdWFyZVN1cGVyc2V0XCIsXG4gIFwiTm90U3F1YXJlU3VwZXJzZXRFcXVhbFwiLFxuICBcIk5vdFN1YnNldFwiLFxuICBcIk5vdFN1YnNldEVxdWFsXCIsXG4gIFwiTm90U3VjY2VlZHNcIixcbiAgXCJOb3RTdWNjZWVkc0VxdWFsXCIsXG4gIFwiTm90U3VjY2VlZHNTbGFudEVxdWFsXCIsXG4gIFwiTm90U3VjY2VlZHNUaWxkZVwiLFxuICBcIk5vdFN1cGVyc2V0XCIsXG4gIFwiTm90U3VwZXJzZXRFcXVhbFwiLFxuICBcIk5vdFRpbGRlXCIsXG4gIFwiTm90VGlsZGVFcXVhbFwiLFxuICBcIk5vdFRpbGRlRnVsbEVxdWFsXCIsXG4gIFwiTm90VGlsZGVUaWxkZVwiLFxuICBcIk5vdFZlcnRpY2FsQmFyXCIsXG4gIFwiTm93XCIsXG4gIFwiTm9XaGl0ZXNwYWNlXCIsXG4gIFwiTlByb2JhYmlsaXR5XCIsXG4gIFwiTlByb2R1Y3RcIixcbiAgXCJOUHJvZHVjdEZhY3RvcnNcIixcbiAgXCJOUm9vdHNcIixcbiAgXCJOU29sdmVcIixcbiAgXCJOU29sdmVWYWx1ZXNcIixcbiAgXCJOU3VtXCIsXG4gIFwiTlN1bVRlcm1zXCIsXG4gIFwiTnVjbGVhckV4cGxvc2lvbkRhdGFcIixcbiAgXCJOdWNsZWFyUmVhY3RvckRhdGFcIixcbiAgXCJOdWxsXCIsXG4gIFwiTnVsbFJlY29yZHNcIixcbiAgXCJOdWxsU3BhY2VcIixcbiAgXCJOdWxsV29yZHNcIixcbiAgXCJOdW1iZXJcIixcbiAgXCJOdW1iZXJDb21wb3NlXCIsXG4gIFwiTnVtYmVyRGVjb21wb3NlXCIsXG4gIFwiTnVtYmVyRGlnaXRcIixcbiAgXCJOdW1iZXJFeHBhbmRcIixcbiAgXCJOdW1iZXJGaWVsZENsYXNzTnVtYmVyXCIsXG4gIFwiTnVtYmVyRmllbGREaXNjcmltaW5hbnRcIixcbiAgXCJOdW1iZXJGaWVsZEZ1bmRhbWVudGFsVW5pdHNcIixcbiAgXCJOdW1iZXJGaWVsZEludGVncmFsQmFzaXNcIixcbiAgXCJOdW1iZXJGaWVsZE5vcm1SZXByZXNlbnRhdGl2ZXNcIixcbiAgXCJOdW1iZXJGaWVsZFJlZ3VsYXRvclwiLFxuICBcIk51bWJlckZpZWxkUm9vdHNPZlVuaXR5XCIsXG4gIFwiTnVtYmVyRmllbGRTaWduYXR1cmVcIixcbiAgXCJOdW1iZXJGb3JtXCIsXG4gIFwiTnVtYmVyRm9ybWF0XCIsXG4gIFwiTnVtYmVyTGluZVBsb3RcIixcbiAgXCJOdW1iZXJNYXJrc1wiLFxuICBcIk51bWJlck11bHRpcGxpZXJcIixcbiAgXCJOdW1iZXJQYWRkaW5nXCIsXG4gIFwiTnVtYmVyUG9pbnRcIixcbiAgXCJOdW1iZXJRXCIsXG4gIFwiTnVtYmVyU2VwYXJhdG9yXCIsXG4gIFwiTnVtYmVyU2lnbnNcIixcbiAgXCJOdW1iZXJTdHJpbmdcIixcbiAgXCJOdW1lcmF0b3JcIixcbiAgXCJOdW1lcmF0b3JEZW5vbWluYXRvclwiLFxuICBcIk51bWVyaWNhbE9yZGVyXCIsXG4gIFwiTnVtZXJpY2FsU29ydFwiLFxuICBcIk51bWVyaWNBcnJheVwiLFxuICBcIk51bWVyaWNBcnJheVFcIixcbiAgXCJOdW1lcmljQXJyYXlUeXBlXCIsXG4gIFwiTnVtZXJpY0Z1bmN0aW9uXCIsXG4gIFwiTnVtZXJpY1FcIixcbiAgXCJOdXR0YWxsV2luZG93XCIsXG4gIFwiTlZhbHVlc1wiLFxuICBcIk55cXVpc3RHcmlkTGluZXNcIixcbiAgXCJOeXF1aXN0UGxvdFwiLFxuICBcIk9cIixcbiAgXCJPYmplY3RFeGlzdHNRXCIsXG4gIFwiT2JzZXJ2YWJpbGl0eUdyYW1pYW5cIixcbiAgXCJPYnNlcnZhYmlsaXR5TWF0cml4XCIsXG4gIFwiT2JzZXJ2YWJsZURlY29tcG9zaXRpb25cIixcbiAgXCJPYnNlcnZhYmxlTW9kZWxRXCIsXG4gIFwiT2NlYW5EYXRhXCIsXG4gIFwiT2N0YWhlZHJvblwiLFxuICBcIk9kZFFcIixcbiAgXCJPZmZcIixcbiAgXCJPZmZzZXRcIixcbiAgXCJPTEVEYXRhXCIsXG4gIFwiT25cIixcbiAgXCJPTmFuR3JvdXBPTlwiLFxuICBcIk9uY2VcIixcbiAgXCJPbmVJZGVudGl0eVwiLFxuICBcIk9wYWNpdHlcIixcbiAgXCJPcGFjaXR5RnVuY3Rpb25cIixcbiAgXCJPcGFjaXR5RnVuY3Rpb25TY2FsaW5nXCIsXG4gIFwiT3BlblwiLFxuICBcIk9wZW5BcHBlbmRcIixcbiAgXCJPcGVuZXJcIixcbiAgXCJPcGVuZXJCb3hcIixcbiAgXCJPcGVuZXJCb3hPcHRpb25zXCIsXG4gIFwiT3BlbmVyVmlld1wiLFxuICBcIk9wZW5GdW5jdGlvbkluc3BlY3RvclBhY2tldFwiLFxuICBcIk9wZW5pbmdcIixcbiAgXCJPcGVuUmVhZFwiLFxuICBcIk9wZW5TcGVjaWFsT3B0aW9uc1wiLFxuICBcIk9wZW5UZW1wb3JhcnlcIixcbiAgXCJPcGVuV3JpdGVcIixcbiAgXCJPcGVyYXRlXCIsXG4gIFwiT3BlcmF0aW5nU3lzdGVtXCIsXG4gIFwiT3BlcmF0b3JBcHBsaWVkXCIsXG4gIFwiT3B0aW11bUZsb3dEYXRhXCIsXG4gIFwiT3B0aW9uYWxcIixcbiAgXCJPcHRpb25hbEVsZW1lbnRcIixcbiAgXCJPcHRpb25JbnNwZWN0b3JTZXR0aW5nc1wiLFxuICBcIk9wdGlvblFcIixcbiAgXCJPcHRpb25zXCIsXG4gIFwiT3B0aW9uc1BhY2tldFwiLFxuICBcIk9wdGlvbnNQYXR0ZXJuXCIsXG4gIFwiT3B0aW9uVmFsdWVcIixcbiAgXCJPcHRpb25WYWx1ZUJveFwiLFxuICBcIk9wdGlvblZhbHVlQm94T3B0aW9uc1wiLFxuICBcIk9yXCIsXG4gIFwiT3JhbmdlXCIsXG4gIFwiT3JkZXJcIixcbiAgXCJPcmRlckRpc3RyaWJ1dGlvblwiLFxuICBcIk9yZGVyZWRRXCIsXG4gIFwiT3JkZXJpbmdcIixcbiAgXCJPcmRlcmluZ0J5XCIsXG4gIFwiT3JkZXJpbmdMYXllclwiLFxuICBcIk9yZGVybGVzc1wiLFxuICBcIk9yZGVybGVzc1BhdHRlcm5TZXF1ZW5jZVwiLFxuICBcIk9yZGluYWxTY2FsZVwiLFxuICBcIk9ybnN0ZWluVWhsZW5iZWNrUHJvY2Vzc1wiLFxuICBcIk9ydGhvZ29uYWxpemVcIixcbiAgXCJPcnRob2dvbmFsTWF0cml4UVwiLFxuICBcIk91dFwiLFxuICBcIk91dGVyXCIsXG4gIFwiT3V0ZXJQb2x5Z29uXCIsXG4gIFwiT3V0ZXJQb2x5aGVkcm9uXCIsXG4gIFwiT3V0cHV0QXV0b092ZXJ3cml0ZVwiLFxuICBcIk91dHB1dENvbnRyb2xsYWJpbGl0eU1hdHJpeFwiLFxuICBcIk91dHB1dENvbnRyb2xsYWJsZU1vZGVsUVwiLFxuICBcIk91dHB1dEZvcm1cIixcbiAgXCJPdXRwdXRGb3JtRGF0YVwiLFxuICBcIk91dHB1dEdyb3VwaW5nXCIsXG4gIFwiT3V0cHV0TWF0aEVkaXRFeHByZXNzaW9uXCIsXG4gIFwiT3V0cHV0TmFtZVBhY2tldFwiLFxuICBcIk91dHB1dFBvcnRzXCIsXG4gIFwiT3V0cHV0UmVzcG9uc2VcIixcbiAgXCJPdXRwdXRTaXplTGltaXRcIixcbiAgXCJPdXRwdXRTdHJlYW1cIixcbiAgXCJPdmVyXCIsXG4gIFwiT3ZlckJhclwiLFxuICBcIk92ZXJEb3RcIixcbiAgXCJPdmVyZmxvd1wiLFxuICBcIk92ZXJIYXRcIixcbiAgXCJPdmVybGFwc1wiLFxuICBcIk92ZXJsYXlcIixcbiAgXCJPdmVybGF5Qm94XCIsXG4gIFwiT3ZlcmxheUJveE9wdGlvbnNcIixcbiAgXCJPdmVybGF5VmlkZW9cIixcbiAgXCJPdmVyc2NyaXB0XCIsXG4gIFwiT3ZlcnNjcmlwdEJveFwiLFxuICBcIk92ZXJzY3JpcHRCb3hPcHRpb25zXCIsXG4gIFwiT3ZlclRpbGRlXCIsXG4gIFwiT3ZlclZlY3RvclwiLFxuICBcIk92ZXJ3cml0ZVRhcmdldFwiLFxuICBcIk93ZW5UXCIsXG4gIFwiT3duVmFsdWVzXCIsXG4gIFwiUGFja2FnZVwiLFxuICBcIlBhY2tpbmdNZXRob2RcIixcbiAgXCJQYWNrUGFjbGV0XCIsXG4gIFwiUGFjbGV0RGF0YVJlYnVpbGRcIixcbiAgXCJQYWNsZXREaXJlY3RvcnlBZGRcIixcbiAgXCJQYWNsZXREaXJlY3RvcnlMb2FkXCIsXG4gIFwiUGFjbGV0RGlyZWN0b3J5UmVtb3ZlXCIsXG4gIFwiUGFjbGV0RGlyZWN0b3J5VW5sb2FkXCIsXG4gIFwiUGFjbGV0RGlzYWJsZVwiLFxuICBcIlBhY2xldEVuYWJsZVwiLFxuICBcIlBhY2xldEZpbmRcIixcbiAgXCJQYWNsZXRGaW5kUmVtb3RlXCIsXG4gIFwiUGFjbGV0SW5mb3JtYXRpb25cIixcbiAgXCJQYWNsZXRJbnN0YWxsXCIsXG4gIFwiUGFjbGV0SW5zdGFsbFN1Ym1pdFwiLFxuICBcIlBhY2xldE5ld2VyUVwiLFxuICBcIlBhY2xldE9iamVjdFwiLFxuICBcIlBhY2xldE9iamVjdFFcIixcbiAgXCJQYWNsZXRTaXRlXCIsXG4gIFwiUGFjbGV0U2l0ZU9iamVjdFwiLFxuICBcIlBhY2xldFNpdGVSZWdpc3RlclwiLFxuICBcIlBhY2xldFNpdGVzXCIsXG4gIFwiUGFjbGV0U2l0ZVVucmVnaXN0ZXJcIixcbiAgXCJQYWNsZXRTaXRlVXBkYXRlXCIsXG4gIFwiUGFjbGV0U3ltYm9sXCIsXG4gIFwiUGFjbGV0VW5pbnN0YWxsXCIsXG4gIFwiUGFjbGV0VXBkYXRlXCIsXG4gIFwiUGFkZGVkRm9ybVwiLFxuICBcIlBhZGRpbmdcIixcbiAgXCJQYWRkaW5nTGF5ZXJcIixcbiAgXCJQYWRkaW5nU2l6ZVwiLFxuICBcIlBhZGVBcHByb3hpbWFudFwiLFxuICBcIlBhZExlZnRcIixcbiAgXCJQYWRSaWdodFwiLFxuICBcIlBhZ2VCcmVha0Fib3ZlXCIsXG4gIFwiUGFnZUJyZWFrQmVsb3dcIixcbiAgXCJQYWdlQnJlYWtXaXRoaW5cIixcbiAgXCJQYWdlRm9vdGVyTGluZXNcIixcbiAgXCJQYWdlRm9vdGVyc1wiLFxuICBcIlBhZ2VIZWFkZXJMaW5lc1wiLFxuICBcIlBhZ2VIZWFkZXJzXCIsXG4gIFwiUGFnZUhlaWdodFwiLFxuICBcIlBhZ2VSYW5rQ2VudHJhbGl0eVwiLFxuICBcIlBhZ2VUaGVtZVwiLFxuICBcIlBhZ2VXaWR0aFwiLFxuICBcIlBhZ2luYXRpb25cIixcbiAgXCJQYWlyQ29ycmVsYXRpb25HXCIsXG4gIFwiUGFpcmVkQmFyQ2hhcnRcIixcbiAgXCJQYWlyZWRIaXN0b2dyYW1cIixcbiAgXCJQYWlyZWRTbW9vdGhIaXN0b2dyYW1cIixcbiAgXCJQYWlyZWRUVGVzdFwiLFxuICBcIlBhaXJlZFpUZXN0XCIsXG4gIFwiUGFsZXR0ZU5vdGVib29rXCIsXG4gIFwiUGFsZXR0ZVBhdGhcIixcbiAgXCJQYWxldHRlc01lbnVTZXR0aW5nc1wiLFxuICBcIlBhbGluZHJvbWVRXCIsXG4gIFwiUGFuZVwiLFxuICBcIlBhbmVCb3hcIixcbiAgXCJQYW5lQm94T3B0aW9uc1wiLFxuICBcIlBhbmVsXCIsXG4gIFwiUGFuZWxCb3hcIixcbiAgXCJQYW5lbEJveE9wdGlvbnNcIixcbiAgXCJQYW5lbGVkXCIsXG4gIFwiUGFuZVNlbGVjdG9yXCIsXG4gIFwiUGFuZVNlbGVjdG9yQm94XCIsXG4gIFwiUGFuZVNlbGVjdG9yQm94T3B0aW9uc1wiLFxuICBcIlBhcGVyV2lkdGhcIixcbiAgXCJQYXJhYm9saWNDeWxpbmRlckRcIixcbiAgXCJQYXJhZ3JhcGhJbmRlbnRcIixcbiAgXCJQYXJhZ3JhcGhTcGFjaW5nXCIsXG4gIFwiUGFyYWxsZWxBcnJheVwiLFxuICBcIlBhcmFsbGVsQXhpc1Bsb3RcIixcbiAgXCJQYXJhbGxlbENvbWJpbmVcIixcbiAgXCJQYXJhbGxlbERvXCIsXG4gIFwiUGFyYWxsZWxlcGlwZWRcIixcbiAgXCJQYXJhbGxlbEV2YWx1YXRlXCIsXG4gIFwiUGFyYWxsZWxpemF0aW9uXCIsXG4gIFwiUGFyYWxsZWxpemVcIixcbiAgXCJQYXJhbGxlbEtlcm5lbHNcIixcbiAgXCJQYXJhbGxlbE1hcFwiLFxuICBcIlBhcmFsbGVsTmVlZHNcIixcbiAgXCJQYXJhbGxlbG9ncmFtXCIsXG4gIFwiUGFyYWxsZWxQcm9kdWN0XCIsXG4gIFwiUGFyYWxsZWxTdWJtaXRcIixcbiAgXCJQYXJhbGxlbFN1bVwiLFxuICBcIlBhcmFsbGVsVGFibGVcIixcbiAgXCJQYXJhbGxlbFRyeVwiLFxuICBcIlBhcmFtZXRlclwiLFxuICBcIlBhcmFtZXRlckVzdGltYXRvclwiLFxuICBcIlBhcmFtZXRlck1peHR1cmVEaXN0cmlidXRpb25cIixcbiAgXCJQYXJhbWV0ZXJWYXJpYWJsZXNcIixcbiAgXCJQYXJhbWV0cmljQ29udmV4T3B0aW1pemF0aW9uXCIsXG4gIFwiUGFyYW1ldHJpY0Z1bmN0aW9uXCIsXG4gIFwiUGFyYW1ldHJpY05EU29sdmVcIixcbiAgXCJQYXJhbWV0cmljTkRTb2x2ZVZhbHVlXCIsXG4gIFwiUGFyYW1ldHJpY1Bsb3RcIixcbiAgXCJQYXJhbWV0cmljUGxvdDNEXCIsXG4gIFwiUGFyYW1ldHJpY1JhbXBMYXllclwiLFxuICBcIlBhcmFtZXRyaWNSZWdpb25cIixcbiAgXCJQYXJlbnRCb3hcIixcbiAgXCJQYXJlbnRDZWxsXCIsXG4gIFwiUGFyZW50Q29ubmVjdFwiLFxuICBcIlBhcmVudERpcmVjdG9yeVwiLFxuICBcIlBhcmVudEVkZ2VMYWJlbFwiLFxuICBcIlBhcmVudEVkZ2VMYWJlbEZ1bmN0aW9uXCIsXG4gIFwiUGFyZW50RWRnZUxhYmVsU3R5bGVcIixcbiAgXCJQYXJlbnRFZGdlU2hhcGVGdW5jdGlvblwiLFxuICBcIlBhcmVudEVkZ2VTdHlsZVwiLFxuICBcIlBhcmVudEVkZ2VTdHlsZUZ1bmN0aW9uXCIsXG4gIFwiUGFyZW50Rm9ybVwiLFxuICBcIlBhcmVudGhlc2l6ZVwiLFxuICBcIlBhcmVudExpc3RcIixcbiAgXCJQYXJlbnROb3RlYm9va1wiLFxuICBcIlBhcmV0b0Rpc3RyaWJ1dGlvblwiLFxuICBcIlBhcmV0b1BpY2thbmRzRGlzdHJpYnV0aW9uXCIsXG4gIFwiUGFya0RhdGFcIixcbiAgXCJQYXJ0XCIsXG4gIFwiUGFydEJlaGF2aW9yXCIsXG4gIFwiUGFydGlhbENvcnJlbGF0aW9uRnVuY3Rpb25cIixcbiAgXCJQYXJ0aWFsRFwiLFxuICBcIlBhcnRpY2xlQWNjZWxlcmF0b3JEYXRhXCIsXG4gIFwiUGFydGljbGVEYXRhXCIsXG4gIFwiUGFydGl0aW9uXCIsXG4gIFwiUGFydGl0aW9uR3JhbnVsYXJpdHlcIixcbiAgXCJQYXJ0aXRpb25zUFwiLFxuICBcIlBhcnRpdGlvbnNRXCIsXG4gIFwiUGFydExheWVyXCIsXG4gIFwiUGFydE9mU3BlZWNoXCIsXG4gIFwiUGFydFByb3RlY3Rpb25cIixcbiAgXCJQYXJ6ZW5XaW5kb3dcIixcbiAgXCJQYXNjYWxEaXN0cmlidXRpb25cIixcbiAgXCJQYXNzRXZlbnRzRG93blwiLFxuICBcIlBhc3NFdmVudHNVcFwiLFxuICBcIlBhc3RlXCIsXG4gIFwiUGFzdGVBdXRvUXVvdGVDaGFyYWN0ZXJzXCIsXG4gIFwiUGFzdGVCb3hGb3JtSW5saW5lQ2VsbHNcIixcbiAgXCJQYXN0ZUJ1dHRvblwiLFxuICBcIlBhdGhcIixcbiAgXCJQYXRoR3JhcGhcIixcbiAgXCJQYXRoR3JhcGhRXCIsXG4gIFwiUGF0dGVyblwiLFxuICBcIlBhdHRlcm5GaWxsaW5nXCIsXG4gIFwiUGF0dGVyblJlYWN0aW9uXCIsXG4gIFwiUGF0dGVyblNlcXVlbmNlXCIsXG4gIFwiUGF0dGVyblRlc3RcIixcbiAgXCJQYXVsaU1hdHJpeFwiLFxuICBcIlBhdWxXYXZlbGV0XCIsXG4gIFwiUGF1c2VcIixcbiAgXCJQYXVzZWRUaW1lXCIsXG4gIFwiUERGXCIsXG4gIFwiUGVha0RldGVjdFwiLFxuICBcIlBlYW5vQ3VydmVcIixcbiAgXCJQZWFyc29uQ2hpU3F1YXJlVGVzdFwiLFxuICBcIlBlYXJzb25Db3JyZWxhdGlvblRlc3RcIixcbiAgXCJQZWFyc29uRGlzdHJpYnV0aW9uXCIsXG4gIFwiUGVudHRpbmVuUG9pbnRQcm9jZXNzXCIsXG4gIFwiUGVyY2VudEZvcm1cIixcbiAgXCJQZXJmZWN0TnVtYmVyXCIsXG4gIFwiUGVyZmVjdE51bWJlclFcIixcbiAgXCJQZXJmb3JtYW5jZUdvYWxcIixcbiAgXCJQZXJpbWV0ZXJcIixcbiAgXCJQZXJpb2RpY0JvdW5kYXJ5Q29uZGl0aW9uXCIsXG4gIFwiUGVyaW9kaWNJbnRlcnBvbGF0aW9uXCIsXG4gIFwiUGVyaW9kb2dyYW1cIixcbiAgXCJQZXJpb2RvZ3JhbUFycmF5XCIsXG4gIFwiUGVybWFuZW50XCIsXG4gIFwiUGVybWlzc2lvbnNcIixcbiAgXCJQZXJtaXNzaW9uc0dyb3VwXCIsXG4gIFwiUGVybWlzc2lvbnNHcm91cE1lbWJlclFcIixcbiAgXCJQZXJtaXNzaW9uc0dyb3Vwc1wiLFxuICBcIlBlcm1pc3Npb25zS2V5XCIsXG4gIFwiUGVybWlzc2lvbnNLZXlzXCIsXG4gIFwiUGVybXV0YXRpb25DeWNsZXNcIixcbiAgXCJQZXJtdXRhdGlvbkN5Y2xlc1FcIixcbiAgXCJQZXJtdXRhdGlvbkdyb3VwXCIsXG4gIFwiUGVybXV0YXRpb25MZW5ndGhcIixcbiAgXCJQZXJtdXRhdGlvbkxpc3RcIixcbiAgXCJQZXJtdXRhdGlvbkxpc3RRXCIsXG4gIFwiUGVybXV0YXRpb25NYXRyaXhcIixcbiAgXCJQZXJtdXRhdGlvbk1heFwiLFxuICBcIlBlcm11dGF0aW9uTWluXCIsXG4gIFwiUGVybXV0YXRpb25PcmRlclwiLFxuICBcIlBlcm11dGF0aW9uUG93ZXJcIixcbiAgXCJQZXJtdXRhdGlvblByb2R1Y3RcIixcbiAgXCJQZXJtdXRhdGlvblJlcGxhY2VcIixcbiAgXCJQZXJtdXRhdGlvbnNcIixcbiAgXCJQZXJtdXRhdGlvblN1cHBvcnRcIixcbiAgXCJQZXJtdXRlXCIsXG4gIFwiUGVyb25hTWFsaWtGaWx0ZXJcIixcbiAgXCJQZXJwZW5kaWN1bGFyXCIsXG4gIFwiUGVycGVuZGljdWxhckJpc2VjdG9yXCIsXG4gIFwiUGVyc2lzdGVuY2VMb2NhdGlvblwiLFxuICBcIlBlcnNpc3RlbmNlVGltZVwiLFxuICBcIlBlcnNpc3RlbnRPYmplY3RcIixcbiAgXCJQZXJzaXN0ZW50T2JqZWN0c1wiLFxuICBcIlBlcnNpc3RlbnRTeW1ib2xcIixcbiAgXCJQZXJzaXN0ZW50VmFsdWVcIixcbiAgXCJQZXJzb25EYXRhXCIsXG4gIFwiUEVSVERpc3RyaWJ1dGlvblwiLFxuICBcIlBldGVyc2VuR3JhcGhcIixcbiAgXCJQaGFzZU1hcmdpbnNcIixcbiAgXCJQaGFzZVJhbmdlXCIsXG4gIFwiUGhvbmdTaGFkaW5nXCIsXG4gIFwiUGh5c2ljYWxTeXN0ZW1EYXRhXCIsXG4gIFwiUGlcIixcbiAgXCJQaWNrXCIsXG4gIFwiUGlja2VkRWxlbWVudHNcIixcbiAgXCJQaWNrTW9kZVwiLFxuICBcIlBJRERhdGFcIixcbiAgXCJQSUREZXJpdmF0aXZlRmlsdGVyXCIsXG4gIFwiUElERmVlZGZvcndhcmRcIixcbiAgXCJQSURUdW5lXCIsXG4gIFwiUGllY2V3aXNlXCIsXG4gIFwiUGllY2V3aXNlRXhwYW5kXCIsXG4gIFwiUGllQ2hhcnRcIixcbiAgXCJQaWVDaGFydDNEXCIsXG4gIFwiUGlsbGFpVHJhY2VcIixcbiAgXCJQaWxsYWlUcmFjZVRlc3RcIixcbiAgXCJQaW5nVGltZVwiLFxuICBcIlBpbmtcIixcbiAgXCJQaXRjaFJlY29nbml6ZVwiLFxuICBcIlBpdm90aW5nXCIsXG4gIFwiUGl4ZWxDb25zdHJhaW5lZFwiLFxuICBcIlBpeGVsVmFsdWVcIixcbiAgXCJQaXhlbFZhbHVlUG9zaXRpb25zXCIsXG4gIFwiUGxhY2VkXCIsXG4gIFwiUGxhY2Vob2xkZXJcIixcbiAgXCJQbGFjZWhvbGRlckxheWVyXCIsXG4gIFwiUGxhY2Vob2xkZXJSZXBsYWNlXCIsXG4gIFwiUGxhaW5cIixcbiAgXCJQbGFuYXJBbmdsZVwiLFxuICBcIlBsYW5hckZhY2VMaXN0XCIsXG4gIFwiUGxhbmFyR3JhcGhcIixcbiAgXCJQbGFuYXJHcmFwaFFcIixcbiAgXCJQbGFuY2tSYWRpYXRpb25MYXdcIixcbiAgXCJQbGFuZUN1cnZlRGF0YVwiLFxuICBcIlBsYW5ldGFyeU1vb25EYXRhXCIsXG4gIFwiUGxhbmV0RGF0YVwiLFxuICBcIlBsYW50RGF0YVwiLFxuICBcIlBsYXlcIixcbiAgXCJQbGF5YmFja1NldHRpbmdzXCIsXG4gIFwiUGxheVJhbmdlXCIsXG4gIFwiUGxvdFwiLFxuICBcIlBsb3QzRFwiLFxuICBcIlBsb3QzTWF0cml4XCIsXG4gIFwiUGxvdERpdmlzaW9uXCIsXG4gIFwiUGxvdEpvaW5lZFwiLFxuICBcIlBsb3RMYWJlbFwiLFxuICBcIlBsb3RMYWJlbHNcIixcbiAgXCJQbG90TGF5b3V0XCIsXG4gIFwiUGxvdExlZ2VuZHNcIixcbiAgXCJQbG90TWFya2Vyc1wiLFxuICBcIlBsb3RQb2ludHNcIixcbiAgXCJQbG90UmFuZ2VcIixcbiAgXCJQbG90UmFuZ2VDbGlwcGluZ1wiLFxuICBcIlBsb3RSYW5nZUNsaXBQbGFuZXNTdHlsZVwiLFxuICBcIlBsb3RSYW5nZVBhZGRpbmdcIixcbiAgXCJQbG90UmVnaW9uXCIsXG4gIFwiUGxvdFN0eWxlXCIsXG4gIFwiUGxvdFRoZW1lXCIsXG4gIFwiUGx1cmFsaXplXCIsXG4gIFwiUGx1c1wiLFxuICBcIlBsdXNNaW51c1wiLFxuICBcIlBvY2hoYW1tZXJcIixcbiAgXCJQb2RTdGF0ZXNcIixcbiAgXCJQb2RXaWR0aFwiLFxuICBcIlBvaW50XCIsXG4gIFwiUG9pbnQzREJveFwiLFxuICBcIlBvaW50M0RCb3hPcHRpb25zXCIsXG4gIFwiUG9pbnRCb3hcIixcbiAgXCJQb2ludEJveE9wdGlvbnNcIixcbiAgXCJQb2ludENvdW50RGlzdHJpYnV0aW9uXCIsXG4gIFwiUG9pbnREZW5zaXR5XCIsXG4gIFwiUG9pbnREZW5zaXR5RnVuY3Rpb25cIixcbiAgXCJQb2ludEZpZ3VyZUNoYXJ0XCIsXG4gIFwiUG9pbnRMZWdlbmRcIixcbiAgXCJQb2ludExpZ2h0XCIsXG4gIFwiUG9pbnRQcm9jZXNzRXN0aW1hdG9yXCIsXG4gIFwiUG9pbnRQcm9jZXNzRml0VGVzdFwiLFxuICBcIlBvaW50UHJvY2Vzc1BhcmFtZXRlckFzc3VtcHRpb25zXCIsXG4gIFwiUG9pbnRQcm9jZXNzUGFyYW1ldGVyUVwiLFxuICBcIlBvaW50U2l6ZVwiLFxuICBcIlBvaW50U3RhdGlzdGljRnVuY3Rpb25cIixcbiAgXCJQb2ludFZhbHVlUGxvdFwiLFxuICBcIlBvaXNzb25Db25zdWxEaXN0cmlidXRpb25cIixcbiAgXCJQb2lzc29uRGlzdHJpYnV0aW9uXCIsXG4gIFwiUG9pc3NvblBERUNvbXBvbmVudFwiLFxuICBcIlBvaXNzb25Qb2ludFByb2Nlc3NcIixcbiAgXCJQb2lzc29uUHJvY2Vzc1wiLFxuICBcIlBvaXNzb25XaW5kb3dcIixcbiAgXCJQb2xhckF4ZXNcIixcbiAgXCJQb2xhckF4ZXNPcmlnaW5cIixcbiAgXCJQb2xhckdyaWRMaW5lc1wiLFxuICBcIlBvbGFyUGxvdFwiLFxuICBcIlBvbGFyVGlja3NcIixcbiAgXCJQb2xlWmVyb01hcmtlcnNcIixcbiAgXCJQb2x5YUFlcHBsaURpc3RyaWJ1dGlvblwiLFxuICBcIlBvbHlHYW1tYVwiLFxuICBcIlBvbHlnb25cIixcbiAgXCJQb2x5Z29uM0RCb3hcIixcbiAgXCJQb2x5Z29uM0RCb3hPcHRpb25zXCIsXG4gIFwiUG9seWdvbmFsTnVtYmVyXCIsXG4gIFwiUG9seWdvbkFuZ2xlXCIsXG4gIFwiUG9seWdvbkJveFwiLFxuICBcIlBvbHlnb25Cb3hPcHRpb25zXCIsXG4gIFwiUG9seWdvbkNvb3JkaW5hdGVzXCIsXG4gIFwiUG9seWdvbkRlY29tcG9zaXRpb25cIixcbiAgXCJQb2x5Z29uSG9sZVNjYWxlXCIsXG4gIFwiUG9seWdvbkludGVyc2VjdGlvbnNcIixcbiAgXCJQb2x5Z29uU2NhbGVcIixcbiAgXCJQb2x5aGVkcm9uXCIsXG4gIFwiUG9seWhlZHJvbkFuZ2xlXCIsXG4gIFwiUG9seWhlZHJvbkJveFwiLFxuICBcIlBvbHloZWRyb25Cb3hPcHRpb25zXCIsXG4gIFwiUG9seWhlZHJvbkNvb3JkaW5hdGVzXCIsXG4gIFwiUG9seWhlZHJvbkRhdGFcIixcbiAgXCJQb2x5aGVkcm9uRGVjb21wb3NpdGlvblwiLFxuICBcIlBvbHloZWRyb25HZW51c1wiLFxuICBcIlBvbHlMb2dcIixcbiAgXCJQb2x5bm9taWFsRXhwcmVzc2lvblFcIixcbiAgXCJQb2x5bm9taWFsRXh0ZW5kZWRHQ0RcIixcbiAgXCJQb2x5bm9taWFsRm9ybVwiLFxuICBcIlBvbHlub21pYWxHQ0RcIixcbiAgXCJQb2x5bm9taWFsTENNXCIsXG4gIFwiUG9seW5vbWlhbE1vZFwiLFxuICBcIlBvbHlub21pYWxRXCIsXG4gIFwiUG9seW5vbWlhbFF1b3RpZW50XCIsXG4gIFwiUG9seW5vbWlhbFF1b3RpZW50UmVtYWluZGVyXCIsXG4gIFwiUG9seW5vbWlhbFJlZHVjZVwiLFxuICBcIlBvbHlub21pYWxSZW1haW5kZXJcIixcbiAgXCJQb2x5bm9taWFsc1wiLFxuICBcIlBvbHlub21pYWxTdW1PZlNxdWFyZXNMaXN0XCIsXG4gIFwiUG9vbGluZ0xheWVyXCIsXG4gIFwiUG9wdXBNZW51XCIsXG4gIFwiUG9wdXBNZW51Qm94XCIsXG4gIFwiUG9wdXBNZW51Qm94T3B0aW9uc1wiLFxuICBcIlBvcHVwVmlld1wiLFxuICBcIlBvcHVwV2luZG93XCIsXG4gIFwiUG9zaXRpb25cIixcbiAgXCJQb3NpdGlvbkluZGV4XCIsXG4gIFwiUG9zaXRpb25MYXJnZXN0XCIsXG4gIFwiUG9zaXRpb25TbWFsbGVzdFwiLFxuICBcIlBvc2l0aXZlXCIsXG4gIFwiUG9zaXRpdmVEZWZpbml0ZU1hdHJpeFFcIixcbiAgXCJQb3NpdGl2ZUludGVnZXJzXCIsXG4gIFwiUG9zaXRpdmVseU9yaWVudGVkUG9pbnRzXCIsXG4gIFwiUG9zaXRpdmVSYXRpb25hbHNcIixcbiAgXCJQb3NpdGl2ZVJlYWxzXCIsXG4gIFwiUG9zaXRpdmVTZW1pZGVmaW5pdGVNYXRyaXhRXCIsXG4gIFwiUG9zc2libGVaZXJvUVwiLFxuICBcIlBvc3RmaXhcIixcbiAgXCJQb3N0U2NyaXB0XCIsXG4gIFwiUG93ZXJcIixcbiAgXCJQb3dlckRpc3RyaWJ1dGlvblwiLFxuICBcIlBvd2VyRXhwYW5kXCIsXG4gIFwiUG93ZXJNb2RcIixcbiAgXCJQb3dlck1vZExpc3RcIixcbiAgXCJQb3dlclJhbmdlXCIsXG4gIFwiUG93ZXJTcGVjdHJhbERlbnNpdHlcIixcbiAgXCJQb3dlcnNSZXByZXNlbnRhdGlvbnNcIixcbiAgXCJQb3dlclN5bW1ldHJpY1BvbHlub21pYWxcIixcbiAgXCJQcmVjZWRlbmNlXCIsXG4gIFwiUHJlY2VkZW5jZUZvcm1cIixcbiAgXCJQcmVjZWRlc1wiLFxuICBcIlByZWNlZGVzRXF1YWxcIixcbiAgXCJQcmVjZWRlc1NsYW50RXF1YWxcIixcbiAgXCJQcmVjZWRlc1RpbGRlXCIsXG4gIFwiUHJlY2lzaW9uXCIsXG4gIFwiUHJlY2lzaW9uR29hbFwiLFxuICBcIlByZURlY3JlbWVudFwiLFxuICBcIlByZWRpY3RcIixcbiAgXCJQcmVkaWN0aW9uUm9vdFwiLFxuICBcIlByZWRpY3RvckZ1bmN0aW9uXCIsXG4gIFwiUHJlZGljdG9ySW5mb3JtYXRpb25cIixcbiAgXCJQcmVkaWN0b3JNZWFzdXJlbWVudHNcIixcbiAgXCJQcmVkaWN0b3JNZWFzdXJlbWVudHNPYmplY3RcIixcbiAgXCJQcmVlbXB0UHJvdGVjdFwiLFxuICBcIlByZWZlcmVuY2VzUGF0aFwiLFxuICBcIlByZWZlcmVuY2VzU2V0dGluZ3NcIixcbiAgXCJQcmVmaXhcIixcbiAgXCJQcmVJbmNyZW1lbnRcIixcbiAgXCJQcmVwZW5kXCIsXG4gIFwiUHJlcGVuZExheWVyXCIsXG4gIFwiUHJlcGVuZFRvXCIsXG4gIFwiUHJlcHJvY2Vzc2luZ1J1bGVzXCIsXG4gIFwiUHJlc2VydmVDb2xvclwiLFxuICBcIlByZXNlcnZlSW1hZ2VPcHRpb25zXCIsXG4gIFwiUHJldmlvdXNcIixcbiAgXCJQcmV2aW91c0NlbGxcIixcbiAgXCJQcmV2aW91c0RhdGVcIixcbiAgXCJQcmljZUdyYXBoRGlzdHJpYnV0aW9uXCIsXG4gIFwiUHJpbWFyeVBsYWNlaG9sZGVyXCIsXG4gIFwiUHJpbWVcIixcbiAgXCJQcmltZU51XCIsXG4gIFwiUHJpbWVPbWVnYVwiLFxuICBcIlByaW1lUGlcIixcbiAgXCJQcmltZVBvd2VyUVwiLFxuICBcIlByaW1lUVwiLFxuICBcIlByaW1lc1wiLFxuICBcIlByaW1lWmV0YVBcIixcbiAgXCJQcmltaXRpdmVQb2x5bm9taWFsUVwiLFxuICBcIlByaW1pdGl2ZVJvb3RcIixcbiAgXCJQcmltaXRpdmVSb290TGlzdFwiLFxuICBcIlByaW5jaXBhbENvbXBvbmVudHNcIixcbiAgXCJQcmluY2lwYWxWYWx1ZVwiLFxuICBcIlByaW50XCIsXG4gIFwiUHJpbnRhYmxlQVNDSUlRXCIsXG4gIFwiUHJpbnRBY3Rpb25cIixcbiAgXCJQcmludEZvcm1cIixcbiAgXCJQcmludGluZ0NvcGllc1wiLFxuICBcIlByaW50aW5nT3B0aW9uc1wiLFxuICBcIlByaW50aW5nUGFnZVJhbmdlXCIsXG4gIFwiUHJpbnRpbmdTdGFydGluZ1BhZ2VOdW1iZXJcIixcbiAgXCJQcmludGluZ1N0eWxlRW52aXJvbm1lbnRcIixcbiAgXCJQcmludG91dDNEXCIsXG4gIFwiUHJpbnRvdXQzRFByZXZpZXdlclwiLFxuICBcIlByaW50UHJlY2lzaW9uXCIsXG4gIFwiUHJpbnRUZW1wb3JhcnlcIixcbiAgXCJQcmlzbVwiLFxuICBcIlByaXNtQm94XCIsXG4gIFwiUHJpc21Cb3hPcHRpb25zXCIsXG4gIFwiUHJpdmF0ZUNlbGxPcHRpb25zXCIsXG4gIFwiUHJpdmF0ZUV2YWx1YXRpb25PcHRpb25zXCIsXG4gIFwiUHJpdmF0ZUZvbnRPcHRpb25zXCIsXG4gIFwiUHJpdmF0ZUZyb250RW5kT3B0aW9uc1wiLFxuICBcIlByaXZhdGVLZXlcIixcbiAgXCJQcml2YXRlTm90ZWJvb2tPcHRpb25zXCIsXG4gIFwiUHJpdmF0ZVBhdGhzXCIsXG4gIFwiUHJvYmFiaWxpdHlcIixcbiAgXCJQcm9iYWJpbGl0eURpc3RyaWJ1dGlvblwiLFxuICBcIlByb2JhYmlsaXR5UGxvdFwiLFxuICBcIlByb2JhYmlsaXR5UHJcIixcbiAgXCJQcm9iYWJpbGl0eVNjYWxlUGxvdFwiLFxuICBcIlByb2JpdE1vZGVsRml0XCIsXG4gIFwiUHJvY2Vzc0Nvbm5lY3Rpb25cIixcbiAgXCJQcm9jZXNzRGlyZWN0b3J5XCIsXG4gIFwiUHJvY2Vzc0Vudmlyb25tZW50XCIsXG4gIFwiUHJvY2Vzc2VzXCIsXG4gIFwiUHJvY2Vzc0VzdGltYXRvclwiLFxuICBcIlByb2Nlc3NJbmZvcm1hdGlvblwiLFxuICBcIlByb2Nlc3NPYmplY3RcIixcbiAgXCJQcm9jZXNzUGFyYW1ldGVyQXNzdW1wdGlvbnNcIixcbiAgXCJQcm9jZXNzUGFyYW1ldGVyUVwiLFxuICBcIlByb2Nlc3NTdGF0ZURvbWFpblwiLFxuICBcIlByb2Nlc3NTdGF0dXNcIixcbiAgXCJQcm9jZXNzVGltZURvbWFpblwiLFxuICBcIlByb2R1Y3RcIixcbiAgXCJQcm9kdWN0RGlzdHJpYnV0aW9uXCIsXG4gIFwiUHJvZHVjdExvZ1wiLFxuICBcIlByb2dyZXNzSW5kaWNhdG9yXCIsXG4gIFwiUHJvZ3Jlc3NJbmRpY2F0b3JCb3hcIixcbiAgXCJQcm9ncmVzc0luZGljYXRvckJveE9wdGlvbnNcIixcbiAgXCJQcm9ncmVzc1JlcG9ydGluZ1wiLFxuICBcIlByb2plY3Rpb25cIixcbiAgXCJQcm9sb2dcIixcbiAgXCJQcm9tcHRGb3JtXCIsXG4gIFwiUHJvb2ZPYmplY3RcIixcbiAgXCJQcm9wYWdhdGVBYm9ydHNcIixcbiAgXCJQcm9wZXJ0aWVzXCIsXG4gIFwiUHJvcGVydHlcIixcbiAgXCJQcm9wZXJ0eUxpc3RcIixcbiAgXCJQcm9wZXJ0eVZhbHVlXCIsXG4gIFwiUHJvcG9ydGlvblwiLFxuICBcIlByb3BvcnRpb25hbFwiLFxuICBcIlByb3RlY3RcIixcbiAgXCJQcm90ZWN0ZWRcIixcbiAgXCJQcm90ZWluRGF0YVwiLFxuICBcIlBydW5pbmdcIixcbiAgXCJQc2V1ZG9JbnZlcnNlXCIsXG4gIFwiUHN5Y2hyb21ldHJpY1Byb3BlcnR5RGF0YVwiLFxuICBcIlB1YmxpY0tleVwiLFxuICBcIlB1Ymxpc2hlcklEXCIsXG4gIFwiUHVsc2FyRGF0YVwiLFxuICBcIlB1bmN0dWF0aW9uQ2hhcmFjdGVyXCIsXG4gIFwiUHVycGxlXCIsXG4gIFwiUHV0XCIsXG4gIFwiUHV0QXBwZW5kXCIsXG4gIFwiUHlyYW1pZFwiLFxuICBcIlB5cmFtaWRCb3hcIixcbiAgXCJQeXJhbWlkQm94T3B0aW9uc1wiLFxuICBcIlFCaW5vbWlhbFwiLFxuICBcIlFGYWN0b3JpYWxcIixcbiAgXCJRR2FtbWFcIixcbiAgXCJRSHlwZXJnZW9tZXRyaWNQRlFcIixcbiAgXCJRbkRpc3BlcnNpb25cIixcbiAgXCJRUG9jaGhhbW1lclwiLFxuICBcIlFQb2x5R2FtbWFcIixcbiAgXCJRUkRlY29tcG9zaXRpb25cIixcbiAgXCJRdWFkcmF0aWNJcnJhdGlvbmFsUVwiLFxuICBcIlF1YWRyYXRpY09wdGltaXphdGlvblwiLFxuICBcIlF1YW50aWxlXCIsXG4gIFwiUXVhbnRpbGVQbG90XCIsXG4gIFwiUXVhbnRpdHlcIixcbiAgXCJRdWFudGl0eUFycmF5XCIsXG4gIFwiUXVhbnRpdHlEaXN0cmlidXRpb25cIixcbiAgXCJRdWFudGl0eUZvcm1cIixcbiAgXCJRdWFudGl0eU1hZ25pdHVkZVwiLFxuICBcIlF1YW50aXR5UVwiLFxuICBcIlF1YW50aXR5VW5pdFwiLFxuICBcIlF1YW50aXR5VmFyaWFibGVcIixcbiAgXCJRdWFudGl0eVZhcmlhYmxlQ2Fub25pY2FsVW5pdFwiLFxuICBcIlF1YW50aXR5VmFyaWFibGVEaW1lbnNpb25zXCIsXG4gIFwiUXVhbnRpdHlWYXJpYWJsZUlkZW50aWZpZXJcIixcbiAgXCJRdWFudGl0eVZhcmlhYmxlUGh5c2ljYWxRdWFudGl0eVwiLFxuICBcIlF1YXJ0aWNzXCIsXG4gIFwiUXVhcnRpbGVEZXZpYXRpb25cIixcbiAgXCJRdWFydGlsZXNcIixcbiAgXCJRdWFydGlsZVNrZXduZXNzXCIsXG4gIFwiUXVlcnlcIixcbiAgXCJRdWVzdGlvbkdlbmVyYXRvclwiLFxuICBcIlF1ZXN0aW9uSW50ZXJmYWNlXCIsXG4gIFwiUXVlc3Rpb25PYmplY3RcIixcbiAgXCJRdWVzdGlvblNlbGVjdG9yXCIsXG4gIFwiUXVldWVpbmdOZXR3b3JrUHJvY2Vzc1wiLFxuICBcIlF1ZXVlaW5nUHJvY2Vzc1wiLFxuICBcIlF1ZXVlUHJvcGVydGllc1wiLFxuICBcIlF1aWV0XCIsXG4gIFwiUXVpZXRFY2hvXCIsXG4gIFwiUXVpdFwiLFxuICBcIlF1b3RpZW50XCIsXG4gIFwiUXVvdGllbnRSZW1haW5kZXJcIixcbiAgXCJSYWRpYWxBeGlzUGxvdFwiLFxuICBcIlJhZGlhbEdyYWRpZW50RmlsbGluZ1wiLFxuICBcIlJhZGlhbEdyYWRpZW50SW1hZ2VcIixcbiAgXCJSYWRpYWxpdHlDZW50cmFsaXR5XCIsXG4gIFwiUmFkaWNhbEJveFwiLFxuICBcIlJhZGljYWxCb3hPcHRpb25zXCIsXG4gIFwiUmFkaW9CdXR0b25cIixcbiAgXCJSYWRpb0J1dHRvbkJhclwiLFxuICBcIlJhZGlvQnV0dG9uQm94XCIsXG4gIFwiUmFkaW9CdXR0b25Cb3hPcHRpb25zXCIsXG4gIFwiUmFkb25cIixcbiAgXCJSYWRvblRyYW5zZm9ybVwiLFxuICBcIlJhbWFudWphblRhdVwiLFxuICBcIlJhbWFudWphblRhdUxcIixcbiAgXCJSYW1hbnVqYW5UYXVUaGV0YVwiLFxuICBcIlJhbWFudWphblRhdVpcIixcbiAgXCJSYW1wXCIsXG4gIFwiUmFuZG9tXCIsXG4gIFwiUmFuZG9tQXJyYXlMYXllclwiLFxuICBcIlJhbmRvbUNob2ljZVwiLFxuICBcIlJhbmRvbUNvbG9yXCIsXG4gIFwiUmFuZG9tQ29tcGxleFwiLFxuICBcIlJhbmRvbURhdGVcIixcbiAgXCJSYW5kb21FbnRpdHlcIixcbiAgXCJSYW5kb21GdW5jdGlvblwiLFxuICBcIlJhbmRvbUdlbmVyYXRvclN0YXRlXCIsXG4gIFwiUmFuZG9tR2VvUG9zaXRpb25cIixcbiAgXCJSYW5kb21HcmFwaFwiLFxuICBcIlJhbmRvbUltYWdlXCIsXG4gIFwiUmFuZG9tSW5zdGFuY2VcIixcbiAgXCJSYW5kb21JbnRlZ2VyXCIsXG4gIFwiUmFuZG9tUGVybXV0YXRpb25cIixcbiAgXCJSYW5kb21Qb2ludFwiLFxuICBcIlJhbmRvbVBvaW50Q29uZmlndXJhdGlvblwiLFxuICBcIlJhbmRvbVBvbHlnb25cIixcbiAgXCJSYW5kb21Qb2x5aGVkcm9uXCIsXG4gIFwiUmFuZG9tUHJpbWVcIixcbiAgXCJSYW5kb21SZWFsXCIsXG4gIFwiUmFuZG9tU2FtcGxlXCIsXG4gIFwiUmFuZG9tU2VlZFwiLFxuICBcIlJhbmRvbVNlZWRpbmdcIixcbiAgXCJSYW5kb21UaW1lXCIsXG4gIFwiUmFuZG9tVHJlZVwiLFxuICBcIlJhbmRvbVZhcmlhdGVcIixcbiAgXCJSYW5kb21XYWxrUHJvY2Vzc1wiLFxuICBcIlJhbmRvbVdvcmRcIixcbiAgXCJSYW5nZVwiLFxuICBcIlJhbmdlRmlsdGVyXCIsXG4gIFwiUmFuZ2VTcGVjaWZpY2F0aW9uXCIsXG4gIFwiUmFua2VkTWF4XCIsXG4gIFwiUmFua2VkTWluXCIsXG4gIFwiUmFyZXJQcm9iYWJpbGl0eVwiLFxuICBcIlJhc3RlclwiLFxuICBcIlJhc3RlcjNEXCIsXG4gIFwiUmFzdGVyM0RCb3hcIixcbiAgXCJSYXN0ZXIzREJveE9wdGlvbnNcIixcbiAgXCJSYXN0ZXJBcnJheVwiLFxuICBcIlJhc3RlckJveFwiLFxuICBcIlJhc3RlckJveE9wdGlvbnNcIixcbiAgXCJSYXN0ZXJpemVcIixcbiAgXCJSYXN0ZXJTaXplXCIsXG4gIFwiUmF0aW9uYWxcIixcbiAgXCJSYXRpb25hbEV4cHJlc3Npb25RXCIsXG4gIFwiUmF0aW9uYWxGdW5jdGlvbnNcIixcbiAgXCJSYXRpb25hbGl6ZVwiLFxuICBcIlJhdGlvbmFsc1wiLFxuICBcIlJhdGlvc1wiLFxuICBcIlJhd0FycmF5XCIsXG4gIFwiUmF3Qm94ZXNcIixcbiAgXCJSYXdEYXRhXCIsXG4gIFwiUmF3TWVkaXVtXCIsXG4gIFwiUmF5bGVpZ2hEaXN0cmlidXRpb25cIixcbiAgXCJSZVwiLFxuICBcIlJlYWN0aW9uQmFsYW5jZVwiLFxuICBcIlJlYWN0aW9uQmFsYW5jZWRRXCIsXG4gIFwiUmVhY3Rpb25QREVUZXJtXCIsXG4gIFwiUmVhZFwiLFxuICBcIlJlYWRCeXRlQXJyYXlcIixcbiAgXCJSZWFkTGluZVwiLFxuICBcIlJlYWRMaXN0XCIsXG4gIFwiUmVhZFByb3RlY3RlZFwiLFxuICBcIlJlYWRTdHJpbmdcIixcbiAgXCJSZWFsXCIsXG4gIFwiUmVhbEFic1wiLFxuICBcIlJlYWxCbG9ja0RpYWdvbmFsRm9ybVwiLFxuICBcIlJlYWxEaWdpdHNcIixcbiAgXCJSZWFsRXhwb25lbnRcIixcbiAgXCJSZWFsc1wiLFxuICBcIlJlYWxTaWduXCIsXG4gIFwiUmVhcFwiLFxuICBcIlJlYnVpbGRQYWNsZXREYXRhXCIsXG4gIFwiUmVjYWxpYnJhdGlvbkZ1bmN0aW9uXCIsXG4gIFwiUmVjb2duaXRpb25QcmlvclwiLFxuICBcIlJlY29nbml0aW9uVGhyZXNob2xkXCIsXG4gIFwiUmVjb25zdHJ1Y3Rpb25NZXNoXCIsXG4gIFwiUmVjb3JkXCIsXG4gIFwiUmVjb3JkTGlzdHNcIixcbiAgXCJSZWNvcmRTZXBhcmF0b3JzXCIsXG4gIFwiUmVjdGFuZ2xlXCIsXG4gIFwiUmVjdGFuZ2xlQm94XCIsXG4gIFwiUmVjdGFuZ2xlQm94T3B0aW9uc1wiLFxuICBcIlJlY3RhbmdsZUNoYXJ0XCIsXG4gIFwiUmVjdGFuZ2xlQ2hhcnQzRFwiLFxuICBcIlJlY3Rhbmd1bGFyUmVwZWF0aW5nRWxlbWVudFwiLFxuICBcIlJlY3VycmVuY2VGaWx0ZXJcIixcbiAgXCJSZWN1cnJlbmNlVGFibGVcIixcbiAgXCJSZWN1cnJpbmdEaWdpdHNGb3JtXCIsXG4gIFwiUmVkXCIsXG4gIFwiUmVkdWNlXCIsXG4gIFwiUmVmQm94XCIsXG4gIFwiUmVmZXJlbmNlTGluZVN0eWxlXCIsXG4gIFwiUmVmZXJlbmNlTWFya2Vyc1wiLFxuICBcIlJlZmVyZW5jZU1hcmtlclN0eWxlXCIsXG4gIFwiUmVmaW5lXCIsXG4gIFwiUmVmbGVjdGlvbk1hdHJpeFwiLFxuICBcIlJlZmxlY3Rpb25UcmFuc2Zvcm1cIixcbiAgXCJSZWZyZXNoXCIsXG4gIFwiUmVmcmVzaFJhdGVcIixcbiAgXCJSZWdpb25cIixcbiAgXCJSZWdpb25CaW5hcml6ZVwiLFxuICBcIlJlZ2lvbkJvdW5kYXJ5XCIsXG4gIFwiUmVnaW9uQm91bmRhcnlTdHlsZVwiLFxuICBcIlJlZ2lvbkJvdW5kc1wiLFxuICBcIlJlZ2lvbkNlbnRyb2lkXCIsXG4gIFwiUmVnaW9uQ29uZ3J1ZW50XCIsXG4gIFwiUmVnaW9uQ29udmVydFwiLFxuICBcIlJlZ2lvbkRpZmZlcmVuY2VcIixcbiAgXCJSZWdpb25EaWxhdGlvblwiLFxuICBcIlJlZ2lvbkRpbWVuc2lvblwiLFxuICBcIlJlZ2lvbkRpc2pvaW50XCIsXG4gIFwiUmVnaW9uRGlzdGFuY2VcIixcbiAgXCJSZWdpb25EaXN0YW5jZUZ1bmN0aW9uXCIsXG4gIFwiUmVnaW9uRW1iZWRkaW5nRGltZW5zaW9uXCIsXG4gIFwiUmVnaW9uRXF1YWxcIixcbiAgXCJSZWdpb25Fcm9zaW9uXCIsXG4gIFwiUmVnaW9uRmlsbGluZ1N0eWxlXCIsXG4gIFwiUmVnaW9uRml0XCIsXG4gIFwiUmVnaW9uRnVuY3Rpb25cIixcbiAgXCJSZWdpb25JbWFnZVwiLFxuICBcIlJlZ2lvbkludGVyc2VjdGlvblwiLFxuICBcIlJlZ2lvbk1lYXN1cmVcIixcbiAgXCJSZWdpb25NZW1iZXJcIixcbiAgXCJSZWdpb25NZW1iZXJGdW5jdGlvblwiLFxuICBcIlJlZ2lvbk1vbWVudFwiLFxuICBcIlJlZ2lvbk5lYXJlc3RcIixcbiAgXCJSZWdpb25OZWFyZXN0RnVuY3Rpb25cIixcbiAgXCJSZWdpb25QbG90XCIsXG4gIFwiUmVnaW9uUGxvdDNEXCIsXG4gIFwiUmVnaW9uUHJvZHVjdFwiLFxuICBcIlJlZ2lvblFcIixcbiAgXCJSZWdpb25SZXNpemVcIixcbiAgXCJSZWdpb25TaW1pbGFyXCIsXG4gIFwiUmVnaW9uU2l6ZVwiLFxuICBcIlJlZ2lvblN5bW1ldHJpY0RpZmZlcmVuY2VcIixcbiAgXCJSZWdpb25VbmlvblwiLFxuICBcIlJlZ2lvbldpdGhpblwiLFxuICBcIlJlZ2lzdGVyRXh0ZXJuYWxFdmFsdWF0b3JcIixcbiAgXCJSZWd1bGFyRXhwcmVzc2lvblwiLFxuICBcIlJlZ3VsYXJpemF0aW9uXCIsXG4gIFwiUmVndWxhcmx5U2FtcGxlZFFcIixcbiAgXCJSZWd1bGFyUG9seWdvblwiLFxuICBcIlJlSW1cIixcbiAgXCJSZUltTGFiZWxzXCIsXG4gIFwiUmVJbVBsb3RcIixcbiAgXCJSZUltU3R5bGVcIixcbiAgXCJSZWluc3RhbGxcIixcbiAgXCJSZWxhdGlvbmFsRGF0YWJhc2VcIixcbiAgXCJSZWxhdGlvbkdyYXBoXCIsXG4gIFwiUmVsZWFzZVwiLFxuICBcIlJlbGVhc2VIb2xkXCIsXG4gIFwiUmVsaWFiaWxpdHlEaXN0cmlidXRpb25cIixcbiAgXCJSZWxpZWZJbWFnZVwiLFxuICBcIlJlbGllZlBsb3RcIixcbiAgXCJSZW1vdGVBdXRob3JpemF0aW9uQ2FjaGluZ1wiLFxuICBcIlJlbW90ZUJhdGNoSm9iQWJvcnRcIixcbiAgXCJSZW1vdGVCYXRjaEpvYk9iamVjdFwiLFxuICBcIlJlbW90ZUJhdGNoSm9ic1wiLFxuICBcIlJlbW90ZUJhdGNoTWFwU3VibWl0XCIsXG4gIFwiUmVtb3RlQmF0Y2hTdWJtaXNzaW9uRW52aXJvbm1lbnRcIixcbiAgXCJSZW1vdGVCYXRjaFN1Ym1pdFwiLFxuICBcIlJlbW90ZUNvbm5lY3RcIixcbiAgXCJSZW1vdGVDb25uZWN0aW9uT2JqZWN0XCIsXG4gIFwiUmVtb3RlRXZhbHVhdGVcIixcbiAgXCJSZW1vdGVGaWxlXCIsXG4gIFwiUmVtb3RlSW5wdXRGaWxlc1wiLFxuICBcIlJlbW90ZUtlcm5lbE9iamVjdFwiLFxuICBcIlJlbW90ZVByb3ZpZGVyU2V0dGluZ3NcIixcbiAgXCJSZW1vdGVSdW5cIixcbiAgXCJSZW1vdGVSdW5Qcm9jZXNzXCIsXG4gIFwiUmVtb3ZhbENvbmRpdGlvbnNcIixcbiAgXCJSZW1vdmVcIixcbiAgXCJSZW1vdmVBbHBoYUNoYW5uZWxcIixcbiAgXCJSZW1vdmVBc3luY2hyb25vdXNUYXNrXCIsXG4gIFwiUmVtb3ZlQXVkaW9TdHJlYW1cIixcbiAgXCJSZW1vdmVCYWNrZ3JvdW5kXCIsXG4gIFwiUmVtb3ZlQ2hhbm5lbExpc3RlbmVyXCIsXG4gIFwiUmVtb3ZlQ2hhbm5lbFN1YnNjcmliZXJzXCIsXG4gIFwiUmVtb3ZlZFwiLFxuICBcIlJlbW92ZURpYWNyaXRpY3NcIixcbiAgXCJSZW1vdmVJbnB1dFN0cmVhbU1ldGhvZFwiLFxuICBcIlJlbW92ZU91dHB1dFN0cmVhbU1ldGhvZFwiLFxuICBcIlJlbW92ZVByb3BlcnR5XCIsXG4gIFwiUmVtb3ZlU2NoZWR1bGVkVGFza1wiLFxuICBcIlJlbW92ZVVzZXJzXCIsXG4gIFwiUmVtb3ZlVmlkZW9TdHJlYW1cIixcbiAgXCJSZW5hbWVEaXJlY3RvcnlcIixcbiAgXCJSZW5hbWVGaWxlXCIsXG4gIFwiUmVuZGVyQWxsXCIsXG4gIFwiUmVuZGVyaW5nT3B0aW9uc1wiLFxuICBcIlJlbmV3YWxQcm9jZXNzXCIsXG4gIFwiUmVua29DaGFydFwiLFxuICBcIlJlcGFpck1lc2hcIixcbiAgXCJSZXBlYXRlZFwiLFxuICBcIlJlcGVhdGVkTnVsbFwiLFxuICBcIlJlcGVhdGVkU3RyaW5nXCIsXG4gIFwiUmVwZWF0ZWRUaW1pbmdcIixcbiAgXCJSZXBlYXRpbmdFbGVtZW50XCIsXG4gIFwiUmVwbGFjZVwiLFxuICBcIlJlcGxhY2VBbGxcIixcbiAgXCJSZXBsYWNlQXRcIixcbiAgXCJSZXBsYWNlSGVsZFBhcnRcIixcbiAgXCJSZXBsYWNlSW1hZ2VWYWx1ZVwiLFxuICBcIlJlcGxhY2VMaXN0XCIsXG4gIFwiUmVwbGFjZVBhcnRcIixcbiAgXCJSZXBsYWNlUGl4ZWxWYWx1ZVwiLFxuICBcIlJlcGxhY2VSZXBlYXRlZFwiLFxuICBcIlJlcGxpY2F0ZUxheWVyXCIsXG4gIFwiUmVxdWlyZWRQaHlzaWNhbFF1YW50aXRpZXNcIixcbiAgXCJSZXNhbXBsaW5nXCIsXG4gIFwiUmVzYW1wbGluZ0FsZ29yaXRobURhdGFcIixcbiAgXCJSZXNhbXBsaW5nTWV0aG9kXCIsXG4gIFwiUmVzY2FsZVwiLFxuICBcIlJlc2NhbGluZ1RyYW5zZm9ybVwiLFxuICBcIlJlc2V0RGlyZWN0b3J5XCIsXG4gIFwiUmVzZXRTY2hlZHVsZWRUYXNrXCIsXG4gIFwiUmVzaGFwZUxheWVyXCIsXG4gIFwiUmVzaWR1ZVwiLFxuICBcIlJlc2lkdWVTdW1cIixcbiAgXCJSZXNpemVMYXllclwiLFxuICBcIlJlc29sdmVcIixcbiAgXCJSZXNvbHZlQ29udGV4dEFsaWFzZXNcIixcbiAgXCJSZXNvdXJjZUFjcXVpcmVcIixcbiAgXCJSZXNvdXJjZURhdGFcIixcbiAgXCJSZXNvdXJjZUZ1bmN0aW9uXCIsXG4gIFwiUmVzb3VyY2VPYmplY3RcIixcbiAgXCJSZXNvdXJjZVJlZ2lzdGVyXCIsXG4gIFwiUmVzb3VyY2VSZW1vdmVcIixcbiAgXCJSZXNvdXJjZVNlYXJjaFwiLFxuICBcIlJlc291cmNlU3VibWlzc2lvbk9iamVjdFwiLFxuICBcIlJlc291cmNlU3VibWl0XCIsXG4gIFwiUmVzb3VyY2VTeXN0ZW1CYXNlXCIsXG4gIFwiUmVzb3VyY2VTeXN0ZW1QYXRoXCIsXG4gIFwiUmVzb3VyY2VVcGRhdGVcIixcbiAgXCJSZXNvdXJjZVZlcnNpb25cIixcbiAgXCJSZXNwb25zZUZvcm1cIixcbiAgXCJSZXN0XCIsXG4gIFwiUmVzdGFydEludGVydmFsXCIsXG4gIFwiUmVzdHJpY3RlZFwiLFxuICBcIlJlc3VsdGFudFwiLFxuICBcIlJlc3VtZVBhY2tldFwiLFxuICBcIlJldHVyblwiLFxuICBcIlJldHVybkNyZWF0ZXNOZXdDZWxsXCIsXG4gIFwiUmV0dXJuRW50ZXJzSW5wdXRcIixcbiAgXCJSZXR1cm5FeHByZXNzaW9uUGFja2V0XCIsXG4gIFwiUmV0dXJuSW5wdXRGb3JtUGFja2V0XCIsXG4gIFwiUmV0dXJuUGFja2V0XCIsXG4gIFwiUmV0dXJuUmVjZWlwdEZ1bmN0aW9uXCIsXG4gIFwiUmV0dXJuVGV4dFBhY2tldFwiLFxuICBcIlJldmVyc2VcIixcbiAgXCJSZXZlcnNlQXBwbGllZFwiLFxuICBcIlJldmVyc2VCaW9ydGhvZ29uYWxTcGxpbmVXYXZlbGV0XCIsXG4gIFwiUmV2ZXJzZUVsZW1lbnRcIixcbiAgXCJSZXZlcnNlRXF1aWxpYnJpdW1cIixcbiAgXCJSZXZlcnNlR3JhcGhcIixcbiAgXCJSZXZlcnNlU29ydFwiLFxuICBcIlJldmVyc2VTb3J0QnlcIixcbiAgXCJSZXZlcnNlVXBFcXVpbGlicml1bVwiLFxuICBcIlJldm9sdXRpb25BeGlzXCIsXG4gIFwiUmV2b2x1dGlvblBsb3QzRFwiLFxuICBcIlJHQkNvbG9yXCIsXG4gIFwiUmljY2F0aVNvbHZlXCIsXG4gIFwiUmljZURpc3RyaWJ1dGlvblwiLFxuICBcIlJpZGdlRmlsdGVyXCIsXG4gIFwiUmllbWFublJcIixcbiAgXCJSaWVtYW5uU2llZ2VsVGhldGFcIixcbiAgXCJSaWVtYW5uU2llZ2VsWlwiLFxuICBcIlJpZW1hbm5YaVwiLFxuICBcIlJpZmZsZVwiLFxuICBcIlJpZ2h0XCIsXG4gIFwiUmlnaHRBcnJvd1wiLFxuICBcIlJpZ2h0QXJyb3dCYXJcIixcbiAgXCJSaWdodEFycm93TGVmdEFycm93XCIsXG4gIFwiUmlnaHRDb21wb3NpdGlvblwiLFxuICBcIlJpZ2h0Q29zZXRSZXByZXNlbnRhdGl2ZVwiLFxuICBcIlJpZ2h0RG93blRlZVZlY3RvclwiLFxuICBcIlJpZ2h0RG93blZlY3RvclwiLFxuICBcIlJpZ2h0RG93blZlY3RvckJhclwiLFxuICBcIlJpZ2h0VGVlXCIsXG4gIFwiUmlnaHRUZWVBcnJvd1wiLFxuICBcIlJpZ2h0VGVlVmVjdG9yXCIsXG4gIFwiUmlnaHRUcmlhbmdsZVwiLFxuICBcIlJpZ2h0VHJpYW5nbGVCYXJcIixcbiAgXCJSaWdodFRyaWFuZ2xlRXF1YWxcIixcbiAgXCJSaWdodFVwRG93blZlY3RvclwiLFxuICBcIlJpZ2h0VXBUZWVWZWN0b3JcIixcbiAgXCJSaWdodFVwVmVjdG9yXCIsXG4gIFwiUmlnaHRVcFZlY3RvckJhclwiLFxuICBcIlJpZ2h0VmVjdG9yXCIsXG4gIFwiUmlnaHRWZWN0b3JCYXJcIixcbiAgXCJSaXBsZXlLXCIsXG4gIFwiUmlwbGV5UmFzc29uUmVnaW9uXCIsXG4gIFwiUmlza0FjaGlldmVtZW50SW1wb3J0YW5jZVwiLFxuICBcIlJpc2tSZWR1Y3Rpb25JbXBvcnRhbmNlXCIsXG4gIFwiUm9idXN0Q29udmV4T3B0aW1pemF0aW9uXCIsXG4gIFwiUm9nZXJzVGFuaW1vdG9EaXNzaW1pbGFyaXR5XCIsXG4gIFwiUm9sbFBpdGNoWWF3QW5nbGVzXCIsXG4gIFwiUm9sbFBpdGNoWWF3TWF0cml4XCIsXG4gIFwiUm9tYW5OdW1lcmFsXCIsXG4gIFwiUm9vdFwiLFxuICBcIlJvb3RBcHByb3hpbWFudFwiLFxuICBcIlJvb3RJbnRlcnZhbHNcIixcbiAgXCJSb290TG9jdXNQbG90XCIsXG4gIFwiUm9vdE1lYW5TcXVhcmVcIixcbiAgXCJSb290T2ZVbml0eVFcIixcbiAgXCJSb290UmVkdWNlXCIsXG4gIFwiUm9vdHNcIixcbiAgXCJSb290U3VtXCIsXG4gIFwiUm9vdFRyZWVcIixcbiAgXCJSb3RhdGVcIixcbiAgXCJSb3RhdGVMYWJlbFwiLFxuICBcIlJvdGF0ZUxlZnRcIixcbiAgXCJSb3RhdGVSaWdodFwiLFxuICBcIlJvdGF0aW9uQWN0aW9uXCIsXG4gIFwiUm90YXRpb25Cb3hcIixcbiAgXCJSb3RhdGlvbkJveE9wdGlvbnNcIixcbiAgXCJSb3RhdGlvbk1hdHJpeFwiLFxuICBcIlJvdGF0aW9uVHJhbnNmb3JtXCIsXG4gIFwiUm91bmRcIixcbiAgXCJSb3VuZEltcGxpZXNcIixcbiAgXCJSb3VuZGluZ1JhZGl1c1wiLFxuICBcIlJvd1wiLFxuICBcIlJvd0FsaWdubWVudHNcIixcbiAgXCJSb3dCYWNrZ3JvdW5kc1wiLFxuICBcIlJvd0JveFwiLFxuICBcIlJvd0hlaWdodHNcIixcbiAgXCJSb3dMaW5lc1wiLFxuICBcIlJvd01pbkhlaWdodFwiLFxuICBcIlJvd1JlZHVjZVwiLFxuICBcIlJvd3NFcXVhbFwiLFxuICBcIlJvd1NwYWNpbmdzXCIsXG4gIFwiUlNvbHZlXCIsXG4gIFwiUlNvbHZlVmFsdWVcIixcbiAgXCJSdWRpblNoYXBpcm9cIixcbiAgXCJSdWR2YWxpc0dyb3VwUnVcIixcbiAgXCJSdWxlXCIsXG4gIFwiUnVsZUNvbmRpdGlvblwiLFxuICBcIlJ1bGVEZWxheWVkXCIsXG4gIFwiUnVsZUZvcm1cIixcbiAgXCJSdWxlUGxvdFwiLFxuICBcIlJ1bGVyVW5pdHNcIixcbiAgXCJSdWxlc1RyZWVcIixcbiAgXCJSdW5cIixcbiAgXCJSdW5Qcm9jZXNzXCIsXG4gIFwiUnVuU2NoZWR1bGVkVGFza1wiLFxuICBcIlJ1blRocm91Z2hcIixcbiAgXCJSdW50aW1lQXR0cmlidXRlc1wiLFxuICBcIlJ1bnRpbWVPcHRpb25zXCIsXG4gIFwiUnVzc2VsbFJhb0Rpc3NpbWlsYXJpdHlcIixcbiAgXCJTYW1lQXNcIixcbiAgXCJTYW1lUVwiLFxuICBcIlNhbWVUZXN0XCIsXG4gIFwiU2FtZVRlc3RQcm9wZXJ0aWVzXCIsXG4gIFwiU2FtcGxlZEVudGl0eUNsYXNzXCIsXG4gIFwiU2FtcGxlRGVwdGhcIixcbiAgXCJTYW1wbGVkU291bmRGdW5jdGlvblwiLFxuICBcIlNhbXBsZWRTb3VuZExpc3RcIixcbiAgXCJTYW1wbGVSYXRlXCIsXG4gIFwiU2FtcGxpbmdQZXJpb2RcIixcbiAgXCJTQVJJTUFQcm9jZXNzXCIsXG4gIFwiU0FSTUFQcm9jZXNzXCIsXG4gIFwiU0FTVHJpYW5nbGVcIixcbiAgXCJTYXRlbGxpdGVEYXRhXCIsXG4gIFwiU2F0aXNmaWFiaWxpdHlDb3VudFwiLFxuICBcIlNhdGlzZmlhYmlsaXR5SW5zdGFuY2VzXCIsXG4gIFwiU2F0aXNmaWFibGVRXCIsXG4gIFwiU2F0dXJkYXlcIixcbiAgXCJTYXZlXCIsXG4gIFwiU2F2ZWFibGVcIixcbiAgXCJTYXZlQXV0b0RlbGV0ZVwiLFxuICBcIlNhdmVDb25uZWN0aW9uXCIsXG4gIFwiU2F2ZURlZmluaXRpb25zXCIsXG4gIFwiU2F2aXR6a3lHb2xheU1hdHJpeFwiLFxuICBcIlNhd3Rvb3RoV2F2ZVwiLFxuICBcIlNjYWxlXCIsXG4gIFwiU2NhbGVkXCIsXG4gIFwiU2NhbGVEaXZpc2lvbnNcIixcbiAgXCJTY2FsZWRNb3VzZVBvc2l0aW9uXCIsXG4gIFwiU2NhbGVPcmlnaW5cIixcbiAgXCJTY2FsZVBhZGRpbmdcIixcbiAgXCJTY2FsZVJhbmdlc1wiLFxuICBcIlNjYWxlUmFuZ2VTdHlsZVwiLFxuICBcIlNjYWxpbmdGdW5jdGlvbnNcIixcbiAgXCJTY2FsaW5nTWF0cml4XCIsXG4gIFwiU2NhbGluZ1RyYW5zZm9ybVwiLFxuICBcIlNjYW5cIixcbiAgXCJTY2hlZHVsZWRUYXNrXCIsXG4gIFwiU2NoZWR1bGVkVGFza0FjdGl2ZVFcIixcbiAgXCJTY2hlZHVsZWRUYXNrSW5mb3JtYXRpb25cIixcbiAgXCJTY2hlZHVsZWRUYXNrSW5mb3JtYXRpb25EYXRhXCIsXG4gIFwiU2NoZWR1bGVkVGFza09iamVjdFwiLFxuICBcIlNjaGVkdWxlZFRhc2tzXCIsXG4gIFwiU2NodXJEZWNvbXBvc2l0aW9uXCIsXG4gIFwiU2NpZW50aWZpY0Zvcm1cIixcbiAgXCJTY2llbnRpZmljTm90YXRpb25UaHJlc2hvbGRcIixcbiAgXCJTY29yZXJHaVwiLFxuICBcIlNjb3JlckdpUHJpbWVcIixcbiAgXCJTY29yZXJIaVwiLFxuICBcIlNjb3JlckhpUHJpbWVcIixcbiAgXCJTY3JlZW5SZWN0YW5nbGVcIixcbiAgXCJTY3JlZW5TdHlsZUVudmlyb25tZW50XCIsXG4gIFwiU2NyaXB0QmFzZWxpbmVTaGlmdHNcIixcbiAgXCJTY3JpcHRGb3JtXCIsXG4gIFwiU2NyaXB0TGV2ZWxcIixcbiAgXCJTY3JpcHRNaW5TaXplXCIsXG4gIFwiU2NyaXB0UnVsZXNcIixcbiAgXCJTY3JpcHRTaXplTXVsdGlwbGllcnNcIixcbiAgXCJTY3JvbGxiYXJzXCIsXG4gIFwiU2Nyb2xsaW5nT3B0aW9uc1wiLFxuICBcIlNjcm9sbFBvc2l0aW9uXCIsXG4gIFwiU2VhcmNoQWRqdXN0bWVudFwiLFxuICBcIlNlYXJjaEluZGV4T2JqZWN0XCIsXG4gIFwiU2VhcmNoSW5kaWNlc1wiLFxuICBcIlNlYXJjaFF1ZXJ5U3RyaW5nXCIsXG4gIFwiU2VhcmNoUmVzdWx0T2JqZWN0XCIsXG4gIFwiU2VjXCIsXG4gIFwiU2VjaFwiLFxuICBcIlNlY2hEaXN0cmlidXRpb25cIixcbiAgXCJTZWNvbmRPcmRlckNvbmVPcHRpbWl6YXRpb25cIixcbiAgXCJTZWN0aW9uR3JvdXBpbmdcIixcbiAgXCJTZWN0b3JDaGFydFwiLFxuICBcIlNlY3RvckNoYXJ0M0RcIixcbiAgXCJTZWN0b3JPcmlnaW5cIixcbiAgXCJTZWN0b3JTcGFjaW5nXCIsXG4gIFwiU2VjdXJlZEF1dGhlbnRpY2F0aW9uS2V5XCIsXG4gIFwiU2VjdXJlZEF1dGhlbnRpY2F0aW9uS2V5c1wiLFxuICBcIlNlY3VyaXR5Q2VydGlmaWNhdGVcIixcbiAgXCJTZWVkUmFuZG9tXCIsXG4gIFwiU2VsZWN0XCIsXG4gIFwiU2VsZWN0YWJsZVwiLFxuICBcIlNlbGVjdENvbXBvbmVudHNcIixcbiAgXCJTZWxlY3RlZENlbGxzXCIsXG4gIFwiU2VsZWN0ZWROb3RlYm9va1wiLFxuICBcIlNlbGVjdEZpcnN0XCIsXG4gIFwiU2VsZWN0aW9uXCIsXG4gIFwiU2VsZWN0aW9uQW5pbWF0ZVwiLFxuICBcIlNlbGVjdGlvbkNlbGxcIixcbiAgXCJTZWxlY3Rpb25DZWxsQ3JlYXRlQ2VsbFwiLFxuICBcIlNlbGVjdGlvbkNlbGxEZWZhdWx0U3R5bGVcIixcbiAgXCJTZWxlY3Rpb25DZWxsUGFyZW50U3R5bGVcIixcbiAgXCJTZWxlY3Rpb25DcmVhdGVDZWxsXCIsXG4gIFwiU2VsZWN0aW9uRGVidWdnZXJUYWdcIixcbiAgXCJTZWxlY3Rpb25FdmFsdWF0ZVwiLFxuICBcIlNlbGVjdGlvbkV2YWx1YXRlQ3JlYXRlQ2VsbFwiLFxuICBcIlNlbGVjdGlvbk1vdmVcIixcbiAgXCJTZWxlY3Rpb25QbGFjZWhvbGRlclwiLFxuICBcIlNlbGVjdFdpdGhDb250ZW50c1wiLFxuICBcIlNlbGZMb29wc1wiLFxuICBcIlNlbGZMb29wU3R5bGVcIixcbiAgXCJTZW1hbnRpY0ltcG9ydFwiLFxuICBcIlNlbWFudGljSW1wb3J0U3RyaW5nXCIsXG4gIFwiU2VtYW50aWNJbnRlcnByZXRhdGlvblwiLFxuICBcIlNlbWlhbGdlYnJhaWNDb21wb25lbnRJbnN0YW5jZXNcIixcbiAgXCJTZW1pZGVmaW5pdGVPcHRpbWl6YXRpb25cIixcbiAgXCJTZW5kTWFpbFwiLFxuICBcIlNlbmRNZXNzYWdlXCIsXG4gIFwiU2VxdWVuY2VcIixcbiAgXCJTZXF1ZW5jZUFsaWdubWVudFwiLFxuICBcIlNlcXVlbmNlQXR0ZW50aW9uTGF5ZXJcIixcbiAgXCJTZXF1ZW5jZUNhc2VzXCIsXG4gIFwiU2VxdWVuY2VDb3VudFwiLFxuICBcIlNlcXVlbmNlRm9sZFwiLFxuICBcIlNlcXVlbmNlRm9sZExpc3RcIixcbiAgXCJTZXF1ZW5jZUZvcm1cIixcbiAgXCJTZXF1ZW5jZUhvbGRcIixcbiAgXCJTZXF1ZW5jZUluZGljZXNMYXllclwiLFxuICBcIlNlcXVlbmNlTGFzdExheWVyXCIsXG4gIFwiU2VxdWVuY2VNb3N0TGF5ZXJcIixcbiAgXCJTZXF1ZW5jZVBvc2l0aW9uXCIsXG4gIFwiU2VxdWVuY2VQcmVkaWN0XCIsXG4gIFwiU2VxdWVuY2VQcmVkaWN0b3JGdW5jdGlvblwiLFxuICBcIlNlcXVlbmNlUmVwbGFjZVwiLFxuICBcIlNlcXVlbmNlUmVzdExheWVyXCIsXG4gIFwiU2VxdWVuY2VSZXZlcnNlTGF5ZXJcIixcbiAgXCJTZXF1ZW5jZVNwbGl0XCIsXG4gIFwiU2VyaWVzXCIsXG4gIFwiU2VyaWVzQ29lZmZpY2llbnRcIixcbiAgXCJTZXJpZXNEYXRhXCIsXG4gIFwiU2VyaWVzVGVybUdvYWxcIixcbiAgXCJTZXJ2aWNlQ29ubmVjdFwiLFxuICBcIlNlcnZpY2VEaXNjb25uZWN0XCIsXG4gIFwiU2VydmljZUV4ZWN1dGVcIixcbiAgXCJTZXJ2aWNlT2JqZWN0XCIsXG4gIFwiU2VydmljZVJlcXVlc3RcIixcbiAgXCJTZXJ2aWNlUmVzcG9uc2VcIixcbiAgXCJTZXJ2aWNlU3VibWl0XCIsXG4gIFwiU2Vzc2lvblN1Ym1pdFwiLFxuICBcIlNlc3Npb25UaW1lXCIsXG4gIFwiU2V0XCIsXG4gIFwiU2V0QWNjdXJhY3lcIixcbiAgXCJTZXRBbHBoYUNoYW5uZWxcIixcbiAgXCJTZXRBdHRyaWJ1dGVzXCIsXG4gIFwiU2V0YmFja3NcIixcbiAgXCJTZXRDbG91ZERpcmVjdG9yeVwiLFxuICBcIlNldENvb2tpZXNcIixcbiAgXCJTZXREZWxheWVkXCIsXG4gIFwiU2V0RGlyZWN0b3J5XCIsXG4gIFwiU2V0RW52aXJvbm1lbnRcIixcbiAgXCJTZXRGaWxlRGF0ZVwiLFxuICBcIlNldEZpbGVGb3JtYXRQcm9wZXJ0aWVzXCIsXG4gIFwiU2V0T3B0aW9uc1wiLFxuICBcIlNldE9wdGlvbnNQYWNrZXRcIixcbiAgXCJTZXRQZXJtaXNzaW9uc1wiLFxuICBcIlNldFByZWNpc2lvblwiLFxuICBcIlNldFByb3BlcnR5XCIsXG4gIFwiU2V0U2VjdXJlZEF1dGhlbnRpY2F0aW9uS2V5XCIsXG4gIFwiU2V0U2VsZWN0ZWROb3RlYm9va1wiLFxuICBcIlNldFNoYXJlZEZ1bmN0aW9uXCIsXG4gIFwiU2V0U2hhcmVkVmFyaWFibGVcIixcbiAgXCJTZXRTdHJlYW1Qb3NpdGlvblwiLFxuICBcIlNldFN5c3RlbU1vZGVsXCIsXG4gIFwiU2V0U3lzdGVtT3B0aW9uc1wiLFxuICBcIlNldHRlclwiLFxuICBcIlNldHRlckJhclwiLFxuICBcIlNldHRlckJveFwiLFxuICBcIlNldHRlckJveE9wdGlvbnNcIixcbiAgXCJTZXR0aW5nXCIsXG4gIFwiU2V0VXNlcnNcIixcbiAgXCJTaGFkaW5nXCIsXG4gIFwiU2hhbGxvd1wiLFxuICBcIlNoYW5ub25XYXZlbGV0XCIsXG4gIFwiU2hhcGlyb1dpbGtUZXN0XCIsXG4gIFwiU2hhcmVcIixcbiAgXCJTaGFyaW5nTGlzdFwiLFxuICBcIlNoYXJwZW5cIixcbiAgXCJTaGVhcmluZ01hdHJpeFwiLFxuICBcIlNoZWFyaW5nVHJhbnNmb3JtXCIsXG4gIFwiU2hlbGxSZWdpb25cIixcbiAgXCJTaGVuQ2FzdGFuTWF0cml4XCIsXG4gIFwiU2hpZnRlZEdvbXBlcnR6RGlzdHJpYnV0aW9uXCIsXG4gIFwiU2hpZnRSZWdpc3RlclNlcXVlbmNlXCIsXG4gIFwiU2hvcnRcIixcbiAgXCJTaG9ydERvd25BcnJvd1wiLFxuICBcIlNob3J0ZXN0XCIsXG4gIFwiU2hvcnRlc3RNYXRjaFwiLFxuICBcIlNob3J0ZXN0UGF0aEZ1bmN0aW9uXCIsXG4gIFwiU2hvcnRMZWZ0QXJyb3dcIixcbiAgXCJTaG9ydFJpZ2h0QXJyb3dcIixcbiAgXCJTaG9ydFRpbWVGb3VyaWVyXCIsXG4gIFwiU2hvcnRUaW1lRm91cmllckRhdGFcIixcbiAgXCJTaG9ydFVwQXJyb3dcIixcbiAgXCJTaG93XCIsXG4gIFwiU2hvd0F1dG9Db252ZXJ0XCIsXG4gIFwiU2hvd0F1dG9TcGVsbENoZWNrXCIsXG4gIFwiU2hvd0F1dG9TdHlsZXNcIixcbiAgXCJTaG93Q2VsbEJyYWNrZXRcIixcbiAgXCJTaG93Q2VsbExhYmVsXCIsXG4gIFwiU2hvd0NlbGxUYWdzXCIsXG4gIFwiU2hvd0Nsb3NlZENlbGxBcmVhXCIsXG4gIFwiU2hvd0NvZGVBc3Npc3RcIixcbiAgXCJTaG93Q29udGVudHNcIixcbiAgXCJTaG93Q29udHJvbHNcIixcbiAgXCJTaG93Q3Vyc29yVHJhY2tlclwiLFxuICBcIlNob3dHcm91cE9wZW5DbG9zZUljb25cIixcbiAgXCJTaG93R3JvdXBPcGVuZXJcIixcbiAgXCJTaG93SW52aXNpYmxlQ2hhcmFjdGVyc1wiLFxuICBcIlNob3dQYWdlQnJlYWtzXCIsXG4gIFwiU2hvd1ByZWRpY3RpdmVJbnRlcmZhY2VcIixcbiAgXCJTaG93U2VsZWN0aW9uXCIsXG4gIFwiU2hvd1Nob3J0Qm94Rm9ybVwiLFxuICBcIlNob3dTcGVjaWFsQ2hhcmFjdGVyc1wiLFxuICBcIlNob3dTdHJpbmdDaGFyYWN0ZXJzXCIsXG4gIFwiU2hvd1N5bnRheFN0eWxlc1wiLFxuICBcIlNocmlua2luZ0RlbGF5XCIsXG4gIFwiU2hyaW5rV3JhcEJvdW5kaW5nQm94XCIsXG4gIFwiU2lkZXJlYWxUaW1lXCIsXG4gIFwiU2llZ2VsVGhldGFcIixcbiAgXCJTaWVnZWxUdWtleVRlc3RcIixcbiAgXCJTaWVycGluc2tpQ3VydmVcIixcbiAgXCJTaWVycGluc2tpTWVzaFwiLFxuICBcIlNpZ25cIixcbiAgXCJTaWduYXR1cmVcIixcbiAgXCJTaWduZWRSYW5rVGVzdFwiLFxuICBcIlNpZ25lZFJlZ2lvbkRpc3RhbmNlXCIsXG4gIFwiU2lnbmlmaWNhbmNlTGV2ZWxcIixcbiAgXCJTaWduUGFkZGluZ1wiLFxuICBcIlNpZ25UZXN0XCIsXG4gIFwiU2ltaWxhcml0eVJ1bGVzXCIsXG4gIFwiU2ltcGxlR3JhcGhcIixcbiAgXCJTaW1wbGVHcmFwaFFcIixcbiAgXCJTaW1wbGVQb2x5Z29uUVwiLFxuICBcIlNpbXBsZVBvbHloZWRyb25RXCIsXG4gIFwiU2ltcGxleFwiLFxuICBcIlNpbXBsaWZ5XCIsXG4gIFwiU2luXCIsXG4gIFwiU2luY1wiLFxuICBcIlNpbmdoTWFkZGFsYURpc3RyaWJ1dGlvblwiLFxuICBcIlNpbmdsZUV2YWx1YXRpb25cIixcbiAgXCJTaW5nbGVMZXR0ZXJJdGFsaWNzXCIsXG4gIFwiU2luZ2xlTGV0dGVyU3R5bGVcIixcbiAgXCJTaW5ndWxhclZhbHVlRGVjb21wb3NpdGlvblwiLFxuICBcIlNpbmd1bGFyVmFsdWVMaXN0XCIsXG4gIFwiU2luZ3VsYXJWYWx1ZVBsb3RcIixcbiAgXCJTaW5ndWxhclZhbHVlc1wiLFxuICBcIlNpbmhcIixcbiAgXCJTaW5oSW50ZWdyYWxcIixcbiAgXCJTaW5JbnRlZ3JhbFwiLFxuICBcIlNpeEpTeW1ib2xcIixcbiAgXCJTa2VsZXRvblwiLFxuICBcIlNrZWxldG9uVHJhbnNmb3JtXCIsXG4gIFwiU2tlbGxhbURpc3RyaWJ1dGlvblwiLFxuICBcIlNrZXduZXNzXCIsXG4gIFwiU2tld05vcm1hbERpc3RyaWJ1dGlvblwiLFxuICBcIlNraW5TdHlsZVwiLFxuICBcIlNraXBcIixcbiAgXCJTbGljZUNvbnRvdXJQbG90M0RcIixcbiAgXCJTbGljZURlbnNpdHlQbG90M0RcIixcbiAgXCJTbGljZURpc3RyaWJ1dGlvblwiLFxuICBcIlNsaWNlVmVjdG9yUGxvdDNEXCIsXG4gIFwiU2xpZGVyXCIsXG4gIFwiU2xpZGVyMkRcIixcbiAgXCJTbGlkZXIyREJveFwiLFxuICBcIlNsaWRlcjJEQm94T3B0aW9uc1wiLFxuICBcIlNsaWRlckJveFwiLFxuICBcIlNsaWRlckJveE9wdGlvbnNcIixcbiAgXCJTbGlkZVNob3dWaWRlb1wiLFxuICBcIlNsaWRlVmlld1wiLFxuICBcIlNsb3RcIixcbiAgXCJTbG90U2VxdWVuY2VcIixcbiAgXCJTbWFsbFwiLFxuICBcIlNtYWxsQ2lyY2xlXCIsXG4gIFwiU21hbGxlclwiLFxuICBcIlNtaXRoRGVjb21wb3NpdGlvblwiLFxuICBcIlNtaXRoRGVsYXlDb21wZW5zYXRvclwiLFxuICBcIlNtaXRoV2F0ZXJtYW5TaW1pbGFyaXR5XCIsXG4gIFwiU21vb3RoRGVuc2l0eUhpc3RvZ3JhbVwiLFxuICBcIlNtb290aEhpc3RvZ3JhbVwiLFxuICBcIlNtb290aEhpc3RvZ3JhbTNEXCIsXG4gIFwiU21vb3RoS2VybmVsRGlzdHJpYnV0aW9uXCIsXG4gIFwiU21vb3RoUG9pbnREZW5zaXR5XCIsXG4gIFwiU25EaXNwZXJzaW9uXCIsXG4gIFwiU25pcHBldFwiLFxuICBcIlNuaXBwZXRzVmlkZW9cIixcbiAgXCJTbnViUG9seWhlZHJvblwiLFxuICBcIlNvY2lhbE1lZGlhRGF0YVwiLFxuICBcIlNvY2tldFwiLFxuICBcIlNvY2tldENvbm5lY3RcIixcbiAgXCJTb2NrZXRMaXN0ZW5cIixcbiAgXCJTb2NrZXRMaXN0ZW5lclwiLFxuICBcIlNvY2tldE9iamVjdFwiLFxuICBcIlNvY2tldE9wZW5cIixcbiAgXCJTb2NrZXRSZWFkTWVzc2FnZVwiLFxuICBcIlNvY2tldFJlYWR5UVwiLFxuICBcIlNvY2tldHNcIixcbiAgXCJTb2NrZXRXYWl0QWxsXCIsXG4gIFwiU29ja2V0V2FpdE5leHRcIixcbiAgXCJTb2Z0bWF4TGF5ZXJcIixcbiAgXCJTb2thbFNuZWF0aERpc3NpbWlsYXJpdHlcIixcbiAgXCJTb2xhckVjbGlwc2VcIixcbiAgXCJTb2xhclN5c3RlbUZlYXR1cmVEYXRhXCIsXG4gIFwiU29sYXJUaW1lXCIsXG4gIFwiU29saWRBbmdsZVwiLFxuICBcIlNvbGlkQm91bmRhcnlMb2FkVmFsdWVcIixcbiAgXCJTb2xpZERhdGFcIixcbiAgXCJTb2xpZERpc3BsYWNlbWVudENvbmRpdGlvblwiLFxuICBcIlNvbGlkRml4ZWRDb25kaXRpb25cIixcbiAgXCJTb2xpZE1lY2hhbmljc1BERUNvbXBvbmVudFwiLFxuICBcIlNvbGlkTWVjaGFuaWNzU3RyYWluXCIsXG4gIFwiU29saWRNZWNoYW5pY3NTdHJlc3NcIixcbiAgXCJTb2xpZFJlZ2lvblFcIixcbiAgXCJTb2x2ZVwiLFxuICBcIlNvbHZlQWx3YXlzXCIsXG4gIFwiU29sdmVEZWxheWVkXCIsXG4gIFwiU29sdmVWYWx1ZXNcIixcbiAgXCJTb3J0XCIsXG4gIFwiU29ydEJ5XCIsXG4gIFwiU29ydGVkQnlcIixcbiAgXCJTb3J0ZWRFbnRpdHlDbGFzc1wiLFxuICBcIlNvdW5kXCIsXG4gIFwiU291bmRBbmRHcmFwaGljc1wiLFxuICBcIlNvdW5kTm90ZVwiLFxuICBcIlNvdW5kVm9sdW1lXCIsXG4gIFwiU291cmNlTGlua1wiLFxuICBcIlNvdXJjZVBERVRlcm1cIixcbiAgXCJTb3dcIixcbiAgXCJTcGFjZVwiLFxuICBcIlNwYWNlQ3VydmVEYXRhXCIsXG4gIFwiU3BhY2VGb3JtXCIsXG4gIFwiU3BhY2VyXCIsXG4gIFwiU3BhY2luZ3NcIixcbiAgXCJTcGFuXCIsXG4gIFwiU3BhbkFkanVzdG1lbnRzXCIsXG4gIFwiU3BhbkNoYXJhY3RlclJvdW5kaW5nXCIsXG4gIFwiU3BhbkZyb21BYm92ZVwiLFxuICBcIlNwYW5Gcm9tQm90aFwiLFxuICBcIlNwYW5Gcm9tTGVmdFwiLFxuICBcIlNwYW5MaW5lVGhpY2tuZXNzXCIsXG4gIFwiU3Bhbk1heFNpemVcIixcbiAgXCJTcGFuTWluU2l6ZVwiLFxuICBcIlNwYW5uaW5nQ2hhcmFjdGVyc1wiLFxuICBcIlNwYW5TeW1tZXRyaWNcIixcbiAgXCJTcGFyc2VBcnJheVwiLFxuICBcIlNwYXJzZUFycmF5UVwiLFxuICBcIlNwYXRpYWxCaW5uZWRQb2ludERhdGFcIixcbiAgXCJTcGF0aWFsQm91bmRhcnlDb3JyZWN0aW9uXCIsXG4gIFwiU3BhdGlhbEVzdGltYXRlXCIsXG4gIFwiU3BhdGlhbEVzdGltYXRvckZ1bmN0aW9uXCIsXG4gIFwiU3BhdGlhbEdyYXBoRGlzdHJpYnV0aW9uXCIsXG4gIFwiU3BhdGlhbEpcIixcbiAgXCJTcGF0aWFsTWVkaWFuXCIsXG4gIFwiU3BhdGlhbE5vaXNlTGV2ZWxcIixcbiAgXCJTcGF0aWFsT2JzZXJ2YXRpb25SZWdpb25RXCIsXG4gIFwiU3BhdGlhbFBvaW50RGF0YVwiLFxuICBcIlNwYXRpYWxQb2ludFNlbGVjdFwiLFxuICBcIlNwYXRpYWxSYW5kb21uZXNzVGVzdFwiLFxuICBcIlNwYXRpYWxUcmFuc2Zvcm1hdGlvbkxheWVyXCIsXG4gIFwiU3BhdGlhbFRyZW5kRnVuY3Rpb25cIixcbiAgXCJTcGVha1wiLFxuICBcIlNwZWFrZXJNYXRjaFFcIixcbiAgXCJTcGVhcm1hblJhbmtUZXN0XCIsXG4gIFwiU3BlYXJtYW5SaG9cIixcbiAgXCJTcGVjaWVzRGF0YVwiLFxuICBcIlNwZWNpZmljaXR5R29hbFwiLFxuICBcIlNwZWN0cmFsTGluZURhdGFcIixcbiAgXCJTcGVjdHJvZ3JhbVwiLFxuICBcIlNwZWN0cm9ncmFtQXJyYXlcIixcbiAgXCJTcGVjdWxhcml0eVwiLFxuICBcIlNwZWVjaENhc2VzXCIsXG4gIFwiU3BlZWNoSW50ZXJwcmV0ZXJcIixcbiAgXCJTcGVlY2hSZWNvZ25pemVcIixcbiAgXCJTcGVlY2hTeW50aGVzaXplXCIsXG4gIFwiU3BlbGxpbmdDb3JyZWN0aW9uXCIsXG4gIFwiU3BlbGxpbmdDb3JyZWN0aW9uTGlzdFwiLFxuICBcIlNwZWxsaW5nRGljdGlvbmFyaWVzXCIsXG4gIFwiU3BlbGxpbmdEaWN0aW9uYXJpZXNQYXRoXCIsXG4gIFwiU3BlbGxpbmdPcHRpb25zXCIsXG4gIFwiU3BoZXJlXCIsXG4gIFwiU3BoZXJlQm94XCIsXG4gIFwiU3BoZXJlQm94T3B0aW9uc1wiLFxuICBcIlNwaGVyZVBvaW50c1wiLFxuICBcIlNwaGVyaWNhbEJlc3NlbEpcIixcbiAgXCJTcGhlcmljYWxCZXNzZWxZXCIsXG4gIFwiU3BoZXJpY2FsSGFua2VsSDFcIixcbiAgXCJTcGhlcmljYWxIYW5rZWxIMlwiLFxuICBcIlNwaGVyaWNhbEhhcm1vbmljWVwiLFxuICBcIlNwaGVyaWNhbFBsb3QzRFwiLFxuICBcIlNwaGVyaWNhbFJlZ2lvblwiLFxuICBcIlNwaGVyaWNhbFNoZWxsXCIsXG4gIFwiU3BoZXJvaWRhbEVpZ2VudmFsdWVcIixcbiAgXCJTcGhlcm9pZGFsSm9pbmluZ0ZhY3RvclwiLFxuICBcIlNwaGVyb2lkYWxQU1wiLFxuICBcIlNwaGVyb2lkYWxQU1ByaW1lXCIsXG4gIFwiU3BoZXJvaWRhbFFTXCIsXG4gIFwiU3BoZXJvaWRhbFFTUHJpbWVcIixcbiAgXCJTcGhlcm9pZGFsUmFkaWFsRmFjdG9yXCIsXG4gIFwiU3BoZXJvaWRhbFMxXCIsXG4gIFwiU3BoZXJvaWRhbFMxUHJpbWVcIixcbiAgXCJTcGhlcm9pZGFsUzJcIixcbiAgXCJTcGhlcm9pZGFsUzJQcmltZVwiLFxuICBcIlNwbGljZVwiLFxuICBcIlNwbGljZWREaXN0cmlidXRpb25cIixcbiAgXCJTcGxpbmVDbG9zZWRcIixcbiAgXCJTcGxpbmVEZWdyZWVcIixcbiAgXCJTcGxpbmVLbm90c1wiLFxuICBcIlNwbGluZVdlaWdodHNcIixcbiAgXCJTcGxpdFwiLFxuICBcIlNwbGl0QnlcIixcbiAgXCJTcG9rZW5TdHJpbmdcIixcbiAgXCJTcG90TGlnaHRcIixcbiAgXCJTcXJ0XCIsXG4gIFwiU3FydEJveFwiLFxuICBcIlNxcnRCb3hPcHRpb25zXCIsXG4gIFwiU3F1YXJlXCIsXG4gIFwiU3F1YXJlZEV1Y2xpZGVhbkRpc3RhbmNlXCIsXG4gIFwiU3F1YXJlRnJlZVFcIixcbiAgXCJTcXVhcmVJbnRlcnNlY3Rpb25cIixcbiAgXCJTcXVhcmVNYXRyaXhRXCIsXG4gIFwiU3F1YXJlUmVwZWF0aW5nRWxlbWVudFwiLFxuICBcIlNxdWFyZXNSXCIsXG4gIFwiU3F1YXJlU3Vic2V0XCIsXG4gIFwiU3F1YXJlU3Vic2V0RXF1YWxcIixcbiAgXCJTcXVhcmVTdXBlcnNldFwiLFxuICBcIlNxdWFyZVN1cGVyc2V0RXF1YWxcIixcbiAgXCJTcXVhcmVVbmlvblwiLFxuICBcIlNxdWFyZVdhdmVcIixcbiAgXCJTU1NUcmlhbmdsZVwiLFxuICBcIlN0YWJpbGl0eU1hcmdpbnNcIixcbiAgXCJTdGFiaWxpdHlNYXJnaW5zU3R5bGVcIixcbiAgXCJTdGFibGVEaXN0cmlidXRpb25cIixcbiAgXCJTdGFja1wiLFxuICBcIlN0YWNrQmVnaW5cIixcbiAgXCJTdGFja0NvbXBsZXRlXCIsXG4gIFwiU3RhY2tlZERhdGVMaXN0UGxvdFwiLFxuICBcIlN0YWNrZWRMaXN0UGxvdFwiLFxuICBcIlN0YWNrSW5oaWJpdFwiLFxuICBcIlN0YWRpdW1TaGFwZVwiLFxuICBcIlN0YW5kYXJkQXRtb3NwaGVyZURhdGFcIixcbiAgXCJTdGFuZGFyZERldmlhdGlvblwiLFxuICBcIlN0YW5kYXJkRGV2aWF0aW9uRmlsdGVyXCIsXG4gIFwiU3RhbmRhcmRGb3JtXCIsXG4gIFwiU3RhbmRhcmRpemVcIixcbiAgXCJTdGFuZGFyZGl6ZWRcIixcbiAgXCJTdGFuZGFyZE9jZWFuRGF0YVwiLFxuICBcIlN0YW5kYnlEaXN0cmlidXRpb25cIixcbiAgXCJTdGFyXCIsXG4gIFwiU3RhckNsdXN0ZXJEYXRhXCIsXG4gIFwiU3RhckRhdGFcIixcbiAgXCJTdGFyR3JhcGhcIixcbiAgXCJTdGFydEFzeW5jaHJvbm91c1Rhc2tcIixcbiAgXCJTdGFydEV4dGVybmFsU2Vzc2lvblwiLFxuICBcIlN0YXJ0aW5nU3RlcFNpemVcIixcbiAgXCJTdGFydE9mTGluZVwiLFxuICBcIlN0YXJ0T2ZTdHJpbmdcIixcbiAgXCJTdGFydFByb2Nlc3NcIixcbiAgXCJTdGFydFNjaGVkdWxlZFRhc2tcIixcbiAgXCJTdGFydHVwU291bmRcIixcbiAgXCJTdGFydFdlYlNlc3Npb25cIixcbiAgXCJTdGF0ZURpbWVuc2lvbnNcIixcbiAgXCJTdGF0ZUZlZWRiYWNrR2FpbnNcIixcbiAgXCJTdGF0ZU91dHB1dEVzdGltYXRvclwiLFxuICBcIlN0YXRlUmVzcG9uc2VcIixcbiAgXCJTdGF0ZVNwYWNlTW9kZWxcIixcbiAgXCJTdGF0ZVNwYWNlUmVhbGl6YXRpb25cIixcbiAgXCJTdGF0ZVNwYWNlVHJhbnNmb3JtXCIsXG4gIFwiU3RhdGVUcmFuc2Zvcm1hdGlvbkxpbmVhcml6ZVwiLFxuICBcIlN0YXRpb25hcnlEaXN0cmlidXRpb25cIixcbiAgXCJTdGF0aW9uYXJ5V2F2ZWxldFBhY2tldFRyYW5zZm9ybVwiLFxuICBcIlN0YXRpb25hcnlXYXZlbGV0VHJhbnNmb3JtXCIsXG4gIFwiU3RhdHVzQXJlYVwiLFxuICBcIlN0YXR1c0NlbnRyYWxpdHlcIixcbiAgXCJTdGVwTW9uaXRvclwiLFxuICBcIlN0ZXJlb2NoZW1pc3RyeUVsZW1lbnRzXCIsXG4gIFwiU3RpZWx0amVzR2FtbWFcIixcbiAgXCJTdGlwcGxlU2hhZGluZ1wiLFxuICBcIlN0aXJsaW5nUzFcIixcbiAgXCJTdGlybGluZ1MyXCIsXG4gIFwiU3RvcEFzeW5jaHJvbm91c1Rhc2tcIixcbiAgXCJTdG9wcGluZ1Bvd2VyRGF0YVwiLFxuICBcIlN0b3BTY2hlZHVsZWRUYXNrXCIsXG4gIFwiU3RyYXRhVmFyaWFibGVzXCIsXG4gIFwiU3RyYXRvbm92aWNoUHJvY2Vzc1wiLFxuICBcIlN0cmF1c3NIYXJkY29yZVBvaW50UHJvY2Vzc1wiLFxuICBcIlN0cmF1c3NQb2ludFByb2Nlc3NcIixcbiAgXCJTdHJlYW1Db2xvckZ1bmN0aW9uXCIsXG4gIFwiU3RyZWFtQ29sb3JGdW5jdGlvblNjYWxpbmdcIixcbiAgXCJTdHJlYW1EZW5zaXR5UGxvdFwiLFxuICBcIlN0cmVhbU1hcmtlcnNcIixcbiAgXCJTdHJlYW1QbG90XCIsXG4gIFwiU3RyZWFtUGxvdDNEXCIsXG4gIFwiU3RyZWFtUG9pbnRzXCIsXG4gIFwiU3RyZWFtUG9zaXRpb25cIixcbiAgXCJTdHJlYW1zXCIsXG4gIFwiU3RyZWFtU2NhbGVcIixcbiAgXCJTdHJlYW1TdHlsZVwiLFxuICBcIlN0cmljdEluZXF1YWxpdGllc1wiLFxuICBcIlN0cmluZ1wiLFxuICBcIlN0cmluZ0JyZWFrXCIsXG4gIFwiU3RyaW5nQnl0ZUNvdW50XCIsXG4gIFwiU3RyaW5nQ2FzZXNcIixcbiAgXCJTdHJpbmdDb250YWluc1FcIixcbiAgXCJTdHJpbmdDb3VudFwiLFxuICBcIlN0cmluZ0RlbGV0ZVwiLFxuICBcIlN0cmluZ0Ryb3BcIixcbiAgXCJTdHJpbmdFbmRzUVwiLFxuICBcIlN0cmluZ0V4cHJlc3Npb25cIixcbiAgXCJTdHJpbmdFeHRyYWN0XCIsXG4gIFwiU3RyaW5nRm9ybVwiLFxuICBcIlN0cmluZ0Zvcm1hdFwiLFxuICBcIlN0cmluZ0Zvcm1hdFFcIixcbiAgXCJTdHJpbmdGcmVlUVwiLFxuICBcIlN0cmluZ0luc2VydFwiLFxuICBcIlN0cmluZ0pvaW5cIixcbiAgXCJTdHJpbmdMZW5ndGhcIixcbiAgXCJTdHJpbmdNYXRjaFFcIixcbiAgXCJTdHJpbmdQYWRMZWZ0XCIsXG4gIFwiU3RyaW5nUGFkUmlnaHRcIixcbiAgXCJTdHJpbmdQYXJ0XCIsXG4gIFwiU3RyaW5nUGFydGl0aW9uXCIsXG4gIFwiU3RyaW5nUG9zaXRpb25cIixcbiAgXCJTdHJpbmdRXCIsXG4gIFwiU3RyaW5nUmVwZWF0XCIsXG4gIFwiU3RyaW5nUmVwbGFjZVwiLFxuICBcIlN0cmluZ1JlcGxhY2VMaXN0XCIsXG4gIFwiU3RyaW5nUmVwbGFjZVBhcnRcIixcbiAgXCJTdHJpbmdSZXZlcnNlXCIsXG4gIFwiU3RyaW5nUmlmZmxlXCIsXG4gIFwiU3RyaW5nUm90YXRlTGVmdFwiLFxuICBcIlN0cmluZ1JvdGF0ZVJpZ2h0XCIsXG4gIFwiU3RyaW5nU2tlbGV0b25cIixcbiAgXCJTdHJpbmdTcGxpdFwiLFxuICBcIlN0cmluZ1N0YXJ0c1FcIixcbiAgXCJTdHJpbmdUYWtlXCIsXG4gIFwiU3RyaW5nVGFrZURyb3BcIixcbiAgXCJTdHJpbmdUZW1wbGF0ZVwiLFxuICBcIlN0cmluZ1RvQnl0ZUFycmF5XCIsXG4gIFwiU3RyaW5nVG9TdHJlYW1cIixcbiAgXCJTdHJpbmdUcmltXCIsXG4gIFwiU3RyaXBCb3hlc1wiLFxuICBcIlN0cmlwT25JbnB1dFwiLFxuICBcIlN0cmlwU3R5bGVPblBhc3RlXCIsXG4gIFwiU3RyaXBXcmFwcGVyQm94ZXNcIixcbiAgXCJTdHJva2VGb3JtXCIsXG4gIFwiU3RydWNrdGhyb3VnaFwiLFxuICBcIlN0cnVjdHVyYWxJbXBvcnRhbmNlXCIsXG4gIFwiU3RydWN0dXJlZEFycmF5XCIsXG4gIFwiU3RydWN0dXJlZEFycmF5SGVhZFFcIixcbiAgXCJTdHJ1Y3R1cmVkU2VsZWN0aW9uXCIsXG4gIFwiU3RydXZlSFwiLFxuICBcIlN0cnV2ZUxcIixcbiAgXCJTdHViXCIsXG4gIFwiU3R1ZGVudFREaXN0cmlidXRpb25cIixcbiAgXCJTdHlsZVwiLFxuICBcIlN0eWxlQm94XCIsXG4gIFwiU3R5bGVCb3hBdXRvRGVsZXRlXCIsXG4gIFwiU3R5bGVEYXRhXCIsXG4gIFwiU3R5bGVEZWZpbml0aW9uc1wiLFxuICBcIlN0eWxlRm9ybVwiLFxuICBcIlN0eWxlSGludHNcIixcbiAgXCJTdHlsZUtleU1hcHBpbmdcIixcbiAgXCJTdHlsZU1lbnVMaXN0aW5nXCIsXG4gIFwiU3R5bGVOYW1lRGlhbG9nU2V0dGluZ3NcIixcbiAgXCJTdHlsZU5hbWVzXCIsXG4gIFwiU3R5bGVQcmludFwiLFxuICBcIlN0eWxlU2hlZXRQYXRoXCIsXG4gIFwiU3ViZGl2aWRlXCIsXG4gIFwiU3ViZmFjdG9yaWFsXCIsXG4gIFwiU3ViZ3JhcGhcIixcbiAgXCJTdWJNaW51c1wiLFxuICBcIlN1YlBsdXNcIixcbiAgXCJTdWJyZXN1bHRhbnRQb2x5bm9taWFsUmVtYWluZGVyc1wiLFxuICBcIlN1YnJlc3VsdGFudFBvbHlub21pYWxzXCIsXG4gIFwiU3VicmVzdWx0YW50c1wiLFxuICBcIlN1YnNjcmlwdFwiLFxuICBcIlN1YnNjcmlwdEJveFwiLFxuICBcIlN1YnNjcmlwdEJveE9wdGlvbnNcIixcbiAgXCJTdWJzY3JpcHRlZFwiLFxuICBcIlN1YnNlcXVlbmNlc1wiLFxuICBcIlN1YnNldFwiLFxuICBcIlN1YnNldENhc2VzXCIsXG4gIFwiU3Vic2V0Q291bnRcIixcbiAgXCJTdWJzZXRFcXVhbFwiLFxuICBcIlN1YnNldE1hcFwiLFxuICBcIlN1YnNldFBvc2l0aW9uXCIsXG4gIFwiU3Vic2V0UVwiLFxuICBcIlN1YnNldFJlcGxhY2VcIixcbiAgXCJTdWJzZXRzXCIsXG4gIFwiU3ViU3RhclwiLFxuICBcIlN1YnN0aXR1dGlvblN5c3RlbVwiLFxuICBcIlN1YnN1cGVyc2NyaXB0XCIsXG4gIFwiU3Vic3VwZXJzY3JpcHRCb3hcIixcbiAgXCJTdWJzdXBlcnNjcmlwdEJveE9wdGlvbnNcIixcbiAgXCJTdWJ0aXRsZUVuY29kaW5nXCIsXG4gIFwiU3VidGl0bGVUcmFja1NlbGVjdGlvblwiLFxuICBcIlN1YnRyYWN0XCIsXG4gIFwiU3VidHJhY3RGcm9tXCIsXG4gIFwiU3VidHJhY3RTaWRlc1wiLFxuICBcIlN1YlZhbHVlc1wiLFxuICBcIlN1Y2NlZWRzXCIsXG4gIFwiU3VjY2VlZHNFcXVhbFwiLFxuICBcIlN1Y2NlZWRzU2xhbnRFcXVhbFwiLFxuICBcIlN1Y2NlZWRzVGlsZGVcIixcbiAgXCJTdWNjZXNzXCIsXG4gIFwiU3VjaFRoYXRcIixcbiAgXCJTdW1cIixcbiAgXCJTdW1Db252ZXJnZW5jZVwiLFxuICBcIlN1bW1hdGlvbkxheWVyXCIsXG4gIFwiU3VuZGF5XCIsXG4gIFwiU3VuUG9zaXRpb25cIixcbiAgXCJTdW5yaXNlXCIsXG4gIFwiU3Vuc2V0XCIsXG4gIFwiU3VwZXJEYWdnZXJcIixcbiAgXCJTdXBlck1pbnVzXCIsXG4gIFwiU3VwZXJub3ZhRGF0YVwiLFxuICBcIlN1cGVyUGx1c1wiLFxuICBcIlN1cGVyc2NyaXB0XCIsXG4gIFwiU3VwZXJzY3JpcHRCb3hcIixcbiAgXCJTdXBlcnNjcmlwdEJveE9wdGlvbnNcIixcbiAgXCJTdXBlcnNldFwiLFxuICBcIlN1cGVyc2V0RXF1YWxcIixcbiAgXCJTdXBlclN0YXJcIixcbiAgXCJTdXJkXCIsXG4gIFwiU3VyZEZvcm1cIixcbiAgXCJTdXJmYWNlQXBwZWFyYW5jZVwiLFxuICBcIlN1cmZhY2VBcmVhXCIsXG4gIFwiU3VyZmFjZUNvbG9yXCIsXG4gIFwiU3VyZmFjZURhdGFcIixcbiAgXCJTdXJmYWNlR3JhcGhpY3NcIixcbiAgXCJTdXJ2aXZhbERpc3RyaWJ1dGlvblwiLFxuICBcIlN1cnZpdmFsRnVuY3Rpb25cIixcbiAgXCJTdXJ2aXZhbE1vZGVsXCIsXG4gIFwiU3Vydml2YWxNb2RlbEZpdFwiLFxuICBcIlN1c3BlbmRQYWNrZXRcIixcbiAgXCJTdXp1a2lEaXN0cmlidXRpb25cIixcbiAgXCJTdXp1a2lHcm91cFN1elwiLFxuICBcIlN3YXRjaExlZ2VuZFwiLFxuICBcIlN3aXRjaFwiLFxuICBcIlN5bWJvbFwiLFxuICBcIlN5bWJvbE5hbWVcIixcbiAgXCJTeW1sZXRXYXZlbGV0XCIsXG4gIFwiU3ltbWV0cmljXCIsXG4gIFwiU3ltbWV0cmljRGlmZmVyZW5jZVwiLFxuICBcIlN5bW1ldHJpY0dyb3VwXCIsXG4gIFwiU3ltbWV0cmljS2V5XCIsXG4gIFwiU3ltbWV0cmljTWF0cml4UVwiLFxuICBcIlN5bW1ldHJpY1BvbHlub21pYWxcIixcbiAgXCJTeW1tZXRyaWNSZWR1Y3Rpb25cIixcbiAgXCJTeW1tZXRyaXplXCIsXG4gIFwiU3ltbWV0cml6ZWRBcnJheVwiLFxuICBcIlN5bW1ldHJpemVkQXJyYXlSdWxlc1wiLFxuICBcIlN5bW1ldHJpemVkRGVwZW5kZW50Q29tcG9uZW50c1wiLFxuICBcIlN5bW1ldHJpemVkSW5kZXBlbmRlbnRDb21wb25lbnRzXCIsXG4gIFwiU3ltbWV0cml6ZWRSZXBsYWNlUGFydFwiLFxuICBcIlN5bmNocm9ub3VzSW5pdGlhbGl6YXRpb25cIixcbiAgXCJTeW5jaHJvbm91c1VwZGF0aW5nXCIsXG4gIFwiU3lub255bXNcIixcbiAgXCJTeW50YXhcIixcbiAgXCJTeW50YXhGb3JtXCIsXG4gIFwiU3ludGF4SW5mb3JtYXRpb25cIixcbiAgXCJTeW50YXhMZW5ndGhcIixcbiAgXCJTeW50YXhQYWNrZXRcIixcbiAgXCJTeW50YXhRXCIsXG4gIFwiU3ludGhlc2l6ZU1pc3NpbmdWYWx1ZXNcIixcbiAgXCJTeXN0ZW1DcmVkZW50aWFsXCIsXG4gIFwiU3lzdGVtQ3JlZGVudGlhbERhdGFcIixcbiAgXCJTeXN0ZW1DcmVkZW50aWFsS2V5XCIsXG4gIFwiU3lzdGVtQ3JlZGVudGlhbEtleXNcIixcbiAgXCJTeXN0ZW1DcmVkZW50aWFsU3RvcmVPYmplY3RcIixcbiAgXCJTeXN0ZW1EaWFsb2dJbnB1dFwiLFxuICBcIlN5c3RlbUV4Y2VwdGlvblwiLFxuICBcIlN5c3RlbUdldFwiLFxuICBcIlN5c3RlbUhlbHBQYXRoXCIsXG4gIFwiU3lzdGVtSW5mb3JtYXRpb25cIixcbiAgXCJTeXN0ZW1JbmZvcm1hdGlvbkRhdGFcIixcbiAgXCJTeXN0ZW1JbnN0YWxsXCIsXG4gIFwiU3lzdGVtTW9kZWxcIixcbiAgXCJTeXN0ZW1Nb2RlbGVyXCIsXG4gIFwiU3lzdGVtTW9kZWxFeGFtcGxlc1wiLFxuICBcIlN5c3RlbU1vZGVsTGluZWFyaXplXCIsXG4gIFwiU3lzdGVtTW9kZWxNZWFzdXJlbWVudHNcIixcbiAgXCJTeXN0ZW1Nb2RlbFBhcmFtZXRyaWNTaW11bGF0ZVwiLFxuICBcIlN5c3RlbU1vZGVsUGxvdFwiLFxuICBcIlN5c3RlbU1vZGVsUHJvZ3Jlc3NSZXBvcnRpbmdcIixcbiAgXCJTeXN0ZW1Nb2RlbFJlbGlhYmlsaXR5XCIsXG4gIFwiU3lzdGVtTW9kZWxzXCIsXG4gIFwiU3lzdGVtTW9kZWxTaW11bGF0ZVwiLFxuICBcIlN5c3RlbU1vZGVsU2ltdWxhdGVTZW5zaXRpdml0eVwiLFxuICBcIlN5c3RlbU1vZGVsU2ltdWxhdGlvbkRhdGFcIixcbiAgXCJTeXN0ZW1PcGVuXCIsXG4gIFwiU3lzdGVtT3B0aW9uc1wiLFxuICBcIlN5c3RlbVByb2Nlc3NEYXRhXCIsXG4gIFwiU3lzdGVtUHJvY2Vzc2VzXCIsXG4gIFwiU3lzdGVtc0Nvbm5lY3Rpb25zTW9kZWxcIixcbiAgXCJTeXN0ZW1zTW9kZWxDb250cm9sbGVyRGF0YVwiLFxuICBcIlN5c3RlbXNNb2RlbERlbGF5XCIsXG4gIFwiU3lzdGVtc01vZGVsRGVsYXlBcHByb3hpbWF0ZVwiLFxuICBcIlN5c3RlbXNNb2RlbERlbGV0ZVwiLFxuICBcIlN5c3RlbXNNb2RlbERpbWVuc2lvbnNcIixcbiAgXCJTeXN0ZW1zTW9kZWxFeHRyYWN0XCIsXG4gIFwiU3lzdGVtc01vZGVsRmVlZGJhY2tDb25uZWN0XCIsXG4gIFwiU3lzdGVtc01vZGVsTGFiZWxzXCIsXG4gIFwiU3lzdGVtc01vZGVsTGluZWFyaXR5XCIsXG4gIFwiU3lzdGVtc01vZGVsTWVyZ2VcIixcbiAgXCJTeXN0ZW1zTW9kZWxPcmRlclwiLFxuICBcIlN5c3RlbXNNb2RlbFBhcmFsbGVsQ29ubmVjdFwiLFxuICBcIlN5c3RlbXNNb2RlbFNlcmllc0Nvbm5lY3RcIixcbiAgXCJTeXN0ZW1zTW9kZWxTdGF0ZUZlZWRiYWNrQ29ubmVjdFwiLFxuICBcIlN5c3RlbXNNb2RlbFZlY3RvclJlbGF0aXZlT3JkZXJzXCIsXG4gIFwiU3lzdGVtU3R1YlwiLFxuICBcIlN5c3RlbVRlc3RcIixcbiAgXCJUYWJcIixcbiAgXCJUYWJGaWxsaW5nXCIsXG4gIFwiVGFibGVcIixcbiAgXCJUYWJsZUFsaWdubWVudHNcIixcbiAgXCJUYWJsZURlcHRoXCIsXG4gIFwiVGFibGVEaXJlY3Rpb25zXCIsXG4gIFwiVGFibGVGb3JtXCIsXG4gIFwiVGFibGVIZWFkaW5nc1wiLFxuICBcIlRhYmxlU3BhY2luZ1wiLFxuICBcIlRhYmxlVmlld1wiLFxuICBcIlRhYmxlVmlld0JveFwiLFxuICBcIlRhYmxlVmlld0JveEFsaWdubWVudFwiLFxuICBcIlRhYmxlVmlld0JveEJhY2tncm91bmRcIixcbiAgXCJUYWJsZVZpZXdCb3hIZWFkZXJzXCIsXG4gIFwiVGFibGVWaWV3Qm94SXRlbVNpemVcIixcbiAgXCJUYWJsZVZpZXdCb3hJdGVtU3R5bGVcIixcbiAgXCJUYWJsZVZpZXdCb3hPcHRpb25zXCIsXG4gIFwiVGFiU3BhY2luZ3NcIixcbiAgXCJUYWJWaWV3XCIsXG4gIFwiVGFiVmlld0JveFwiLFxuICBcIlRhYlZpZXdCb3hPcHRpb25zXCIsXG4gIFwiVGFnQm94XCIsXG4gIFwiVGFnQm94Tm90ZVwiLFxuICBcIlRhZ0JveE9wdGlvbnNcIixcbiAgXCJUYWdnaW5nUnVsZXNcIixcbiAgXCJUYWdTZXRcIixcbiAgXCJUYWdTZXREZWxheWVkXCIsXG4gIFwiVGFnU3R5bGVcIixcbiAgXCJUYWdVbnNldFwiLFxuICBcIlRha2VcIixcbiAgXCJUYWtlRHJvcFwiLFxuICBcIlRha2VMYXJnZXN0XCIsXG4gIFwiVGFrZUxhcmdlc3RCeVwiLFxuICBcIlRha2VMaXN0XCIsXG4gIFwiVGFrZVNtYWxsZXN0XCIsXG4gIFwiVGFrZVNtYWxsZXN0QnlcIixcbiAgXCJUYWtlV2hpbGVcIixcbiAgXCJUYWxseVwiLFxuICBcIlRhblwiLFxuICBcIlRhbmhcIixcbiAgXCJUYXJnZXREZXZpY2VcIixcbiAgXCJUYXJnZXRGdW5jdGlvbnNcIixcbiAgXCJUYXJnZXRTeXN0ZW1cIixcbiAgXCJUYXJnZXRVbml0c1wiLFxuICBcIlRhc2tBYm9ydFwiLFxuICBcIlRhc2tFeGVjdXRlXCIsXG4gIFwiVGFza09iamVjdFwiLFxuICBcIlRhc2tSZW1vdmVcIixcbiAgXCJUYXNrUmVzdW1lXCIsXG4gIFwiVGFza3NcIixcbiAgXCJUYXNrU3VzcGVuZFwiLFxuICBcIlRhc2tXYWl0XCIsXG4gIFwiVGF1dG9sb2d5UVwiLFxuICBcIlRlbGVncmFwaFByb2Nlc3NcIixcbiAgXCJUZW1wbGF0ZUFwcGx5XCIsXG4gIFwiVGVtcGxhdGVBcmdCb3hcIixcbiAgXCJUZW1wbGF0ZUJveFwiLFxuICBcIlRlbXBsYXRlQm94T3B0aW9uc1wiLFxuICBcIlRlbXBsYXRlRXZhbHVhdGVcIixcbiAgXCJUZW1wbGF0ZUV4cHJlc3Npb25cIixcbiAgXCJUZW1wbGF0ZUlmXCIsXG4gIFwiVGVtcGxhdGVPYmplY3RcIixcbiAgXCJUZW1wbGF0ZVNlcXVlbmNlXCIsXG4gIFwiVGVtcGxhdGVTbG90XCIsXG4gIFwiVGVtcGxhdGVTbG90U2VxdWVuY2VcIixcbiAgXCJUZW1wbGF0ZVVuZXZhbHVhdGVkXCIsXG4gIFwiVGVtcGxhdGVWZXJiYXRpbVwiLFxuICBcIlRlbXBsYXRlV2l0aFwiLFxuICBcIlRlbXBvcmFsRGF0YVwiLFxuICBcIlRlbXBvcmFsUmVndWxhcml0eVwiLFxuICBcIlRlbXBvcmFyeVwiLFxuICBcIlRlbXBvcmFyeVZhcmlhYmxlXCIsXG4gIFwiVGVuc29yQ29udHJhY3RcIixcbiAgXCJUZW5zb3JEaW1lbnNpb25zXCIsXG4gIFwiVGVuc29yRXhwYW5kXCIsXG4gIFwiVGVuc29yUHJvZHVjdFwiLFxuICBcIlRlbnNvclFcIixcbiAgXCJUZW5zb3JSYW5rXCIsXG4gIFwiVGVuc29yUmVkdWNlXCIsXG4gIFwiVGVuc29yU3ltbWV0cnlcIixcbiAgXCJUZW5zb3JUcmFuc3Bvc2VcIixcbiAgXCJUZW5zb3JXZWRnZVwiLFxuICBcIlRlcm1pbmF0ZWRFdmFsdWF0aW9uXCIsXG4gIFwiVGVybmFyeUxpc3RQbG90XCIsXG4gIFwiVGVybmFyeVBsb3RDb3JuZXJzXCIsXG4gIFwiVGVzdElEXCIsXG4gIFwiVGVzdFJlcG9ydFwiLFxuICBcIlRlc3RSZXBvcnRPYmplY3RcIixcbiAgXCJUZXN0UmVzdWx0T2JqZWN0XCIsXG4gIFwiVGV0cmFoZWRyb25cIixcbiAgXCJUZXRyYWhlZHJvbkJveFwiLFxuICBcIlRldHJhaGVkcm9uQm94T3B0aW9uc1wiLFxuICBcIlRlWEZvcm1cIixcbiAgXCJUZVhTYXZlXCIsXG4gIFwiVGV4dFwiLFxuICBcIlRleHQzREJveFwiLFxuICBcIlRleHQzREJveE9wdGlvbnNcIixcbiAgXCJUZXh0QWxpZ25tZW50XCIsXG4gIFwiVGV4dEJhbmRcIixcbiAgXCJUZXh0Qm91bmRpbmdCb3hcIixcbiAgXCJUZXh0Qm94XCIsXG4gIFwiVGV4dENhc2VzXCIsXG4gIFwiVGV4dENlbGxcIixcbiAgXCJUZXh0Q2xpcGJvYXJkVHlwZVwiLFxuICBcIlRleHRDb250ZW50c1wiLFxuICBcIlRleHREYXRhXCIsXG4gIFwiVGV4dEVsZW1lbnRcIixcbiAgXCJUZXh0Rm9ybVwiLFxuICBcIlRleHRHcmlkXCIsXG4gIFwiVGV4dEp1c3RpZmljYXRpb25cIixcbiAgXCJUZXh0TGluZVwiLFxuICBcIlRleHRQYWNrZXRcIixcbiAgXCJUZXh0UGFyYWdyYXBoXCIsXG4gIFwiVGV4dFBvc2l0aW9uXCIsXG4gIFwiVGV4dFJlY29nbml6ZVwiLFxuICBcIlRleHRTZWFyY2hcIixcbiAgXCJUZXh0U2VhcmNoUmVwb3J0XCIsXG4gIFwiVGV4dFNlbnRlbmNlc1wiLFxuICBcIlRleHRTdHJpbmdcIixcbiAgXCJUZXh0U3RydWN0dXJlXCIsXG4gIFwiVGV4dFN0eWxlXCIsXG4gIFwiVGV4dFRyYW5zbGF0aW9uXCIsXG4gIFwiVGV4dHVyZVwiLFxuICBcIlRleHR1cmVDb29yZGluYXRlRnVuY3Rpb25cIixcbiAgXCJUZXh0dXJlQ29vcmRpbmF0ZVNjYWxpbmdcIixcbiAgXCJUZXh0V29yZHNcIixcbiAgXCJUaGVyZWZvcmVcIixcbiAgXCJUaGVybW9keW5hbWljRGF0YVwiLFxuICBcIlRoZXJtb21ldGVyR2F1Z2VcIixcbiAgXCJUaGlja1wiLFxuICBcIlRoaWNrbmVzc1wiLFxuICBcIlRoaW5cIixcbiAgXCJUaGlubmluZ1wiLFxuICBcIlRoaXNMaW5rXCIsXG4gIFwiVGhvbWFzUG9pbnRQcm9jZXNzXCIsXG4gIFwiVGhvbXBzb25Hcm91cFRoXCIsXG4gIFwiVGhyZWFkXCIsXG4gIFwiVGhyZWFkZWRcIixcbiAgXCJUaHJlYWRpbmdMYXllclwiLFxuICBcIlRocmVlSlN5bWJvbFwiLFxuICBcIlRocmVzaG9sZFwiLFxuICBcIlRocm91Z2hcIixcbiAgXCJUaHJvd1wiLFxuICBcIlRodWVNb3JzZVwiLFxuICBcIlRodW1ibmFpbFwiLFxuICBcIlRodXJzZGF5XCIsXG4gIFwiVGlja0RpcmVjdGlvblwiLFxuICBcIlRpY2tMYWJlbE9yaWVudGF0aW9uXCIsXG4gIFwiVGlja0xhYmVsUG9zaXRpb25pbmdcIixcbiAgXCJUaWNrTGFiZWxzXCIsXG4gIFwiVGlja0xlbmd0aHNcIixcbiAgXCJUaWNrUG9zaXRpb25zXCIsXG4gIFwiVGlja3NcIixcbiAgXCJUaWNrc1N0eWxlXCIsXG4gIFwiVGlkZURhdGFcIixcbiAgXCJUaWxkZVwiLFxuICBcIlRpbGRlRXF1YWxcIixcbiAgXCJUaWxkZUZ1bGxFcXVhbFwiLFxuICBcIlRpbGRlVGlsZGVcIixcbiAgXCJUaW1lQ29uc3RyYWluZWRcIixcbiAgXCJUaW1lQ29uc3RyYWludFwiLFxuICBcIlRpbWVEaXJlY3Rpb25cIixcbiAgXCJUaW1lRm9ybWF0XCIsXG4gIFwiVGltZUdvYWxcIixcbiAgXCJUaW1lbGluZVBsb3RcIixcbiAgXCJUaW1lT2JqZWN0XCIsXG4gIFwiVGltZU9iamVjdFFcIixcbiAgXCJUaW1lUmVtYWluaW5nXCIsXG4gIFwiVGltZXNcIixcbiAgXCJUaW1lc0J5XCIsXG4gIFwiVGltZVNlcmllc1wiLFxuICBcIlRpbWVTZXJpZXNBZ2dyZWdhdGVcIixcbiAgXCJUaW1lU2VyaWVzRm9yZWNhc3RcIixcbiAgXCJUaW1lU2VyaWVzSW5zZXJ0XCIsXG4gIFwiVGltZVNlcmllc0ludmVydGliaWxpdHlcIixcbiAgXCJUaW1lU2VyaWVzTWFwXCIsXG4gIFwiVGltZVNlcmllc01hcFRocmVhZFwiLFxuICBcIlRpbWVTZXJpZXNNb2RlbFwiLFxuICBcIlRpbWVTZXJpZXNNb2RlbEZpdFwiLFxuICBcIlRpbWVTZXJpZXNSZXNhbXBsZVwiLFxuICBcIlRpbWVTZXJpZXNSZXNjYWxlXCIsXG4gIFwiVGltZVNlcmllc1NoaWZ0XCIsXG4gIFwiVGltZVNlcmllc1RocmVhZFwiLFxuICBcIlRpbWVTZXJpZXNXaW5kb3dcIixcbiAgXCJUaW1lU3lzdGVtXCIsXG4gIFwiVGltZVN5c3RlbUNvbnZlcnRcIixcbiAgXCJUaW1lVXNlZFwiLFxuICBcIlRpbWVWYWx1ZVwiLFxuICBcIlRpbWVXYXJwaW5nQ29ycmVzcG9uZGVuY2VcIixcbiAgXCJUaW1lV2FycGluZ0Rpc3RhbmNlXCIsXG4gIFwiVGltZVpvbmVcIixcbiAgXCJUaW1lWm9uZUNvbnZlcnRcIixcbiAgXCJUaW1lWm9uZU9mZnNldFwiLFxuICBcIlRpbWluZ1wiLFxuICBcIlRpbnlcIixcbiAgXCJUaXRsZUdyb3VwaW5nXCIsXG4gIFwiVGl0c0dyb3VwVFwiLFxuICBcIlRvQm94ZXNcIixcbiAgXCJUb0NoYXJhY3RlckNvZGVcIixcbiAgXCJUb0NvbG9yXCIsXG4gIFwiVG9Db250aW51b3VzVGltZU1vZGVsXCIsXG4gIFwiVG9EYXRlXCIsXG4gIFwiVG9kYXlcIixcbiAgXCJUb0Rpc2NyZXRlVGltZU1vZGVsXCIsXG4gIFwiVG9FbnRpdHlcIixcbiAgXCJUb2VwbGl0ek1hdHJpeFwiLFxuICBcIlRvRXhwcmVzc2lvblwiLFxuICBcIlRvRmlsZU5hbWVcIixcbiAgXCJUb2dldGhlclwiLFxuICBcIlRvZ2dsZVwiLFxuICBcIlRvZ2dsZUZhbHNlXCIsXG4gIFwiVG9nZ2xlclwiLFxuICBcIlRvZ2dsZXJCYXJcIixcbiAgXCJUb2dnbGVyQm94XCIsXG4gIFwiVG9nZ2xlckJveE9wdGlvbnNcIixcbiAgXCJUb0hlbGRFeHByZXNzaW9uXCIsXG4gIFwiVG9JbnZlcnRpYmxlVGltZVNlcmllc1wiLFxuICBcIlRva2VuV29yZHNcIixcbiAgXCJUb2xlcmFuY2VcIixcbiAgXCJUb0xvd2VyQ2FzZVwiLFxuICBcIlRvbW9ycm93XCIsXG4gIFwiVG9OdW1iZXJGaWVsZFwiLFxuICBcIlRvb0JpZ1wiLFxuICBcIlRvb2x0aXBcIixcbiAgXCJUb29sdGlwQm94XCIsXG4gIFwiVG9vbHRpcEJveE9wdGlvbnNcIixcbiAgXCJUb29sdGlwRGVsYXlcIixcbiAgXCJUb29sdGlwU3R5bGVcIixcbiAgXCJUb29uU2hhZGluZ1wiLFxuICBcIlRvcFwiLFxuICBcIlRvcEhhdFRyYW5zZm9ybVwiLFxuICBcIlRvUG9sYXJDb29yZGluYXRlc1wiLFxuICBcIlRvcG9sb2dpY2FsU29ydFwiLFxuICBcIlRvUmFkaWNhbHNcIixcbiAgXCJUb1Jhd1BvaW50ZXJcIixcbiAgXCJUb1J1bGVzXCIsXG4gIFwiVG9ydXNcIixcbiAgXCJUb3J1c0dyYXBoXCIsXG4gIFwiVG9TcGhlcmljYWxDb29yZGluYXRlc1wiLFxuICBcIlRvU3RyaW5nXCIsXG4gIFwiVG90YWxcIixcbiAgXCJUb3RhbEhlaWdodFwiLFxuICBcIlRvdGFsTGF5ZXJcIixcbiAgXCJUb3RhbFZhcmlhdGlvbkZpbHRlclwiLFxuICBcIlRvdGFsV2lkdGhcIixcbiAgXCJUb3VjaFBvc2l0aW9uXCIsXG4gIFwiVG91Y2hzY3JlZW5BdXRvWm9vbVwiLFxuICBcIlRvdWNoc2NyZWVuQ29udHJvbFBsYWNlbWVudFwiLFxuICBcIlRvVXBwZXJDYXNlXCIsXG4gIFwiVG91clZpZGVvXCIsXG4gIFwiVHJcIixcbiAgXCJUcmFjZVwiLFxuICBcIlRyYWNlQWJvdmVcIixcbiAgXCJUcmFjZUFjdGlvblwiLFxuICBcIlRyYWNlQmFja3dhcmRcIixcbiAgXCJUcmFjZURlcHRoXCIsXG4gIFwiVHJhY2VEaWFsb2dcIixcbiAgXCJUcmFjZUZvcndhcmRcIixcbiAgXCJUcmFjZUludGVybmFsXCIsXG4gIFwiVHJhY2VMZXZlbFwiLFxuICBcIlRyYWNlT2ZmXCIsXG4gIFwiVHJhY2VPblwiLFxuICBcIlRyYWNlT3JpZ2luYWxcIixcbiAgXCJUcmFjZVByaW50XCIsXG4gIFwiVHJhY2VTY2FuXCIsXG4gIFwiVHJhY2tDZWxsQ2hhbmdlVGltZXNcIixcbiAgXCJUcmFja2VkU3ltYm9sc1wiLFxuICBcIlRyYWNraW5nRnVuY3Rpb25cIixcbiAgXCJUcmFjeVdpZG9tRGlzdHJpYnV0aW9uXCIsXG4gIFwiVHJhZGluZ0NoYXJ0XCIsXG4gIFwiVHJhZGl0aW9uYWxGb3JtXCIsXG4gIFwiVHJhZGl0aW9uYWxGdW5jdGlvbk5vdGF0aW9uXCIsXG4gIFwiVHJhZGl0aW9uYWxOb3RhdGlvblwiLFxuICBcIlRyYWRpdGlvbmFsT3JkZXJcIixcbiAgXCJUcmFpbkltYWdlQ29udGVudERldGVjdG9yXCIsXG4gIFwiVHJhaW5pbmdQcm9ncmVzc0NoZWNrcG9pbnRpbmdcIixcbiAgXCJUcmFpbmluZ1Byb2dyZXNzRnVuY3Rpb25cIixcbiAgXCJUcmFpbmluZ1Byb2dyZXNzTWVhc3VyZW1lbnRzXCIsXG4gIFwiVHJhaW5pbmdQcm9ncmVzc1JlcG9ydGluZ1wiLFxuICBcIlRyYWluaW5nU3RvcHBpbmdDcml0ZXJpb25cIixcbiAgXCJUcmFpbmluZ1VwZGF0ZVNjaGVkdWxlXCIsXG4gIFwiVHJhaW5UZXh0Q29udGVudERldGVjdG9yXCIsXG4gIFwiVHJhbnNmZXJGdW5jdGlvbkNhbmNlbFwiLFxuICBcIlRyYW5zZmVyRnVuY3Rpb25FeHBhbmRcIixcbiAgXCJUcmFuc2ZlckZ1bmN0aW9uRmFjdG9yXCIsXG4gIFwiVHJhbnNmZXJGdW5jdGlvbk1vZGVsXCIsXG4gIFwiVHJhbnNmZXJGdW5jdGlvblBvbGVzXCIsXG4gIFwiVHJhbnNmZXJGdW5jdGlvblRyYW5zZm9ybVwiLFxuICBcIlRyYW5zZmVyRnVuY3Rpb25aZXJvc1wiLFxuICBcIlRyYW5zZm9ybWF0aW9uQ2xhc3NcIixcbiAgXCJUcmFuc2Zvcm1hdGlvbkZ1bmN0aW9uXCIsXG4gIFwiVHJhbnNmb3JtYXRpb25GdW5jdGlvbnNcIixcbiAgXCJUcmFuc2Zvcm1hdGlvbk1hdHJpeFwiLFxuICBcIlRyYW5zZm9ybWVkRGlzdHJpYnV0aW9uXCIsXG4gIFwiVHJhbnNmb3JtZWRGaWVsZFwiLFxuICBcIlRyYW5zZm9ybWVkUHJvY2Vzc1wiLFxuICBcIlRyYW5zZm9ybWVkUmVnaW9uXCIsXG4gIFwiVHJhbnNpdGlvbkRpcmVjdGlvblwiLFxuICBcIlRyYW5zaXRpb25EdXJhdGlvblwiLFxuICBcIlRyYW5zaXRpb25FZmZlY3RcIixcbiAgXCJUcmFuc2l0aXZlQ2xvc3VyZUdyYXBoXCIsXG4gIFwiVHJhbnNpdGl2ZVJlZHVjdGlvbkdyYXBoXCIsXG4gIFwiVHJhbnNsYXRlXCIsXG4gIFwiVHJhbnNsYXRpb25PcHRpb25zXCIsXG4gIFwiVHJhbnNsYXRpb25UcmFuc2Zvcm1cIixcbiAgXCJUcmFuc2xpdGVyYXRlXCIsXG4gIFwiVHJhbnNwYXJlbnRcIixcbiAgXCJUcmFuc3BhcmVudENvbG9yXCIsXG4gIFwiVHJhbnNwb3NlXCIsXG4gIFwiVHJhbnNwb3NlTGF5ZXJcIixcbiAgXCJUcmFwRW50ZXJLZXlcIixcbiAgXCJUcmFwU2VsZWN0aW9uXCIsXG4gIFwiVHJhdmVsRGlyZWN0aW9uc1wiLFxuICBcIlRyYXZlbERpcmVjdGlvbnNEYXRhXCIsXG4gIFwiVHJhdmVsRGlzdGFuY2VcIixcbiAgXCJUcmF2ZWxEaXN0YW5jZUxpc3RcIixcbiAgXCJUcmF2ZWxNZXRob2RcIixcbiAgXCJUcmF2ZWxUaW1lXCIsXG4gIFwiVHJlZVwiLFxuICBcIlRyZWVDYXNlc1wiLFxuICBcIlRyZWVDaGlsZHJlblwiLFxuICBcIlRyZWVDb3VudFwiLFxuICBcIlRyZWVEYXRhXCIsXG4gIFwiVHJlZURlbGV0ZVwiLFxuICBcIlRyZWVEZXB0aFwiLFxuICBcIlRyZWVFbGVtZW50Q29vcmRpbmF0ZXNcIixcbiAgXCJUcmVlRWxlbWVudExhYmVsXCIsXG4gIFwiVHJlZUVsZW1lbnRMYWJlbEZ1bmN0aW9uXCIsXG4gIFwiVHJlZUVsZW1lbnRMYWJlbFN0eWxlXCIsXG4gIFwiVHJlZUVsZW1lbnRTaGFwZVwiLFxuICBcIlRyZWVFbGVtZW50U2hhcGVGdW5jdGlvblwiLFxuICBcIlRyZWVFbGVtZW50U2l6ZVwiLFxuICBcIlRyZWVFbGVtZW50U2l6ZUZ1bmN0aW9uXCIsXG4gIFwiVHJlZUVsZW1lbnRTdHlsZVwiLFxuICBcIlRyZWVFbGVtZW50U3R5bGVGdW5jdGlvblwiLFxuICBcIlRyZWVFeHByZXNzaW9uXCIsXG4gIFwiVHJlZUV4dHJhY3RcIixcbiAgXCJUcmVlRm9sZFwiLFxuICBcIlRyZWVGb3JtXCIsXG4gIFwiVHJlZUdyYXBoXCIsXG4gIFwiVHJlZUdyYXBoUVwiLFxuICBcIlRyZWVJbnNlcnRcIixcbiAgXCJUcmVlTGF5b3V0XCIsXG4gIFwiVHJlZUxlYWZDb3VudFwiLFxuICBcIlRyZWVMZWFmUVwiLFxuICBcIlRyZWVMZWF2ZXNcIixcbiAgXCJUcmVlTGV2ZWxcIixcbiAgXCJUcmVlTWFwXCIsXG4gIFwiVHJlZU1hcEF0XCIsXG4gIFwiVHJlZU91dGxpbmVcIixcbiAgXCJUcmVlUGxvdFwiLFxuICBcIlRyZWVQb3NpdGlvblwiLFxuICBcIlRyZWVRXCIsXG4gIFwiVHJlZVJlcGxhY2VQYXJ0XCIsXG4gIFwiVHJlZVJ1bGVzXCIsXG4gIFwiVHJlZVNjYW5cIixcbiAgXCJUcmVlU2VsZWN0XCIsXG4gIFwiVHJlZVNpemVcIixcbiAgXCJUcmVlVHJhdmVyc2FsT3JkZXJcIixcbiAgXCJUcmVuZFN0eWxlXCIsXG4gIFwiVHJpYW5nbGVcIixcbiAgXCJUcmlhbmdsZUNlbnRlclwiLFxuICBcIlRyaWFuZ2xlQ29uc3RydWN0XCIsXG4gIFwiVHJpYW5nbGVNZWFzdXJlbWVudFwiLFxuICBcIlRyaWFuZ2xlV2F2ZVwiLFxuICBcIlRyaWFuZ3VsYXJEaXN0cmlidXRpb25cIixcbiAgXCJUcmlhbmd1bGF0ZU1lc2hcIixcbiAgXCJUcmlnXCIsXG4gIFwiVHJpZ0V4cGFuZFwiLFxuICBcIlRyaWdGYWN0b3JcIixcbiAgXCJUcmlnRmFjdG9yTGlzdFwiLFxuICBcIlRyaWdnZXJcIixcbiAgXCJUcmlnUmVkdWNlXCIsXG4gIFwiVHJpZ1RvRXhwXCIsXG4gIFwiVHJpbW1lZE1lYW5cIixcbiAgXCJUcmltbWVkVmFyaWFuY2VcIixcbiAgXCJUcm9waWNhbFN0b3JtRGF0YVwiLFxuICBcIlRydWVcIixcbiAgXCJUcnVlUVwiLFxuICBcIlRydW5jYXRlZERpc3RyaWJ1dGlvblwiLFxuICBcIlRydW5jYXRlZFBvbHloZWRyb25cIixcbiAgXCJUc2FsbGlzUUV4cG9uZW50aWFsRGlzdHJpYnV0aW9uXCIsXG4gIFwiVHNhbGxpc1FHYXVzc2lhbkRpc3RyaWJ1dGlvblwiLFxuICBcIlRUZXN0XCIsXG4gIFwiVHViZVwiLFxuICBcIlR1YmVCZXppZXJDdXJ2ZUJveFwiLFxuICBcIlR1YmVCZXppZXJDdXJ2ZUJveE9wdGlvbnNcIixcbiAgXCJUdWJlQm94XCIsXG4gIFwiVHViZUJveE9wdGlvbnNcIixcbiAgXCJUdWJlQlNwbGluZUN1cnZlQm94XCIsXG4gIFwiVHViZUJTcGxpbmVDdXJ2ZUJveE9wdGlvbnNcIixcbiAgXCJUdWVzZGF5XCIsXG4gIFwiVHVrZXlMYW1iZGFEaXN0cmlidXRpb25cIixcbiAgXCJUdWtleVdpbmRvd1wiLFxuICBcIlR1bm5lbERhdGFcIixcbiAgXCJUdXBsZXNcIixcbiAgXCJUdXJhbkdyYXBoXCIsXG4gIFwiVHVyaW5nTWFjaGluZVwiLFxuICBcIlR1dHRlUG9seW5vbWlhbFwiLFxuICBcIlR3b1dheVJ1bGVcIixcbiAgXCJUeXBlZFwiLFxuICBcIlR5cGVEZWNsYXJhdGlvblwiLFxuICBcIlR5cGVFdmFsdWF0ZVwiLFxuICBcIlR5cGVIaW50XCIsXG4gIFwiVHlwZU9mXCIsXG4gIFwiVHlwZVNwZWNpZmllclwiLFxuICBcIlVuYXRlUVwiLFxuICBcIlVuY29tcHJlc3NcIixcbiAgXCJVbmNvbnN0cmFpbmVkUGFyYW1ldGVyc1wiLFxuICBcIlVuZGVmaW5lZFwiLFxuICBcIlVuZGVyQmFyXCIsXG4gIFwiVW5kZXJmbG93XCIsXG4gIFwiVW5kZXJsaW5lZFwiLFxuICBcIlVuZGVyb3ZlcnNjcmlwdFwiLFxuICBcIlVuZGVyb3ZlcnNjcmlwdEJveFwiLFxuICBcIlVuZGVyb3ZlcnNjcmlwdEJveE9wdGlvbnNcIixcbiAgXCJVbmRlcnNjcmlwdFwiLFxuICBcIlVuZGVyc2NyaXB0Qm94XCIsXG4gIFwiVW5kZXJzY3JpcHRCb3hPcHRpb25zXCIsXG4gIFwiVW5kZXJzZWFGZWF0dXJlRGF0YVwiLFxuICBcIlVuZGlyZWN0ZWRFZGdlXCIsXG4gIFwiVW5kaXJlY3RlZEdyYXBoXCIsXG4gIFwiVW5kaXJlY3RlZEdyYXBoUVwiLFxuICBcIlVuZG9PcHRpb25zXCIsXG4gIFwiVW5kb1RyYWNrZWRWYXJpYWJsZXNcIixcbiAgXCJVbmVxdWFsXCIsXG4gIFwiVW5lcXVhbFRvXCIsXG4gIFwiVW5ldmFsdWF0ZWRcIixcbiAgXCJVbmlmb3JtRGlzdHJpYnV0aW9uXCIsXG4gIFwiVW5pZm9ybUdyYXBoRGlzdHJpYnV0aW9uXCIsXG4gIFwiVW5pZm9ybVBvbHloZWRyb25cIixcbiAgXCJVbmlmb3JtU3VtRGlzdHJpYnV0aW9uXCIsXG4gIFwiVW5pbnN0YWxsXCIsXG4gIFwiVW5pb25cIixcbiAgXCJVbmlvbmVkRW50aXR5Q2xhc3NcIixcbiAgXCJVbmlvblBsdXNcIixcbiAgXCJVbmlxdWVcIixcbiAgXCJVbmlxdWVFbGVtZW50c1wiLFxuICBcIlVuaXRhcnlNYXRyaXhRXCIsXG4gIFwiVW5pdEJveFwiLFxuICBcIlVuaXRDb252ZXJ0XCIsXG4gIFwiVW5pdERpbWVuc2lvbnNcIixcbiAgXCJVbml0aXplXCIsXG4gIFwiVW5pdFJvb3RUZXN0XCIsXG4gIFwiVW5pdFNpbXBsaWZ5XCIsXG4gIFwiVW5pdFN0ZXBcIixcbiAgXCJVbml0U3lzdGVtXCIsXG4gIFwiVW5pdFRyaWFuZ2xlXCIsXG4gIFwiVW5pdFZlY3RvclwiLFxuICBcIlVuaXRWZWN0b3JMYXllclwiLFxuICBcIlVuaXR5RGltZW5zaW9uc1wiLFxuICBcIlVuaXZlcnNlTW9kZWxEYXRhXCIsXG4gIFwiVW5pdmVyc2l0eURhdGFcIixcbiAgXCJVbml4VGltZVwiLFxuICBcIlVubGFiZWxlZFRyZWVcIixcbiAgXCJVbm1hbmFnZU9iamVjdFwiLFxuICBcIlVucHJvdGVjdFwiLFxuICBcIlVucmVnaXN0ZXJFeHRlcm5hbEV2YWx1YXRvclwiLFxuICBcIlVuc2FtZVFcIixcbiAgXCJVbnNhdmVkVmFyaWFibGVzXCIsXG4gIFwiVW5zZXRcIixcbiAgXCJVbnNldFNoYXJlZFwiLFxuICBcIlVudGlsXCIsXG4gIFwiVW50cmFja2VkVmFyaWFibGVzXCIsXG4gIFwiVXBcIixcbiAgXCJVcEFycm93XCIsXG4gIFwiVXBBcnJvd0JhclwiLFxuICBcIlVwQXJyb3dEb3duQXJyb3dcIixcbiAgXCJVcGRhdGVcIixcbiAgXCJVcGRhdGVEeW5hbWljT2JqZWN0c1wiLFxuICBcIlVwZGF0ZUR5bmFtaWNPYmplY3RzU3luY2hyb25vdXNcIixcbiAgXCJVcGRhdGVJbnRlcnZhbFwiLFxuICBcIlVwZGF0ZVBhY2xldFNpdGVzXCIsXG4gIFwiVXBkYXRlU2VhcmNoSW5kZXhcIixcbiAgXCJVcERvd25BcnJvd1wiLFxuICBcIlVwRXF1aWxpYnJpdW1cIixcbiAgXCJVcHBlckNhc2VRXCIsXG4gIFwiVXBwZXJMZWZ0QXJyb3dcIixcbiAgXCJVcHBlclJpZ2h0QXJyb3dcIixcbiAgXCJVcHBlclRyaWFuZ3VsYXJpemVcIixcbiAgXCJVcHBlclRyaWFuZ3VsYXJNYXRyaXhcIixcbiAgXCJVcHBlclRyaWFuZ3VsYXJNYXRyaXhRXCIsXG4gIFwiVXBzYW1wbGVcIixcbiAgXCJVcFNldFwiLFxuICBcIlVwU2V0RGVsYXllZFwiLFxuICBcIlVwVGVlXCIsXG4gIFwiVXBUZWVBcnJvd1wiLFxuICBcIlVwVG9cIixcbiAgXCJVcFZhbHVlc1wiLFxuICBcIlVSTFwiLFxuICBcIlVSTEJ1aWxkXCIsXG4gIFwiVVJMRGVjb2RlXCIsXG4gIFwiVVJMRGlzcGF0Y2hlclwiLFxuICBcIlVSTERvd25sb2FkXCIsXG4gIFwiVVJMRG93bmxvYWRTdWJtaXRcIixcbiAgXCJVUkxFbmNvZGVcIixcbiAgXCJVUkxFeGVjdXRlXCIsXG4gIFwiVVJMRXhwYW5kXCIsXG4gIFwiVVJMRmV0Y2hcIixcbiAgXCJVUkxGZXRjaEFzeW5jaHJvbm91c1wiLFxuICBcIlVSTFBhcnNlXCIsXG4gIFwiVVJMUXVlcnlEZWNvZGVcIixcbiAgXCJVUkxRdWVyeUVuY29kZVwiLFxuICBcIlVSTFJlYWRcIixcbiAgXCJVUkxSZXNwb25zZVRpbWVcIixcbiAgXCJVUkxTYXZlXCIsXG4gIFwiVVJMU2F2ZUFzeW5jaHJvbm91c1wiLFxuICBcIlVSTFNob3J0ZW5cIixcbiAgXCJVUkxTdWJtaXRcIixcbiAgXCJVc2VFbWJlZGRlZExpYnJhcnlcIixcbiAgXCJVc2VHcmFwaGljc1JhbmdlXCIsXG4gIFwiVXNlckRlZmluZWRXYXZlbGV0XCIsXG4gIFwiVXNpbmdcIixcbiAgXCJVc2luZ0Zyb250RW5kXCIsXG4gIFwiVXRpbGl0eUZ1bmN0aW9uXCIsXG4gIFwiVjJHZXRcIixcbiAgXCJWYWxlbmNlRXJyb3JIYW5kbGluZ1wiLFxuICBcIlZhbGVuY2VGaWxsaW5nXCIsXG4gIFwiVmFsaWRhdGlvbkxlbmd0aFwiLFxuICBcIlZhbGlkYXRpb25TZXRcIixcbiAgXCJWYWx1ZUJveFwiLFxuICBcIlZhbHVlQm94T3B0aW9uc1wiLFxuICBcIlZhbHVlRGltZW5zaW9uc1wiLFxuICBcIlZhbHVlRm9ybVwiLFxuICBcIlZhbHVlUHJlcHJvY2Vzc2luZ0Z1bmN0aW9uXCIsXG4gIFwiVmFsdWVRXCIsXG4gIFwiVmFsdWVzXCIsXG4gIFwiVmFsdWVzRGF0YVwiLFxuICBcIlZhbmRlcm1vbmRlTWF0cml4XCIsXG4gIFwiVmFyaWFibGVzXCIsXG4gIFwiVmFyaWFuY2VcIixcbiAgXCJWYXJpYW5jZUVxdWl2YWxlbmNlVGVzdFwiLFxuICBcIlZhcmlhbmNlRXN0aW1hdG9yRnVuY3Rpb25cIixcbiAgXCJWYXJpYW5jZUdhbW1hRGlzdHJpYnV0aW9uXCIsXG4gIFwiVmFyaWFuY2VHYW1tYVBvaW50UHJvY2Vzc1wiLFxuICBcIlZhcmlhbmNlVGVzdFwiLFxuICBcIlZhcmlvZ3JhbUZ1bmN0aW9uXCIsXG4gIFwiVmFyaW9ncmFtTW9kZWxcIixcbiAgXCJWZWN0b3JBbmdsZVwiLFxuICBcIlZlY3RvckFyb3VuZFwiLFxuICBcIlZlY3RvckFzcGVjdFJhdGlvXCIsXG4gIFwiVmVjdG9yQ29sb3JGdW5jdGlvblwiLFxuICBcIlZlY3RvckNvbG9yRnVuY3Rpb25TY2FsaW5nXCIsXG4gIFwiVmVjdG9yRGVuc2l0eVBsb3RcIixcbiAgXCJWZWN0b3JEaXNwbGFjZW1lbnRQbG90XCIsXG4gIFwiVmVjdG9yRGlzcGxhY2VtZW50UGxvdDNEXCIsXG4gIFwiVmVjdG9yR2x5cGhEYXRhXCIsXG4gIFwiVmVjdG9yR3JlYXRlclwiLFxuICBcIlZlY3RvckdyZWF0ZXJFcXVhbFwiLFxuICBcIlZlY3Rvckxlc3NcIixcbiAgXCJWZWN0b3JMZXNzRXF1YWxcIixcbiAgXCJWZWN0b3JNYXJrZXJzXCIsXG4gIFwiVmVjdG9yUGxvdFwiLFxuICBcIlZlY3RvclBsb3QzRFwiLFxuICBcIlZlY3RvclBvaW50c1wiLFxuICBcIlZlY3RvclFcIixcbiAgXCJWZWN0b3JSYW5nZVwiLFxuICBcIlZlY3RvcnNcIixcbiAgXCJWZWN0b3JTY2FsZVwiLFxuICBcIlZlY3RvclNjYWxpbmdcIixcbiAgXCJWZWN0b3JTaXplc1wiLFxuICBcIlZlY3RvclN0eWxlXCIsXG4gIFwiVmVlXCIsXG4gIFwiVmVyYmF0aW1cIixcbiAgXCJWZXJib3NlXCIsXG4gIFwiVmVyaWZpY2F0aW9uVGVzdFwiLFxuICBcIlZlcmlmeUNvbnZlcmdlbmNlXCIsXG4gIFwiVmVyaWZ5RGVyaXZlZEtleVwiLFxuICBcIlZlcmlmeURpZ2l0YWxTaWduYXR1cmVcIixcbiAgXCJWZXJpZnlGaWxlU2lnbmF0dXJlXCIsXG4gIFwiVmVyaWZ5SW50ZXJwcmV0YXRpb25cIixcbiAgXCJWZXJpZnlTZWN1cml0eUNlcnRpZmljYXRlc1wiLFxuICBcIlZlcmlmeVNvbHV0aW9uc1wiLFxuICBcIlZlcmlmeVRlc3RBc3N1bXB0aW9uc1wiLFxuICBcIlZlcnNpb25lZFByZWZlcmVuY2VzXCIsXG4gIFwiVmVydGV4QWRkXCIsXG4gIFwiVmVydGV4Q2FwYWNpdHlcIixcbiAgXCJWZXJ0ZXhDaHJvbWF0aWNOdW1iZXJcIixcbiAgXCJWZXJ0ZXhDb2xvcnNcIixcbiAgXCJWZXJ0ZXhDb21wb25lbnRcIixcbiAgXCJWZXJ0ZXhDb25uZWN0aXZpdHlcIixcbiAgXCJWZXJ0ZXhDb250cmFjdFwiLFxuICBcIlZlcnRleENvb3JkaW5hdGVSdWxlc1wiLFxuICBcIlZlcnRleENvb3JkaW5hdGVzXCIsXG4gIFwiVmVydGV4Q29ycmVsYXRpb25TaW1pbGFyaXR5XCIsXG4gIFwiVmVydGV4Q29zaW5lU2ltaWxhcml0eVwiLFxuICBcIlZlcnRleENvdW50XCIsXG4gIFwiVmVydGV4Q292ZXJRXCIsXG4gIFwiVmVydGV4RGF0YUNvb3JkaW5hdGVzXCIsXG4gIFwiVmVydGV4RGVncmVlXCIsXG4gIFwiVmVydGV4RGVsZXRlXCIsXG4gIFwiVmVydGV4RGljZVNpbWlsYXJpdHlcIixcbiAgXCJWZXJ0ZXhFY2NlbnRyaWNpdHlcIixcbiAgXCJWZXJ0ZXhJbkNvbXBvbmVudFwiLFxuICBcIlZlcnRleEluQ29tcG9uZW50R3JhcGhcIixcbiAgXCJWZXJ0ZXhJbkRlZ3JlZVwiLFxuICBcIlZlcnRleEluZGV4XCIsXG4gIFwiVmVydGV4SmFjY2FyZFNpbWlsYXJpdHlcIixcbiAgXCJWZXJ0ZXhMYWJlbGluZ1wiLFxuICBcIlZlcnRleExhYmVsc1wiLFxuICBcIlZlcnRleExhYmVsU3R5bGVcIixcbiAgXCJWZXJ0ZXhMaXN0XCIsXG4gIFwiVmVydGV4Tm9ybWFsc1wiLFxuICBcIlZlcnRleE91dENvbXBvbmVudFwiLFxuICBcIlZlcnRleE91dENvbXBvbmVudEdyYXBoXCIsXG4gIFwiVmVydGV4T3V0RGVncmVlXCIsXG4gIFwiVmVydGV4UVwiLFxuICBcIlZlcnRleFJlbmRlcmluZ0Z1bmN0aW9uXCIsXG4gIFwiVmVydGV4UmVwbGFjZVwiLFxuICBcIlZlcnRleFNoYXBlXCIsXG4gIFwiVmVydGV4U2hhcGVGdW5jdGlvblwiLFxuICBcIlZlcnRleFNpemVcIixcbiAgXCJWZXJ0ZXhTdHlsZVwiLFxuICBcIlZlcnRleFRleHR1cmVDb29yZGluYXRlc1wiLFxuICBcIlZlcnRleFRyYW5zaXRpdmVHcmFwaFFcIixcbiAgXCJWZXJ0ZXhXZWlnaHRcIixcbiAgXCJWZXJ0ZXhXZWlnaHRlZEdyYXBoUVwiLFxuICBcIlZlcnRpY2FsXCIsXG4gIFwiVmVydGljYWxCYXJcIixcbiAgXCJWZXJ0aWNhbEZvcm1cIixcbiAgXCJWZXJ0aWNhbEdhdWdlXCIsXG4gIFwiVmVydGljYWxTZXBhcmF0b3JcIixcbiAgXCJWZXJ0aWNhbFNsaWRlclwiLFxuICBcIlZlcnRpY2FsVGlsZGVcIixcbiAgXCJWaWRlb1wiLFxuICBcIlZpZGVvQ2FwdHVyZVwiLFxuICBcIlZpZGVvQ29tYmluZVwiLFxuICBcIlZpZGVvRGVsZXRlXCIsXG4gIFwiVmlkZW9FbmNvZGluZ1wiLFxuICBcIlZpZGVvRXh0cmFjdEZyYW1lc1wiLFxuICBcIlZpZGVvRnJhbWVMaXN0XCIsXG4gIFwiVmlkZW9GcmFtZU1hcFwiLFxuICBcIlZpZGVvR2VuZXJhdG9yXCIsXG4gIFwiVmlkZW9JbnNlcnRcIixcbiAgXCJWaWRlb0ludGVydmFsc1wiLFxuICBcIlZpZGVvSm9pblwiLFxuICBcIlZpZGVvTWFwXCIsXG4gIFwiVmlkZW9NYXBMaXN0XCIsXG4gIFwiVmlkZW9NYXBUaW1lU2VyaWVzXCIsXG4gIFwiVmlkZW9QYWRkaW5nXCIsXG4gIFwiVmlkZW9QYXVzZVwiLFxuICBcIlZpZGVvUGxheVwiLFxuICBcIlZpZGVvUVwiLFxuICBcIlZpZGVvUmVjb3JkXCIsXG4gIFwiVmlkZW9SZXBsYWNlXCIsXG4gIFwiVmlkZW9TY3JlZW5DYXB0dXJlXCIsXG4gIFwiVmlkZW9TcGxpdFwiLFxuICBcIlZpZGVvU3RvcFwiLFxuICBcIlZpZGVvU3RyZWFtXCIsXG4gIFwiVmlkZW9TdHJlYW1zXCIsXG4gIFwiVmlkZW9UaW1lU3RyZXRjaFwiLFxuICBcIlZpZGVvVHJhY2tTZWxlY3Rpb25cIixcbiAgXCJWaWRlb1RyYW5zY29kZVwiLFxuICBcIlZpZGVvVHJhbnNwYXJlbmN5XCIsXG4gIFwiVmlkZW9UcmltXCIsXG4gIFwiVmlld0FuZ2xlXCIsXG4gIFwiVmlld0NlbnRlclwiLFxuICBcIlZpZXdNYXRyaXhcIixcbiAgXCJWaWV3UG9pbnRcIixcbiAgXCJWaWV3UG9pbnRTZWxlY3RvclNldHRpbmdzXCIsXG4gIFwiVmlld1BvcnRcIixcbiAgXCJWaWV3UHJvamVjdGlvblwiLFxuICBcIlZpZXdSYW5nZVwiLFxuICBcIlZpZXdWZWN0b3JcIixcbiAgXCJWaWV3VmVydGljYWxcIixcbiAgXCJWaXJ0dWFsR3JvdXBEYXRhXCIsXG4gIFwiVmlzaWJsZVwiLFxuICBcIlZpc2libGVDZWxsXCIsXG4gIFwiVm9pY2VTdHlsZURhdGFcIixcbiAgXCJWb2lndERpc3RyaWJ1dGlvblwiLFxuICBcIlZvbGNhbm9EYXRhXCIsXG4gIFwiVm9sdW1lXCIsXG4gIFwiVm9uTWlzZXNEaXN0cmlidXRpb25cIixcbiAgXCJWb3Jvbm9pTWVzaFwiLFxuICBcIldhaXRBbGxcIixcbiAgXCJXYWl0QXN5bmNocm9ub3VzVGFza1wiLFxuICBcIldhaXROZXh0XCIsXG4gIFwiV2FpdFVudGlsXCIsXG4gIFwiV2FrZWJ5RGlzdHJpYnV0aW9uXCIsXG4gIFwiV2FsbGVuaXVzSHlwZXJnZW9tZXRyaWNEaXN0cmlidXRpb25cIixcbiAgXCJXYXJpbmdZdWxlRGlzdHJpYnV0aW9uXCIsXG4gIFwiV2FycGluZ0NvcnJlc3BvbmRlbmNlXCIsXG4gIFwiV2FycGluZ0Rpc3RhbmNlXCIsXG4gIFwiV2F0ZXJzaGVkQ29tcG9uZW50c1wiLFxuICBcIldhdHNvblVTcXVhcmVUZXN0XCIsXG4gIFwiV2F0dHNTdHJvZ2F0ekdyYXBoRGlzdHJpYnV0aW9uXCIsXG4gIFwiV2F2ZWxldEJlc3RCYXNpc1wiLFxuICBcIldhdmVsZXRGaWx0ZXJDb2VmZmljaWVudHNcIixcbiAgXCJXYXZlbGV0SW1hZ2VQbG90XCIsXG4gIFwiV2F2ZWxldExpc3RQbG90XCIsXG4gIFwiV2F2ZWxldE1hcEluZGV4ZWRcIixcbiAgXCJXYXZlbGV0TWF0cml4UGxvdFwiLFxuICBcIldhdmVsZXRQaGlcIixcbiAgXCJXYXZlbGV0UHNpXCIsXG4gIFwiV2F2ZWxldFNjYWxlXCIsXG4gIFwiV2F2ZWxldFNjYWxvZ3JhbVwiLFxuICBcIldhdmVsZXRUaHJlc2hvbGRcIixcbiAgXCJXYXZlUERFQ29tcG9uZW50XCIsXG4gIFwiV2Vha2x5Q29ubmVjdGVkQ29tcG9uZW50c1wiLFxuICBcIldlYWtseUNvbm5lY3RlZEdyYXBoQ29tcG9uZW50c1wiLFxuICBcIldlYWtseUNvbm5lY3RlZEdyYXBoUVwiLFxuICBcIldlYWtTdGF0aW9uYXJpdHlcIixcbiAgXCJXZWF0aGVyRGF0YVwiLFxuICBcIldlYXRoZXJGb3JlY2FzdERhdGFcIixcbiAgXCJXZWJBdWRpb1NlYXJjaFwiLFxuICBcIldlYkNvbHVtblwiLFxuICBcIldlYkVsZW1lbnRPYmplY3RcIixcbiAgXCJXZWJlckVcIixcbiAgXCJXZWJFeGVjdXRlXCIsXG4gIFwiV2ViSW1hZ2VcIixcbiAgXCJXZWJJbWFnZVNlYXJjaFwiLFxuICBcIldlYkl0ZW1cIixcbiAgXCJXZWJQYWdlTWV0YUluZm9ybWF0aW9uXCIsXG4gIFwiV2ViUm93XCIsXG4gIFwiV2ViU2VhcmNoXCIsXG4gIFwiV2ViU2Vzc2lvbk9iamVjdFwiLFxuICBcIldlYlNlc3Npb25zXCIsXG4gIFwiV2ViV2luZG93T2JqZWN0XCIsXG4gIFwiV2VkZ2VcIixcbiAgXCJXZWRuZXNkYXlcIixcbiAgXCJXZWlidWxsRGlzdHJpYnV0aW9uXCIsXG4gIFwiV2VpZXJzdHJhc3NFMVwiLFxuICBcIldlaWVyc3RyYXNzRTJcIixcbiAgXCJXZWllcnN0cmFzc0UzXCIsXG4gIFwiV2VpZXJzdHJhc3NFdGExXCIsXG4gIFwiV2VpZXJzdHJhc3NFdGEyXCIsXG4gIFwiV2VpZXJzdHJhc3NFdGEzXCIsXG4gIFwiV2VpZXJzdHJhc3NIYWxmUGVyaW9kc1wiLFxuICBcIldlaWVyc3RyYXNzSGFsZlBlcmlvZFcxXCIsXG4gIFwiV2VpZXJzdHJhc3NIYWxmUGVyaW9kVzJcIixcbiAgXCJXZWllcnN0cmFzc0hhbGZQZXJpb2RXM1wiLFxuICBcIldlaWVyc3RyYXNzSW52YXJpYW50RzJcIixcbiAgXCJXZWllcnN0cmFzc0ludmFyaWFudEczXCIsXG4gIFwiV2VpZXJzdHJhc3NJbnZhcmlhbnRzXCIsXG4gIFwiV2VpZXJzdHJhc3NQXCIsXG4gIFwiV2VpZXJzdHJhc3NQUHJpbWVcIixcbiAgXCJXZWllcnN0cmFzc1NpZ21hXCIsXG4gIFwiV2VpZXJzdHJhc3NaZXRhXCIsXG4gIFwiV2VpZ2h0ZWRBZGphY2VuY3lHcmFwaFwiLFxuICBcIldlaWdodGVkQWRqYWNlbmN5TWF0cml4XCIsXG4gIFwiV2VpZ2h0ZWREYXRhXCIsXG4gIFwiV2VpZ2h0ZWRHcmFwaFFcIixcbiAgXCJXZWlnaHRzXCIsXG4gIFwiV2VsY2hXaW5kb3dcIixcbiAgXCJXaGVlbEdyYXBoXCIsXG4gIFwiV2hlbkV2ZW50XCIsXG4gIFwiV2hpY2hcIixcbiAgXCJXaGlsZVwiLFxuICBcIldoaXRlXCIsXG4gIFwiV2hpdGVOb2lzZVByb2Nlc3NcIixcbiAgXCJXaGl0ZVBvaW50XCIsXG4gIFwiV2hpdGVzcGFjZVwiLFxuICBcIldoaXRlc3BhY2VDaGFyYWN0ZXJcIixcbiAgXCJXaGl0dGFrZXJNXCIsXG4gIFwiV2hpdHRha2VyV1wiLFxuICBcIldob2xlQ2VsbEdyb3VwT3BlbmVyXCIsXG4gIFwiV2llbmVyRmlsdGVyXCIsXG4gIFwiV2llbmVyUHJvY2Vzc1wiLFxuICBcIldpZ25lckRcIixcbiAgXCJXaWduZXJTZW1pY2lyY2xlRGlzdHJpYnV0aW9uXCIsXG4gIFwiV2lraWRhdGFEYXRhXCIsXG4gIFwiV2lraWRhdGFTZWFyY2hcIixcbiAgXCJXaWtpcGVkaWFEYXRhXCIsXG4gIFwiV2lraXBlZGlhU2VhcmNoXCIsXG4gIFwiV2lsa3NXXCIsXG4gIFwiV2lsa3NXVGVzdFwiLFxuICBcIldpbmREaXJlY3Rpb25EYXRhXCIsXG4gIFwiV2luZGluZ0NvdW50XCIsXG4gIFwiV2luZGluZ1BvbHlnb25cIixcbiAgXCJXaW5kb3dDbGlja1NlbGVjdFwiLFxuICBcIldpbmRvd0VsZW1lbnRzXCIsXG4gIFwiV2luZG93RmxvYXRpbmdcIixcbiAgXCJXaW5kb3dGcmFtZVwiLFxuICBcIldpbmRvd0ZyYW1lRWxlbWVudHNcIixcbiAgXCJXaW5kb3dNYXJnaW5zXCIsXG4gIFwiV2luZG93TW92YWJsZVwiLFxuICBcIldpbmRvd09wYWNpdHlcIixcbiAgXCJXaW5kb3dQZXJzaXN0ZW50U3R5bGVzXCIsXG4gIFwiV2luZG93U2VsZWN0ZWRcIixcbiAgXCJXaW5kb3dTaXplXCIsXG4gIFwiV2luZG93U3RhdHVzQXJlYVwiLFxuICBcIldpbmRvd1RpdGxlXCIsXG4gIFwiV2luZG93VG9vbGJhcnNcIixcbiAgXCJXaW5kb3dXaWR0aFwiLFxuICBcIldpbmRTcGVlZERhdGFcIixcbiAgXCJXaW5kVmVjdG9yRGF0YVwiLFxuICBcIldpbnNvcml6ZWRNZWFuXCIsXG4gIFwiV2luc29yaXplZFZhcmlhbmNlXCIsXG4gIFwiV2lzaGFydE1hdHJpeERpc3RyaWJ1dGlvblwiLFxuICBcIldpdGhcIixcbiAgXCJXaXRoQ2xlYW51cFwiLFxuICBcIldpdGhMb2NrXCIsXG4gIFwiV29sZnJhbUFscGhhXCIsXG4gIFwiV29sZnJhbUFscGhhRGF0ZVwiLFxuICBcIldvbGZyYW1BbHBoYVF1YW50aXR5XCIsXG4gIFwiV29sZnJhbUFscGhhUmVzdWx0XCIsXG4gIFwiV29sZnJhbUNsb3VkU2V0dGluZ3NcIixcbiAgXCJXb2xmcmFtTGFuZ3VhZ2VEYXRhXCIsXG4gIFwiV29yZFwiLFxuICBcIldvcmRCb3VuZGFyeVwiLFxuICBcIldvcmRDaGFyYWN0ZXJcIixcbiAgXCJXb3JkQ2xvdWRcIixcbiAgXCJXb3JkQ291bnRcIixcbiAgXCJXb3JkQ291bnRzXCIsXG4gIFwiV29yZERhdGFcIixcbiAgXCJXb3JkRGVmaW5pdGlvblwiLFxuICBcIldvcmRGcmVxdWVuY3lcIixcbiAgXCJXb3JkRnJlcXVlbmN5RGF0YVwiLFxuICBcIldvcmRMaXN0XCIsXG4gIFwiV29yZE9yaWVudGF0aW9uXCIsXG4gIFwiV29yZFNlYXJjaFwiLFxuICBcIldvcmRTZWxlY3Rpb25GdW5jdGlvblwiLFxuICBcIldvcmRTZXBhcmF0b3JzXCIsXG4gIFwiV29yZFNwYWNpbmdzXCIsXG4gIFwiV29yZFN0ZW1cIixcbiAgXCJXb3JkVHJhbnNsYXRpb25cIixcbiAgXCJXb3JraW5nUHJlY2lzaW9uXCIsXG4gIFwiV3JhcEFyb3VuZFwiLFxuICBcIldyaXRlXCIsXG4gIFwiV3JpdGVMaW5lXCIsXG4gIFwiV3JpdGVTdHJpbmdcIixcbiAgXCJXcm9uc2tpYW5cIixcbiAgXCJYTUxFbGVtZW50XCIsXG4gIFwiWE1MT2JqZWN0XCIsXG4gIFwiWE1MVGVtcGxhdGVcIixcbiAgXCJYbm9yXCIsXG4gIFwiWG9yXCIsXG4gIFwiWFlaQ29sb3JcIixcbiAgXCJZZWxsb3dcIixcbiAgXCJZZXN0ZXJkYXlcIixcbiAgXCJZdWxlRGlzc2ltaWxhcml0eVwiLFxuICBcIlplcm5pa2VSXCIsXG4gIFwiWmVyb1N5bW1ldHJpY1wiLFxuICBcIlplcm9UZXN0XCIsXG4gIFwiWmVyb1dpZHRoVGltZXNcIixcbiAgXCJaZXRhXCIsXG4gIFwiWmV0YVplcm9cIixcbiAgXCJaSVBDb2RlRGF0YVwiLFxuICBcIlppcGZEaXN0cmlidXRpb25cIixcbiAgXCJab29tQ2VudGVyXCIsXG4gIFwiWm9vbUZhY3RvclwiLFxuICBcIlpUZXN0XCIsXG4gIFwiWlRyYW5zZm9ybVwiLFxuICBcIiRBYm9ydGVkXCIsXG4gIFwiJEFjdGl2YXRpb25Hcm91cElEXCIsXG4gIFwiJEFjdGl2YXRpb25LZXlcIixcbiAgXCIkQWN0aXZhdGlvblVzZXJSZWdpc3RlcmVkXCIsXG4gIFwiJEFkZE9uc0RpcmVjdG9yeVwiLFxuICBcIiRBbGxvd0RhdGFVcGRhdGVzXCIsXG4gIFwiJEFsbG93RXh0ZXJuYWxDaGFubmVsRnVuY3Rpb25zXCIsXG4gIFwiJEFsbG93SW50ZXJuZXRcIixcbiAgXCIkQXNzZXJ0RnVuY3Rpb25cIixcbiAgXCIkQXNzdW1wdGlvbnNcIixcbiAgXCIkQXN5bmNocm9ub3VzVGFza1wiLFxuICBcIiRBdWRpb0RlY29kZXJzXCIsXG4gIFwiJEF1ZGlvRW5jb2RlcnNcIixcbiAgXCIkQXVkaW9JbnB1dERldmljZXNcIixcbiAgXCIkQXVkaW9PdXRwdXREZXZpY2VzXCIsXG4gIFwiJEJhc2VEaXJlY3RvcnlcIixcbiAgXCIkQmFzZVBhY2xldHNEaXJlY3RvcnlcIixcbiAgXCIkQmF0Y2hJbnB1dFwiLFxuICBcIiRCYXRjaE91dHB1dFwiLFxuICBcIiRCbG9ja2NoYWluQmFzZVwiLFxuICBcIiRCb3hGb3Jtc1wiLFxuICBcIiRCeXRlT3JkZXJpbmdcIixcbiAgXCIkQ2FjaGVCYXNlRGlyZWN0b3J5XCIsXG4gIFwiJENhbmNlbGVkXCIsXG4gIFwiJENoYW5uZWxCYXNlXCIsXG4gIFwiJENoYXJhY3RlckVuY29kaW5nXCIsXG4gIFwiJENoYXJhY3RlckVuY29kaW5nc1wiLFxuICBcIiRDbG91ZEFjY291bnROYW1lXCIsXG4gIFwiJENsb3VkQmFzZVwiLFxuICBcIiRDbG91ZENvbm5lY3RlZFwiLFxuICBcIiRDbG91ZENvbm5lY3Rpb25cIixcbiAgXCIkQ2xvdWRDcmVkaXRzQXZhaWxhYmxlXCIsXG4gIFwiJENsb3VkRXZhbHVhdGlvblwiLFxuICBcIiRDbG91ZEV4cHJlc3Npb25CYXNlXCIsXG4gIFwiJENsb3VkT2JqZWN0TmFtZUZvcm1hdFwiLFxuICBcIiRDbG91ZE9iamVjdFVSTFR5cGVcIixcbiAgXCIkQ2xvdWRSb290RGlyZWN0b3J5XCIsXG4gIFwiJENsb3VkU3ltYm9sQmFzZVwiLFxuICBcIiRDbG91ZFVzZXJJRFwiLFxuICBcIiRDbG91ZFVzZXJVVUlEXCIsXG4gIFwiJENsb3VkVmVyc2lvblwiLFxuICBcIiRDbG91ZFZlcnNpb25OdW1iZXJcIixcbiAgXCIkQ2xvdWRXb2xmcmFtRW5naW5lVmVyc2lvbk51bWJlclwiLFxuICBcIiRDb21tYW5kTGluZVwiLFxuICBcIiRDb21waWxhdGlvblRhcmdldFwiLFxuICBcIiRDb21waWxlckVudmlyb25tZW50XCIsXG4gIFwiJENvbmRpdGlvbkhvbGRcIixcbiAgXCIkQ29uZmlndXJlZEtlcm5lbHNcIixcbiAgXCIkQ29udGV4dFwiLFxuICBcIiRDb250ZXh0QWxpYXNlc1wiLFxuICBcIiRDb250ZXh0UGF0aFwiLFxuICBcIiRDb250cm9sQWN0aXZlU2V0dGluZ1wiLFxuICBcIiRDb29raWVzXCIsXG4gIFwiJENvb2tpZVN0b3JlXCIsXG4gIFwiJENyZWF0aW9uRGF0ZVwiLFxuICBcIiRDcnlwdG9ncmFwaGljRWxsaXB0aWNDdXJ2ZU5hbWVzXCIsXG4gIFwiJEN1cnJlbnRMaW5rXCIsXG4gIFwiJEN1cnJlbnRUYXNrXCIsXG4gIFwiJEN1cnJlbnRXZWJTZXNzaW9uXCIsXG4gIFwiJERhdGFTdHJ1Y3R1cmVzXCIsXG4gIFwiJERhdGVTdHJpbmdGb3JtYXRcIixcbiAgXCIkRGVmYXVsdEF1ZGlvSW5wdXREZXZpY2VcIixcbiAgXCIkRGVmYXVsdEF1ZGlvT3V0cHV0RGV2aWNlXCIsXG4gIFwiJERlZmF1bHRGb250XCIsXG4gIFwiJERlZmF1bHRGcm9udEVuZFwiLFxuICBcIiREZWZhdWx0SW1hZ2luZ0RldmljZVwiLFxuICBcIiREZWZhdWx0S2VybmVsc1wiLFxuICBcIiREZWZhdWx0TG9jYWxCYXNlXCIsXG4gIFwiJERlZmF1bHRMb2NhbEtlcm5lbFwiLFxuICBcIiREZWZhdWx0TWFpbGJveFwiLFxuICBcIiREZWZhdWx0TmV0d29ya0ludGVyZmFjZVwiLFxuICBcIiREZWZhdWx0UGF0aFwiLFxuICBcIiREZWZhdWx0UHJveHlSdWxlc1wiLFxuICBcIiREZWZhdWx0UmVtb3RlQmF0Y2hTdWJtaXNzaW9uRW52aXJvbm1lbnRcIixcbiAgXCIkRGVmYXVsdFJlbW90ZUtlcm5lbFwiLFxuICBcIiREZWZhdWx0U3lzdGVtQ3JlZGVudGlhbFN0b3JlXCIsXG4gIFwiJERpc3BsYXlcIixcbiAgXCIkRGlzcGxheUZ1bmN0aW9uXCIsXG4gIFwiJERpc3RyaWJ1dGVkQ29udGV4dHNcIixcbiAgXCIkRHluYW1pY0V2YWx1YXRpb25cIixcbiAgXCIkRWNob1wiLFxuICBcIiRFbWJlZENvZGVFbnZpcm9ubWVudHNcIixcbiAgXCIkRW1iZWRkYWJsZVNlcnZpY2VzXCIsXG4gIFwiJEVudGl0eVN0b3Jlc1wiLFxuICBcIiRFcGlsb2dcIixcbiAgXCIkRXZhbHVhdGlvbkNsb3VkQmFzZVwiLFxuICBcIiRFdmFsdWF0aW9uQ2xvdWRPYmplY3RcIixcbiAgXCIkRXZhbHVhdGlvbkVudmlyb25tZW50XCIsXG4gIFwiJEV4cG9ydEZvcm1hdHNcIixcbiAgXCIkRXh0ZXJuYWxJZGVudGlmaWVyVHlwZXNcIixcbiAgXCIkRXh0ZXJuYWxTdG9yYWdlQmFzZVwiLFxuICBcIiRGYWlsZWRcIixcbiAgXCIkRmluYW5jaWFsRGF0YVNvdXJjZVwiLFxuICBcIiRGb250RmFtaWxpZXNcIixcbiAgXCIkRm9ybWF0VHlwZVwiLFxuICBcIiRGcm9udEVuZFwiLFxuICBcIiRGcm9udEVuZFNlc3Npb25cIixcbiAgXCIkR2VuZXJhdGVkQXNzZXRMb2NhdGlvblwiLFxuICBcIiRHZW9FbnRpdHlUeXBlc1wiLFxuICBcIiRHZW9Mb2NhdGlvblwiLFxuICBcIiRHZW9Mb2NhdGlvbkNpdHlcIixcbiAgXCIkR2VvTG9jYXRpb25Db3VudHJ5XCIsXG4gIFwiJEdlb0xvY2F0aW9uUHJlY2lzaW9uXCIsXG4gIFwiJEdlb0xvY2F0aW9uU291cmNlXCIsXG4gIFwiJEhpc3RvcnlMZW5ndGhcIixcbiAgXCIkSG9tZURpcmVjdG9yeVwiLFxuICBcIiRIVE1MRXhwb3J0UnVsZXNcIixcbiAgXCIkSFRUUENvb2tpZXNcIixcbiAgXCIkSFRUUFJlcXVlc3RcIixcbiAgXCIkSWdub3JlRU9GXCIsXG4gIFwiJEltYWdlRm9ybWF0dGluZ1dpZHRoXCIsXG4gIFwiJEltYWdlUmVzb2x1dGlvblwiLFxuICBcIiRJbWFnaW5nRGV2aWNlXCIsXG4gIFwiJEltYWdpbmdEZXZpY2VzXCIsXG4gIFwiJEltcG9ydEZvcm1hdHNcIixcbiAgXCIkSW5jb21pbmdNYWlsU2V0dGluZ3NcIixcbiAgXCIkSW5pdGlhbERpcmVjdG9yeVwiLFxuICBcIiRJbml0aWFsaXphdGlvblwiLFxuICBcIiRJbml0aWFsaXphdGlvbkNvbnRleHRzXCIsXG4gIFwiJElucHV0XCIsXG4gIFwiJElucHV0RmlsZU5hbWVcIixcbiAgXCIkSW5wdXRTdHJlYW1NZXRob2RzXCIsXG4gIFwiJEluc3BlY3RvclwiLFxuICBcIiRJbnN0YWxsYXRpb25EYXRlXCIsXG4gIFwiJEluc3RhbGxhdGlvbkRpcmVjdG9yeVwiLFxuICBcIiRJbnRlcmZhY2VFbnZpcm9ubWVudFwiLFxuICBcIiRJbnRlcnByZXRlclR5cGVzXCIsXG4gIFwiJEl0ZXJhdGlvbkxpbWl0XCIsXG4gIFwiJEtlcm5lbENvdW50XCIsXG4gIFwiJEtlcm5lbElEXCIsXG4gIFwiJExhbmd1YWdlXCIsXG4gIFwiJExhdW5jaERpcmVjdG9yeVwiLFxuICBcIiRMaWJyYXJ5UGF0aFwiLFxuICBcIiRMaWNlbnNlRXhwaXJhdGlvbkRhdGVcIixcbiAgXCIkTGljZW5zZUlEXCIsXG4gIFwiJExpY2Vuc2VQcm9jZXNzZXNcIixcbiAgXCIkTGljZW5zZVNlcnZlclwiLFxuICBcIiRMaWNlbnNlU3VicHJvY2Vzc2VzXCIsXG4gIFwiJExpY2Vuc2VUeXBlXCIsXG4gIFwiJExpbmVcIixcbiAgXCIkTGlua2VkXCIsXG4gIFwiJExpbmtTdXBwb3J0ZWRcIixcbiAgXCIkTG9hZGVkRmlsZXNcIixcbiAgXCIkTG9jYWxCYXNlXCIsXG4gIFwiJExvY2FsU3ltYm9sQmFzZVwiLFxuICBcIiRNYWNoaW5lQWRkcmVzc2VzXCIsXG4gIFwiJE1hY2hpbmVEb21haW5cIixcbiAgXCIkTWFjaGluZURvbWFpbnNcIixcbiAgXCIkTWFjaGluZUVwc2lsb25cIixcbiAgXCIkTWFjaGluZUlEXCIsXG4gIFwiJE1hY2hpbmVOYW1lXCIsXG4gIFwiJE1hY2hpbmVQcmVjaXNpb25cIixcbiAgXCIkTWFjaGluZVR5cGVcIixcbiAgXCIkTWF4RGlzcGxheWVkQ2hpbGRyZW5cIixcbiAgXCIkTWF4RXh0cmFQcmVjaXNpb25cIixcbiAgXCIkTWF4TGljZW5zZVByb2Nlc3Nlc1wiLFxuICBcIiRNYXhMaWNlbnNlU3VicHJvY2Vzc2VzXCIsXG4gIFwiJE1heE1hY2hpbmVOdW1iZXJcIixcbiAgXCIkTWF4TnVtYmVyXCIsXG4gIFwiJE1heFBpZWNld2lzZUNhc2VzXCIsXG4gIFwiJE1heFByZWNpc2lvblwiLFxuICBcIiRNYXhSb290RGVncmVlXCIsXG4gIFwiJE1lc3NhZ2VHcm91cHNcIixcbiAgXCIkTWVzc2FnZUxpc3RcIixcbiAgXCIkTWVzc2FnZVByZVByaW50XCIsXG4gIFwiJE1lc3NhZ2VzXCIsXG4gIFwiJE1pbk1hY2hpbmVOdW1iZXJcIixcbiAgXCIkTWluTnVtYmVyXCIsXG4gIFwiJE1pbm9yUmVsZWFzZU51bWJlclwiLFxuICBcIiRNaW5QcmVjaXNpb25cIixcbiAgXCIkTW9iaWxlUGhvbmVcIixcbiAgXCIkTW9kdWxlTnVtYmVyXCIsXG4gIFwiJE5ldHdvcmtDb25uZWN0ZWRcIixcbiAgXCIkTmV0d29ya0ludGVyZmFjZXNcIixcbiAgXCIkTmV0d29ya0xpY2Vuc2VcIixcbiAgXCIkTmV3TWVzc2FnZVwiLFxuICBcIiROZXdTeW1ib2xcIixcbiAgXCIkTm90ZWJvb2tJbmxpbmVTdG9yYWdlTGltaXRcIixcbiAgXCIkTm90ZWJvb2tzXCIsXG4gIFwiJE5vVmFsdWVcIixcbiAgXCIkTnVtYmVyTWFya3NcIixcbiAgXCIkT2ZmXCIsXG4gIFwiJE9wZXJhdGluZ1N5c3RlbVwiLFxuICBcIiRPdXRwdXRcIixcbiAgXCIkT3V0cHV0Rm9ybXNcIixcbiAgXCIkT3V0cHV0U2l6ZUxpbWl0XCIsXG4gIFwiJE91dHB1dFN0cmVhbU1ldGhvZHNcIixcbiAgXCIkUGFja2FnZXNcIixcbiAgXCIkUGFyZW50TGlua1wiLFxuICBcIiRQYXJlbnRQcm9jZXNzSURcIixcbiAgXCIkUGFzc3dvcmRGaWxlXCIsXG4gIFwiJFBhdGNoTGV2ZWxJRFwiLFxuICBcIiRQYXRoXCIsXG4gIFwiJFBhdGhuYW1lU2VwYXJhdG9yXCIsXG4gIFwiJFBlcmZvcm1hbmNlR29hbFwiLFxuICBcIiRQZXJtaXNzaW9uc1wiLFxuICBcIiRQZXJtaXNzaW9uc0dyb3VwQmFzZVwiLFxuICBcIiRQZXJzaXN0ZW5jZUJhc2VcIixcbiAgXCIkUGVyc2lzdGVuY2VQYXRoXCIsXG4gIFwiJFBpcGVTdXBwb3J0ZWRcIixcbiAgXCIkUGxvdFRoZW1lXCIsXG4gIFwiJFBvc3RcIixcbiAgXCIkUHJlXCIsXG4gIFwiJFByZWZlcmVuY2VzRGlyZWN0b3J5XCIsXG4gIFwiJFByZUluaXRpYWxpemF0aW9uXCIsXG4gIFwiJFByZVByaW50XCIsXG4gIFwiJFByZVJlYWRcIixcbiAgXCIkUHJpbnRGb3Jtc1wiLFxuICBcIiRQcmludExpdGVyYWxcIixcbiAgXCIkUHJpbnRvdXQzRFByZXZpZXdlclwiLFxuICBcIiRQcm9jZXNzSURcIixcbiAgXCIkUHJvY2Vzc29yQ291bnRcIixcbiAgXCIkUHJvY2Vzc29yVHlwZVwiLFxuICBcIiRQcm9kdWN0SW5mb3JtYXRpb25cIixcbiAgXCIkUHJvZ3JhbU5hbWVcIixcbiAgXCIkUHJvZ3Jlc3NSZXBvcnRpbmdcIixcbiAgXCIkUHVibGlzaGVySURcIixcbiAgXCIkUmFuZG9tR2VuZXJhdG9yU3RhdGVcIixcbiAgXCIkUmFuZG9tU3RhdGVcIixcbiAgXCIkUmVjdXJzaW9uTGltaXRcIixcbiAgXCIkUmVnaXN0ZXJlZERldmljZUNsYXNzZXNcIixcbiAgXCIkUmVnaXN0ZXJlZFVzZXJOYW1lXCIsXG4gIFwiJFJlbGVhc2VOdW1iZXJcIixcbiAgXCIkUmVxdWVzdGVyQWRkcmVzc1wiLFxuICBcIiRSZXF1ZXN0ZXJDbG91ZFVzZXJJRFwiLFxuICBcIiRSZXF1ZXN0ZXJDbG91ZFVzZXJVVUlEXCIsXG4gIFwiJFJlcXVlc3RlcldvbGZyYW1JRFwiLFxuICBcIiRSZXF1ZXN0ZXJXb2xmcmFtVVVJRFwiLFxuICBcIiRSZXNvdXJjZVN5c3RlbUJhc2VcIixcbiAgXCIkUmVzb3VyY2VTeXN0ZW1QYXRoXCIsXG4gIFwiJFJvb3REaXJlY3RvcnlcIixcbiAgXCIkU2NoZWR1bGVkVGFza1wiLFxuICBcIiRTY3JpcHRDb21tYW5kTGluZVwiLFxuICBcIiRTY3JpcHRJbnB1dFN0cmluZ1wiLFxuICBcIiRTZWN1cmVkQXV0aGVudGljYXRpb25LZXlUb2tlbnNcIixcbiAgXCIkU2VydmljZUNyZWRpdHNBdmFpbGFibGVcIixcbiAgXCIkU2VydmljZXNcIixcbiAgXCIkU2Vzc2lvbklEXCIsXG4gIFwiJFNldFBhcmVudExpbmtcIixcbiAgXCIkU2hhcmVkRnVuY3Rpb25zXCIsXG4gIFwiJFNoYXJlZFZhcmlhYmxlc1wiLFxuICBcIiRTb3VuZERpc3BsYXlcIixcbiAgXCIkU291bmREaXNwbGF5RnVuY3Rpb25cIixcbiAgXCIkU291cmNlTGlua1wiLFxuICBcIiRTU0hBdXRoZW50aWNhdGlvblwiLFxuICBcIiRTdWJ0aXRsZURlY29kZXJzXCIsXG4gIFwiJFN1YnRpdGxlRW5jb2RlcnNcIixcbiAgXCIkU3VtbWFyeUJveERhdGFTaXplTGltaXRcIixcbiAgXCIkU3VwcHJlc3NJbnB1dEZvcm1IZWFkc1wiLFxuICBcIiRTeW5jaHJvbm91c0V2YWx1YXRpb25cIixcbiAgXCIkU3ludGF4SGFuZGxlclwiLFxuICBcIiRTeXN0ZW1cIixcbiAgXCIkU3lzdGVtQ2hhcmFjdGVyRW5jb2RpbmdcIixcbiAgXCIkU3lzdGVtQ3JlZGVudGlhbFN0b3JlXCIsXG4gIFwiJFN5c3RlbUlEXCIsXG4gIFwiJFN5c3RlbU1lbW9yeVwiLFxuICBcIiRTeXN0ZW1TaGVsbFwiLFxuICBcIiRTeXN0ZW1UaW1lWm9uZVwiLFxuICBcIiRTeXN0ZW1Xb3JkTGVuZ3RoXCIsXG4gIFwiJFRhcmdldFN5c3RlbXNcIixcbiAgXCIkVGVtcGxhdGVQYXRoXCIsXG4gIFwiJFRlbXBvcmFyeURpcmVjdG9yeVwiLFxuICBcIiRUZW1wb3JhcnlQcmVmaXhcIixcbiAgXCIkVGVzdEZpbGVOYW1lXCIsXG4gIFwiJFRleHRTdHlsZVwiLFxuICBcIiRUaW1lZE91dFwiLFxuICBcIiRUaW1lVW5pdFwiLFxuICBcIiRUaW1lWm9uZVwiLFxuICBcIiRUaW1lWm9uZUVudGl0eVwiLFxuICBcIiRUb3BEaXJlY3RvcnlcIixcbiAgXCIkVHJhY2VPZmZcIixcbiAgXCIkVHJhY2VPblwiLFxuICBcIiRUcmFjZVBhdHRlcm5cIixcbiAgXCIkVHJhY2VQb3N0QWN0aW9uXCIsXG4gIFwiJFRyYWNlUHJlQWN0aW9uXCIsXG4gIFwiJFVuaXRTeXN0ZW1cIixcbiAgXCIkVXJnZW50XCIsXG4gIFwiJFVzZXJBZGRPbnNEaXJlY3RvcnlcIixcbiAgXCIkVXNlckFnZW50TGFuZ3VhZ2VzXCIsXG4gIFwiJFVzZXJBZ2VudE1hY2hpbmVcIixcbiAgXCIkVXNlckFnZW50TmFtZVwiLFxuICBcIiRVc2VyQWdlbnRPcGVyYXRpbmdTeXN0ZW1cIixcbiAgXCIkVXNlckFnZW50U3RyaW5nXCIsXG4gIFwiJFVzZXJBZ2VudFZlcnNpb25cIixcbiAgXCIkVXNlckJhc2VEaXJlY3RvcnlcIixcbiAgXCIkVXNlckJhc2VQYWNsZXRzRGlyZWN0b3J5XCIsXG4gIFwiJFVzZXJEb2N1bWVudHNEaXJlY3RvcnlcIixcbiAgXCIkVXNlcm5hbWVcIixcbiAgXCIkVXNlck5hbWVcIixcbiAgXCIkVXNlclVSTEJhc2VcIixcbiAgXCIkVmVyc2lvblwiLFxuICBcIiRWZXJzaW9uTnVtYmVyXCIsXG4gIFwiJFZpZGVvRGVjb2RlcnNcIixcbiAgXCIkVmlkZW9FbmNvZGVyc1wiLFxuICBcIiRWb2ljZVN0eWxlc1wiLFxuICBcIiRXb2xmcmFtRG9jdW1lbnRzRGlyZWN0b3J5XCIsXG4gIFwiJFdvbGZyYW1JRFwiLFxuICBcIiRXb2xmcmFtVVVJRFwiXG5dO1xuXG4vKlxuTGFuZ3VhZ2U6IFdvbGZyYW0gTGFuZ3VhZ2VcbkRlc2NyaXB0aW9uOiBUaGUgV29sZnJhbSBMYW5ndWFnZSBpcyB0aGUgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UgdXNlZCBpbiBXb2xmcmFtIE1hdGhlbWF0aWNhLCBhIG1vZGVybiB0ZWNobmljYWwgY29tcHV0aW5nIHN5c3RlbSBzcGFubmluZyBtb3N0IGFyZWFzIG9mIHRlY2huaWNhbCBjb21wdXRpbmcuXG5BdXRob3JzOiBQYXRyaWNrIFNjaGVpYmUgPHBhdHJpY2tAaGFsaXJ1dGFuLmRlPiwgUm9iZXJ0IEphY29ic29uIDxyb2JlcnRqYWNvYnNvbkBhY20ub3JnPlxuV2Vic2l0ZTogaHR0cHM6Ly93d3cud29sZnJhbS5jb20vbWF0aGVtYXRpY2EvXG5DYXRlZ29yeTogc2NpZW50aWZpY1xuKi9cblxuXG4vKiogQHR5cGUgTGFuZ3VhZ2VGbiAqL1xuZnVuY3Rpb24gbWF0aGVtYXRpY2EoaGxqcykge1xuICBjb25zdCByZWdleCA9IGhsanMucmVnZXg7XG4gIC8qXG4gIFRoaXMgcmF0aGVyIHNjYXJ5IGxvb2tpbmcgbWF0Y2hpbmcgb2YgTWF0aGVtYXRpY2EgbnVtYmVycyBpcyBjYXJlZnVsbHkgZXhwbGFpbmVkIGJ5IFJvYmVydCBKYWNvYnNvbiBoZXJlOlxuICBodHRwczovL3dsdG9vbHMuZ2l0aHViLmlvL0xhbmd1YWdlU3BlYy9TcGVjaWZpY2F0aW9uL1N5bnRheC9OdW1iZXItcmVwcmVzZW50YXRpb25zL1xuICAgKi9cbiAgY29uc3QgQkFTRV9SRSA9IC8oWzItOV18WzEtMl1cXGR8WzNdWzAtNV0pXFxeXFxeLztcbiAgY29uc3QgQkFTRV9ESUdJVFNfUkUgPSAvKFxcdypcXC5cXHcrfFxcdytcXC5cXHcqfFxcdyspLztcbiAgY29uc3QgTlVNQkVSX1JFID0gLyhcXGQqXFwuXFxkK3xcXGQrXFwuXFxkKnxcXGQrKS87XG4gIGNvbnN0IEJBU0VfTlVNQkVSX1JFID0gcmVnZXguZWl0aGVyKHJlZ2V4LmNvbmNhdChCQVNFX1JFLCBCQVNFX0RJR0lUU19SRSksIE5VTUJFUl9SRSk7XG5cbiAgY29uc3QgQUNDVVJBQ1lfUkUgPSAvYGBbKy1dPyhcXGQqXFwuXFxkK3xcXGQrXFwuXFxkKnxcXGQrKS87XG4gIGNvbnN0IFBSRUNJU0lPTl9SRSA9IC9gKFsrLV0/KFxcZCpcXC5cXGQrfFxcZCtcXC5cXGQqfFxcZCspKT8vO1xuICBjb25zdCBBUFBST1hJTUFURV9OVU1CRVJfUkUgPSByZWdleC5laXRoZXIoQUNDVVJBQ1lfUkUsIFBSRUNJU0lPTl9SRSk7XG5cbiAgY29uc3QgU0NJRU5USUZJQ19OT1RBVElPTl9SRSA9IC9cXCpcXF5bKy1dP1xcZCsvO1xuXG4gIGNvbnN0IE1BVEhFTUFUSUNBX05VTUJFUl9SRSA9IHJlZ2V4LmNvbmNhdChcbiAgICBCQVNFX05VTUJFUl9SRSxcbiAgICByZWdleC5vcHRpb25hbChBUFBST1hJTUFURV9OVU1CRVJfUkUpLFxuICAgIHJlZ2V4Lm9wdGlvbmFsKFNDSUVOVElGSUNfTk9UQVRJT05fUkUpXG4gICk7XG5cbiAgY29uc3QgTlVNQkVSUyA9IHtcbiAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgIHJlbGV2YW5jZTogMCxcbiAgICBiZWdpbjogTUFUSEVNQVRJQ0FfTlVNQkVSX1JFXG4gIH07XG5cbiAgY29uc3QgU1lNQk9MX1JFID0gL1thLXpBLVokXVthLXpBLVowLTkkXSovO1xuICBjb25zdCBTWVNURU1fU1lNQk9MU19TRVQgPSBuZXcgU2V0KFNZU1RFTV9TWU1CT0xTKTtcbiAgLyoqIEB0eXBlIHtNb2RlfSAqL1xuICBjb25zdCBTWU1CT0xTID0geyB2YXJpYW50czogW1xuICAgIHtcbiAgICAgIGNsYXNzTmFtZTogJ2J1aWx0aW4tc3ltYm9sJyxcbiAgICAgIGJlZ2luOiBTWU1CT0xfUkUsXG4gICAgICAvLyBmb3IgcGVyZm9ybWFuY2Ugb3V0IG9mIGZlYXIgb2YgcmVnZXguZWl0aGVyKC4uLk1hdGhlbWF0aWNhLlNZU1RFTV9TWU1CT0xTKVxuICAgICAgXCJvbjpiZWdpblwiOiAobWF0Y2gsIHJlc3BvbnNlKSA9PiB7XG4gICAgICAgIGlmICghU1lTVEVNX1NZTUJPTFNfU0VULmhhcyhtYXRjaFswXSkpIHJlc3BvbnNlLmlnbm9yZU1hdGNoKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBjbGFzc05hbWU6ICdzeW1ib2wnLFxuICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgYmVnaW46IFNZTUJPTF9SRVxuICAgIH1cbiAgXSB9O1xuXG4gIGNvbnN0IE5BTUVEX0NIQVJBQ1RFUiA9IHtcbiAgICBjbGFzc05hbWU6ICduYW1lZC1jaGFyYWN0ZXInLFxuICAgIGJlZ2luOiAvXFxcXFxcW1skYS16QS1aXVskYS16QS1aMC05XStcXF0vXG4gIH07XG5cbiAgY29uc3QgT1BFUkFUT1JTID0ge1xuICAgIGNsYXNzTmFtZTogJ29wZXJhdG9yJyxcbiAgICByZWxldmFuY2U6IDAsXG4gICAgYmVnaW46IC9bK1xcLSovLDsuOkB+PT48JnxfYCdePyElXSsvXG4gIH07XG4gIGNvbnN0IFBBVFRFUk5TID0ge1xuICAgIGNsYXNzTmFtZTogJ3BhdHRlcm4nLFxuICAgIHJlbGV2YW5jZTogMCxcbiAgICBiZWdpbjogLyhbYS16QS1aJF1bYS16QS1aMC05JF0qKT9fKyhbYS16QS1aJF1bYS16QS1aMC05JF0qKT8vXG4gIH07XG5cbiAgY29uc3QgU0xPVFMgPSB7XG4gICAgY2xhc3NOYW1lOiAnc2xvdCcsXG4gICAgcmVsZXZhbmNlOiAwLFxuICAgIGJlZ2luOiAvI1thLXpBLVokXVthLXpBLVowLTkkXSp8IytbMC05XT8vXG4gIH07XG5cbiAgY29uc3QgQlJBQ0VTID0ge1xuICAgIGNsYXNzTmFtZTogJ2JyYWNlJyxcbiAgICByZWxldmFuY2U6IDAsXG4gICAgYmVnaW46IC9bW1xcXSgpe31dL1xuICB9O1xuXG4gIGNvbnN0IE1FU1NBR0VTID0ge1xuICAgIGNsYXNzTmFtZTogJ21lc3NhZ2UtbmFtZScsXG4gICAgcmVsZXZhbmNlOiAwLFxuICAgIGJlZ2luOiByZWdleC5jb25jYXQoXCI6OlwiLCBTWU1CT0xfUkUpXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnTWF0aGVtYXRpY2EnLFxuICAgIGFsaWFzZXM6IFtcbiAgICAgICdtbWEnLFxuICAgICAgJ3dsJ1xuICAgIF0sXG4gICAgY2xhc3NOYW1lQWxpYXNlczoge1xuICAgICAgYnJhY2U6ICdwdW5jdHVhdGlvbicsXG4gICAgICBwYXR0ZXJuOiAndHlwZScsXG4gICAgICBzbG90OiAndHlwZScsXG4gICAgICBzeW1ib2w6ICd2YXJpYWJsZScsXG4gICAgICAnbmFtZWQtY2hhcmFjdGVyJzogJ3ZhcmlhYmxlJyxcbiAgICAgICdidWlsdGluLXN5bWJvbCc6ICdidWlsdF9pbicsXG4gICAgICAnbWVzc2FnZS1uYW1lJzogJ3N0cmluZydcbiAgICB9LFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkNPTU1FTlQoL1xcKFxcKi8sIC9cXCpcXCkvLCB7IGNvbnRhaW5zOiBbICdzZWxmJyBdIH0pLFxuICAgICAgUEFUVEVSTlMsXG4gICAgICBTTE9UUyxcbiAgICAgIE1FU1NBR0VTLFxuICAgICAgU1lNQk9MUyxcbiAgICAgIE5BTUVEX0NIQVJBQ1RFUixcbiAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICBOVU1CRVJTLFxuICAgICAgT1BFUkFUT1JTLFxuICAgICAgQlJBQ0VTXG4gICAgXVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hdGhlbWF0aWNhO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///201\n')},247:module=>{eval("/*\nLanguage: HAML\nRequires: ruby.js\nAuthor: Dan Allen \nWebsite: http://haml.info\nCategory: template\n*/\n\n// TODO support filter tags like :javascript, support inline HTML\nfunction haml(hljs) {\n return {\n name: 'HAML',\n case_insensitive: true,\n contains: [\n {\n className: 'meta',\n begin: '^!!!( (5|1\\\\.1|Strict|Frameset|Basic|Mobile|RDFa|XML\\\\b.*))?$',\n relevance: 10\n },\n // FIXME these comments should be allowed to span indented lines\n hljs.COMMENT(\n '^\\\\s*(!=#|=#|-#|/).*$',\n null,\n { relevance: 0 }\n ),\n {\n begin: '^\\\\s*(-|=|!=)(?!#)',\n end: /$/,\n subLanguage: 'ruby',\n excludeBegin: true,\n excludeEnd: true\n },\n {\n className: 'tag',\n begin: '^\\\\s*%',\n contains: [\n {\n className: 'selector-tag',\n begin: '\\\\w+'\n },\n {\n className: 'selector-id',\n begin: '#[\\\\w-]+'\n },\n {\n className: 'selector-class',\n begin: '\\\\.[\\\\w-]+'\n },\n {\n begin: /\\{\\s*/,\n end: /\\s*\\}/,\n contains: [\n {\n begin: ':\\\\w+\\\\s*=>',\n end: ',\\\\s+',\n returnBegin: true,\n endsWithParent: true,\n contains: [\n {\n className: 'attr',\n begin: ':\\\\w+'\n },\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE,\n {\n begin: '\\\\w+',\n relevance: 0\n }\n ]\n }\n ]\n },\n {\n begin: '\\\\(\\\\s*',\n end: '\\\\s*\\\\)',\n excludeEnd: true,\n contains: [\n {\n begin: '\\\\w+\\\\s*=',\n end: '\\\\s+',\n returnBegin: true,\n endsWithParent: true,\n contains: [\n {\n className: 'attr',\n begin: '\\\\w+',\n relevance: 0\n },\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE,\n {\n begin: '\\\\w+',\n relevance: 0\n }\n ]\n }\n ]\n }\n ]\n },\n { begin: '^\\\\s*[=~]\\\\s*' },\n {\n begin: /#\\{/,\n end: /\\}/,\n subLanguage: 'ruby',\n excludeBegin: true,\n excludeEnd: true\n }\n ]\n };\n}\n\nmodule.exports = haml;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjQ3LmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQSxzQkFBc0I7QUFDdEIsdUJBQXVCO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxRQUFRLHdCQUF3QjtBQUNoQztBQUNBLG1CQUFtQjtBQUNuQixnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9vYnNpZGlhbi1taW5kbWFwLW5leHRnZW4vLi9ub2RlX21vZHVsZXMvLnBucG0vaGlnaGxpZ2h0LmpzQDExLjExLjEvbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2hhbWwuanM/ZjIzNSJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuTGFuZ3VhZ2U6IEhBTUxcblJlcXVpcmVzOiBydWJ5LmpzXG5BdXRob3I6IERhbiBBbGxlbiA8ZGFuLmouYWxsZW5AZ21haWwuY29tPlxuV2Vic2l0ZTogaHR0cDovL2hhbWwuaW5mb1xuQ2F0ZWdvcnk6IHRlbXBsYXRlXG4qL1xuXG4vLyBUT0RPIHN1cHBvcnQgZmlsdGVyIHRhZ3MgbGlrZSA6amF2YXNjcmlwdCwgc3VwcG9ydCBpbmxpbmUgSFRNTFxuZnVuY3Rpb24gaGFtbChobGpzKSB7XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ0hBTUwnLFxuICAgIGNhc2VfaW5zZW5zaXRpdmU6IHRydWUsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgICAgIGJlZ2luOiAnXiEhISggKDV8MVxcXFwuMXxTdHJpY3R8RnJhbWVzZXR8QmFzaWN8TW9iaWxlfFJERmF8WE1MXFxcXGIuKikpPyQnLFxuICAgICAgICByZWxldmFuY2U6IDEwXG4gICAgICB9LFxuICAgICAgLy8gRklYTUUgdGhlc2UgY29tbWVudHMgc2hvdWxkIGJlIGFsbG93ZWQgdG8gc3BhbiBpbmRlbnRlZCBsaW5lc1xuICAgICAgaGxqcy5DT01NRU5UKFxuICAgICAgICAnXlxcXFxzKighPSN8PSN8LSN8LykuKiQnLFxuICAgICAgICBudWxsLFxuICAgICAgICB7IHJlbGV2YW5jZTogMCB9XG4gICAgICApLFxuICAgICAge1xuICAgICAgICBiZWdpbjogJ15cXFxccyooLXw9fCE9KSg/ISMpJyxcbiAgICAgICAgZW5kOiAvJC8sXG4gICAgICAgIHN1Ykxhbmd1YWdlOiAncnVieScsXG4gICAgICAgIGV4Y2x1ZGVCZWdpbjogdHJ1ZSxcbiAgICAgICAgZXhjbHVkZUVuZDogdHJ1ZVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAndGFnJyxcbiAgICAgICAgYmVnaW46ICdeXFxcXHMqJScsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAnc2VsZWN0b3ItdGFnJyxcbiAgICAgICAgICAgIGJlZ2luOiAnXFxcXHcrJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAnc2VsZWN0b3ItaWQnLFxuICAgICAgICAgICAgYmVnaW46ICcjW1xcXFx3LV0rJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAnc2VsZWN0b3ItY2xhc3MnLFxuICAgICAgICAgICAgYmVnaW46ICdcXFxcLltcXFxcdy1dKydcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiAvXFx7XFxzKi8sXG4gICAgICAgICAgICBlbmQ6IC9cXHMqXFx9LyxcbiAgICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBiZWdpbjogJzpcXFxcdytcXFxccyo9PicsXG4gICAgICAgICAgICAgICAgZW5kOiAnLFxcXFxzKycsXG4gICAgICAgICAgICAgICAgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgICAgICAgICAgICAgZW5kc1dpdGhQYXJlbnQ6IHRydWUsXG4gICAgICAgICAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnYXR0cicsXG4gICAgICAgICAgICAgICAgICAgIGJlZ2luOiAnOlxcXFx3KydcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBobGpzLkFQT1NfU1RSSU5HX01PREUsXG4gICAgICAgICAgICAgICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBiZWdpbjogJ1xcXFx3KycsXG4gICAgICAgICAgICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46ICdcXFxcKFxcXFxzKicsXG4gICAgICAgICAgICBlbmQ6ICdcXFxccypcXFxcKScsXG4gICAgICAgICAgICBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJlZ2luOiAnXFxcXHcrXFxcXHMqPScsXG4gICAgICAgICAgICAgICAgZW5kOiAnXFxcXHMrJyxcbiAgICAgICAgICAgICAgICByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICAgICAgICAgICAgICBlbmRzV2l0aFBhcmVudDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdhdHRyJyxcbiAgICAgICAgICAgICAgICAgICAgYmVnaW46ICdcXFxcdysnLFxuICAgICAgICAgICAgICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBobGpzLkFQT1NfU1RSSU5HX01PREUsXG4gICAgICAgICAgICAgICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBiZWdpbjogJ1xcXFx3KycsXG4gICAgICAgICAgICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHsgYmVnaW46ICdeXFxcXHMqWz1+XVxcXFxzKicgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC8jXFx7LyxcbiAgICAgICAgZW5kOiAvXFx9LyxcbiAgICAgICAgc3ViTGFuZ3VhZ2U6ICdydWJ5JyxcbiAgICAgICAgZXhjbHVkZUJlZ2luOiB0cnVlLFxuICAgICAgICBleGNsdWRlRW5kOiB0cnVlXG4gICAgICB9XG4gICAgXVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhbWw7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///247\n")},258:module=>{eval("/*\nLanguage: Prolog\nDescription: Prolog is a general purpose logic programming language associated with artificial intelligence and computational linguistics.\nAuthor: Raivo Laanemets \nWebsite: https://en.wikipedia.org/wiki/Prolog\nCategory: functional\n*/\n\nfunction prolog(hljs) {\n const ATOM = {\n\n begin: /[a-z][A-Za-z0-9_]*/,\n relevance: 0\n };\n\n const VAR = {\n\n className: 'symbol',\n variants: [\n { begin: /[A-Z][a-zA-Z0-9_]*/ },\n { begin: /_[A-Za-z0-9_]*/ }\n ],\n relevance: 0\n };\n\n const PARENTED = {\n\n begin: /\\(/,\n end: /\\)/,\n relevance: 0\n };\n\n const LIST = {\n\n begin: /\\[/,\n end: /\\]/\n };\n\n const LINE_COMMENT = {\n\n className: 'comment',\n begin: /%/,\n end: /$/,\n contains: [ hljs.PHRASAL_WORDS_MODE ]\n };\n\n const BACKTICK_STRING = {\n\n className: 'string',\n begin: /`/,\n end: /`/,\n contains: [ hljs.BACKSLASH_ESCAPE ]\n };\n\n const CHAR_CODE = {\n className: 'string', // 0'a etc.\n begin: /0'(\\\\'|.)/\n };\n\n const SPACE_CODE = {\n className: 'string',\n begin: /0'\\\\s/ // 0'\\s\n };\n\n const PRED_OP = { // relevance booster\n begin: /:-/ };\n\n const inner = [\n\n ATOM,\n VAR,\n PARENTED,\n PRED_OP,\n LIST,\n LINE_COMMENT,\n hljs.C_BLOCK_COMMENT_MODE,\n hljs.QUOTE_STRING_MODE,\n hljs.APOS_STRING_MODE,\n BACKTICK_STRING,\n CHAR_CODE,\n SPACE_CODE,\n hljs.C_NUMBER_MODE\n ];\n\n PARENTED.contains = inner;\n LIST.contains = inner;\n\n return {\n name: 'Prolog',\n contains: inner.concat([\n { // relevance booster\n begin: /\\.$/ }\n ])\n };\n}\n\nmodule.exports = prolog;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjU4LmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxRQUFRLDZCQUE2QjtBQUNyQyxRQUFRO0FBQ1I7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsb0JBQW9CO0FBQ3BCOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9vYnNpZGlhbi1taW5kbWFwLW5leHRnZW4vLi9ub2RlX21vZHVsZXMvLnBucG0vaGlnaGxpZ2h0LmpzQDExLjExLjEvbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3Byb2xvZy5qcz83MGM3Il0sInNvdXJjZXNDb250ZW50IjpbIi8qXG5MYW5ndWFnZTogUHJvbG9nXG5EZXNjcmlwdGlvbjogUHJvbG9nIGlzIGEgZ2VuZXJhbCBwdXJwb3NlIGxvZ2ljIHByb2dyYW1taW5nIGxhbmd1YWdlIGFzc29jaWF0ZWQgd2l0aCBhcnRpZmljaWFsIGludGVsbGlnZW5jZSBhbmQgY29tcHV0YXRpb25hbCBsaW5ndWlzdGljcy5cbkF1dGhvcjogUmFpdm8gTGFhbmVtZXRzIDxyYWl2b0BpbmZkb3QuY29tPlxuV2Vic2l0ZTogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUHJvbG9nXG5DYXRlZ29yeTogZnVuY3Rpb25hbFxuKi9cblxuZnVuY3Rpb24gcHJvbG9nKGhsanMpIHtcbiAgY29uc3QgQVRPTSA9IHtcblxuICAgIGJlZ2luOiAvW2Etel1bQS1aYS16MC05X10qLyxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcblxuICBjb25zdCBWQVIgPSB7XG5cbiAgICBjbGFzc05hbWU6ICdzeW1ib2wnLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7IGJlZ2luOiAvW0EtWl1bYS16QS1aMC05X10qLyB9LFxuICAgICAgeyBiZWdpbjogL19bQS1aYS16MC05X10qLyB9XG4gICAgXSxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcblxuICBjb25zdCBQQVJFTlRFRCA9IHtcblxuICAgIGJlZ2luOiAvXFwoLyxcbiAgICBlbmQ6IC9cXCkvLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuXG4gIGNvbnN0IExJU1QgPSB7XG5cbiAgICBiZWdpbjogL1xcWy8sXG4gICAgZW5kOiAvXFxdL1xuICB9O1xuXG4gIGNvbnN0IExJTkVfQ09NTUVOVCA9IHtcblxuICAgIGNsYXNzTmFtZTogJ2NvbW1lbnQnLFxuICAgIGJlZ2luOiAvJS8sXG4gICAgZW5kOiAvJC8sXG4gICAgY29udGFpbnM6IFsgaGxqcy5QSFJBU0FMX1dPUkRTX01PREUgXVxuICB9O1xuXG4gIGNvbnN0IEJBQ0tUSUNLX1NUUklORyA9IHtcblxuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgYmVnaW46IC9gLyxcbiAgICBlbmQ6IC9gLyxcbiAgICBjb250YWluczogWyBobGpzLkJBQ0tTTEFTSF9FU0NBUEUgXVxuICB9O1xuXG4gIGNvbnN0IENIQVJfQ09ERSA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLCAvLyAwJ2EgZXRjLlxuICAgIGJlZ2luOiAvMCcoXFxcXCd8LikvXG4gIH07XG5cbiAgY29uc3QgU1BBQ0VfQ09ERSA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIGJlZ2luOiAvMCdcXFxccy8gLy8gMCdcXHNcbiAgfTtcblxuICBjb25zdCBQUkVEX09QID0geyAvLyByZWxldmFuY2UgYm9vc3RlclxuICAgIGJlZ2luOiAvOi0vIH07XG5cbiAgY29uc3QgaW5uZXIgPSBbXG5cbiAgICBBVE9NLFxuICAgIFZBUixcbiAgICBQQVJFTlRFRCxcbiAgICBQUkVEX09QLFxuICAgIExJU1QsXG4gICAgTElORV9DT01NRU5ULFxuICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICBobGpzLkFQT1NfU1RSSU5HX01PREUsXG4gICAgQkFDS1RJQ0tfU1RSSU5HLFxuICAgIENIQVJfQ09ERSxcbiAgICBTUEFDRV9DT0RFLFxuICAgIGhsanMuQ19OVU1CRVJfTU9ERVxuICBdO1xuXG4gIFBBUkVOVEVELmNvbnRhaW5zID0gaW5uZXI7XG4gIExJU1QuY29udGFpbnMgPSBpbm5lcjtcblxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdQcm9sb2cnLFxuICAgIGNvbnRhaW5zOiBpbm5lci5jb25jYXQoW1xuICAgICAgeyAvLyByZWxldmFuY2UgYm9vc3RlclxuICAgICAgICBiZWdpbjogL1xcLiQvIH1cbiAgICBdKVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHByb2xvZztcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///258\n")},272:module=>{eval("/*\nLanguage: PowerShell\nDescription: PowerShell is a task-based command-line shell and scripting language built on .NET.\nAuthor: David Mohundro \nContributors: Nicholas Blumhardt , Victor Zhou , Nicolas Le Gall \nWebsite: https://docs.microsoft.com/en-us/powershell/\nCategory: scripting\n*/\n\nfunction powershell(hljs) {\n const TYPES = [\n \"string\",\n \"char\",\n \"byte\",\n \"int\",\n \"long\",\n \"bool\",\n \"decimal\",\n \"single\",\n \"double\",\n \"DateTime\",\n \"xml\",\n \"array\",\n \"hashtable\",\n \"void\"\n ];\n\n // https://docs.microsoft.com/en-us/powershell/scripting/developer/cmdlet/approved-verbs-for-windows-powershell-commands\n const VALID_VERBS =\n 'Add|Clear|Close|Copy|Enter|Exit|Find|Format|Get|Hide|Join|Lock|'\n + 'Move|New|Open|Optimize|Pop|Push|Redo|Remove|Rename|Reset|Resize|'\n + 'Search|Select|Set|Show|Skip|Split|Step|Switch|Undo|Unlock|'\n + 'Watch|Backup|Checkpoint|Compare|Compress|Convert|ConvertFrom|'\n + 'ConvertTo|Dismount|Edit|Expand|Export|Group|Import|Initialize|'\n + 'Limit|Merge|Mount|Out|Publish|Restore|Save|Sync|Unpublish|Update|'\n + 'Approve|Assert|Build|Complete|Confirm|Deny|Deploy|Disable|Enable|Install|Invoke|'\n + 'Register|Request|Restart|Resume|Start|Stop|Submit|Suspend|Uninstall|'\n + 'Unregister|Wait|Debug|Measure|Ping|Repair|Resolve|Test|Trace|Connect|'\n + 'Disconnect|Read|Receive|Send|Write|Block|Grant|Protect|Revoke|Unblock|'\n + 'Unprotect|Use|ForEach|Sort|Tee|Where';\n\n const COMPARISON_OPERATORS =\n '-and|-as|-band|-bnot|-bor|-bxor|-casesensitive|-ccontains|-ceq|-cge|-cgt|'\n + '-cle|-clike|-clt|-cmatch|-cne|-cnotcontains|-cnotlike|-cnotmatch|-contains|'\n + '-creplace|-csplit|-eq|-exact|-f|-file|-ge|-gt|-icontains|-ieq|-ige|-igt|'\n + '-ile|-ilike|-ilt|-imatch|-in|-ine|-inotcontains|-inotlike|-inotmatch|'\n + '-ireplace|-is|-isnot|-isplit|-join|-le|-like|-lt|-match|-ne|-not|'\n + '-notcontains|-notin|-notlike|-notmatch|-or|-regex|-replace|-shl|-shr|'\n + '-split|-wildcard|-xor';\n\n const KEYWORDS = {\n $pattern: /-?[A-z\\.\\-]+\\b/,\n keyword:\n 'if else foreach return do while until elseif begin for trap data dynamicparam '\n + 'end break throw param continue finally in switch exit filter try process catch '\n + 'hidden static parameter',\n // \"echo\" relevance has been set to 0 to avoid auto-detect conflicts with shell transcripts\n built_in:\n 'ac asnp cat cd CFS chdir clc clear clhy cli clp cls clv cnsn compare copy cp '\n + 'cpi cpp curl cvpa dbp del diff dir dnsn ebp echo|0 epal epcsv epsn erase etsn exsn fc fhx '\n + 'fl ft fw gal gbp gc gcb gci gcm gcs gdr gerr ghy gi gin gjb gl gm gmo gp gps gpv group '\n + 'gsn gsnp gsv gtz gu gv gwmi h history icm iex ihy ii ipal ipcsv ipmo ipsn irm ise iwmi '\n + 'iwr kill lp ls man md measure mi mount move mp mv nal ndr ni nmo npssc nsn nv ogv oh '\n + 'popd ps pushd pwd r rbp rcjb rcsn rd rdr ren ri rjb rm rmdir rmo rni rnp rp rsn rsnp '\n + 'rujb rv rvpa rwmi sajb sal saps sasv sbp sc scb select set shcm si sl sleep sls sort sp '\n + 'spjb spps spsv start stz sujb sv swmi tee trcm type wget where wjb write'\n // TODO: 'validate[A-Z]+' can't work in keywords\n };\n\n const TITLE_NAME_RE = /\\w[\\w\\d]*((-)[\\w\\d]+)*/;\n\n const BACKTICK_ESCAPE = {\n begin: '`[\\\\s\\\\S]',\n relevance: 0\n };\n\n const VAR = {\n className: 'variable',\n variants: [\n { begin: /\\$\\B/ },\n {\n className: 'keyword',\n begin: /\\$this/\n },\n { begin: /\\$[\\w\\d][\\w\\d_:]*/ }\n ]\n };\n\n const LITERAL = {\n className: 'literal',\n begin: /\\$(null|true|false)\\b/\n };\n\n const QUOTE_STRING = {\n className: \"string\",\n variants: [\n {\n begin: /\"/,\n end: /\"/\n },\n {\n begin: /@\"/,\n end: /^\"@/\n }\n ],\n contains: [\n BACKTICK_ESCAPE,\n VAR,\n {\n className: 'variable',\n begin: /\\$[A-z]/,\n end: /[^A-z]/\n }\n ]\n };\n\n const APOS_STRING = {\n className: 'string',\n variants: [\n {\n begin: /'/,\n end: /'/\n },\n {\n begin: /@'/,\n end: /^'@/\n }\n ]\n };\n\n const PS_HELPTAGS = {\n className: \"doctag\",\n variants: [\n /* no paramater help tags */\n { begin: /\\.(synopsis|description|example|inputs|outputs|notes|link|component|role|functionality)/ },\n /* one parameter help tags */\n { begin: /\\.(parameter|forwardhelptargetname|forwardhelpcategory|remotehelprunspace|externalhelp)\\s+\\S+/ }\n ]\n };\n\n const PS_COMMENT = hljs.inherit(\n hljs.COMMENT(null, null),\n {\n variants: [\n /* single-line comment */\n {\n begin: /#/,\n end: /$/\n },\n /* multi-line comment */\n {\n begin: /<#/,\n end: /#>/\n }\n ],\n contains: [ PS_HELPTAGS ]\n }\n );\n\n const CMDLETS = {\n className: 'built_in',\n variants: [ { begin: '('.concat(VALID_VERBS, ')+(-)[\\\\w\\\\d]+') } ]\n };\n\n const PS_CLASS = {\n className: 'class',\n beginKeywords: 'class enum',\n end: /\\s*[{]/,\n excludeEnd: true,\n relevance: 0,\n contains: [ hljs.TITLE_MODE ]\n };\n\n const PS_FUNCTION = {\n className: 'function',\n begin: /function\\s+/,\n end: /\\s*\\{|$/,\n excludeEnd: true,\n returnBegin: true,\n relevance: 0,\n contains: [\n {\n begin: \"function\",\n relevance: 0,\n className: \"keyword\"\n },\n {\n className: \"title\",\n begin: TITLE_NAME_RE,\n relevance: 0\n },\n {\n begin: /\\(/,\n end: /\\)/,\n className: \"params\",\n relevance: 0,\n contains: [ VAR ]\n }\n // CMDLETS\n ]\n };\n\n // Using statment, plus type, plus assembly name.\n const PS_USING = {\n begin: /using\\s/,\n end: /$/,\n returnBegin: true,\n contains: [\n QUOTE_STRING,\n APOS_STRING,\n {\n className: 'keyword',\n begin: /(using|assembly|command|module|namespace|type)/\n }\n ]\n };\n\n // Comperison operators & function named parameters.\n const PS_ARGUMENTS = { variants: [\n // PS literals are pretty verbose so it's a good idea to accent them a bit.\n {\n className: 'operator',\n begin: '('.concat(COMPARISON_OPERATORS, ')\\\\b')\n },\n {\n className: 'literal',\n begin: /(-){1,2}[\\w\\d-]+/,\n relevance: 0\n }\n ] };\n\n const HASH_SIGNS = {\n className: 'selector-tag',\n begin: /@\\B/,\n relevance: 0\n };\n\n // It's a very general rule so I'll narrow it a bit with some strict boundaries\n // to avoid any possible false-positive collisions!\n const PS_METHODS = {\n className: 'function',\n begin: /\\[.*\\]\\s*[\\w]+[ ]??\\(/,\n end: /$/,\n returnBegin: true,\n relevance: 0,\n contains: [\n {\n className: 'keyword',\n begin: '('.concat(\n KEYWORDS.keyword.toString().replace(/\\s/g, '|'\n ), ')\\\\b'),\n endsParent: true,\n relevance: 0\n },\n hljs.inherit(hljs.TITLE_MODE, { endsParent: true })\n ]\n };\n\n const GENTLEMANS_SET = [\n // STATIC_MEMBER,\n PS_METHODS,\n PS_COMMENT,\n BACKTICK_ESCAPE,\n hljs.NUMBER_MODE,\n QUOTE_STRING,\n APOS_STRING,\n // PS_NEW_OBJECT_TYPE,\n CMDLETS,\n VAR,\n LITERAL,\n HASH_SIGNS\n ];\n\n const PS_TYPE = {\n begin: /\\[/,\n end: /\\]/,\n excludeBegin: true,\n excludeEnd: true,\n relevance: 0,\n contains: [].concat(\n 'self',\n GENTLEMANS_SET,\n {\n begin: \"(\" + TYPES.join(\"|\") + \")\",\n className: \"built_in\",\n relevance: 0\n },\n {\n className: 'type',\n begin: /[\\.\\w\\d]+/,\n relevance: 0\n }\n )\n };\n\n PS_METHODS.contains.unshift(PS_TYPE);\n\n return {\n name: 'PowerShell',\n aliases: [\n \"pwsh\",\n \"ps\",\n \"ps1\"\n ],\n case_insensitive: true,\n keywords: KEYWORDS,\n contains: GENTLEMANS_SET.concat(\n PS_CLASS,\n PS_FUNCTION,\n PS_USING,\n PS_ARGUMENTS,\n PS_TYPE\n )\n };\n}\n\nmodule.exports = powershell;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjcyLmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLGVBQWU7QUFDdkI7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLFFBQVE7QUFDUjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsa0dBQWtHO0FBQzFHO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGtCQUFrQixtREFBbUQ7QUFDckU7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLGtCQUFrQixJQUFJO0FBQ3RCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLHNDQUFzQyxrQkFBa0I7QUFDeEQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL29ic2lkaWFuLW1pbmRtYXAtbmV4dGdlbi8uL25vZGVfbW9kdWxlcy8ucG5wbS9oaWdobGlnaHQuanNAMTEuMTEuMS9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvcG93ZXJzaGVsbC5qcz8zNTcwIl0sInNvdXJjZXNDb250ZW50IjpbIi8qXG5MYW5ndWFnZTogUG93ZXJTaGVsbFxuRGVzY3JpcHRpb246IFBvd2VyU2hlbGwgaXMgYSB0YXNrLWJhc2VkIGNvbW1hbmQtbGluZSBzaGVsbCBhbmQgc2NyaXB0aW5nIGxhbmd1YWdlIGJ1aWx0IG9uIC5ORVQuXG5BdXRob3I6IERhdmlkIE1vaHVuZHJvIDxkYXZpZEBtb2h1bmRyby5jb20+XG5Db250cmlidXRvcnM6IE5pY2hvbGFzIEJsdW1oYXJkdCA8bmJsdW1oYXJkdEBuYmx1bWhhcmR0LmNvbT4sIFZpY3RvciBaaG91IDxPaUNNdWRraXBzQHVzZXJzLm5vcmVwbHkuZ2l0aHViLmNvbT4sIE5pY29sYXMgTGUgR2FsbCA8Y29udGFjdEBubGVnYWxsLmZyPlxuV2Vic2l0ZTogaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcG93ZXJzaGVsbC9cbkNhdGVnb3J5OiBzY3JpcHRpbmdcbiovXG5cbmZ1bmN0aW9uIHBvd2Vyc2hlbGwoaGxqcykge1xuICBjb25zdCBUWVBFUyA9IFtcbiAgICBcInN0cmluZ1wiLFxuICAgIFwiY2hhclwiLFxuICAgIFwiYnl0ZVwiLFxuICAgIFwiaW50XCIsXG4gICAgXCJsb25nXCIsXG4gICAgXCJib29sXCIsXG4gICAgXCJkZWNpbWFsXCIsXG4gICAgXCJzaW5nbGVcIixcbiAgICBcImRvdWJsZVwiLFxuICAgIFwiRGF0ZVRpbWVcIixcbiAgICBcInhtbFwiLFxuICAgIFwiYXJyYXlcIixcbiAgICBcImhhc2h0YWJsZVwiLFxuICAgIFwidm9pZFwiXG4gIF07XG5cbiAgLy8gaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcG93ZXJzaGVsbC9zY3JpcHRpbmcvZGV2ZWxvcGVyL2NtZGxldC9hcHByb3ZlZC12ZXJicy1mb3Itd2luZG93cy1wb3dlcnNoZWxsLWNvbW1hbmRzXG4gIGNvbnN0IFZBTElEX1ZFUkJTID1cbiAgICAnQWRkfENsZWFyfENsb3NlfENvcHl8RW50ZXJ8RXhpdHxGaW5kfEZvcm1hdHxHZXR8SGlkZXxKb2lufExvY2t8J1xuICAgICsgJ01vdmV8TmV3fE9wZW58T3B0aW1pemV8UG9wfFB1c2h8UmVkb3xSZW1vdmV8UmVuYW1lfFJlc2V0fFJlc2l6ZXwnXG4gICAgKyAnU2VhcmNofFNlbGVjdHxTZXR8U2hvd3xTa2lwfFNwbGl0fFN0ZXB8U3dpdGNofFVuZG98VW5sb2NrfCdcbiAgICArICdXYXRjaHxCYWNrdXB8Q2hlY2twb2ludHxDb21wYXJlfENvbXByZXNzfENvbnZlcnR8Q29udmVydEZyb218J1xuICAgICsgJ0NvbnZlcnRUb3xEaXNtb3VudHxFZGl0fEV4cGFuZHxFeHBvcnR8R3JvdXB8SW1wb3J0fEluaXRpYWxpemV8J1xuICAgICsgJ0xpbWl0fE1lcmdlfE1vdW50fE91dHxQdWJsaXNofFJlc3RvcmV8U2F2ZXxTeW5jfFVucHVibGlzaHxVcGRhdGV8J1xuICAgICsgJ0FwcHJvdmV8QXNzZXJ0fEJ1aWxkfENvbXBsZXRlfENvbmZpcm18RGVueXxEZXBsb3l8RGlzYWJsZXxFbmFibGV8SW5zdGFsbHxJbnZva2V8J1xuICAgICsgJ1JlZ2lzdGVyfFJlcXVlc3R8UmVzdGFydHxSZXN1bWV8U3RhcnR8U3RvcHxTdWJtaXR8U3VzcGVuZHxVbmluc3RhbGx8J1xuICAgICsgJ1VucmVnaXN0ZXJ8V2FpdHxEZWJ1Z3xNZWFzdXJlfFBpbmd8UmVwYWlyfFJlc29sdmV8VGVzdHxUcmFjZXxDb25uZWN0fCdcbiAgICArICdEaXNjb25uZWN0fFJlYWR8UmVjZWl2ZXxTZW5kfFdyaXRlfEJsb2NrfEdyYW50fFByb3RlY3R8UmV2b2tlfFVuYmxvY2t8J1xuICAgICsgJ1VucHJvdGVjdHxVc2V8Rm9yRWFjaHxTb3J0fFRlZXxXaGVyZSc7XG5cbiAgY29uc3QgQ09NUEFSSVNPTl9PUEVSQVRPUlMgPVxuICAgICctYW5kfC1hc3wtYmFuZHwtYm5vdHwtYm9yfC1ieG9yfC1jYXNlc2Vuc2l0aXZlfC1jY29udGFpbnN8LWNlcXwtY2dlfC1jZ3R8J1xuICAgICsgJy1jbGV8LWNsaWtlfC1jbHR8LWNtYXRjaHwtY25lfC1jbm90Y29udGFpbnN8LWNub3RsaWtlfC1jbm90bWF0Y2h8LWNvbnRhaW5zfCdcbiAgICArICctY3JlcGxhY2V8LWNzcGxpdHwtZXF8LWV4YWN0fC1mfC1maWxlfC1nZXwtZ3R8LWljb250YWluc3wtaWVxfC1pZ2V8LWlndHwnXG4gICAgKyAnLWlsZXwtaWxpa2V8LWlsdHwtaW1hdGNofC1pbnwtaW5lfC1pbm90Y29udGFpbnN8LWlub3RsaWtlfC1pbm90bWF0Y2h8J1xuICAgICsgJy1pcmVwbGFjZXwtaXN8LWlzbm90fC1pc3BsaXR8LWpvaW58LWxlfC1saWtlfC1sdHwtbWF0Y2h8LW5lfC1ub3R8J1xuICAgICsgJy1ub3Rjb250YWluc3wtbm90aW58LW5vdGxpa2V8LW5vdG1hdGNofC1vcnwtcmVnZXh8LXJlcGxhY2V8LXNobHwtc2hyfCdcbiAgICArICctc3BsaXR8LXdpbGRjYXJkfC14b3InO1xuXG4gIGNvbnN0IEtFWVdPUkRTID0ge1xuICAgICRwYXR0ZXJuOiAvLT9bQS16XFwuXFwtXStcXGIvLFxuICAgIGtleXdvcmQ6XG4gICAgICAnaWYgZWxzZSBmb3JlYWNoIHJldHVybiBkbyB3aGlsZSB1bnRpbCBlbHNlaWYgYmVnaW4gZm9yIHRyYXAgZGF0YSBkeW5hbWljcGFyYW0gJ1xuICAgICAgKyAnZW5kIGJyZWFrIHRocm93IHBhcmFtIGNvbnRpbnVlIGZpbmFsbHkgaW4gc3dpdGNoIGV4aXQgZmlsdGVyIHRyeSBwcm9jZXNzIGNhdGNoICdcbiAgICAgICsgJ2hpZGRlbiBzdGF0aWMgcGFyYW1ldGVyJyxcbiAgICAvLyBcImVjaG9cIiByZWxldmFuY2UgaGFzIGJlZW4gc2V0IHRvIDAgdG8gYXZvaWQgYXV0by1kZXRlY3QgY29uZmxpY3RzIHdpdGggc2hlbGwgdHJhbnNjcmlwdHNcbiAgICBidWlsdF9pbjpcbiAgICAgICdhYyBhc25wIGNhdCBjZCBDRlMgY2hkaXIgY2xjIGNsZWFyIGNsaHkgY2xpIGNscCBjbHMgY2x2IGNuc24gY29tcGFyZSBjb3B5IGNwICdcbiAgICAgICsgJ2NwaSBjcHAgY3VybCBjdnBhIGRicCBkZWwgZGlmZiBkaXIgZG5zbiBlYnAgZWNob3wwIGVwYWwgZXBjc3YgZXBzbiBlcmFzZSBldHNuIGV4c24gZmMgZmh4ICdcbiAgICAgICsgJ2ZsIGZ0IGZ3IGdhbCBnYnAgZ2MgZ2NiIGdjaSBnY20gZ2NzIGdkciBnZXJyIGdoeSBnaSBnaW4gZ2piIGdsIGdtIGdtbyBncCBncHMgZ3B2IGdyb3VwICdcbiAgICAgICsgJ2dzbiBnc25wIGdzdiBndHogZ3UgZ3YgZ3dtaSBoIGhpc3RvcnkgaWNtIGlleCBpaHkgaWkgaXBhbCBpcGNzdiBpcG1vIGlwc24gaXJtIGlzZSBpd21pICdcbiAgICAgICsgJ2l3ciBraWxsIGxwIGxzIG1hbiBtZCBtZWFzdXJlIG1pIG1vdW50IG1vdmUgbXAgbXYgbmFsIG5kciBuaSBubW8gbnBzc2MgbnNuIG52IG9ndiBvaCAnXG4gICAgICArICdwb3BkIHBzIHB1c2hkIHB3ZCByIHJicCByY2piIHJjc24gcmQgcmRyIHJlbiByaSByamIgcm0gcm1kaXIgcm1vIHJuaSBybnAgcnAgcnNuIHJzbnAgJ1xuICAgICAgKyAncnVqYiBydiBydnBhIHJ3bWkgc2FqYiBzYWwgc2FwcyBzYXN2IHNicCBzYyBzY2Igc2VsZWN0IHNldCBzaGNtIHNpIHNsIHNsZWVwIHNscyBzb3J0IHNwICdcbiAgICAgICsgJ3NwamIgc3BwcyBzcHN2IHN0YXJ0IHN0eiBzdWpiIHN2IHN3bWkgdGVlIHRyY20gdHlwZSB3Z2V0IHdoZXJlIHdqYiB3cml0ZSdcbiAgICAvLyBUT0RPOiAndmFsaWRhdGVbQS1aXSsnIGNhbid0IHdvcmsgaW4ga2V5d29yZHNcbiAgfTtcblxuICBjb25zdCBUSVRMRV9OQU1FX1JFID0gL1xcd1tcXHdcXGRdKigoLSlbXFx3XFxkXSspKi87XG5cbiAgY29uc3QgQkFDS1RJQ0tfRVNDQVBFID0ge1xuICAgIGJlZ2luOiAnYFtcXFxcc1xcXFxTXScsXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG5cbiAgY29uc3QgVkFSID0ge1xuICAgIGNsYXNzTmFtZTogJ3ZhcmlhYmxlJyxcbiAgICB2YXJpYW50czogW1xuICAgICAgeyBiZWdpbjogL1xcJFxcQi8gfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAna2V5d29yZCcsXG4gICAgICAgIGJlZ2luOiAvXFwkdGhpcy9cbiAgICAgIH0sXG4gICAgICB7IGJlZ2luOiAvXFwkW1xcd1xcZF1bXFx3XFxkXzpdKi8gfVxuICAgIF1cbiAgfTtcblxuICBjb25zdCBMSVRFUkFMID0ge1xuICAgIGNsYXNzTmFtZTogJ2xpdGVyYWwnLFxuICAgIGJlZ2luOiAvXFwkKG51bGx8dHJ1ZXxmYWxzZSlcXGIvXG4gIH07XG5cbiAgY29uc3QgUVVPVEVfU1RSSU5HID0ge1xuICAgIGNsYXNzTmFtZTogXCJzdHJpbmdcIixcbiAgICB2YXJpYW50czogW1xuICAgICAge1xuICAgICAgICBiZWdpbjogL1wiLyxcbiAgICAgICAgZW5kOiAvXCIvXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogL0BcIi8sXG4gICAgICAgIGVuZDogL15cIkAvXG4gICAgICB9XG4gICAgXSxcbiAgICBjb250YWluczogW1xuICAgICAgQkFDS1RJQ0tfRVNDQVBFLFxuICAgICAgVkFSLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICd2YXJpYWJsZScsXG4gICAgICAgIGJlZ2luOiAvXFwkW0Etel0vLFxuICAgICAgICBlbmQ6IC9bXkEtel0vXG4gICAgICB9XG4gICAgXVxuICB9O1xuXG4gIGNvbnN0IEFQT1NfU1RSSU5HID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC8nLyxcbiAgICAgICAgZW5kOiAvJy9cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvQCcvLFxuICAgICAgICBlbmQ6IC9eJ0AvXG4gICAgICB9XG4gICAgXVxuICB9O1xuXG4gIGNvbnN0IFBTX0hFTFBUQUdTID0ge1xuICAgIGNsYXNzTmFtZTogXCJkb2N0YWdcIixcbiAgICB2YXJpYW50czogW1xuICAgICAgLyogbm8gcGFyYW1hdGVyIGhlbHAgdGFncyAqL1xuICAgICAgeyBiZWdpbjogL1xcLihzeW5vcHNpc3xkZXNjcmlwdGlvbnxleGFtcGxlfGlucHV0c3xvdXRwdXRzfG5vdGVzfGxpbmt8Y29tcG9uZW50fHJvbGV8ZnVuY3Rpb25hbGl0eSkvIH0sXG4gICAgICAvKiBvbmUgcGFyYW1ldGVyIGhlbHAgdGFncyAqL1xuICAgICAgeyBiZWdpbjogL1xcLihwYXJhbWV0ZXJ8Zm9yd2FyZGhlbHB0YXJnZXRuYW1lfGZvcndhcmRoZWxwY2F0ZWdvcnl8cmVtb3RlaGVscHJ1bnNwYWNlfGV4dGVybmFsaGVscClcXHMrXFxTKy8gfVxuICAgIF1cbiAgfTtcblxuICBjb25zdCBQU19DT01NRU5UID0gaGxqcy5pbmhlcml0KFxuICAgIGhsanMuQ09NTUVOVChudWxsLCBudWxsKSxcbiAgICB7XG4gICAgICB2YXJpYW50czogW1xuICAgICAgICAvKiBzaW5nbGUtbGluZSBjb21tZW50ICovXG4gICAgICAgIHtcbiAgICAgICAgICBiZWdpbjogLyMvLFxuICAgICAgICAgIGVuZDogLyQvXG4gICAgICAgIH0sXG4gICAgICAgIC8qIG11bHRpLWxpbmUgY29tbWVudCAqL1xuICAgICAgICB7XG4gICAgICAgICAgYmVnaW46IC88Iy8sXG4gICAgICAgICAgZW5kOiAvIz4vXG4gICAgICAgIH1cbiAgICAgIF0sXG4gICAgICBjb250YWluczogWyBQU19IRUxQVEFHUyBdXG4gICAgfVxuICApO1xuXG4gIGNvbnN0IENNRExFVFMgPSB7XG4gICAgY2xhc3NOYW1lOiAnYnVpbHRfaW4nLFxuICAgIHZhcmlhbnRzOiBbIHsgYmVnaW46ICcoJy5jb25jYXQoVkFMSURfVkVSQlMsICcpKygtKVtcXFxcd1xcXFxkXSsnKSB9IF1cbiAgfTtcblxuICBjb25zdCBQU19DTEFTUyA9IHtcbiAgICBjbGFzc05hbWU6ICdjbGFzcycsXG4gICAgYmVnaW5LZXl3b3JkczogJ2NsYXNzIGVudW0nLFxuICAgIGVuZDogL1xccypbe10vLFxuICAgIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgcmVsZXZhbmNlOiAwLFxuICAgIGNvbnRhaW5zOiBbIGhsanMuVElUTEVfTU9ERSBdXG4gIH07XG5cbiAgY29uc3QgUFNfRlVOQ1RJT04gPSB7XG4gICAgY2xhc3NOYW1lOiAnZnVuY3Rpb24nLFxuICAgIGJlZ2luOiAvZnVuY3Rpb25cXHMrLyxcbiAgICBlbmQ6IC9cXHMqXFx7fCQvLFxuICAgIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgcmVsZXZhbmNlOiAwLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiBcImZ1bmN0aW9uXCIsXG4gICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgY2xhc3NOYW1lOiBcImtleXdvcmRcIlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiBcInRpdGxlXCIsXG4gICAgICAgIGJlZ2luOiBUSVRMRV9OQU1FX1JFLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvXFwoLyxcbiAgICAgICAgZW5kOiAvXFwpLyxcbiAgICAgICAgY2xhc3NOYW1lOiBcInBhcmFtc1wiLFxuICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgIGNvbnRhaW5zOiBbIFZBUiBdXG4gICAgICB9XG4gICAgICAvLyBDTURMRVRTXG4gICAgXVxuICB9O1xuXG4gIC8vIFVzaW5nIHN0YXRtZW50LCBwbHVzIHR5cGUsIHBsdXMgYXNzZW1ibHkgbmFtZS5cbiAgY29uc3QgUFNfVVNJTkcgPSB7XG4gICAgYmVnaW46IC91c2luZ1xccy8sXG4gICAgZW5kOiAvJC8sXG4gICAgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIFFVT1RFX1NUUklORyxcbiAgICAgIEFQT1NfU1RSSU5HLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdrZXl3b3JkJyxcbiAgICAgICAgYmVnaW46IC8odXNpbmd8YXNzZW1ibHl8Y29tbWFuZHxtb2R1bGV8bmFtZXNwYWNlfHR5cGUpL1xuICAgICAgfVxuICAgIF1cbiAgfTtcblxuICAvLyBDb21wZXJpc29uIG9wZXJhdG9ycyAmIGZ1bmN0aW9uIG5hbWVkIHBhcmFtZXRlcnMuXG4gIGNvbnN0IFBTX0FSR1VNRU5UUyA9IHsgdmFyaWFudHM6IFtcbiAgICAvLyBQUyBsaXRlcmFscyBhcmUgcHJldHR5IHZlcmJvc2Ugc28gaXQncyBhIGdvb2QgaWRlYSB0byBhY2NlbnQgdGhlbSBhIGJpdC5cbiAgICB7XG4gICAgICBjbGFzc05hbWU6ICdvcGVyYXRvcicsXG4gICAgICBiZWdpbjogJygnLmNvbmNhdChDT01QQVJJU09OX09QRVJBVE9SUywgJylcXFxcYicpXG4gICAgfSxcbiAgICB7XG4gICAgICBjbGFzc05hbWU6ICdsaXRlcmFsJyxcbiAgICAgIGJlZ2luOiAvKC0pezEsMn1bXFx3XFxkLV0rLyxcbiAgICAgIHJlbGV2YW5jZTogMFxuICAgIH1cbiAgXSB9O1xuXG4gIGNvbnN0IEhBU0hfU0lHTlMgPSB7XG4gICAgY2xhc3NOYW1lOiAnc2VsZWN0b3ItdGFnJyxcbiAgICBiZWdpbjogL0BcXEIvLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuXG4gIC8vIEl0J3MgYSB2ZXJ5IGdlbmVyYWwgcnVsZSBzbyBJJ2xsIG5hcnJvdyBpdCBhIGJpdCB3aXRoIHNvbWUgc3RyaWN0IGJvdW5kYXJpZXNcbiAgLy8gdG8gYXZvaWQgYW55IHBvc3NpYmxlIGZhbHNlLXBvc2l0aXZlIGNvbGxpc2lvbnMhXG4gIGNvbnN0IFBTX01FVEhPRFMgPSB7XG4gICAgY2xhc3NOYW1lOiAnZnVuY3Rpb24nLFxuICAgIGJlZ2luOiAvXFxbLipcXF1cXHMqW1xcd10rWyBdPz9cXCgvLFxuICAgIGVuZDogLyQvLFxuICAgIHJldHVybkJlZ2luOiB0cnVlLFxuICAgIHJlbGV2YW5jZTogMCxcbiAgICBjb250YWluczogW1xuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdrZXl3b3JkJyxcbiAgICAgICAgYmVnaW46ICcoJy5jb25jYXQoXG4gICAgICAgICAgS0VZV09SRFMua2V5d29yZC50b1N0cmluZygpLnJlcGxhY2UoL1xccy9nLCAnfCdcbiAgICAgICAgICApLCAnKVxcXFxiJyksXG4gICAgICAgIGVuZHNQYXJlbnQ6IHRydWUsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIGhsanMuaW5oZXJpdChobGpzLlRJVExFX01PREUsIHsgZW5kc1BhcmVudDogdHJ1ZSB9KVxuICAgIF1cbiAgfTtcblxuICBjb25zdCBHRU5UTEVNQU5TX1NFVCA9IFtcbiAgICAvLyBTVEFUSUNfTUVNQkVSLFxuICAgIFBTX01FVEhPRFMsXG4gICAgUFNfQ09NTUVOVCxcbiAgICBCQUNLVElDS19FU0NBUEUsXG4gICAgaGxqcy5OVU1CRVJfTU9ERSxcbiAgICBRVU9URV9TVFJJTkcsXG4gICAgQVBPU19TVFJJTkcsXG4gICAgLy8gUFNfTkVXX09CSkVDVF9UWVBFLFxuICAgIENNRExFVFMsXG4gICAgVkFSLFxuICAgIExJVEVSQUwsXG4gICAgSEFTSF9TSUdOU1xuICBdO1xuXG4gIGNvbnN0IFBTX1RZUEUgPSB7XG4gICAgYmVnaW46IC9cXFsvLFxuICAgIGVuZDogL1xcXS8sXG4gICAgZXhjbHVkZUJlZ2luOiB0cnVlLFxuICAgIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgcmVsZXZhbmNlOiAwLFxuICAgIGNvbnRhaW5zOiBbXS5jb25jYXQoXG4gICAgICAnc2VsZicsXG4gICAgICBHRU5UTEVNQU5TX1NFVCxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IFwiKFwiICsgVFlQRVMuam9pbihcInxcIikgKyBcIilcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcImJ1aWx0X2luXCIsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAndHlwZScsXG4gICAgICAgIGJlZ2luOiAvW1xcLlxcd1xcZF0rLyxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9XG4gICAgKVxuICB9O1xuXG4gIFBTX01FVEhPRFMuY29udGFpbnMudW5zaGlmdChQU19UWVBFKTtcblxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdQb3dlclNoZWxsJyxcbiAgICBhbGlhc2VzOiBbXG4gICAgICBcInB3c2hcIixcbiAgICAgIFwicHNcIixcbiAgICAgIFwicHMxXCJcbiAgICBdLFxuICAgIGNhc2VfaW5zZW5zaXRpdmU6IHRydWUsXG4gICAga2V5d29yZHM6IEtFWVdPUkRTLFxuICAgIGNvbnRhaW5zOiBHRU5UTEVNQU5TX1NFVC5jb25jYXQoXG4gICAgICBQU19DTEFTUyxcbiAgICAgIFBTX0ZVTkNUSU9OLFxuICAgICAgUFNfVVNJTkcsXG4gICAgICBQU19BUkdVTUVOVFMsXG4gICAgICBQU19UWVBFXG4gICAgKVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHBvd2Vyc2hlbGw7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///272\n")},278:(__unused_webpack_module,exports,__webpack_require__)=>{"use strict";eval("\n\nvar map = __webpack_require__(4713);\nvar _null = __webpack_require__(9430);\nvar seq = __webpack_require__(9796);\nvar string = __webpack_require__(5874);\nvar bool = __webpack_require__(1545);\nvar float = __webpack_require__(6415);\nvar int = __webpack_require__(6144);\n\nconst schema = [\n map.map,\n seq.seq,\n string.string,\n _null.nullTag,\n bool.boolTag,\n int.intOct,\n int.int,\n int.intHex,\n float.floatNaN,\n float.floatExp,\n float.float\n];\n\nexports.schema = schema;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjc4LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFVBQVUsbUJBQU8sQ0FBQyxJQUFrQjtBQUNwQyxZQUFZLG1CQUFPLENBQUMsSUFBbUI7QUFDdkMsVUFBVSxtQkFBTyxDQUFDLElBQWtCO0FBQ3BDLGFBQWEsbUJBQU8sQ0FBQyxJQUFxQjtBQUMxQyxXQUFXLG1CQUFPLENBQUMsSUFBVztBQUM5QixZQUFZLG1CQUFPLENBQUMsSUFBWTtBQUNoQyxVQUFVLG1CQUFPLENBQUMsSUFBVTs7QUFFNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsY0FBYyIsInNvdXJjZXMiOlsid2VicGFjazovL29ic2lkaWFuLW1pbmRtYXAtbmV4dGdlbi8uL25vZGVfbW9kdWxlcy8ucG5wbS95YW1sQDIuOC4wL25vZGVfbW9kdWxlcy95YW1sL2Rpc3Qvc2NoZW1hL2NvcmUvc2NoZW1hLmpzPzFmMjAiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgbWFwID0gcmVxdWlyZSgnLi4vY29tbW9uL21hcC5qcycpO1xudmFyIF9udWxsID0gcmVxdWlyZSgnLi4vY29tbW9uL251bGwuanMnKTtcbnZhciBzZXEgPSByZXF1aXJlKCcuLi9jb21tb24vc2VxLmpzJyk7XG52YXIgc3RyaW5nID0gcmVxdWlyZSgnLi4vY29tbW9uL3N0cmluZy5qcycpO1xudmFyIGJvb2wgPSByZXF1aXJlKCcuL2Jvb2wuanMnKTtcbnZhciBmbG9hdCA9IHJlcXVpcmUoJy4vZmxvYXQuanMnKTtcbnZhciBpbnQgPSByZXF1aXJlKCcuL2ludC5qcycpO1xuXG5jb25zdCBzY2hlbWEgPSBbXG4gICAgbWFwLm1hcCxcbiAgICBzZXEuc2VxLFxuICAgIHN0cmluZy5zdHJpbmcsXG4gICAgX251bGwubnVsbFRhZyxcbiAgICBib29sLmJvb2xUYWcsXG4gICAgaW50LmludE9jdCxcbiAgICBpbnQuaW50LFxuICAgIGludC5pbnRIZXgsXG4gICAgZmxvYXQuZmxvYXROYU4sXG4gICAgZmxvYXQuZmxvYXRFeHAsXG4gICAgZmxvYXQuZmxvYXRcbl07XG5cbmV4cG9ydHMuc2NoZW1hID0gc2NoZW1hO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///278\n")},291:module=>{eval("/*\nLanguage: Inform 7\nAuthor: Bruno Dias \nDescription: Language definition for Inform 7, a DSL for writing parser interactive fiction.\nWebsite: http://inform7.com\nCategory: gaming\n*/\n\nfunction inform7(hljs) {\n const START_BRACKET = '\\\\[';\n const END_BRACKET = '\\\\]';\n return {\n name: 'Inform 7',\n aliases: [ 'i7' ],\n case_insensitive: true,\n keywords: {\n // Some keywords more or less unique to I7, for relevance.\n keyword:\n // kind:\n 'thing room person man woman animal container '\n + 'supporter backdrop door '\n // characteristic:\n + 'scenery open closed locked inside gender '\n // verb:\n + 'is are say understand '\n // misc keyword:\n + 'kind of rule' },\n contains: [\n {\n className: 'string',\n begin: '\"',\n end: '\"',\n relevance: 0,\n contains: [\n {\n className: 'subst',\n begin: START_BRACKET,\n end: END_BRACKET\n }\n ]\n },\n {\n className: 'section',\n begin: /^(Volume|Book|Part|Chapter|Section|Table)\\b/,\n end: '$'\n },\n {\n // Rule definition\n // This is here for relevance.\n begin: /^(Check|Carry out|Report|Instead of|To|Rule|When|Before|After)\\b/,\n end: ':',\n contains: [\n {\n // Rule name\n begin: '\\\\(This',\n end: '\\\\)'\n }\n ]\n },\n {\n className: 'comment',\n begin: START_BRACKET,\n end: END_BRACKET,\n contains: [ 'self' ]\n }\n ]\n };\n}\n\nmodule.exports = inform7;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjkxLmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQjtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vb2JzaWRpYW4tbWluZG1hcC1uZXh0Z2VuLy4vbm9kZV9tb2R1bGVzLy5wbnBtL2hpZ2hsaWdodC5qc0AxMS4xMS4xL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9pbmZvcm03LmpzPzMzYzQiXSwic291cmNlc0NvbnRlbnQiOlsiLypcbkxhbmd1YWdlOiBJbmZvcm0gN1xuQXV0aG9yOiBCcnVubyBEaWFzIDxicnVuby5yLmRpYXNAZ21haWwuY29tPlxuRGVzY3JpcHRpb246IExhbmd1YWdlIGRlZmluaXRpb24gZm9yIEluZm9ybSA3LCBhIERTTCBmb3Igd3JpdGluZyBwYXJzZXIgaW50ZXJhY3RpdmUgZmljdGlvbi5cbldlYnNpdGU6IGh0dHA6Ly9pbmZvcm03LmNvbVxuQ2F0ZWdvcnk6IGdhbWluZ1xuKi9cblxuZnVuY3Rpb24gaW5mb3JtNyhobGpzKSB7XG4gIGNvbnN0IFNUQVJUX0JSQUNLRVQgPSAnXFxcXFsnO1xuICBjb25zdCBFTkRfQlJBQ0tFVCA9ICdcXFxcXSc7XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ0luZm9ybSA3JyxcbiAgICBhbGlhc2VzOiBbICdpNycgXSxcbiAgICBjYXNlX2luc2Vuc2l0aXZlOiB0cnVlLFxuICAgIGtleXdvcmRzOiB7XG4gICAgICAvLyBTb21lIGtleXdvcmRzIG1vcmUgb3IgbGVzcyB1bmlxdWUgdG8gSTcsIGZvciByZWxldmFuY2UuXG4gICAgICBrZXl3b3JkOlxuICAgICAgICAvLyBraW5kOlxuICAgICAgICAndGhpbmcgcm9vbSBwZXJzb24gbWFuIHdvbWFuIGFuaW1hbCBjb250YWluZXIgJ1xuICAgICAgICArICdzdXBwb3J0ZXIgYmFja2Ryb3AgZG9vciAnXG4gICAgICAgIC8vIGNoYXJhY3RlcmlzdGljOlxuICAgICAgICArICdzY2VuZXJ5IG9wZW4gY2xvc2VkIGxvY2tlZCBpbnNpZGUgZ2VuZGVyICdcbiAgICAgICAgLy8gdmVyYjpcbiAgICAgICAgKyAnaXMgYXJlIHNheSB1bmRlcnN0YW5kICdcbiAgICAgICAgLy8gbWlzYyBrZXl3b3JkOlxuICAgICAgICArICdraW5kIG9mIHJ1bGUnIH0sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICAgICAgYmVnaW46ICdcIicsXG4gICAgICAgIGVuZDogJ1wiJyxcbiAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ3N1YnN0JyxcbiAgICAgICAgICAgIGJlZ2luOiBTVEFSVF9CUkFDS0VULFxuICAgICAgICAgICAgZW5kOiBFTkRfQlJBQ0tFVFxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc2VjdGlvbicsXG4gICAgICAgIGJlZ2luOiAvXihWb2x1bWV8Qm9va3xQYXJ0fENoYXB0ZXJ8U2VjdGlvbnxUYWJsZSlcXGIvLFxuICAgICAgICBlbmQ6ICckJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgLy8gUnVsZSBkZWZpbml0aW9uXG4gICAgICAgIC8vIFRoaXMgaXMgaGVyZSBmb3IgcmVsZXZhbmNlLlxuICAgICAgICBiZWdpbjogL14oQ2hlY2t8Q2Fycnkgb3V0fFJlcG9ydHxJbnN0ZWFkIG9mfFRvfFJ1bGV8V2hlbnxCZWZvcmV8QWZ0ZXIpXFxiLyxcbiAgICAgICAgZW5kOiAnOicsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgLy8gUnVsZSBuYW1lXG4gICAgICAgICAgICBiZWdpbjogJ1xcXFwoVGhpcycsXG4gICAgICAgICAgICBlbmQ6ICdcXFxcKSdcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2NvbW1lbnQnLFxuICAgICAgICBiZWdpbjogU1RBUlRfQlJBQ0tFVCxcbiAgICAgICAgZW5kOiBFTkRfQlJBQ0tFVCxcbiAgICAgICAgY29udGFpbnM6IFsgJ3NlbGYnIF1cbiAgICAgIH1cbiAgICBdXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaW5mb3JtNztcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///291\n")},357:module=>{eval('/*\nLanguage: PHP\nAuthor: Victor Karamzin \nContributors: Evgeny Stepanischev , Ivan Sagalaev \nWebsite: https://www.php.net\nCategory: common\n*/\n\n/**\n * @param {HLJSApi} hljs\n * @returns {LanguageDetail}\n * */\nfunction php(hljs) {\n const regex = hljs.regex;\n // negative look-ahead tries to avoid matching patterns that are not\n // Perl at all like $ident$, @ident@, etc.\n const NOT_PERL_ETC = /(?![A-Za-z0-9])(?![$])/;\n const IDENT_RE = regex.concat(\n /[a-zA-Z_\\x7f-\\xff][a-zA-Z0-9_\\x7f-\\xff]*/,\n NOT_PERL_ETC);\n // Will not detect camelCase classes\n const PASCAL_CASE_CLASS_NAME_RE = regex.concat(\n /(\\\\?[A-Z][a-z0-9_\\x7f-\\xff]+|\\\\?[A-Z]+(?=[A-Z][a-z0-9_\\x7f-\\xff])){1,}/,\n NOT_PERL_ETC);\n const UPCASE_NAME_RE = regex.concat(\n /[A-Z]+/,\n NOT_PERL_ETC);\n const VARIABLE = {\n scope: \'variable\',\n match: \'\\\\$+\' + IDENT_RE,\n };\n const PREPROCESSOR = {\n scope: "meta",\n variants: [\n { begin: /<\\?php/, relevance: 10 }, // boost for obvious PHP\n { begin: /<\\?=/ },\n // less relevant per PSR-1 which says not to use short-tags\n { begin: /<\\?/, relevance: 0.1 },\n { begin: /\\?>/ } // end php tag\n ]\n };\n const SUBST = {\n scope: \'subst\',\n variants: [\n { begin: /\\$\\w+/ },\n {\n begin: /\\{\\$/,\n end: /\\}/\n }\n ]\n };\n const SINGLE_QUOTED = hljs.inherit(hljs.APOS_STRING_MODE, { illegal: null, });\n const DOUBLE_QUOTED = hljs.inherit(hljs.QUOTE_STRING_MODE, {\n illegal: null,\n contains: hljs.QUOTE_STRING_MODE.contains.concat(SUBST),\n });\n\n const HEREDOC = {\n begin: /<<<[ \\t]*(?:(\\w+)|"(\\w+)")\\n/,\n end: /[ \\t]*(\\w+)\\b/,\n contains: hljs.QUOTE_STRING_MODE.contains.concat(SUBST),\n \'on:begin\': (m, resp) => { resp.data._beginMatch = m[1] || m[2]; },\n \'on:end\': (m, resp) => { if (resp.data._beginMatch !== m[1]) resp.ignoreMatch(); },\n };\n\n const NOWDOC = hljs.END_SAME_AS_BEGIN({\n begin: /<<<[ \\t]*\'(\\w+)\'\\n/,\n end: /[ \\t]*(\\w+)\\b/,\n });\n // list of valid whitespaces because non-breaking space might be part of a IDENT_RE\n const WHITESPACE = \'[ \\t\\n]\';\n const STRING = {\n scope: \'string\',\n variants: [\n DOUBLE_QUOTED,\n SINGLE_QUOTED,\n HEREDOC,\n NOWDOC\n ]\n };\n const NUMBER = {\n scope: \'number\',\n variants: [\n { begin: `\\\\b0[bB][01]+(?:_[01]+)*\\\\b` }, // Binary w/ underscore support\n { begin: `\\\\b0[oO][0-7]+(?:_[0-7]+)*\\\\b` }, // Octals w/ underscore support\n { begin: `\\\\b0[xX][\\\\da-fA-F]+(?:_[\\\\da-fA-F]+)*\\\\b` }, // Hex w/ underscore support\n // Decimals w/ underscore support, with optional fragments and scientific exponent (e) suffix.\n { begin: `(?:\\\\b\\\\d+(?:_\\\\d+)*(\\\\.(?:\\\\d+(?:_\\\\d+)*))?|\\\\B\\\\.\\\\d+)(?:[eE][+-]?\\\\d+)?` }\n ],\n relevance: 0\n };\n const LITERALS = [\n "false",\n "null",\n "true"\n ];\n const KWS = [\n // Magic constants:\n // \n "__CLASS__",\n "__DIR__",\n "__FILE__",\n "__FUNCTION__",\n "__COMPILER_HALT_OFFSET__",\n "__LINE__",\n "__METHOD__",\n "__NAMESPACE__",\n "__TRAIT__",\n // Function that look like language construct or language construct that look like function:\n // List of keywords that may not require parenthesis\n "die",\n "echo",\n "exit",\n "include",\n "include_once",\n "print",\n "require",\n "require_once",\n // These are not language construct (function) but operate on the currently-executing function and can access the current symbol table\n // \'compact extract func_get_arg func_get_args func_num_args get_called_class get_parent_class \' +\n // Other keywords:\n // \n // \n "array",\n "abstract",\n "and",\n "as",\n "binary",\n "bool",\n "boolean",\n "break",\n "callable",\n "case",\n "catch",\n "class",\n "clone",\n "const",\n "continue",\n "declare",\n "default",\n "do",\n "double",\n "else",\n "elseif",\n "empty",\n "enddeclare",\n "endfor",\n "endforeach",\n "endif",\n "endswitch",\n "endwhile",\n "enum",\n "eval",\n "extends",\n "final",\n "finally",\n "float",\n "for",\n "foreach",\n "from",\n "global",\n "goto",\n "if",\n "implements",\n "instanceof",\n "insteadof",\n "int",\n "integer",\n "interface",\n "isset",\n "iterable",\n "list",\n "match|0",\n "mixed",\n "new",\n "never",\n "object",\n "or",\n "private",\n "protected",\n "public",\n "readonly",\n "real",\n "return",\n "string",\n "switch",\n "throw",\n "trait",\n "try",\n "unset",\n "use",\n "var",\n "void",\n "while",\n "xor",\n "yield"\n ];\n\n const BUILT_INS = [\n // Standard PHP library:\n // \n "Error|0",\n "AppendIterator",\n "ArgumentCountError",\n "ArithmeticError",\n "ArrayIterator",\n "ArrayObject",\n "AssertionError",\n "BadFunctionCallException",\n "BadMethodCallException",\n "CachingIterator",\n "CallbackFilterIterator",\n "CompileError",\n "Countable",\n "DirectoryIterator",\n "DivisionByZeroError",\n "DomainException",\n "EmptyIterator",\n "ErrorException",\n "Exception",\n "FilesystemIterator",\n "FilterIterator",\n "GlobIterator",\n "InfiniteIterator",\n "InvalidArgumentException",\n "IteratorIterator",\n "LengthException",\n "LimitIterator",\n "LogicException",\n "MultipleIterator",\n "NoRewindIterator",\n "OutOfBoundsException",\n "OutOfRangeException",\n "OuterIterator",\n "OverflowException",\n "ParentIterator",\n "ParseError",\n "RangeException",\n "RecursiveArrayIterator",\n "RecursiveCachingIterator",\n "RecursiveCallbackFilterIterator",\n "RecursiveDirectoryIterator",\n "RecursiveFilterIterator",\n "RecursiveIterator",\n "RecursiveIteratorIterator",\n "RecursiveRegexIterator",\n "RecursiveTreeIterator",\n "RegexIterator",\n "RuntimeException",\n "SeekableIterator",\n "SplDoublyLinkedList",\n "SplFileInfo",\n "SplFileObject",\n "SplFixedArray",\n "SplHeap",\n "SplMaxHeap",\n "SplMinHeap",\n "SplObjectStorage",\n "SplObserver",\n "SplPriorityQueue",\n "SplQueue",\n "SplStack",\n "SplSubject",\n "SplTempFileObject",\n "TypeError",\n "UnderflowException",\n "UnexpectedValueException",\n "UnhandledMatchError",\n // Reserved interfaces:\n // \n "ArrayAccess",\n "BackedEnum",\n "Closure",\n "Fiber",\n "Generator",\n "Iterator",\n "IteratorAggregate",\n "Serializable",\n "Stringable",\n "Throwable",\n "Traversable",\n "UnitEnum",\n "WeakReference",\n "WeakMap",\n // Reserved classes:\n // \n "Directory",\n "__PHP_Incomplete_Class",\n "parent",\n "php_user_filter",\n "self",\n "static",\n "stdClass"\n ];\n\n /** Dual-case keywords\n *\n * ["then","FILE"] =>\n * ["then", "THEN", "FILE", "file"]\n *\n * @param {string[]} items */\n const dualCase = (items) => {\n /** @type string[] */\n const result = [];\n items.forEach(item => {\n result.push(item);\n if (item.toLowerCase() === item) {\n result.push(item.toUpperCase());\n } else {\n result.push(item.toLowerCase());\n }\n });\n return result;\n };\n\n const KEYWORDS = {\n keyword: KWS,\n literal: dualCase(LITERALS),\n built_in: BUILT_INS,\n };\n\n /**\n * @param {string[]} items */\n const normalizeKeywords = (items) => {\n return items.map(item => {\n return item.replace(/\\|\\d+$/, "");\n });\n };\n\n const CONSTRUCTOR_CALL = { variants: [\n {\n match: [\n /new/,\n regex.concat(WHITESPACE, "+"),\n // to prevent built ins from being confused as the class constructor call\n regex.concat("(?!", normalizeKeywords(BUILT_INS).join("\\\\b|"), "\\\\b)"),\n PASCAL_CASE_CLASS_NAME_RE,\n ],\n scope: {\n 1: "keyword",\n 4: "title.class",\n },\n }\n ] };\n\n const CONSTANT_REFERENCE = regex.concat(IDENT_RE, "\\\\b(?!\\\\()");\n\n const LEFT_AND_RIGHT_SIDE_OF_DOUBLE_COLON = { variants: [\n {\n match: [\n regex.concat(\n /::/,\n regex.lookahead(/(?!class\\b)/)\n ),\n CONSTANT_REFERENCE,\n ],\n scope: { 2: "variable.constant", },\n },\n {\n match: [\n /::/,\n /class/,\n ],\n scope: { 2: "variable.language", },\n },\n {\n match: [\n PASCAL_CASE_CLASS_NAME_RE,\n regex.concat(\n /::/,\n regex.lookahead(/(?!class\\b)/)\n ),\n CONSTANT_REFERENCE,\n ],\n scope: {\n 1: "title.class",\n 3: "variable.constant",\n },\n },\n {\n match: [\n PASCAL_CASE_CLASS_NAME_RE,\n regex.concat(\n "::",\n regex.lookahead(/(?!class\\b)/)\n ),\n ],\n scope: { 1: "title.class", },\n },\n {\n match: [\n PASCAL_CASE_CLASS_NAME_RE,\n /::/,\n /class/,\n ],\n scope: {\n 1: "title.class",\n 3: "variable.language",\n },\n }\n ] };\n\n const NAMED_ARGUMENT = {\n scope: \'attr\',\n match: regex.concat(IDENT_RE, regex.lookahead(\':\'), regex.lookahead(/(?!::)/)),\n };\n const PARAMS_MODE = {\n relevance: 0,\n begin: /\\(/,\n end: /\\)/,\n keywords: KEYWORDS,\n contains: [\n NAMED_ARGUMENT,\n VARIABLE,\n LEFT_AND_RIGHT_SIDE_OF_DOUBLE_COLON,\n hljs.C_BLOCK_COMMENT_MODE,\n STRING,\n NUMBER,\n CONSTRUCTOR_CALL,\n ],\n };\n const FUNCTION_INVOKE = {\n relevance: 0,\n match: [\n /\\b/,\n // to prevent keywords from being confused as the function title\n regex.concat("(?!fn\\\\b|function\\\\b|", normalizeKeywords(KWS).join("\\\\b|"), "|", normalizeKeywords(BUILT_INS).join("\\\\b|"), "\\\\b)"),\n IDENT_RE,\n regex.concat(WHITESPACE, "*"),\n regex.lookahead(/(?=\\()/)\n ],\n scope: { 3: "title.function.invoke", },\n contains: [ PARAMS_MODE ]\n };\n PARAMS_MODE.contains.push(FUNCTION_INVOKE);\n\n const ATTRIBUTE_CONTAINS = [\n NAMED_ARGUMENT,\n LEFT_AND_RIGHT_SIDE_OF_DOUBLE_COLON,\n hljs.C_BLOCK_COMMENT_MODE,\n STRING,\n NUMBER,\n CONSTRUCTOR_CALL,\n ];\n\n const ATTRIBUTES = {\n begin: regex.concat(/#\\[\\s*\\\\?/,\n regex.either(\n PASCAL_CASE_CLASS_NAME_RE,\n UPCASE_NAME_RE\n )\n ),\n beginScope: "meta",\n end: /]/,\n endScope: "meta",\n keywords: {\n literal: LITERALS,\n keyword: [\n \'new\',\n \'array\',\n ]\n },\n contains: [\n {\n begin: /\\[/,\n end: /]/,\n keywords: {\n literal: LITERALS,\n keyword: [\n \'new\',\n \'array\',\n ]\n },\n contains: [\n \'self\',\n ...ATTRIBUTE_CONTAINS,\n ]\n },\n ...ATTRIBUTE_CONTAINS,\n {\n scope: \'meta\',\n variants: [\n { match: PASCAL_CASE_CLASS_NAME_RE },\n { match: UPCASE_NAME_RE }\n ]\n }\n ]\n };\n\n return {\n case_insensitive: false,\n keywords: KEYWORDS,\n contains: [\n ATTRIBUTES,\n hljs.HASH_COMMENT_MODE,\n hljs.COMMENT(\'//\', \'$\'),\n hljs.COMMENT(\n \'/\\\\*\',\n \'\\\\*/\',\n { contains: [\n {\n scope: \'doctag\',\n match: \'@[A-Za-z]+\'\n }\n ] }\n ),\n {\n match: /__halt_compiler\\(\\);/,\n keywords: \'__halt_compiler\',\n starts: {\n scope: "comment",\n end: hljs.MATCH_NOTHING_RE,\n contains: [\n {\n match: /\\?>/,\n scope: "meta",\n endsParent: true\n }\n ]\n }\n },\n PREPROCESSOR,\n {\n scope: \'variable.language\',\n match: /\\$this\\b/\n },\n VARIABLE,\n FUNCTION_INVOKE,\n LEFT_AND_RIGHT_SIDE_OF_DOUBLE_COLON,\n {\n match: [\n /const/,\n /\\s/,\n IDENT_RE,\n ],\n scope: {\n 1: "keyword",\n 3: "variable.constant",\n },\n },\n CONSTRUCTOR_CALL,\n {\n scope: \'function\',\n relevance: 0,\n beginKeywords: \'fn function\',\n end: /[;{]/,\n excludeEnd: true,\n illegal: \'[$%\\\\[]\',\n contains: [\n { beginKeywords: \'use\', },\n hljs.UNDERSCORE_TITLE_MODE,\n {\n begin: \'=>\', // No markup, just a relevance booster\n endsParent: true\n },\n {\n scope: \'params\',\n begin: \'\\\\(\',\n end: \'\\\\)\',\n excludeBegin: true,\n excludeEnd: true,\n keywords: KEYWORDS,\n contains: [\n \'self\',\n ATTRIBUTES,\n VARIABLE,\n LEFT_AND_RIGHT_SIDE_OF_DOUBLE_COLON,\n hljs.C_BLOCK_COMMENT_MODE,\n STRING,\n NUMBER\n ]\n },\n ]\n },\n {\n scope: \'class\',\n variants: [\n {\n beginKeywords: "enum",\n illegal: /[($"]/\n },\n {\n beginKeywords: "class interface trait",\n illegal: /[:($"]/\n }\n ],\n relevance: 0,\n end: /\\{/,\n excludeEnd: true,\n contains: [\n { beginKeywords: \'extends implements\' },\n hljs.UNDERSCORE_TITLE_MODE\n ]\n },\n // both use and namespace still use "old style" rules (vs multi-match)\n // because the namespace name can include `\\` and we still want each\n // element to be treated as its own *individual* title\n {\n beginKeywords: \'namespace\',\n relevance: 0,\n end: \';\',\n illegal: /[.\']/,\n contains: [ hljs.inherit(hljs.UNDERSCORE_TITLE_MODE, { scope: "title.class" }) ]\n },\n {\n beginKeywords: \'use\',\n relevance: 0,\n end: \';\',\n contains: [\n // TODO: title.function vs title.class\n {\n match: /\\b(as|const|function)\\b/,\n scope: "keyword"\n },\n // TODO: could be title.class or title.function\n hljs.UNDERSCORE_TITLE_MODE\n ]\n },\n STRING,\n NUMBER,\n ]\n };\n}\n\nmodule.exports = php;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzU3LmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsV0FBVyxTQUFTO0FBQ3BCLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0VBQXdFLEdBQUc7QUFDM0U7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsZ0NBQWdDO0FBQ3hDLFFBQVEsZUFBZTtBQUN2QjtBQUNBLFFBQVEsOEJBQThCO0FBQ3RDLFFBQVEsZUFBZTtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxnQkFBZ0I7QUFDeEI7QUFDQSxrQkFBa0I7QUFDbEIsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBLDhEQUE4RCxnQkFBZ0I7QUFDOUU7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQix1Q0FBdUM7QUFDdEUsNkJBQTZCLHlEQUF5RDtBQUN0Rjs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsc0NBQXNDO0FBQzlDLFFBQVEsd0NBQXdDO0FBQ2hELFFBQVEsb0RBQW9EO0FBQzVEO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxVQUFVO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsYUFBYSxVQUFVO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQSw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBLGdEQUFnRDtBQUNoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSx5QkFBeUI7QUFDeEMsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLHlCQUF5QjtBQUN4QyxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxtQkFBbUI7QUFDbEMsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLDZCQUE2QjtBQUMxQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksa0NBQWtDO0FBQzlDLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQztBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBLFlBQVksdUJBQXVCO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBLFlBQVkscUNBQXFDO0FBQ2pEO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0EsK0RBQStELHNCQUFzQjtBQUNyRixPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9vYnNpZGlhbi1taW5kbWFwLW5leHRnZW4vLi9ub2RlX21vZHVsZXMvLnBucG0vaGlnaGxpZ2h0LmpzQDExLjExLjEvbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3BocC5qcz81ZGI3Il0sInNvdXJjZXNDb250ZW50IjpbIi8qXG5MYW5ndWFnZTogUEhQXG5BdXRob3I6IFZpY3RvciBLYXJhbXppbiA8VmljdG9yLkthcmFtemluQGVudGVycmEtaW5jLmNvbT5cbkNvbnRyaWJ1dG9yczogRXZnZW55IFN0ZXBhbmlzY2hldiA8aW1ib2xrQGdtYWlsLmNvbT4sIEl2YW4gU2FnYWxhZXYgPG1hbmlhY0Bzb2Z0d2FyZW1hbmlhY3Mub3JnPlxuV2Vic2l0ZTogaHR0cHM6Ly93d3cucGhwLm5ldFxuQ2F0ZWdvcnk6IGNvbW1vblxuKi9cblxuLyoqXG4gKiBAcGFyYW0ge0hMSlNBcGl9IGhsanNcbiAqIEByZXR1cm5zIHtMYW5ndWFnZURldGFpbH1cbiAqICovXG5mdW5jdGlvbiBwaHAoaGxqcykge1xuICBjb25zdCByZWdleCA9IGhsanMucmVnZXg7XG4gIC8vIG5lZ2F0aXZlIGxvb2stYWhlYWQgdHJpZXMgdG8gYXZvaWQgbWF0Y2hpbmcgcGF0dGVybnMgdGhhdCBhcmUgbm90XG4gIC8vIFBlcmwgYXQgYWxsIGxpa2UgJGlkZW50JCwgQGlkZW50QCwgZXRjLlxuICBjb25zdCBOT1RfUEVSTF9FVEMgPSAvKD8hW0EtWmEtejAtOV0pKD8hWyRdKS87XG4gIGNvbnN0IElERU5UX1JFID0gcmVnZXguY29uY2F0KFxuICAgIC9bYS16QS1aX1xceDdmLVxceGZmXVthLXpBLVowLTlfXFx4N2YtXFx4ZmZdKi8sXG4gICAgTk9UX1BFUkxfRVRDKTtcbiAgLy8gV2lsbCBub3QgZGV0ZWN0IGNhbWVsQ2FzZSBjbGFzc2VzXG4gIGNvbnN0IFBBU0NBTF9DQVNFX0NMQVNTX05BTUVfUkUgPSByZWdleC5jb25jYXQoXG4gICAgLyhcXFxcP1tBLVpdW2EtejAtOV9cXHg3Zi1cXHhmZl0rfFxcXFw/W0EtWl0rKD89W0EtWl1bYS16MC05X1xceDdmLVxceGZmXSkpezEsfS8sXG4gICAgTk9UX1BFUkxfRVRDKTtcbiAgY29uc3QgVVBDQVNFX05BTUVfUkUgPSByZWdleC5jb25jYXQoXG4gICAgL1tBLVpdKy8sXG4gICAgTk9UX1BFUkxfRVRDKTtcbiAgY29uc3QgVkFSSUFCTEUgPSB7XG4gICAgc2NvcGU6ICd2YXJpYWJsZScsXG4gICAgbWF0Y2g6ICdcXFxcJCsnICsgSURFTlRfUkUsXG4gIH07XG4gIGNvbnN0IFBSRVBST0NFU1NPUiA9IHtcbiAgICBzY29wZTogXCJtZXRhXCIsXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHsgYmVnaW46IC88XFw/cGhwLywgcmVsZXZhbmNlOiAxMCB9LCAvLyBib29zdCBmb3Igb2J2aW91cyBQSFBcbiAgICAgIHsgYmVnaW46IC88XFw/PS8gfSxcbiAgICAgIC8vIGxlc3MgcmVsZXZhbnQgcGVyIFBTUi0xIHdoaWNoIHNheXMgbm90IHRvIHVzZSBzaG9ydC10YWdzXG4gICAgICB7IGJlZ2luOiAvPFxcPy8sIHJlbGV2YW5jZTogMC4xIH0sXG4gICAgICB7IGJlZ2luOiAvXFw/Pi8gfSAvLyBlbmQgcGhwIHRhZ1xuICAgIF1cbiAgfTtcbiAgY29uc3QgU1VCU1QgPSB7XG4gICAgc2NvcGU6ICdzdWJzdCcsXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHsgYmVnaW46IC9cXCRcXHcrLyB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogL1xce1xcJC8sXG4gICAgICAgIGVuZDogL1xcfS9cbiAgICAgIH1cbiAgICBdXG4gIH07XG4gIGNvbnN0IFNJTkdMRV9RVU9URUQgPSBobGpzLmluaGVyaXQoaGxqcy5BUE9TX1NUUklOR19NT0RFLCB7IGlsbGVnYWw6IG51bGwsIH0pO1xuICBjb25zdCBET1VCTEVfUVVPVEVEID0gaGxqcy5pbmhlcml0KGhsanMuUVVPVEVfU1RSSU5HX01PREUsIHtcbiAgICBpbGxlZ2FsOiBudWxsLFxuICAgIGNvbnRhaW5zOiBobGpzLlFVT1RFX1NUUklOR19NT0RFLmNvbnRhaW5zLmNvbmNhdChTVUJTVCksXG4gIH0pO1xuXG4gIGNvbnN0IEhFUkVET0MgPSB7XG4gICAgYmVnaW46IC88PDxbIFxcdF0qKD86KFxcdyspfFwiKFxcdyspXCIpXFxuLyxcbiAgICBlbmQ6IC9bIFxcdF0qKFxcdyspXFxiLyxcbiAgICBjb250YWluczogaGxqcy5RVU9URV9TVFJJTkdfTU9ERS5jb250YWlucy5jb25jYXQoU1VCU1QpLFxuICAgICdvbjpiZWdpbic6IChtLCByZXNwKSA9PiB7IHJlc3AuZGF0YS5fYmVnaW5NYXRjaCA9IG1bMV0gfHwgbVsyXTsgfSxcbiAgICAnb246ZW5kJzogKG0sIHJlc3ApID0+IHsgaWYgKHJlc3AuZGF0YS5fYmVnaW5NYXRjaCAhPT0gbVsxXSkgcmVzcC5pZ25vcmVNYXRjaCgpOyB9LFxuICB9O1xuXG4gIGNvbnN0IE5PV0RPQyA9IGhsanMuRU5EX1NBTUVfQVNfQkVHSU4oe1xuICAgIGJlZ2luOiAvPDw8WyBcXHRdKicoXFx3KyknXFxuLyxcbiAgICBlbmQ6IC9bIFxcdF0qKFxcdyspXFxiLyxcbiAgfSk7XG4gIC8vIGxpc3Qgb2YgdmFsaWQgd2hpdGVzcGFjZXMgYmVjYXVzZSBub24tYnJlYWtpbmcgc3BhY2UgbWlnaHQgYmUgcGFydCBvZiBhIElERU5UX1JFXG4gIGNvbnN0IFdISVRFU1BBQ0UgPSAnWyBcXHRcXG5dJztcbiAgY29uc3QgU1RSSU5HID0ge1xuICAgIHNjb3BlOiAnc3RyaW5nJyxcbiAgICB2YXJpYW50czogW1xuICAgICAgRE9VQkxFX1FVT1RFRCxcbiAgICAgIFNJTkdMRV9RVU9URUQsXG4gICAgICBIRVJFRE9DLFxuICAgICAgTk9XRE9DXG4gICAgXVxuICB9O1xuICBjb25zdCBOVU1CRVIgPSB7XG4gICAgc2NvcGU6ICdudW1iZXInLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7IGJlZ2luOiBgXFxcXGIwW2JCXVswMV0rKD86X1swMV0rKSpcXFxcYmAgfSwgLy8gQmluYXJ5IHcvIHVuZGVyc2NvcmUgc3VwcG9ydFxuICAgICAgeyBiZWdpbjogYFxcXFxiMFtvT11bMC03XSsoPzpfWzAtN10rKSpcXFxcYmAgfSwgLy8gT2N0YWxzIHcvIHVuZGVyc2NvcmUgc3VwcG9ydFxuICAgICAgeyBiZWdpbjogYFxcXFxiMFt4WF1bXFxcXGRhLWZBLUZdKyg/Ol9bXFxcXGRhLWZBLUZdKykqXFxcXGJgIH0sIC8vIEhleCB3LyB1bmRlcnNjb3JlIHN1cHBvcnRcbiAgICAgIC8vIERlY2ltYWxzIHcvIHVuZGVyc2NvcmUgc3VwcG9ydCwgd2l0aCBvcHRpb25hbCBmcmFnbWVudHMgYW5kIHNjaWVudGlmaWMgZXhwb25lbnQgKGUpIHN1ZmZpeC5cbiAgICAgIHsgYmVnaW46IGAoPzpcXFxcYlxcXFxkKyg/Ol9cXFxcZCspKihcXFxcLig/OlxcXFxkKyg/Ol9cXFxcZCspKikpP3xcXFxcQlxcXFwuXFxcXGQrKSg/OltlRV1bKy1dP1xcXFxkKyk/YCB9XG4gICAgXSxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcbiAgY29uc3QgTElURVJBTFMgPSBbXG4gICAgXCJmYWxzZVwiLFxuICAgIFwibnVsbFwiLFxuICAgIFwidHJ1ZVwiXG4gIF07XG4gIGNvbnN0IEtXUyA9IFtcbiAgICAvLyBNYWdpYyBjb25zdGFudHM6XG4gICAgLy8gPGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2xhbmd1YWdlLmNvbnN0YW50cy5wcmVkZWZpbmVkLnBocD5cbiAgICBcIl9fQ0xBU1NfX1wiLFxuICAgIFwiX19ESVJfX1wiLFxuICAgIFwiX19GSUxFX19cIixcbiAgICBcIl9fRlVOQ1RJT05fX1wiLFxuICAgIFwiX19DT01QSUxFUl9IQUxUX09GRlNFVF9fXCIsXG4gICAgXCJfX0xJTkVfX1wiLFxuICAgIFwiX19NRVRIT0RfX1wiLFxuICAgIFwiX19OQU1FU1BBQ0VfX1wiLFxuICAgIFwiX19UUkFJVF9fXCIsXG4gICAgLy8gRnVuY3Rpb24gdGhhdCBsb29rIGxpa2UgbGFuZ3VhZ2UgY29uc3RydWN0IG9yIGxhbmd1YWdlIGNvbnN0cnVjdCB0aGF0IGxvb2sgbGlrZSBmdW5jdGlvbjpcbiAgICAvLyBMaXN0IG9mIGtleXdvcmRzIHRoYXQgbWF5IG5vdCByZXF1aXJlIHBhcmVudGhlc2lzXG4gICAgXCJkaWVcIixcbiAgICBcImVjaG9cIixcbiAgICBcImV4aXRcIixcbiAgICBcImluY2x1ZGVcIixcbiAgICBcImluY2x1ZGVfb25jZVwiLFxuICAgIFwicHJpbnRcIixcbiAgICBcInJlcXVpcmVcIixcbiAgICBcInJlcXVpcmVfb25jZVwiLFxuICAgIC8vIFRoZXNlIGFyZSBub3QgbGFuZ3VhZ2UgY29uc3RydWN0IChmdW5jdGlvbikgYnV0IG9wZXJhdGUgb24gdGhlIGN1cnJlbnRseS1leGVjdXRpbmcgZnVuY3Rpb24gYW5kIGNhbiBhY2Nlc3MgdGhlIGN1cnJlbnQgc3ltYm9sIHRhYmxlXG4gICAgLy8gJ2NvbXBhY3QgZXh0cmFjdCBmdW5jX2dldF9hcmcgZnVuY19nZXRfYXJncyBmdW5jX251bV9hcmdzIGdldF9jYWxsZWRfY2xhc3MgZ2V0X3BhcmVudF9jbGFzcyAnICtcbiAgICAvLyBPdGhlciBrZXl3b3JkczpcbiAgICAvLyA8aHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vcmVzZXJ2ZWQucGhwPlxuICAgIC8vIDxodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9sYW5ndWFnZS50eXBlcy50eXBlLWp1Z2dsaW5nLnBocD5cbiAgICBcImFycmF5XCIsXG4gICAgXCJhYnN0cmFjdFwiLFxuICAgIFwiYW5kXCIsXG4gICAgXCJhc1wiLFxuICAgIFwiYmluYXJ5XCIsXG4gICAgXCJib29sXCIsXG4gICAgXCJib29sZWFuXCIsXG4gICAgXCJicmVha1wiLFxuICAgIFwiY2FsbGFibGVcIixcbiAgICBcImNhc2VcIixcbiAgICBcImNhdGNoXCIsXG4gICAgXCJjbGFzc1wiLFxuICAgIFwiY2xvbmVcIixcbiAgICBcImNvbnN0XCIsXG4gICAgXCJjb250aW51ZVwiLFxuICAgIFwiZGVjbGFyZVwiLFxuICAgIFwiZGVmYXVsdFwiLFxuICAgIFwiZG9cIixcbiAgICBcImRvdWJsZVwiLFxuICAgIFwiZWxzZVwiLFxuICAgIFwiZWxzZWlmXCIsXG4gICAgXCJlbXB0eVwiLFxuICAgIFwiZW5kZGVjbGFyZVwiLFxuICAgIFwiZW5kZm9yXCIsXG4gICAgXCJlbmRmb3JlYWNoXCIsXG4gICAgXCJlbmRpZlwiLFxuICAgIFwiZW5kc3dpdGNoXCIsXG4gICAgXCJlbmR3aGlsZVwiLFxuICAgIFwiZW51bVwiLFxuICAgIFwiZXZhbFwiLFxuICAgIFwiZXh0ZW5kc1wiLFxuICAgIFwiZmluYWxcIixcbiAgICBcImZpbmFsbHlcIixcbiAgICBcImZsb2F0XCIsXG4gICAgXCJmb3JcIixcbiAgICBcImZvcmVhY2hcIixcbiAgICBcImZyb21cIixcbiAgICBcImdsb2JhbFwiLFxuICAgIFwiZ290b1wiLFxuICAgIFwiaWZcIixcbiAgICBcImltcGxlbWVudHNcIixcbiAgICBcImluc3RhbmNlb2ZcIixcbiAgICBcImluc3RlYWRvZlwiLFxuICAgIFwiaW50XCIsXG4gICAgXCJpbnRlZ2VyXCIsXG4gICAgXCJpbnRlcmZhY2VcIixcbiAgICBcImlzc2V0XCIsXG4gICAgXCJpdGVyYWJsZVwiLFxuICAgIFwibGlzdFwiLFxuICAgIFwibWF0Y2h8MFwiLFxuICAgIFwibWl4ZWRcIixcbiAgICBcIm5ld1wiLFxuICAgIFwibmV2ZXJcIixcbiAgICBcIm9iamVjdFwiLFxuICAgIFwib3JcIixcbiAgICBcInByaXZhdGVcIixcbiAgICBcInByb3RlY3RlZFwiLFxuICAgIFwicHVibGljXCIsXG4gICAgXCJyZWFkb25seVwiLFxuICAgIFwicmVhbFwiLFxuICAgIFwicmV0dXJuXCIsXG4gICAgXCJzdHJpbmdcIixcbiAgICBcInN3aXRjaFwiLFxuICAgIFwidGhyb3dcIixcbiAgICBcInRyYWl0XCIsXG4gICAgXCJ0cnlcIixcbiAgICBcInVuc2V0XCIsXG4gICAgXCJ1c2VcIixcbiAgICBcInZhclwiLFxuICAgIFwidm9pZFwiLFxuICAgIFwid2hpbGVcIixcbiAgICBcInhvclwiLFxuICAgIFwieWllbGRcIlxuICBdO1xuXG4gIGNvbnN0IEJVSUxUX0lOUyA9IFtcbiAgICAvLyBTdGFuZGFyZCBQSFAgbGlicmFyeTpcbiAgICAvLyA8aHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vYm9vay5zcGwucGhwPlxuICAgIFwiRXJyb3J8MFwiLFxuICAgIFwiQXBwZW5kSXRlcmF0b3JcIixcbiAgICBcIkFyZ3VtZW50Q291bnRFcnJvclwiLFxuICAgIFwiQXJpdGhtZXRpY0Vycm9yXCIsXG4gICAgXCJBcnJheUl0ZXJhdG9yXCIsXG4gICAgXCJBcnJheU9iamVjdFwiLFxuICAgIFwiQXNzZXJ0aW9uRXJyb3JcIixcbiAgICBcIkJhZEZ1bmN0aW9uQ2FsbEV4Y2VwdGlvblwiLFxuICAgIFwiQmFkTWV0aG9kQ2FsbEV4Y2VwdGlvblwiLFxuICAgIFwiQ2FjaGluZ0l0ZXJhdG9yXCIsXG4gICAgXCJDYWxsYmFja0ZpbHRlckl0ZXJhdG9yXCIsXG4gICAgXCJDb21waWxlRXJyb3JcIixcbiAgICBcIkNvdW50YWJsZVwiLFxuICAgIFwiRGlyZWN0b3J5SXRlcmF0b3JcIixcbiAgICBcIkRpdmlzaW9uQnlaZXJvRXJyb3JcIixcbiAgICBcIkRvbWFpbkV4Y2VwdGlvblwiLFxuICAgIFwiRW1wdHlJdGVyYXRvclwiLFxuICAgIFwiRXJyb3JFeGNlcHRpb25cIixcbiAgICBcIkV4Y2VwdGlvblwiLFxuICAgIFwiRmlsZXN5c3RlbUl0ZXJhdG9yXCIsXG4gICAgXCJGaWx0ZXJJdGVyYXRvclwiLFxuICAgIFwiR2xvYkl0ZXJhdG9yXCIsXG4gICAgXCJJbmZpbml0ZUl0ZXJhdG9yXCIsXG4gICAgXCJJbnZhbGlkQXJndW1lbnRFeGNlcHRpb25cIixcbiAgICBcIkl0ZXJhdG9ySXRlcmF0b3JcIixcbiAgICBcIkxlbmd0aEV4Y2VwdGlvblwiLFxuICAgIFwiTGltaXRJdGVyYXRvclwiLFxuICAgIFwiTG9naWNFeGNlcHRpb25cIixcbiAgICBcIk11bHRpcGxlSXRlcmF0b3JcIixcbiAgICBcIk5vUmV3aW5kSXRlcmF0b3JcIixcbiAgICBcIk91dE9mQm91bmRzRXhjZXB0aW9uXCIsXG4gICAgXCJPdXRPZlJhbmdlRXhjZXB0aW9uXCIsXG4gICAgXCJPdXRlckl0ZXJhdG9yXCIsXG4gICAgXCJPdmVyZmxvd0V4Y2VwdGlvblwiLFxuICAgIFwiUGFyZW50SXRlcmF0b3JcIixcbiAgICBcIlBhcnNlRXJyb3JcIixcbiAgICBcIlJhbmdlRXhjZXB0aW9uXCIsXG4gICAgXCJSZWN1cnNpdmVBcnJheUl0ZXJhdG9yXCIsXG4gICAgXCJSZWN1cnNpdmVDYWNoaW5nSXRlcmF0b3JcIixcbiAgICBcIlJlY3Vyc2l2ZUNhbGxiYWNrRmlsdGVySXRlcmF0b3JcIixcbiAgICBcIlJlY3Vyc2l2ZURpcmVjdG9yeUl0ZXJhdG9yXCIsXG4gICAgXCJSZWN1cnNpdmVGaWx0ZXJJdGVyYXRvclwiLFxuICAgIFwiUmVjdXJzaXZlSXRlcmF0b3JcIixcbiAgICBcIlJlY3Vyc2l2ZUl0ZXJhdG9ySXRlcmF0b3JcIixcbiAgICBcIlJlY3Vyc2l2ZVJlZ2V4SXRlcmF0b3JcIixcbiAgICBcIlJlY3Vyc2l2ZVRyZWVJdGVyYXRvclwiLFxuICAgIFwiUmVnZXhJdGVyYXRvclwiLFxuICAgIFwiUnVudGltZUV4Y2VwdGlvblwiLFxuICAgIFwiU2Vla2FibGVJdGVyYXRvclwiLFxuICAgIFwiU3BsRG91Ymx5TGlua2VkTGlzdFwiLFxuICAgIFwiU3BsRmlsZUluZm9cIixcbiAgICBcIlNwbEZpbGVPYmplY3RcIixcbiAgICBcIlNwbEZpeGVkQXJyYXlcIixcbiAgICBcIlNwbEhlYXBcIixcbiAgICBcIlNwbE1heEhlYXBcIixcbiAgICBcIlNwbE1pbkhlYXBcIixcbiAgICBcIlNwbE9iamVjdFN0b3JhZ2VcIixcbiAgICBcIlNwbE9ic2VydmVyXCIsXG4gICAgXCJTcGxQcmlvcml0eVF1ZXVlXCIsXG4gICAgXCJTcGxRdWV1ZVwiLFxuICAgIFwiU3BsU3RhY2tcIixcbiAgICBcIlNwbFN1YmplY3RcIixcbiAgICBcIlNwbFRlbXBGaWxlT2JqZWN0XCIsXG4gICAgXCJUeXBlRXJyb3JcIixcbiAgICBcIlVuZGVyZmxvd0V4Y2VwdGlvblwiLFxuICAgIFwiVW5leHBlY3RlZFZhbHVlRXhjZXB0aW9uXCIsXG4gICAgXCJVbmhhbmRsZWRNYXRjaEVycm9yXCIsXG4gICAgLy8gUmVzZXJ2ZWQgaW50ZXJmYWNlczpcbiAgICAvLyA8aHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vcmVzZXJ2ZWQuaW50ZXJmYWNlcy5waHA+XG4gICAgXCJBcnJheUFjY2Vzc1wiLFxuICAgIFwiQmFja2VkRW51bVwiLFxuICAgIFwiQ2xvc3VyZVwiLFxuICAgIFwiRmliZXJcIixcbiAgICBcIkdlbmVyYXRvclwiLFxuICAgIFwiSXRlcmF0b3JcIixcbiAgICBcIkl0ZXJhdG9yQWdncmVnYXRlXCIsXG4gICAgXCJTZXJpYWxpemFibGVcIixcbiAgICBcIlN0cmluZ2FibGVcIixcbiAgICBcIlRocm93YWJsZVwiLFxuICAgIFwiVHJhdmVyc2FibGVcIixcbiAgICBcIlVuaXRFbnVtXCIsXG4gICAgXCJXZWFrUmVmZXJlbmNlXCIsXG4gICAgXCJXZWFrTWFwXCIsXG4gICAgLy8gUmVzZXJ2ZWQgY2xhc3NlczpcbiAgICAvLyA8aHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vcmVzZXJ2ZWQuY2xhc3Nlcy5waHA+XG4gICAgXCJEaXJlY3RvcnlcIixcbiAgICBcIl9fUEhQX0luY29tcGxldGVfQ2xhc3NcIixcbiAgICBcInBhcmVudFwiLFxuICAgIFwicGhwX3VzZXJfZmlsdGVyXCIsXG4gICAgXCJzZWxmXCIsXG4gICAgXCJzdGF0aWNcIixcbiAgICBcInN0ZENsYXNzXCJcbiAgXTtcblxuICAvKiogRHVhbC1jYXNlIGtleXdvcmRzXG4gICAqXG4gICAqIFtcInRoZW5cIixcIkZJTEVcIl0gPT5cbiAgICogICAgIFtcInRoZW5cIiwgXCJUSEVOXCIsIFwiRklMRVwiLCBcImZpbGVcIl1cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gaXRlbXMgKi9cbiAgY29uc3QgZHVhbENhc2UgPSAoaXRlbXMpID0+IHtcbiAgICAvKiogQHR5cGUgc3RyaW5nW10gKi9cbiAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICBpdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgcmVzdWx0LnB1c2goaXRlbSk7XG4gICAgICBpZiAoaXRlbS50b0xvd2VyQ2FzZSgpID09PSBpdGVtKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKGl0ZW0udG9VcHBlckNhc2UoKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHQucHVzaChpdGVtLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgY29uc3QgS0VZV09SRFMgPSB7XG4gICAga2V5d29yZDogS1dTLFxuICAgIGxpdGVyYWw6IGR1YWxDYXNlKExJVEVSQUxTKSxcbiAgICBidWlsdF9pbjogQlVJTFRfSU5TLFxuICB9O1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBpdGVtcyAqL1xuICBjb25zdCBub3JtYWxpemVLZXl3b3JkcyA9IChpdGVtcykgPT4ge1xuICAgIHJldHVybiBpdGVtcy5tYXAoaXRlbSA9PiB7XG4gICAgICByZXR1cm4gaXRlbS5yZXBsYWNlKC9cXHxcXGQrJC8sIFwiXCIpO1xuICAgIH0pO1xuICB9O1xuXG4gIGNvbnN0IENPTlNUUlVDVE9SX0NBTEwgPSB7IHZhcmlhbnRzOiBbXG4gICAge1xuICAgICAgbWF0Y2g6IFtcbiAgICAgICAgL25ldy8sXG4gICAgICAgIHJlZ2V4LmNvbmNhdChXSElURVNQQUNFLCBcIitcIiksXG4gICAgICAgIC8vIHRvIHByZXZlbnQgYnVpbHQgaW5zIGZyb20gYmVpbmcgY29uZnVzZWQgYXMgdGhlIGNsYXNzIGNvbnN0cnVjdG9yIGNhbGxcbiAgICAgICAgcmVnZXguY29uY2F0KFwiKD8hXCIsIG5vcm1hbGl6ZUtleXdvcmRzKEJVSUxUX0lOUykuam9pbihcIlxcXFxifFwiKSwgXCJcXFxcYilcIiksXG4gICAgICAgIFBBU0NBTF9DQVNFX0NMQVNTX05BTUVfUkUsXG4gICAgICBdLFxuICAgICAgc2NvcGU6IHtcbiAgICAgICAgMTogXCJrZXl3b3JkXCIsXG4gICAgICAgIDQ6IFwidGl0bGUuY2xhc3NcIixcbiAgICAgIH0sXG4gICAgfVxuICBdIH07XG5cbiAgY29uc3QgQ09OU1RBTlRfUkVGRVJFTkNFID0gcmVnZXguY29uY2F0KElERU5UX1JFLCBcIlxcXFxiKD8hXFxcXCgpXCIpO1xuXG4gIGNvbnN0IExFRlRfQU5EX1JJR0hUX1NJREVfT0ZfRE9VQkxFX0NPTE9OID0geyB2YXJpYW50czogW1xuICAgIHtcbiAgICAgIG1hdGNoOiBbXG4gICAgICAgIHJlZ2V4LmNvbmNhdChcbiAgICAgICAgICAvOjovLFxuICAgICAgICAgIHJlZ2V4Lmxvb2thaGVhZCgvKD8hY2xhc3NcXGIpLylcbiAgICAgICAgKSxcbiAgICAgICAgQ09OU1RBTlRfUkVGRVJFTkNFLFxuICAgICAgXSxcbiAgICAgIHNjb3BlOiB7IDI6IFwidmFyaWFibGUuY29uc3RhbnRcIiwgfSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG1hdGNoOiBbXG4gICAgICAgIC86Oi8sXG4gICAgICAgIC9jbGFzcy8sXG4gICAgICBdLFxuICAgICAgc2NvcGU6IHsgMjogXCJ2YXJpYWJsZS5sYW5ndWFnZVwiLCB9LFxuICAgIH0sXG4gICAge1xuICAgICAgbWF0Y2g6IFtcbiAgICAgICAgUEFTQ0FMX0NBU0VfQ0xBU1NfTkFNRV9SRSxcbiAgICAgICAgcmVnZXguY29uY2F0KFxuICAgICAgICAgIC86Oi8sXG4gICAgICAgICAgcmVnZXgubG9va2FoZWFkKC8oPyFjbGFzc1xcYikvKVxuICAgICAgICApLFxuICAgICAgICBDT05TVEFOVF9SRUZFUkVOQ0UsXG4gICAgICBdLFxuICAgICAgc2NvcGU6IHtcbiAgICAgICAgMTogXCJ0aXRsZS5jbGFzc1wiLFxuICAgICAgICAzOiBcInZhcmlhYmxlLmNvbnN0YW50XCIsXG4gICAgICB9LFxuICAgIH0sXG4gICAge1xuICAgICAgbWF0Y2g6IFtcbiAgICAgICAgUEFTQ0FMX0NBU0VfQ0xBU1NfTkFNRV9SRSxcbiAgICAgICAgcmVnZXguY29uY2F0KFxuICAgICAgICAgIFwiOjpcIixcbiAgICAgICAgICByZWdleC5sb29rYWhlYWQoLyg/IWNsYXNzXFxiKS8pXG4gICAgICAgICksXG4gICAgICBdLFxuICAgICAgc2NvcGU6IHsgMTogXCJ0aXRsZS5jbGFzc1wiLCB9LFxuICAgIH0sXG4gICAge1xuICAgICAgbWF0Y2g6IFtcbiAgICAgICAgUEFTQ0FMX0NBU0VfQ0xBU1NfTkFNRV9SRSxcbiAgICAgICAgLzo6LyxcbiAgICAgICAgL2NsYXNzLyxcbiAgICAgIF0sXG4gICAgICBzY29wZToge1xuICAgICAgICAxOiBcInRpdGxlLmNsYXNzXCIsXG4gICAgICAgIDM6IFwidmFyaWFibGUubGFuZ3VhZ2VcIixcbiAgICAgIH0sXG4gICAgfVxuICBdIH07XG5cbiAgY29uc3QgTkFNRURfQVJHVU1FTlQgPSB7XG4gICAgc2NvcGU6ICdhdHRyJyxcbiAgICBtYXRjaDogcmVnZXguY29uY2F0KElERU5UX1JFLCByZWdleC5sb29rYWhlYWQoJzonKSwgcmVnZXgubG9va2FoZWFkKC8oPyE6OikvKSksXG4gIH07XG4gIGNvbnN0IFBBUkFNU19NT0RFID0ge1xuICAgIHJlbGV2YW5jZTogMCxcbiAgICBiZWdpbjogL1xcKC8sXG4gICAgZW5kOiAvXFwpLyxcbiAgICBrZXl3b3JkczogS0VZV09SRFMsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIE5BTUVEX0FSR1VNRU5ULFxuICAgICAgVkFSSUFCTEUsXG4gICAgICBMRUZUX0FORF9SSUdIVF9TSURFX09GX0RPVUJMRV9DT0xPTixcbiAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgICBTVFJJTkcsXG4gICAgICBOVU1CRVIsXG4gICAgICBDT05TVFJVQ1RPUl9DQUxMLFxuICAgIF0sXG4gIH07XG4gIGNvbnN0IEZVTkNUSU9OX0lOVk9LRSA9IHtcbiAgICByZWxldmFuY2U6IDAsXG4gICAgbWF0Y2g6IFtcbiAgICAgIC9cXGIvLFxuICAgICAgLy8gdG8gcHJldmVudCBrZXl3b3JkcyBmcm9tIGJlaW5nIGNvbmZ1c2VkIGFzIHRoZSBmdW5jdGlvbiB0aXRsZVxuICAgICAgcmVnZXguY29uY2F0KFwiKD8hZm5cXFxcYnxmdW5jdGlvblxcXFxifFwiLCBub3JtYWxpemVLZXl3b3JkcyhLV1MpLmpvaW4oXCJcXFxcYnxcIiksIFwifFwiLCBub3JtYWxpemVLZXl3b3JkcyhCVUlMVF9JTlMpLmpvaW4oXCJcXFxcYnxcIiksIFwiXFxcXGIpXCIpLFxuICAgICAgSURFTlRfUkUsXG4gICAgICByZWdleC5jb25jYXQoV0hJVEVTUEFDRSwgXCIqXCIpLFxuICAgICAgcmVnZXgubG9va2FoZWFkKC8oPz1cXCgpLylcbiAgICBdLFxuICAgIHNjb3BlOiB7IDM6IFwidGl0bGUuZnVuY3Rpb24uaW52b2tlXCIsIH0sXG4gICAgY29udGFpbnM6IFsgUEFSQU1TX01PREUgXVxuICB9O1xuICBQQVJBTVNfTU9ERS5jb250YWlucy5wdXNoKEZVTkNUSU9OX0lOVk9LRSk7XG5cbiAgY29uc3QgQVRUUklCVVRFX0NPTlRBSU5TID0gW1xuICAgIE5BTUVEX0FSR1VNRU5ULFxuICAgIExFRlRfQU5EX1JJR0hUX1NJREVfT0ZfRE9VQkxFX0NPTE9OLFxuICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgU1RSSU5HLFxuICAgIE5VTUJFUixcbiAgICBDT05TVFJVQ1RPUl9DQUxMLFxuICBdO1xuXG4gIGNvbnN0IEFUVFJJQlVURVMgPSB7XG4gICAgYmVnaW46IHJlZ2V4LmNvbmNhdCgvI1xcW1xccypcXFxcPy8sXG4gICAgICByZWdleC5laXRoZXIoXG4gICAgICAgIFBBU0NBTF9DQVNFX0NMQVNTX05BTUVfUkUsXG4gICAgICAgIFVQQ0FTRV9OQU1FX1JFXG4gICAgICApXG4gICAgKSxcbiAgICBiZWdpblNjb3BlOiBcIm1ldGFcIixcbiAgICBlbmQ6IC9dLyxcbiAgICBlbmRTY29wZTogXCJtZXRhXCIsXG4gICAga2V5d29yZHM6IHtcbiAgICAgIGxpdGVyYWw6IExJVEVSQUxTLFxuICAgICAga2V5d29yZDogW1xuICAgICAgICAnbmV3JyxcbiAgICAgICAgJ2FycmF5JyxcbiAgICAgIF1cbiAgICB9LFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvXFxbLyxcbiAgICAgICAgZW5kOiAvXS8sXG4gICAgICAgIGtleXdvcmRzOiB7XG4gICAgICAgICAgbGl0ZXJhbDogTElURVJBTFMsXG4gICAgICAgICAga2V5d29yZDogW1xuICAgICAgICAgICAgJ25ldycsXG4gICAgICAgICAgICAnYXJyYXknLFxuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAnc2VsZicsXG4gICAgICAgICAgLi4uQVRUUklCVVRFX0NPTlRBSU5TLFxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgLi4uQVRUUklCVVRFX0NPTlRBSU5TLFxuICAgICAge1xuICAgICAgICBzY29wZTogJ21ldGEnLFxuICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgIHsgbWF0Y2g6IFBBU0NBTF9DQVNFX0NMQVNTX05BTUVfUkUgfSxcbiAgICAgICAgICB7IG1hdGNoOiBVUENBU0VfTkFNRV9SRSB9XG4gICAgICAgIF1cbiAgICAgIH1cbiAgICBdXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBjYXNlX2luc2Vuc2l0aXZlOiBmYWxzZSxcbiAgICBrZXl3b3JkczogS0VZV09SRFMsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIEFUVFJJQlVURVMsXG4gICAgICBobGpzLkhBU0hfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5DT01NRU5UKCcvLycsICckJyksXG4gICAgICBobGpzLkNPTU1FTlQoXG4gICAgICAgICcvXFxcXConLFxuICAgICAgICAnXFxcXCovJyxcbiAgICAgICAgeyBjb250YWluczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHNjb3BlOiAnZG9jdGFnJyxcbiAgICAgICAgICAgIG1hdGNoOiAnQFtBLVphLXpdKydcbiAgICAgICAgICB9XG4gICAgICAgIF0gfVxuICAgICAgKSxcbiAgICAgIHtcbiAgICAgICAgbWF0Y2g6IC9fX2hhbHRfY29tcGlsZXJcXChcXCk7LyxcbiAgICAgICAga2V5d29yZHM6ICdfX2hhbHRfY29tcGlsZXInLFxuICAgICAgICBzdGFydHM6IHtcbiAgICAgICAgICBzY29wZTogXCJjb21tZW50XCIsXG4gICAgICAgICAgZW5kOiBobGpzLk1BVENIX05PVEhJTkdfUkUsXG4gICAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbWF0Y2g6IC9cXD8+LyxcbiAgICAgICAgICAgICAgc2NvcGU6IFwibWV0YVwiLFxuICAgICAgICAgICAgICBlbmRzUGFyZW50OiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgUFJFUFJPQ0VTU09SLFxuICAgICAge1xuICAgICAgICBzY29wZTogJ3ZhcmlhYmxlLmxhbmd1YWdlJyxcbiAgICAgICAgbWF0Y2g6IC9cXCR0aGlzXFxiL1xuICAgICAgfSxcbiAgICAgIFZBUklBQkxFLFxuICAgICAgRlVOQ1RJT05fSU5WT0tFLFxuICAgICAgTEVGVF9BTkRfUklHSFRfU0lERV9PRl9ET1VCTEVfQ09MT04sXG4gICAgICB7XG4gICAgICAgIG1hdGNoOiBbXG4gICAgICAgICAgL2NvbnN0LyxcbiAgICAgICAgICAvXFxzLyxcbiAgICAgICAgICBJREVOVF9SRSxcbiAgICAgICAgXSxcbiAgICAgICAgc2NvcGU6IHtcbiAgICAgICAgICAxOiBcImtleXdvcmRcIixcbiAgICAgICAgICAzOiBcInZhcmlhYmxlLmNvbnN0YW50XCIsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgQ09OU1RSVUNUT1JfQ0FMTCxcbiAgICAgIHtcbiAgICAgICAgc2NvcGU6ICdmdW5jdGlvbicsXG4gICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ2ZuIGZ1bmN0aW9uJyxcbiAgICAgICAgZW5kOiAvWzt7XS8sXG4gICAgICAgIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgIGlsbGVnYWw6ICdbJCVcXFxcW10nLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIHsgYmVnaW5LZXl3b3JkczogJ3VzZScsIH0sXG4gICAgICAgICAgaGxqcy5VTkRFUlNDT1JFX1RJVExFX01PREUsXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46ICc9PicsIC8vIE5vIG1hcmt1cCwganVzdCBhIHJlbGV2YW5jZSBib29zdGVyXG4gICAgICAgICAgICBlbmRzUGFyZW50OiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzY29wZTogJ3BhcmFtcycsXG4gICAgICAgICAgICBiZWdpbjogJ1xcXFwoJyxcbiAgICAgICAgICAgIGVuZDogJ1xcXFwpJyxcbiAgICAgICAgICAgIGV4Y2x1ZGVCZWdpbjogdHJ1ZSxcbiAgICAgICAgICAgIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgICAgICBrZXl3b3JkczogS0VZV09SRFMsXG4gICAgICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICAgICAnc2VsZicsXG4gICAgICAgICAgICAgIEFUVFJJQlVURVMsXG4gICAgICAgICAgICAgIFZBUklBQkxFLFxuICAgICAgICAgICAgICBMRUZUX0FORF9SSUdIVF9TSURFX09GX0RPVUJMRV9DT0xPTixcbiAgICAgICAgICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICAgICAgICAgICAgU1RSSU5HLFxuICAgICAgICAgICAgICBOVU1CRVJcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBzY29wZTogJ2NsYXNzJyxcbiAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbktleXdvcmRzOiBcImVudW1cIixcbiAgICAgICAgICAgIGlsbGVnYWw6IC9bKCRcIl0vXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbktleXdvcmRzOiBcImNsYXNzIGludGVyZmFjZSB0cmFpdFwiLFxuICAgICAgICAgICAgaWxsZWdhbDogL1s6KCRcIl0vXG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgIGVuZDogL1xcey8sXG4gICAgICAgIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgeyBiZWdpbktleXdvcmRzOiAnZXh0ZW5kcyBpbXBsZW1lbnRzJyB9LFxuICAgICAgICAgIGhsanMuVU5ERVJTQ09SRV9USVRMRV9NT0RFXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICAvLyBib3RoIHVzZSBhbmQgbmFtZXNwYWNlIHN0aWxsIHVzZSBcIm9sZCBzdHlsZVwiIHJ1bGVzICh2cyBtdWx0aS1tYXRjaClcbiAgICAgIC8vIGJlY2F1c2UgdGhlIG5hbWVzcGFjZSBuYW1lIGNhbiBpbmNsdWRlIGBcXGAgYW5kIHdlIHN0aWxsIHdhbnQgZWFjaFxuICAgICAgLy8gZWxlbWVudCB0byBiZSB0cmVhdGVkIGFzIGl0cyBvd24gKmluZGl2aWR1YWwqIHRpdGxlXG4gICAgICB7XG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICduYW1lc3BhY2UnLFxuICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgIGVuZDogJzsnLFxuICAgICAgICBpbGxlZ2FsOiAvWy4nXS8sXG4gICAgICAgIGNvbnRhaW5zOiBbIGhsanMuaW5oZXJpdChobGpzLlVOREVSU0NPUkVfVElUTEVfTU9ERSwgeyBzY29wZTogXCJ0aXRsZS5jbGFzc1wiIH0pIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICd1c2UnLFxuICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgIGVuZDogJzsnLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIC8vIFRPRE86IHRpdGxlLmZ1bmN0aW9uIHZzIHRpdGxlLmNsYXNzXG4gICAgICAgICAge1xuICAgICAgICAgICAgbWF0Y2g6IC9cXGIoYXN8Y29uc3R8ZnVuY3Rpb24pXFxiLyxcbiAgICAgICAgICAgIHNjb3BlOiBcImtleXdvcmRcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgLy8gVE9ETzogY291bGQgYmUgdGl0bGUuY2xhc3Mgb3IgdGl0bGUuZnVuY3Rpb25cbiAgICAgICAgICBobGpzLlVOREVSU0NPUkVfVElUTEVfTU9ERVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgU1RSSU5HLFxuICAgICAgTlVNQkVSLFxuICAgIF1cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBwaHA7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///357\n')},371:module=>{eval("/*\nLanguage: Node REPL\nRequires: javascript.js\nAuthor: Marat Nagayev \nCategory: scripting\n*/\n\n/** @type LanguageFn */\nfunction nodeRepl(hljs) {\n return {\n name: 'Node REPL',\n contains: [\n {\n className: 'meta.prompt',\n starts: {\n // a space separates the REPL prefix from the actual code\n // this is purely for cleaner HTML output\n end: / |$/,\n starts: {\n end: '$',\n subLanguage: 'javascript'\n }\n },\n variants: [\n { begin: /^>(?=[ ]|$)/ },\n { begin: /^\\.\\.\\.(?=[ ]|$)/ }\n ]\n }\n ]\n };\n}\n\nmodule.exports = nodeRepl;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzcxLmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxZQUFZLHNCQUFzQjtBQUNsQyxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL29ic2lkaWFuLW1pbmRtYXAtbmV4dGdlbi8uL25vZGVfbW9kdWxlcy8ucG5wbS9oaWdobGlnaHQuanNAMTEuMTEuMS9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvbm9kZS1yZXBsLmpzP2NkMmEiXSwic291cmNlc0NvbnRlbnQiOlsiLypcbkxhbmd1YWdlOiBOb2RlIFJFUExcblJlcXVpcmVzOiBqYXZhc2NyaXB0LmpzXG5BdXRob3I6IE1hcmF0IE5hZ2F5ZXYgPG5hZ2Fldm10QHlhbmRleC5ydT5cbkNhdGVnb3J5OiBzY3JpcHRpbmdcbiovXG5cbi8qKiBAdHlwZSBMYW5ndWFnZUZuICovXG5mdW5jdGlvbiBub2RlUmVwbChobGpzKSB7XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ05vZGUgUkVQTCcsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbWV0YS5wcm9tcHQnLFxuICAgICAgICBzdGFydHM6IHtcbiAgICAgICAgICAvLyBhIHNwYWNlIHNlcGFyYXRlcyB0aGUgUkVQTCBwcmVmaXggZnJvbSB0aGUgYWN0dWFsIGNvZGVcbiAgICAgICAgICAvLyB0aGlzIGlzIHB1cmVseSBmb3IgY2xlYW5lciBIVE1MIG91dHB1dFxuICAgICAgICAgIGVuZDogLyB8JC8sXG4gICAgICAgICAgc3RhcnRzOiB7XG4gICAgICAgICAgICBlbmQ6ICckJyxcbiAgICAgICAgICAgIHN1Ykxhbmd1YWdlOiAnamF2YXNjcmlwdCdcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAgeyBiZWdpbjogL14+KD89WyBdfCQpLyB9LFxuICAgICAgICAgIHsgYmVnaW46IC9eXFwuXFwuXFwuKD89WyBdfCQpLyB9XG4gICAgICAgIF1cbiAgICAgIH1cbiAgICBdXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbm9kZVJlcGw7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///371\n")},384:module=>{eval("/*\nLanguage: Matlab\nAuthor: Denis Bardadym \nContributors: Eugene Nizhibitsky , Egor Rogov \nWebsite: https://www.mathworks.com/products/matlab.html\nCategory: scientific\n*/\n\n/*\n Formal syntax is not published, helpful link:\n https://github.com/kornilova-l/matlab-IntelliJ-plugin/blob/master/src/main/grammar/Matlab.bnf\n*/\nfunction matlab(hljs) {\n const TRANSPOSE_RE = '(\\'|\\\\.\\')+';\n const TRANSPOSE = {\n relevance: 0,\n contains: [ { begin: TRANSPOSE_RE } ]\n };\n\n return {\n name: 'Matlab',\n keywords: {\n keyword:\n 'arguments break case catch classdef continue else elseif end enumeration events for function '\n + 'global if methods otherwise parfor persistent properties return spmd switch try while',\n built_in:\n 'sin sind sinh asin asind asinh cos cosd cosh acos acosd acosh tan tand tanh atan '\n + 'atand atan2 atanh sec secd sech asec asecd asech csc cscd csch acsc acscd acsch cot '\n + 'cotd coth acot acotd acoth hypot exp expm1 log log1p log10 log2 pow2 realpow reallog '\n + 'realsqrt sqrt nthroot nextpow2 abs angle complex conj imag real unwrap isreal '\n + 'cplxpair fix floor ceil round mod rem sign airy besselj bessely besselh besseli '\n + 'besselk beta betainc betaln ellipj ellipke erf erfc erfcx erfinv expint gamma '\n + 'gammainc gammaln psi legendre cross dot factor isprime primes gcd lcm rat rats perms '\n + 'nchoosek factorial cart2sph cart2pol pol2cart sph2cart hsv2rgb rgb2hsv zeros ones '\n + 'eye repmat rand randn linspace logspace freqspace meshgrid accumarray size length '\n + 'ndims numel disp isempty isequal isequalwithequalnans cat reshape diag blkdiag tril '\n + 'triu fliplr flipud flipdim rot90 find sub2ind ind2sub bsxfun ndgrid permute ipermute '\n + 'shiftdim circshift squeeze isscalar isvector ans eps realmax realmin pi i|0 inf nan '\n + 'isnan isinf isfinite j|0 why compan gallery hadamard hankel hilb invhilb magic pascal '\n + 'rosser toeplitz vander wilkinson max min nanmax nanmin mean nanmean type table '\n + 'readtable writetable sortrows sort figure plot plot3 scatter scatter3 cellfun '\n + 'legend intersect ismember procrustes hold num2cell '\n },\n illegal: '(//|\"|#|/\\\\*|\\\\s+/\\\\w+)',\n contains: [\n {\n className: 'function',\n beginKeywords: 'function',\n end: '$',\n contains: [\n hljs.UNDERSCORE_TITLE_MODE,\n {\n className: 'params',\n variants: [\n {\n begin: '\\\\(',\n end: '\\\\)'\n },\n {\n begin: '\\\\[',\n end: '\\\\]'\n }\n ]\n }\n ]\n },\n {\n className: 'built_in',\n begin: /true|false/,\n relevance: 0,\n starts: TRANSPOSE\n },\n {\n begin: '[a-zA-Z][a-zA-Z_0-9]*' + TRANSPOSE_RE,\n relevance: 0\n },\n {\n className: 'number',\n begin: hljs.C_NUMBER_RE,\n relevance: 0,\n starts: TRANSPOSE\n },\n {\n className: 'string',\n begin: '\\'',\n end: '\\'',\n contains: [ { begin: '\\'\\'' } ]\n },\n {\n begin: /\\]|\\}|\\)/,\n relevance: 0,\n starts: TRANSPOSE\n },\n {\n className: 'string',\n begin: '\"',\n end: '\"',\n contains: [ { begin: '\"\"' } ],\n starts: TRANSPOSE\n },\n hljs.COMMENT('^\\\\s*%\\\\{\\\\s*$', '^\\\\s*%\\\\}\\\\s*$'),\n hljs.COMMENT('%', '$')\n ]\n };\n}\n\nmodule.exports = matlab;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzg0LmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0Isc0JBQXNCO0FBQ3hDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLGdCQUFnQjtBQUN0QyxPQUFPO0FBQ1A7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQixjQUFjO0FBQ3BDO0FBQ0EsT0FBTztBQUNQLDZCQUE2QixrQkFBa0I7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9vYnNpZGlhbi1taW5kbWFwLW5leHRnZW4vLi9ub2RlX21vZHVsZXMvLnBucG0vaGlnaGxpZ2h0LmpzQDExLjExLjEvbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL21hdGxhYi5qcz9lYzZhIl0sInNvdXJjZXNDb250ZW50IjpbIi8qXG5MYW5ndWFnZTogTWF0bGFiXG5BdXRob3I6IERlbmlzIEJhcmRhZHltIDxiYXJkYWR5bWNoaWtAZ21haWwuY29tPlxuQ29udHJpYnV0b3JzOiBFdWdlbmUgTml6aGliaXRza3kgPG5pemhpYml0c2t5QHlhLnJ1PiwgRWdvciBSb2dvdiA8ZS5yb2dvdkBwb3N0Z3Jlc3Byby5ydT5cbldlYnNpdGU6IGh0dHBzOi8vd3d3Lm1hdGh3b3Jrcy5jb20vcHJvZHVjdHMvbWF0bGFiLmh0bWxcbkNhdGVnb3J5OiBzY2llbnRpZmljXG4qL1xuXG4vKlxuICBGb3JtYWwgc3ludGF4IGlzIG5vdCBwdWJsaXNoZWQsIGhlbHBmdWwgbGluazpcbiAgaHR0cHM6Ly9naXRodWIuY29tL2tvcm5pbG92YS1sL21hdGxhYi1JbnRlbGxpSi1wbHVnaW4vYmxvYi9tYXN0ZXIvc3JjL21haW4vZ3JhbW1hci9NYXRsYWIuYm5mXG4qL1xuZnVuY3Rpb24gbWF0bGFiKGhsanMpIHtcbiAgY29uc3QgVFJBTlNQT1NFX1JFID0gJyhcXCd8XFxcXC5cXCcpKyc7XG4gIGNvbnN0IFRSQU5TUE9TRSA9IHtcbiAgICByZWxldmFuY2U6IDAsXG4gICAgY29udGFpbnM6IFsgeyBiZWdpbjogVFJBTlNQT1NFX1JFIH0gXVxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogJ01hdGxhYicsXG4gICAga2V5d29yZHM6IHtcbiAgICAgIGtleXdvcmQ6XG4gICAgICAgICdhcmd1bWVudHMgYnJlYWsgY2FzZSBjYXRjaCBjbGFzc2RlZiBjb250aW51ZSBlbHNlIGVsc2VpZiBlbmQgZW51bWVyYXRpb24gZXZlbnRzIGZvciBmdW5jdGlvbiAnXG4gICAgICAgICsgJ2dsb2JhbCBpZiBtZXRob2RzIG90aGVyd2lzZSBwYXJmb3IgcGVyc2lzdGVudCBwcm9wZXJ0aWVzIHJldHVybiBzcG1kIHN3aXRjaCB0cnkgd2hpbGUnLFxuICAgICAgYnVpbHRfaW46XG4gICAgICAgICdzaW4gc2luZCBzaW5oIGFzaW4gYXNpbmQgYXNpbmggY29zIGNvc2QgY29zaCBhY29zIGFjb3NkIGFjb3NoIHRhbiB0YW5kIHRhbmggYXRhbiAnXG4gICAgICAgICsgJ2F0YW5kIGF0YW4yIGF0YW5oIHNlYyBzZWNkIHNlY2ggYXNlYyBhc2VjZCBhc2VjaCBjc2MgY3NjZCBjc2NoIGFjc2MgYWNzY2QgYWNzY2ggY290ICdcbiAgICAgICAgKyAnY290ZCBjb3RoIGFjb3QgYWNvdGQgYWNvdGggaHlwb3QgZXhwIGV4cG0xIGxvZyBsb2cxcCBsb2cxMCBsb2cyIHBvdzIgcmVhbHBvdyByZWFsbG9nICdcbiAgICAgICAgKyAncmVhbHNxcnQgc3FydCBudGhyb290IG5leHRwb3cyIGFicyBhbmdsZSBjb21wbGV4IGNvbmogaW1hZyByZWFsIHVud3JhcCBpc3JlYWwgJ1xuICAgICAgICArICdjcGx4cGFpciBmaXggZmxvb3IgY2VpbCByb3VuZCBtb2QgcmVtIHNpZ24gYWlyeSBiZXNzZWxqIGJlc3NlbHkgYmVzc2VsaCBiZXNzZWxpICdcbiAgICAgICAgKyAnYmVzc2VsayBiZXRhIGJldGFpbmMgYmV0YWxuIGVsbGlwaiBlbGxpcGtlIGVyZiBlcmZjIGVyZmN4IGVyZmludiBleHBpbnQgZ2FtbWEgJ1xuICAgICAgICArICdnYW1tYWluYyBnYW1tYWxuIHBzaSBsZWdlbmRyZSBjcm9zcyBkb3QgZmFjdG9yIGlzcHJpbWUgcHJpbWVzIGdjZCBsY20gcmF0IHJhdHMgcGVybXMgJ1xuICAgICAgICArICduY2hvb3NlayBmYWN0b3JpYWwgY2FydDJzcGggY2FydDJwb2wgcG9sMmNhcnQgc3BoMmNhcnQgaHN2MnJnYiByZ2IyaHN2IHplcm9zIG9uZXMgJ1xuICAgICAgICArICdleWUgcmVwbWF0IHJhbmQgcmFuZG4gbGluc3BhY2UgbG9nc3BhY2UgZnJlcXNwYWNlIG1lc2hncmlkIGFjY3VtYXJyYXkgc2l6ZSBsZW5ndGggJ1xuICAgICAgICArICduZGltcyBudW1lbCBkaXNwIGlzZW1wdHkgaXNlcXVhbCBpc2VxdWFsd2l0aGVxdWFsbmFucyBjYXQgcmVzaGFwZSBkaWFnIGJsa2RpYWcgdHJpbCAnXG4gICAgICAgICsgJ3RyaXUgZmxpcGxyIGZsaXB1ZCBmbGlwZGltIHJvdDkwIGZpbmQgc3ViMmluZCBpbmQyc3ViIGJzeGZ1biBuZGdyaWQgcGVybXV0ZSBpcGVybXV0ZSAnXG4gICAgICAgICsgJ3NoaWZ0ZGltIGNpcmNzaGlmdCBzcXVlZXplIGlzc2NhbGFyIGlzdmVjdG9yIGFucyBlcHMgcmVhbG1heCByZWFsbWluIHBpIGl8MCBpbmYgbmFuICdcbiAgICAgICAgKyAnaXNuYW4gaXNpbmYgaXNmaW5pdGUganwwIHdoeSBjb21wYW4gZ2FsbGVyeSBoYWRhbWFyZCBoYW5rZWwgaGlsYiBpbnZoaWxiIG1hZ2ljIHBhc2NhbCAnXG4gICAgICAgICsgJ3Jvc3NlciB0b2VwbGl0eiB2YW5kZXIgd2lsa2luc29uIG1heCBtaW4gbmFubWF4IG5hbm1pbiBtZWFuIG5hbm1lYW4gdHlwZSB0YWJsZSAnXG4gICAgICAgICsgJ3JlYWR0YWJsZSB3cml0ZXRhYmxlIHNvcnRyb3dzIHNvcnQgZmlndXJlIHBsb3QgcGxvdDMgc2NhdHRlciBzY2F0dGVyMyBjZWxsZnVuICdcbiAgICAgICAgKyAnbGVnZW5kIGludGVyc2VjdCBpc21lbWJlciBwcm9jcnVzdGVzIGhvbGQgbnVtMmNlbGwgJ1xuICAgIH0sXG4gICAgaWxsZWdhbDogJygvL3xcInwjfC9cXFxcKnxcXFxccysvXFxcXHcrKScsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnZnVuY3Rpb24nLFxuICAgICAgICBiZWdpbktleXdvcmRzOiAnZnVuY3Rpb24nLFxuICAgICAgICBlbmQ6ICckJyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBobGpzLlVOREVSU0NPUkVfVElUTEVfTU9ERSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdwYXJhbXMnLFxuICAgICAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJlZ2luOiAnXFxcXCgnLFxuICAgICAgICAgICAgICAgIGVuZDogJ1xcXFwpJ1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYmVnaW46ICdcXFxcWycsXG4gICAgICAgICAgICAgICAgZW5kOiAnXFxcXF0nXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2J1aWx0X2luJyxcbiAgICAgICAgYmVnaW46IC90cnVlfGZhbHNlLyxcbiAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICBzdGFydHM6IFRSQU5TUE9TRVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdbYS16QS1aXVthLXpBLVpfMC05XSonICsgVFJBTlNQT1NFX1JFLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgICAgIGJlZ2luOiBobGpzLkNfTlVNQkVSX1JFLFxuICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgIHN0YXJ0czogVFJBTlNQT1NFXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICBiZWdpbjogJ1xcJycsXG4gICAgICAgIGVuZDogJ1xcJycsXG4gICAgICAgIGNvbnRhaW5zOiBbIHsgYmVnaW46ICdcXCdcXCcnIH0gXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC9cXF18XFx9fFxcKS8sXG4gICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgc3RhcnRzOiBUUkFOU1BPU0VcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgIGJlZ2luOiAnXCInLFxuICAgICAgICBlbmQ6ICdcIicsXG4gICAgICAgIGNvbnRhaW5zOiBbIHsgYmVnaW46ICdcIlwiJyB9IF0sXG4gICAgICAgIHN0YXJ0czogVFJBTlNQT1NFXG4gICAgICB9LFxuICAgICAgaGxqcy5DT01NRU5UKCdeXFxcXHMqJVxcXFx7XFxcXHMqJCcsICdeXFxcXHMqJVxcXFx9XFxcXHMqJCcpLFxuICAgICAgaGxqcy5DT01NRU5UKCclJywgJyQnKVxuICAgIF1cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXRsYWI7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///384\n")},393:(module,__unused_webpack_exports,__webpack_require__)=>{"use strict";eval("\n\nvar Type = __webpack_require__(2500);\n\nmodule.exports = new Type('tag:yaml.org,2002:map', {\n kind: 'mapping',\n construct: function (data) { return data !== null ? data : {}; }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzkzLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFdBQVcsbUJBQU8sQ0FBQyxJQUFTOztBQUU1QjtBQUNBO0FBQ0EsK0JBQStCO0FBQy9CLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9vYnNpZGlhbi1taW5kbWFwLW5leHRnZW4vLi9ub2RlX21vZHVsZXMvLnBucG0vanMteWFtbEAzLjE0LjEvbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS9tYXAuanM/YTBlNSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBUeXBlID0gcmVxdWlyZSgnLi4vdHlwZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG5ldyBUeXBlKCd0YWc6eWFtbC5vcmcsMjAwMjptYXAnLCB7XG4gIGtpbmQ6ICdtYXBwaW5nJyxcbiAgY29uc3RydWN0OiBmdW5jdGlvbiAoZGF0YSkgeyByZXR1cm4gZGF0YSAhPT0gbnVsbCA/IGRhdGEgOiB7fTsgfVxufSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///393\n")},486:module=>{eval('/*\nLanguage: Golo\nAuthor: Philippe Charriere \nDescription: a lightweight dynamic language for the JVM\nWebsite: http://golo-lang.org/\nCategory: system\n*/\n\nfunction golo(hljs) {\n const KEYWORDS = [\n "println",\n "readln",\n "print",\n "import",\n "module",\n "function",\n "local",\n "return",\n "let",\n "var",\n "while",\n "for",\n "foreach",\n "times",\n "in",\n "case",\n "when",\n "match",\n "with",\n "break",\n "continue",\n "augment",\n "augmentation",\n "each",\n "find",\n "filter",\n "reduce",\n "if",\n "then",\n "else",\n "otherwise",\n "try",\n "catch",\n "finally",\n "raise",\n "throw",\n "orIfNull",\n "DynamicObject|10",\n "DynamicVariable",\n "struct",\n "Observable",\n "map",\n "set",\n "vector",\n "list",\n "array"\n ];\n\n return {\n name: \'Golo\',\n keywords: {\n keyword: KEYWORDS,\n literal: [\n "true",\n "false",\n "null"\n ]\n },\n contains: [\n hljs.HASH_COMMENT_MODE,\n hljs.QUOTE_STRING_MODE,\n hljs.C_NUMBER_MODE,\n {\n className: \'meta\',\n begin: \'@[A-Za-z]+\'\n }\n ]\n };\n}\n\nmodule.exports = golo;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDg2LmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vb2JzaWRpYW4tbWluZG1hcC1uZXh0Z2VuLy4vbm9kZV9tb2R1bGVzLy5wbnBtL2hpZ2hsaWdodC5qc0AxMS4xMS4xL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9nb2xvLmpzP2VkMjAiXSwic291cmNlc0NvbnRlbnQiOlsiLypcbkxhbmd1YWdlOiBHb2xvXG5BdXRob3I6IFBoaWxpcHBlIENoYXJyaWVyZSA8cGguY2hhcnJpZXJlQGdtYWlsLmNvbT5cbkRlc2NyaXB0aW9uOiBhIGxpZ2h0d2VpZ2h0IGR5bmFtaWMgbGFuZ3VhZ2UgZm9yIHRoZSBKVk1cbldlYnNpdGU6IGh0dHA6Ly9nb2xvLWxhbmcub3JnL1xuQ2F0ZWdvcnk6IHN5c3RlbVxuKi9cblxuZnVuY3Rpb24gZ29sbyhobGpzKSB7XG4gIGNvbnN0IEtFWVdPUkRTID0gW1xuICAgIFwicHJpbnRsblwiLFxuICAgIFwicmVhZGxuXCIsXG4gICAgXCJwcmludFwiLFxuICAgIFwiaW1wb3J0XCIsXG4gICAgXCJtb2R1bGVcIixcbiAgICBcImZ1bmN0aW9uXCIsXG4gICAgXCJsb2NhbFwiLFxuICAgIFwicmV0dXJuXCIsXG4gICAgXCJsZXRcIixcbiAgICBcInZhclwiLFxuICAgIFwid2hpbGVcIixcbiAgICBcImZvclwiLFxuICAgIFwiZm9yZWFjaFwiLFxuICAgIFwidGltZXNcIixcbiAgICBcImluXCIsXG4gICAgXCJjYXNlXCIsXG4gICAgXCJ3aGVuXCIsXG4gICAgXCJtYXRjaFwiLFxuICAgIFwid2l0aFwiLFxuICAgIFwiYnJlYWtcIixcbiAgICBcImNvbnRpbnVlXCIsXG4gICAgXCJhdWdtZW50XCIsXG4gICAgXCJhdWdtZW50YXRpb25cIixcbiAgICBcImVhY2hcIixcbiAgICBcImZpbmRcIixcbiAgICBcImZpbHRlclwiLFxuICAgIFwicmVkdWNlXCIsXG4gICAgXCJpZlwiLFxuICAgIFwidGhlblwiLFxuICAgIFwiZWxzZVwiLFxuICAgIFwib3RoZXJ3aXNlXCIsXG4gICAgXCJ0cnlcIixcbiAgICBcImNhdGNoXCIsXG4gICAgXCJmaW5hbGx5XCIsXG4gICAgXCJyYWlzZVwiLFxuICAgIFwidGhyb3dcIixcbiAgICBcIm9ySWZOdWxsXCIsXG4gICAgXCJEeW5hbWljT2JqZWN0fDEwXCIsXG4gICAgXCJEeW5hbWljVmFyaWFibGVcIixcbiAgICBcInN0cnVjdFwiLFxuICAgIFwiT2JzZXJ2YWJsZVwiLFxuICAgIFwibWFwXCIsXG4gICAgXCJzZXRcIixcbiAgICBcInZlY3RvclwiLFxuICAgIFwibGlzdFwiLFxuICAgIFwiYXJyYXlcIlxuICBdO1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogJ0dvbG8nLFxuICAgIGtleXdvcmRzOiB7XG4gICAgICBrZXl3b3JkOiBLRVlXT1JEUyxcbiAgICAgIGxpdGVyYWw6IFtcbiAgICAgICAgXCJ0cnVlXCIsXG4gICAgICAgIFwiZmFsc2VcIixcbiAgICAgICAgXCJudWxsXCJcbiAgICAgIF1cbiAgICB9LFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkhBU0hfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgIGhsanMuQ19OVU1CRVJfTU9ERSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgICAgIGJlZ2luOiAnQFtBLVphLXpdKydcbiAgICAgIH1cbiAgICBdXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ29sbztcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///486\n')},509:module=>{eval("/*\nLanguage: Python REPL\nRequires: python.js\nAuthor: Josh Goebel \nCategory: common\n*/\n\nfunction pythonRepl(hljs) {\n return {\n aliases: [ 'pycon' ],\n contains: [\n {\n className: 'meta.prompt',\n starts: {\n // a space separates the REPL prefix from the actual code\n // this is purely for cleaner HTML output\n end: / |$/,\n starts: {\n end: '$',\n subLanguage: 'python'\n }\n },\n variants: [\n { begin: /^>>>(?=[ ]|$)/ },\n { begin: /^\\.\\.\\.(?=[ ]|$)/ }\n ]\n }\n ]\n };\n}\n\nmodule.exports = pythonRepl;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTA5LmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsWUFBWSx3QkFBd0I7QUFDcEMsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9vYnNpZGlhbi1taW5kbWFwLW5leHRnZW4vLi9ub2RlX21vZHVsZXMvLnBucG0vaGlnaGxpZ2h0LmpzQDExLjExLjEvbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3B5dGhvbi1yZXBsLmpzPzVkYTkiXSwic291cmNlc0NvbnRlbnQiOlsiLypcbkxhbmd1YWdlOiBQeXRob24gUkVQTFxuUmVxdWlyZXM6IHB5dGhvbi5qc1xuQXV0aG9yOiBKb3NoIEdvZWJlbCA8aGVsbG9Aam9zaGdvZWJlbC5jb20+XG5DYXRlZ29yeTogY29tbW9uXG4qL1xuXG5mdW5jdGlvbiBweXRob25SZXBsKGhsanMpIHtcbiAgcmV0dXJuIHtcbiAgICBhbGlhc2VzOiBbICdweWNvbicgXSxcbiAgICBjb250YWluczogW1xuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdtZXRhLnByb21wdCcsXG4gICAgICAgIHN0YXJ0czoge1xuICAgICAgICAgIC8vIGEgc3BhY2Ugc2VwYXJhdGVzIHRoZSBSRVBMIHByZWZpeCBmcm9tIHRoZSBhY3R1YWwgY29kZVxuICAgICAgICAgIC8vIHRoaXMgaXMgcHVyZWx5IGZvciBjbGVhbmVyIEhUTUwgb3V0cHV0XG4gICAgICAgICAgZW5kOiAvIHwkLyxcbiAgICAgICAgICBzdGFydHM6IHtcbiAgICAgICAgICAgIGVuZDogJyQnLFxuICAgICAgICAgICAgc3ViTGFuZ3VhZ2U6ICdweXRob24nXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgIHsgYmVnaW46IC9ePj4+KD89WyBdfCQpLyB9LFxuICAgICAgICAgIHsgYmVnaW46IC9eXFwuXFwuXFwuKD89WyBdfCQpLyB9XG4gICAgICAgIF1cbiAgICAgIH1cbiAgICBdXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcHl0aG9uUmVwbDtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///509\n")},520:module=>{eval('/*\nLanguage: Clean\nAuthor: Camil Staps \nCategory: functional\nWebsite: http://clean.cs.ru.nl\n*/\n\n/** @type LanguageFn */\nfunction clean(hljs) {\n const KEYWORDS = [\n "if",\n "let",\n "in",\n "with",\n "where",\n "case",\n "of",\n "class",\n "instance",\n "otherwise",\n "implementation",\n "definition",\n "system",\n "module",\n "from",\n "import",\n "qualified",\n "as",\n "special",\n "code",\n "inline",\n "foreign",\n "export",\n "ccall",\n "stdcall",\n "generic",\n "derive",\n "infix",\n "infixl",\n "infixr"\n ];\n return {\n name: \'Clean\',\n aliases: [\n \'icl\',\n \'dcl\'\n ],\n keywords: {\n keyword: KEYWORDS,\n built_in:\n \'Int Real Char Bool\',\n literal:\n \'True False\'\n },\n contains: [\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE,\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE,\n hljs.C_NUMBER_MODE,\n { // relevance booster\n begin: \'->|<-[|:]?|#!?|>>=|\\\\{\\\\||\\\\|\\\\}|:==|=:|<>\' }\n ]\n };\n}\n\nmodule.exports = clean;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTIwLmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1Isc0NBQXNDLFVBQVU7QUFDaEQ7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vb2JzaWRpYW4tbWluZG1hcC1uZXh0Z2VuLy4vbm9kZV9tb2R1bGVzLy5wbnBtL2hpZ2hsaWdodC5qc0AxMS4xMS4xL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9jbGVhbi5qcz9kYzljIl0sInNvdXJjZXNDb250ZW50IjpbIi8qXG5MYW5ndWFnZTogQ2xlYW5cbkF1dGhvcjogQ2FtaWwgU3RhcHMgPGluZm9AY2FtaWxzdGFwcy5ubD5cbkNhdGVnb3J5OiBmdW5jdGlvbmFsXG5XZWJzaXRlOiBodHRwOi8vY2xlYW4uY3MucnUubmxcbiovXG5cbi8qKiBAdHlwZSBMYW5ndWFnZUZuICovXG5mdW5jdGlvbiBjbGVhbihobGpzKSB7XG4gIGNvbnN0IEtFWVdPUkRTID0gW1xuICAgIFwiaWZcIixcbiAgICBcImxldFwiLFxuICAgIFwiaW5cIixcbiAgICBcIndpdGhcIixcbiAgICBcIndoZXJlXCIsXG4gICAgXCJjYXNlXCIsXG4gICAgXCJvZlwiLFxuICAgIFwiY2xhc3NcIixcbiAgICBcImluc3RhbmNlXCIsXG4gICAgXCJvdGhlcndpc2VcIixcbiAgICBcImltcGxlbWVudGF0aW9uXCIsXG4gICAgXCJkZWZpbml0aW9uXCIsXG4gICAgXCJzeXN0ZW1cIixcbiAgICBcIm1vZHVsZVwiLFxuICAgIFwiZnJvbVwiLFxuICAgIFwiaW1wb3J0XCIsXG4gICAgXCJxdWFsaWZpZWRcIixcbiAgICBcImFzXCIsXG4gICAgXCJzcGVjaWFsXCIsXG4gICAgXCJjb2RlXCIsXG4gICAgXCJpbmxpbmVcIixcbiAgICBcImZvcmVpZ25cIixcbiAgICBcImV4cG9ydFwiLFxuICAgIFwiY2NhbGxcIixcbiAgICBcInN0ZGNhbGxcIixcbiAgICBcImdlbmVyaWNcIixcbiAgICBcImRlcml2ZVwiLFxuICAgIFwiaW5maXhcIixcbiAgICBcImluZml4bFwiLFxuICAgIFwiaW5maXhyXCJcbiAgXTtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnQ2xlYW4nLFxuICAgIGFsaWFzZXM6IFtcbiAgICAgICdpY2wnLFxuICAgICAgJ2RjbCdcbiAgICBdLFxuICAgIGtleXdvcmRzOiB7XG4gICAgICBrZXl3b3JkOiBLRVlXT1JEUyxcbiAgICAgIGJ1aWx0X2luOlxuICAgICAgICAnSW50IFJlYWwgQ2hhciBCb29sJyxcbiAgICAgIGxpdGVyYWw6XG4gICAgICAgICdUcnVlIEZhbHNlJ1xuICAgIH0sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgICBobGpzLkFQT1NfU1RSSU5HX01PREUsXG4gICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAgaGxqcy5DX05VTUJFUl9NT0RFLFxuICAgICAgeyAvLyByZWxldmFuY2UgYm9vc3RlclxuICAgICAgICBiZWdpbjogJy0+fDwtW3w6XT98IyE/fD4+PXxcXFxce1xcXFx8fFxcXFx8XFxcXH18Oj09fD06fDw+JyB9XG4gICAgXVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNsZWFuO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///520\n')},537:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ RG: () => (/* binding */ LocalEvents),\n/* harmony export */ ZF: () => (/* binding */ isObjectEmpty),\n/* harmony export */ dY: () => (/* binding */ nextTick),\n/* harmony export */ sG: () => (/* binding */ PromiseSubject)\n/* harmony export */ });\n/* unused harmony exports genLog, Map, iife */\n/* harmony import */ var auto_bind__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(5858);\n/* harmony import */ var ramda__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4268);\n\n\nclass LocalEvents {\n constructor() {\n this.listeners = {};\n this.listen = (0,ramda__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)((name, callback) => {\n var _a, _b, _c;\n const path = [name, (_c = (_b = (_a = this.listeners) == null ? void 0 : _a[name]) == null ? void 0 : _b.length) != null ? _c : 0];\n if (this.listeners[name])\n this.listeners[name].push(callback);\n else\n this.listeners[name] = [callback];\n return this.unlisten(path);\n });\n (0,auto_bind__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(this);\n }\n emit(name, data) {\n const listeners = this.listeners[name];\n if (!listeners) return;\n listeners.forEach((cb) => cb(data));\n }\n unlisten([name, index]) {\n return () => {\n delete this.listeners[name][index];\n };\n }\n}\nfunction PromiseSubject() {\n let resolver;\n const promise = new Promise((resolve) => resolver = resolve);\n return [resolver, promise];\n}\nconst nextTick = () => new Promise(setImmediate);\nfunction* genLog(message, generator) {\n let count = 0;\n for (const x of generator) {\n console.info(message, count, x);\n count++;\n yield x;\n }\n}\nclass Map extends globalThis.Map {\n constructor(entries) {\n super(entries);\n (0,auto_bind__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(this);\n }\n}\nconst isObjectEmpty = (object) => Object.keys(object).length === 0;\nconst iife = (fn) => fn();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTM3LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFxQjtBQUNDO0FBSWYsTUFBTSxZQUFzQztBQUFBLEVBR2pELGNBQWM7QUFGZCxTQUFRLFlBQXdDLENBQUM7QUFVakQsU0FBTyxTQUFTLDBEQUFLLENBQUMsQ0FBQyxNQUFpQixhQUF1QjtBQWhCakU7QUFpQkksWUFBTSxPQUNKLENBQUMsT0FBTSxzQkFBSyxjQUFMLG1CQUFpQixVQUFqQixtQkFBd0IsV0FBeEIsWUFBa0MsQ0FBQztBQUU1QyxVQUFJLEtBQUssVUFBVSxJQUFJO0FBQ3JCLGFBQUssVUFBVSxJQUFJLEVBQUUsS0FBSyxRQUFRO0FBQUE7QUFFbEMsYUFBSyxVQUFVLElBQUksSUFBSSxDQUFDLFFBQVE7QUFFbEMsYUFBTyxLQUFLLFNBQVMsSUFBSTtBQUFBLElBQzNCLENBQUM7QUFsQmUsa0VBQVEsQ0FBQyxJQUFJO0FBQUEsRUFBRTtBQUFBLEVBRXhCLEtBQUssTUFBaUIsTUFBWTtBQUN2QyxVQUFNLFlBQVksS0FBSyxVQUFVLElBQUk7QUFDckMsUUFBSSxDQUFDLFVBQVc7QUFDaEIsY0FBVSxRQUFRLFFBQU0sR0FBRyxJQUFJLENBQUM7QUFBQSxFQUNsQztBQUFBLEVBY1EsU0FBUyxDQUFDLE1BQU0sS0FBSyxHQUFvQjtBQUMvQyxXQUFPLE1BQU07QUFBRSxhQUFPLEtBQUssVUFBVSxJQUFJLEVBQUUsS0FBSztBQUFBLElBQUU7QUFBQSxFQUNwRDtBQUNGO0FBRU8sU0FBUyxpQkFBdUU7QUFDckYsTUFBSTtBQUNKLFFBQU0sVUFBVSxJQUFJLFFBQVcsYUFBVyxXQUFXLE9BQU87QUFDNUQsU0FBTyxDQUFFLFVBQVUsT0FBUTtBQUM3QjtBQUVPLE1BQU0sV0FBVyxNQUFNLElBQUksUUFBYyxZQUFZO0FBRXJELFVBQVUsT0FBVSxTQUFpQixXQUF5QjtBQUNuRSxNQUFJLFFBQVE7QUFDWixhQUFXLEtBQUssV0FBVztBQUN6QixZQUFRLEtBQUssU0FBUyxPQUFPLENBQUM7QUFDOUI7QUFDQSxVQUFNO0FBQUEsRUFDUjtBQUNGO0FBR08sTUFBTSxZQUFrQixXQUFXLElBQVU7QUFBQSxFQUNsRCxZQUFZLFNBQStDO0FBQ3pELFVBQU0sT0FBTztBQUNiLGtFQUFRLENBQUMsSUFBSTtBQUFBLEVBQ2Y7QUFDRjtBQUVPLE1BQU0sZ0JBQWdCLENBQUMsV0FDNUIsT0FBTyxLQUFLLE1BQU0sRUFBRSxXQUFXO0FBRTFCLE1BQU0sT0FBTyxDQUFTLE9BQXFCLEdBQUciLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9vYnNpZGlhbi1taW5kbWFwLW5leHRnZW4vLi9zcmMvdXRpbGl0aWVzL3V0aWxpdGllcy50cz8wOTVlIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhdXRvQmluZCBmcm9tICdhdXRvLWJpbmQnXG5pbXBvcnQgeyBjdXJyeSB9IGZyb20gJ3JhbWRhJ1xuXG50eXBlIFBhdGg8RXZlbnROYW1lPiA9IFtFdmVudE5hbWUsIG51bWJlcl1cblxuZXhwb3J0IGNsYXNzIExvY2FsRXZlbnRzPEV2ZW50TmFtZSBleHRlbmRzIHN0cmluZz4ge1xuICBwcml2YXRlIGxpc3RlbmVyczogUmVjb3JkPHN0cmluZywgRnVuY3Rpb25bXT4gPSB7fVxuXG4gIGNvbnN0cnVjdG9yKCkgeyBhdXRvQmluZCh0aGlzKSB9XG5cbiAgcHVibGljIGVtaXQobmFtZTogRXZlbnROYW1lLCBkYXRhPzogYW55KSB7XG4gICAgY29uc3QgbGlzdGVuZXJzID0gdGhpcy5saXN0ZW5lcnNbbmFtZV1cbiAgICBpZiAoIWxpc3RlbmVycykgcmV0dXJuXG4gICAgbGlzdGVuZXJzLmZvckVhY2goY2IgPT4gY2IoZGF0YSkpXG4gIH1cblxuICBwdWJsaWMgbGlzdGVuID0gY3VycnkoKG5hbWU6IEV2ZW50TmFtZSwgY2FsbGJhY2s6IEZ1bmN0aW9uKSA9PiB7XG4gICAgY29uc3QgcGF0aDogUGF0aDxFdmVudE5hbWU+ID1cbiAgICAgIFtuYW1lLCB0aGlzLmxpc3RlbmVycz8uW25hbWVdPy5sZW5ndGggPz8gMF1cblxuICAgIGlmICh0aGlzLmxpc3RlbmVyc1tuYW1lXSlcbiAgICAgIHRoaXMubGlzdGVuZXJzW25hbWVdLnB1c2goY2FsbGJhY2spXG4gICAgZWxzZVxuICAgICAgdGhpcy5saXN0ZW5lcnNbbmFtZV0gPSBbY2FsbGJhY2tdXG5cbiAgICByZXR1cm4gdGhpcy51bmxpc3RlbihwYXRoKVxuICB9KVxuXG4gIHByaXZhdGUgdW5saXN0ZW4oW25hbWUsIGluZGV4XTogUGF0aDxFdmVudE5hbWU+KSB7XG4gICAgcmV0dXJuICgpID0+IHsgZGVsZXRlIHRoaXMubGlzdGVuZXJzW25hbWVdW2luZGV4XSB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFByb21pc2VTdWJqZWN0PFQ+KCk6IFsodmFsdWU6IFQgfCBQcm9taXNlTGlrZTxUPikgPT4gdm9pZCwgUHJvbWlzZTxUPl0ge1xuICBsZXQgcmVzb2x2ZXJcbiAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlPFQ+KHJlc29sdmUgPT4gcmVzb2x2ZXIgPSByZXNvbHZlKVxuICByZXR1cm4gWyByZXNvbHZlciwgcHJvbWlzZSBdXG59XG5cbmV4cG9ydCBjb25zdCBuZXh0VGljayA9ICgpID0+IG5ldyBQcm9taXNlPHZvaWQ+KHNldEltbWVkaWF0ZSlcblxuZXhwb3J0IGZ1bmN0aW9uKiBnZW5Mb2c8VD4obWVzc2FnZTogc3RyaW5nLCBnZW5lcmF0b3I6IEdlbmVyYXRvcjxUPikge1xuICBsZXQgY291bnQgPSAwXG4gIGZvciAoY29uc3QgeCBvZiBnZW5lcmF0b3IpIHtcbiAgICBjb25zb2xlLmluZm8obWVzc2FnZSwgY291bnQsIHgpXG4gICAgY291bnQrK1xuICAgIHlpZWxkIHhcbiAgfVxufVxuXG4vLyBNYXAgY29uc3RydWN0b3IgdGhhdCBiaW5kcyBhbGwgbWV0aG9kcyB0byB0aGUgaW5zdGFuY2VcbmV4cG9ydCBjbGFzcyBNYXA8SywgVj4gZXh0ZW5kcyBnbG9iYWxUaGlzLk1hcDxLLCBWPiB7XG4gIGNvbnN0cnVjdG9yKGVudHJpZXM/OiByZWFkb25seSAocmVhZG9ubHkgW0ssIFZdKVtdIHwgbnVsbCkge1xuICAgIHN1cGVyKGVudHJpZXMpXG4gICAgYXV0b0JpbmQodGhpcylcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgaXNPYmplY3RFbXB0eSA9IChvYmplY3Q6IE9iamVjdCkgPT5cbiAgT2JqZWN0LmtleXMob2JqZWN0KS5sZW5ndGggPT09IDBcblxuZXhwb3J0IGNvbnN0IGlpZmUgPSA8UmV0dXJuPihmbjogKCkgPT4gUmV0dXJuKSA9PiBmbigpXG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///537\n')},554:(module,__unused_webpack_exports,__webpack_require__)=>{"use strict";eval("\n\nvar Type = __webpack_require__(2500);\n\nvar _hasOwnProperty = Object.prototype.hasOwnProperty;\nvar _toString = Object.prototype.toString;\n\nfunction resolveYamlOmap(data) {\n if (data === null) return true;\n\n var objectKeys = [], index, length, pair, pairKey, pairHasKey,\n object = data;\n\n for (index = 0, length = object.length; index < length; index += 1) {\n pair = object[index];\n pairHasKey = false;\n\n if (_toString.call(pair) !== '[object Object]') return false;\n\n for (pairKey in pair) {\n if (_hasOwnProperty.call(pair, pairKey)) {\n if (!pairHasKey) pairHasKey = true;\n else return false;\n }\n }\n\n if (!pairHasKey) return false;\n\n if (objectKeys.indexOf(pairKey) === -1) objectKeys.push(pairKey);\n else return false;\n }\n\n return true;\n}\n\nfunction constructYamlOmap(data) {\n return data !== null ? data : [];\n}\n\nmodule.exports = new Type('tag:yaml.org,2002:omap', {\n kind: 'sequence',\n resolve: resolveYamlOmap,\n construct: constructYamlOmap\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTU0LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFdBQVcsbUJBQU8sQ0FBQyxJQUFTOztBQUU1QjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSwwQ0FBMEMsZ0JBQWdCO0FBQzFEO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9vYnNpZGlhbi1taW5kbWFwLW5leHRnZW4vLi9ub2RlX21vZHVsZXMvLnBucG0vanMteWFtbEAzLjE0LjEvbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS9vbWFwLmpzP2Y3NjMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgVHlwZSA9IHJlcXVpcmUoJy4uL3R5cGUnKTtcblxudmFyIF9oYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgX3RvU3RyaW5nICAgICAgID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxuZnVuY3Rpb24gcmVzb2x2ZVlhbWxPbWFwKGRhdGEpIHtcbiAgaWYgKGRhdGEgPT09IG51bGwpIHJldHVybiB0cnVlO1xuXG4gIHZhciBvYmplY3RLZXlzID0gW10sIGluZGV4LCBsZW5ndGgsIHBhaXIsIHBhaXJLZXksIHBhaXJIYXNLZXksXG4gICAgICBvYmplY3QgPSBkYXRhO1xuXG4gIGZvciAoaW5kZXggPSAwLCBsZW5ndGggPSBvYmplY3QubGVuZ3RoOyBpbmRleCA8IGxlbmd0aDsgaW5kZXggKz0gMSkge1xuICAgIHBhaXIgPSBvYmplY3RbaW5kZXhdO1xuICAgIHBhaXJIYXNLZXkgPSBmYWxzZTtcblxuICAgIGlmIChfdG9TdHJpbmcuY2FsbChwYWlyKSAhPT0gJ1tvYmplY3QgT2JqZWN0XScpIHJldHVybiBmYWxzZTtcblxuICAgIGZvciAocGFpcktleSBpbiBwYWlyKSB7XG4gICAgICBpZiAoX2hhc093blByb3BlcnR5LmNhbGwocGFpciwgcGFpcktleSkpIHtcbiAgICAgICAgaWYgKCFwYWlySGFzS2V5KSBwYWlySGFzS2V5ID0gdHJ1ZTtcbiAgICAgICAgZWxzZSByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFwYWlySGFzS2V5KSByZXR1cm4gZmFsc2U7XG5cbiAgICBpZiAob2JqZWN0S2V5cy5pbmRleE9mKHBhaXJLZXkpID09PSAtMSkgb2JqZWN0S2V5cy5wdXNoKHBhaXJLZXkpO1xuICAgIGVsc2UgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGNvbnN0cnVjdFlhbWxPbWFwKGRhdGEpIHtcbiAgcmV0dXJuIGRhdGEgIT09IG51bGwgPyBkYXRhIDogW107XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbmV3IFR5cGUoJ3RhZzp5YW1sLm9yZywyMDAyOm9tYXAnLCB7XG4gIGtpbmQ6ICdzZXF1ZW5jZScsXG4gIHJlc29sdmU6IHJlc29sdmVZYW1sT21hcCxcbiAgY29uc3RydWN0OiBjb25zdHJ1Y3RZYW1sT21hcFxufSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///554\n")},578:(__unused_webpack_module,exports,__webpack_require__)=>{"use strict";eval("\n\nvar node_process = __webpack_require__(932);\nvar cst = __webpack_require__(1583);\nvar lexer = __webpack_require__(9527);\n\nfunction includesToken(list, type) {\n for (let i = 0; i < list.length; ++i)\n if (list[i].type === type)\n return true;\n return false;\n}\nfunction findNonEmptyIndex(list) {\n for (let i = 0; i < list.length; ++i) {\n switch (list[i].type) {\n case 'space':\n case 'comment':\n case 'newline':\n break;\n default:\n return i;\n }\n }\n return -1;\n}\nfunction isFlowToken(token) {\n switch (token?.type) {\n case 'alias':\n case 'scalar':\n case 'single-quoted-scalar':\n case 'double-quoted-scalar':\n case 'flow-collection':\n return true;\n default:\n return false;\n }\n}\nfunction getPrevProps(parent) {\n switch (parent.type) {\n case 'document':\n return parent.start;\n case 'block-map': {\n const it = parent.items[parent.items.length - 1];\n return it.sep ?? it.start;\n }\n case 'block-seq':\n return parent.items[parent.items.length - 1].start;\n /* istanbul ignore next should not happen */\n default:\n return [];\n }\n}\n/** Note: May modify input array */\nfunction getFirstKeyStartProps(prev) {\n if (prev.length === 0)\n return [];\n let i = prev.length;\n loop: while (--i >= 0) {\n switch (prev[i].type) {\n case 'doc-start':\n case 'explicit-key-ind':\n case 'map-value-ind':\n case 'seq-item-ind':\n case 'newline':\n break loop;\n }\n }\n while (prev[++i]?.type === 'space') {\n /* loop */\n }\n return prev.splice(i, prev.length);\n}\nfunction fixFlowSeqItems(fc) {\n if (fc.start.type === 'flow-seq-start') {\n for (const it of fc.items) {\n if (it.sep &&\n !it.value &&\n !includesToken(it.start, 'explicit-key-ind') &&\n !includesToken(it.sep, 'map-value-ind')) {\n if (it.key)\n it.value = it.key;\n delete it.key;\n if (isFlowToken(it.value)) {\n if (it.value.end)\n Array.prototype.push.apply(it.value.end, it.sep);\n else\n it.value.end = it.sep;\n }\n else\n Array.prototype.push.apply(it.start, it.sep);\n delete it.sep;\n }\n }\n }\n}\n/**\n * A YAML concrete syntax tree (CST) parser\n *\n * ```ts\n * const src: string = ...\n * for (const token of new Parser().parse(src)) {\n * // token: Token\n * }\n * ```\n *\n * To use the parser with a user-provided lexer:\n *\n * ```ts\n * function* parse(source: string, lexer: Lexer) {\n * const parser = new Parser()\n * for (const lexeme of lexer.lex(source))\n * yield* parser.next(lexeme)\n * yield* parser.end()\n * }\n *\n * const src: string = ...\n * const lexer = new Lexer()\n * for (const token of parse(src, lexer)) {\n * // token: Token\n * }\n * ```\n */\nclass Parser {\n /**\n * @param onNewLine - If defined, called separately with the start position of\n * each new line (in `parse()`, including the start of input).\n */\n constructor(onNewLine) {\n /** If true, space and sequence indicators count as indentation */\n this.atNewLine = true;\n /** If true, next token is a scalar value */\n this.atScalar = false;\n /** Current indentation level */\n this.indent = 0;\n /** Current offset since the start of parsing */\n this.offset = 0;\n /** On the same line with a block map key */\n this.onKeyLine = false;\n /** Top indicates the node that's currently being built */\n this.stack = [];\n /** The source of the current token, set in parse() */\n this.source = '';\n /** The type of the current token, set in parse() */\n this.type = '';\n // Must be defined after `next()`\n this.lexer = new lexer.Lexer();\n this.onNewLine = onNewLine;\n }\n /**\n * Parse `source` as a YAML stream.\n * If `incomplete`, a part of the last line may be left as a buffer for the next call.\n *\n * Errors are not thrown, but yielded as `{ type: 'error', message }` tokens.\n *\n * @returns A generator of tokens representing each directive, document, and other structure.\n */\n *parse(source, incomplete = false) {\n if (this.onNewLine && this.offset === 0)\n this.onNewLine(0);\n for (const lexeme of this.lexer.lex(source, incomplete))\n yield* this.next(lexeme);\n if (!incomplete)\n yield* this.end();\n }\n /**\n * Advance the parser by the `source` of one lexical token.\n */\n *next(source) {\n this.source = source;\n if (node_process.env.LOG_TOKENS)\n console.log('|', cst.prettyToken(source));\n if (this.atScalar) {\n this.atScalar = false;\n yield* this.step();\n this.offset += source.length;\n return;\n }\n const type = cst.tokenType(source);\n if (!type) {\n const message = `Not a YAML token: ${source}`;\n yield* this.pop({ type: 'error', offset: this.offset, message, source });\n this.offset += source.length;\n }\n else if (type === 'scalar') {\n this.atNewLine = false;\n this.atScalar = true;\n this.type = 'scalar';\n }\n else {\n this.type = type;\n yield* this.step();\n switch (type) {\n case 'newline':\n this.atNewLine = true;\n this.indent = 0;\n if (this.onNewLine)\n this.onNewLine(this.offset + source.length);\n break;\n case 'space':\n if (this.atNewLine && source[0] === ' ')\n this.indent += source.length;\n break;\n case 'explicit-key-ind':\n case 'map-value-ind':\n case 'seq-item-ind':\n if (this.atNewLine)\n this.indent += source.length;\n break;\n case 'doc-mode':\n case 'flow-error-end':\n return;\n default:\n this.atNewLine = false;\n }\n this.offset += source.length;\n }\n }\n /** Call at end of input to push out any remaining constructions */\n *end() {\n while (this.stack.length > 0)\n yield* this.pop();\n }\n get sourceToken() {\n const st = {\n type: this.type,\n offset: this.offset,\n indent: this.indent,\n source: this.source\n };\n return st;\n }\n *step() {\n const top = this.peek(1);\n if (this.type === 'doc-end' && (!top || top.type !== 'doc-end')) {\n while (this.stack.length > 0)\n yield* this.pop();\n this.stack.push({\n type: 'doc-end',\n offset: this.offset,\n source: this.source\n });\n return;\n }\n if (!top)\n return yield* this.stream();\n switch (top.type) {\n case 'document':\n return yield* this.document(top);\n case 'alias':\n case 'scalar':\n case 'single-quoted-scalar':\n case 'double-quoted-scalar':\n return yield* this.scalar(top);\n case 'block-scalar':\n return yield* this.blockScalar(top);\n case 'block-map':\n return yield* this.blockMap(top);\n case 'block-seq':\n return yield* this.blockSequence(top);\n case 'flow-collection':\n return yield* this.flowCollection(top);\n case 'doc-end':\n return yield* this.documentEnd(top);\n }\n /* istanbul ignore next should not happen */\n yield* this.pop();\n }\n peek(n) {\n return this.stack[this.stack.length - n];\n }\n *pop(error) {\n const token = error ?? this.stack.pop();\n /* istanbul ignore if should not happen */\n if (!token) {\n const message = 'Tried to pop an empty stack';\n yield { type: 'error', offset: this.offset, source: '', message };\n }\n else if (this.stack.length === 0) {\n yield token;\n }\n else {\n const top = this.peek(1);\n if (token.type === 'block-scalar') {\n // Block scalars use their parent rather than header indent\n token.indent = 'indent' in top ? top.indent : 0;\n }\n else if (token.type === 'flow-collection' && top.type === 'document') {\n // Ignore all indent for top-level flow collections\n token.indent = 0;\n }\n if (token.type === 'flow-collection')\n fixFlowSeqItems(token);\n switch (top.type) {\n case 'document':\n top.value = token;\n break;\n case 'block-scalar':\n top.props.push(token); // error\n break;\n case 'block-map': {\n const it = top.items[top.items.length - 1];\n if (it.value) {\n top.items.push({ start: [], key: token, sep: [] });\n this.onKeyLine = true;\n return;\n }\n else if (it.sep) {\n it.value = token;\n }\n else {\n Object.assign(it, { key: token, sep: [] });\n this.onKeyLine = !it.explicitKey;\n return;\n }\n break;\n }\n case 'block-seq': {\n const it = top.items[top.items.length - 1];\n if (it.value)\n top.items.push({ start: [], value: token });\n else\n it.value = token;\n break;\n }\n case 'flow-collection': {\n const it = top.items[top.items.length - 1];\n if (!it || it.value)\n top.items.push({ start: [], key: token, sep: [] });\n else if (it.sep)\n it.value = token;\n else\n Object.assign(it, { key: token, sep: [] });\n return;\n }\n /* istanbul ignore next should not happen */\n default:\n yield* this.pop();\n yield* this.pop(token);\n }\n if ((top.type === 'document' ||\n top.type === 'block-map' ||\n top.type === 'block-seq') &&\n (token.type === 'block-map' || token.type === 'block-seq')) {\n const last = token.items[token.items.length - 1];\n if (last &&\n !last.sep &&\n !last.value &&\n last.start.length > 0 &&\n findNonEmptyIndex(last.start) === -1 &&\n (token.indent === 0 ||\n last.start.every(st => st.type !== 'comment' || st.indent < token.indent))) {\n if (top.type === 'document')\n top.end = last.start;\n else\n top.items.push({ start: last.start });\n token.items.splice(-1, 1);\n }\n }\n }\n }\n *stream() {\n switch (this.type) {\n case 'directive-line':\n yield { type: 'directive', offset: this.offset, source: this.source };\n return;\n case 'byte-order-mark':\n case 'space':\n case 'comment':\n case 'newline':\n yield this.sourceToken;\n return;\n case 'doc-mode':\n case 'doc-start': {\n const doc = {\n type: 'document',\n offset: this.offset,\n start: []\n };\n if (this.type === 'doc-start')\n doc.start.push(this.sourceToken);\n this.stack.push(doc);\n return;\n }\n }\n yield {\n type: 'error',\n offset: this.offset,\n message: `Unexpected ${this.type} token in YAML stream`,\n source: this.source\n };\n }\n *document(doc) {\n if (doc.value)\n return yield* this.lineEnd(doc);\n switch (this.type) {\n case 'doc-start': {\n if (findNonEmptyIndex(doc.start) !== -1) {\n yield* this.pop();\n yield* this.step();\n }\n else\n doc.start.push(this.sourceToken);\n return;\n }\n case 'anchor':\n case 'tag':\n case 'space':\n case 'comment':\n case 'newline':\n doc.start.push(this.sourceToken);\n return;\n }\n const bv = this.startBlockValue(doc);\n if (bv)\n this.stack.push(bv);\n else {\n yield {\n type: 'error',\n offset: this.offset,\n message: `Unexpected ${this.type} token in YAML document`,\n source: this.source\n };\n }\n }\n *scalar(scalar) {\n if (this.type === 'map-value-ind') {\n const prev = getPrevProps(this.peek(2));\n const start = getFirstKeyStartProps(prev);\n let sep;\n if (scalar.end) {\n sep = scalar.end;\n sep.push(this.sourceToken);\n delete scalar.end;\n }\n else\n sep = [this.sourceToken];\n const map = {\n type: 'block-map',\n offset: scalar.offset,\n indent: scalar.indent,\n items: [{ start, key: scalar, sep }]\n };\n this.onKeyLine = true;\n this.stack[this.stack.length - 1] = map;\n }\n else\n yield* this.lineEnd(scalar);\n }\n *blockScalar(scalar) {\n switch (this.type) {\n case 'space':\n case 'comment':\n case 'newline':\n scalar.props.push(this.sourceToken);\n return;\n case 'scalar':\n scalar.source = this.source;\n // block-scalar source includes trailing newline\n this.atNewLine = true;\n this.indent = 0;\n if (this.onNewLine) {\n let nl = this.source.indexOf('\\n') + 1;\n while (nl !== 0) {\n this.onNewLine(this.offset + nl);\n nl = this.source.indexOf('\\n', nl) + 1;\n }\n }\n yield* this.pop();\n break;\n /* istanbul ignore next should not happen */\n default:\n yield* this.pop();\n yield* this.step();\n }\n }\n *blockMap(map) {\n const it = map.items[map.items.length - 1];\n // it.sep is true-ish if pair already has key or : separator\n switch (this.type) {\n case 'newline':\n this.onKeyLine = false;\n if (it.value) {\n const end = 'end' in it.value ? it.value.end : undefined;\n const last = Array.isArray(end) ? end[end.length - 1] : undefined;\n if (last?.type === 'comment')\n end?.push(this.sourceToken);\n else\n map.items.push({ start: [this.sourceToken] });\n }\n else if (it.sep) {\n it.sep.push(this.sourceToken);\n }\n else {\n it.start.push(this.sourceToken);\n }\n return;\n case 'space':\n case 'comment':\n if (it.value) {\n map.items.push({ start: [this.sourceToken] });\n }\n else if (it.sep) {\n it.sep.push(this.sourceToken);\n }\n else {\n if (this.atIndentedComment(it.start, map.indent)) {\n const prev = map.items[map.items.length - 2];\n const end = prev?.value?.end;\n if (Array.isArray(end)) {\n Array.prototype.push.apply(end, it.start);\n end.push(this.sourceToken);\n map.items.pop();\n return;\n }\n }\n it.start.push(this.sourceToken);\n }\n return;\n }\n if (this.indent >= map.indent) {\n const atMapIndent = !this.onKeyLine && this.indent === map.indent;\n const atNextItem = atMapIndent &&\n (it.sep || it.explicitKey) &&\n this.type !== 'seq-item-ind';\n // For empty nodes, assign newline-separated not indented empty tokens to following node\n let start = [];\n if (atNextItem && it.sep && !it.value) {\n const nl = [];\n for (let i = 0; i < it.sep.length; ++i) {\n const st = it.sep[i];\n switch (st.type) {\n case 'newline':\n nl.push(i);\n break;\n case 'space':\n break;\n case 'comment':\n if (st.indent > map.indent)\n nl.length = 0;\n break;\n default:\n nl.length = 0;\n }\n }\n if (nl.length >= 2)\n start = it.sep.splice(nl[1]);\n }\n switch (this.type) {\n case 'anchor':\n case 'tag':\n if (atNextItem || it.value) {\n start.push(this.sourceToken);\n map.items.push({ start });\n this.onKeyLine = true;\n }\n else if (it.sep) {\n it.sep.push(this.sourceToken);\n }\n else {\n it.start.push(this.sourceToken);\n }\n return;\n case 'explicit-key-ind':\n if (!it.sep && !it.explicitKey) {\n it.start.push(this.sourceToken);\n it.explicitKey = true;\n }\n else if (atNextItem || it.value) {\n start.push(this.sourceToken);\n map.items.push({ start, explicitKey: true });\n }\n else {\n this.stack.push({\n type: 'block-map',\n offset: this.offset,\n indent: this.indent,\n items: [{ start: [this.sourceToken], explicitKey: true }]\n });\n }\n this.onKeyLine = true;\n return;\n case 'map-value-ind':\n if (it.explicitKey) {\n if (!it.sep) {\n if (includesToken(it.start, 'newline')) {\n Object.assign(it, { key: null, sep: [this.sourceToken] });\n }\n else {\n const start = getFirstKeyStartProps(it.start);\n this.stack.push({\n type: 'block-map',\n offset: this.offset,\n indent: this.indent,\n items: [{ start, key: null, sep: [this.sourceToken] }]\n });\n }\n }\n else if (it.value) {\n map.items.push({ start: [], key: null, sep: [this.sourceToken] });\n }\n else if (includesToken(it.sep, 'map-value-ind')) {\n this.stack.push({\n type: 'block-map',\n offset: this.offset,\n indent: this.indent,\n items: [{ start, key: null, sep: [this.sourceToken] }]\n });\n }\n else if (isFlowToken(it.key) &&\n !includesToken(it.sep, 'newline')) {\n const start = getFirstKeyStartProps(it.start);\n const key = it.key;\n const sep = it.sep;\n sep.push(this.sourceToken);\n // @ts-expect-error type guard is wrong here\n delete it.key;\n // @ts-expect-error type guard is wrong here\n delete it.sep;\n this.stack.push({\n type: 'block-map',\n offset: this.offset,\n indent: this.indent,\n items: [{ start, key, sep }]\n });\n }\n else if (start.length > 0) {\n // Not actually at next item\n it.sep = it.sep.concat(start, this.sourceToken);\n }\n else {\n it.sep.push(this.sourceToken);\n }\n }\n else {\n if (!it.sep) {\n Object.assign(it, { key: null, sep: [this.sourceToken] });\n }\n else if (it.value || atNextItem) {\n map.items.push({ start, key: null, sep: [this.sourceToken] });\n }\n else if (includesToken(it.sep, 'map-value-ind')) {\n this.stack.push({\n type: 'block-map',\n offset: this.offset,\n indent: this.indent,\n items: [{ start: [], key: null, sep: [this.sourceToken] }]\n });\n }\n else {\n it.sep.push(this.sourceToken);\n }\n }\n this.onKeyLine = true;\n return;\n case 'alias':\n case 'scalar':\n case 'single-quoted-scalar':\n case 'double-quoted-scalar': {\n const fs = this.flowScalar(this.type);\n if (atNextItem || it.value) {\n map.items.push({ start, key: fs, sep: [] });\n this.onKeyLine = true;\n }\n else if (it.sep) {\n this.stack.push(fs);\n }\n else {\n Object.assign(it, { key: fs, sep: [] });\n this.onKeyLine = true;\n }\n return;\n }\n default: {\n const bv = this.startBlockValue(map);\n if (bv) {\n if (bv.type === 'block-seq') {\n if (!it.explicitKey &&\n it.sep &&\n !includesToken(it.sep, 'newline')) {\n yield* this.pop({\n type: 'error',\n offset: this.offset,\n message: 'Unexpected block-seq-ind on same line with key',\n source: this.source\n });\n return;\n }\n }\n else if (atMapIndent) {\n map.items.push({ start });\n }\n this.stack.push(bv);\n return;\n }\n }\n }\n }\n yield* this.pop();\n yield* this.step();\n }\n *blockSequence(seq) {\n const it = seq.items[seq.items.length - 1];\n switch (this.type) {\n case 'newline':\n if (it.value) {\n const end = 'end' in it.value ? it.value.end : undefined;\n const last = Array.isArray(end) ? end[end.length - 1] : undefined;\n if (last?.type === 'comment')\n end?.push(this.sourceToken);\n else\n seq.items.push({ start: [this.sourceToken] });\n }\n else\n it.start.push(this.sourceToken);\n return;\n case 'space':\n case 'comment':\n if (it.value)\n seq.items.push({ start: [this.sourceToken] });\n else {\n if (this.atIndentedComment(it.start, seq.indent)) {\n const prev = seq.items[seq.items.length - 2];\n const end = prev?.value?.end;\n if (Array.isArray(end)) {\n Array.prototype.push.apply(end, it.start);\n end.push(this.sourceToken);\n seq.items.pop();\n return;\n }\n }\n it.start.push(this.sourceToken);\n }\n return;\n case 'anchor':\n case 'tag':\n if (it.value || this.indent <= seq.indent)\n break;\n it.start.push(this.sourceToken);\n return;\n case 'seq-item-ind':\n if (this.indent !== seq.indent)\n break;\n if (it.value || includesToken(it.start, 'seq-item-ind'))\n seq.items.push({ start: [this.sourceToken] });\n else\n it.start.push(this.sourceToken);\n return;\n }\n if (this.indent > seq.indent) {\n const bv = this.startBlockValue(seq);\n if (bv) {\n this.stack.push(bv);\n return;\n }\n }\n yield* this.pop();\n yield* this.step();\n }\n *flowCollection(fc) {\n const it = fc.items[fc.items.length - 1];\n if (this.type === 'flow-error-end') {\n let top;\n do {\n yield* this.pop();\n top = this.peek(1);\n } while (top && top.type === 'flow-collection');\n }\n else if (fc.end.length === 0) {\n switch (this.type) {\n case 'comma':\n case 'explicit-key-ind':\n if (!it || it.sep)\n fc.items.push({ start: [this.sourceToken] });\n else\n it.start.push(this.sourceToken);\n return;\n case 'map-value-ind':\n if (!it || it.value)\n fc.items.push({ start: [], key: null, sep: [this.sourceToken] });\n else if (it.sep)\n it.sep.push(this.sourceToken);\n else\n Object.assign(it, { key: null, sep: [this.sourceToken] });\n return;\n case 'space':\n case 'comment':\n case 'newline':\n case 'anchor':\n case 'tag':\n if (!it || it.value)\n fc.items.push({ start: [this.sourceToken] });\n else if (it.sep)\n it.sep.push(this.sourceToken);\n else\n it.start.push(this.sourceToken);\n return;\n case 'alias':\n case 'scalar':\n case 'single-quoted-scalar':\n case 'double-quoted-scalar': {\n const fs = this.flowScalar(this.type);\n if (!it || it.value)\n fc.items.push({ start: [], key: fs, sep: [] });\n else if (it.sep)\n this.stack.push(fs);\n else\n Object.assign(it, { key: fs, sep: [] });\n return;\n }\n case 'flow-map-end':\n case 'flow-seq-end':\n fc.end.push(this.sourceToken);\n return;\n }\n const bv = this.startBlockValue(fc);\n /* istanbul ignore else should not happen */\n if (bv)\n this.stack.push(bv);\n else {\n yield* this.pop();\n yield* this.step();\n }\n }\n else {\n const parent = this.peek(2);\n if (parent.type === 'block-map' &&\n ((this.type === 'map-value-ind' && parent.indent === fc.indent) ||\n (this.type === 'newline' &&\n !parent.items[parent.items.length - 1].sep))) {\n yield* this.pop();\n yield* this.step();\n }\n else if (this.type === 'map-value-ind' &&\n parent.type !== 'flow-collection') {\n const prev = getPrevProps(parent);\n const start = getFirstKeyStartProps(prev);\n fixFlowSeqItems(fc);\n const sep = fc.end.splice(1, fc.end.length);\n sep.push(this.sourceToken);\n const map = {\n type: 'block-map',\n offset: fc.offset,\n indent: fc.indent,\n items: [{ start, key: fc, sep }]\n };\n this.onKeyLine = true;\n this.stack[this.stack.length - 1] = map;\n }\n else {\n yield* this.lineEnd(fc);\n }\n }\n }\n flowScalar(type) {\n if (this.onNewLine) {\n let nl = this.source.indexOf('\\n') + 1;\n while (nl !== 0) {\n this.onNewLine(this.offset + nl);\n nl = this.source.indexOf('\\n', nl) + 1;\n }\n }\n return {\n type,\n offset: this.offset,\n indent: this.indent,\n source: this.source\n };\n }\n startBlockValue(parent) {\n switch (this.type) {\n case 'alias':\n case 'scalar':\n case 'single-quoted-scalar':\n case 'double-quoted-scalar':\n return this.flowScalar(this.type);\n case 'block-scalar-header':\n return {\n type: 'block-scalar',\n offset: this.offset,\n indent: this.indent,\n props: [this.sourceToken],\n source: ''\n };\n case 'flow-map-start':\n case 'flow-seq-start':\n return {\n type: 'flow-collection',\n offset: this.offset,\n indent: this.indent,\n start: this.sourceToken,\n items: [],\n end: []\n };\n case 'seq-item-ind':\n return {\n type: 'block-seq',\n offset: this.offset,\n indent: this.indent,\n items: [{ start: [this.sourceToken] }]\n };\n case 'explicit-key-ind': {\n this.onKeyLine = true;\n const prev = getPrevProps(parent);\n const start = getFirstKeyStartProps(prev);\n start.push(this.sourceToken);\n return {\n type: 'block-map',\n offset: this.offset,\n indent: this.indent,\n items: [{ start, explicitKey: true }]\n };\n }\n case 'map-value-ind': {\n this.onKeyLine = true;\n const prev = getPrevProps(parent);\n const start = getFirstKeyStartProps(prev);\n return {\n type: 'block-map',\n offset: this.offset,\n indent: this.indent,\n items: [{ start, key: null, sep: [this.sourceToken] }]\n };\n }\n }\n return null;\n }\n atIndentedComment(start, indent) {\n if (this.type !== 'comment')\n return false;\n if (this.indent <= indent)\n return false;\n return start.every(st => st.type === 'newline' || st.type === 'space');\n }\n *documentEnd(docEnd) {\n if (this.type !== 'doc-mode') {\n if (docEnd.end)\n docEnd.end.push(this.sourceToken);\n else\n docEnd.end = [this.sourceToken];\n if (this.type === 'newline')\n yield* this.pop();\n }\n }\n *lineEnd(token) {\n switch (this.type) {\n case 'comma':\n case 'doc-start':\n case 'doc-end':\n case 'flow-seq-end':\n case 'flow-map-end':\n case 'map-value-ind':\n yield* this.pop();\n yield* this.step();\n break;\n case 'newline':\n this.onKeyLine = false;\n // fallthrough\n case 'space':\n case 'comment':\n default:\n // all other values are errors\n if (token.end)\n token.end.push(this.sourceToken);\n else\n token.end = [this.sourceToken];\n if (this.type === 'newline')\n yield* this.pop();\n }\n }\n}\n\nexports.Parser = Parser;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTc4LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQVM7QUFDcEMsVUFBVSxtQkFBTyxDQUFDLElBQVU7QUFDNUIsWUFBWSxtQkFBTyxDQUFDLElBQVk7O0FBRWhDO0FBQ0Esb0JBQW9CLGlCQUFpQjtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLGlCQUFpQjtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnREFBZ0Qsd0JBQXdCO0FBQ3hFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpREFBaUQsT0FBTztBQUN4RCw4QkFBOEIscURBQXFEO0FBQ25GO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0I7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkNBQTJDO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUNBQXlDLGdDQUFnQztBQUN6RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRDQUE0QyxxQkFBcUI7QUFDakU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlDQUF5Qyx5QkFBeUI7QUFDbEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUMsZ0NBQWdDO0FBQ3pFO0FBQ0E7QUFDQTtBQUNBLDRDQUE0QyxxQkFBcUI7QUFDakU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUMsbUJBQW1CO0FBQzVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQyxXQUFXO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDLFdBQVc7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQix5QkFBeUI7QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUMsMkJBQTJCO0FBQ3BFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUMsMkJBQTJCO0FBQ2hFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDLG1CQUFtQjtBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUNBQXlDLE9BQU87QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUMsMEJBQTBCO0FBQ25FO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNDQUFzQyw4Q0FBOEM7QUFDcEYseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0RBQW9ELG9DQUFvQztBQUN4RjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhDQUE4QywyQ0FBMkM7QUFDekYsaUNBQWlDO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBLDZDQUE2QywrQ0FBK0M7QUFDNUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMENBQTBDLDJDQUEyQztBQUNyRiw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMENBQTBDLGlCQUFpQjtBQUMzRCw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdEQUFnRCxvQ0FBb0M7QUFDcEY7QUFDQTtBQUNBLDZDQUE2QywyQ0FBMkM7QUFDeEY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMENBQTBDLCtDQUErQztBQUN6Riw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUMseUJBQXlCO0FBQ2xFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRDQUE0QyxrQkFBa0I7QUFDOUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUM7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkMsT0FBTztBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUNBQXlDLDJCQUEyQjtBQUNwRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQywyQkFBMkI7QUFDaEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUNBQXFDLDJCQUEyQjtBQUNoRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0NBQXdDLDJCQUEyQjtBQUNuRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0NBQXdDLCtDQUErQztBQUN2RjtBQUNBO0FBQ0E7QUFDQSw0Q0FBNEMsb0NBQW9DO0FBQ2hGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0NBQXdDLDJCQUEyQjtBQUNuRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0NBQXdDLDZCQUE2QjtBQUNyRTtBQUNBO0FBQ0E7QUFDQSw0Q0FBNEMsa0JBQWtCO0FBQzlEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QixxQkFBcUI7QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLDJCQUEyQjtBQUN6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QiwwQkFBMEI7QUFDeEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4QkFBOEIsMkNBQTJDO0FBQ3pFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGNBQWMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9vYnNpZGlhbi1taW5kbWFwLW5leHRnZW4vLi9ub2RlX21vZHVsZXMvLnBucG0veWFtbEAyLjguMC9ub2RlX21vZHVsZXMveWFtbC9kaXN0L3BhcnNlL3BhcnNlci5qcz9lNzVmIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIG5vZGVfcHJvY2VzcyA9IHJlcXVpcmUoJ3Byb2Nlc3MnKTtcbnZhciBjc3QgPSByZXF1aXJlKCcuL2NzdC5qcycpO1xudmFyIGxleGVyID0gcmVxdWlyZSgnLi9sZXhlci5qcycpO1xuXG5mdW5jdGlvbiBpbmNsdWRlc1Rva2VuKGxpc3QsIHR5cGUpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyArK2kpXG4gICAgICAgIGlmIChsaXN0W2ldLnR5cGUgPT09IHR5cGUpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiBmaW5kTm9uRW1wdHlJbmRleChsaXN0KSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHN3aXRjaCAobGlzdFtpXS50eXBlKSB7XG4gICAgICAgICAgICBjYXNlICdzcGFjZSc6XG4gICAgICAgICAgICBjYXNlICdjb21tZW50JzpcbiAgICAgICAgICAgIGNhc2UgJ25ld2xpbmUnOlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gLTE7XG59XG5mdW5jdGlvbiBpc0Zsb3dUb2tlbih0b2tlbikge1xuICAgIHN3aXRjaCAodG9rZW4/LnR5cGUpIHtcbiAgICAgICAgY2FzZSAnYWxpYXMnOlxuICAgICAgICBjYXNlICdzY2FsYXInOlxuICAgICAgICBjYXNlICdzaW5nbGUtcXVvdGVkLXNjYWxhcic6XG4gICAgICAgIGNhc2UgJ2RvdWJsZS1xdW90ZWQtc2NhbGFyJzpcbiAgICAgICAgY2FzZSAnZmxvdy1jb2xsZWN0aW9uJzpcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGdldFByZXZQcm9wcyhwYXJlbnQpIHtcbiAgICBzd2l0Y2ggKHBhcmVudC50eXBlKSB7XG4gICAgICAgIGNhc2UgJ2RvY3VtZW50JzpcbiAgICAgICAgICAgIHJldHVybiBwYXJlbnQuc3RhcnQ7XG4gICAgICAgIGNhc2UgJ2Jsb2NrLW1hcCc6IHtcbiAgICAgICAgICAgIGNvbnN0IGl0ID0gcGFyZW50Lml0ZW1zW3BhcmVudC5pdGVtcy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgIHJldHVybiBpdC5zZXAgPz8gaXQuc3RhcnQ7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnYmxvY2stc2VxJzpcbiAgICAgICAgICAgIHJldHVybiBwYXJlbnQuaXRlbXNbcGFyZW50Lml0ZW1zLmxlbmd0aCAtIDFdLnN0YXJ0O1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCBzaG91bGQgbm90IGhhcHBlbiAqL1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbn1cbi8qKiBOb3RlOiBNYXkgbW9kaWZ5IGlucHV0IGFycmF5ICovXG5mdW5jdGlvbiBnZXRGaXJzdEtleVN0YXJ0UHJvcHMocHJldikge1xuICAgIGlmIChwcmV2Lmxlbmd0aCA9PT0gMClcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIGxldCBpID0gcHJldi5sZW5ndGg7XG4gICAgbG9vcDogd2hpbGUgKC0taSA+PSAwKSB7XG4gICAgICAgIHN3aXRjaCAocHJldltpXS50eXBlKSB7XG4gICAgICAgICAgICBjYXNlICdkb2Mtc3RhcnQnOlxuICAgICAgICAgICAgY2FzZSAnZXhwbGljaXQta2V5LWluZCc6XG4gICAgICAgICAgICBjYXNlICdtYXAtdmFsdWUtaW5kJzpcbiAgICAgICAgICAgIGNhc2UgJ3NlcS1pdGVtLWluZCc6XG4gICAgICAgICAgICBjYXNlICduZXdsaW5lJzpcbiAgICAgICAgICAgICAgICBicmVhayBsb29wO1xuICAgICAgICB9XG4gICAgfVxuICAgIHdoaWxlIChwcmV2WysraV0/LnR5cGUgPT09ICdzcGFjZScpIHtcbiAgICAgICAgLyogbG9vcCAqL1xuICAgIH1cbiAgICByZXR1cm4gcHJldi5zcGxpY2UoaSwgcHJldi5sZW5ndGgpO1xufVxuZnVuY3Rpb24gZml4Rmxvd1NlcUl0ZW1zKGZjKSB7XG4gICAgaWYgKGZjLnN0YXJ0LnR5cGUgPT09ICdmbG93LXNlcS1zdGFydCcpIHtcbiAgICAgICAgZm9yIChjb25zdCBpdCBvZiBmYy5pdGVtcykge1xuICAgICAgICAgICAgaWYgKGl0LnNlcCAmJlxuICAgICAgICAgICAgICAgICFpdC52YWx1ZSAmJlxuICAgICAgICAgICAgICAgICFpbmNsdWRlc1Rva2VuKGl0LnN0YXJ0LCAnZXhwbGljaXQta2V5LWluZCcpICYmXG4gICAgICAgICAgICAgICAgIWluY2x1ZGVzVG9rZW4oaXQuc2VwLCAnbWFwLXZhbHVlLWluZCcpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGl0LmtleSlcbiAgICAgICAgICAgICAgICAgICAgaXQudmFsdWUgPSBpdC5rZXk7XG4gICAgICAgICAgICAgICAgZGVsZXRlIGl0LmtleTtcbiAgICAgICAgICAgICAgICBpZiAoaXNGbG93VG9rZW4oaXQudmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpdC52YWx1ZS5lbmQpXG4gICAgICAgICAgICAgICAgICAgICAgICBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShpdC52YWx1ZS5lbmQsIGl0LnNlcCk7XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0LnZhbHVlLmVuZCA9IGl0LnNlcDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShpdC5zdGFydCwgaXQuc2VwKTtcbiAgICAgICAgICAgICAgICBkZWxldGUgaXQuc2VwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuLyoqXG4gKiBBIFlBTUwgY29uY3JldGUgc3ludGF4IHRyZWUgKENTVCkgcGFyc2VyXG4gKlxuICogYGBgdHNcbiAqIGNvbnN0IHNyYzogc3RyaW5nID0gLi4uXG4gKiBmb3IgKGNvbnN0IHRva2VuIG9mIG5ldyBQYXJzZXIoKS5wYXJzZShzcmMpKSB7XG4gKiAgIC8vIHRva2VuOiBUb2tlblxuICogfVxuICogYGBgXG4gKlxuICogVG8gdXNlIHRoZSBwYXJzZXIgd2l0aCBhIHVzZXItcHJvdmlkZWQgbGV4ZXI6XG4gKlxuICogYGBgdHNcbiAqIGZ1bmN0aW9uKiBwYXJzZShzb3VyY2U6IHN0cmluZywgbGV4ZXI6IExleGVyKSB7XG4gKiAgIGNvbnN0IHBhcnNlciA9IG5ldyBQYXJzZXIoKVxuICogICBmb3IgKGNvbnN0IGxleGVtZSBvZiBsZXhlci5sZXgoc291cmNlKSlcbiAqICAgICB5aWVsZCogcGFyc2VyLm5leHQobGV4ZW1lKVxuICogICB5aWVsZCogcGFyc2VyLmVuZCgpXG4gKiB9XG4gKlxuICogY29uc3Qgc3JjOiBzdHJpbmcgPSAuLi5cbiAqIGNvbnN0IGxleGVyID0gbmV3IExleGVyKClcbiAqIGZvciAoY29uc3QgdG9rZW4gb2YgcGFyc2Uoc3JjLCBsZXhlcikpIHtcbiAqICAgLy8gdG9rZW46IFRva2VuXG4gKiB9XG4gKiBgYGBcbiAqL1xuY2xhc3MgUGFyc2VyIHtcbiAgICAvKipcbiAgICAgKiBAcGFyYW0gb25OZXdMaW5lIC0gSWYgZGVmaW5lZCwgY2FsbGVkIHNlcGFyYXRlbHkgd2l0aCB0aGUgc3RhcnQgcG9zaXRpb24gb2ZcbiAgICAgKiAgIGVhY2ggbmV3IGxpbmUgKGluIGBwYXJzZSgpYCwgaW5jbHVkaW5nIHRoZSBzdGFydCBvZiBpbnB1dCkuXG4gICAgICovXG4gICAgY29uc3RydWN0b3Iob25OZXdMaW5lKSB7XG4gICAgICAgIC8qKiBJZiB0cnVlLCBzcGFjZSBhbmQgc2VxdWVuY2UgaW5kaWNhdG9ycyBjb3VudCBhcyBpbmRlbnRhdGlvbiAqL1xuICAgICAgICB0aGlzLmF0TmV3TGluZSA9IHRydWU7XG4gICAgICAgIC8qKiBJZiB0cnVlLCBuZXh0IHRva2VuIGlzIGEgc2NhbGFyIHZhbHVlICovXG4gICAgICAgIHRoaXMuYXRTY2FsYXIgPSBmYWxzZTtcbiAgICAgICAgLyoqIEN1cnJlbnQgaW5kZW50YXRpb24gbGV2ZWwgKi9cbiAgICAgICAgdGhpcy5pbmRlbnQgPSAwO1xuICAgICAgICAvKiogQ3VycmVudCBvZmZzZXQgc2luY2UgdGhlIHN0YXJ0IG9mIHBhcnNpbmcgKi9cbiAgICAgICAgdGhpcy5vZmZzZXQgPSAwO1xuICAgICAgICAvKiogT24gdGhlIHNhbWUgbGluZSB3aXRoIGEgYmxvY2sgbWFwIGtleSAqL1xuICAgICAgICB0aGlzLm9uS2V5TGluZSA9IGZhbHNlO1xuICAgICAgICAvKiogVG9wIGluZGljYXRlcyB0aGUgbm9kZSB0aGF0J3MgY3VycmVudGx5IGJlaW5nIGJ1aWx0ICovXG4gICAgICAgIHRoaXMuc3RhY2sgPSBbXTtcbiAgICAgICAgLyoqIFRoZSBzb3VyY2Ugb2YgdGhlIGN1cnJlbnQgdG9rZW4sIHNldCBpbiBwYXJzZSgpICovXG4gICAgICAgIHRoaXMuc291cmNlID0gJyc7XG4gICAgICAgIC8qKiBUaGUgdHlwZSBvZiB0aGUgY3VycmVudCB0b2tlbiwgc2V0IGluIHBhcnNlKCkgKi9cbiAgICAgICAgdGhpcy50eXBlID0gJyc7XG4gICAgICAgIC8vIE11c3QgYmUgZGVmaW5lZCBhZnRlciBgbmV4dCgpYFxuICAgICAgICB0aGlzLmxleGVyID0gbmV3IGxleGVyLkxleGVyKCk7XG4gICAgICAgIHRoaXMub25OZXdMaW5lID0gb25OZXdMaW5lO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBQYXJzZSBgc291cmNlYCBhcyBhIFlBTUwgc3RyZWFtLlxuICAgICAqIElmIGBpbmNvbXBsZXRlYCwgYSBwYXJ0IG9mIHRoZSBsYXN0IGxpbmUgbWF5IGJlIGxlZnQgYXMgYSBidWZmZXIgZm9yIHRoZSBuZXh0IGNhbGwuXG4gICAgICpcbiAgICAgKiBFcnJvcnMgYXJlIG5vdCB0aHJvd24sIGJ1dCB5aWVsZGVkIGFzIGB7IHR5cGU6ICdlcnJvcicsIG1lc3NhZ2UgfWAgdG9rZW5zLlxuICAgICAqXG4gICAgICogQHJldHVybnMgQSBnZW5lcmF0b3Igb2YgdG9rZW5zIHJlcHJlc2VudGluZyBlYWNoIGRpcmVjdGl2ZSwgZG9jdW1lbnQsIGFuZCBvdGhlciBzdHJ1Y3R1cmUuXG4gICAgICovXG4gICAgKnBhcnNlKHNvdXJjZSwgaW5jb21wbGV0ZSA9IGZhbHNlKSB7XG4gICAgICAgIGlmICh0aGlzLm9uTmV3TGluZSAmJiB0aGlzLm9mZnNldCA9PT0gMClcbiAgICAgICAgICAgIHRoaXMub25OZXdMaW5lKDApO1xuICAgICAgICBmb3IgKGNvbnN0IGxleGVtZSBvZiB0aGlzLmxleGVyLmxleChzb3VyY2UsIGluY29tcGxldGUpKVxuICAgICAgICAgICAgeWllbGQqIHRoaXMubmV4dChsZXhlbWUpO1xuICAgICAgICBpZiAoIWluY29tcGxldGUpXG4gICAgICAgICAgICB5aWVsZCogdGhpcy5lbmQoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWR2YW5jZSB0aGUgcGFyc2VyIGJ5IHRoZSBgc291cmNlYCBvZiBvbmUgbGV4aWNhbCB0b2tlbi5cbiAgICAgKi9cbiAgICAqbmV4dChzb3VyY2UpIHtcbiAgICAgICAgdGhpcy5zb3VyY2UgPSBzb3VyY2U7XG4gICAgICAgIGlmIChub2RlX3Byb2Nlc3MuZW52LkxPR19UT0tFTlMpXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnfCcsIGNzdC5wcmV0dHlUb2tlbihzb3VyY2UpKTtcbiAgICAgICAgaWYgKHRoaXMuYXRTY2FsYXIpIHtcbiAgICAgICAgICAgIHRoaXMuYXRTY2FsYXIgPSBmYWxzZTtcbiAgICAgICAgICAgIHlpZWxkKiB0aGlzLnN0ZXAoKTtcbiAgICAgICAgICAgIHRoaXMub2Zmc2V0ICs9IHNvdXJjZS5sZW5ndGg7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdHlwZSA9IGNzdC50b2tlblR5cGUoc291cmNlKTtcbiAgICAgICAgaWYgKCF0eXBlKSB7XG4gICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gYE5vdCBhIFlBTUwgdG9rZW46ICR7c291cmNlfWA7XG4gICAgICAgICAgICB5aWVsZCogdGhpcy5wb3AoeyB0eXBlOiAnZXJyb3InLCBvZmZzZXQ6IHRoaXMub2Zmc2V0LCBtZXNzYWdlLCBzb3VyY2UgfSk7XG4gICAgICAgICAgICB0aGlzLm9mZnNldCArPSBzb3VyY2UubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGUgPT09ICdzY2FsYXInKSB7XG4gICAgICAgICAgICB0aGlzLmF0TmV3TGluZSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5hdFNjYWxhciA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLnR5cGUgPSAnc2NhbGFyJztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgICAgICAgICB5aWVsZCogdGhpcy5zdGVwKCk7XG4gICAgICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlICduZXdsaW5lJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hdE5ld0xpbmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmluZGVudCA9IDA7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm9uTmV3TGluZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25OZXdMaW5lKHRoaXMub2Zmc2V0ICsgc291cmNlLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3NwYWNlJzpcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuYXROZXdMaW5lICYmIHNvdXJjZVswXSA9PT0gJyAnKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbmRlbnQgKz0gc291cmNlLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnZXhwbGljaXQta2V5LWluZCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnbWFwLXZhbHVlLWluZCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnc2VxLWl0ZW0taW5kJzpcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuYXROZXdMaW5lKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbmRlbnQgKz0gc291cmNlLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnZG9jLW1vZGUnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ2Zsb3ctZXJyb3ItZW5kJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXROZXdMaW5lID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLm9mZnNldCArPSBzb3VyY2UubGVuZ3RoO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKiBDYWxsIGF0IGVuZCBvZiBpbnB1dCB0byBwdXNoIG91dCBhbnkgcmVtYWluaW5nIGNvbnN0cnVjdGlvbnMgKi9cbiAgICAqZW5kKCkge1xuICAgICAgICB3aGlsZSAodGhpcy5zdGFjay5sZW5ndGggPiAwKVxuICAgICAgICAgICAgeWllbGQqIHRoaXMucG9wKCk7XG4gICAgfVxuICAgIGdldCBzb3VyY2VUb2tlbigpIHtcbiAgICAgICAgY29uc3Qgc3QgPSB7XG4gICAgICAgICAgICB0eXBlOiB0aGlzLnR5cGUsXG4gICAgICAgICAgICBvZmZzZXQ6IHRoaXMub2Zmc2V0LFxuICAgICAgICAgICAgaW5kZW50OiB0aGlzLmluZGVudCxcbiAgICAgICAgICAgIHNvdXJjZTogdGhpcy5zb3VyY2VcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHN0O1xuICAgIH1cbiAgICAqc3RlcCgpIHtcbiAgICAgICAgY29uc3QgdG9wID0gdGhpcy5wZWVrKDEpO1xuICAgICAgICBpZiAodGhpcy50eXBlID09PSAnZG9jLWVuZCcgJiYgKCF0b3AgfHwgdG9wLnR5cGUgIT09ICdkb2MtZW5kJykpIHtcbiAgICAgICAgICAgIHdoaWxlICh0aGlzLnN0YWNrLmxlbmd0aCA+IDApXG4gICAgICAgICAgICAgICAgeWllbGQqIHRoaXMucG9wKCk7XG4gICAgICAgICAgICB0aGlzLnN0YWNrLnB1c2goe1xuICAgICAgICAgICAgICAgIHR5cGU6ICdkb2MtZW5kJyxcbiAgICAgICAgICAgICAgICBvZmZzZXQ6IHRoaXMub2Zmc2V0LFxuICAgICAgICAgICAgICAgIHNvdXJjZTogdGhpcy5zb3VyY2VcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdG9wKVxuICAgICAgICAgICAgcmV0dXJuIHlpZWxkKiB0aGlzLnN0cmVhbSgpO1xuICAgICAgICBzd2l0Y2ggKHRvcC50eXBlKSB7XG4gICAgICAgICAgICBjYXNlICdkb2N1bWVudCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHlpZWxkKiB0aGlzLmRvY3VtZW50KHRvcCk7XG4gICAgICAgICAgICBjYXNlICdhbGlhcyc6XG4gICAgICAgICAgICBjYXNlICdzY2FsYXInOlxuICAgICAgICAgICAgY2FzZSAnc2luZ2xlLXF1b3RlZC1zY2FsYXInOlxuICAgICAgICAgICAgY2FzZSAnZG91YmxlLXF1b3RlZC1zY2FsYXInOlxuICAgICAgICAgICAgICAgIHJldHVybiB5aWVsZCogdGhpcy5zY2FsYXIodG9wKTtcbiAgICAgICAgICAgIGNhc2UgJ2Jsb2NrLXNjYWxhcic6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHlpZWxkKiB0aGlzLmJsb2NrU2NhbGFyKHRvcCk7XG4gICAgICAgICAgICBjYXNlICdibG9jay1tYXAnOlxuICAgICAgICAgICAgICAgIHJldHVybiB5aWVsZCogdGhpcy5ibG9ja01hcCh0b3ApO1xuICAgICAgICAgICAgY2FzZSAnYmxvY2stc2VxJzpcbiAgICAgICAgICAgICAgICByZXR1cm4geWllbGQqIHRoaXMuYmxvY2tTZXF1ZW5jZSh0b3ApO1xuICAgICAgICAgICAgY2FzZSAnZmxvdy1jb2xsZWN0aW9uJzpcbiAgICAgICAgICAgICAgICByZXR1cm4geWllbGQqIHRoaXMuZmxvd0NvbGxlY3Rpb24odG9wKTtcbiAgICAgICAgICAgIGNhc2UgJ2RvYy1lbmQnOlxuICAgICAgICAgICAgICAgIHJldHVybiB5aWVsZCogdGhpcy5kb2N1bWVudEVuZCh0b3ApO1xuICAgICAgICB9XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0IHNob3VsZCBub3QgaGFwcGVuICovXG4gICAgICAgIHlpZWxkKiB0aGlzLnBvcCgpO1xuICAgIH1cbiAgICBwZWVrKG4pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSBuXTtcbiAgICB9XG4gICAgKnBvcChlcnJvcikge1xuICAgICAgICBjb25zdCB0b2tlbiA9IGVycm9yID8/IHRoaXMuc3RhY2sucG9wKCk7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiBzaG91bGQgbm90IGhhcHBlbiAqL1xuICAgICAgICBpZiAoIXRva2VuKSB7XG4gICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gJ1RyaWVkIHRvIHBvcCBhbiBlbXB0eSBzdGFjayc7XG4gICAgICAgICAgICB5aWVsZCB7IHR5cGU6ICdlcnJvcicsIG9mZnNldDogdGhpcy5vZmZzZXQsIHNvdXJjZTogJycsIG1lc3NhZ2UgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLnN0YWNrLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgeWllbGQgdG9rZW47XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB0b3AgPSB0aGlzLnBlZWsoMSk7XG4gICAgICAgICAgICBpZiAodG9rZW4udHlwZSA9PT0gJ2Jsb2NrLXNjYWxhcicpIHtcbiAgICAgICAgICAgICAgICAvLyBCbG9jayBzY2FsYXJzIHVzZSB0aGVpciBwYXJlbnQgcmF0aGVyIHRoYW4gaGVhZGVyIGluZGVudFxuICAgICAgICAgICAgICAgIHRva2VuLmluZGVudCA9ICdpbmRlbnQnIGluIHRvcCA/IHRvcC5pbmRlbnQgOiAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodG9rZW4udHlwZSA9PT0gJ2Zsb3ctY29sbGVjdGlvbicgJiYgdG9wLnR5cGUgPT09ICdkb2N1bWVudCcpIHtcbiAgICAgICAgICAgICAgICAvLyBJZ25vcmUgYWxsIGluZGVudCBmb3IgdG9wLWxldmVsIGZsb3cgY29sbGVjdGlvbnNcbiAgICAgICAgICAgICAgICB0b2tlbi5pbmRlbnQgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09ICdmbG93LWNvbGxlY3Rpb24nKVxuICAgICAgICAgICAgICAgIGZpeEZsb3dTZXFJdGVtcyh0b2tlbik7XG4gICAgICAgICAgICBzd2l0Y2ggKHRvcC50eXBlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnZG9jdW1lbnQnOlxuICAgICAgICAgICAgICAgICAgICB0b3AudmFsdWUgPSB0b2tlbjtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnYmxvY2stc2NhbGFyJzpcbiAgICAgICAgICAgICAgICAgICAgdG9wLnByb3BzLnB1c2godG9rZW4pOyAvLyBlcnJvclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdibG9jay1tYXAnOiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ID0gdG9wLml0ZW1zW3RvcC5pdGVtcy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGl0LnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0b3AuaXRlbXMucHVzaCh7IHN0YXJ0OiBbXSwga2V5OiB0b2tlbiwgc2VwOiBbXSB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25LZXlMaW5lID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChpdC5zZXApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0LnZhbHVlID0gdG9rZW47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKGl0LCB7IGtleTogdG9rZW4sIHNlcDogW10gfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uS2V5TGluZSA9ICFpdC5leHBsaWNpdEtleTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSAnYmxvY2stc2VxJzoge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpdCA9IHRvcC5pdGVtc1t0b3AuaXRlbXMubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgICAgIGlmIChpdC52YWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvcC5pdGVtcy5wdXNoKHsgc3RhcnQ6IFtdLCB2YWx1ZTogdG9rZW4gfSk7XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0LnZhbHVlID0gdG9rZW47XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlICdmbG93LWNvbGxlY3Rpb24nOiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ID0gdG9wLml0ZW1zW3RvcC5pdGVtcy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpdCB8fCBpdC52YWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvcC5pdGVtcy5wdXNoKHsgc3RhcnQ6IFtdLCBrZXk6IHRva2VuLCBzZXA6IFtdIH0pO1xuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChpdC5zZXApXG4gICAgICAgICAgICAgICAgICAgICAgICBpdC52YWx1ZSA9IHRva2VuO1xuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKGl0LCB7IGtleTogdG9rZW4sIHNlcDogW10gfSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgc2hvdWxkIG5vdCBoYXBwZW4gKi9cbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICB5aWVsZCogdGhpcy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgeWllbGQqIHRoaXMucG9wKHRva2VuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICgodG9wLnR5cGUgPT09ICdkb2N1bWVudCcgfHxcbiAgICAgICAgICAgICAgICB0b3AudHlwZSA9PT0gJ2Jsb2NrLW1hcCcgfHxcbiAgICAgICAgICAgICAgICB0b3AudHlwZSA9PT0gJ2Jsb2NrLXNlcScpICYmXG4gICAgICAgICAgICAgICAgKHRva2VuLnR5cGUgPT09ICdibG9jay1tYXAnIHx8IHRva2VuLnR5cGUgPT09ICdibG9jay1zZXEnKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGxhc3QgPSB0b2tlbi5pdGVtc1t0b2tlbi5pdGVtcy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICBpZiAobGFzdCAmJlxuICAgICAgICAgICAgICAgICAgICAhbGFzdC5zZXAgJiZcbiAgICAgICAgICAgICAgICAgICAgIWxhc3QudmFsdWUgJiZcbiAgICAgICAgICAgICAgICAgICAgbGFzdC5zdGFydC5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAgICAgICAgIGZpbmROb25FbXB0eUluZGV4KGxhc3Quc3RhcnQpID09PSAtMSAmJlxuICAgICAgICAgICAgICAgICAgICAodG9rZW4uaW5kZW50ID09PSAwIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBsYXN0LnN0YXJ0LmV2ZXJ5KHN0ID0+IHN0LnR5cGUgIT09ICdjb21tZW50JyB8fCBzdC5pbmRlbnQgPCB0b2tlbi5pbmRlbnQpKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodG9wLnR5cGUgPT09ICdkb2N1bWVudCcpXG4gICAgICAgICAgICAgICAgICAgICAgICB0b3AuZW5kID0gbGFzdC5zdGFydDtcbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgdG9wLml0ZW1zLnB1c2goeyBzdGFydDogbGFzdC5zdGFydCB9KTtcbiAgICAgICAgICAgICAgICAgICAgdG9rZW4uaXRlbXMuc3BsaWNlKC0xLCAxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgKnN0cmVhbSgpIHtcbiAgICAgICAgc3dpdGNoICh0aGlzLnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ2RpcmVjdGl2ZS1saW5lJzpcbiAgICAgICAgICAgICAgICB5aWVsZCB7IHR5cGU6ICdkaXJlY3RpdmUnLCBvZmZzZXQ6IHRoaXMub2Zmc2V0LCBzb3VyY2U6IHRoaXMuc291cmNlIH07XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgY2FzZSAnYnl0ZS1vcmRlci1tYXJrJzpcbiAgICAgICAgICAgIGNhc2UgJ3NwYWNlJzpcbiAgICAgICAgICAgIGNhc2UgJ2NvbW1lbnQnOlxuICAgICAgICAgICAgY2FzZSAnbmV3bGluZSc6XG4gICAgICAgICAgICAgICAgeWllbGQgdGhpcy5zb3VyY2VUb2tlbjtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBjYXNlICdkb2MtbW9kZSc6XG4gICAgICAgICAgICBjYXNlICdkb2Mtc3RhcnQnOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZG9jID0ge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnZG9jdW1lbnQnLFxuICAgICAgICAgICAgICAgICAgICBvZmZzZXQ6IHRoaXMub2Zmc2V0LFxuICAgICAgICAgICAgICAgICAgICBzdGFydDogW11cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnR5cGUgPT09ICdkb2Mtc3RhcnQnKVxuICAgICAgICAgICAgICAgICAgICBkb2Muc3RhcnQucHVzaCh0aGlzLnNvdXJjZVRva2VuKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YWNrLnB1c2goZG9jKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgeWllbGQge1xuICAgICAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgICAgIG9mZnNldDogdGhpcy5vZmZzZXQsXG4gICAgICAgICAgICBtZXNzYWdlOiBgVW5leHBlY3RlZCAke3RoaXMudHlwZX0gdG9rZW4gaW4gWUFNTCBzdHJlYW1gLFxuICAgICAgICAgICAgc291cmNlOiB0aGlzLnNvdXJjZVxuICAgICAgICB9O1xuICAgIH1cbiAgICAqZG9jdW1lbnQoZG9jKSB7XG4gICAgICAgIGlmIChkb2MudmFsdWUpXG4gICAgICAgICAgICByZXR1cm4geWllbGQqIHRoaXMubGluZUVuZChkb2MpO1xuICAgICAgICBzd2l0Y2ggKHRoaXMudHlwZSkge1xuICAgICAgICAgICAgY2FzZSAnZG9jLXN0YXJ0Jzoge1xuICAgICAgICAgICAgICAgIGlmIChmaW5kTm9uRW1wdHlJbmRleChkb2Muc3RhcnQpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICB5aWVsZCogdGhpcy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgeWllbGQqIHRoaXMuc3RlcCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIGRvYy5zdGFydC5wdXNoKHRoaXMuc291cmNlVG9rZW4pO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ2FuY2hvcic6XG4gICAgICAgICAgICBjYXNlICd0YWcnOlxuICAgICAgICAgICAgY2FzZSAnc3BhY2UnOlxuICAgICAgICAgICAgY2FzZSAnY29tbWVudCc6XG4gICAgICAgICAgICBjYXNlICduZXdsaW5lJzpcbiAgICAgICAgICAgICAgICBkb2Muc3RhcnQucHVzaCh0aGlzLnNvdXJjZVRva2VuKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYnYgPSB0aGlzLnN0YXJ0QmxvY2tWYWx1ZShkb2MpO1xuICAgICAgICBpZiAoYnYpXG4gICAgICAgICAgICB0aGlzLnN0YWNrLnB1c2goYnYpO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHlpZWxkIHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgICAgICAgIG9mZnNldDogdGhpcy5vZmZzZXQsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogYFVuZXhwZWN0ZWQgJHt0aGlzLnR5cGV9IHRva2VuIGluIFlBTUwgZG9jdW1lbnRgLFxuICAgICAgICAgICAgICAgIHNvdXJjZTogdGhpcy5zb3VyY2VcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG4gICAgKnNjYWxhcihzY2FsYXIpIHtcbiAgICAgICAgaWYgKHRoaXMudHlwZSA9PT0gJ21hcC12YWx1ZS1pbmQnKSB7XG4gICAgICAgICAgICBjb25zdCBwcmV2ID0gZ2V0UHJldlByb3BzKHRoaXMucGVlaygyKSk7XG4gICAgICAgICAgICBjb25zdCBzdGFydCA9IGdldEZpcnN0S2V5U3RhcnRQcm9wcyhwcmV2KTtcbiAgICAgICAgICAgIGxldCBzZXA7XG4gICAgICAgICAgICBpZiAoc2NhbGFyLmVuZCkge1xuICAgICAgICAgICAgICAgIHNlcCA9IHNjYWxhci5lbmQ7XG4gICAgICAgICAgICAgICAgc2VwLnB1c2godGhpcy5zb3VyY2VUb2tlbik7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHNjYWxhci5lbmQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgc2VwID0gW3RoaXMuc291cmNlVG9rZW5dO1xuICAgICAgICAgICAgY29uc3QgbWFwID0ge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdibG9jay1tYXAnLFxuICAgICAgICAgICAgICAgIG9mZnNldDogc2NhbGFyLm9mZnNldCxcbiAgICAgICAgICAgICAgICBpbmRlbnQ6IHNjYWxhci5pbmRlbnQsXG4gICAgICAgICAgICAgICAgaXRlbXM6IFt7IHN0YXJ0LCBrZXk6IHNjYWxhciwgc2VwIH1dXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy5vbktleUxpbmUgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aCAtIDFdID0gbWFwO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHlpZWxkKiB0aGlzLmxpbmVFbmQoc2NhbGFyKTtcbiAgICB9XG4gICAgKmJsb2NrU2NhbGFyKHNjYWxhcikge1xuICAgICAgICBzd2l0Y2ggKHRoaXMudHlwZSkge1xuICAgICAgICAgICAgY2FzZSAnc3BhY2UnOlxuICAgICAgICAgICAgY2FzZSAnY29tbWVudCc6XG4gICAgICAgICAgICBjYXNlICduZXdsaW5lJzpcbiAgICAgICAgICAgICAgICBzY2FsYXIucHJvcHMucHVzaCh0aGlzLnNvdXJjZVRva2VuKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBjYXNlICdzY2FsYXInOlxuICAgICAgICAgICAgICAgIHNjYWxhci5zb3VyY2UgPSB0aGlzLnNvdXJjZTtcbiAgICAgICAgICAgICAgICAvLyBibG9jay1zY2FsYXIgc291cmNlIGluY2x1ZGVzIHRyYWlsaW5nIG5ld2xpbmVcbiAgICAgICAgICAgICAgICB0aGlzLmF0TmV3TGluZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5pbmRlbnQgPSAwO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLm9uTmV3TGluZSkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgbmwgPSB0aGlzLnNvdXJjZS5pbmRleE9mKCdcXG4nKSArIDE7XG4gICAgICAgICAgICAgICAgICAgIHdoaWxlIChubCAhPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbk5ld0xpbmUodGhpcy5vZmZzZXQgKyBubCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBubCA9IHRoaXMuc291cmNlLmluZGV4T2YoJ1xcbicsIG5sKSArIDE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgeWllbGQqIHRoaXMucG9wKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCBzaG91bGQgbm90IGhhcHBlbiAqL1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB5aWVsZCogdGhpcy5wb3AoKTtcbiAgICAgICAgICAgICAgICB5aWVsZCogdGhpcy5zdGVwKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgKmJsb2NrTWFwKG1hcCkge1xuICAgICAgICBjb25zdCBpdCA9IG1hcC5pdGVtc1ttYXAuaXRlbXMubGVuZ3RoIC0gMV07XG4gICAgICAgIC8vIGl0LnNlcCBpcyB0cnVlLWlzaCBpZiBwYWlyIGFscmVhZHkgaGFzIGtleSBvciA6IHNlcGFyYXRvclxuICAgICAgICBzd2l0Y2ggKHRoaXMudHlwZSkge1xuICAgICAgICAgICAgY2FzZSAnbmV3bGluZSc6XG4gICAgICAgICAgICAgICAgdGhpcy5vbktleUxpbmUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBpZiAoaXQudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5kID0gJ2VuZCcgaW4gaXQudmFsdWUgPyBpdC52YWx1ZS5lbmQgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxhc3QgPSBBcnJheS5pc0FycmF5KGVuZCkgPyBlbmRbZW5kLmxlbmd0aCAtIDFdIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICBpZiAobGFzdD8udHlwZSA9PT0gJ2NvbW1lbnQnKVxuICAgICAgICAgICAgICAgICAgICAgICAgZW5kPy5wdXNoKHRoaXMuc291cmNlVG9rZW4pO1xuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXAuaXRlbXMucHVzaCh7IHN0YXJ0OiBbdGhpcy5zb3VyY2VUb2tlbl0gfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGl0LnNlcCkge1xuICAgICAgICAgICAgICAgICAgICBpdC5zZXAucHVzaCh0aGlzLnNvdXJjZVRva2VuKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGl0LnN0YXJ0LnB1c2godGhpcy5zb3VyY2VUb2tlbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGNhc2UgJ3NwYWNlJzpcbiAgICAgICAgICAgIGNhc2UgJ2NvbW1lbnQnOlxuICAgICAgICAgICAgICAgIGlmIChpdC52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBtYXAuaXRlbXMucHVzaCh7IHN0YXJ0OiBbdGhpcy5zb3VyY2VUb2tlbl0gfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGl0LnNlcCkge1xuICAgICAgICAgICAgICAgICAgICBpdC5zZXAucHVzaCh0aGlzLnNvdXJjZVRva2VuKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmF0SW5kZW50ZWRDb21tZW50KGl0LnN0YXJ0LCBtYXAuaW5kZW50KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJldiA9IG1hcC5pdGVtc1ttYXAuaXRlbXMubGVuZ3RoIC0gMl07XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbmQgPSBwcmV2Py52YWx1ZT8uZW5kO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZW5kKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KGVuZCwgaXQuc3RhcnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZC5wdXNoKHRoaXMuc291cmNlVG9rZW4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcC5pdGVtcy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaXQuc3RhcnQucHVzaCh0aGlzLnNvdXJjZVRva2VuKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmluZGVudCA+PSBtYXAuaW5kZW50KSB7XG4gICAgICAgICAgICBjb25zdCBhdE1hcEluZGVudCA9ICF0aGlzLm9uS2V5TGluZSAmJiB0aGlzLmluZGVudCA9PT0gbWFwLmluZGVudDtcbiAgICAgICAgICAgIGNvbnN0IGF0TmV4dEl0ZW0gPSBhdE1hcEluZGVudCAmJlxuICAgICAgICAgICAgICAgIChpdC5zZXAgfHwgaXQuZXhwbGljaXRLZXkpICYmXG4gICAgICAgICAgICAgICAgdGhpcy50eXBlICE9PSAnc2VxLWl0ZW0taW5kJztcbiAgICAgICAgICAgIC8vIEZvciBlbXB0eSBub2RlcywgYXNzaWduIG5ld2xpbmUtc2VwYXJhdGVkIG5vdCBpbmRlbnRlZCBlbXB0eSB0b2tlbnMgdG8gZm9sbG93aW5nIG5vZGVcbiAgICAgICAgICAgIGxldCBzdGFydCA9IFtdO1xuICAgICAgICAgICAgaWYgKGF0TmV4dEl0ZW0gJiYgaXQuc2VwICYmICFpdC52YWx1ZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5sID0gW107XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdC5zZXAubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3QgPSBpdC5zZXBbaV07XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoc3QudHlwZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbmV3bGluZSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmwucHVzaChpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3NwYWNlJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2NvbW1lbnQnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdC5pbmRlbnQgPiBtYXAuaW5kZW50KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBubC5sZW5ndGggPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBubC5sZW5ndGggPSAwO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChubC5sZW5ndGggPj0gMilcbiAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSBpdC5zZXAuc3BsaWNlKG5sWzFdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN3aXRjaCAodGhpcy50eXBlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnYW5jaG9yJzpcbiAgICAgICAgICAgICAgICBjYXNlICd0YWcnOlxuICAgICAgICAgICAgICAgICAgICBpZiAoYXROZXh0SXRlbSB8fCBpdC52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQucHVzaCh0aGlzLnNvdXJjZVRva2VuKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcC5pdGVtcy5wdXNoKHsgc3RhcnQgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uS2V5TGluZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoaXQuc2VwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpdC5zZXAucHVzaCh0aGlzLnNvdXJjZVRva2VuKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0LnN0YXJ0LnB1c2godGhpcy5zb3VyY2VUb2tlbik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGNhc2UgJ2V4cGxpY2l0LWtleS1pbmQnOlxuICAgICAgICAgICAgICAgICAgICBpZiAoIWl0LnNlcCAmJiAhaXQuZXhwbGljaXRLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0LnN0YXJ0LnB1c2godGhpcy5zb3VyY2VUb2tlbik7XG4gICAgICAgICAgICAgICAgICAgICAgICBpdC5leHBsaWNpdEtleSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoYXROZXh0SXRlbSB8fCBpdC52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQucHVzaCh0aGlzLnNvdXJjZVRva2VuKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcC5pdGVtcy5wdXNoKHsgc3RhcnQsIGV4cGxpY2l0S2V5OiB0cnVlIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGFjay5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnYmxvY2stbWFwJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ6IHRoaXMub2Zmc2V0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGVudDogdGhpcy5pbmRlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXM6IFt7IHN0YXJ0OiBbdGhpcy5zb3VyY2VUb2tlbl0sIGV4cGxpY2l0S2V5OiB0cnVlIH1dXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uS2V5TGluZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICBjYXNlICdtYXAtdmFsdWUtaW5kJzpcbiAgICAgICAgICAgICAgICAgICAgaWYgKGl0LmV4cGxpY2l0S2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWl0LnNlcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmNsdWRlc1Rva2VuKGl0LnN0YXJ0LCAnbmV3bGluZScpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oaXQsIHsga2V5OiBudWxsLCBzZXA6IFt0aGlzLnNvdXJjZVRva2VuXSB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gZ2V0Rmlyc3RLZXlTdGFydFByb3BzKGl0LnN0YXJ0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGFjay5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdibG9jay1tYXAnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0OiB0aGlzLm9mZnNldCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGVudDogdGhpcy5pbmRlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtczogW3sgc3RhcnQsIGtleTogbnVsbCwgc2VwOiBbdGhpcy5zb3VyY2VUb2tlbl0gfV1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoaXQudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXAuaXRlbXMucHVzaCh7IHN0YXJ0OiBbXSwga2V5OiBudWxsLCBzZXA6IFt0aGlzLnNvdXJjZVRva2VuXSB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGluY2x1ZGVzVG9rZW4oaXQuc2VwLCAnbWFwLXZhbHVlLWluZCcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGFjay5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2Jsb2NrLW1hcCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldDogdGhpcy5vZmZzZXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGVudDogdGhpcy5pbmRlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zOiBbeyBzdGFydCwga2V5OiBudWxsLCBzZXA6IFt0aGlzLnNvdXJjZVRva2VuXSB9XVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoaXNGbG93VG9rZW4oaXQua2V5KSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICFpbmNsdWRlc1Rva2VuKGl0LnNlcCwgJ25ld2xpbmUnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gZ2V0Rmlyc3RLZXlTdGFydFByb3BzKGl0LnN0YXJ0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBrZXkgPSBpdC5rZXk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VwID0gaXQuc2VwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcC5wdXNoKHRoaXMuc291cmNlVG9rZW4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgdHlwZSBndWFyZCBpcyB3cm9uZyBoZXJlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGl0LmtleTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIHR5cGUgZ3VhcmQgaXMgd3JvbmcgaGVyZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBpdC5zZXA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGFjay5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2Jsb2NrLW1hcCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldDogdGhpcy5vZmZzZXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGVudDogdGhpcy5pbmRlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zOiBbeyBzdGFydCwga2V5LCBzZXAgfV1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN0YXJ0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBOb3QgYWN0dWFsbHkgYXQgbmV4dCBpdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXQuc2VwID0gaXQuc2VwLmNvbmNhdChzdGFydCwgdGhpcy5zb3VyY2VUb2tlbik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdC5zZXAucHVzaCh0aGlzLnNvdXJjZVRva2VuKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXQuc2VwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihpdCwgeyBrZXk6IG51bGwsIHNlcDogW3RoaXMuc291cmNlVG9rZW5dIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoaXQudmFsdWUgfHwgYXROZXh0SXRlbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcC5pdGVtcy5wdXNoKHsgc3RhcnQsIGtleTogbnVsbCwgc2VwOiBbdGhpcy5zb3VyY2VUb2tlbl0gfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChpbmNsdWRlc1Rva2VuKGl0LnNlcCwgJ21hcC12YWx1ZS1pbmQnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhY2sucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdibG9jay1tYXAnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ6IHRoaXMub2Zmc2V0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRlbnQ6IHRoaXMuaW5kZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtczogW3sgc3RhcnQ6IFtdLCBrZXk6IG51bGwsIHNlcDogW3RoaXMuc291cmNlVG9rZW5dIH1dXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdC5zZXAucHVzaCh0aGlzLnNvdXJjZVRva2VuKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uS2V5TGluZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICBjYXNlICdhbGlhcyc6XG4gICAgICAgICAgICAgICAgY2FzZSAnc2NhbGFyJzpcbiAgICAgICAgICAgICAgICBjYXNlICdzaW5nbGUtcXVvdGVkLXNjYWxhcic6XG4gICAgICAgICAgICAgICAgY2FzZSAnZG91YmxlLXF1b3RlZC1zY2FsYXInOiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZzID0gdGhpcy5mbG93U2NhbGFyKHRoaXMudHlwZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhdE5leHRJdGVtIHx8IGl0LnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXAuaXRlbXMucHVzaCh7IHN0YXJ0LCBrZXk6IGZzLCBzZXA6IFtdIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbktleUxpbmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGl0LnNlcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGFjay5wdXNoKGZzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oaXQsIHsga2V5OiBmcywgc2VwOiBbXSB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25LZXlMaW5lID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYnYgPSB0aGlzLnN0YXJ0QmxvY2tWYWx1ZShtYXApO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYnYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChidi50eXBlID09PSAnYmxvY2stc2VxJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXQuZXhwbGljaXRLZXkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXQuc2VwICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFpbmNsdWRlc1Rva2VuKGl0LnNlcCwgJ25ld2xpbmUnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5aWVsZCogdGhpcy5wb3Aoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldDogdGhpcy5vZmZzZXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAnVW5leHBlY3RlZCBibG9jay1zZXEtaW5kIG9uIHNhbWUgbGluZSB3aXRoIGtleScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2U6IHRoaXMuc291cmNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoYXRNYXBJbmRlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXAuaXRlbXMucHVzaCh7IHN0YXJ0IH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGFjay5wdXNoKGJ2KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB5aWVsZCogdGhpcy5wb3AoKTtcbiAgICAgICAgeWllbGQqIHRoaXMuc3RlcCgpO1xuICAgIH1cbiAgICAqYmxvY2tTZXF1ZW5jZShzZXEpIHtcbiAgICAgICAgY29uc3QgaXQgPSBzZXEuaXRlbXNbc2VxLml0ZW1zLmxlbmd0aCAtIDFdO1xuICAgICAgICBzd2l0Y2ggKHRoaXMudHlwZSkge1xuICAgICAgICAgICAgY2FzZSAnbmV3bGluZSc6XG4gICAgICAgICAgICAgICAgaWYgKGl0LnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVuZCA9ICdlbmQnIGluIGl0LnZhbHVlID8gaXQudmFsdWUuZW5kIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBsYXN0ID0gQXJyYXkuaXNBcnJheShlbmQpID8gZW5kW2VuZC5sZW5ndGggLSAxXSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxhc3Q/LnR5cGUgPT09ICdjb21tZW50JylcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuZD8ucHVzaCh0aGlzLnNvdXJjZVRva2VuKTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgc2VxLml0ZW1zLnB1c2goeyBzdGFydDogW3RoaXMuc291cmNlVG9rZW5dIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIGl0LnN0YXJ0LnB1c2godGhpcy5zb3VyY2VUb2tlbik7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgY2FzZSAnc3BhY2UnOlxuICAgICAgICAgICAgY2FzZSAnY29tbWVudCc6XG4gICAgICAgICAgICAgICAgaWYgKGl0LnZhbHVlKVxuICAgICAgICAgICAgICAgICAgICBzZXEuaXRlbXMucHVzaCh7IHN0YXJ0OiBbdGhpcy5zb3VyY2VUb2tlbl0gfSk7XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmF0SW5kZW50ZWRDb21tZW50KGl0LnN0YXJ0LCBzZXEuaW5kZW50KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJldiA9IHNlcS5pdGVtc1tzZXEuaXRlbXMubGVuZ3RoIC0gMl07XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbmQgPSBwcmV2Py52YWx1ZT8uZW5kO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZW5kKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KGVuZCwgaXQuc3RhcnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZC5wdXNoKHRoaXMuc291cmNlVG9rZW4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcS5pdGVtcy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaXQuc3RhcnQucHVzaCh0aGlzLnNvdXJjZVRva2VuKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgY2FzZSAnYW5jaG9yJzpcbiAgICAgICAgICAgIGNhc2UgJ3RhZyc6XG4gICAgICAgICAgICAgICAgaWYgKGl0LnZhbHVlIHx8IHRoaXMuaW5kZW50IDw9IHNlcS5pbmRlbnQpXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGl0LnN0YXJ0LnB1c2godGhpcy5zb3VyY2VUb2tlbik7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgY2FzZSAnc2VxLWl0ZW0taW5kJzpcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pbmRlbnQgIT09IHNlcS5pbmRlbnQpXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGlmIChpdC52YWx1ZSB8fCBpbmNsdWRlc1Rva2VuKGl0LnN0YXJ0LCAnc2VxLWl0ZW0taW5kJykpXG4gICAgICAgICAgICAgICAgICAgIHNlcS5pdGVtcy5wdXNoKHsgc3RhcnQ6IFt0aGlzLnNvdXJjZVRva2VuXSB9KTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIGl0LnN0YXJ0LnB1c2godGhpcy5zb3VyY2VUb2tlbik7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmluZGVudCA+IHNlcS5pbmRlbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGJ2ID0gdGhpcy5zdGFydEJsb2NrVmFsdWUoc2VxKTtcbiAgICAgICAgICAgIGlmIChidikge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhY2sucHVzaChidik7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHlpZWxkKiB0aGlzLnBvcCgpO1xuICAgICAgICB5aWVsZCogdGhpcy5zdGVwKCk7XG4gICAgfVxuICAgICpmbG93Q29sbGVjdGlvbihmYykge1xuICAgICAgICBjb25zdCBpdCA9IGZjLml0ZW1zW2ZjLml0ZW1zLmxlbmd0aCAtIDFdO1xuICAgICAgICBpZiAodGhpcy50eXBlID09PSAnZmxvdy1lcnJvci1lbmQnKSB7XG4gICAgICAgICAgICBsZXQgdG9wO1xuICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgIHlpZWxkKiB0aGlzLnBvcCgpO1xuICAgICAgICAgICAgICAgIHRvcCA9IHRoaXMucGVlaygxKTtcbiAgICAgICAgICAgIH0gd2hpbGUgKHRvcCAmJiB0b3AudHlwZSA9PT0gJ2Zsb3ctY29sbGVjdGlvbicpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGZjLmVuZC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHN3aXRjaCAodGhpcy50eXBlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnY29tbWEnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ2V4cGxpY2l0LWtleS1pbmQnOlxuICAgICAgICAgICAgICAgICAgICBpZiAoIWl0IHx8IGl0LnNlcClcbiAgICAgICAgICAgICAgICAgICAgICAgIGZjLml0ZW1zLnB1c2goeyBzdGFydDogW3RoaXMuc291cmNlVG9rZW5dIH0pO1xuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICBpdC5zdGFydC5wdXNoKHRoaXMuc291cmNlVG9rZW4pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgY2FzZSAnbWFwLXZhbHVlLWluZCc6XG4gICAgICAgICAgICAgICAgICAgIGlmICghaXQgfHwgaXQudmFsdWUpXG4gICAgICAgICAgICAgICAgICAgICAgICBmYy5pdGVtcy5wdXNoKHsgc3RhcnQ6IFtdLCBrZXk6IG51bGwsIHNlcDogW3RoaXMuc291cmNlVG9rZW5dIH0pO1xuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChpdC5zZXApXG4gICAgICAgICAgICAgICAgICAgICAgICBpdC5zZXAucHVzaCh0aGlzLnNvdXJjZVRva2VuKTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihpdCwgeyBrZXk6IG51bGwsIHNlcDogW3RoaXMuc291cmNlVG9rZW5dIH0pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgY2FzZSAnc3BhY2UnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ2NvbW1lbnQnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ25ld2xpbmUnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ2FuY2hvcic6XG4gICAgICAgICAgICAgICAgY2FzZSAndGFnJzpcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpdCB8fCBpdC52YWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGZjLml0ZW1zLnB1c2goeyBzdGFydDogW3RoaXMuc291cmNlVG9rZW5dIH0pO1xuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChpdC5zZXApXG4gICAgICAgICAgICAgICAgICAgICAgICBpdC5zZXAucHVzaCh0aGlzLnNvdXJjZVRva2VuKTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgaXQuc3RhcnQucHVzaCh0aGlzLnNvdXJjZVRva2VuKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGNhc2UgJ2FsaWFzJzpcbiAgICAgICAgICAgICAgICBjYXNlICdzY2FsYXInOlxuICAgICAgICAgICAgICAgIGNhc2UgJ3NpbmdsZS1xdW90ZWQtc2NhbGFyJzpcbiAgICAgICAgICAgICAgICBjYXNlICdkb3VibGUtcXVvdGVkLXNjYWxhcic6IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZnMgPSB0aGlzLmZsb3dTY2FsYXIodGhpcy50eXBlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpdCB8fCBpdC52YWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGZjLml0ZW1zLnB1c2goeyBzdGFydDogW10sIGtleTogZnMsIHNlcDogW10gfSk7XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGl0LnNlcClcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhY2sucHVzaChmcyk7XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oaXQsIHsga2V5OiBmcywgc2VwOiBbXSB9KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlICdmbG93LW1hcC1lbmQnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ2Zsb3ctc2VxLWVuZCc6XG4gICAgICAgICAgICAgICAgICAgIGZjLmVuZC5wdXNoKHRoaXMuc291cmNlVG9rZW4pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBidiA9IHRoaXMuc3RhcnRCbG9ja1ZhbHVlKGZjKTtcbiAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlIHNob3VsZCBub3QgaGFwcGVuICovXG4gICAgICAgICAgICBpZiAoYnYpXG4gICAgICAgICAgICAgICAgdGhpcy5zdGFjay5wdXNoKGJ2KTtcbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHlpZWxkKiB0aGlzLnBvcCgpO1xuICAgICAgICAgICAgICAgIHlpZWxkKiB0aGlzLnN0ZXAoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudCA9IHRoaXMucGVlaygyKTtcbiAgICAgICAgICAgIGlmIChwYXJlbnQudHlwZSA9PT0gJ2Jsb2NrLW1hcCcgJiZcbiAgICAgICAgICAgICAgICAoKHRoaXMudHlwZSA9PT0gJ21hcC12YWx1ZS1pbmQnICYmIHBhcmVudC5pbmRlbnQgPT09IGZjLmluZGVudCkgfHxcbiAgICAgICAgICAgICAgICAgICAgKHRoaXMudHlwZSA9PT0gJ25ld2xpbmUnICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAhcGFyZW50Lml0ZW1zW3BhcmVudC5pdGVtcy5sZW5ndGggLSAxXS5zZXApKSkge1xuICAgICAgICAgICAgICAgIHlpZWxkKiB0aGlzLnBvcCgpO1xuICAgICAgICAgICAgICAgIHlpZWxkKiB0aGlzLnN0ZXAoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMudHlwZSA9PT0gJ21hcC12YWx1ZS1pbmQnICYmXG4gICAgICAgICAgICAgICAgcGFyZW50LnR5cGUgIT09ICdmbG93LWNvbGxlY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJldiA9IGdldFByZXZQcm9wcyhwYXJlbnQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gZ2V0Rmlyc3RLZXlTdGFydFByb3BzKHByZXYpO1xuICAgICAgICAgICAgICAgIGZpeEZsb3dTZXFJdGVtcyhmYyk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2VwID0gZmMuZW5kLnNwbGljZSgxLCBmYy5lbmQubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICBzZXAucHVzaCh0aGlzLnNvdXJjZVRva2VuKTtcbiAgICAgICAgICAgICAgICBjb25zdCBtYXAgPSB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdibG9jay1tYXAnLFxuICAgICAgICAgICAgICAgICAgICBvZmZzZXQ6IGZjLm9mZnNldCxcbiAgICAgICAgICAgICAgICAgICAgaW5kZW50OiBmYy5pbmRlbnQsXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1zOiBbeyBzdGFydCwga2V5OiBmYywgc2VwIH1dXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB0aGlzLm9uS2V5TGluZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aCAtIDFdID0gbWFwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgeWllbGQqIHRoaXMubGluZUVuZChmYyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZmxvd1NjYWxhcih0eXBlKSB7XG4gICAgICAgIGlmICh0aGlzLm9uTmV3TGluZSkge1xuICAgICAgICAgICAgbGV0IG5sID0gdGhpcy5zb3VyY2UuaW5kZXhPZignXFxuJykgKyAxO1xuICAgICAgICAgICAgd2hpbGUgKG5sICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbk5ld0xpbmUodGhpcy5vZmZzZXQgKyBubCk7XG4gICAgICAgICAgICAgICAgbmwgPSB0aGlzLnNvdXJjZS5pbmRleE9mKCdcXG4nLCBubCkgKyAxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgb2Zmc2V0OiB0aGlzLm9mZnNldCxcbiAgICAgICAgICAgIGluZGVudDogdGhpcy5pbmRlbnQsXG4gICAgICAgICAgICBzb3VyY2U6IHRoaXMuc291cmNlXG4gICAgICAgIH07XG4gICAgfVxuICAgIHN0YXJ0QmxvY2tWYWx1ZShwYXJlbnQpIHtcbiAgICAgICAgc3dpdGNoICh0aGlzLnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ2FsaWFzJzpcbiAgICAgICAgICAgIGNhc2UgJ3NjYWxhcic6XG4gICAgICAgICAgICBjYXNlICdzaW5nbGUtcXVvdGVkLXNjYWxhcic6XG4gICAgICAgICAgICBjYXNlICdkb3VibGUtcXVvdGVkLXNjYWxhcic6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmxvd1NjYWxhcih0aGlzLnR5cGUpO1xuICAgICAgICAgICAgY2FzZSAnYmxvY2stc2NhbGFyLWhlYWRlcic6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2Jsb2NrLXNjYWxhcicsXG4gICAgICAgICAgICAgICAgICAgIG9mZnNldDogdGhpcy5vZmZzZXQsXG4gICAgICAgICAgICAgICAgICAgIGluZGVudDogdGhpcy5pbmRlbnQsXG4gICAgICAgICAgICAgICAgICAgIHByb3BzOiBbdGhpcy5zb3VyY2VUb2tlbl0sXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZTogJydcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgY2FzZSAnZmxvdy1tYXAtc3RhcnQnOlxuICAgICAgICAgICAgY2FzZSAnZmxvdy1zZXEtc3RhcnQnOlxuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdmbG93LWNvbGxlY3Rpb24nLFxuICAgICAgICAgICAgICAgICAgICBvZmZzZXQ6IHRoaXMub2Zmc2V0LFxuICAgICAgICAgICAgICAgICAgICBpbmRlbnQ6IHRoaXMuaW5kZW50LFxuICAgICAgICAgICAgICAgICAgICBzdGFydDogdGhpcy5zb3VyY2VUb2tlbixcbiAgICAgICAgICAgICAgICAgICAgaXRlbXM6IFtdLFxuICAgICAgICAgICAgICAgICAgICBlbmQ6IFtdXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNhc2UgJ3NlcS1pdGVtLWluZCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2Jsb2NrLXNlcScsXG4gICAgICAgICAgICAgICAgICAgIG9mZnNldDogdGhpcy5vZmZzZXQsXG4gICAgICAgICAgICAgICAgICAgIGluZGVudDogdGhpcy5pbmRlbnQsXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1zOiBbeyBzdGFydDogW3RoaXMuc291cmNlVG9rZW5dIH1dXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNhc2UgJ2V4cGxpY2l0LWtleS1pbmQnOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbktleUxpbmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGNvbnN0IHByZXYgPSBnZXRQcmV2UHJvcHMocGFyZW50KTtcbiAgICAgICAgICAgICAgICBjb25zdCBzdGFydCA9IGdldEZpcnN0S2V5U3RhcnRQcm9wcyhwcmV2KTtcbiAgICAgICAgICAgICAgICBzdGFydC5wdXNoKHRoaXMuc291cmNlVG9rZW4pO1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdibG9jay1tYXAnLFxuICAgICAgICAgICAgICAgICAgICBvZmZzZXQ6IHRoaXMub2Zmc2V0LFxuICAgICAgICAgICAgICAgICAgICBpbmRlbnQ6IHRoaXMuaW5kZW50LFxuICAgICAgICAgICAgICAgICAgICBpdGVtczogW3sgc3RhcnQsIGV4cGxpY2l0S2V5OiB0cnVlIH1dXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ21hcC12YWx1ZS1pbmQnOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbktleUxpbmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGNvbnN0IHByZXYgPSBnZXRQcmV2UHJvcHMocGFyZW50KTtcbiAgICAgICAgICAgICAgICBjb25zdCBzdGFydCA9IGdldEZpcnN0S2V5U3RhcnRQcm9wcyhwcmV2KTtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnYmxvY2stbWFwJyxcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0OiB0aGlzLm9mZnNldCxcbiAgICAgICAgICAgICAgICAgICAgaW5kZW50OiB0aGlzLmluZGVudCxcbiAgICAgICAgICAgICAgICAgICAgaXRlbXM6IFt7IHN0YXJ0LCBrZXk6IG51bGwsIHNlcDogW3RoaXMuc291cmNlVG9rZW5dIH1dXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgYXRJbmRlbnRlZENvbW1lbnQoc3RhcnQsIGluZGVudCkge1xuICAgICAgICBpZiAodGhpcy50eXBlICE9PSAnY29tbWVudCcpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmICh0aGlzLmluZGVudCA8PSBpbmRlbnQpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIHJldHVybiBzdGFydC5ldmVyeShzdCA9PiBzdC50eXBlID09PSAnbmV3bGluZScgfHwgc3QudHlwZSA9PT0gJ3NwYWNlJyk7XG4gICAgfVxuICAgICpkb2N1bWVudEVuZChkb2NFbmQpIHtcbiAgICAgICAgaWYgKHRoaXMudHlwZSAhPT0gJ2RvYy1tb2RlJykge1xuICAgICAgICAgICAgaWYgKGRvY0VuZC5lbmQpXG4gICAgICAgICAgICAgICAgZG9jRW5kLmVuZC5wdXNoKHRoaXMuc291cmNlVG9rZW4pO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGRvY0VuZC5lbmQgPSBbdGhpcy5zb3VyY2VUb2tlbl07XG4gICAgICAgICAgICBpZiAodGhpcy50eXBlID09PSAnbmV3bGluZScpXG4gICAgICAgICAgICAgICAgeWllbGQqIHRoaXMucG9wKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgKmxpbmVFbmQodG9rZW4pIHtcbiAgICAgICAgc3dpdGNoICh0aGlzLnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ2NvbW1hJzpcbiAgICAgICAgICAgIGNhc2UgJ2RvYy1zdGFydCc6XG4gICAgICAgICAgICBjYXNlICdkb2MtZW5kJzpcbiAgICAgICAgICAgIGNhc2UgJ2Zsb3ctc2VxLWVuZCc6XG4gICAgICAgICAgICBjYXNlICdmbG93LW1hcC1lbmQnOlxuICAgICAgICAgICAgY2FzZSAnbWFwLXZhbHVlLWluZCc6XG4gICAgICAgICAgICAgICAgeWllbGQqIHRoaXMucG9wKCk7XG4gICAgICAgICAgICAgICAgeWllbGQqIHRoaXMuc3RlcCgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbmV3bGluZSc6XG4gICAgICAgICAgICAgICAgdGhpcy5vbktleUxpbmUgPSBmYWxzZTtcbiAgICAgICAgICAgIC8vIGZhbGx0aHJvdWdoXG4gICAgICAgICAgICBjYXNlICdzcGFjZSc6XG4gICAgICAgICAgICBjYXNlICdjb21tZW50JzpcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgLy8gYWxsIG90aGVyIHZhbHVlcyBhcmUgZXJyb3JzXG4gICAgICAgICAgICAgICAgaWYgKHRva2VuLmVuZClcbiAgICAgICAgICAgICAgICAgICAgdG9rZW4uZW5kLnB1c2godGhpcy5zb3VyY2VUb2tlbik7XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICB0b2tlbi5lbmQgPSBbdGhpcy5zb3VyY2VUb2tlbl07XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMudHlwZSA9PT0gJ25ld2xpbmUnKVxuICAgICAgICAgICAgICAgICAgICB5aWVsZCogdGhpcy5wb3AoKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0cy5QYXJzZXIgPSBQYXJzZXI7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///578\n")},584:module=>{eval('/*\nLanguage: Coq\nAuthor: Stephan Boyer \nCategory: functional\nWebsite: https://coq.inria.fr\n*/\n\n/** @type LanguageFn */\nfunction coq(hljs) {\n const KEYWORDS = [\n "_|0",\n "as",\n "at",\n "cofix",\n "else",\n "end",\n "exists",\n "exists2",\n "fix",\n "for",\n "forall",\n "fun",\n "if",\n "IF",\n "in",\n "let",\n "match",\n "mod",\n "Prop",\n "return",\n "Set",\n "then",\n "Type",\n "using",\n "where",\n "with",\n "Abort",\n "About",\n "Add",\n "Admit",\n "Admitted",\n "All",\n "Arguments",\n "Assumptions",\n "Axiom",\n "Back",\n "BackTo",\n "Backtrack",\n "Bind",\n "Blacklist",\n "Canonical",\n "Cd",\n "Check",\n "Class",\n "Classes",\n "Close",\n "Coercion",\n "Coercions",\n "CoFixpoint",\n "CoInductive",\n "Collection",\n "Combined",\n "Compute",\n "Conjecture",\n "Conjectures",\n "Constant",\n "constr",\n "Constraint",\n "Constructors",\n "Context",\n "Corollary",\n "CreateHintDb",\n "Cut",\n "Declare",\n "Defined",\n "Definition",\n "Delimit",\n "Dependencies",\n "Dependent",\n "Derive",\n "Drop",\n "eauto",\n "End",\n "Equality",\n "Eval",\n "Example",\n "Existential",\n "Existentials",\n "Existing",\n "Export",\n "exporting",\n "Extern",\n "Extract",\n "Extraction",\n "Fact",\n "Field",\n "Fields",\n "File",\n "Fixpoint",\n "Focus",\n "for",\n "From",\n "Function",\n "Functional",\n "Generalizable",\n "Global",\n "Goal",\n "Grab",\n "Grammar",\n "Graph",\n "Guarded",\n "Heap",\n "Hint",\n "HintDb",\n "Hints",\n "Hypotheses",\n "Hypothesis",\n "ident",\n "Identity",\n "If",\n "Immediate",\n "Implicit",\n "Import",\n "Include",\n "Inductive",\n "Infix",\n "Info",\n "Initial",\n "Inline",\n "Inspect",\n "Instance",\n "Instances",\n "Intro",\n "Intros",\n "Inversion",\n "Inversion_clear",\n "Language",\n "Left",\n "Lemma",\n "Let",\n "Libraries",\n "Library",\n "Load",\n "LoadPath",\n "Local",\n "Locate",\n "Ltac",\n "ML",\n "Mode",\n "Module",\n "Modules",\n "Monomorphic",\n "Morphism",\n "Next",\n "NoInline",\n "Notation",\n "Obligation",\n "Obligations",\n "Opaque",\n "Open",\n "Optimize",\n "Options",\n "Parameter",\n "Parameters",\n "Parametric",\n "Path",\n "Paths",\n "pattern",\n "Polymorphic",\n "Preterm",\n "Print",\n "Printing",\n "Program",\n "Projections",\n "Proof",\n "Proposition",\n "Pwd",\n "Qed",\n "Quit",\n "Rec",\n "Record",\n "Recursive",\n "Redirect",\n "Relation",\n "Remark",\n "Remove",\n "Require",\n "Reserved",\n "Reset",\n "Resolve",\n "Restart",\n "Rewrite",\n "Right",\n "Ring",\n "Rings",\n "Save",\n "Scheme",\n "Scope",\n "Scopes",\n "Script",\n "Search",\n "SearchAbout",\n "SearchHead",\n "SearchPattern",\n "SearchRewrite",\n "Section",\n "Separate",\n "Set",\n "Setoid",\n "Show",\n "Solve",\n "Sorted",\n "Step",\n "Strategies",\n "Strategy",\n "Structure",\n "SubClass",\n "Table",\n "Tables",\n "Tactic",\n "Term",\n "Test",\n "Theorem",\n "Time",\n "Timeout",\n "Transparent",\n "Type",\n "Typeclasses",\n "Types",\n "Undelimit",\n "Undo",\n "Unfocus",\n "Unfocused",\n "Unfold",\n "Universe",\n "Universes",\n "Unset",\n "Unshelve",\n "using",\n "Variable",\n "Variables",\n "Variant",\n "Verbose",\n "Visibility",\n "where",\n "with"\n ];\n const BUILT_INS = [\n "abstract",\n "absurd",\n "admit",\n "after",\n "apply",\n "as",\n "assert",\n "assumption",\n "at",\n "auto",\n "autorewrite",\n "autounfold",\n "before",\n "bottom",\n "btauto",\n "by",\n "case",\n "case_eq",\n "cbn",\n "cbv",\n "change",\n "classical_left",\n "classical_right",\n "clear",\n "clearbody",\n "cofix",\n "compare",\n "compute",\n "congruence",\n "constr_eq",\n "constructor",\n "contradict",\n "contradiction",\n "cut",\n "cutrewrite",\n "cycle",\n "decide",\n "decompose",\n "dependent",\n "destruct",\n "destruction",\n "dintuition",\n "discriminate",\n "discrR",\n "do",\n "double",\n "dtauto",\n "eapply",\n "eassumption",\n "eauto",\n "ecase",\n "econstructor",\n "edestruct",\n "ediscriminate",\n "eelim",\n "eexact",\n "eexists",\n "einduction",\n "einjection",\n "eleft",\n "elim",\n "elimtype",\n "enough",\n "equality",\n "erewrite",\n "eright",\n "esimplify_eq",\n "esplit",\n "evar",\n "exact",\n "exactly_once",\n "exfalso",\n "exists",\n "f_equal",\n "fail",\n "field",\n "field_simplify",\n "field_simplify_eq",\n "first",\n "firstorder",\n "fix",\n "fold",\n "fourier",\n "functional",\n "generalize",\n "generalizing",\n "gfail",\n "give_up",\n "has_evar",\n "hnf",\n "idtac",\n "in",\n "induction",\n "injection",\n "instantiate",\n "intro",\n "intro_pattern",\n "intros",\n "intuition",\n "inversion",\n "inversion_clear",\n "is_evar",\n "is_var",\n "lapply",\n "lazy",\n "left",\n "lia",\n "lra",\n "move",\n "native_compute",\n "nia",\n "nsatz",\n "omega",\n "once",\n "pattern",\n "pose",\n "progress",\n "proof",\n "psatz",\n "quote",\n "record",\n "red",\n "refine",\n "reflexivity",\n "remember",\n "rename",\n "repeat",\n "replace",\n "revert",\n "revgoals",\n "rewrite",\n "rewrite_strat",\n "right",\n "ring",\n "ring_simplify",\n "rtauto",\n "set",\n "setoid_reflexivity",\n "setoid_replace",\n "setoid_rewrite",\n "setoid_symmetry",\n "setoid_transitivity",\n "shelve",\n "shelve_unifiable",\n "simpl",\n "simple",\n "simplify_eq",\n "solve",\n "specialize",\n "split",\n "split_Rabs",\n "split_Rmult",\n "stepl",\n "stepr",\n "subst",\n "sum",\n "swap",\n "symmetry",\n "tactic",\n "tauto",\n "time",\n "timeout",\n "top",\n "transitivity",\n "trivial",\n "try",\n "tryif",\n "unfold",\n "unify",\n "until",\n "using",\n "vm_compute",\n "with"\n ];\n return {\n name: \'Coq\',\n keywords: {\n keyword: KEYWORDS,\n built_in: BUILT_INS\n },\n contains: [\n hljs.QUOTE_STRING_MODE,\n hljs.COMMENT(\'\\\\(\\\\*\', \'\\\\*\\\\)\'),\n hljs.C_NUMBER_MODE,\n {\n className: \'type\',\n excludeBegin: true,\n begin: \'\\\\|\\\\s*\',\n end: \'\\\\w+\'\n },\n { // relevance booster\n begin: /[-=]>/ }\n ]\n };\n}\n\nmodule.exports = coq;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTg0LmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL29ic2lkaWFuLW1pbmRtYXAtbmV4dGdlbi8uL25vZGVfbW9kdWxlcy8ucG5wbS9oaWdobGlnaHQuanNAMTEuMTEuMS9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvY29xLmpzP2NhMDgiXSwic291cmNlc0NvbnRlbnQiOlsiLypcbkxhbmd1YWdlOiBDb3FcbkF1dGhvcjogU3RlcGhhbiBCb3llciA8c3RlcGhhbkBzdGVwaGFuYm95ZXIuY29tPlxuQ2F0ZWdvcnk6IGZ1bmN0aW9uYWxcbldlYnNpdGU6IGh0dHBzOi8vY29xLmlucmlhLmZyXG4qL1xuXG4vKiogQHR5cGUgTGFuZ3VhZ2VGbiAqL1xuZnVuY3Rpb24gY29xKGhsanMpIHtcbiAgY29uc3QgS0VZV09SRFMgPSBbXG4gICAgXCJffDBcIixcbiAgICBcImFzXCIsXG4gICAgXCJhdFwiLFxuICAgIFwiY29maXhcIixcbiAgICBcImVsc2VcIixcbiAgICBcImVuZFwiLFxuICAgIFwiZXhpc3RzXCIsXG4gICAgXCJleGlzdHMyXCIsXG4gICAgXCJmaXhcIixcbiAgICBcImZvclwiLFxuICAgIFwiZm9yYWxsXCIsXG4gICAgXCJmdW5cIixcbiAgICBcImlmXCIsXG4gICAgXCJJRlwiLFxuICAgIFwiaW5cIixcbiAgICBcImxldFwiLFxuICAgIFwibWF0Y2hcIixcbiAgICBcIm1vZFwiLFxuICAgIFwiUHJvcFwiLFxuICAgIFwicmV0dXJuXCIsXG4gICAgXCJTZXRcIixcbiAgICBcInRoZW5cIixcbiAgICBcIlR5cGVcIixcbiAgICBcInVzaW5nXCIsXG4gICAgXCJ3aGVyZVwiLFxuICAgIFwid2l0aFwiLFxuICAgIFwiQWJvcnRcIixcbiAgICBcIkFib3V0XCIsXG4gICAgXCJBZGRcIixcbiAgICBcIkFkbWl0XCIsXG4gICAgXCJBZG1pdHRlZFwiLFxuICAgIFwiQWxsXCIsXG4gICAgXCJBcmd1bWVudHNcIixcbiAgICBcIkFzc3VtcHRpb25zXCIsXG4gICAgXCJBeGlvbVwiLFxuICAgIFwiQmFja1wiLFxuICAgIFwiQmFja1RvXCIsXG4gICAgXCJCYWNrdHJhY2tcIixcbiAgICBcIkJpbmRcIixcbiAgICBcIkJsYWNrbGlzdFwiLFxuICAgIFwiQ2Fub25pY2FsXCIsXG4gICAgXCJDZFwiLFxuICAgIFwiQ2hlY2tcIixcbiAgICBcIkNsYXNzXCIsXG4gICAgXCJDbGFzc2VzXCIsXG4gICAgXCJDbG9zZVwiLFxuICAgIFwiQ29lcmNpb25cIixcbiAgICBcIkNvZXJjaW9uc1wiLFxuICAgIFwiQ29GaXhwb2ludFwiLFxuICAgIFwiQ29JbmR1Y3RpdmVcIixcbiAgICBcIkNvbGxlY3Rpb25cIixcbiAgICBcIkNvbWJpbmVkXCIsXG4gICAgXCJDb21wdXRlXCIsXG4gICAgXCJDb25qZWN0dXJlXCIsXG4gICAgXCJDb25qZWN0dXJlc1wiLFxuICAgIFwiQ29uc3RhbnRcIixcbiAgICBcImNvbnN0clwiLFxuICAgIFwiQ29uc3RyYWludFwiLFxuICAgIFwiQ29uc3RydWN0b3JzXCIsXG4gICAgXCJDb250ZXh0XCIsXG4gICAgXCJDb3JvbGxhcnlcIixcbiAgICBcIkNyZWF0ZUhpbnREYlwiLFxuICAgIFwiQ3V0XCIsXG4gICAgXCJEZWNsYXJlXCIsXG4gICAgXCJEZWZpbmVkXCIsXG4gICAgXCJEZWZpbml0aW9uXCIsXG4gICAgXCJEZWxpbWl0XCIsXG4gICAgXCJEZXBlbmRlbmNpZXNcIixcbiAgICBcIkRlcGVuZGVudFwiLFxuICAgIFwiRGVyaXZlXCIsXG4gICAgXCJEcm9wXCIsXG4gICAgXCJlYXV0b1wiLFxuICAgIFwiRW5kXCIsXG4gICAgXCJFcXVhbGl0eVwiLFxuICAgIFwiRXZhbFwiLFxuICAgIFwiRXhhbXBsZVwiLFxuICAgIFwiRXhpc3RlbnRpYWxcIixcbiAgICBcIkV4aXN0ZW50aWFsc1wiLFxuICAgIFwiRXhpc3RpbmdcIixcbiAgICBcIkV4cG9ydFwiLFxuICAgIFwiZXhwb3J0aW5nXCIsXG4gICAgXCJFeHRlcm5cIixcbiAgICBcIkV4dHJhY3RcIixcbiAgICBcIkV4dHJhY3Rpb25cIixcbiAgICBcIkZhY3RcIixcbiAgICBcIkZpZWxkXCIsXG4gICAgXCJGaWVsZHNcIixcbiAgICBcIkZpbGVcIixcbiAgICBcIkZpeHBvaW50XCIsXG4gICAgXCJGb2N1c1wiLFxuICAgIFwiZm9yXCIsXG4gICAgXCJGcm9tXCIsXG4gICAgXCJGdW5jdGlvblwiLFxuICAgIFwiRnVuY3Rpb25hbFwiLFxuICAgIFwiR2VuZXJhbGl6YWJsZVwiLFxuICAgIFwiR2xvYmFsXCIsXG4gICAgXCJHb2FsXCIsXG4gICAgXCJHcmFiXCIsXG4gICAgXCJHcmFtbWFyXCIsXG4gICAgXCJHcmFwaFwiLFxuICAgIFwiR3VhcmRlZFwiLFxuICAgIFwiSGVhcFwiLFxuICAgIFwiSGludFwiLFxuICAgIFwiSGludERiXCIsXG4gICAgXCJIaW50c1wiLFxuICAgIFwiSHlwb3RoZXNlc1wiLFxuICAgIFwiSHlwb3RoZXNpc1wiLFxuICAgIFwiaWRlbnRcIixcbiAgICBcIklkZW50aXR5XCIsXG4gICAgXCJJZlwiLFxuICAgIFwiSW1tZWRpYXRlXCIsXG4gICAgXCJJbXBsaWNpdFwiLFxuICAgIFwiSW1wb3J0XCIsXG4gICAgXCJJbmNsdWRlXCIsXG4gICAgXCJJbmR1Y3RpdmVcIixcbiAgICBcIkluZml4XCIsXG4gICAgXCJJbmZvXCIsXG4gICAgXCJJbml0aWFsXCIsXG4gICAgXCJJbmxpbmVcIixcbiAgICBcIkluc3BlY3RcIixcbiAgICBcIkluc3RhbmNlXCIsXG4gICAgXCJJbnN0YW5jZXNcIixcbiAgICBcIkludHJvXCIsXG4gICAgXCJJbnRyb3NcIixcbiAgICBcIkludmVyc2lvblwiLFxuICAgIFwiSW52ZXJzaW9uX2NsZWFyXCIsXG4gICAgXCJMYW5ndWFnZVwiLFxuICAgIFwiTGVmdFwiLFxuICAgIFwiTGVtbWFcIixcbiAgICBcIkxldFwiLFxuICAgIFwiTGlicmFyaWVzXCIsXG4gICAgXCJMaWJyYXJ5XCIsXG4gICAgXCJMb2FkXCIsXG4gICAgXCJMb2FkUGF0aFwiLFxuICAgIFwiTG9jYWxcIixcbiAgICBcIkxvY2F0ZVwiLFxuICAgIFwiTHRhY1wiLFxuICAgIFwiTUxcIixcbiAgICBcIk1vZGVcIixcbiAgICBcIk1vZHVsZVwiLFxuICAgIFwiTW9kdWxlc1wiLFxuICAgIFwiTW9ub21vcnBoaWNcIixcbiAgICBcIk1vcnBoaXNtXCIsXG4gICAgXCJOZXh0XCIsXG4gICAgXCJOb0lubGluZVwiLFxuICAgIFwiTm90YXRpb25cIixcbiAgICBcIk9ibGlnYXRpb25cIixcbiAgICBcIk9ibGlnYXRpb25zXCIsXG4gICAgXCJPcGFxdWVcIixcbiAgICBcIk9wZW5cIixcbiAgICBcIk9wdGltaXplXCIsXG4gICAgXCJPcHRpb25zXCIsXG4gICAgXCJQYXJhbWV0ZXJcIixcbiAgICBcIlBhcmFtZXRlcnNcIixcbiAgICBcIlBhcmFtZXRyaWNcIixcbiAgICBcIlBhdGhcIixcbiAgICBcIlBhdGhzXCIsXG4gICAgXCJwYXR0ZXJuXCIsXG4gICAgXCJQb2x5bW9ycGhpY1wiLFxuICAgIFwiUHJldGVybVwiLFxuICAgIFwiUHJpbnRcIixcbiAgICBcIlByaW50aW5nXCIsXG4gICAgXCJQcm9ncmFtXCIsXG4gICAgXCJQcm9qZWN0aW9uc1wiLFxuICAgIFwiUHJvb2ZcIixcbiAgICBcIlByb3Bvc2l0aW9uXCIsXG4gICAgXCJQd2RcIixcbiAgICBcIlFlZFwiLFxuICAgIFwiUXVpdFwiLFxuICAgIFwiUmVjXCIsXG4gICAgXCJSZWNvcmRcIixcbiAgICBcIlJlY3Vyc2l2ZVwiLFxuICAgIFwiUmVkaXJlY3RcIixcbiAgICBcIlJlbGF0aW9uXCIsXG4gICAgXCJSZW1hcmtcIixcbiAgICBcIlJlbW92ZVwiLFxuICAgIFwiUmVxdWlyZVwiLFxuICAgIFwiUmVzZXJ2ZWRcIixcbiAgICBcIlJlc2V0XCIsXG4gICAgXCJSZXNvbHZlXCIsXG4gICAgXCJSZXN0YXJ0XCIsXG4gICAgXCJSZXdyaXRlXCIsXG4gICAgXCJSaWdodFwiLFxuICAgIFwiUmluZ1wiLFxuICAgIFwiUmluZ3NcIixcbiAgICBcIlNhdmVcIixcbiAgICBcIlNjaGVtZVwiLFxuICAgIFwiU2NvcGVcIixcbiAgICBcIlNjb3Blc1wiLFxuICAgIFwiU2NyaXB0XCIsXG4gICAgXCJTZWFyY2hcIixcbiAgICBcIlNlYXJjaEFib3V0XCIsXG4gICAgXCJTZWFyY2hIZWFkXCIsXG4gICAgXCJTZWFyY2hQYXR0ZXJuXCIsXG4gICAgXCJTZWFyY2hSZXdyaXRlXCIsXG4gICAgXCJTZWN0aW9uXCIsXG4gICAgXCJTZXBhcmF0ZVwiLFxuICAgIFwiU2V0XCIsXG4gICAgXCJTZXRvaWRcIixcbiAgICBcIlNob3dcIixcbiAgICBcIlNvbHZlXCIsXG4gICAgXCJTb3J0ZWRcIixcbiAgICBcIlN0ZXBcIixcbiAgICBcIlN0cmF0ZWdpZXNcIixcbiAgICBcIlN0cmF0ZWd5XCIsXG4gICAgXCJTdHJ1Y3R1cmVcIixcbiAgICBcIlN1YkNsYXNzXCIsXG4gICAgXCJUYWJsZVwiLFxuICAgIFwiVGFibGVzXCIsXG4gICAgXCJUYWN0aWNcIixcbiAgICBcIlRlcm1cIixcbiAgICBcIlRlc3RcIixcbiAgICBcIlRoZW9yZW1cIixcbiAgICBcIlRpbWVcIixcbiAgICBcIlRpbWVvdXRcIixcbiAgICBcIlRyYW5zcGFyZW50XCIsXG4gICAgXCJUeXBlXCIsXG4gICAgXCJUeXBlY2xhc3Nlc1wiLFxuICAgIFwiVHlwZXNcIixcbiAgICBcIlVuZGVsaW1pdFwiLFxuICAgIFwiVW5kb1wiLFxuICAgIFwiVW5mb2N1c1wiLFxuICAgIFwiVW5mb2N1c2VkXCIsXG4gICAgXCJVbmZvbGRcIixcbiAgICBcIlVuaXZlcnNlXCIsXG4gICAgXCJVbml2ZXJzZXNcIixcbiAgICBcIlVuc2V0XCIsXG4gICAgXCJVbnNoZWx2ZVwiLFxuICAgIFwidXNpbmdcIixcbiAgICBcIlZhcmlhYmxlXCIsXG4gICAgXCJWYXJpYWJsZXNcIixcbiAgICBcIlZhcmlhbnRcIixcbiAgICBcIlZlcmJvc2VcIixcbiAgICBcIlZpc2liaWxpdHlcIixcbiAgICBcIndoZXJlXCIsXG4gICAgXCJ3aXRoXCJcbiAgXTtcbiAgY29uc3QgQlVJTFRfSU5TID0gW1xuICAgIFwiYWJzdHJhY3RcIixcbiAgICBcImFic3VyZFwiLFxuICAgIFwiYWRtaXRcIixcbiAgICBcImFmdGVyXCIsXG4gICAgXCJhcHBseVwiLFxuICAgIFwiYXNcIixcbiAgICBcImFzc2VydFwiLFxuICAgIFwiYXNzdW1wdGlvblwiLFxuICAgIFwiYXRcIixcbiAgICBcImF1dG9cIixcbiAgICBcImF1dG9yZXdyaXRlXCIsXG4gICAgXCJhdXRvdW5mb2xkXCIsXG4gICAgXCJiZWZvcmVcIixcbiAgICBcImJvdHRvbVwiLFxuICAgIFwiYnRhdXRvXCIsXG4gICAgXCJieVwiLFxuICAgIFwiY2FzZVwiLFxuICAgIFwiY2FzZV9lcVwiLFxuICAgIFwiY2JuXCIsXG4gICAgXCJjYnZcIixcbiAgICBcImNoYW5nZVwiLFxuICAgIFwiY2xhc3NpY2FsX2xlZnRcIixcbiAgICBcImNsYXNzaWNhbF9yaWdodFwiLFxuICAgIFwiY2xlYXJcIixcbiAgICBcImNsZWFyYm9keVwiLFxuICAgIFwiY29maXhcIixcbiAgICBcImNvbXBhcmVcIixcbiAgICBcImNvbXB1dGVcIixcbiAgICBcImNvbmdydWVuY2VcIixcbiAgICBcImNvbnN0cl9lcVwiLFxuICAgIFwiY29uc3RydWN0b3JcIixcbiAgICBcImNvbnRyYWRpY3RcIixcbiAgICBcImNvbnRyYWRpY3Rpb25cIixcbiAgICBcImN1dFwiLFxuICAgIFwiY3V0cmV3cml0ZVwiLFxuICAgIFwiY3ljbGVcIixcbiAgICBcImRlY2lkZVwiLFxuICAgIFwiZGVjb21wb3NlXCIsXG4gICAgXCJkZXBlbmRlbnRcIixcbiAgICBcImRlc3RydWN0XCIsXG4gICAgXCJkZXN0cnVjdGlvblwiLFxuICAgIFwiZGludHVpdGlvblwiLFxuICAgIFwiZGlzY3JpbWluYXRlXCIsXG4gICAgXCJkaXNjclJcIixcbiAgICBcImRvXCIsXG4gICAgXCJkb3VibGVcIixcbiAgICBcImR0YXV0b1wiLFxuICAgIFwiZWFwcGx5XCIsXG4gICAgXCJlYXNzdW1wdGlvblwiLFxuICAgIFwiZWF1dG9cIixcbiAgICBcImVjYXNlXCIsXG4gICAgXCJlY29uc3RydWN0b3JcIixcbiAgICBcImVkZXN0cnVjdFwiLFxuICAgIFwiZWRpc2NyaW1pbmF0ZVwiLFxuICAgIFwiZWVsaW1cIixcbiAgICBcImVleGFjdFwiLFxuICAgIFwiZWV4aXN0c1wiLFxuICAgIFwiZWluZHVjdGlvblwiLFxuICAgIFwiZWluamVjdGlvblwiLFxuICAgIFwiZWxlZnRcIixcbiAgICBcImVsaW1cIixcbiAgICBcImVsaW10eXBlXCIsXG4gICAgXCJlbm91Z2hcIixcbiAgICBcImVxdWFsaXR5XCIsXG4gICAgXCJlcmV3cml0ZVwiLFxuICAgIFwiZXJpZ2h0XCIsXG4gICAgXCJlc2ltcGxpZnlfZXFcIixcbiAgICBcImVzcGxpdFwiLFxuICAgIFwiZXZhclwiLFxuICAgIFwiZXhhY3RcIixcbiAgICBcImV4YWN0bHlfb25jZVwiLFxuICAgIFwiZXhmYWxzb1wiLFxuICAgIFwiZXhpc3RzXCIsXG4gICAgXCJmX2VxdWFsXCIsXG4gICAgXCJmYWlsXCIsXG4gICAgXCJmaWVsZFwiLFxuICAgIFwiZmllbGRfc2ltcGxpZnlcIixcbiAgICBcImZpZWxkX3NpbXBsaWZ5X2VxXCIsXG4gICAgXCJmaXJzdFwiLFxuICAgIFwiZmlyc3RvcmRlclwiLFxuICAgIFwiZml4XCIsXG4gICAgXCJmb2xkXCIsXG4gICAgXCJmb3VyaWVyXCIsXG4gICAgXCJmdW5jdGlvbmFsXCIsXG4gICAgXCJnZW5lcmFsaXplXCIsXG4gICAgXCJnZW5lcmFsaXppbmdcIixcbiAgICBcImdmYWlsXCIsXG4gICAgXCJnaXZlX3VwXCIsXG4gICAgXCJoYXNfZXZhclwiLFxuICAgIFwiaG5mXCIsXG4gICAgXCJpZHRhY1wiLFxuICAgIFwiaW5cIixcbiAgICBcImluZHVjdGlvblwiLFxuICAgIFwiaW5qZWN0aW9uXCIsXG4gICAgXCJpbnN0YW50aWF0ZVwiLFxuICAgIFwiaW50cm9cIixcbiAgICBcImludHJvX3BhdHRlcm5cIixcbiAgICBcImludHJvc1wiLFxuICAgIFwiaW50dWl0aW9uXCIsXG4gICAgXCJpbnZlcnNpb25cIixcbiAgICBcImludmVyc2lvbl9jbGVhclwiLFxuICAgIFwiaXNfZXZhclwiLFxuICAgIFwiaXNfdmFyXCIsXG4gICAgXCJsYXBwbHlcIixcbiAgICBcImxhenlcIixcbiAgICBcImxlZnRcIixcbiAgICBcImxpYVwiLFxuICAgIFwibHJhXCIsXG4gICAgXCJtb3ZlXCIsXG4gICAgXCJuYXRpdmVfY29tcHV0ZVwiLFxuICAgIFwibmlhXCIsXG4gICAgXCJuc2F0elwiLFxuICAgIFwib21lZ2FcIixcbiAgICBcIm9uY2VcIixcbiAgICBcInBhdHRlcm5cIixcbiAgICBcInBvc2VcIixcbiAgICBcInByb2dyZXNzXCIsXG4gICAgXCJwcm9vZlwiLFxuICAgIFwicHNhdHpcIixcbiAgICBcInF1b3RlXCIsXG4gICAgXCJyZWNvcmRcIixcbiAgICBcInJlZFwiLFxuICAgIFwicmVmaW5lXCIsXG4gICAgXCJyZWZsZXhpdml0eVwiLFxuICAgIFwicmVtZW1iZXJcIixcbiAgICBcInJlbmFtZVwiLFxuICAgIFwicmVwZWF0XCIsXG4gICAgXCJyZXBsYWNlXCIsXG4gICAgXCJyZXZlcnRcIixcbiAgICBcInJldmdvYWxzXCIsXG4gICAgXCJyZXdyaXRlXCIsXG4gICAgXCJyZXdyaXRlX3N0cmF0XCIsXG4gICAgXCJyaWdodFwiLFxuICAgIFwicmluZ1wiLFxuICAgIFwicmluZ19zaW1wbGlmeVwiLFxuICAgIFwicnRhdXRvXCIsXG4gICAgXCJzZXRcIixcbiAgICBcInNldG9pZF9yZWZsZXhpdml0eVwiLFxuICAgIFwic2V0b2lkX3JlcGxhY2VcIixcbiAgICBcInNldG9pZF9yZXdyaXRlXCIsXG4gICAgXCJzZXRvaWRfc3ltbWV0cnlcIixcbiAgICBcInNldG9pZF90cmFuc2l0aXZpdHlcIixcbiAgICBcInNoZWx2ZVwiLFxuICAgIFwic2hlbHZlX3VuaWZpYWJsZVwiLFxuICAgIFwic2ltcGxcIixcbiAgICBcInNpbXBsZVwiLFxuICAgIFwic2ltcGxpZnlfZXFcIixcbiAgICBcInNvbHZlXCIsXG4gICAgXCJzcGVjaWFsaXplXCIsXG4gICAgXCJzcGxpdFwiLFxuICAgIFwic3BsaXRfUmFic1wiLFxuICAgIFwic3BsaXRfUm11bHRcIixcbiAgICBcInN0ZXBsXCIsXG4gICAgXCJzdGVwclwiLFxuICAgIFwic3Vic3RcIixcbiAgICBcInN1bVwiLFxuICAgIFwic3dhcFwiLFxuICAgIFwic3ltbWV0cnlcIixcbiAgICBcInRhY3RpY1wiLFxuICAgIFwidGF1dG9cIixcbiAgICBcInRpbWVcIixcbiAgICBcInRpbWVvdXRcIixcbiAgICBcInRvcFwiLFxuICAgIFwidHJhbnNpdGl2aXR5XCIsXG4gICAgXCJ0cml2aWFsXCIsXG4gICAgXCJ0cnlcIixcbiAgICBcInRyeWlmXCIsXG4gICAgXCJ1bmZvbGRcIixcbiAgICBcInVuaWZ5XCIsXG4gICAgXCJ1bnRpbFwiLFxuICAgIFwidXNpbmdcIixcbiAgICBcInZtX2NvbXB1dGVcIixcbiAgICBcIndpdGhcIlxuICBdO1xuICByZXR1cm4ge1xuICAgIG5hbWU6ICdDb3EnLFxuICAgIGtleXdvcmRzOiB7XG4gICAgICBrZXl3b3JkOiBLRVlXT1JEUyxcbiAgICAgIGJ1aWx0X2luOiBCVUlMVF9JTlNcbiAgICB9LFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAgaGxqcy5DT01NRU5UKCdcXFxcKFxcXFwqJywgJ1xcXFwqXFxcXCknKSxcbiAgICAgIGhsanMuQ19OVU1CRVJfTU9ERSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAndHlwZScsXG4gICAgICAgIGV4Y2x1ZGVCZWdpbjogdHJ1ZSxcbiAgICAgICAgYmVnaW46ICdcXFxcfFxcXFxzKicsXG4gICAgICAgIGVuZDogJ1xcXFx3KydcbiAgICAgIH0sXG4gICAgICB7IC8vIHJlbGV2YW5jZSBib29zdGVyXG4gICAgICAgIGJlZ2luOiAvWy09XT4vIH1cbiAgICBdXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29xO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///584\n')},592:(module,__unused_webpack_exports,__webpack_require__)=>{"use strict";eval("// Standard YAML's JSON schema.\n// http://www.yaml.org/spec/1.2/spec.html#id2803231\n//\n// NOTE: JS-YAML does not support schema-specific tag resolution restrictions.\n// So, this schema is not such strict as defined in the YAML specification.\n// It allows numbers in binary notaion, use `Null` and `NULL` as `null`, etc.\n\n\n\n\n\nvar Schema = __webpack_require__(8796);\n\n\nmodule.exports = new Schema({\n include: [\n __webpack_require__(743)\n ],\n implicit: [\n __webpack_require__(2150),\n __webpack_require__(4991),\n __webpack_require__(6685),\n __webpack_require__(1565)\n ]\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTkyLmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR2E7OztBQUdiLGFBQWEsbUJBQU8sQ0FBQyxJQUFXOzs7QUFHaEM7QUFDQTtBQUNBLElBQUksbUJBQU8sQ0FBQyxHQUFZO0FBQ3hCO0FBQ0E7QUFDQSxJQUFJLG1CQUFPLENBQUMsSUFBYztBQUMxQixJQUFJLG1CQUFPLENBQUMsSUFBYztBQUMxQixJQUFJLG1CQUFPLENBQUMsSUFBYTtBQUN6QixJQUFJLG1CQUFPLENBQUMsSUFBZTtBQUMzQjtBQUNBLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9vYnNpZGlhbi1taW5kbWFwLW5leHRnZW4vLi9ub2RlX21vZHVsZXMvLnBucG0vanMteWFtbEAzLjE0LjEvbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvc2NoZW1hL2pzb24uanM/ZjY3YSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTdGFuZGFyZCBZQU1MJ3MgSlNPTiBzY2hlbWEuXG4vLyBodHRwOi8vd3d3LnlhbWwub3JnL3NwZWMvMS4yL3NwZWMuaHRtbCNpZDI4MDMyMzFcbi8vXG4vLyBOT1RFOiBKUy1ZQU1MIGRvZXMgbm90IHN1cHBvcnQgc2NoZW1hLXNwZWNpZmljIHRhZyByZXNvbHV0aW9uIHJlc3RyaWN0aW9ucy5cbi8vIFNvLCB0aGlzIHNjaGVtYSBpcyBub3Qgc3VjaCBzdHJpY3QgYXMgZGVmaW5lZCBpbiB0aGUgWUFNTCBzcGVjaWZpY2F0aW9uLlxuLy8gSXQgYWxsb3dzIG51bWJlcnMgaW4gYmluYXJ5IG5vdGFpb24sIHVzZSBgTnVsbGAgYW5kIGBOVUxMYCBhcyBgbnVsbGAsIGV0Yy5cblxuXG4ndXNlIHN0cmljdCc7XG5cblxudmFyIFNjaGVtYSA9IHJlcXVpcmUoJy4uL3NjaGVtYScpO1xuXG5cbm1vZHVsZS5leHBvcnRzID0gbmV3IFNjaGVtYSh7XG4gIGluY2x1ZGU6IFtcbiAgICByZXF1aXJlKCcuL2ZhaWxzYWZlJylcbiAgXSxcbiAgaW1wbGljaXQ6IFtcbiAgICByZXF1aXJlKCcuLi90eXBlL251bGwnKSxcbiAgICByZXF1aXJlKCcuLi90eXBlL2Jvb2wnKSxcbiAgICByZXF1aXJlKCcuLi90eXBlL2ludCcpLFxuICAgIHJlcXVpcmUoJy4uL3R5cGUvZmxvYXQnKVxuICBdXG59KTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///592\n")},641:module=>{eval('/*\nLanguage: Ceylon\nAuthor: Lucas Werkmeister \nWebsite: https://ceylon-lang.org\nCategory: system\n*/\n\n/** @type LanguageFn */\nfunction ceylon(hljs) {\n // 2.3. Identifiers and keywords\n const KEYWORDS = [\n "assembly",\n "module",\n "package",\n "import",\n "alias",\n "class",\n "interface",\n "object",\n "given",\n "value",\n "assign",\n "void",\n "function",\n "new",\n "of",\n "extends",\n "satisfies",\n "abstracts",\n "in",\n "out",\n "return",\n "break",\n "continue",\n "throw",\n "assert",\n "dynamic",\n "if",\n "else",\n "switch",\n "case",\n "for",\n "while",\n "try",\n "catch",\n "finally",\n "then",\n "let",\n "this",\n "outer",\n "super",\n "is",\n "exists",\n "nonempty"\n ];\n // 7.4.1 Declaration Modifiers\n const DECLARATION_MODIFIERS = [\n "shared",\n "abstract",\n "formal",\n "default",\n "actual",\n "variable",\n "late",\n "native",\n "deprecated",\n "final",\n "sealed",\n "annotation",\n "suppressWarnings",\n "small"\n ];\n // 7.4.2 Documentation\n const DOCUMENTATION = [\n "doc",\n "by",\n "license",\n "see",\n "throws",\n "tagged"\n ];\n const SUBST = {\n className: \'subst\',\n excludeBegin: true,\n excludeEnd: true,\n begin: /``/,\n end: /``/,\n keywords: KEYWORDS,\n relevance: 10\n };\n const EXPRESSIONS = [\n {\n // verbatim string\n className: \'string\',\n begin: \'"""\',\n end: \'"""\',\n relevance: 10\n },\n {\n // string literal or template\n className: \'string\',\n begin: \'"\',\n end: \'"\',\n contains: [ SUBST ]\n },\n {\n // character literal\n className: \'string\',\n begin: "\'",\n end: "\'"\n },\n {\n // numeric literal\n className: \'number\',\n begin: \'#[0-9a-fA-F_]+|\\\\$[01_]+|[0-9_]+(?:\\\\.[0-9_](?:[eE][+-]?\\\\d+)?)?[kMGTPmunpf]?\',\n relevance: 0\n }\n ];\n SUBST.contains = EXPRESSIONS;\n\n return {\n name: \'Ceylon\',\n keywords: {\n keyword: KEYWORDS.concat(DECLARATION_MODIFIERS),\n meta: DOCUMENTATION\n },\n illegal: \'\\\\$[^01]|#[^0-9a-fA-F]\',\n contains: [\n hljs.C_LINE_COMMENT_MODE,\n hljs.COMMENT(\'/\\\\*\', \'\\\\*/\', { contains: [ \'self\' ] }),\n {\n // compiler annotation\n className: \'meta\',\n begin: \'@[a-z]\\\\w*(?::"[^"]*")?\'\n }\n ].concat(EXPRESSIONS)\n };\n}\n\nmodule.exports = ceylon;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjQxLmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQyxzQkFBc0I7QUFDM0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL29ic2lkaWFuLW1pbmRtYXAtbmV4dGdlbi8uL25vZGVfbW9kdWxlcy8ucG5wbS9oaWdobGlnaHQuanNAMTEuMTEuMS9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvY2V5bG9uLmpzPzAyZDUiXSwic291cmNlc0NvbnRlbnQiOlsiLypcbkxhbmd1YWdlOiBDZXlsb25cbkF1dGhvcjogTHVjYXMgV2Vya21laXN0ZXIgPG1haWxAbHVjYXN3ZXJrbWVpc3Rlci5kZT5cbldlYnNpdGU6IGh0dHBzOi8vY2V5bG9uLWxhbmcub3JnXG5DYXRlZ29yeTogc3lzdGVtXG4qL1xuXG4vKiogQHR5cGUgTGFuZ3VhZ2VGbiAqL1xuZnVuY3Rpb24gY2V5bG9uKGhsanMpIHtcbiAgLy8gMi4zLiBJZGVudGlmaWVycyBhbmQga2V5d29yZHNcbiAgY29uc3QgS0VZV09SRFMgPSBbXG4gICAgXCJhc3NlbWJseVwiLFxuICAgIFwibW9kdWxlXCIsXG4gICAgXCJwYWNrYWdlXCIsXG4gICAgXCJpbXBvcnRcIixcbiAgICBcImFsaWFzXCIsXG4gICAgXCJjbGFzc1wiLFxuICAgIFwiaW50ZXJmYWNlXCIsXG4gICAgXCJvYmplY3RcIixcbiAgICBcImdpdmVuXCIsXG4gICAgXCJ2YWx1ZVwiLFxuICAgIFwiYXNzaWduXCIsXG4gICAgXCJ2b2lkXCIsXG4gICAgXCJmdW5jdGlvblwiLFxuICAgIFwibmV3XCIsXG4gICAgXCJvZlwiLFxuICAgIFwiZXh0ZW5kc1wiLFxuICAgIFwic2F0aXNmaWVzXCIsXG4gICAgXCJhYnN0cmFjdHNcIixcbiAgICBcImluXCIsXG4gICAgXCJvdXRcIixcbiAgICBcInJldHVyblwiLFxuICAgIFwiYnJlYWtcIixcbiAgICBcImNvbnRpbnVlXCIsXG4gICAgXCJ0aHJvd1wiLFxuICAgIFwiYXNzZXJ0XCIsXG4gICAgXCJkeW5hbWljXCIsXG4gICAgXCJpZlwiLFxuICAgIFwiZWxzZVwiLFxuICAgIFwic3dpdGNoXCIsXG4gICAgXCJjYXNlXCIsXG4gICAgXCJmb3JcIixcbiAgICBcIndoaWxlXCIsXG4gICAgXCJ0cnlcIixcbiAgICBcImNhdGNoXCIsXG4gICAgXCJmaW5hbGx5XCIsXG4gICAgXCJ0aGVuXCIsXG4gICAgXCJsZXRcIixcbiAgICBcInRoaXNcIixcbiAgICBcIm91dGVyXCIsXG4gICAgXCJzdXBlclwiLFxuICAgIFwiaXNcIixcbiAgICBcImV4aXN0c1wiLFxuICAgIFwibm9uZW1wdHlcIlxuICBdO1xuICAvLyA3LjQuMSBEZWNsYXJhdGlvbiBNb2RpZmllcnNcbiAgY29uc3QgREVDTEFSQVRJT05fTU9ESUZJRVJTID0gW1xuICAgIFwic2hhcmVkXCIsXG4gICAgXCJhYnN0cmFjdFwiLFxuICAgIFwiZm9ybWFsXCIsXG4gICAgXCJkZWZhdWx0XCIsXG4gICAgXCJhY3R1YWxcIixcbiAgICBcInZhcmlhYmxlXCIsXG4gICAgXCJsYXRlXCIsXG4gICAgXCJuYXRpdmVcIixcbiAgICBcImRlcHJlY2F0ZWRcIixcbiAgICBcImZpbmFsXCIsXG4gICAgXCJzZWFsZWRcIixcbiAgICBcImFubm90YXRpb25cIixcbiAgICBcInN1cHByZXNzV2FybmluZ3NcIixcbiAgICBcInNtYWxsXCJcbiAgXTtcbiAgLy8gNy40LjIgRG9jdW1lbnRhdGlvblxuICBjb25zdCBET0NVTUVOVEFUSU9OID0gW1xuICAgIFwiZG9jXCIsXG4gICAgXCJieVwiLFxuICAgIFwibGljZW5zZVwiLFxuICAgIFwic2VlXCIsXG4gICAgXCJ0aHJvd3NcIixcbiAgICBcInRhZ2dlZFwiXG4gIF07XG4gIGNvbnN0IFNVQlNUID0ge1xuICAgIGNsYXNzTmFtZTogJ3N1YnN0JyxcbiAgICBleGNsdWRlQmVnaW46IHRydWUsXG4gICAgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICBiZWdpbjogL2BgLyxcbiAgICBlbmQ6IC9gYC8sXG4gICAga2V5d29yZHM6IEtFWVdPUkRTLFxuICAgIHJlbGV2YW5jZTogMTBcbiAgfTtcbiAgY29uc3QgRVhQUkVTU0lPTlMgPSBbXG4gICAge1xuICAgICAgLy8gdmVyYmF0aW0gc3RyaW5nXG4gICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgYmVnaW46ICdcIlwiXCInLFxuICAgICAgZW5kOiAnXCJcIlwiJyxcbiAgICAgIHJlbGV2YW5jZTogMTBcbiAgICB9LFxuICAgIHtcbiAgICAgIC8vIHN0cmluZyBsaXRlcmFsIG9yIHRlbXBsYXRlXG4gICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgYmVnaW46ICdcIicsXG4gICAgICBlbmQ6ICdcIicsXG4gICAgICBjb250YWluczogWyBTVUJTVCBdXG4gICAgfSxcbiAgICB7XG4gICAgICAvLyBjaGFyYWN0ZXIgbGl0ZXJhbFxuICAgICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICAgIGJlZ2luOiBcIidcIixcbiAgICAgIGVuZDogXCInXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIC8vIG51bWVyaWMgbGl0ZXJhbFxuICAgICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICAgIGJlZ2luOiAnI1swLTlhLWZBLUZfXSt8XFxcXCRbMDFfXSt8WzAtOV9dKyg/OlxcXFwuWzAtOV9dKD86W2VFXVsrLV0/XFxcXGQrKT8pP1trTUdUUG11bnBmXT8nLFxuICAgICAgcmVsZXZhbmNlOiAwXG4gICAgfVxuICBdO1xuICBTVUJTVC5jb250YWlucyA9IEVYUFJFU1NJT05TO1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogJ0NleWxvbicsXG4gICAga2V5d29yZHM6IHtcbiAgICAgIGtleXdvcmQ6IEtFWVdPUkRTLmNvbmNhdChERUNMQVJBVElPTl9NT0RJRklFUlMpLFxuICAgICAgbWV0YTogRE9DVU1FTlRBVElPTlxuICAgIH0sXG4gICAgaWxsZWdhbDogJ1xcXFwkW14wMV18I1teMC05YS1mQS1GXScsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuQ09NTUVOVCgnL1xcXFwqJywgJ1xcXFwqLycsIHsgY29udGFpbnM6IFsgJ3NlbGYnIF0gfSksXG4gICAgICB7XG4gICAgICAgIC8vIGNvbXBpbGVyIGFubm90YXRpb25cbiAgICAgICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgICAgIGJlZ2luOiAnQFthLXpdXFxcXHcqKD86OlwiW15cIl0qXCIpPydcbiAgICAgIH1cbiAgICBdLmNvbmNhdChFWFBSRVNTSU9OUylcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjZXlsb247XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///641\n')},642:module=>{eval("/*\nLanguage: ERB (Embedded Ruby)\nRequires: xml.js, ruby.js\nAuthor: Lucas Mazza \nContributors: Kassio Borges \nDescription: \"Bridge\" language defining fragments of Ruby in HTML within <% .. %>\nWebsite: https://ruby-doc.org/stdlib-2.6.5/libdoc/erb/rdoc/ERB.html\nCategory: template\n*/\n\n/** @type LanguageFn */\nfunction erb(hljs) {\n return {\n name: 'ERB',\n subLanguage: 'xml',\n contains: [\n hljs.COMMENT('<%#', '%>'),\n {\n begin: '<%[%=-]?',\n end: '[%-]?%>',\n subLanguage: 'ruby',\n excludeBegin: true,\n excludeEnd: true\n }\n ]\n };\n}\n\nmodule.exports = erb;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjQyLmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vb2JzaWRpYW4tbWluZG1hcC1uZXh0Z2VuLy4vbm9kZV9tb2R1bGVzLy5wbnBtL2hpZ2hsaWdodC5qc0AxMS4xMS4xL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9lcmIuanM/NzZlOCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuTGFuZ3VhZ2U6IEVSQiAoRW1iZWRkZWQgUnVieSlcblJlcXVpcmVzOiB4bWwuanMsIHJ1YnkuanNcbkF1dGhvcjogTHVjYXMgTWF6emEgPGx1Y2FzdG1henphQGdtYWlsLmNvbT5cbkNvbnRyaWJ1dG9yczogS2Fzc2lvIEJvcmdlcyA8a2Fzc2lvYm9yZ2VzbUBnbWFpbC5jb20+XG5EZXNjcmlwdGlvbjogXCJCcmlkZ2VcIiBsYW5ndWFnZSBkZWZpbmluZyBmcmFnbWVudHMgb2YgUnVieSBpbiBIVE1MIHdpdGhpbiA8JSAuLiAlPlxuV2Vic2l0ZTogaHR0cHM6Ly9ydWJ5LWRvYy5vcmcvc3RkbGliLTIuNi41L2xpYmRvYy9lcmIvcmRvYy9FUkIuaHRtbFxuQ2F0ZWdvcnk6IHRlbXBsYXRlXG4qL1xuXG4vKiogQHR5cGUgTGFuZ3VhZ2VGbiAqL1xuZnVuY3Rpb24gZXJiKGhsanMpIHtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnRVJCJyxcbiAgICBzdWJMYW5ndWFnZTogJ3htbCcsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuQ09NTUVOVCgnPCUjJywgJyU+JyksXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnPCVbJT0tXT8nLFxuICAgICAgICBlbmQ6ICdbJS1dPyU+JyxcbiAgICAgICAgc3ViTGFuZ3VhZ2U6ICdydWJ5JyxcbiAgICAgICAgZXhjbHVkZUJlZ2luOiB0cnVlLFxuICAgICAgICBleGNsdWRlRW5kOiB0cnVlXG4gICAgICB9XG4gICAgXVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGVyYjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///642\n")},681:module=>{eval('/*\nLanguage: Cap’n Proto\nAuthor: Oleg Efimov \nDescription: Cap’n Proto message definition format\nWebsite: https://capnproto.org/capnp-tool.html\nCategory: protocols\n*/\n\n/** @type LanguageFn */\nfunction capnproto(hljs) {\n const KEYWORDS = [\n "struct",\n "enum",\n "interface",\n "union",\n "group",\n "import",\n "using",\n "const",\n "annotation",\n "extends",\n "in",\n "of",\n "on",\n "as",\n "with",\n "from",\n "fixed"\n ];\n const TYPES = [\n "Void",\n "Bool",\n "Int8",\n "Int16",\n "Int32",\n "Int64",\n "UInt8",\n "UInt16",\n "UInt32",\n "UInt64",\n "Float32",\n "Float64",\n "Text",\n "Data",\n "AnyPointer",\n "AnyStruct",\n "Capability",\n "List"\n ];\n const LITERALS = [\n "true",\n "false"\n ];\n const CLASS_DEFINITION = {\n variants: [\n { match: [\n /(struct|enum|interface)/,\n /\\s+/,\n hljs.IDENT_RE\n ] },\n { match: [\n /extends/,\n /\\s*\\(/,\n hljs.IDENT_RE,\n /\\s*\\)/\n ] }\n ],\n scope: {\n 1: "keyword",\n 3: "title.class"\n }\n };\n return {\n name: \'Cap’n Proto\',\n aliases: [ \'capnp\' ],\n keywords: {\n keyword: KEYWORDS,\n type: TYPES,\n literal: LITERALS\n },\n contains: [\n hljs.QUOTE_STRING_MODE,\n hljs.NUMBER_MODE,\n hljs.HASH_COMMENT_MODE,\n {\n className: \'meta\',\n begin: /@0x[\\w\\d]{16};/,\n illegal: /\\n/\n },\n {\n className: \'symbol\',\n begin: /@\\d+\\b/\n },\n CLASS_DEFINITION\n ]\n };\n}\n\nmodule.exports = capnproto;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjgxLmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCLElBQUk7QUFDOUI7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vb2JzaWRpYW4tbWluZG1hcC1uZXh0Z2VuLy4vbm9kZV9tb2R1bGVzLy5wbnBtL2hpZ2hsaWdodC5qc0AxMS4xMS4xL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9jYXBucHJvdG8uanM/MWQyZiJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuTGFuZ3VhZ2U6IENhcOKAmW4gUHJvdG9cbkF1dGhvcjogT2xlZyBFZmltb3YgPGVmaW1vdm92QGdtYWlsLmNvbT5cbkRlc2NyaXB0aW9uOiBDYXDigJluIFByb3RvIG1lc3NhZ2UgZGVmaW5pdGlvbiBmb3JtYXRcbldlYnNpdGU6IGh0dHBzOi8vY2FwbnByb3RvLm9yZy9jYXBucC10b29sLmh0bWxcbkNhdGVnb3J5OiBwcm90b2NvbHNcbiovXG5cbi8qKiBAdHlwZSBMYW5ndWFnZUZuICovXG5mdW5jdGlvbiBjYXBucHJvdG8oaGxqcykge1xuICBjb25zdCBLRVlXT1JEUyA9IFtcbiAgICBcInN0cnVjdFwiLFxuICAgIFwiZW51bVwiLFxuICAgIFwiaW50ZXJmYWNlXCIsXG4gICAgXCJ1bmlvblwiLFxuICAgIFwiZ3JvdXBcIixcbiAgICBcImltcG9ydFwiLFxuICAgIFwidXNpbmdcIixcbiAgICBcImNvbnN0XCIsXG4gICAgXCJhbm5vdGF0aW9uXCIsXG4gICAgXCJleHRlbmRzXCIsXG4gICAgXCJpblwiLFxuICAgIFwib2ZcIixcbiAgICBcIm9uXCIsXG4gICAgXCJhc1wiLFxuICAgIFwid2l0aFwiLFxuICAgIFwiZnJvbVwiLFxuICAgIFwiZml4ZWRcIlxuICBdO1xuICBjb25zdCBUWVBFUyA9IFtcbiAgICBcIlZvaWRcIixcbiAgICBcIkJvb2xcIixcbiAgICBcIkludDhcIixcbiAgICBcIkludDE2XCIsXG4gICAgXCJJbnQzMlwiLFxuICAgIFwiSW50NjRcIixcbiAgICBcIlVJbnQ4XCIsXG4gICAgXCJVSW50MTZcIixcbiAgICBcIlVJbnQzMlwiLFxuICAgIFwiVUludDY0XCIsXG4gICAgXCJGbG9hdDMyXCIsXG4gICAgXCJGbG9hdDY0XCIsXG4gICAgXCJUZXh0XCIsXG4gICAgXCJEYXRhXCIsXG4gICAgXCJBbnlQb2ludGVyXCIsXG4gICAgXCJBbnlTdHJ1Y3RcIixcbiAgICBcIkNhcGFiaWxpdHlcIixcbiAgICBcIkxpc3RcIlxuICBdO1xuICBjb25zdCBMSVRFUkFMUyA9IFtcbiAgICBcInRydWVcIixcbiAgICBcImZhbHNlXCJcbiAgXTtcbiAgY29uc3QgQ0xBU1NfREVGSU5JVElPTiA9IHtcbiAgICB2YXJpYW50czogW1xuICAgICAgeyBtYXRjaDogW1xuICAgICAgICAvKHN0cnVjdHxlbnVtfGludGVyZmFjZSkvLFxuICAgICAgICAvXFxzKy8sXG4gICAgICAgIGhsanMuSURFTlRfUkVcbiAgICAgIF0gfSxcbiAgICAgIHsgbWF0Y2g6IFtcbiAgICAgICAgL2V4dGVuZHMvLFxuICAgICAgICAvXFxzKlxcKC8sXG4gICAgICAgIGhsanMuSURFTlRfUkUsXG4gICAgICAgIC9cXHMqXFwpL1xuICAgICAgXSB9XG4gICAgXSxcbiAgICBzY29wZToge1xuICAgICAgMTogXCJrZXl3b3JkXCIsXG4gICAgICAzOiBcInRpdGxlLmNsYXNzXCJcbiAgICB9XG4gIH07XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ0NhcOKAmW4gUHJvdG8nLFxuICAgIGFsaWFzZXM6IFsgJ2NhcG5wJyBdLFxuICAgIGtleXdvcmRzOiB7XG4gICAgICBrZXl3b3JkOiBLRVlXT1JEUyxcbiAgICAgIHR5cGU6IFRZUEVTLFxuICAgICAgbGl0ZXJhbDogTElURVJBTFNcbiAgICB9LFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAgaGxqcy5OVU1CRVJfTU9ERSxcbiAgICAgIGhsanMuSEFTSF9DT01NRU5UX01PREUsXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgICBiZWdpbjogL0AweFtcXHdcXGRdezE2fTsvLFxuICAgICAgICBpbGxlZ2FsOiAvXFxuL1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc3ltYm9sJyxcbiAgICAgICAgYmVnaW46IC9AXFxkK1xcYi9cbiAgICAgIH0sXG4gICAgICBDTEFTU19ERUZJTklUSU9OXG4gICAgXVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNhcG5wcm90bztcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///681\n')},699:module=>{eval('/*\nLanguage: Dockerfile\nRequires: bash.js\nAuthor: Alexis Hénaut \nDescription: language definition for Dockerfile files\nWebsite: https://docs.docker.com/engine/reference/builder/\nCategory: config\n*/\n\n/** @type LanguageFn */\nfunction dockerfile(hljs) {\n const KEYWORDS = [\n "from",\n "maintainer",\n "expose",\n "env",\n "arg",\n "user",\n "onbuild",\n "stopsignal"\n ];\n return {\n name: \'Dockerfile\',\n aliases: [ \'docker\' ],\n case_insensitive: true,\n keywords: KEYWORDS,\n contains: [\n hljs.HASH_COMMENT_MODE,\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE,\n hljs.NUMBER_MODE,\n {\n beginKeywords: \'run cmd entrypoint volume add copy workdir label healthcheck shell\',\n starts: {\n end: /[^\\\\]$/,\n subLanguage: \'bash\'\n }\n }\n ],\n illegal: \'{"use strict";eval("// Standard YAML's Failsafe schema.\n// http://www.yaml.org/spec/1.2/spec.html#id2802346\n\n\n\n\n\nvar Schema = __webpack_require__(8796);\n\n\nmodule.exports = new Schema({\n explicit: [\n __webpack_require__(8756),\n __webpack_require__(9396),\n __webpack_require__(393)\n ]\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzQzLmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7OztBQUdhOzs7QUFHYixhQUFhLG1CQUFPLENBQUMsSUFBVzs7O0FBR2hDO0FBQ0E7QUFDQSxJQUFJLG1CQUFPLENBQUMsSUFBYTtBQUN6QixJQUFJLG1CQUFPLENBQUMsSUFBYTtBQUN6QixJQUFJLG1CQUFPLENBQUMsR0FBYTtBQUN6QjtBQUNBLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9vYnNpZGlhbi1taW5kbWFwLW5leHRnZW4vLi9ub2RlX21vZHVsZXMvLnBucG0vanMteWFtbEAzLjE0LjEvbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvc2NoZW1hL2ZhaWxzYWZlLmpzPzNhMjIiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU3RhbmRhcmQgWUFNTCdzIEZhaWxzYWZlIHNjaGVtYS5cbi8vIGh0dHA6Ly93d3cueWFtbC5vcmcvc3BlYy8xLjIvc3BlYy5odG1sI2lkMjgwMjM0NlxuXG5cbid1c2Ugc3RyaWN0JztcblxuXG52YXIgU2NoZW1hID0gcmVxdWlyZSgnLi4vc2NoZW1hJyk7XG5cblxubW9kdWxlLmV4cG9ydHMgPSBuZXcgU2NoZW1hKHtcbiAgZXhwbGljaXQ6IFtcbiAgICByZXF1aXJlKCcuLi90eXBlL3N0cicpLFxuICAgIHJlcXVpcmUoJy4uL3R5cGUvc2VxJyksXG4gICAgcmVxdWlyZSgnLi4vdHlwZS9tYXAnKVxuICBdXG59KTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///743\n")},825:(__unused_webpack_module,exports,__webpack_require__)=>{"use strict";eval("var __webpack_unused_export__;\n\n\nvar composer = __webpack_require__(2146);\nvar Document = __webpack_require__(983);\nvar Schema = __webpack_require__(7826);\nvar errors = __webpack_require__(7454);\nvar Alias = __webpack_require__(6027);\nvar identity = __webpack_require__(9141);\nvar Pair = __webpack_require__(5779);\nvar Scalar = __webpack_require__(3923);\nvar YAMLMap = __webpack_require__(3012);\nvar YAMLSeq = __webpack_require__(8361);\nvar cst = __webpack_require__(1583);\nvar lexer = __webpack_require__(9527);\nvar lineCounter = __webpack_require__(6574);\nvar parser = __webpack_require__(578);\nvar publicApi = __webpack_require__(8161);\nvar visit = __webpack_require__(2770);\n\n\n\n__webpack_unused_export__ = composer.Composer;\n__webpack_unused_export__ = Document.Document;\n__webpack_unused_export__ = Schema.Schema;\n__webpack_unused_export__ = errors.YAMLError;\n__webpack_unused_export__ = errors.YAMLParseError;\n__webpack_unused_export__ = errors.YAMLWarning;\n__webpack_unused_export__ = Alias.Alias;\n__webpack_unused_export__ = identity.isAlias;\n__webpack_unused_export__ = identity.isCollection;\n__webpack_unused_export__ = identity.isDocument;\n__webpack_unused_export__ = identity.isMap;\n__webpack_unused_export__ = identity.isNode;\n__webpack_unused_export__ = identity.isPair;\n__webpack_unused_export__ = identity.isScalar;\n__webpack_unused_export__ = identity.isSeq;\n__webpack_unused_export__ = Pair.Pair;\n__webpack_unused_export__ = Scalar.Scalar;\n__webpack_unused_export__ = YAMLMap.YAMLMap;\n__webpack_unused_export__ = YAMLSeq.YAMLSeq;\n__webpack_unused_export__ = cst;\n__webpack_unused_export__ = lexer.Lexer;\n__webpack_unused_export__ = lineCounter.LineCounter;\n__webpack_unused_export__ = parser.Parser;\nexports.qg = publicApi.parse;\n__webpack_unused_export__ = publicApi.parseAllDocuments;\n__webpack_unused_export__ = publicApi.parseDocument;\n__webpack_unused_export__ = publicApi.stringify;\n__webpack_unused_export__ = visit.visit;\n__webpack_unused_export__ = visit.visitAsync;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODI1LmpzIiwibWFwcGluZ3MiOiI7QUFBYTs7QUFFYixlQUFlLG1CQUFPLENBQUMsSUFBdUI7QUFDOUMsZUFBZSxtQkFBTyxDQUFDLEdBQW1CO0FBQzFDLGFBQWEsbUJBQU8sQ0FBQyxJQUFvQjtBQUN6QyxhQUFhLG1CQUFPLENBQUMsSUFBYTtBQUNsQyxZQUFZLG1CQUFPLENBQUMsSUFBa0I7QUFDdEMsZUFBZSxtQkFBTyxDQUFDLElBQXFCO0FBQzVDLFdBQVcsbUJBQU8sQ0FBQyxJQUFpQjtBQUNwQyxhQUFhLG1CQUFPLENBQUMsSUFBbUI7QUFDeEMsY0FBYyxtQkFBTyxDQUFDLElBQW9CO0FBQzFDLGNBQWMsbUJBQU8sQ0FBQyxJQUFvQjtBQUMxQyxVQUFVLG1CQUFPLENBQUMsSUFBZ0I7QUFDbEMsWUFBWSxtQkFBTyxDQUFDLElBQWtCO0FBQ3RDLGtCQUFrQixtQkFBTyxDQUFDLElBQXlCO0FBQ25ELGFBQWEsbUJBQU8sQ0FBQyxHQUFtQjtBQUN4QyxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFpQjtBQUN6QyxZQUFZLG1CQUFPLENBQUMsSUFBWTs7OztBQUloQyx5QkFBZ0I7QUFDaEIseUJBQWdCO0FBQ2hCLHlCQUFjO0FBQ2QseUJBQWlCO0FBQ2pCLHlCQUFzQjtBQUN0Qix5QkFBbUI7QUFDbkIseUJBQWE7QUFDYix5QkFBZTtBQUNmLHlCQUFvQjtBQUNwQix5QkFBa0I7QUFDbEIseUJBQWE7QUFDYix5QkFBYztBQUNkLHlCQUFjO0FBQ2QseUJBQWdCO0FBQ2hCLHlCQUFhO0FBQ2IseUJBQVk7QUFDWix5QkFBYztBQUNkLHlCQUFlO0FBQ2YseUJBQWU7QUFDZix5QkFBVztBQUNYLHlCQUFhO0FBQ2IseUJBQW1CO0FBQ25CLHlCQUFjO0FBQ2QsVUFBYTtBQUNiLHlCQUF5QjtBQUN6Qix5QkFBcUI7QUFDckIseUJBQWlCO0FBQ2pCLHlCQUFhO0FBQ2IseUJBQWtCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vb2JzaWRpYW4tbWluZG1hcC1uZXh0Z2VuLy4vbm9kZV9tb2R1bGVzLy5wbnBtL3lhbWxAMi44LjAvbm9kZV9tb2R1bGVzL3lhbWwvZGlzdC9pbmRleC5qcz85YWZiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGNvbXBvc2VyID0gcmVxdWlyZSgnLi9jb21wb3NlL2NvbXBvc2VyLmpzJyk7XG52YXIgRG9jdW1lbnQgPSByZXF1aXJlKCcuL2RvYy9Eb2N1bWVudC5qcycpO1xudmFyIFNjaGVtYSA9IHJlcXVpcmUoJy4vc2NoZW1hL1NjaGVtYS5qcycpO1xudmFyIGVycm9ycyA9IHJlcXVpcmUoJy4vZXJyb3JzLmpzJyk7XG52YXIgQWxpYXMgPSByZXF1aXJlKCcuL25vZGVzL0FsaWFzLmpzJyk7XG52YXIgaWRlbnRpdHkgPSByZXF1aXJlKCcuL25vZGVzL2lkZW50aXR5LmpzJyk7XG52YXIgUGFpciA9IHJlcXVpcmUoJy4vbm9kZXMvUGFpci5qcycpO1xudmFyIFNjYWxhciA9IHJlcXVpcmUoJy4vbm9kZXMvU2NhbGFyLmpzJyk7XG52YXIgWUFNTE1hcCA9IHJlcXVpcmUoJy4vbm9kZXMvWUFNTE1hcC5qcycpO1xudmFyIFlBTUxTZXEgPSByZXF1aXJlKCcuL25vZGVzL1lBTUxTZXEuanMnKTtcbnZhciBjc3QgPSByZXF1aXJlKCcuL3BhcnNlL2NzdC5qcycpO1xudmFyIGxleGVyID0gcmVxdWlyZSgnLi9wYXJzZS9sZXhlci5qcycpO1xudmFyIGxpbmVDb3VudGVyID0gcmVxdWlyZSgnLi9wYXJzZS9saW5lLWNvdW50ZXIuanMnKTtcbnZhciBwYXJzZXIgPSByZXF1aXJlKCcuL3BhcnNlL3BhcnNlci5qcycpO1xudmFyIHB1YmxpY0FwaSA9IHJlcXVpcmUoJy4vcHVibGljLWFwaS5qcycpO1xudmFyIHZpc2l0ID0gcmVxdWlyZSgnLi92aXNpdC5qcycpO1xuXG5cblxuZXhwb3J0cy5Db21wb3NlciA9IGNvbXBvc2VyLkNvbXBvc2VyO1xuZXhwb3J0cy5Eb2N1bWVudCA9IERvY3VtZW50LkRvY3VtZW50O1xuZXhwb3J0cy5TY2hlbWEgPSBTY2hlbWEuU2NoZW1hO1xuZXhwb3J0cy5ZQU1MRXJyb3IgPSBlcnJvcnMuWUFNTEVycm9yO1xuZXhwb3J0cy5ZQU1MUGFyc2VFcnJvciA9IGVycm9ycy5ZQU1MUGFyc2VFcnJvcjtcbmV4cG9ydHMuWUFNTFdhcm5pbmcgPSBlcnJvcnMuWUFNTFdhcm5pbmc7XG5leHBvcnRzLkFsaWFzID0gQWxpYXMuQWxpYXM7XG5leHBvcnRzLmlzQWxpYXMgPSBpZGVudGl0eS5pc0FsaWFzO1xuZXhwb3J0cy5pc0NvbGxlY3Rpb24gPSBpZGVudGl0eS5pc0NvbGxlY3Rpb247XG5leHBvcnRzLmlzRG9jdW1lbnQgPSBpZGVudGl0eS5pc0RvY3VtZW50O1xuZXhwb3J0cy5pc01hcCA9IGlkZW50aXR5LmlzTWFwO1xuZXhwb3J0cy5pc05vZGUgPSBpZGVudGl0eS5pc05vZGU7XG5leHBvcnRzLmlzUGFpciA9IGlkZW50aXR5LmlzUGFpcjtcbmV4cG9ydHMuaXNTY2FsYXIgPSBpZGVudGl0eS5pc1NjYWxhcjtcbmV4cG9ydHMuaXNTZXEgPSBpZGVudGl0eS5pc1NlcTtcbmV4cG9ydHMuUGFpciA9IFBhaXIuUGFpcjtcbmV4cG9ydHMuU2NhbGFyID0gU2NhbGFyLlNjYWxhcjtcbmV4cG9ydHMuWUFNTE1hcCA9IFlBTUxNYXAuWUFNTE1hcDtcbmV4cG9ydHMuWUFNTFNlcSA9IFlBTUxTZXEuWUFNTFNlcTtcbmV4cG9ydHMuQ1NUID0gY3N0O1xuZXhwb3J0cy5MZXhlciA9IGxleGVyLkxleGVyO1xuZXhwb3J0cy5MaW5lQ291bnRlciA9IGxpbmVDb3VudGVyLkxpbmVDb3VudGVyO1xuZXhwb3J0cy5QYXJzZXIgPSBwYXJzZXIuUGFyc2VyO1xuZXhwb3J0cy5wYXJzZSA9IHB1YmxpY0FwaS5wYXJzZTtcbmV4cG9ydHMucGFyc2VBbGxEb2N1bWVudHMgPSBwdWJsaWNBcGkucGFyc2VBbGxEb2N1bWVudHM7XG5leHBvcnRzLnBhcnNlRG9jdW1lbnQgPSBwdWJsaWNBcGkucGFyc2VEb2N1bWVudDtcbmV4cG9ydHMuc3RyaW5naWZ5ID0gcHVibGljQXBpLnN0cmluZ2lmeTtcbmV4cG9ydHMudmlzaXQgPSB2aXNpdC52aXNpdDtcbmV4cG9ydHMudmlzaXRBc3luYyA9IHZpc2l0LnZpc2l0QXN5bmM7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///825\n")},932:I=>{"use strict";I.exports=require("process")},933:(__unused_webpack_module,exports)=>{"use strict";eval("\n\nconst BREAK = Symbol('break visit');\nconst SKIP = Symbol('skip children');\nconst REMOVE = Symbol('remove item');\n/**\n * Apply a visitor to a CST document or item.\n *\n * Walks through the tree (depth-first) starting from the root, calling a\n * `visitor` function with two arguments when entering each item:\n * - `item`: The current item, which included the following members:\n * - `start: SourceToken[]` – Source tokens before the key or value,\n * possibly including its anchor or tag.\n * - `key?: Token | null` – Set for pair values. May then be `null`, if\n * the key before the `:` separator is empty.\n * - `sep?: SourceToken[]` – Source tokens between the key and the value,\n * which should include the `:` map value indicator if `value` is set.\n * - `value?: Token` – The value of a sequence item, or of a map pair.\n * - `path`: The steps from the root to the current node, as an array of\n * `['key' | 'value', number]` tuples.\n *\n * The return value of the visitor may be used to control the traversal:\n * - `undefined` (default): Do nothing and continue\n * - `visit.SKIP`: Do not visit the children of this token, continue with\n * next sibling\n * - `visit.BREAK`: Terminate traversal completely\n * - `visit.REMOVE`: Remove the current item, then continue with the next one\n * - `number`: Set the index of the next step. This is useful especially if\n * the index of the current token has changed.\n * - `function`: Define the next visitor for this item. After the original\n * visitor is called on item entry, next visitors are called after handling\n * a non-empty `key` and when exiting the item.\n */\nfunction visit(cst, visitor) {\n if ('type' in cst && cst.type === 'document')\n cst = { start: cst.start, value: cst.value };\n _visit(Object.freeze([]), cst, visitor);\n}\n// Without the `as symbol` casts, TS declares these in the `visit`\n// namespace using `var`, but then complains about that because\n// `unique symbol` must be `const`.\n/** Terminate visit traversal completely */\nvisit.BREAK = BREAK;\n/** Do not visit the children of the current item */\nvisit.SKIP = SKIP;\n/** Remove the current item */\nvisit.REMOVE = REMOVE;\n/** Find the item at `path` from `cst` as the root */\nvisit.itemAtPath = (cst, path) => {\n let item = cst;\n for (const [field, index] of path) {\n const tok = item?.[field];\n if (tok && 'items' in tok) {\n item = tok.items[index];\n }\n else\n return undefined;\n }\n return item;\n};\n/**\n * Get the immediate parent collection of the item at `path` from `cst` as the root.\n *\n * Throws an error if the collection is not found, which should never happen if the item itself exists.\n */\nvisit.parentCollection = (cst, path) => {\n const parent = visit.itemAtPath(cst, path.slice(0, -1));\n const field = path[path.length - 1][0];\n const coll = parent?.[field];\n if (coll && 'items' in coll)\n return coll;\n throw new Error('Parent collection not found');\n};\nfunction _visit(path, item, visitor) {\n let ctrl = visitor(item, path);\n if (typeof ctrl === 'symbol')\n return ctrl;\n for (const field of ['key', 'value']) {\n const token = item[field];\n if (token && 'items' in token) {\n for (let i = 0; i < token.items.length; ++i) {\n const ci = _visit(Object.freeze(path.concat([[field, i]])), token.items[i], visitor);\n if (typeof ci === 'number')\n i = ci - 1;\n else if (ci === BREAK)\n return BREAK;\n else if (ci === REMOVE) {\n token.items.splice(i, 1);\n i -= 1;\n }\n }\n if (typeof ctrl === 'function' && field === 'key')\n ctrl = ctrl(item, path);\n }\n }\n return typeof ctrl === 'function' ? ctrl(item, path) : ctrl;\n}\n\nexports.visit = visit;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTMzLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLHdCQUF3QjtBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxhQUFhIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vb2JzaWRpYW4tbWluZG1hcC1uZXh0Z2VuLy4vbm9kZV9tb2R1bGVzLy5wbnBtL3lhbWxAMi44LjAvbm9kZV9tb2R1bGVzL3lhbWwvZGlzdC9wYXJzZS9jc3QtdmlzaXQuanM/MTZiZiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmNvbnN0IEJSRUFLID0gU3ltYm9sKCdicmVhayB2aXNpdCcpO1xuY29uc3QgU0tJUCA9IFN5bWJvbCgnc2tpcCBjaGlsZHJlbicpO1xuY29uc3QgUkVNT1ZFID0gU3ltYm9sKCdyZW1vdmUgaXRlbScpO1xuLyoqXG4gKiBBcHBseSBhIHZpc2l0b3IgdG8gYSBDU1QgZG9jdW1lbnQgb3IgaXRlbS5cbiAqXG4gKiBXYWxrcyB0aHJvdWdoIHRoZSB0cmVlIChkZXB0aC1maXJzdCkgc3RhcnRpbmcgZnJvbSB0aGUgcm9vdCwgY2FsbGluZyBhXG4gKiBgdmlzaXRvcmAgZnVuY3Rpb24gd2l0aCB0d28gYXJndW1lbnRzIHdoZW4gZW50ZXJpbmcgZWFjaCBpdGVtOlxuICogICAtIGBpdGVtYDogVGhlIGN1cnJlbnQgaXRlbSwgd2hpY2ggaW5jbHVkZWQgdGhlIGZvbGxvd2luZyBtZW1iZXJzOlxuICogICAgIC0gYHN0YXJ0OiBTb3VyY2VUb2tlbltdYCDigJMgU291cmNlIHRva2VucyBiZWZvcmUgdGhlIGtleSBvciB2YWx1ZSxcbiAqICAgICAgIHBvc3NpYmx5IGluY2x1ZGluZyBpdHMgYW5jaG9yIG9yIHRhZy5cbiAqICAgICAtIGBrZXk/OiBUb2tlbiB8IG51bGxgIOKAkyBTZXQgZm9yIHBhaXIgdmFsdWVzLiBNYXkgdGhlbiBiZSBgbnVsbGAsIGlmXG4gKiAgICAgICB0aGUga2V5IGJlZm9yZSB0aGUgYDpgIHNlcGFyYXRvciBpcyBlbXB0eS5cbiAqICAgICAtIGBzZXA/OiBTb3VyY2VUb2tlbltdYCDigJMgU291cmNlIHRva2VucyBiZXR3ZWVuIHRoZSBrZXkgYW5kIHRoZSB2YWx1ZSxcbiAqICAgICAgIHdoaWNoIHNob3VsZCBpbmNsdWRlIHRoZSBgOmAgbWFwIHZhbHVlIGluZGljYXRvciBpZiBgdmFsdWVgIGlzIHNldC5cbiAqICAgICAtIGB2YWx1ZT86IFRva2VuYCDigJMgVGhlIHZhbHVlIG9mIGEgc2VxdWVuY2UgaXRlbSwgb3Igb2YgYSBtYXAgcGFpci5cbiAqICAgLSBgcGF0aGA6IFRoZSBzdGVwcyBmcm9tIHRoZSByb290IHRvIHRoZSBjdXJyZW50IG5vZGUsIGFzIGFuIGFycmF5IG9mXG4gKiAgICAgYFsna2V5JyB8ICd2YWx1ZScsIG51bWJlcl1gIHR1cGxlcy5cbiAqXG4gKiBUaGUgcmV0dXJuIHZhbHVlIG9mIHRoZSB2aXNpdG9yIG1heSBiZSB1c2VkIHRvIGNvbnRyb2wgdGhlIHRyYXZlcnNhbDpcbiAqICAgLSBgdW5kZWZpbmVkYCAoZGVmYXVsdCk6IERvIG5vdGhpbmcgYW5kIGNvbnRpbnVlXG4gKiAgIC0gYHZpc2l0LlNLSVBgOiBEbyBub3QgdmlzaXQgdGhlIGNoaWxkcmVuIG9mIHRoaXMgdG9rZW4sIGNvbnRpbnVlIHdpdGhcbiAqICAgICAgbmV4dCBzaWJsaW5nXG4gKiAgIC0gYHZpc2l0LkJSRUFLYDogVGVybWluYXRlIHRyYXZlcnNhbCBjb21wbGV0ZWx5XG4gKiAgIC0gYHZpc2l0LlJFTU9WRWA6IFJlbW92ZSB0aGUgY3VycmVudCBpdGVtLCB0aGVuIGNvbnRpbnVlIHdpdGggdGhlIG5leHQgb25lXG4gKiAgIC0gYG51bWJlcmA6IFNldCB0aGUgaW5kZXggb2YgdGhlIG5leHQgc3RlcC4gVGhpcyBpcyB1c2VmdWwgZXNwZWNpYWxseSBpZlxuICogICAgIHRoZSBpbmRleCBvZiB0aGUgY3VycmVudCB0b2tlbiBoYXMgY2hhbmdlZC5cbiAqICAgLSBgZnVuY3Rpb25gOiBEZWZpbmUgdGhlIG5leHQgdmlzaXRvciBmb3IgdGhpcyBpdGVtLiBBZnRlciB0aGUgb3JpZ2luYWxcbiAqICAgICB2aXNpdG9yIGlzIGNhbGxlZCBvbiBpdGVtIGVudHJ5LCBuZXh0IHZpc2l0b3JzIGFyZSBjYWxsZWQgYWZ0ZXIgaGFuZGxpbmdcbiAqICAgICBhIG5vbi1lbXB0eSBga2V5YCBhbmQgd2hlbiBleGl0aW5nIHRoZSBpdGVtLlxuICovXG5mdW5jdGlvbiB2aXNpdChjc3QsIHZpc2l0b3IpIHtcbiAgICBpZiAoJ3R5cGUnIGluIGNzdCAmJiBjc3QudHlwZSA9PT0gJ2RvY3VtZW50JylcbiAgICAgICAgY3N0ID0geyBzdGFydDogY3N0LnN0YXJ0LCB2YWx1ZTogY3N0LnZhbHVlIH07XG4gICAgX3Zpc2l0KE9iamVjdC5mcmVlemUoW10pLCBjc3QsIHZpc2l0b3IpO1xufVxuLy8gV2l0aG91dCB0aGUgYGFzIHN5bWJvbGAgY2FzdHMsIFRTIGRlY2xhcmVzIHRoZXNlIGluIHRoZSBgdmlzaXRgXG4vLyBuYW1lc3BhY2UgdXNpbmcgYHZhcmAsIGJ1dCB0aGVuIGNvbXBsYWlucyBhYm91dCB0aGF0IGJlY2F1c2Vcbi8vIGB1bmlxdWUgc3ltYm9sYCBtdXN0IGJlIGBjb25zdGAuXG4vKiogVGVybWluYXRlIHZpc2l0IHRyYXZlcnNhbCBjb21wbGV0ZWx5ICovXG52aXNpdC5CUkVBSyA9IEJSRUFLO1xuLyoqIERvIG5vdCB2aXNpdCB0aGUgY2hpbGRyZW4gb2YgdGhlIGN1cnJlbnQgaXRlbSAqL1xudmlzaXQuU0tJUCA9IFNLSVA7XG4vKiogUmVtb3ZlIHRoZSBjdXJyZW50IGl0ZW0gKi9cbnZpc2l0LlJFTU9WRSA9IFJFTU9WRTtcbi8qKiBGaW5kIHRoZSBpdGVtIGF0IGBwYXRoYCBmcm9tIGBjc3RgIGFzIHRoZSByb290ICovXG52aXNpdC5pdGVtQXRQYXRoID0gKGNzdCwgcGF0aCkgPT4ge1xuICAgIGxldCBpdGVtID0gY3N0O1xuICAgIGZvciAoY29uc3QgW2ZpZWxkLCBpbmRleF0gb2YgcGF0aCkge1xuICAgICAgICBjb25zdCB0b2sgPSBpdGVtPy5bZmllbGRdO1xuICAgICAgICBpZiAodG9rICYmICdpdGVtcycgaW4gdG9rKSB7XG4gICAgICAgICAgICBpdGVtID0gdG9rLml0ZW1zW2luZGV4XTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICByZXR1cm4gaXRlbTtcbn07XG4vKipcbiAqIEdldCB0aGUgaW1tZWRpYXRlIHBhcmVudCBjb2xsZWN0aW9uIG9mIHRoZSBpdGVtIGF0IGBwYXRoYCBmcm9tIGBjc3RgIGFzIHRoZSByb290LlxuICpcbiAqIFRocm93cyBhbiBlcnJvciBpZiB0aGUgY29sbGVjdGlvbiBpcyBub3QgZm91bmQsIHdoaWNoIHNob3VsZCBuZXZlciBoYXBwZW4gaWYgdGhlIGl0ZW0gaXRzZWxmIGV4aXN0cy5cbiAqL1xudmlzaXQucGFyZW50Q29sbGVjdGlvbiA9IChjc3QsIHBhdGgpID0+IHtcbiAgICBjb25zdCBwYXJlbnQgPSB2aXNpdC5pdGVtQXRQYXRoKGNzdCwgcGF0aC5zbGljZSgwLCAtMSkpO1xuICAgIGNvbnN0IGZpZWxkID0gcGF0aFtwYXRoLmxlbmd0aCAtIDFdWzBdO1xuICAgIGNvbnN0IGNvbGwgPSBwYXJlbnQ/LltmaWVsZF07XG4gICAgaWYgKGNvbGwgJiYgJ2l0ZW1zJyBpbiBjb2xsKVxuICAgICAgICByZXR1cm4gY29sbDtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhcmVudCBjb2xsZWN0aW9uIG5vdCBmb3VuZCcpO1xufTtcbmZ1bmN0aW9uIF92aXNpdChwYXRoLCBpdGVtLCB2aXNpdG9yKSB7XG4gICAgbGV0IGN0cmwgPSB2aXNpdG9yKGl0ZW0sIHBhdGgpO1xuICAgIGlmICh0eXBlb2YgY3RybCA9PT0gJ3N5bWJvbCcpXG4gICAgICAgIHJldHVybiBjdHJsO1xuICAgIGZvciAoY29uc3QgZmllbGQgb2YgWydrZXknLCAndmFsdWUnXSkge1xuICAgICAgICBjb25zdCB0b2tlbiA9IGl0ZW1bZmllbGRdO1xuICAgICAgICBpZiAodG9rZW4gJiYgJ2l0ZW1zJyBpbiB0b2tlbikge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0b2tlbi5pdGVtcy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNpID0gX3Zpc2l0KE9iamVjdC5mcmVlemUocGF0aC5jb25jYXQoW1tmaWVsZCwgaV1dKSksIHRva2VuLml0ZW1zW2ldLCB2aXNpdG9yKTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNpID09PSAnbnVtYmVyJylcbiAgICAgICAgICAgICAgICAgICAgaSA9IGNpIC0gMTtcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChjaSA9PT0gQlJFQUspXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBCUkVBSztcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChjaSA9PT0gUkVNT1ZFKSB7XG4gICAgICAgICAgICAgICAgICAgIHRva2VuLml0ZW1zLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgaSAtPSAxO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2YgY3RybCA9PT0gJ2Z1bmN0aW9uJyAmJiBmaWVsZCA9PT0gJ2tleScpXG4gICAgICAgICAgICAgICAgY3RybCA9IGN0cmwoaXRlbSwgcGF0aCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHR5cGVvZiBjdHJsID09PSAnZnVuY3Rpb24nID8gY3RybChpdGVtLCBwYXRoKSA6IGN0cmw7XG59XG5cbmV4cG9ydHMudmlzaXQgPSB2aXNpdDtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///933\n")},963:module=>{eval("/*\n Language: Zephir\n Description: Zephir, an open source, high-level language designed to ease the creation and maintainability of extensions for PHP with a focus on type and memory safety.\n Author: Oleg Efimov \n Website: https://zephir-lang.com/en\n Category: web\n Audit: 2020\n */\n\n/** @type LanguageFn */\nfunction zephir(hljs) {\n const STRING = {\n className: 'string',\n contains: [ hljs.BACKSLASH_ESCAPE ],\n variants: [\n hljs.inherit(hljs.APOS_STRING_MODE, { illegal: null }),\n hljs.inherit(hljs.QUOTE_STRING_MODE, { illegal: null })\n ]\n };\n const TITLE_MODE = hljs.UNDERSCORE_TITLE_MODE;\n const NUMBER = { variants: [\n hljs.BINARY_NUMBER_MODE,\n hljs.C_NUMBER_MODE\n ] };\n const KEYWORDS =\n // classes and objects\n 'namespace class interface use extends '\n + 'function return '\n + 'abstract final public protected private static deprecated '\n // error handling\n + 'throw try catch Exception '\n // keyword-ish things their website does NOT seem to highlight (in their own snippets)\n // 'typeof fetch in ' +\n // operators/helpers\n + 'echo empty isset instanceof unset '\n // assignment/variables\n + 'let var new const self '\n // control\n + 'require '\n + 'if else elseif switch case default '\n + 'do while loop for continue break '\n + 'likely unlikely '\n // magic constants\n // https://github.com/phalcon/zephir/blob/master/Library/Expression/Constants.php\n + '__LINE__ __FILE__ __DIR__ __FUNCTION__ __CLASS__ __TRAIT__ __METHOD__ __NAMESPACE__ '\n // types - https://docs.zephir-lang.com/0.12/en/types\n + 'array boolean float double integer object resource string '\n + 'char long unsigned bool int uint ulong uchar '\n // built-ins\n + 'true false null undefined';\n\n return {\n name: 'Zephir',\n aliases: [ 'zep' ],\n keywords: KEYWORDS,\n contains: [\n hljs.C_LINE_COMMENT_MODE,\n hljs.COMMENT(\n /\\/\\*/,\n /\\*\\//,\n { contains: [\n {\n className: 'doctag',\n begin: /@[A-Za-z]+/\n }\n ] }\n ),\n {\n className: 'string',\n begin: /<<<['\"]?\\w+['\"]?$/,\n end: /^\\w+;/,\n contains: [ hljs.BACKSLASH_ESCAPE ]\n },\n {\n // swallow composed identifiers to avoid parsing them as keywords\n begin: /(::|->)+[a-zA-Z_\\x7f-\\xff][a-zA-Z0-9_\\x7f-\\xff]*/ },\n {\n className: 'function',\n beginKeywords: 'function fn',\n end: /[;{]/,\n excludeEnd: true,\n illegal: /\\$|\\[|%/,\n contains: [\n TITLE_MODE,\n {\n className: 'params',\n begin: /\\(/,\n end: /\\)/,\n keywords: KEYWORDS,\n contains: [\n 'self',\n hljs.C_BLOCK_COMMENT_MODE,\n STRING,\n NUMBER\n ]\n }\n ]\n },\n {\n className: 'class',\n beginKeywords: 'class interface',\n end: /\\{/,\n excludeEnd: true,\n illegal: /[:($\"]/,\n contains: [\n { beginKeywords: 'extends implements' },\n TITLE_MODE\n ]\n },\n {\n beginKeywords: 'namespace',\n end: /;/,\n illegal: /[.']/,\n contains: [ TITLE_MODE ]\n },\n {\n beginKeywords: 'use',\n end: /;/,\n contains: [ TITLE_MODE ]\n },\n { begin: /=>/ // No markup, just a relevance booster\n },\n STRING,\n NUMBER\n ]\n };\n}\n\nmodule.exports = zephir;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTYzLmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNENBQTRDLGVBQWU7QUFDM0QsNkNBQTZDLGVBQWU7QUFDNUQ7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQjtBQUNuQjtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsbUVBQW1FO0FBQ25FO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0E7QUFDQSxZQUFZLHFDQUFxQztBQUNqRDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0EsT0FBTztBQUNQLFFBQVE7QUFDUixPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL29ic2lkaWFuLW1pbmRtYXAtbmV4dGdlbi8uL25vZGVfbW9kdWxlcy8ucG5wbS9oaWdobGlnaHQuanNAMTEuMTEuMS9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvemVwaGlyLmpzPzI5MmEiXSwic291cmNlc0NvbnRlbnQiOlsiLypcbiBMYW5ndWFnZTogWmVwaGlyXG4gRGVzY3JpcHRpb246IFplcGhpciwgYW4gb3BlbiBzb3VyY2UsIGhpZ2gtbGV2ZWwgbGFuZ3VhZ2UgZGVzaWduZWQgdG8gZWFzZSB0aGUgY3JlYXRpb24gYW5kIG1haW50YWluYWJpbGl0eSBvZiBleHRlbnNpb25zIGZvciBQSFAgd2l0aCBhIGZvY3VzIG9uIHR5cGUgYW5kIG1lbW9yeSBzYWZldHkuXG4gQXV0aG9yOiBPbGVnIEVmaW1vdiA8ZWZpbW92b3ZAZ21haWwuY29tPlxuIFdlYnNpdGU6IGh0dHBzOi8vemVwaGlyLWxhbmcuY29tL2VuXG4gQ2F0ZWdvcnk6IHdlYlxuIEF1ZGl0OiAyMDIwXG4gKi9cblxuLyoqIEB0eXBlIExhbmd1YWdlRm4gKi9cbmZ1bmN0aW9uIHplcGhpcihobGpzKSB7XG4gIGNvbnN0IFNUUklORyA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIGNvbnRhaW5zOiBbIGhsanMuQkFDS1NMQVNIX0VTQ0FQRSBdLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICBobGpzLmluaGVyaXQoaGxqcy5BUE9TX1NUUklOR19NT0RFLCB7IGlsbGVnYWw6IG51bGwgfSksXG4gICAgICBobGpzLmluaGVyaXQoaGxqcy5RVU9URV9TVFJJTkdfTU9ERSwgeyBpbGxlZ2FsOiBudWxsIH0pXG4gICAgXVxuICB9O1xuICBjb25zdCBUSVRMRV9NT0RFID0gaGxqcy5VTkRFUlNDT1JFX1RJVExFX01PREU7XG4gIGNvbnN0IE5VTUJFUiA9IHsgdmFyaWFudHM6IFtcbiAgICBobGpzLkJJTkFSWV9OVU1CRVJfTU9ERSxcbiAgICBobGpzLkNfTlVNQkVSX01PREVcbiAgXSB9O1xuICBjb25zdCBLRVlXT1JEUyA9XG4gICAgLy8gY2xhc3NlcyBhbmQgb2JqZWN0c1xuICAgICduYW1lc3BhY2UgY2xhc3MgaW50ZXJmYWNlIHVzZSBleHRlbmRzICdcbiAgICArICdmdW5jdGlvbiByZXR1cm4gJ1xuICAgICsgJ2Fic3RyYWN0IGZpbmFsIHB1YmxpYyBwcm90ZWN0ZWQgcHJpdmF0ZSBzdGF0aWMgZGVwcmVjYXRlZCAnXG4gICAgLy8gZXJyb3IgaGFuZGxpbmdcbiAgICArICd0aHJvdyB0cnkgY2F0Y2ggRXhjZXB0aW9uICdcbiAgICAvLyBrZXl3b3JkLWlzaCB0aGluZ3MgdGhlaXIgd2Vic2l0ZSBkb2VzIE5PVCBzZWVtIHRvIGhpZ2hsaWdodCAoaW4gdGhlaXIgb3duIHNuaXBwZXRzKVxuICAgIC8vICd0eXBlb2YgZmV0Y2ggaW4gJyArXG4gICAgLy8gb3BlcmF0b3JzL2hlbHBlcnNcbiAgICArICdlY2hvIGVtcHR5IGlzc2V0IGluc3RhbmNlb2YgdW5zZXQgJ1xuICAgIC8vIGFzc2lnbm1lbnQvdmFyaWFibGVzXG4gICAgKyAnbGV0IHZhciBuZXcgY29uc3Qgc2VsZiAnXG4gICAgLy8gY29udHJvbFxuICAgICsgJ3JlcXVpcmUgJ1xuICAgICsgJ2lmIGVsc2UgZWxzZWlmIHN3aXRjaCBjYXNlIGRlZmF1bHQgJ1xuICAgICsgJ2RvIHdoaWxlIGxvb3AgZm9yIGNvbnRpbnVlIGJyZWFrICdcbiAgICArICdsaWtlbHkgdW5saWtlbHkgJ1xuICAgIC8vIG1hZ2ljIGNvbnN0YW50c1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9waGFsY29uL3plcGhpci9ibG9iL21hc3Rlci9MaWJyYXJ5L0V4cHJlc3Npb24vQ29uc3RhbnRzLnBocFxuICAgICsgJ19fTElORV9fIF9fRklMRV9fIF9fRElSX18gX19GVU5DVElPTl9fIF9fQ0xBU1NfXyBfX1RSQUlUX18gX19NRVRIT0RfXyBfX05BTUVTUEFDRV9fICdcbiAgICAvLyB0eXBlcyAtIGh0dHBzOi8vZG9jcy56ZXBoaXItbGFuZy5jb20vMC4xMi9lbi90eXBlc1xuICAgICsgJ2FycmF5IGJvb2xlYW4gZmxvYXQgZG91YmxlIGludGVnZXIgb2JqZWN0IHJlc291cmNlIHN0cmluZyAnXG4gICAgKyAnY2hhciBsb25nIHVuc2lnbmVkIGJvb2wgaW50IHVpbnQgdWxvbmcgdWNoYXIgJ1xuICAgIC8vIGJ1aWx0LWluc1xuICAgICsgJ3RydWUgZmFsc2UgbnVsbCB1bmRlZmluZWQnO1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogJ1plcGhpcicsXG4gICAgYWxpYXNlczogWyAnemVwJyBdLFxuICAgIGtleXdvcmRzOiBLRVlXT1JEUyxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5DT01NRU5UKFxuICAgICAgICAvXFwvXFwqLyxcbiAgICAgICAgL1xcKlxcLy8sXG4gICAgICAgIHsgY29udGFpbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdkb2N0YWcnLFxuICAgICAgICAgICAgYmVnaW46IC9AW0EtWmEtel0rL1xuICAgICAgICAgIH1cbiAgICAgICAgXSB9XG4gICAgICApLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICBiZWdpbjogLzw8PFsnXCJdP1xcdytbJ1wiXT8kLyxcbiAgICAgICAgZW5kOiAvXlxcdys7LyxcbiAgICAgICAgY29udGFpbnM6IFsgaGxqcy5CQUNLU0xBU0hfRVNDQVBFIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIC8vIHN3YWxsb3cgY29tcG9zZWQgaWRlbnRpZmllcnMgdG8gYXZvaWQgcGFyc2luZyB0aGVtIGFzIGtleXdvcmRzXG4gICAgICAgIGJlZ2luOiAvKDo6fC0+KStbYS16QS1aX1xceDdmLVxceGZmXVthLXpBLVowLTlfXFx4N2YtXFx4ZmZdKi8gfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnZnVuY3Rpb24nLFxuICAgICAgICBiZWdpbktleXdvcmRzOiAnZnVuY3Rpb24gZm4nLFxuICAgICAgICBlbmQ6IC9bO3tdLyxcbiAgICAgICAgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAgaWxsZWdhbDogL1xcJHxcXFt8JS8sXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgVElUTEVfTU9ERSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdwYXJhbXMnLFxuICAgICAgICAgICAgYmVnaW46IC9cXCgvLFxuICAgICAgICAgICAgZW5kOiAvXFwpLyxcbiAgICAgICAgICAgIGtleXdvcmRzOiBLRVlXT1JEUyxcbiAgICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICAgICdzZWxmJyxcbiAgICAgICAgICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICAgICAgICAgICAgU1RSSU5HLFxuICAgICAgICAgICAgICBOVU1CRVJcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2NsYXNzJyxcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ2NsYXNzIGludGVyZmFjZScsXG4gICAgICAgIGVuZDogL1xcey8sXG4gICAgICAgIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgIGlsbGVnYWw6IC9bOigkXCJdLyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7IGJlZ2luS2V5d29yZHM6ICdleHRlbmRzIGltcGxlbWVudHMnIH0sXG4gICAgICAgICAgVElUTEVfTU9ERVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbktleXdvcmRzOiAnbmFtZXNwYWNlJyxcbiAgICAgICAgZW5kOiAvOy8sXG4gICAgICAgIGlsbGVnYWw6IC9bLiddLyxcbiAgICAgICAgY29udGFpbnM6IFsgVElUTEVfTU9ERSBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbktleXdvcmRzOiAndXNlJyxcbiAgICAgICAgZW5kOiAvOy8sXG4gICAgICAgIGNvbnRhaW5zOiBbIFRJVExFX01PREUgXVxuICAgICAgfSxcbiAgICAgIHsgYmVnaW46IC89Pi8gLy8gTm8gbWFya3VwLCBqdXN0IGEgcmVsZXZhbmNlIGJvb3N0ZXJcbiAgICAgIH0sXG4gICAgICBTVFJJTkcsXG4gICAgICBOVU1CRVJcbiAgICBdXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gemVwaGlyO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///963\n")},983:(__unused_webpack_module,exports,__webpack_require__)=>{"use strict";eval("\n\nvar Alias = __webpack_require__(6027);\nvar Collection = __webpack_require__(5107);\nvar identity = __webpack_require__(9141);\nvar Pair = __webpack_require__(5779);\nvar toJS = __webpack_require__(8977);\nvar Schema = __webpack_require__(7826);\nvar stringifyDocument = __webpack_require__(5563);\nvar anchors = __webpack_require__(7954);\nvar applyReviver = __webpack_require__(6299);\nvar createNode = __webpack_require__(5090);\nvar directives = __webpack_require__(4172);\n\nclass Document {\n constructor(value, replacer, options) {\n /** A comment before this Document */\n this.commentBefore = null;\n /** A comment immediately after this Document */\n this.comment = null;\n /** Errors encountered during parsing. */\n this.errors = [];\n /** Warnings encountered during parsing. */\n this.warnings = [];\n Object.defineProperty(this, identity.NODE_TYPE, { value: identity.DOC });\n let _replacer = null;\n if (typeof replacer === 'function' || Array.isArray(replacer)) {\n _replacer = replacer;\n }\n else if (options === undefined && replacer) {\n options = replacer;\n replacer = undefined;\n }\n const opt = Object.assign({\n intAsBigInt: false,\n keepSourceTokens: false,\n logLevel: 'warn',\n prettyErrors: true,\n strict: true,\n stringKeys: false,\n uniqueKeys: true,\n version: '1.2'\n }, options);\n this.options = opt;\n let { version } = opt;\n if (options?._directives) {\n this.directives = options._directives.atDocument();\n if (this.directives.yaml.explicit)\n version = this.directives.yaml.version;\n }\n else\n this.directives = new directives.Directives({ version });\n this.setSchema(version, options);\n // @ts-expect-error We can't really know that this matches Contents.\n this.contents =\n value === undefined ? null : this.createNode(value, _replacer, options);\n }\n /**\n * Create a deep copy of this Document and its contents.\n *\n * Custom Node values that inherit from `Object` still refer to their original instances.\n */\n clone() {\n const copy = Object.create(Document.prototype, {\n [identity.NODE_TYPE]: { value: identity.DOC }\n });\n copy.commentBefore = this.commentBefore;\n copy.comment = this.comment;\n copy.errors = this.errors.slice();\n copy.warnings = this.warnings.slice();\n copy.options = Object.assign({}, this.options);\n if (this.directives)\n copy.directives = this.directives.clone();\n copy.schema = this.schema.clone();\n // @ts-expect-error We can't really know that this matches Contents.\n copy.contents = identity.isNode(this.contents)\n ? this.contents.clone(copy.schema)\n : this.contents;\n if (this.range)\n copy.range = this.range.slice();\n return copy;\n }\n /** Adds a value to the document. */\n add(value) {\n if (assertCollection(this.contents))\n this.contents.add(value);\n }\n /** Adds a value to the document. */\n addIn(path, value) {\n if (assertCollection(this.contents))\n this.contents.addIn(path, value);\n }\n /**\n * Create a new `Alias` node, ensuring that the target `node` has the required anchor.\n *\n * If `node` already has an anchor, `name` is ignored.\n * Otherwise, the `node.anchor` value will be set to `name`,\n * or if an anchor with that name is already present in the document,\n * `name` will be used as a prefix for a new unique anchor.\n * If `name` is undefined, the generated anchor will use 'a' as a prefix.\n */\n createAlias(node, name) {\n if (!node.anchor) {\n const prev = anchors.anchorNames(this);\n node.anchor =\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n !name || prev.has(name) ? anchors.findNewAnchor(name || 'a', prev) : name;\n }\n return new Alias.Alias(node.anchor);\n }\n createNode(value, replacer, options) {\n let _replacer = undefined;\n if (typeof replacer === 'function') {\n value = replacer.call({ '': value }, '', value);\n _replacer = replacer;\n }\n else if (Array.isArray(replacer)) {\n const keyToStr = (v) => typeof v === 'number' || v instanceof String || v instanceof Number;\n const asStr = replacer.filter(keyToStr).map(String);\n if (asStr.length > 0)\n replacer = replacer.concat(asStr);\n _replacer = replacer;\n }\n else if (options === undefined && replacer) {\n options = replacer;\n replacer = undefined;\n }\n const { aliasDuplicateObjects, anchorPrefix, flow, keepUndefined, onTagObj, tag } = options ?? {};\n const { onAnchor, setAnchors, sourceObjects } = anchors.createNodeAnchors(this, \n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n anchorPrefix || 'a');\n const ctx = {\n aliasDuplicateObjects: aliasDuplicateObjects ?? true,\n keepUndefined: keepUndefined ?? false,\n onAnchor,\n onTagObj,\n replacer: _replacer,\n schema: this.schema,\n sourceObjects\n };\n const node = createNode.createNode(value, tag, ctx);\n if (flow && identity.isCollection(node))\n node.flow = true;\n setAnchors();\n return node;\n }\n /**\n * Convert a key and a value into a `Pair` using the current schema,\n * recursively wrapping all values as `Scalar` or `Collection` nodes.\n */\n createPair(key, value, options = {}) {\n const k = this.createNode(key, null, options);\n const v = this.createNode(value, null, options);\n return new Pair.Pair(k, v);\n }\n /**\n * Removes a value from the document.\n * @returns `true` if the item was found and removed.\n */\n delete(key) {\n return assertCollection(this.contents) ? this.contents.delete(key) : false;\n }\n /**\n * Removes a value from the document.\n * @returns `true` if the item was found and removed.\n */\n deleteIn(path) {\n if (Collection.isEmptyPath(path)) {\n if (this.contents == null)\n return false;\n // @ts-expect-error Presumed impossible if Strict extends false\n this.contents = null;\n return true;\n }\n return assertCollection(this.contents)\n ? this.contents.deleteIn(path)\n : false;\n }\n /**\n * Returns item at `key`, or `undefined` if not found. By default unwraps\n * scalar values from their surrounding node; to disable set `keepScalar` to\n * `true` (collections are always returned intact).\n */\n get(key, keepScalar) {\n return identity.isCollection(this.contents)\n ? this.contents.get(key, keepScalar)\n : undefined;\n }\n /**\n * Returns item at `path`, or `undefined` if not found. By default unwraps\n * scalar values from their surrounding node; to disable set `keepScalar` to\n * `true` (collections are always returned intact).\n */\n getIn(path, keepScalar) {\n if (Collection.isEmptyPath(path))\n return !keepScalar && identity.isScalar(this.contents)\n ? this.contents.value\n : this.contents;\n return identity.isCollection(this.contents)\n ? this.contents.getIn(path, keepScalar)\n : undefined;\n }\n /**\n * Checks if the document includes a value with the key `key`.\n */\n has(key) {\n return identity.isCollection(this.contents) ? this.contents.has(key) : false;\n }\n /**\n * Checks if the document includes a value at `path`.\n */\n hasIn(path) {\n if (Collection.isEmptyPath(path))\n return this.contents !== undefined;\n return identity.isCollection(this.contents) ? this.contents.hasIn(path) : false;\n }\n /**\n * Sets a value in this document. For `!!set`, `value` needs to be a\n * boolean to add/remove the item from the set.\n */\n set(key, value) {\n if (this.contents == null) {\n // @ts-expect-error We can't really know that this matches Contents.\n this.contents = Collection.collectionFromPath(this.schema, [key], value);\n }\n else if (assertCollection(this.contents)) {\n this.contents.set(key, value);\n }\n }\n /**\n * Sets a value in this document. For `!!set`, `value` needs to be a\n * boolean to add/remove the item from the set.\n */\n setIn(path, value) {\n if (Collection.isEmptyPath(path)) {\n // @ts-expect-error We can't really know that this matches Contents.\n this.contents = value;\n }\n else if (this.contents == null) {\n // @ts-expect-error We can't really know that this matches Contents.\n this.contents = Collection.collectionFromPath(this.schema, Array.from(path), value);\n }\n else if (assertCollection(this.contents)) {\n this.contents.setIn(path, value);\n }\n }\n /**\n * Change the YAML version and schema used by the document.\n * A `null` version disables support for directives, explicit tags, anchors, and aliases.\n * It also requires the `schema` option to be given as a `Schema` instance value.\n *\n * Overrides all previously set schema options.\n */\n setSchema(version, options = {}) {\n if (typeof version === 'number')\n version = String(version);\n let opt;\n switch (version) {\n case '1.1':\n if (this.directives)\n this.directives.yaml.version = '1.1';\n else\n this.directives = new directives.Directives({ version: '1.1' });\n opt = { resolveKnownTags: false, schema: 'yaml-1.1' };\n break;\n case '1.2':\n case 'next':\n if (this.directives)\n this.directives.yaml.version = version;\n else\n this.directives = new directives.Directives({ version });\n opt = { resolveKnownTags: true, schema: 'core' };\n break;\n case null:\n if (this.directives)\n delete this.directives;\n opt = null;\n break;\n default: {\n const sv = JSON.stringify(version);\n throw new Error(`Expected '1.1', '1.2' or null as first argument, but found: ${sv}`);\n }\n }\n // Not using `instanceof Schema` to allow for duck typing\n if (options.schema instanceof Object)\n this.schema = options.schema;\n else if (opt)\n this.schema = new Schema.Schema(Object.assign(opt, options));\n else\n throw new Error(`With a null YAML version, the { schema: Schema } option is required`);\n }\n // json & jsonArg are only used from toJSON()\n toJS({ json, jsonArg, mapAsMap, maxAliasCount, onAnchor, reviver } = {}) {\n const ctx = {\n anchors: new Map(),\n doc: this,\n keep: !json,\n mapAsMap: mapAsMap === true,\n mapKeyWarned: false,\n maxAliasCount: typeof maxAliasCount === 'number' ? maxAliasCount : 100\n };\n const res = toJS.toJS(this.contents, jsonArg ?? '', ctx);\n if (typeof onAnchor === 'function')\n for (const { count, res } of ctx.anchors.values())\n onAnchor(res, count);\n return typeof reviver === 'function'\n ? applyReviver.applyReviver(reviver, { '': res }, '', res)\n : res;\n }\n /**\n * A JSON representation of the document `contents`.\n *\n * @param jsonArg Used by `JSON.stringify` to indicate the array index or\n * property name.\n */\n toJSON(jsonArg, onAnchor) {\n return this.toJS({ json: true, jsonArg, mapAsMap: false, onAnchor });\n }\n /** A YAML representation of the document. */\n toString(options = {}) {\n if (this.errors.length > 0)\n throw new Error('Document with errors cannot be stringified');\n if ('indent' in options &&\n (!Number.isInteger(options.indent) || Number(options.indent) <= 0)) {\n const s = JSON.stringify(options.indent);\n throw new Error(`\"indent\" option must be a positive integer, not ${s}`);\n }\n return stringifyDocument.stringifyDocument(this, options);\n }\n}\nfunction assertCollection(contents) {\n if (identity.isCollection(contents))\n return true;\n throw new Error('Expected a YAML collection as document contents');\n}\n\nexports.Document = Document;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTgzLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFlBQVksbUJBQU8sQ0FBQyxJQUFtQjtBQUN2QyxpQkFBaUIsbUJBQU8sQ0FBQyxJQUF3QjtBQUNqRCxlQUFlLG1CQUFPLENBQUMsSUFBc0I7QUFDN0MsV0FBVyxtQkFBTyxDQUFDLElBQWtCO0FBQ3JDLFdBQVcsbUJBQU8sQ0FBQyxJQUFrQjtBQUNyQyxhQUFhLG1CQUFPLENBQUMsSUFBcUI7QUFDMUMsd0JBQXdCLG1CQUFPLENBQUMsSUFBbUM7QUFDbkUsY0FBYyxtQkFBTyxDQUFDLElBQWM7QUFDcEMsbUJBQW1CLG1CQUFPLENBQUMsSUFBbUI7QUFDOUMsaUJBQWlCLG1CQUFPLENBQUMsSUFBaUI7QUFDMUMsaUJBQWlCLG1CQUFPLENBQUMsSUFBaUI7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMERBQTBELHFCQUFxQjtBQUMvRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsY0FBYyxVQUFVO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBEQUEwRCxTQUFTO0FBQ25FO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQztBQUNwQyxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUM7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0NBQW9DLFdBQVc7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsMEVBQTBFO0FBQzFGLGdCQUFnQixzQ0FBc0M7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrREFBa0Q7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0RBQWtEO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUM7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtFQUFrRSxnQkFBZ0I7QUFDbEYsd0JBQXdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtFQUFrRSxTQUFTO0FBQzNFLHdCQUF3QjtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0ZBQStGLEdBQUc7QUFDbEc7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZEQUE2RCxpQkFBaUI7QUFDOUU7QUFDQTtBQUNBLFdBQVcsNERBQTRELElBQUk7QUFDM0U7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUIsYUFBYTtBQUN0QztBQUNBO0FBQ0EsbURBQW1ELFNBQVM7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCLGdEQUFnRDtBQUMzRTtBQUNBO0FBQ0EseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrRUFBK0UsRUFBRTtBQUNqRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsZ0JBQWdCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vb2JzaWRpYW4tbWluZG1hcC1uZXh0Z2VuLy4vbm9kZV9tb2R1bGVzLy5wbnBtL3lhbWxAMi44LjAvbm9kZV9tb2R1bGVzL3lhbWwvZGlzdC9kb2MvRG9jdW1lbnQuanM/NGUxNSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBBbGlhcyA9IHJlcXVpcmUoJy4uL25vZGVzL0FsaWFzLmpzJyk7XG52YXIgQ29sbGVjdGlvbiA9IHJlcXVpcmUoJy4uL25vZGVzL0NvbGxlY3Rpb24uanMnKTtcbnZhciBpZGVudGl0eSA9IHJlcXVpcmUoJy4uL25vZGVzL2lkZW50aXR5LmpzJyk7XG52YXIgUGFpciA9IHJlcXVpcmUoJy4uL25vZGVzL1BhaXIuanMnKTtcbnZhciB0b0pTID0gcmVxdWlyZSgnLi4vbm9kZXMvdG9KUy5qcycpO1xudmFyIFNjaGVtYSA9IHJlcXVpcmUoJy4uL3NjaGVtYS9TY2hlbWEuanMnKTtcbnZhciBzdHJpbmdpZnlEb2N1bWVudCA9IHJlcXVpcmUoJy4uL3N0cmluZ2lmeS9zdHJpbmdpZnlEb2N1bWVudC5qcycpO1xudmFyIGFuY2hvcnMgPSByZXF1aXJlKCcuL2FuY2hvcnMuanMnKTtcbnZhciBhcHBseVJldml2ZXIgPSByZXF1aXJlKCcuL2FwcGx5UmV2aXZlci5qcycpO1xudmFyIGNyZWF0ZU5vZGUgPSByZXF1aXJlKCcuL2NyZWF0ZU5vZGUuanMnKTtcbnZhciBkaXJlY3RpdmVzID0gcmVxdWlyZSgnLi9kaXJlY3RpdmVzLmpzJyk7XG5cbmNsYXNzIERvY3VtZW50IHtcbiAgICBjb25zdHJ1Y3Rvcih2YWx1ZSwgcmVwbGFjZXIsIG9wdGlvbnMpIHtcbiAgICAgICAgLyoqIEEgY29tbWVudCBiZWZvcmUgdGhpcyBEb2N1bWVudCAqL1xuICAgICAgICB0aGlzLmNvbW1lbnRCZWZvcmUgPSBudWxsO1xuICAgICAgICAvKiogQSBjb21tZW50IGltbWVkaWF0ZWx5IGFmdGVyIHRoaXMgRG9jdW1lbnQgKi9cbiAgICAgICAgdGhpcy5jb21tZW50ID0gbnVsbDtcbiAgICAgICAgLyoqIEVycm9ycyBlbmNvdW50ZXJlZCBkdXJpbmcgcGFyc2luZy4gKi9cbiAgICAgICAgdGhpcy5lcnJvcnMgPSBbXTtcbiAgICAgICAgLyoqIFdhcm5pbmdzIGVuY291bnRlcmVkIGR1cmluZyBwYXJzaW5nLiAqL1xuICAgICAgICB0aGlzLndhcm5pbmdzID0gW107XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBpZGVudGl0eS5OT0RFX1RZUEUsIHsgdmFsdWU6IGlkZW50aXR5LkRPQyB9KTtcbiAgICAgICAgbGV0IF9yZXBsYWNlciA9IG51bGw7XG4gICAgICAgIGlmICh0eXBlb2YgcmVwbGFjZXIgPT09ICdmdW5jdGlvbicgfHwgQXJyYXkuaXNBcnJheShyZXBsYWNlcikpIHtcbiAgICAgICAgICAgIF9yZXBsYWNlciA9IHJlcGxhY2VyO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG9wdGlvbnMgPT09IHVuZGVmaW5lZCAmJiByZXBsYWNlcikge1xuICAgICAgICAgICAgb3B0aW9ucyA9IHJlcGxhY2VyO1xuICAgICAgICAgICAgcmVwbGFjZXIgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb3B0ID0gT2JqZWN0LmFzc2lnbih7XG4gICAgICAgICAgICBpbnRBc0JpZ0ludDogZmFsc2UsXG4gICAgICAgICAgICBrZWVwU291cmNlVG9rZW5zOiBmYWxzZSxcbiAgICAgICAgICAgIGxvZ0xldmVsOiAnd2FybicsXG4gICAgICAgICAgICBwcmV0dHlFcnJvcnM6IHRydWUsXG4gICAgICAgICAgICBzdHJpY3Q6IHRydWUsXG4gICAgICAgICAgICBzdHJpbmdLZXlzOiBmYWxzZSxcbiAgICAgICAgICAgIHVuaXF1ZUtleXM6IHRydWUsXG4gICAgICAgICAgICB2ZXJzaW9uOiAnMS4yJ1xuICAgICAgICB9LCBvcHRpb25zKTtcbiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0O1xuICAgICAgICBsZXQgeyB2ZXJzaW9uIH0gPSBvcHQ7XG4gICAgICAgIGlmIChvcHRpb25zPy5fZGlyZWN0aXZlcykge1xuICAgICAgICAgICAgdGhpcy5kaXJlY3RpdmVzID0gb3B0aW9ucy5fZGlyZWN0aXZlcy5hdERvY3VtZW50KCk7XG4gICAgICAgICAgICBpZiAodGhpcy5kaXJlY3RpdmVzLnlhbWwuZXhwbGljaXQpXG4gICAgICAgICAgICAgICAgdmVyc2lvbiA9IHRoaXMuZGlyZWN0aXZlcy55YW1sLnZlcnNpb247XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpcy5kaXJlY3RpdmVzID0gbmV3IGRpcmVjdGl2ZXMuRGlyZWN0aXZlcyh7IHZlcnNpb24gfSk7XG4gICAgICAgIHRoaXMuc2V0U2NoZW1hKHZlcnNpb24sIG9wdGlvbnMpO1xuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIFdlIGNhbid0IHJlYWxseSBrbm93IHRoYXQgdGhpcyBtYXRjaGVzIENvbnRlbnRzLlxuICAgICAgICB0aGlzLmNvbnRlbnRzID1cbiAgICAgICAgICAgIHZhbHVlID09PSB1bmRlZmluZWQgPyBudWxsIDogdGhpcy5jcmVhdGVOb2RlKHZhbHVlLCBfcmVwbGFjZXIsIG9wdGlvbnMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYSBkZWVwIGNvcHkgb2YgdGhpcyBEb2N1bWVudCBhbmQgaXRzIGNvbnRlbnRzLlxuICAgICAqXG4gICAgICogQ3VzdG9tIE5vZGUgdmFsdWVzIHRoYXQgaW5oZXJpdCBmcm9tIGBPYmplY3RgIHN0aWxsIHJlZmVyIHRvIHRoZWlyIG9yaWdpbmFsIGluc3RhbmNlcy5cbiAgICAgKi9cbiAgICBjbG9uZSgpIHtcbiAgICAgICAgY29uc3QgY29weSA9IE9iamVjdC5jcmVhdGUoRG9jdW1lbnQucHJvdG90eXBlLCB7XG4gICAgICAgICAgICBbaWRlbnRpdHkuTk9ERV9UWVBFXTogeyB2YWx1ZTogaWRlbnRpdHkuRE9DIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGNvcHkuY29tbWVudEJlZm9yZSA9IHRoaXMuY29tbWVudEJlZm9yZTtcbiAgICAgICAgY29weS5jb21tZW50ID0gdGhpcy5jb21tZW50O1xuICAgICAgICBjb3B5LmVycm9ycyA9IHRoaXMuZXJyb3JzLnNsaWNlKCk7XG4gICAgICAgIGNvcHkud2FybmluZ3MgPSB0aGlzLndhcm5pbmdzLnNsaWNlKCk7XG4gICAgICAgIGNvcHkub3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMub3B0aW9ucyk7XG4gICAgICAgIGlmICh0aGlzLmRpcmVjdGl2ZXMpXG4gICAgICAgICAgICBjb3B5LmRpcmVjdGl2ZXMgPSB0aGlzLmRpcmVjdGl2ZXMuY2xvbmUoKTtcbiAgICAgICAgY29weS5zY2hlbWEgPSB0aGlzLnNjaGVtYS5jbG9uZSgpO1xuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIFdlIGNhbid0IHJlYWxseSBrbm93IHRoYXQgdGhpcyBtYXRjaGVzIENvbnRlbnRzLlxuICAgICAgICBjb3B5LmNvbnRlbnRzID0gaWRlbnRpdHkuaXNOb2RlKHRoaXMuY29udGVudHMpXG4gICAgICAgICAgICA/IHRoaXMuY29udGVudHMuY2xvbmUoY29weS5zY2hlbWEpXG4gICAgICAgICAgICA6IHRoaXMuY29udGVudHM7XG4gICAgICAgIGlmICh0aGlzLnJhbmdlKVxuICAgICAgICAgICAgY29weS5yYW5nZSA9IHRoaXMucmFuZ2Uuc2xpY2UoKTtcbiAgICAgICAgcmV0dXJuIGNvcHk7XG4gICAgfVxuICAgIC8qKiBBZGRzIGEgdmFsdWUgdG8gdGhlIGRvY3VtZW50LiAqL1xuICAgIGFkZCh2YWx1ZSkge1xuICAgICAgICBpZiAoYXNzZXJ0Q29sbGVjdGlvbih0aGlzLmNvbnRlbnRzKSlcbiAgICAgICAgICAgIHRoaXMuY29udGVudHMuYWRkKHZhbHVlKTtcbiAgICB9XG4gICAgLyoqIEFkZHMgYSB2YWx1ZSB0byB0aGUgZG9jdW1lbnQuICovXG4gICAgYWRkSW4ocGF0aCwgdmFsdWUpIHtcbiAgICAgICAgaWYgKGFzc2VydENvbGxlY3Rpb24odGhpcy5jb250ZW50cykpXG4gICAgICAgICAgICB0aGlzLmNvbnRlbnRzLmFkZEluKHBhdGgsIHZhbHVlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGEgbmV3IGBBbGlhc2Agbm9kZSwgZW5zdXJpbmcgdGhhdCB0aGUgdGFyZ2V0IGBub2RlYCBoYXMgdGhlIHJlcXVpcmVkIGFuY2hvci5cbiAgICAgKlxuICAgICAqIElmIGBub2RlYCBhbHJlYWR5IGhhcyBhbiBhbmNob3IsIGBuYW1lYCBpcyBpZ25vcmVkLlxuICAgICAqIE90aGVyd2lzZSwgdGhlIGBub2RlLmFuY2hvcmAgdmFsdWUgd2lsbCBiZSBzZXQgdG8gYG5hbWVgLFxuICAgICAqIG9yIGlmIGFuIGFuY2hvciB3aXRoIHRoYXQgbmFtZSBpcyBhbHJlYWR5IHByZXNlbnQgaW4gdGhlIGRvY3VtZW50LFxuICAgICAqIGBuYW1lYCB3aWxsIGJlIHVzZWQgYXMgYSBwcmVmaXggZm9yIGEgbmV3IHVuaXF1ZSBhbmNob3IuXG4gICAgICogSWYgYG5hbWVgIGlzIHVuZGVmaW5lZCwgdGhlIGdlbmVyYXRlZCBhbmNob3Igd2lsbCB1c2UgJ2EnIGFzIGEgcHJlZml4LlxuICAgICAqL1xuICAgIGNyZWF0ZUFsaWFzKG5vZGUsIG5hbWUpIHtcbiAgICAgICAgaWYgKCFub2RlLmFuY2hvcikge1xuICAgICAgICAgICAgY29uc3QgcHJldiA9IGFuY2hvcnMuYW5jaG9yTmFtZXModGhpcyk7XG4gICAgICAgICAgICBub2RlLmFuY2hvciA9XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9wcmVmZXItbnVsbGlzaC1jb2FsZXNjaW5nXG4gICAgICAgICAgICAgICAgIW5hbWUgfHwgcHJldi5oYXMobmFtZSkgPyBhbmNob3JzLmZpbmROZXdBbmNob3IobmFtZSB8fCAnYScsIHByZXYpIDogbmFtZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IEFsaWFzLkFsaWFzKG5vZGUuYW5jaG9yKTtcbiAgICB9XG4gICAgY3JlYXRlTm9kZSh2YWx1ZSwgcmVwbGFjZXIsIG9wdGlvbnMpIHtcbiAgICAgICAgbGV0IF9yZXBsYWNlciA9IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKHR5cGVvZiByZXBsYWNlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdmFsdWUgPSByZXBsYWNlci5jYWxsKHsgJyc6IHZhbHVlIH0sICcnLCB2YWx1ZSk7XG4gICAgICAgICAgICBfcmVwbGFjZXIgPSByZXBsYWNlcjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KHJlcGxhY2VyKSkge1xuICAgICAgICAgICAgY29uc3Qga2V5VG9TdHIgPSAodikgPT4gdHlwZW9mIHYgPT09ICdudW1iZXInIHx8IHYgaW5zdGFuY2VvZiBTdHJpbmcgfHwgdiBpbnN0YW5jZW9mIE51bWJlcjtcbiAgICAgICAgICAgIGNvbnN0IGFzU3RyID0gcmVwbGFjZXIuZmlsdGVyKGtleVRvU3RyKS5tYXAoU3RyaW5nKTtcbiAgICAgICAgICAgIGlmIChhc1N0ci5sZW5ndGggPiAwKVxuICAgICAgICAgICAgICAgIHJlcGxhY2VyID0gcmVwbGFjZXIuY29uY2F0KGFzU3RyKTtcbiAgICAgICAgICAgIF9yZXBsYWNlciA9IHJlcGxhY2VyO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG9wdGlvbnMgPT09IHVuZGVmaW5lZCAmJiByZXBsYWNlcikge1xuICAgICAgICAgICAgb3B0aW9ucyA9IHJlcGxhY2VyO1xuICAgICAgICAgICAgcmVwbGFjZXIgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyBhbGlhc0R1cGxpY2F0ZU9iamVjdHMsIGFuY2hvclByZWZpeCwgZmxvdywga2VlcFVuZGVmaW5lZCwgb25UYWdPYmosIHRhZyB9ID0gb3B0aW9ucyA/PyB7fTtcbiAgICAgICAgY29uc3QgeyBvbkFuY2hvciwgc2V0QW5jaG9ycywgc291cmNlT2JqZWN0cyB9ID0gYW5jaG9ycy5jcmVhdGVOb2RlQW5jaG9ycyh0aGlzLCBcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9wcmVmZXItbnVsbGlzaC1jb2FsZXNjaW5nXG4gICAgICAgIGFuY2hvclByZWZpeCB8fCAnYScpO1xuICAgICAgICBjb25zdCBjdHggPSB7XG4gICAgICAgICAgICBhbGlhc0R1cGxpY2F0ZU9iamVjdHM6IGFsaWFzRHVwbGljYXRlT2JqZWN0cyA/PyB0cnVlLFxuICAgICAgICAgICAga2VlcFVuZGVmaW5lZDoga2VlcFVuZGVmaW5lZCA/PyBmYWxzZSxcbiAgICAgICAgICAgIG9uQW5jaG9yLFxuICAgICAgICAgICAgb25UYWdPYmosXG4gICAgICAgICAgICByZXBsYWNlcjogX3JlcGxhY2VyLFxuICAgICAgICAgICAgc2NoZW1hOiB0aGlzLnNjaGVtYSxcbiAgICAgICAgICAgIHNvdXJjZU9iamVjdHNcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3Qgbm9kZSA9IGNyZWF0ZU5vZGUuY3JlYXRlTm9kZSh2YWx1ZSwgdGFnLCBjdHgpO1xuICAgICAgICBpZiAoZmxvdyAmJiBpZGVudGl0eS5pc0NvbGxlY3Rpb24obm9kZSkpXG4gICAgICAgICAgICBub2RlLmZsb3cgPSB0cnVlO1xuICAgICAgICBzZXRBbmNob3JzKCk7XG4gICAgICAgIHJldHVybiBub2RlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0IGEga2V5IGFuZCBhIHZhbHVlIGludG8gYSBgUGFpcmAgdXNpbmcgdGhlIGN1cnJlbnQgc2NoZW1hLFxuICAgICAqIHJlY3Vyc2l2ZWx5IHdyYXBwaW5nIGFsbCB2YWx1ZXMgYXMgYFNjYWxhcmAgb3IgYENvbGxlY3Rpb25gIG5vZGVzLlxuICAgICAqL1xuICAgIGNyZWF0ZVBhaXIoa2V5LCB2YWx1ZSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IGsgPSB0aGlzLmNyZWF0ZU5vZGUoa2V5LCBudWxsLCBvcHRpb25zKTtcbiAgICAgICAgY29uc3QgdiA9IHRoaXMuY3JlYXRlTm9kZSh2YWx1ZSwgbnVsbCwgb3B0aW9ucyk7XG4gICAgICAgIHJldHVybiBuZXcgUGFpci5QYWlyKGssIHYpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIGEgdmFsdWUgZnJvbSB0aGUgZG9jdW1lbnQuXG4gICAgICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBpdGVtIHdhcyBmb3VuZCBhbmQgcmVtb3ZlZC5cbiAgICAgKi9cbiAgICBkZWxldGUoa2V5KSB7XG4gICAgICAgIHJldHVybiBhc3NlcnRDb2xsZWN0aW9uKHRoaXMuY29udGVudHMpID8gdGhpcy5jb250ZW50cy5kZWxldGUoa2V5KSA6IGZhbHNlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIGEgdmFsdWUgZnJvbSB0aGUgZG9jdW1lbnQuXG4gICAgICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBpdGVtIHdhcyBmb3VuZCBhbmQgcmVtb3ZlZC5cbiAgICAgKi9cbiAgICBkZWxldGVJbihwYXRoKSB7XG4gICAgICAgIGlmIChDb2xsZWN0aW9uLmlzRW1wdHlQYXRoKHBhdGgpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5jb250ZW50cyA9PSBudWxsKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgUHJlc3VtZWQgaW1wb3NzaWJsZSBpZiBTdHJpY3QgZXh0ZW5kcyBmYWxzZVxuICAgICAgICAgICAgdGhpcy5jb250ZW50cyA9IG51bGw7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXNzZXJ0Q29sbGVjdGlvbih0aGlzLmNvbnRlbnRzKVxuICAgICAgICAgICAgPyB0aGlzLmNvbnRlbnRzLmRlbGV0ZUluKHBhdGgpXG4gICAgICAgICAgICA6IGZhbHNlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGl0ZW0gYXQgYGtleWAsIG9yIGB1bmRlZmluZWRgIGlmIG5vdCBmb3VuZC4gQnkgZGVmYXVsdCB1bndyYXBzXG4gICAgICogc2NhbGFyIHZhbHVlcyBmcm9tIHRoZWlyIHN1cnJvdW5kaW5nIG5vZGU7IHRvIGRpc2FibGUgc2V0IGBrZWVwU2NhbGFyYCB0b1xuICAgICAqIGB0cnVlYCAoY29sbGVjdGlvbnMgYXJlIGFsd2F5cyByZXR1cm5lZCBpbnRhY3QpLlxuICAgICAqL1xuICAgIGdldChrZXksIGtlZXBTY2FsYXIpIHtcbiAgICAgICAgcmV0dXJuIGlkZW50aXR5LmlzQ29sbGVjdGlvbih0aGlzLmNvbnRlbnRzKVxuICAgICAgICAgICAgPyB0aGlzLmNvbnRlbnRzLmdldChrZXksIGtlZXBTY2FsYXIpXG4gICAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBpdGVtIGF0IGBwYXRoYCwgb3IgYHVuZGVmaW5lZGAgaWYgbm90IGZvdW5kLiBCeSBkZWZhdWx0IHVud3JhcHNcbiAgICAgKiBzY2FsYXIgdmFsdWVzIGZyb20gdGhlaXIgc3Vycm91bmRpbmcgbm9kZTsgdG8gZGlzYWJsZSBzZXQgYGtlZXBTY2FsYXJgIHRvXG4gICAgICogYHRydWVgIChjb2xsZWN0aW9ucyBhcmUgYWx3YXlzIHJldHVybmVkIGludGFjdCkuXG4gICAgICovXG4gICAgZ2V0SW4ocGF0aCwga2VlcFNjYWxhcikge1xuICAgICAgICBpZiAoQ29sbGVjdGlvbi5pc0VtcHR5UGF0aChwYXRoKSlcbiAgICAgICAgICAgIHJldHVybiAha2VlcFNjYWxhciAmJiBpZGVudGl0eS5pc1NjYWxhcih0aGlzLmNvbnRlbnRzKVxuICAgICAgICAgICAgICAgID8gdGhpcy5jb250ZW50cy52YWx1ZVxuICAgICAgICAgICAgICAgIDogdGhpcy5jb250ZW50cztcbiAgICAgICAgcmV0dXJuIGlkZW50aXR5LmlzQ29sbGVjdGlvbih0aGlzLmNvbnRlbnRzKVxuICAgICAgICAgICAgPyB0aGlzLmNvbnRlbnRzLmdldEluKHBhdGgsIGtlZXBTY2FsYXIpXG4gICAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIHRoZSBkb2N1bWVudCBpbmNsdWRlcyBhIHZhbHVlIHdpdGggdGhlIGtleSBga2V5YC5cbiAgICAgKi9cbiAgICBoYXMoa2V5KSB7XG4gICAgICAgIHJldHVybiBpZGVudGl0eS5pc0NvbGxlY3Rpb24odGhpcy5jb250ZW50cykgPyB0aGlzLmNvbnRlbnRzLmhhcyhrZXkpIDogZmFsc2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiB0aGUgZG9jdW1lbnQgaW5jbHVkZXMgYSB2YWx1ZSBhdCBgcGF0aGAuXG4gICAgICovXG4gICAgaGFzSW4ocGF0aCkge1xuICAgICAgICBpZiAoQ29sbGVjdGlvbi5pc0VtcHR5UGF0aChwYXRoKSlcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnRlbnRzICE9PSB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiBpZGVudGl0eS5pc0NvbGxlY3Rpb24odGhpcy5jb250ZW50cykgPyB0aGlzLmNvbnRlbnRzLmhhc0luKHBhdGgpIDogZmFsc2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNldHMgYSB2YWx1ZSBpbiB0aGlzIGRvY3VtZW50LiBGb3IgYCEhc2V0YCwgYHZhbHVlYCBuZWVkcyB0byBiZSBhXG4gICAgICogYm9vbGVhbiB0byBhZGQvcmVtb3ZlIHRoZSBpdGVtIGZyb20gdGhlIHNldC5cbiAgICAgKi9cbiAgICBzZXQoa2V5LCB2YWx1ZSkge1xuICAgICAgICBpZiAodGhpcy5jb250ZW50cyA9PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIFdlIGNhbid0IHJlYWxseSBrbm93IHRoYXQgdGhpcyBtYXRjaGVzIENvbnRlbnRzLlxuICAgICAgICAgICAgdGhpcy5jb250ZW50cyA9IENvbGxlY3Rpb24uY29sbGVjdGlvbkZyb21QYXRoKHRoaXMuc2NoZW1hLCBba2V5XSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGFzc2VydENvbGxlY3Rpb24odGhpcy5jb250ZW50cykpIHtcbiAgICAgICAgICAgIHRoaXMuY29udGVudHMuc2V0KGtleSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNldHMgYSB2YWx1ZSBpbiB0aGlzIGRvY3VtZW50LiBGb3IgYCEhc2V0YCwgYHZhbHVlYCBuZWVkcyB0byBiZSBhXG4gICAgICogYm9vbGVhbiB0byBhZGQvcmVtb3ZlIHRoZSBpdGVtIGZyb20gdGhlIHNldC5cbiAgICAgKi9cbiAgICBzZXRJbihwYXRoLCB2YWx1ZSkge1xuICAgICAgICBpZiAoQ29sbGVjdGlvbi5pc0VtcHR5UGF0aChwYXRoKSkge1xuICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBXZSBjYW4ndCByZWFsbHkga25vdyB0aGF0IHRoaXMgbWF0Y2hlcyBDb250ZW50cy5cbiAgICAgICAgICAgIHRoaXMuY29udGVudHMgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLmNvbnRlbnRzID09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgV2UgY2FuJ3QgcmVhbGx5IGtub3cgdGhhdCB0aGlzIG1hdGNoZXMgQ29udGVudHMuXG4gICAgICAgICAgICB0aGlzLmNvbnRlbnRzID0gQ29sbGVjdGlvbi5jb2xsZWN0aW9uRnJvbVBhdGgodGhpcy5zY2hlbWEsIEFycmF5LmZyb20ocGF0aCksIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChhc3NlcnRDb2xsZWN0aW9uKHRoaXMuY29udGVudHMpKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRlbnRzLnNldEluKHBhdGgsIHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBDaGFuZ2UgdGhlIFlBTUwgdmVyc2lvbiBhbmQgc2NoZW1hIHVzZWQgYnkgdGhlIGRvY3VtZW50LlxuICAgICAqIEEgYG51bGxgIHZlcnNpb24gZGlzYWJsZXMgc3VwcG9ydCBmb3IgZGlyZWN0aXZlcywgZXhwbGljaXQgdGFncywgYW5jaG9ycywgYW5kIGFsaWFzZXMuXG4gICAgICogSXQgYWxzbyByZXF1aXJlcyB0aGUgYHNjaGVtYWAgb3B0aW9uIHRvIGJlIGdpdmVuIGFzIGEgYFNjaGVtYWAgaW5zdGFuY2UgdmFsdWUuXG4gICAgICpcbiAgICAgKiBPdmVycmlkZXMgYWxsIHByZXZpb3VzbHkgc2V0IHNjaGVtYSBvcHRpb25zLlxuICAgICAqL1xuICAgIHNldFNjaGVtYSh2ZXJzaW9uLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgaWYgKHR5cGVvZiB2ZXJzaW9uID09PSAnbnVtYmVyJylcbiAgICAgICAgICAgIHZlcnNpb24gPSBTdHJpbmcodmVyc2lvbik7XG4gICAgICAgIGxldCBvcHQ7XG4gICAgICAgIHN3aXRjaCAodmVyc2lvbikge1xuICAgICAgICAgICAgY2FzZSAnMS4xJzpcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kaXJlY3RpdmVzKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpcmVjdGl2ZXMueWFtbC52ZXJzaW9uID0gJzEuMSc7XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpcmVjdGl2ZXMgPSBuZXcgZGlyZWN0aXZlcy5EaXJlY3RpdmVzKHsgdmVyc2lvbjogJzEuMScgfSk7XG4gICAgICAgICAgICAgICAgb3B0ID0geyByZXNvbHZlS25vd25UYWdzOiBmYWxzZSwgc2NoZW1hOiAneWFtbC0xLjEnIH07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICcxLjInOlxuICAgICAgICAgICAgY2FzZSAnbmV4dCc6XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZGlyZWN0aXZlcylcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaXJlY3RpdmVzLnlhbWwudmVyc2lvbiA9IHZlcnNpb247XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpcmVjdGl2ZXMgPSBuZXcgZGlyZWN0aXZlcy5EaXJlY3RpdmVzKHsgdmVyc2lvbiB9KTtcbiAgICAgICAgICAgICAgICBvcHQgPSB7IHJlc29sdmVLbm93blRhZ3M6IHRydWUsIHNjaGVtYTogJ2NvcmUnIH07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIG51bGw6XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZGlyZWN0aXZlcylcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuZGlyZWN0aXZlcztcbiAgICAgICAgICAgICAgICBvcHQgPSBudWxsO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgICAgIGNvbnN0IHN2ID0gSlNPTi5zdHJpbmdpZnkodmVyc2lvbik7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCAnMS4xJywgJzEuMicgb3IgbnVsbCBhcyBmaXJzdCBhcmd1bWVudCwgYnV0IGZvdW5kOiAke3N2fWApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIE5vdCB1c2luZyBgaW5zdGFuY2VvZiBTY2hlbWFgIHRvIGFsbG93IGZvciBkdWNrIHR5cGluZ1xuICAgICAgICBpZiAob3B0aW9ucy5zY2hlbWEgaW5zdGFuY2VvZiBPYmplY3QpXG4gICAgICAgICAgICB0aGlzLnNjaGVtYSA9IG9wdGlvbnMuc2NoZW1hO1xuICAgICAgICBlbHNlIGlmIChvcHQpXG4gICAgICAgICAgICB0aGlzLnNjaGVtYSA9IG5ldyBTY2hlbWEuU2NoZW1hKE9iamVjdC5hc3NpZ24ob3B0LCBvcHRpb25zKSk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgV2l0aCBhIG51bGwgWUFNTCB2ZXJzaW9uLCB0aGUgeyBzY2hlbWE6IFNjaGVtYSB9IG9wdGlvbiBpcyByZXF1aXJlZGApO1xuICAgIH1cbiAgICAvLyBqc29uICYganNvbkFyZyBhcmUgb25seSB1c2VkIGZyb20gdG9KU09OKClcbiAgICB0b0pTKHsganNvbiwganNvbkFyZywgbWFwQXNNYXAsIG1heEFsaWFzQ291bnQsIG9uQW5jaG9yLCByZXZpdmVyIH0gPSB7fSkge1xuICAgICAgICBjb25zdCBjdHggPSB7XG4gICAgICAgICAgICBhbmNob3JzOiBuZXcgTWFwKCksXG4gICAgICAgICAgICBkb2M6IHRoaXMsXG4gICAgICAgICAgICBrZWVwOiAhanNvbixcbiAgICAgICAgICAgIG1hcEFzTWFwOiBtYXBBc01hcCA9PT0gdHJ1ZSxcbiAgICAgICAgICAgIG1hcEtleVdhcm5lZDogZmFsc2UsXG4gICAgICAgICAgICBtYXhBbGlhc0NvdW50OiB0eXBlb2YgbWF4QWxpYXNDb3VudCA9PT0gJ251bWJlcicgPyBtYXhBbGlhc0NvdW50IDogMTAwXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHJlcyA9IHRvSlMudG9KUyh0aGlzLmNvbnRlbnRzLCBqc29uQXJnID8/ICcnLCBjdHgpO1xuICAgICAgICBpZiAodHlwZW9mIG9uQW5jaG9yID09PSAnZnVuY3Rpb24nKVxuICAgICAgICAgICAgZm9yIChjb25zdCB7IGNvdW50LCByZXMgfSBvZiBjdHguYW5jaG9ycy52YWx1ZXMoKSlcbiAgICAgICAgICAgICAgICBvbkFuY2hvcihyZXMsIGNvdW50KTtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiByZXZpdmVyID09PSAnZnVuY3Rpb24nXG4gICAgICAgICAgICA/IGFwcGx5UmV2aXZlci5hcHBseVJldml2ZXIocmV2aXZlciwgeyAnJzogcmVzIH0sICcnLCByZXMpXG4gICAgICAgICAgICA6IHJlcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkb2N1bWVudCBgY29udGVudHNgLlxuICAgICAqXG4gICAgICogQHBhcmFtIGpzb25BcmcgVXNlZCBieSBgSlNPTi5zdHJpbmdpZnlgIHRvIGluZGljYXRlIHRoZSBhcnJheSBpbmRleCBvclxuICAgICAqICAgcHJvcGVydHkgbmFtZS5cbiAgICAgKi9cbiAgICB0b0pTT04oanNvbkFyZywgb25BbmNob3IpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudG9KUyh7IGpzb246IHRydWUsIGpzb25BcmcsIG1hcEFzTWFwOiBmYWxzZSwgb25BbmNob3IgfSk7XG4gICAgfVxuICAgIC8qKiBBIFlBTUwgcmVwcmVzZW50YXRpb24gb2YgdGhlIGRvY3VtZW50LiAqL1xuICAgIHRvU3RyaW5nKG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBpZiAodGhpcy5lcnJvcnMubGVuZ3RoID4gMClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRG9jdW1lbnQgd2l0aCBlcnJvcnMgY2Fubm90IGJlIHN0cmluZ2lmaWVkJyk7XG4gICAgICAgIGlmICgnaW5kZW50JyBpbiBvcHRpb25zICYmXG4gICAgICAgICAgICAoIU51bWJlci5pc0ludGVnZXIob3B0aW9ucy5pbmRlbnQpIHx8IE51bWJlcihvcHRpb25zLmluZGVudCkgPD0gMCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHMgPSBKU09OLnN0cmluZ2lmeShvcHRpb25zLmluZGVudCk7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFwiaW5kZW50XCIgb3B0aW9uIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyLCBub3QgJHtzfWApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdHJpbmdpZnlEb2N1bWVudC5zdHJpbmdpZnlEb2N1bWVudCh0aGlzLCBvcHRpb25zKTtcbiAgICB9XG59XG5mdW5jdGlvbiBhc3NlcnRDb2xsZWN0aW9uKGNvbnRlbnRzKSB7XG4gICAgaWYgKGlkZW50aXR5LmlzQ29sbGVjdGlvbihjb250ZW50cykpXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgYSBZQU1MIGNvbGxlY3Rpb24gYXMgZG9jdW1lbnQgY29udGVudHMnKTtcbn1cblxuZXhwb3J0cy5Eb2N1bWVudCA9IERvY3VtZW50O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///983\n")},1008:module=>{"use strict";eval('\n\nvar memo = {};\n\n/* istanbul ignore next */\nfunction getTarget(target) {\n if (typeof memo[target] === "undefined") {\n var styleTarget = document.querySelector(target);\n\n // Special case to return head of iframe instead of iframe itself\n if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {\n try {\n // This will throw an exception if access to iframe is blocked\n // due to cross-origin restrictions\n styleTarget = styleTarget.contentDocument.head;\n } catch (e) {\n // istanbul ignore next\n styleTarget = null;\n }\n }\n memo[target] = styleTarget;\n }\n return memo[target];\n}\n\n/* istanbul ignore next */\nfunction insertBySelector(insert, style) {\n var target = getTarget(insert);\n if (!target) {\n throw new Error("Couldn\'t find a style target. This probably means that the value for the \'insert\' parameter is invalid.");\n }\n target.appendChild(style);\n}\nmodule.exports = insertBySelector;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTAwOC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9vYnNpZGlhbi1taW5kbWFwLW5leHRnZW4vLi9ub2RlX21vZHVsZXMvLnBucG0vc3R5bGUtbG9hZGVyQDQuMC4wX3dlYnBhY2tANS45OS45L25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luc2VydEJ5U2VsZWN0b3IuanM/YzUxOSJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxudmFyIG1lbW8gPSB7fTtcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5mdW5jdGlvbiBnZXRUYXJnZXQodGFyZ2V0KSB7XG4gIGlmICh0eXBlb2YgbWVtb1t0YXJnZXRdID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgdmFyIHN0eWxlVGFyZ2V0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0YXJnZXQpO1xuXG4gICAgLy8gU3BlY2lhbCBjYXNlIHRvIHJldHVybiBoZWFkIG9mIGlmcmFtZSBpbnN0ZWFkIG9mIGlmcmFtZSBpdHNlbGZcbiAgICBpZiAod2luZG93LkhUTUxJRnJhbWVFbGVtZW50ICYmIHN0eWxlVGFyZ2V0IGluc3RhbmNlb2Ygd2luZG93LkhUTUxJRnJhbWVFbGVtZW50KSB7XG4gICAgICB0cnkge1xuICAgICAgICAvLyBUaGlzIHdpbGwgdGhyb3cgYW4gZXhjZXB0aW9uIGlmIGFjY2VzcyB0byBpZnJhbWUgaXMgYmxvY2tlZFxuICAgICAgICAvLyBkdWUgdG8gY3Jvc3Mtb3JpZ2luIHJlc3RyaWN0aW9uc1xuICAgICAgICBzdHlsZVRhcmdldCA9IHN0eWxlVGFyZ2V0LmNvbnRlbnREb2N1bWVudC5oZWFkO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuICAgICAgICBzdHlsZVRhcmdldCA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuICAgIG1lbW9bdGFyZ2V0XSA9IHN0eWxlVGFyZ2V0O1xuICB9XG4gIHJldHVybiBtZW1vW3RhcmdldF07XG59XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICAqL1xuZnVuY3Rpb24gaW5zZXJ0QnlTZWxlY3RvcihpbnNlcnQsIHN0eWxlKSB7XG4gIHZhciB0YXJnZXQgPSBnZXRUYXJnZXQoaW5zZXJ0KTtcbiAgaWYgKCF0YXJnZXQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb3VsZG4ndCBmaW5kIGEgc3R5bGUgdGFyZ2V0LiBUaGlzIHByb2JhYmx5IG1lYW5zIHRoYXQgdGhlIHZhbHVlIGZvciB0aGUgJ2luc2VydCcgcGFyYW1ldGVyIGlzIGludmFsaWQuXCIpO1xuICB9XG4gIHRhcmdldC5hcHBlbmRDaGlsZChzdHlsZSk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IGluc2VydEJ5U2VsZWN0b3I7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1008\n')},1074:module=>{eval("/* eslint-disable no-multi-assign */\n\nfunction deepFreeze(obj) {\n if (obj instanceof Map) {\n obj.clear =\n obj.delete =\n obj.set =\n function () {\n throw new Error('map is read-only');\n };\n } else if (obj instanceof Set) {\n obj.add =\n obj.clear =\n obj.delete =\n function () {\n throw new Error('set is read-only');\n };\n }\n\n // Freeze self\n Object.freeze(obj);\n\n Object.getOwnPropertyNames(obj).forEach((name) => {\n const prop = obj[name];\n const type = typeof prop;\n\n // Freeze prop if it is an object or function and also not already frozen\n if ((type === 'object' || type === 'function') && !Object.isFrozen(prop)) {\n deepFreeze(prop);\n }\n });\n\n return obj;\n}\n\n/** @typedef {import('highlight.js').CallbackResponse} CallbackResponse */\n/** @typedef {import('highlight.js').CompiledMode} CompiledMode */\n/** @implements CallbackResponse */\n\nclass Response {\n /**\n * @param {CompiledMode} mode\n */\n constructor(mode) {\n // eslint-disable-next-line no-undefined\n if (mode.data === undefined) mode.data = {};\n\n this.data = mode.data;\n this.isMatchIgnored = false;\n }\n\n ignoreMatch() {\n this.isMatchIgnored = true;\n }\n}\n\n/**\n * @param {string} value\n * @returns {string}\n */\nfunction escapeHTML(value) {\n return value\n .replace(/&/g, '&')\n .replace(//g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''');\n}\n\n/**\n * performs a shallow merge of multiple objects into one\n *\n * @template T\n * @param {T} original\n * @param {Record[]} objects\n * @returns {T} a single new object\n */\nfunction inherit$1(original, ...objects) {\n /** @type Record */\n const result = Object.create(null);\n\n for (const key in original) {\n result[key] = original[key];\n }\n objects.forEach(function(obj) {\n for (const key in obj) {\n result[key] = obj[key];\n }\n });\n return /** @type {T} */ (result);\n}\n\n/**\n * @typedef {object} Renderer\n * @property {(text: string) => void} addText\n * @property {(node: Node) => void} openNode\n * @property {(node: Node) => void} closeNode\n * @property {() => string} value\n */\n\n/** @typedef {{scope?: string, language?: string, sublanguage?: boolean}} Node */\n/** @typedef {{walk: (r: Renderer) => void}} Tree */\n/** */\n\nconst SPAN_CLOSE = '';\n\n/**\n * Determines if a node needs to be wrapped in \n *\n * @param {Node} node */\nconst emitsWrappingTags = (node) => {\n // rarely we can have a sublanguage where language is undefined\n // TODO: track down why\n return !!node.scope;\n};\n\n/**\n *\n * @param {string} name\n * @param {{prefix:string}} options\n */\nconst scopeToCSSClass = (name, { prefix }) => {\n // sub-language\n if (name.startsWith(\"language:\")) {\n return name.replace(\"language:\", \"language-\");\n }\n // tiered scope: comment.line\n if (name.includes(\".\")) {\n const pieces = name.split(\".\");\n return [\n `${prefix}${pieces.shift()}`,\n ...(pieces.map((x, i) => `${x}${\"_\".repeat(i + 1)}`))\n ].join(\" \");\n }\n // simple scope\n return `${prefix}${name}`;\n};\n\n/** @type {Renderer} */\nclass HTMLRenderer {\n /**\n * Creates a new HTMLRenderer\n *\n * @param {Tree} parseTree - the parse tree (must support `walk` API)\n * @param {{classPrefix: string}} options\n */\n constructor(parseTree, options) {\n this.buffer = \"\";\n this.classPrefix = options.classPrefix;\n parseTree.walk(this);\n }\n\n /**\n * Adds texts to the output stream\n *\n * @param {string} text */\n addText(text) {\n this.buffer += escapeHTML(text);\n }\n\n /**\n * Adds a node open to the output stream (if needed)\n *\n * @param {Node} node */\n openNode(node) {\n if (!emitsWrappingTags(node)) return;\n\n const className = scopeToCSSClass(node.scope,\n { prefix: this.classPrefix });\n this.span(className);\n }\n\n /**\n * Adds a node close to the output stream (if needed)\n *\n * @param {Node} node */\n closeNode(node) {\n if (!emitsWrappingTags(node)) return;\n\n this.buffer += SPAN_CLOSE;\n }\n\n /**\n * returns the accumulated buffer\n */\n value() {\n return this.buffer;\n }\n\n // helpers\n\n /**\n * Builds a span element\n *\n * @param {string} className */\n span(className) {\n this.buffer += ``;\n }\n}\n\n/** @typedef {{scope?: string, language?: string, children: Node[]} | string} Node */\n/** @typedef {{scope?: string, language?: string, children: Node[]} } DataNode */\n/** @typedef {import('highlight.js').Emitter} Emitter */\n/** */\n\n/** @returns {DataNode} */\nconst newNode = (opts = {}) => {\n /** @type DataNode */\n const result = { children: [] };\n Object.assign(result, opts);\n return result;\n};\n\nclass TokenTree {\n constructor() {\n /** @type DataNode */\n this.rootNode = newNode();\n this.stack = [this.rootNode];\n }\n\n get top() {\n return this.stack[this.stack.length - 1];\n }\n\n get root() { return this.rootNode; }\n\n /** @param {Node} node */\n add(node) {\n this.top.children.push(node);\n }\n\n /** @param {string} scope */\n openNode(scope) {\n /** @type Node */\n const node = newNode({ scope });\n this.add(node);\n this.stack.push(node);\n }\n\n closeNode() {\n if (this.stack.length > 1) {\n return this.stack.pop();\n }\n // eslint-disable-next-line no-undefined\n return undefined;\n }\n\n closeAllNodes() {\n while (this.closeNode());\n }\n\n toJSON() {\n return JSON.stringify(this.rootNode, null, 4);\n }\n\n /**\n * @typedef { import(\"./html_renderer\").Renderer } Renderer\n * @param {Renderer} builder\n */\n walk(builder) {\n // this does not\n return this.constructor._walk(builder, this.rootNode);\n // this works\n // return TokenTree._walk(builder, this.rootNode);\n }\n\n /**\n * @param {Renderer} builder\n * @param {Node} node\n */\n static _walk(builder, node) {\n if (typeof node === \"string\") {\n builder.addText(node);\n } else if (node.children) {\n builder.openNode(node);\n node.children.forEach((child) => this._walk(builder, child));\n builder.closeNode(node);\n }\n return builder;\n }\n\n /**\n * @param {Node} node\n */\n static _collapse(node) {\n if (typeof node === \"string\") return;\n if (!node.children) return;\n\n if (node.children.every(el => typeof el === \"string\")) {\n // node.text = node.children.join(\"\");\n // delete node.children;\n node.children = [node.children.join(\"\")];\n } else {\n node.children.forEach((child) => {\n TokenTree._collapse(child);\n });\n }\n }\n}\n\n/**\n Currently this is all private API, but this is the minimal API necessary\n that an Emitter must implement to fully support the parser.\n\n Minimal interface:\n\n - addText(text)\n - __addSublanguage(emitter, subLanguageName)\n - startScope(scope)\n - endScope()\n - finalize()\n - toHTML()\n\n*/\n\n/**\n * @implements {Emitter}\n */\nclass TokenTreeEmitter extends TokenTree {\n /**\n * @param {*} options\n */\n constructor(options) {\n super();\n this.options = options;\n }\n\n /**\n * @param {string} text\n */\n addText(text) {\n if (text === \"\") { return; }\n\n this.add(text);\n }\n\n /** @param {string} scope */\n startScope(scope) {\n this.openNode(scope);\n }\n\n endScope() {\n this.closeNode();\n }\n\n /**\n * @param {Emitter & {root: DataNode}} emitter\n * @param {string} name\n */\n __addSublanguage(emitter, name) {\n /** @type DataNode */\n const node = emitter.root;\n if (name) node.scope = `language:${name}`;\n\n this.add(node);\n }\n\n toHTML() {\n const renderer = new HTMLRenderer(this, this.options);\n return renderer.value();\n }\n\n finalize() {\n this.closeAllNodes();\n return true;\n }\n}\n\n/**\n * @param {string} value\n * @returns {RegExp}\n * */\n\n/**\n * @param {RegExp | string } re\n * @returns {string}\n */\nfunction source(re) {\n if (!re) return null;\n if (typeof re === \"string\") return re;\n\n return re.source;\n}\n\n/**\n * @param {RegExp | string } re\n * @returns {string}\n */\nfunction lookahead(re) {\n return concat('(?=', re, ')');\n}\n\n/**\n * @param {RegExp | string } re\n * @returns {string}\n */\nfunction anyNumberOfTimes(re) {\n return concat('(?:', re, ')*');\n}\n\n/**\n * @param {RegExp | string } re\n * @returns {string}\n */\nfunction optional(re) {\n return concat('(?:', re, ')?');\n}\n\n/**\n * @param {...(RegExp | string) } args\n * @returns {string}\n */\nfunction concat(...args) {\n const joined = args.map((x) => source(x)).join(\"\");\n return joined;\n}\n\n/**\n * @param { Array } args\n * @returns {object}\n */\nfunction stripOptionsFromArgs(args) {\n const opts = args[args.length - 1];\n\n if (typeof opts === 'object' && opts.constructor === Object) {\n args.splice(args.length - 1, 1);\n return opts;\n } else {\n return {};\n }\n}\n\n/** @typedef { {capture?: boolean} } RegexEitherOptions */\n\n/**\n * Any of the passed expresssions may match\n *\n * Creates a huge this | this | that | that match\n * @param {(RegExp | string)[] | [...(RegExp | string)[], RegexEitherOptions]} args\n * @returns {string}\n */\nfunction either(...args) {\n /** @type { object & {capture?: boolean} } */\n const opts = stripOptionsFromArgs(args);\n const joined = '('\n + (opts.capture ? \"\" : \"?:\")\n + args.map((x) => source(x)).join(\"|\") + \")\";\n return joined;\n}\n\n/**\n * @param {RegExp | string} re\n * @returns {number}\n */\nfunction countMatchGroups(re) {\n return (new RegExp(re.toString() + '|')).exec('').length - 1;\n}\n\n/**\n * Does lexeme start with a regular expression match at the beginning\n * @param {RegExp} re\n * @param {string} lexeme\n */\nfunction startsWith(re, lexeme) {\n const match = re && re.exec(lexeme);\n return match && match.index === 0;\n}\n\n// BACKREF_RE matches an open parenthesis or backreference. To avoid\n// an incorrect parse, it additionally matches the following:\n// - [...] elements, where the meaning of parentheses and escapes change\n// - other escape sequences, so we do not misparse escape sequences as\n// interesting elements\n// - non-matching or lookahead parentheses, which do not capture. These\n// follow the '(' with a '?'.\nconst BACKREF_RE = /\\[(?:[^\\\\\\]]|\\\\.)*\\]|\\(\\??|\\\\([1-9][0-9]*)|\\\\./;\n\n// **INTERNAL** Not intended for outside usage\n// join logically computes regexps.join(separator), but fixes the\n// backreferences so they continue to match.\n// it also places each individual regular expression into it's own\n// match group, keeping track of the sequencing of those match groups\n// is currently an exercise for the caller. :-)\n/**\n * @param {(string | RegExp)[]} regexps\n * @param {{joinWith: string}} opts\n * @returns {string}\n */\nfunction _rewriteBackreferences(regexps, { joinWith }) {\n let numCaptures = 0;\n\n return regexps.map((regex) => {\n numCaptures += 1;\n const offset = numCaptures;\n let re = source(regex);\n let out = '';\n\n while (re.length > 0) {\n const match = BACKREF_RE.exec(re);\n if (!match) {\n out += re;\n break;\n }\n out += re.substring(0, match.index);\n re = re.substring(match.index + match[0].length);\n if (match[0][0] === '\\\\' && match[1]) {\n // Adjust the backreference.\n out += '\\\\' + String(Number(match[1]) + offset);\n } else {\n out += match[0];\n if (match[0] === '(') {\n numCaptures++;\n }\n }\n }\n return out;\n }).map(re => `(${re})`).join(joinWith);\n}\n\n/** @typedef {import('highlight.js').Mode} Mode */\n/** @typedef {import('highlight.js').ModeCallback} ModeCallback */\n\n// Common regexps\nconst MATCH_NOTHING_RE = /\\b\\B/;\nconst IDENT_RE = '[a-zA-Z]\\\\w*';\nconst UNDERSCORE_IDENT_RE = '[a-zA-Z_]\\\\w*';\nconst NUMBER_RE = '\\\\b\\\\d+(\\\\.\\\\d+)?';\nconst C_NUMBER_RE = '(-?)(\\\\b0[xX][a-fA-F0-9]+|(\\\\b\\\\d+(\\\\.\\\\d*)?|\\\\.\\\\d+)([eE][-+]?\\\\d+)?)'; // 0x..., 0..., decimal, float\nconst BINARY_NUMBER_RE = '\\\\b(0b[01]+)'; // 0b...\nconst RE_STARTERS_RE = '!|!=|!==|%|%=|&|&&|&=|\\\\*|\\\\*=|\\\\+|\\\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\\\?|\\\\[|\\\\{|\\\\(|\\\\^|\\\\^=|\\\\||\\\\|=|\\\\|\\\\||~';\n\n/**\n* @param { Partial & {binary?: string | RegExp} } opts\n*/\nconst SHEBANG = (opts = {}) => {\n const beginShebang = /^#![ ]*\\//;\n if (opts.binary) {\n opts.begin = concat(\n beginShebang,\n /.*\\b/,\n opts.binary,\n /\\b.*/);\n }\n return inherit$1({\n scope: 'meta',\n begin: beginShebang,\n end: /$/,\n relevance: 0,\n /** @type {ModeCallback} */\n \"on:begin\": (m, resp) => {\n if (m.index !== 0) resp.ignoreMatch();\n }\n }, opts);\n};\n\n// Common modes\nconst BACKSLASH_ESCAPE = {\n begin: '\\\\\\\\[\\\\s\\\\S]', relevance: 0\n};\nconst APOS_STRING_MODE = {\n scope: 'string',\n begin: '\\'',\n end: '\\'',\n illegal: '\\\\n',\n contains: [BACKSLASH_ESCAPE]\n};\nconst QUOTE_STRING_MODE = {\n scope: 'string',\n begin: '\"',\n end: '\"',\n illegal: '\\\\n',\n contains: [BACKSLASH_ESCAPE]\n};\nconst PHRASAL_WORDS_MODE = {\n begin: /\\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\\b/\n};\n/**\n * Creates a comment mode\n *\n * @param {string | RegExp} begin\n * @param {string | RegExp} end\n * @param {Mode | {}} [modeOptions]\n * @returns {Partial}\n */\nconst COMMENT = function(begin, end, modeOptions = {}) {\n const mode = inherit$1(\n {\n scope: 'comment',\n begin,\n end,\n contains: []\n },\n modeOptions\n );\n mode.contains.push({\n scope: 'doctag',\n // hack to avoid the space from being included. the space is necessary to\n // match here to prevent the plain text rule below from gobbling up doctags\n begin: '[ ]*(?=(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):)',\n end: /(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):/,\n excludeBegin: true,\n relevance: 0\n });\n const ENGLISH_WORD = either(\n // list of common 1 and 2 letter words in English\n \"I\",\n \"a\",\n \"is\",\n \"so\",\n \"us\",\n \"to\",\n \"at\",\n \"if\",\n \"in\",\n \"it\",\n \"on\",\n // note: this is not an exhaustive list of contractions, just popular ones\n /[A-Za-z]+['](d|ve|re|ll|t|s|n)/, // contractions - can't we'd they're let's, etc\n /[A-Za-z]+[-][a-z]+/, // `no-way`, etc.\n /[A-Za-z][a-z]{2,}/ // allow capitalized words at beginning of sentences\n );\n // looking like plain text, more likely to be a comment\n mode.contains.push(\n {\n // TODO: how to include \", (, ) without breaking grammars that use these for\n // comment delimiters?\n // begin: /[ ]+([()\"]?([A-Za-z'-]{3,}|is|a|I|so|us|[tT][oO]|at|if|in|it|on)[.]?[()\":]?([.][ ]|[ ]|\\))){3}/\n // ---\n\n // this tries to find sequences of 3 english words in a row (without any\n // \"programming\" type syntax) this gives us a strong signal that we've\n // TRULY found a comment - vs perhaps scanning with the wrong language.\n // It's possible to find something that LOOKS like the start of the\n // comment - but then if there is no readable text - good chance it is a\n // false match and not a comment.\n //\n // for a visual example please see:\n // https://github.com/highlightjs/highlight.js/issues/2827\n\n begin: concat(\n /[ ]+/, // necessary to prevent us gobbling up doctags like /* @author Bob Mcgill */\n '(',\n ENGLISH_WORD,\n /[.]?[:]?([.][ ]|[ ])/,\n '){3}') // look for 3 words in a row\n }\n );\n return mode;\n};\nconst C_LINE_COMMENT_MODE = COMMENT('//', '$');\nconst C_BLOCK_COMMENT_MODE = COMMENT('/\\\\*', '\\\\*/');\nconst HASH_COMMENT_MODE = COMMENT('#', '$');\nconst NUMBER_MODE = {\n scope: 'number',\n begin: NUMBER_RE,\n relevance: 0\n};\nconst C_NUMBER_MODE = {\n scope: 'number',\n begin: C_NUMBER_RE,\n relevance: 0\n};\nconst BINARY_NUMBER_MODE = {\n scope: 'number',\n begin: BINARY_NUMBER_RE,\n relevance: 0\n};\nconst REGEXP_MODE = {\n scope: \"regexp\",\n begin: /\\/(?=[^/\\n]*\\/)/,\n end: /\\/[gimuy]*/,\n contains: [\n BACKSLASH_ESCAPE,\n {\n begin: /\\[/,\n end: /\\]/,\n relevance: 0,\n contains: [BACKSLASH_ESCAPE]\n }\n ]\n};\nconst TITLE_MODE = {\n scope: 'title',\n begin: IDENT_RE,\n relevance: 0\n};\nconst UNDERSCORE_TITLE_MODE = {\n scope: 'title',\n begin: UNDERSCORE_IDENT_RE,\n relevance: 0\n};\nconst METHOD_GUARD = {\n // excludes method names from keyword processing\n begin: '\\\\.\\\\s*' + UNDERSCORE_IDENT_RE,\n relevance: 0\n};\n\n/**\n * Adds end same as begin mechanics to a mode\n *\n * Your mode must include at least a single () match group as that first match\n * group is what is used for comparison\n * @param {Partial} mode\n */\nconst END_SAME_AS_BEGIN = function(mode) {\n return Object.assign(mode,\n {\n /** @type {ModeCallback} */\n 'on:begin': (m, resp) => { resp.data._beginMatch = m[1]; },\n /** @type {ModeCallback} */\n 'on:end': (m, resp) => { if (resp.data._beginMatch !== m[1]) resp.ignoreMatch(); }\n });\n};\n\nvar MODES = /*#__PURE__*/Object.freeze({\n __proto__: null,\n APOS_STRING_MODE: APOS_STRING_MODE,\n BACKSLASH_ESCAPE: BACKSLASH_ESCAPE,\n BINARY_NUMBER_MODE: BINARY_NUMBER_MODE,\n BINARY_NUMBER_RE: BINARY_NUMBER_RE,\n COMMENT: COMMENT,\n C_BLOCK_COMMENT_MODE: C_BLOCK_COMMENT_MODE,\n C_LINE_COMMENT_MODE: C_LINE_COMMENT_MODE,\n C_NUMBER_MODE: C_NUMBER_MODE,\n C_NUMBER_RE: C_NUMBER_RE,\n END_SAME_AS_BEGIN: END_SAME_AS_BEGIN,\n HASH_COMMENT_MODE: HASH_COMMENT_MODE,\n IDENT_RE: IDENT_RE,\n MATCH_NOTHING_RE: MATCH_NOTHING_RE,\n METHOD_GUARD: METHOD_GUARD,\n NUMBER_MODE: NUMBER_MODE,\n NUMBER_RE: NUMBER_RE,\n PHRASAL_WORDS_MODE: PHRASAL_WORDS_MODE,\n QUOTE_STRING_MODE: QUOTE_STRING_MODE,\n REGEXP_MODE: REGEXP_MODE,\n RE_STARTERS_RE: RE_STARTERS_RE,\n SHEBANG: SHEBANG,\n TITLE_MODE: TITLE_MODE,\n UNDERSCORE_IDENT_RE: UNDERSCORE_IDENT_RE,\n UNDERSCORE_TITLE_MODE: UNDERSCORE_TITLE_MODE\n});\n\n/**\n@typedef {import('highlight.js').CallbackResponse} CallbackResponse\n@typedef {import('highlight.js').CompilerExt} CompilerExt\n*/\n\n// Grammar extensions / plugins\n// See: https://github.com/highlightjs/highlight.js/issues/2833\n\n// Grammar extensions allow \"syntactic sugar\" to be added to the grammar modes\n// without requiring any underlying changes to the compiler internals.\n\n// `compileMatch` being the perfect small example of now allowing a grammar\n// author to write `match` when they desire to match a single expression rather\n// than being forced to use `begin`. The extension then just moves `match` into\n// `begin` when it runs. Ie, no features have been added, but we've just made\n// the experience of writing (and reading grammars) a little bit nicer.\n\n// ------\n\n// TODO: We need negative look-behind support to do this properly\n/**\n * Skip a match if it has a preceding dot\n *\n * This is used for `beginKeywords` to prevent matching expressions such as\n * `bob.keyword.do()`. The mode compiler automatically wires this up as a\n * special _internal_ 'on:begin' callback for modes with `beginKeywords`\n * @param {RegExpMatchArray} match\n * @param {CallbackResponse} response\n */\nfunction skipIfHasPrecedingDot(match, response) {\n const before = match.input[match.index - 1];\n if (before === \".\") {\n response.ignoreMatch();\n }\n}\n\n/**\n *\n * @type {CompilerExt}\n */\nfunction scopeClassName(mode, _parent) {\n // eslint-disable-next-line no-undefined\n if (mode.className !== undefined) {\n mode.scope = mode.className;\n delete mode.className;\n }\n}\n\n/**\n * `beginKeywords` syntactic sugar\n * @type {CompilerExt}\n */\nfunction beginKeywords(mode, parent) {\n if (!parent) return;\n if (!mode.beginKeywords) return;\n\n // for languages with keywords that include non-word characters checking for\n // a word boundary is not sufficient, so instead we check for a word boundary\n // or whitespace - this does no harm in any case since our keyword engine\n // doesn't allow spaces in keywords anyways and we still check for the boundary\n // first\n mode.begin = '\\\\b(' + mode.beginKeywords.split(' ').join('|') + ')(?!\\\\.)(?=\\\\b|\\\\s)';\n mode.__beforeBegin = skipIfHasPrecedingDot;\n mode.keywords = mode.keywords || mode.beginKeywords;\n delete mode.beginKeywords;\n\n // prevents double relevance, the keywords themselves provide\n // relevance, the mode doesn't need to double it\n // eslint-disable-next-line no-undefined\n if (mode.relevance === undefined) mode.relevance = 0;\n}\n\n/**\n * Allow `illegal` to contain an array of illegal values\n * @type {CompilerExt}\n */\nfunction compileIllegal(mode, _parent) {\n if (!Array.isArray(mode.illegal)) return;\n\n mode.illegal = either(...mode.illegal);\n}\n\n/**\n * `match` to match a single expression for readability\n * @type {CompilerExt}\n */\nfunction compileMatch(mode, _parent) {\n if (!mode.match) return;\n if (mode.begin || mode.end) throw new Error(\"begin & end are not supported with match\");\n\n mode.begin = mode.match;\n delete mode.match;\n}\n\n/**\n * provides the default 1 relevance to all modes\n * @type {CompilerExt}\n */\nfunction compileRelevance(mode, _parent) {\n // eslint-disable-next-line no-undefined\n if (mode.relevance === undefined) mode.relevance = 1;\n}\n\n// allow beforeMatch to act as a \"qualifier\" for the match\n// the full match begin must be [beforeMatch][begin]\nconst beforeMatchExt = (mode, parent) => {\n if (!mode.beforeMatch) return;\n // starts conflicts with endsParent which we need to make sure the child\n // rule is not matched multiple times\n if (mode.starts) throw new Error(\"beforeMatch cannot be used with starts\");\n\n const originalMode = Object.assign({}, mode);\n Object.keys(mode).forEach((key) => { delete mode[key]; });\n\n mode.keywords = originalMode.keywords;\n mode.begin = concat(originalMode.beforeMatch, lookahead(originalMode.begin));\n mode.starts = {\n relevance: 0,\n contains: [\n Object.assign(originalMode, { endsParent: true })\n ]\n };\n mode.relevance = 0;\n\n delete originalMode.beforeMatch;\n};\n\n// keywords that should have no default relevance value\nconst COMMON_KEYWORDS = [\n 'of',\n 'and',\n 'for',\n 'in',\n 'not',\n 'or',\n 'if',\n 'then',\n 'parent', // common variable name\n 'list', // common variable name\n 'value' // common variable name\n];\n\nconst DEFAULT_KEYWORD_SCOPE = \"keyword\";\n\n/**\n * Given raw keywords from a language definition, compile them.\n *\n * @param {string | Record | Array} rawKeywords\n * @param {boolean} caseInsensitive\n */\nfunction compileKeywords(rawKeywords, caseInsensitive, scopeName = DEFAULT_KEYWORD_SCOPE) {\n /** @type {import(\"highlight.js/private\").KeywordDict} */\n const compiledKeywords = Object.create(null);\n\n // input can be a string of keywords, an array of keywords, or a object with\n // named keys representing scopeName (which can then point to a string or array)\n if (typeof rawKeywords === 'string') {\n compileList(scopeName, rawKeywords.split(\" \"));\n } else if (Array.isArray(rawKeywords)) {\n compileList(scopeName, rawKeywords);\n } else {\n Object.keys(rawKeywords).forEach(function(scopeName) {\n // collapse all our objects back into the parent object\n Object.assign(\n compiledKeywords,\n compileKeywords(rawKeywords[scopeName], caseInsensitive, scopeName)\n );\n });\n }\n return compiledKeywords;\n\n // ---\n\n /**\n * Compiles an individual list of keywords\n *\n * Ex: \"for if when while|5\"\n *\n * @param {string} scopeName\n * @param {Array} keywordList\n */\n function compileList(scopeName, keywordList) {\n if (caseInsensitive) {\n keywordList = keywordList.map(x => x.toLowerCase());\n }\n keywordList.forEach(function(keyword) {\n const pair = keyword.split('|');\n compiledKeywords[pair[0]] = [scopeName, scoreForKeyword(pair[0], pair[1])];\n });\n }\n}\n\n/**\n * Returns the proper score for a given keyword\n *\n * Also takes into account comment keywords, which will be scored 0 UNLESS\n * another score has been manually assigned.\n * @param {string} keyword\n * @param {string} [providedScore]\n */\nfunction scoreForKeyword(keyword, providedScore) {\n // manual scores always win over common keywords\n // so you can force a score of 1 if you really insist\n if (providedScore) {\n return Number(providedScore);\n }\n\n return commonKeyword(keyword) ? 0 : 1;\n}\n\n/**\n * Determines if a given keyword is common or not\n *\n * @param {string} keyword */\nfunction commonKeyword(keyword) {\n return COMMON_KEYWORDS.includes(keyword.toLowerCase());\n}\n\n/*\n\nFor the reasoning behind this please see:\nhttps://github.com/highlightjs/highlight.js/issues/2880#issuecomment-747275419\n\n*/\n\n/**\n * @type {Record}\n */\nconst seenDeprecations = {};\n\n/**\n * @param {string} message\n */\nconst error = (message) => {\n console.error(message);\n};\n\n/**\n * @param {string} message\n * @param {any} args\n */\nconst warn = (message, ...args) => {\n console.log(`WARN: ${message}`, ...args);\n};\n\n/**\n * @param {string} version\n * @param {string} message\n */\nconst deprecated = (version, message) => {\n if (seenDeprecations[`${version}/${message}`]) return;\n\n console.log(`Deprecated as of ${version}. ${message}`);\n seenDeprecations[`${version}/${message}`] = true;\n};\n\n/* eslint-disable no-throw-literal */\n\n/**\n@typedef {import('highlight.js').CompiledMode} CompiledMode\n*/\n\nconst MultiClassError = new Error();\n\n/**\n * Renumbers labeled scope names to account for additional inner match\n * groups that otherwise would break everything.\n *\n * Lets say we 3 match scopes:\n *\n * { 1 => ..., 2 => ..., 3 => ... }\n *\n * So what we need is a clean match like this:\n *\n * (a)(b)(c) => [ \"a\", \"b\", \"c\" ]\n *\n * But this falls apart with inner match groups:\n *\n * (a)(((b)))(c) => [\"a\", \"b\", \"b\", \"b\", \"c\" ]\n *\n * Our scopes are now \"out of alignment\" and we're repeating `b` 3 times.\n * What needs to happen is the numbers are remapped:\n *\n * { 1 => ..., 2 => ..., 5 => ... }\n *\n * We also need to know that the ONLY groups that should be output\n * are 1, 2, and 5. This function handles this behavior.\n *\n * @param {CompiledMode} mode\n * @param {Array} regexes\n * @param {{key: \"beginScope\"|\"endScope\"}} opts\n */\nfunction remapScopeNames(mode, regexes, { key }) {\n let offset = 0;\n const scopeNames = mode[key];\n /** @type Record */\n const emit = {};\n /** @type Record */\n const positions = {};\n\n for (let i = 1; i <= regexes.length; i++) {\n positions[i + offset] = scopeNames[i];\n emit[i + offset] = true;\n offset += countMatchGroups(regexes[i - 1]);\n }\n // we use _emit to keep track of which match groups are \"top-level\" to avoid double\n // output from inside match groups\n mode[key] = positions;\n mode[key]._emit = emit;\n mode[key]._multi = true;\n}\n\n/**\n * @param {CompiledMode} mode\n */\nfunction beginMultiClass(mode) {\n if (!Array.isArray(mode.begin)) return;\n\n if (mode.skip || mode.excludeBegin || mode.returnBegin) {\n error(\"skip, excludeBegin, returnBegin not compatible with beginScope: {}\");\n throw MultiClassError;\n }\n\n if (typeof mode.beginScope !== \"object\" || mode.beginScope === null) {\n error(\"beginScope must be object\");\n throw MultiClassError;\n }\n\n remapScopeNames(mode, mode.begin, { key: \"beginScope\" });\n mode.begin = _rewriteBackreferences(mode.begin, { joinWith: \"\" });\n}\n\n/**\n * @param {CompiledMode} mode\n */\nfunction endMultiClass(mode) {\n if (!Array.isArray(mode.end)) return;\n\n if (mode.skip || mode.excludeEnd || mode.returnEnd) {\n error(\"skip, excludeEnd, returnEnd not compatible with endScope: {}\");\n throw MultiClassError;\n }\n\n if (typeof mode.endScope !== \"object\" || mode.endScope === null) {\n error(\"endScope must be object\");\n throw MultiClassError;\n }\n\n remapScopeNames(mode, mode.end, { key: \"endScope\" });\n mode.end = _rewriteBackreferences(mode.end, { joinWith: \"\" });\n}\n\n/**\n * this exists only to allow `scope: {}` to be used beside `match:`\n * Otherwise `beginScope` would necessary and that would look weird\n\n {\n match: [ /def/, /\\w+/ ]\n scope: { 1: \"keyword\" , 2: \"title\" }\n }\n\n * @param {CompiledMode} mode\n */\nfunction scopeSugar(mode) {\n if (mode.scope && typeof mode.scope === \"object\" && mode.scope !== null) {\n mode.beginScope = mode.scope;\n delete mode.scope;\n }\n}\n\n/**\n * @param {CompiledMode} mode\n */\nfunction MultiClass(mode) {\n scopeSugar(mode);\n\n if (typeof mode.beginScope === \"string\") {\n mode.beginScope = { _wrap: mode.beginScope };\n }\n if (typeof mode.endScope === \"string\") {\n mode.endScope = { _wrap: mode.endScope };\n }\n\n beginMultiClass(mode);\n endMultiClass(mode);\n}\n\n/**\n@typedef {import('highlight.js').Mode} Mode\n@typedef {import('highlight.js').CompiledMode} CompiledMode\n@typedef {import('highlight.js').Language} Language\n@typedef {import('highlight.js').HLJSPlugin} HLJSPlugin\n@typedef {import('highlight.js').CompiledLanguage} CompiledLanguage\n*/\n\n// compilation\n\n/**\n * Compiles a language definition result\n *\n * Given the raw result of a language definition (Language), compiles this so\n * that it is ready for highlighting code.\n * @param {Language} language\n * @returns {CompiledLanguage}\n */\nfunction compileLanguage(language) {\n /**\n * Builds a regex with the case sensitivity of the current language\n *\n * @param {RegExp | string} value\n * @param {boolean} [global]\n */\n function langRe(value, global) {\n return new RegExp(\n source(value),\n 'm'\n + (language.case_insensitive ? 'i' : '')\n + (language.unicodeRegex ? 'u' : '')\n + (global ? 'g' : '')\n );\n }\n\n /**\n Stores multiple regular expressions and allows you to quickly search for\n them all in a string simultaneously - returning the first match. It does\n this by creating a huge (a|b|c) regex - each individual item wrapped with ()\n and joined by `|` - using match groups to track position. When a match is\n found checking which position in the array has content allows us to figure\n out which of the original regexes / match groups triggered the match.\n\n The match object itself (the result of `Regex.exec`) is returned but also\n enhanced by merging in any meta-data that was registered with the regex.\n This is how we keep track of which mode matched, and what type of rule\n (`illegal`, `begin`, end, etc).\n */\n class MultiRegex {\n constructor() {\n this.matchIndexes = {};\n // @ts-ignore\n this.regexes = [];\n this.matchAt = 1;\n this.position = 0;\n }\n\n // @ts-ignore\n addRule(re, opts) {\n opts.position = this.position++;\n // @ts-ignore\n this.matchIndexes[this.matchAt] = opts;\n this.regexes.push([opts, re]);\n this.matchAt += countMatchGroups(re) + 1;\n }\n\n compile() {\n if (this.regexes.length === 0) {\n // avoids the need to check length every time exec is called\n // @ts-ignore\n this.exec = () => null;\n }\n const terminators = this.regexes.map(el => el[1]);\n this.matcherRe = langRe(_rewriteBackreferences(terminators, { joinWith: '|' }), true);\n this.lastIndex = 0;\n }\n\n /** @param {string} s */\n exec(s) {\n this.matcherRe.lastIndex = this.lastIndex;\n const match = this.matcherRe.exec(s);\n if (!match) { return null; }\n\n // eslint-disable-next-line no-undefined\n const i = match.findIndex((el, i) => i > 0 && el !== undefined);\n // @ts-ignore\n const matchData = this.matchIndexes[i];\n // trim off any earlier non-relevant match groups (ie, the other regex\n // match groups that make up the multi-matcher)\n match.splice(0, i);\n\n return Object.assign(match, matchData);\n }\n }\n\n /*\n Created to solve the key deficiently with MultiRegex - there is no way to\n test for multiple matches at a single location. Why would we need to do\n that? In the future a more dynamic engine will allow certain matches to be\n ignored. An example: if we matched say the 3rd regex in a large group but\n decided to ignore it - we'd need to started testing again at the 4th\n regex... but MultiRegex itself gives us no real way to do that.\n\n So what this class creates MultiRegexs on the fly for whatever search\n position they are needed.\n\n NOTE: These additional MultiRegex objects are created dynamically. For most\n grammars most of the time we will never actually need anything more than the\n first MultiRegex - so this shouldn't have too much overhead.\n\n Say this is our search group, and we match regex3, but wish to ignore it.\n\n regex1 | regex2 | regex3 | regex4 | regex5 ' ie, startAt = 0\n\n What we need is a new MultiRegex that only includes the remaining\n possibilities:\n\n regex4 | regex5 ' ie, startAt = 3\n\n This class wraps all that complexity up in a simple API... `startAt` decides\n where in the array of expressions to start doing the matching. It\n auto-increments, so if a match is found at position 2, then startAt will be\n set to 3. If the end is reached startAt will return to 0.\n\n MOST of the time the parser will be setting startAt manually to 0.\n */\n class ResumableMultiRegex {\n constructor() {\n // @ts-ignore\n this.rules = [];\n // @ts-ignore\n this.multiRegexes = [];\n this.count = 0;\n\n this.lastIndex = 0;\n this.regexIndex = 0;\n }\n\n // @ts-ignore\n getMatcher(index) {\n if (this.multiRegexes[index]) return this.multiRegexes[index];\n\n const matcher = new MultiRegex();\n this.rules.slice(index).forEach(([re, opts]) => matcher.addRule(re, opts));\n matcher.compile();\n this.multiRegexes[index] = matcher;\n return matcher;\n }\n\n resumingScanAtSamePosition() {\n return this.regexIndex !== 0;\n }\n\n considerAll() {\n this.regexIndex = 0;\n }\n\n // @ts-ignore\n addRule(re, opts) {\n this.rules.push([re, opts]);\n if (opts.type === \"begin\") this.count++;\n }\n\n /** @param {string} s */\n exec(s) {\n const m = this.getMatcher(this.regexIndex);\n m.lastIndex = this.lastIndex;\n let result = m.exec(s);\n\n // The following is because we have no easy way to say \"resume scanning at the\n // existing position but also skip the current rule ONLY\". What happens is\n // all prior rules are also skipped which can result in matching the wrong\n // thing. Example of matching \"booger\":\n\n // our matcher is [string, \"booger\", number]\n //\n // ....booger....\n\n // if \"booger\" is ignored then we'd really need a regex to scan from the\n // SAME position for only: [string, number] but ignoring \"booger\" (if it\n // was the first match), a simple resume would scan ahead who knows how\n // far looking only for \"number\", ignoring potential string matches (or\n // future \"booger\" matches that might be valid.)\n\n // So what we do: We execute two matchers, one resuming at the same\n // position, but the second full matcher starting at the position after:\n\n // /--- resume first regex match here (for [number])\n // |/---- full match here for [string, \"booger\", number]\n // vv\n // ....booger....\n\n // Which ever results in a match first is then used. So this 3-4 step\n // process essentially allows us to say \"match at this position, excluding\n // a prior rule that was ignored\".\n //\n // 1. Match \"booger\" first, ignore. Also proves that [string] does non match.\n // 2. Resume matching for [number]\n // 3. Match at index + 1 for [string, \"booger\", number]\n // 4. If #2 and #3 result in matches, which came first?\n if (this.resumingScanAtSamePosition()) {\n if (result && result.index === this.lastIndex) ; else { // use the second matcher result\n const m2 = this.getMatcher(0);\n m2.lastIndex = this.lastIndex + 1;\n result = m2.exec(s);\n }\n }\n\n if (result) {\n this.regexIndex += result.position + 1;\n if (this.regexIndex === this.count) {\n // wrap-around to considering all matches again\n this.considerAll();\n }\n }\n\n return result;\n }\n }\n\n /**\n * Given a mode, builds a huge ResumableMultiRegex that can be used to walk\n * the content and find matches.\n *\n * @param {CompiledMode} mode\n * @returns {ResumableMultiRegex}\n */\n function buildModeRegex(mode) {\n const mm = new ResumableMultiRegex();\n\n mode.contains.forEach(term => mm.addRule(term.begin, { rule: term, type: \"begin\" }));\n\n if (mode.terminatorEnd) {\n mm.addRule(mode.terminatorEnd, { type: \"end\" });\n }\n if (mode.illegal) {\n mm.addRule(mode.illegal, { type: \"illegal\" });\n }\n\n return mm;\n }\n\n /** skip vs abort vs ignore\n *\n * @skip - The mode is still entered and exited normally (and contains rules apply),\n * but all content is held and added to the parent buffer rather than being\n * output when the mode ends. Mostly used with `sublanguage` to build up\n * a single large buffer than can be parsed by sublanguage.\n *\n * - The mode begin ands ends normally.\n * - Content matched is added to the parent mode buffer.\n * - The parser cursor is moved forward normally.\n *\n * @abort - A hack placeholder until we have ignore. Aborts the mode (as if it\n * never matched) but DOES NOT continue to match subsequent `contains`\n * modes. Abort is bad/suboptimal because it can result in modes\n * farther down not getting applied because an earlier rule eats the\n * content but then aborts.\n *\n * - The mode does not begin.\n * - Content matched by `begin` is added to the mode buffer.\n * - The parser cursor is moved forward accordingly.\n *\n * @ignore - Ignores the mode (as if it never matched) and continues to match any\n * subsequent `contains` modes. Ignore isn't technically possible with\n * the current parser implementation.\n *\n * - The mode does not begin.\n * - Content matched by `begin` is ignored.\n * - The parser cursor is not moved forward.\n */\n\n /**\n * Compiles an individual mode\n *\n * This can raise an error if the mode contains certain detectable known logic\n * issues.\n * @param {Mode} mode\n * @param {CompiledMode | null} [parent]\n * @returns {CompiledMode | never}\n */\n function compileMode(mode, parent) {\n const cmode = /** @type CompiledMode */ (mode);\n if (mode.isCompiled) return cmode;\n\n [\n scopeClassName,\n // do this early so compiler extensions generally don't have to worry about\n // the distinction between match/begin\n compileMatch,\n MultiClass,\n beforeMatchExt\n ].forEach(ext => ext(mode, parent));\n\n language.compilerExtensions.forEach(ext => ext(mode, parent));\n\n // __beforeBegin is considered private API, internal use only\n mode.__beforeBegin = null;\n\n [\n beginKeywords,\n // do this later so compiler extensions that come earlier have access to the\n // raw array if they wanted to perhaps manipulate it, etc.\n compileIllegal,\n // default to 1 relevance if not specified\n compileRelevance\n ].forEach(ext => ext(mode, parent));\n\n mode.isCompiled = true;\n\n let keywordPattern = null;\n if (typeof mode.keywords === \"object\" && mode.keywords.$pattern) {\n // we need a copy because keywords might be compiled multiple times\n // so we can't go deleting $pattern from the original on the first\n // pass\n mode.keywords = Object.assign({}, mode.keywords);\n keywordPattern = mode.keywords.$pattern;\n delete mode.keywords.$pattern;\n }\n keywordPattern = keywordPattern || /\\w+/;\n\n if (mode.keywords) {\n mode.keywords = compileKeywords(mode.keywords, language.case_insensitive);\n }\n\n cmode.keywordPatternRe = langRe(keywordPattern, true);\n\n if (parent) {\n if (!mode.begin) mode.begin = /\\B|\\b/;\n cmode.beginRe = langRe(cmode.begin);\n if (!mode.end && !mode.endsWithParent) mode.end = /\\B|\\b/;\n if (mode.end) cmode.endRe = langRe(cmode.end);\n cmode.terminatorEnd = source(cmode.end) || '';\n if (mode.endsWithParent && parent.terminatorEnd) {\n cmode.terminatorEnd += (mode.end ? '|' : '') + parent.terminatorEnd;\n }\n }\n if (mode.illegal) cmode.illegalRe = langRe(/** @type {RegExp | string} */ (mode.illegal));\n if (!mode.contains) mode.contains = [];\n\n mode.contains = [].concat(...mode.contains.map(function(c) {\n return expandOrCloneMode(c === 'self' ? mode : c);\n }));\n mode.contains.forEach(function(c) { compileMode(/** @type Mode */ (c), cmode); });\n\n if (mode.starts) {\n compileMode(mode.starts, parent);\n }\n\n cmode.matcher = buildModeRegex(cmode);\n return cmode;\n }\n\n if (!language.compilerExtensions) language.compilerExtensions = [];\n\n // self is not valid at the top-level\n if (language.contains && language.contains.includes('self')) {\n throw new Error(\"ERR: contains `self` is not supported at the top-level of a language. See documentation.\");\n }\n\n // we need a null object, which inherit will guarantee\n language.classNameAliases = inherit$1(language.classNameAliases || {});\n\n return compileMode(/** @type Mode */ (language));\n}\n\n/**\n * Determines if a mode has a dependency on it's parent or not\n *\n * If a mode does have a parent dependency then often we need to clone it if\n * it's used in multiple places so that each copy points to the correct parent,\n * where-as modes without a parent can often safely be re-used at the bottom of\n * a mode chain.\n *\n * @param {Mode | null} mode\n * @returns {boolean} - is there a dependency on the parent?\n * */\nfunction dependencyOnParent(mode) {\n if (!mode) return false;\n\n return mode.endsWithParent || dependencyOnParent(mode.starts);\n}\n\n/**\n * Expands a mode or clones it if necessary\n *\n * This is necessary for modes with parental dependenceis (see notes on\n * `dependencyOnParent`) and for nodes that have `variants` - which must then be\n * exploded into their own individual modes at compile time.\n *\n * @param {Mode} mode\n * @returns {Mode | Mode[]}\n * */\nfunction expandOrCloneMode(mode) {\n if (mode.variants && !mode.cachedVariants) {\n mode.cachedVariants = mode.variants.map(function(variant) {\n return inherit$1(mode, { variants: null }, variant);\n });\n }\n\n // EXPAND\n // if we have variants then essentially \"replace\" the mode with the variants\n // this happens in compileMode, where this function is called from\n if (mode.cachedVariants) {\n return mode.cachedVariants;\n }\n\n // CLONE\n // if we have dependencies on parents then we need a unique\n // instance of ourselves, so we can be reused with many\n // different parents without issue\n if (dependencyOnParent(mode)) {\n return inherit$1(mode, { starts: mode.starts ? inherit$1(mode.starts) : null });\n }\n\n if (Object.isFrozen(mode)) {\n return inherit$1(mode);\n }\n\n // no special dependency issues, just return ourselves\n return mode;\n}\n\nvar version = \"11.11.1\";\n\nclass HTMLInjectionError extends Error {\n constructor(reason, html) {\n super(reason);\n this.name = \"HTMLInjectionError\";\n this.html = html;\n }\n}\n\n/*\nSyntax highlighting with language autodetection.\nhttps://highlightjs.org/\n*/\n\n\n\n/**\n@typedef {import('highlight.js').Mode} Mode\n@typedef {import('highlight.js').CompiledMode} CompiledMode\n@typedef {import('highlight.js').CompiledScope} CompiledScope\n@typedef {import('highlight.js').Language} Language\n@typedef {import('highlight.js').HLJSApi} HLJSApi\n@typedef {import('highlight.js').HLJSPlugin} HLJSPlugin\n@typedef {import('highlight.js').PluginEvent} PluginEvent\n@typedef {import('highlight.js').HLJSOptions} HLJSOptions\n@typedef {import('highlight.js').LanguageFn} LanguageFn\n@typedef {import('highlight.js').HighlightedHTMLElement} HighlightedHTMLElement\n@typedef {import('highlight.js').BeforeHighlightContext} BeforeHighlightContext\n@typedef {import('highlight.js/private').MatchType} MatchType\n@typedef {import('highlight.js/private').KeywordData} KeywordData\n@typedef {import('highlight.js/private').EnhancedMatch} EnhancedMatch\n@typedef {import('highlight.js/private').AnnotatedError} AnnotatedError\n@typedef {import('highlight.js').AutoHighlightResult} AutoHighlightResult\n@typedef {import('highlight.js').HighlightOptions} HighlightOptions\n@typedef {import('highlight.js').HighlightResult} HighlightResult\n*/\n\n\nconst escape = escapeHTML;\nconst inherit = inherit$1;\nconst NO_MATCH = Symbol(\"nomatch\");\nconst MAX_KEYWORD_HITS = 7;\n\n/**\n * @param {any} hljs - object that is extended (legacy)\n * @returns {HLJSApi}\n */\nconst HLJS = function(hljs) {\n // Global internal variables used within the highlight.js library.\n /** @type {Record} */\n const languages = Object.create(null);\n /** @type {Record} */\n const aliases = Object.create(null);\n /** @type {HLJSPlugin[]} */\n const plugins = [];\n\n // safe/production mode - swallows more errors, tries to keep running\n // even if a single syntax or parse hits a fatal error\n let SAFE_MODE = true;\n const LANGUAGE_NOT_FOUND = \"Could not find the language '{}', did you forget to load/include a language module?\";\n /** @type {Language} */\n const PLAINTEXT_LANGUAGE = { disableAutodetect: true, name: 'Plain text', contains: [] };\n\n // Global options used when within external APIs. This is modified when\n // calling the `hljs.configure` function.\n /** @type HLJSOptions */\n let options = {\n ignoreUnescapedHTML: false,\n throwUnescapedHTML: false,\n noHighlightRe: /^(no-?highlight)$/i,\n languageDetectRe: /\\blang(?:uage)?-([\\w-]+)\\b/i,\n classPrefix: 'hljs-',\n cssSelector: 'pre code',\n languages: null,\n // beta configuration options, subject to change, welcome to discuss\n // https://github.com/highlightjs/highlight.js/issues/1086\n __emitter: TokenTreeEmitter\n };\n\n /* Utility functions */\n\n /**\n * Tests a language name to see if highlighting should be skipped\n * @param {string} languageName\n */\n function shouldNotHighlight(languageName) {\n return options.noHighlightRe.test(languageName);\n }\n\n /**\n * @param {HighlightedHTMLElement} block - the HTML element to determine language for\n */\n function blockLanguage(block) {\n let classes = block.className + ' ';\n\n classes += block.parentNode ? block.parentNode.className : '';\n\n // language-* takes precedence over non-prefixed class names.\n const match = options.languageDetectRe.exec(classes);\n if (match) {\n const language = getLanguage(match[1]);\n if (!language) {\n warn(LANGUAGE_NOT_FOUND.replace(\"{}\", match[1]));\n warn(\"Falling back to no-highlight mode for this block.\", block);\n }\n return language ? match[1] : 'no-highlight';\n }\n\n return classes\n .split(/\\s+/)\n .find((_class) => shouldNotHighlight(_class) || getLanguage(_class));\n }\n\n /**\n * Core highlighting function.\n *\n * OLD API\n * highlight(lang, code, ignoreIllegals, continuation)\n *\n * NEW API\n * highlight(code, {lang, ignoreIllegals})\n *\n * @param {string} codeOrLanguageName - the language to use for highlighting\n * @param {string | HighlightOptions} optionsOrCode - the code to highlight\n * @param {boolean} [ignoreIllegals] - whether to ignore illegal matches, default is to bail\n *\n * @returns {HighlightResult} Result - an object that represents the result\n * @property {string} language - the language name\n * @property {number} relevance - the relevance score\n * @property {string} value - the highlighted HTML code\n * @property {string} code - the original raw code\n * @property {CompiledMode} top - top of the current mode stack\n * @property {boolean} illegal - indicates whether any illegal matches were found\n */\n function highlight(codeOrLanguageName, optionsOrCode, ignoreIllegals) {\n let code = \"\";\n let languageName = \"\";\n if (typeof optionsOrCode === \"object\") {\n code = codeOrLanguageName;\n ignoreIllegals = optionsOrCode.ignoreIllegals;\n languageName = optionsOrCode.language;\n } else {\n // old API\n deprecated(\"10.7.0\", \"highlight(lang, code, ...args) has been deprecated.\");\n deprecated(\"10.7.0\", \"Please use highlight(code, options) instead.\\nhttps://github.com/highlightjs/highlight.js/issues/2277\");\n languageName = codeOrLanguageName;\n code = optionsOrCode;\n }\n\n // https://github.com/highlightjs/highlight.js/issues/3149\n // eslint-disable-next-line no-undefined\n if (ignoreIllegals === undefined) { ignoreIllegals = true; }\n\n /** @type {BeforeHighlightContext} */\n const context = {\n code,\n language: languageName\n };\n // the plugin can change the desired language or the code to be highlighted\n // just be changing the object it was passed\n fire(\"before:highlight\", context);\n\n // a before plugin can usurp the result completely by providing it's own\n // in which case we don't even need to call highlight\n const result = context.result\n ? context.result\n : _highlight(context.language, context.code, ignoreIllegals);\n\n result.code = context.code;\n // the plugin can change anything in result to suite it\n fire(\"after:highlight\", result);\n\n return result;\n }\n\n /**\n * private highlight that's used internally and does not fire callbacks\n *\n * @param {string} languageName - the language to use for highlighting\n * @param {string} codeToHighlight - the code to highlight\n * @param {boolean?} [ignoreIllegals] - whether to ignore illegal matches, default is to bail\n * @param {CompiledMode?} [continuation] - current continuation mode, if any\n * @returns {HighlightResult} - result of the highlight operation\n */\n function _highlight(languageName, codeToHighlight, ignoreIllegals, continuation) {\n const keywordHits = Object.create(null);\n\n /**\n * Return keyword data if a match is a keyword\n * @param {CompiledMode} mode - current mode\n * @param {string} matchText - the textual match\n * @returns {KeywordData | false}\n */\n function keywordData(mode, matchText) {\n return mode.keywords[matchText];\n }\n\n function processKeywords() {\n if (!top.keywords) {\n emitter.addText(modeBuffer);\n return;\n }\n\n let lastIndex = 0;\n top.keywordPatternRe.lastIndex = 0;\n let match = top.keywordPatternRe.exec(modeBuffer);\n let buf = \"\";\n\n while (match) {\n buf += modeBuffer.substring(lastIndex, match.index);\n const word = language.case_insensitive ? match[0].toLowerCase() : match[0];\n const data = keywordData(top, word);\n if (data) {\n const [kind, keywordRelevance] = data;\n emitter.addText(buf);\n buf = \"\";\n\n keywordHits[word] = (keywordHits[word] || 0) + 1;\n if (keywordHits[word] <= MAX_KEYWORD_HITS) relevance += keywordRelevance;\n if (kind.startsWith(\"_\")) {\n // _ implied for relevance only, do not highlight\n // by applying a class name\n buf += match[0];\n } else {\n const cssClass = language.classNameAliases[kind] || kind;\n emitKeyword(match[0], cssClass);\n }\n } else {\n buf += match[0];\n }\n lastIndex = top.keywordPatternRe.lastIndex;\n match = top.keywordPatternRe.exec(modeBuffer);\n }\n buf += modeBuffer.substring(lastIndex);\n emitter.addText(buf);\n }\n\n function processSubLanguage() {\n if (modeBuffer === \"\") return;\n /** @type HighlightResult */\n let result = null;\n\n if (typeof top.subLanguage === 'string') {\n if (!languages[top.subLanguage]) {\n emitter.addText(modeBuffer);\n return;\n }\n result = _highlight(top.subLanguage, modeBuffer, true, continuations[top.subLanguage]);\n continuations[top.subLanguage] = /** @type {CompiledMode} */ (result._top);\n } else {\n result = highlightAuto(modeBuffer, top.subLanguage.length ? top.subLanguage : null);\n }\n\n // Counting embedded language score towards the host language may be disabled\n // with zeroing the containing mode relevance. Use case in point is Markdown that\n // allows XML everywhere and makes every XML snippet to have a much larger Markdown\n // score.\n if (top.relevance > 0) {\n relevance += result.relevance;\n }\n emitter.__addSublanguage(result._emitter, result.language);\n }\n\n function processBuffer() {\n if (top.subLanguage != null) {\n processSubLanguage();\n } else {\n processKeywords();\n }\n modeBuffer = '';\n }\n\n /**\n * @param {string} text\n * @param {string} scope\n */\n function emitKeyword(keyword, scope) {\n if (keyword === \"\") return;\n\n emitter.startScope(scope);\n emitter.addText(keyword);\n emitter.endScope();\n }\n\n /**\n * @param {CompiledScope} scope\n * @param {RegExpMatchArray} match\n */\n function emitMultiClass(scope, match) {\n let i = 1;\n const max = match.length - 1;\n while (i <= max) {\n if (!scope._emit[i]) { i++; continue; }\n const klass = language.classNameAliases[scope[i]] || scope[i];\n const text = match[i];\n if (klass) {\n emitKeyword(text, klass);\n } else {\n modeBuffer = text;\n processKeywords();\n modeBuffer = \"\";\n }\n i++;\n }\n }\n\n /**\n * @param {CompiledMode} mode - new mode to start\n * @param {RegExpMatchArray} match\n */\n function startNewMode(mode, match) {\n if (mode.scope && typeof mode.scope === \"string\") {\n emitter.openNode(language.classNameAliases[mode.scope] || mode.scope);\n }\n if (mode.beginScope) {\n // beginScope just wraps the begin match itself in a scope\n if (mode.beginScope._wrap) {\n emitKeyword(modeBuffer, language.classNameAliases[mode.beginScope._wrap] || mode.beginScope._wrap);\n modeBuffer = \"\";\n } else if (mode.beginScope._multi) {\n // at this point modeBuffer should just be the match\n emitMultiClass(mode.beginScope, match);\n modeBuffer = \"\";\n }\n }\n\n top = Object.create(mode, { parent: { value: top } });\n return top;\n }\n\n /**\n * @param {CompiledMode } mode - the mode to potentially end\n * @param {RegExpMatchArray} match - the latest match\n * @param {string} matchPlusRemainder - match plus remainder of content\n * @returns {CompiledMode | void} - the next mode, or if void continue on in current mode\n */\n function endOfMode(mode, match, matchPlusRemainder) {\n let matched = startsWith(mode.endRe, matchPlusRemainder);\n\n if (matched) {\n if (mode[\"on:end\"]) {\n const resp = new Response(mode);\n mode[\"on:end\"](match, resp);\n if (resp.isMatchIgnored) matched = false;\n }\n\n if (matched) {\n while (mode.endsParent && mode.parent) {\n mode = mode.parent;\n }\n return mode;\n }\n }\n // even if on:end fires an `ignore` it's still possible\n // that we might trigger the end node because of a parent mode\n if (mode.endsWithParent) {\n return endOfMode(mode.parent, match, matchPlusRemainder);\n }\n }\n\n /**\n * Handle matching but then ignoring a sequence of text\n *\n * @param {string} lexeme - string containing full match text\n */\n function doIgnore(lexeme) {\n if (top.matcher.regexIndex === 0) {\n // no more regexes to potentially match here, so we move the cursor forward one\n // space\n modeBuffer += lexeme[0];\n return 1;\n } else {\n // no need to move the cursor, we still have additional regexes to try and\n // match at this very spot\n resumeScanAtSamePosition = true;\n return 0;\n }\n }\n\n /**\n * Handle the start of a new potential mode match\n *\n * @param {EnhancedMatch} match - the current match\n * @returns {number} how far to advance the parse cursor\n */\n function doBeginMatch(match) {\n const lexeme = match[0];\n const newMode = match.rule;\n\n const resp = new Response(newMode);\n // first internal before callbacks, then the public ones\n const beforeCallbacks = [newMode.__beforeBegin, newMode[\"on:begin\"]];\n for (const cb of beforeCallbacks) {\n if (!cb) continue;\n cb(match, resp);\n if (resp.isMatchIgnored) return doIgnore(lexeme);\n }\n\n if (newMode.skip) {\n modeBuffer += lexeme;\n } else {\n if (newMode.excludeBegin) {\n modeBuffer += lexeme;\n }\n processBuffer();\n if (!newMode.returnBegin && !newMode.excludeBegin) {\n modeBuffer = lexeme;\n }\n }\n startNewMode(newMode, match);\n return newMode.returnBegin ? 0 : lexeme.length;\n }\n\n /**\n * Handle the potential end of mode\n *\n * @param {RegExpMatchArray} match - the current match\n */\n function doEndMatch(match) {\n const lexeme = match[0];\n const matchPlusRemainder = codeToHighlight.substring(match.index);\n\n const endMode = endOfMode(top, match, matchPlusRemainder);\n if (!endMode) { return NO_MATCH; }\n\n const origin = top;\n if (top.endScope && top.endScope._wrap) {\n processBuffer();\n emitKeyword(lexeme, top.endScope._wrap);\n } else if (top.endScope && top.endScope._multi) {\n processBuffer();\n emitMultiClass(top.endScope, match);\n } else if (origin.skip) {\n modeBuffer += lexeme;\n } else {\n if (!(origin.returnEnd || origin.excludeEnd)) {\n modeBuffer += lexeme;\n }\n processBuffer();\n if (origin.excludeEnd) {\n modeBuffer = lexeme;\n }\n }\n do {\n if (top.scope) {\n emitter.closeNode();\n }\n if (!top.skip && !top.subLanguage) {\n relevance += top.relevance;\n }\n top = top.parent;\n } while (top !== endMode.parent);\n if (endMode.starts) {\n startNewMode(endMode.starts, match);\n }\n return origin.returnEnd ? 0 : lexeme.length;\n }\n\n function processContinuations() {\n const list = [];\n for (let current = top; current !== language; current = current.parent) {\n if (current.scope) {\n list.unshift(current.scope);\n }\n }\n list.forEach(item => emitter.openNode(item));\n }\n\n /** @type {{type?: MatchType, index?: number, rule?: Mode}}} */\n let lastMatch = {};\n\n /**\n * Process an individual match\n *\n * @param {string} textBeforeMatch - text preceding the match (since the last match)\n * @param {EnhancedMatch} [match] - the match itself\n */\n function processLexeme(textBeforeMatch, match) {\n const lexeme = match && match[0];\n\n // add non-matched text to the current mode buffer\n modeBuffer += textBeforeMatch;\n\n if (lexeme == null) {\n processBuffer();\n return 0;\n }\n\n // we've found a 0 width match and we're stuck, so we need to advance\n // this happens when we have badly behaved rules that have optional matchers to the degree that\n // sometimes they can end up matching nothing at all\n // Ref: https://github.com/highlightjs/highlight.js/issues/2140\n if (lastMatch.type === \"begin\" && match.type === \"end\" && lastMatch.index === match.index && lexeme === \"\") {\n // spit the \"skipped\" character that our regex choked on back into the output sequence\n modeBuffer += codeToHighlight.slice(match.index, match.index + 1);\n if (!SAFE_MODE) {\n /** @type {AnnotatedError} */\n const err = new Error(`0 width match regex (${languageName})`);\n err.languageName = languageName;\n err.badRule = lastMatch.rule;\n throw err;\n }\n return 1;\n }\n lastMatch = match;\n\n if (match.type === \"begin\") {\n return doBeginMatch(match);\n } else if (match.type === \"illegal\" && !ignoreIllegals) {\n // illegal match, we do not continue processing\n /** @type {AnnotatedError} */\n const err = new Error('Illegal lexeme \"' + lexeme + '\" for mode \"' + (top.scope || '') + '\"');\n err.mode = top;\n throw err;\n } else if (match.type === \"end\") {\n const processed = doEndMatch(match);\n if (processed !== NO_MATCH) {\n return processed;\n }\n }\n\n // edge case for when illegal matches $ (end of line) which is technically\n // a 0 width match but not a begin/end match so it's not caught by the\n // first handler (when ignoreIllegals is true)\n if (match.type === \"illegal\" && lexeme === \"\") {\n // advance so we aren't stuck in an infinite loop\n modeBuffer += \"\\n\";\n return 1;\n }\n\n // infinite loops are BAD, this is a last ditch catch all. if we have a\n // decent number of iterations yet our index (cursor position in our\n // parsing) still 3x behind our index then something is very wrong\n // so we bail\n if (iterations > 100000 && iterations > match.index * 3) {\n const err = new Error('potential infinite loop, way more iterations than matches');\n throw err;\n }\n\n /*\n Why might be find ourselves here? An potential end match that was\n triggered but could not be completed. IE, `doEndMatch` returned NO_MATCH.\n (this could be because a callback requests the match be ignored, etc)\n\n This causes no real harm other than stopping a few times too many.\n */\n\n modeBuffer += lexeme;\n return lexeme.length;\n }\n\n const language = getLanguage(languageName);\n if (!language) {\n error(LANGUAGE_NOT_FOUND.replace(\"{}\", languageName));\n throw new Error('Unknown language: \"' + languageName + '\"');\n }\n\n const md = compileLanguage(language);\n let result = '';\n /** @type {CompiledMode} */\n let top = continuation || md;\n /** @type Record */\n const continuations = {}; // keep continuations for sub-languages\n const emitter = new options.__emitter(options);\n processContinuations();\n let modeBuffer = '';\n let relevance = 0;\n let index = 0;\n let iterations = 0;\n let resumeScanAtSamePosition = false;\n\n try {\n if (!language.__emitTokens) {\n top.matcher.considerAll();\n\n for (;;) {\n iterations++;\n if (resumeScanAtSamePosition) {\n // only regexes not matched previously will now be\n // considered for a potential match\n resumeScanAtSamePosition = false;\n } else {\n top.matcher.considerAll();\n }\n top.matcher.lastIndex = index;\n\n const match = top.matcher.exec(codeToHighlight);\n // console.log(\"match\", match[0], match.rule && match.rule.begin)\n\n if (!match) break;\n\n const beforeMatch = codeToHighlight.substring(index, match.index);\n const processedCount = processLexeme(beforeMatch, match);\n index = match.index + processedCount;\n }\n processLexeme(codeToHighlight.substring(index));\n } else {\n language.__emitTokens(codeToHighlight, emitter);\n }\n\n emitter.finalize();\n result = emitter.toHTML();\n\n return {\n language: languageName,\n value: result,\n relevance,\n illegal: false,\n _emitter: emitter,\n _top: top\n };\n } catch (err) {\n if (err.message && err.message.includes('Illegal')) {\n return {\n language: languageName,\n value: escape(codeToHighlight),\n illegal: true,\n relevance: 0,\n _illegalBy: {\n message: err.message,\n index,\n context: codeToHighlight.slice(index - 100, index + 100),\n mode: err.mode,\n resultSoFar: result\n },\n _emitter: emitter\n };\n } else if (SAFE_MODE) {\n return {\n language: languageName,\n value: escape(codeToHighlight),\n illegal: false,\n relevance: 0,\n errorRaised: err,\n _emitter: emitter,\n _top: top\n };\n } else {\n throw err;\n }\n }\n }\n\n /**\n * returns a valid highlight result, without actually doing any actual work,\n * auto highlight starts with this and it's possible for small snippets that\n * auto-detection may not find a better match\n * @param {string} code\n * @returns {HighlightResult}\n */\n function justTextHighlightResult(code) {\n const result = {\n value: escape(code),\n illegal: false,\n relevance: 0,\n _top: PLAINTEXT_LANGUAGE,\n _emitter: new options.__emitter(options)\n };\n result._emitter.addText(code);\n return result;\n }\n\n /**\n Highlighting with language detection. Accepts a string with the code to\n highlight. Returns an object with the following properties:\n\n - language (detected language)\n - relevance (int)\n - value (an HTML string with highlighting markup)\n - secondBest (object with the same structure for second-best heuristically\n detected language, may be absent)\n\n @param {string} code\n @param {Array} [languageSubset]\n @returns {AutoHighlightResult}\n */\n function highlightAuto(code, languageSubset) {\n languageSubset = languageSubset || options.languages || Object.keys(languages);\n const plaintext = justTextHighlightResult(code);\n\n const results = languageSubset.filter(getLanguage).filter(autoDetection).map(name =>\n _highlight(name, code, false)\n );\n results.unshift(plaintext); // plaintext is always an option\n\n const sorted = results.sort((a, b) => {\n // sort base on relevance\n if (a.relevance !== b.relevance) return b.relevance - a.relevance;\n\n // always award the tie to the base language\n // ie if C++ and Arduino are tied, it's more likely to be C++\n if (a.language && b.language) {\n if (getLanguage(a.language).supersetOf === b.language) {\n return 1;\n } else if (getLanguage(b.language).supersetOf === a.language) {\n return -1;\n }\n }\n\n // otherwise say they are equal, which has the effect of sorting on\n // relevance while preserving the original ordering - which is how ties\n // have historically been settled, ie the language that comes first always\n // wins in the case of a tie\n return 0;\n });\n\n const [best, secondBest] = sorted;\n\n /** @type {AutoHighlightResult} */\n const result = best;\n result.secondBest = secondBest;\n\n return result;\n }\n\n /**\n * Builds new class name for block given the language name\n *\n * @param {HTMLElement} element\n * @param {string} [currentLang]\n * @param {string} [resultLang]\n */\n function updateClassName(element, currentLang, resultLang) {\n const language = (currentLang && aliases[currentLang]) || resultLang;\n\n element.classList.add(\"hljs\");\n element.classList.add(`language-${language}`);\n }\n\n /**\n * Applies highlighting to a DOM node containing code.\n *\n * @param {HighlightedHTMLElement} element - the HTML element to highlight\n */\n function highlightElement(element) {\n /** @type HTMLElement */\n let node = null;\n const language = blockLanguage(element);\n\n if (shouldNotHighlight(language)) return;\n\n fire(\"before:highlightElement\",\n { el: element, language });\n\n if (element.dataset.highlighted) {\n console.log(\"Element previously highlighted. To highlight again, first unset `dataset.highlighted`.\", element);\n return;\n }\n\n // we should be all text, no child nodes (unescaped HTML) - this is possibly\n // an HTML injection attack - it's likely too late if this is already in\n // production (the code has likely already done its damage by the time\n // we're seeing it)... but we yell loudly about this so that hopefully it's\n // more likely to be caught in development before making it to production\n if (element.children.length > 0) {\n if (!options.ignoreUnescapedHTML) {\n console.warn(\"One of your code blocks includes unescaped HTML. This is a potentially serious security risk.\");\n console.warn(\"https://github.com/highlightjs/highlight.js/wiki/security\");\n console.warn(\"The element with unescaped HTML:\");\n console.warn(element);\n }\n if (options.throwUnescapedHTML) {\n const err = new HTMLInjectionError(\n \"One of your code blocks includes unescaped HTML.\",\n element.innerHTML\n );\n throw err;\n }\n }\n\n node = element;\n const text = node.textContent;\n const result = language ? highlight(text, { language, ignoreIllegals: true }) : highlightAuto(text);\n\n element.innerHTML = result.value;\n element.dataset.highlighted = \"yes\";\n updateClassName(element, language, result.language);\n element.result = {\n language: result.language,\n // TODO: remove with version 11.0\n re: result.relevance,\n relevance: result.relevance\n };\n if (result.secondBest) {\n element.secondBest = {\n language: result.secondBest.language,\n relevance: result.secondBest.relevance\n };\n }\n\n fire(\"after:highlightElement\", { el: element, result, text });\n }\n\n /**\n * Updates highlight.js global options with the passed options\n *\n * @param {Partial} userOptions\n */\n function configure(userOptions) {\n options = inherit(options, userOptions);\n }\n\n // TODO: remove v12, deprecated\n const initHighlighting = () => {\n highlightAll();\n deprecated(\"10.6.0\", \"initHighlighting() deprecated. Use highlightAll() now.\");\n };\n\n // TODO: remove v12, deprecated\n function initHighlightingOnLoad() {\n highlightAll();\n deprecated(\"10.6.0\", \"initHighlightingOnLoad() deprecated. Use highlightAll() now.\");\n }\n\n let wantsHighlight = false;\n\n /**\n * auto-highlights all pre>code elements on the page\n */\n function highlightAll() {\n function boot() {\n // if a highlight was requested before DOM was loaded, do now\n highlightAll();\n }\n\n // if we are called too early in the loading process\n if (document.readyState === \"loading\") {\n // make sure the event listener is only added once\n if (!wantsHighlight) {\n window.addEventListener('DOMContentLoaded', boot, false);\n }\n wantsHighlight = true;\n return;\n }\n\n const blocks = document.querySelectorAll(options.cssSelector);\n blocks.forEach(highlightElement);\n }\n\n /**\n * Register a language grammar module\n *\n * @param {string} languageName\n * @param {LanguageFn} languageDefinition\n */\n function registerLanguage(languageName, languageDefinition) {\n let lang = null;\n try {\n lang = languageDefinition(hljs);\n } catch (error$1) {\n error(\"Language definition for '{}' could not be registered.\".replace(\"{}\", languageName));\n // hard or soft error\n if (!SAFE_MODE) { throw error$1; } else { error(error$1); }\n // languages that have serious errors are replaced with essentially a\n // \"plaintext\" stand-in so that the code blocks will still get normal\n // css classes applied to them - and one bad language won't break the\n // entire highlighter\n lang = PLAINTEXT_LANGUAGE;\n }\n // give it a temporary name if it doesn't have one in the meta-data\n if (!lang.name) lang.name = languageName;\n languages[languageName] = lang;\n lang.rawDefinition = languageDefinition.bind(null, hljs);\n\n if (lang.aliases) {\n registerAliases(lang.aliases, { languageName });\n }\n }\n\n /**\n * Remove a language grammar module\n *\n * @param {string} languageName\n */\n function unregisterLanguage(languageName) {\n delete languages[languageName];\n for (const alias of Object.keys(aliases)) {\n if (aliases[alias] === languageName) {\n delete aliases[alias];\n }\n }\n }\n\n /**\n * @returns {string[]} List of language internal names\n */\n function listLanguages() {\n return Object.keys(languages);\n }\n\n /**\n * @param {string} name - name of the language to retrieve\n * @returns {Language | undefined}\n */\n function getLanguage(name) {\n name = (name || '').toLowerCase();\n return languages[name] || languages[aliases[name]];\n }\n\n /**\n *\n * @param {string|string[]} aliasList - single alias or list of aliases\n * @param {{languageName: string}} opts\n */\n function registerAliases(aliasList, { languageName }) {\n if (typeof aliasList === 'string') {\n aliasList = [aliasList];\n }\n aliasList.forEach(alias => { aliases[alias.toLowerCase()] = languageName; });\n }\n\n /**\n * Determines if a given language has auto-detection enabled\n * @param {string} name - name of the language\n */\n function autoDetection(name) {\n const lang = getLanguage(name);\n return lang && !lang.disableAutodetect;\n }\n\n /**\n * Upgrades the old highlightBlock plugins to the new\n * highlightElement API\n * @param {HLJSPlugin} plugin\n */\n function upgradePluginAPI(plugin) {\n // TODO: remove with v12\n if (plugin[\"before:highlightBlock\"] && !plugin[\"before:highlightElement\"]) {\n plugin[\"before:highlightElement\"] = (data) => {\n plugin[\"before:highlightBlock\"](\n Object.assign({ block: data.el }, data)\n );\n };\n }\n if (plugin[\"after:highlightBlock\"] && !plugin[\"after:highlightElement\"]) {\n plugin[\"after:highlightElement\"] = (data) => {\n plugin[\"after:highlightBlock\"](\n Object.assign({ block: data.el }, data)\n );\n };\n }\n }\n\n /**\n * @param {HLJSPlugin} plugin\n */\n function addPlugin(plugin) {\n upgradePluginAPI(plugin);\n plugins.push(plugin);\n }\n\n /**\n * @param {HLJSPlugin} plugin\n */\n function removePlugin(plugin) {\n const index = plugins.indexOf(plugin);\n if (index !== -1) {\n plugins.splice(index, 1);\n }\n }\n\n /**\n *\n * @param {PluginEvent} event\n * @param {any} args\n */\n function fire(event, args) {\n const cb = event;\n plugins.forEach(function(plugin) {\n if (plugin[cb]) {\n plugin[cb](args);\n }\n });\n }\n\n /**\n * DEPRECATED\n * @param {HighlightedHTMLElement} el\n */\n function deprecateHighlightBlock(el) {\n deprecated(\"10.7.0\", \"highlightBlock will be removed entirely in v12.0\");\n deprecated(\"10.7.0\", \"Please use highlightElement now.\");\n\n return highlightElement(el);\n }\n\n /* Interface definition */\n Object.assign(hljs, {\n highlight,\n highlightAuto,\n highlightAll,\n highlightElement,\n // TODO: Remove with v12 API\n highlightBlock: deprecateHighlightBlock,\n configure,\n initHighlighting,\n initHighlightingOnLoad,\n registerLanguage,\n unregisterLanguage,\n listLanguages,\n getLanguage,\n registerAliases,\n autoDetection,\n inherit,\n addPlugin,\n removePlugin\n });\n\n hljs.debugMode = function() { SAFE_MODE = false; };\n hljs.safeMode = function() { SAFE_MODE = true; };\n hljs.versionString = version;\n\n hljs.regex = {\n concat: concat,\n lookahead: lookahead,\n either: either,\n optional: optional,\n anyNumberOfTimes: anyNumberOfTimes\n };\n\n for (const key in MODES) {\n // @ts-ignore\n if (typeof MODES[key] === \"object\") {\n // @ts-ignore\n deepFreeze(MODES[key]);\n }\n }\n\n // merge all the modes/regexes into our main object\n Object.assign(hljs, MODES);\n\n return hljs;\n};\n\n// Other names for the variable may break build script\nconst highlight = HLJS({});\n\n// returns a new instance of the highlighter to be used for extensions\n// check https://github.com/wooorm/lowlight/issues/47\nhighlight.newInstance = () => HLJS({});\n\nmodule.exports = highlight;\nhighlight.HighlightJS = highlight;\nhighlight.default = highlight;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTA3NC5qcyIsIm1hcHBpbmdzIjoiQUFBQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBOztBQUVBLGNBQWMseUNBQXlDO0FBQ3ZELGNBQWMscUNBQXFDO0FBQ25EOztBQUVBO0FBQ0E7QUFDQSxhQUFhLGNBQWM7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekIsd0JBQXdCO0FBQ3hCLHdCQUF3QjtBQUN4QiwwQkFBMEI7QUFDMUIsMEJBQTBCO0FBQzFCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxHQUFHO0FBQ2QsV0FBVyxzQkFBc0I7QUFDakMsYUFBYSxHQUFHO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILG9CQUFvQixHQUFHO0FBQ3ZCOztBQUVBO0FBQ0EsYUFBYSxRQUFRO0FBQ3JCLGNBQWMsd0JBQXdCO0FBQ3RDLGNBQWMsc0JBQXNCO0FBQ3BDLGNBQWMsc0JBQXNCO0FBQ3BDLGNBQWMsY0FBYztBQUM1Qjs7QUFFQSxlQUFlLDJEQUEyRDtBQUMxRSxlQUFlLDhCQUE4QjtBQUM3Qzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFlBQVksZ0JBQWdCO0FBQzVCO0FBQ0EsaUNBQWlDLFFBQVE7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsT0FBTyxFQUFFLGVBQWU7QUFDakMsa0NBQWtDLEVBQUUsRUFBRSxrQkFBa0I7QUFDeEQ7QUFDQTtBQUNBO0FBQ0EsWUFBWSxPQUFPLEVBQUUsS0FBSztBQUMxQjs7QUFFQSxXQUFXLFVBQVU7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLE1BQU07QUFDbkIsY0FBYyxzQkFBc0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsYUFBYSxNQUFNO0FBQ25CO0FBQ0E7O0FBRUE7QUFDQSxRQUFRLDBCQUEwQjtBQUNsQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsTUFBTTtBQUNuQjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsUUFBUTtBQUNyQjtBQUNBLG1DQUFtQyxVQUFVO0FBQzdDO0FBQ0E7O0FBRUEsZUFBZSxxREFBcUQsVUFBVTtBQUM5RSxlQUFlLHVEQUF1RDtBQUN0RSxjQUFjLGdDQUFnQztBQUM5Qzs7QUFFQSxjQUFjLFVBQVU7QUFDeEIsMEJBQTBCO0FBQzFCO0FBQ0EsbUJBQW1CO0FBQ25CO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLGVBQWU7O0FBRWYsY0FBYyxNQUFNO0FBQ3BCO0FBQ0E7QUFDQTs7QUFFQSxjQUFjLFFBQVE7QUFDdEI7QUFDQTtBQUNBLDJCQUEyQixPQUFPO0FBQ2xDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsZ0JBQWdCLHFDQUFxQztBQUNyRCxhQUFhLFVBQVU7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxhQUFhLFVBQVU7QUFDdkIsYUFBYSxNQUFNO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGFBQWEsTUFBTTtBQUNuQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBLGFBQWEsR0FBRztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsYUFBYSxRQUFRO0FBQ3JCO0FBQ0E7QUFDQSx1QkFBdUI7O0FBRXZCO0FBQ0E7O0FBRUEsY0FBYyxRQUFRO0FBQ3RCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxhQUFhLFdBQVcsaUJBQWlCO0FBQ3pDLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVDQUF1QyxLQUFLOztBQUU1QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxXQUFXLFFBQVE7QUFDbkIsYUFBYTtBQUNiOztBQUVBO0FBQ0EsV0FBVyxrQkFBa0I7QUFDN0IsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxXQUFXLGtCQUFrQjtBQUM3QixhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxXQUFXLGtCQUFrQjtBQUM3QixhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxXQUFXLGtCQUFrQjtBQUM3QixhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxXQUFXLHVCQUF1QjtBQUNsQyxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFlBQVksa0NBQWtDO0FBQzlDLGFBQWE7QUFDYjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQSxnQkFBZ0IscUJBQXFCOztBQUVyQztBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsb0VBQW9FO0FBQy9FLGFBQWE7QUFDYjtBQUNBO0FBQ0EsY0FBYyxVQUFVLHNCQUFzQjtBQUM5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxXQUFXLGlCQUFpQjtBQUM1QixhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxxQkFBcUI7QUFDaEMsWUFBWSxtQkFBbUI7QUFDL0IsYUFBYTtBQUNiO0FBQ0EsMkNBQTJDLFVBQVU7QUFDckQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRyxnQkFBZ0IsR0FBRztBQUN0Qjs7QUFFQSxjQUFjLDZCQUE2QjtBQUMzQyxjQUFjLHFDQUFxQzs7QUFFbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhGQUE4RjtBQUM5Rix5Q0FBeUM7QUFDekMsK0VBQStFLHNEQUFzRDs7QUFFckk7QUFDQSxXQUFXLGlCQUFpQiw0QkFBNEI7QUFDeEQ7QUFDQSwwQkFBMEI7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGNBQWM7QUFDN0I7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsaUJBQWlCO0FBQzVCLFdBQVcsaUJBQWlCO0FBQzVCLFdBQVcsV0FBVztBQUN0QixhQUFhO0FBQ2I7QUFDQSxxREFBcUQ7QUFDckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLEdBQUc7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0NBQXdDLEdBQUcsa0VBQWtFLEVBQUU7QUFDL0c7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEVBQUU7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZUFBZTtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixjQUFjO0FBQy9CLGlDQUFpQywrQkFBK0I7QUFDaEUsaUJBQWlCLGNBQWM7QUFDL0IsK0JBQStCO0FBQy9CLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBLFVBQVUseUNBQXlDO0FBQ25ELFVBQVUsb0NBQW9DO0FBQzlDOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxrQkFBa0I7QUFDN0IsV0FBVyxrQkFBa0I7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsdUNBQXVDO0FBQ3ZDLHVDQUF1QyxtQkFBbUI7O0FBRTFEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0Msa0JBQWtCO0FBQ3REO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyx5REFBeUQ7QUFDcEUsV0FBVyxTQUFTO0FBQ3BCO0FBQ0E7QUFDQSxhQUFhLDRDQUE0QztBQUN6RDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxRQUFRO0FBQ3JCLGFBQWEsZUFBZTtBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkI7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxVQUFVO0FBQ1Y7QUFDQTs7QUFFQTtBQUNBLFdBQVcsUUFBUTtBQUNuQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBLHVCQUF1QixRQUFRO0FBQy9COztBQUVBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQjtBQUNBO0FBQ0EsMEJBQTBCLFFBQVEsR0FBRyxRQUFROztBQUU3QyxrQ0FBa0MsUUFBUSxJQUFJLFFBQVE7QUFDdEQsc0JBQXNCLFFBQVEsR0FBRyxRQUFRO0FBQ3pDOztBQUVBOztBQUVBO0FBQ0EsVUFBVSxxQ0FBcUM7QUFDL0M7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsY0FBYztBQUN6QixXQUFXLHdCQUF3QjtBQUNuQyxZQUFZLCtCQUErQjtBQUMzQztBQUNBLDBDQUEwQyxLQUFLO0FBQy9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxrQkFBa0IscUJBQXFCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsV0FBVyxjQUFjO0FBQ3pCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDZFQUE2RTtBQUM3RTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHNDQUFzQyxtQkFBbUI7QUFDekQsb0RBQW9ELGNBQWM7QUFDbEU7O0FBRUE7QUFDQSxXQUFXLGNBQWM7QUFDekI7QUFDQTtBQUNBOztBQUVBO0FBQ0EsdUVBQXVFO0FBQ3ZFO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsb0NBQW9DLGlCQUFpQjtBQUNyRCxnREFBZ0QsY0FBYztBQUM5RDs7QUFFQTtBQUNBLHVDQUF1QztBQUN2Qzs7QUFFQTtBQUNBO0FBQ0EsYUFBYTtBQUNiOztBQUVBLFdBQVcsY0FBYztBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFdBQVcsY0FBYztBQUN6QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx3QkFBd0I7QUFDeEI7QUFDQTtBQUNBLHNCQUFzQjtBQUN0Qjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxVQUFVLDZCQUE2QjtBQUN2QyxVQUFVLHFDQUFxQztBQUMvQyxVQUFVLGlDQUFpQztBQUMzQyxVQUFVLG1DQUFtQztBQUM3QyxVQUFVLHlDQUF5QztBQUNuRDs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxVQUFVO0FBQ3JCLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxpQkFBaUI7QUFDOUIsYUFBYSxTQUFTO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvRUFBb0UsZUFBZTtBQUNuRjtBQUNBOztBQUVBLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQjs7QUFFcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlEQUF5RCxPQUFPO0FBQ2hFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxjQUFjO0FBQzNCLGVBQWU7QUFDZjtBQUNBO0FBQ0E7O0FBRUEsMkRBQTJELDJCQUEyQjs7QUFFdEY7QUFDQSx1Q0FBdUMsYUFBYTtBQUNwRDtBQUNBO0FBQ0EsaUNBQWlDLGlCQUFpQjtBQUNsRDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsTUFBTTtBQUNuQixhQUFhLHFCQUFxQjtBQUNsQyxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNDQUFzQztBQUN0QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwREFBMEQsaUJBQWlCO0FBQzNFOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsd0NBQXdDLDRDQUE0Qzs7QUFFcEY7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHVFQUF1RTs7QUFFdkU7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxhQUFhO0FBQ3hCLGFBQWEsU0FBUztBQUN0QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQkFBK0IsZ0JBQWdCO0FBQy9DLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QixxREFBcUQ7QUFDbEY7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7OztBQUlBO0FBQ0EsVUFBVSw2QkFBNkI7QUFDdkMsVUFBVSxxQ0FBcUM7QUFDL0MsVUFBVSxzQ0FBc0M7QUFDaEQsVUFBVSxpQ0FBaUM7QUFDM0MsVUFBVSxnQ0FBZ0M7QUFDMUMsVUFBVSxtQ0FBbUM7QUFDN0MsVUFBVSxvQ0FBb0M7QUFDOUMsVUFBVSxvQ0FBb0M7QUFDOUMsVUFBVSxtQ0FBbUM7QUFDN0MsVUFBVSwrQ0FBK0M7QUFDekQsVUFBVSwrQ0FBK0M7QUFDekQsVUFBVSwwQ0FBMEM7QUFDcEQsVUFBVSw0Q0FBNEM7QUFDdEQsVUFBVSw4Q0FBOEM7QUFDeEQsVUFBVSwrQ0FBK0M7QUFDekQsVUFBVSw0Q0FBNEM7QUFDdEQsVUFBVSx5Q0FBeUM7QUFDbkQsVUFBVSx3Q0FBd0M7QUFDbEQ7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSxhQUFhLDBCQUEwQjtBQUN2QztBQUNBLGFBQWEsd0JBQXdCO0FBQ3JDO0FBQ0EsYUFBYSxjQUFjO0FBQzNCOztBQUVBO0FBQ0E7QUFDQTtBQUNBLDZEQUE2RDtBQUM3RCxhQUFhLFVBQVU7QUFDdkIsK0JBQStCOztBQUUvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGFBQWEsd0JBQXdCO0FBQ3JDO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkNBQTJDO0FBQzNDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLHFCQUFxQjtBQUMzQztBQUNBLGFBQWEsUUFBUTtBQUNyQixhQUFhLDJCQUEyQjtBQUN4QyxhQUFhLFNBQVM7QUFDdEI7QUFDQSxlQUFlLGlCQUFpQjtBQUNoQyxnQkFBZ0IsUUFBUTtBQUN4QixnQkFBZ0IsUUFBUTtBQUN4QixnQkFBZ0IsUUFBUTtBQUN4QixnQkFBZ0IsUUFBUTtBQUN4QixnQkFBZ0IsY0FBYztBQUM5QixnQkFBZ0IsU0FBUztBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esd0NBQXdDOztBQUV4QyxlQUFlLHdCQUF3QjtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsUUFBUTtBQUNyQixhQUFhLFFBQVE7QUFDckIsYUFBYSxVQUFVO0FBQ3ZCLGFBQWEsZUFBZTtBQUM1QixlQUFlLGlCQUFpQjtBQUNoQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGVBQWUsY0FBYztBQUM3QixlQUFlLFFBQVE7QUFDdkIsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0RBQW9ELGNBQWM7QUFDbEUsUUFBUTtBQUNSO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsZUFBZSxlQUFlO0FBQzlCLGVBQWUsa0JBQWtCO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQkFBK0IsS0FBSztBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGVBQWUsY0FBYztBQUM3QixlQUFlLGtCQUFrQjtBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGtDQUFrQyxVQUFVLGNBQWM7QUFDMUQ7QUFDQTs7QUFFQTtBQUNBLGVBQWUsZUFBZTtBQUM5QixlQUFlLGtCQUFrQjtBQUNqQyxlQUFlLFFBQVE7QUFDdkIsaUJBQWlCLHFCQUFxQjtBQUN0QztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZUFBZSxlQUFlO0FBQzlCLGlCQUFpQixRQUFRO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsa0JBQWtCO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esc0JBQXNCOztBQUV0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDhCQUE4QixzQkFBc0I7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGdCQUFnQixpREFBaUQ7QUFDakU7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsZUFBZTtBQUM5QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLGdCQUFnQjtBQUNyQyx3REFBd0QsYUFBYTtBQUNyRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0EsbUJBQW1CLGdCQUFnQjtBQUNuQztBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDBDQUEwQztBQUMxQztBQUNBOztBQUVBO0FBQ0E7QUFDQSxlQUFlLGNBQWM7QUFDN0I7QUFDQTtBQUNBLDhCQUE4QjtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLFFBQVE7QUFDckIsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxZQUFZLFFBQVE7QUFDcEIsWUFBWSxlQUFlO0FBQzNCLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0M7O0FBRWhDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDs7QUFFQSxlQUFlLHFCQUFxQjtBQUNwQztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsYUFBYSxhQUFhO0FBQzFCLGFBQWEsUUFBUTtBQUNyQixhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBOztBQUVBO0FBQ0Esc0NBQXNDLFNBQVM7QUFDL0M7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsYUFBYSx3QkFBd0I7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLFFBQVEsdUJBQXVCOztBQUUvQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxnREFBZ0QsZ0NBQWdDOztBQUVoRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEscUNBQXFDLDJCQUEyQjtBQUNoRTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLHNCQUFzQjtBQUNuQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsUUFBUTtBQUNyQixhQUFhLFlBQVk7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTix3Q0FBd0MsdUNBQXVDO0FBQy9FO0FBQ0Esd0JBQXdCLGlCQUFpQixPQUFPO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esc0NBQXNDLGNBQWM7QUFDcEQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsZUFBZSxVQUFVO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsYUFBYSxRQUFRO0FBQ3JCLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxhQUFhLGlCQUFpQjtBQUM5QixjQUFjLHVCQUF1QjtBQUNyQztBQUNBLHdDQUF3QyxjQUFjO0FBQ3REO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQyw4Q0FBOEM7QUFDL0U7O0FBRUE7QUFDQTtBQUNBLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsWUFBWTtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEIsZ0JBQWdCO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQixnQkFBZ0I7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxhQUFhLFlBQVk7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGFBQWEsWUFBWTtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsYUFBYSxhQUFhO0FBQzFCLGFBQWEsS0FBSztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0EsYUFBYSx3QkFBd0I7QUFDckM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSCxnQ0FBZ0M7QUFDaEMsK0JBQStCO0FBQy9COztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLHlCQUF5Qjs7QUFFekI7QUFDQTtBQUNBLHFDQUFxQzs7QUFFckM7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vb2JzaWRpYW4tbWluZG1hcC1uZXh0Z2VuLy4vbm9kZV9tb2R1bGVzLy5wbnBtL2hpZ2hsaWdodC5qc0AxMS4xMS4xL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2NvcmUuanM/OWZlNyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby1tdWx0aS1hc3NpZ24gKi9cblxuZnVuY3Rpb24gZGVlcEZyZWV6ZShvYmopIHtcbiAgaWYgKG9iaiBpbnN0YW5jZW9mIE1hcCkge1xuICAgIG9iai5jbGVhciA9XG4gICAgICBvYmouZGVsZXRlID1cbiAgICAgIG9iai5zZXQgPVxuICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdtYXAgaXMgcmVhZC1vbmx5Jyk7XG4gICAgICAgIH07XG4gIH0gZWxzZSBpZiAob2JqIGluc3RhbmNlb2YgU2V0KSB7XG4gICAgb2JqLmFkZCA9XG4gICAgICBvYmouY2xlYXIgPVxuICAgICAgb2JqLmRlbGV0ZSA9XG4gICAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3NldCBpcyByZWFkLW9ubHknKTtcbiAgICAgICAgfTtcbiAgfVxuXG4gIC8vIEZyZWV6ZSBzZWxmXG4gIE9iamVjdC5mcmVlemUob2JqKTtcblxuICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmopLmZvckVhY2goKG5hbWUpID0+IHtcbiAgICBjb25zdCBwcm9wID0gb2JqW25hbWVdO1xuICAgIGNvbnN0IHR5cGUgPSB0eXBlb2YgcHJvcDtcblxuICAgIC8vIEZyZWV6ZSBwcm9wIGlmIGl0IGlzIGFuIG9iamVjdCBvciBmdW5jdGlvbiBhbmQgYWxzbyBub3QgYWxyZWFkeSBmcm96ZW5cbiAgICBpZiAoKHR5cGUgPT09ICdvYmplY3QnIHx8IHR5cGUgPT09ICdmdW5jdGlvbicpICYmICFPYmplY3QuaXNGcm96ZW4ocHJvcCkpIHtcbiAgICAgIGRlZXBGcmVlemUocHJvcCk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gb2JqO1xufVxuXG4vKiogQHR5cGVkZWYge2ltcG9ydCgnaGlnaGxpZ2h0LmpzJykuQ2FsbGJhY2tSZXNwb25zZX0gQ2FsbGJhY2tSZXNwb25zZSAqL1xuLyoqIEB0eXBlZGVmIHtpbXBvcnQoJ2hpZ2hsaWdodC5qcycpLkNvbXBpbGVkTW9kZX0gQ29tcGlsZWRNb2RlICovXG4vKiogQGltcGxlbWVudHMgQ2FsbGJhY2tSZXNwb25zZSAqL1xuXG5jbGFzcyBSZXNwb25zZSB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge0NvbXBpbGVkTW9kZX0gbW9kZVxuICAgKi9cbiAgY29uc3RydWN0b3IobW9kZSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZmluZWRcbiAgICBpZiAobW9kZS5kYXRhID09PSB1bmRlZmluZWQpIG1vZGUuZGF0YSA9IHt9O1xuXG4gICAgdGhpcy5kYXRhID0gbW9kZS5kYXRhO1xuICAgIHRoaXMuaXNNYXRjaElnbm9yZWQgPSBmYWxzZTtcbiAgfVxuXG4gIGlnbm9yZU1hdGNoKCkge1xuICAgIHRoaXMuaXNNYXRjaElnbm9yZWQgPSB0cnVlO1xuICB9XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBlc2NhcGVIVE1MKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZVxuICAgIC5yZXBsYWNlKC8mL2csICcmYW1wOycpXG4gICAgLnJlcGxhY2UoLzwvZywgJyZsdDsnKVxuICAgIC5yZXBsYWNlKC8+L2csICcmZ3Q7JylcbiAgICAucmVwbGFjZSgvXCIvZywgJyZxdW90OycpXG4gICAgLnJlcGxhY2UoLycvZywgJyYjeDI3OycpO1xufVxuXG4vKipcbiAqIHBlcmZvcm1zIGEgc2hhbGxvdyBtZXJnZSBvZiBtdWx0aXBsZSBvYmplY3RzIGludG8gb25lXG4gKlxuICogQHRlbXBsYXRlIFRcbiAqIEBwYXJhbSB7VH0gb3JpZ2luYWxcbiAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZyxhbnk+W119IG9iamVjdHNcbiAqIEByZXR1cm5zIHtUfSBhIHNpbmdsZSBuZXcgb2JqZWN0XG4gKi9cbmZ1bmN0aW9uIGluaGVyaXQkMShvcmlnaW5hbCwgLi4ub2JqZWN0cykge1xuICAvKiogQHR5cGUgUmVjb3JkPHN0cmluZyxhbnk+ICovXG4gIGNvbnN0IHJlc3VsdCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbiAgZm9yIChjb25zdCBrZXkgaW4gb3JpZ2luYWwpIHtcbiAgICByZXN1bHRba2V5XSA9IG9yaWdpbmFsW2tleV07XG4gIH1cbiAgb2JqZWN0cy5mb3JFYWNoKGZ1bmN0aW9uKG9iaikge1xuICAgIGZvciAoY29uc3Qga2V5IGluIG9iaikge1xuICAgICAgcmVzdWx0W2tleV0gPSBvYmpba2V5XTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gLyoqIEB0eXBlIHtUfSAqLyAocmVzdWx0KTtcbn1cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBSZW5kZXJlclxuICogQHByb3BlcnR5IHsodGV4dDogc3RyaW5nKSA9PiB2b2lkfSBhZGRUZXh0XG4gKiBAcHJvcGVydHkgeyhub2RlOiBOb2RlKSA9PiB2b2lkfSBvcGVuTm9kZVxuICogQHByb3BlcnR5IHsobm9kZTogTm9kZSkgPT4gdm9pZH0gY2xvc2VOb2RlXG4gKiBAcHJvcGVydHkgeygpID0+IHN0cmluZ30gdmFsdWVcbiAqL1xuXG4vKiogQHR5cGVkZWYge3tzY29wZT86IHN0cmluZywgbGFuZ3VhZ2U/OiBzdHJpbmcsIHN1Ymxhbmd1YWdlPzogYm9vbGVhbn19IE5vZGUgKi9cbi8qKiBAdHlwZWRlZiB7e3dhbGs6IChyOiBSZW5kZXJlcikgPT4gdm9pZH19IFRyZWUgKi9cbi8qKiAqL1xuXG5jb25zdCBTUEFOX0NMT1NFID0gJzwvc3Bhbj4nO1xuXG4vKipcbiAqIERldGVybWluZXMgaWYgYSBub2RlIG5lZWRzIHRvIGJlIHdyYXBwZWQgaW4gPHNwYW4+XG4gKlxuICogQHBhcmFtIHtOb2RlfSBub2RlICovXG5jb25zdCBlbWl0c1dyYXBwaW5nVGFncyA9IChub2RlKSA9PiB7XG4gIC8vIHJhcmVseSB3ZSBjYW4gaGF2ZSBhIHN1Ymxhbmd1YWdlIHdoZXJlIGxhbmd1YWdlIGlzIHVuZGVmaW5lZFxuICAvLyBUT0RPOiB0cmFjayBkb3duIHdoeVxuICByZXR1cm4gISFub2RlLnNjb3BlO1xufTtcblxuLyoqXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEBwYXJhbSB7e3ByZWZpeDpzdHJpbmd9fSBvcHRpb25zXG4gKi9cbmNvbnN0IHNjb3BlVG9DU1NDbGFzcyA9IChuYW1lLCB7IHByZWZpeCB9KSA9PiB7XG4gIC8vIHN1Yi1sYW5ndWFnZVxuICBpZiAobmFtZS5zdGFydHNXaXRoKFwibGFuZ3VhZ2U6XCIpKSB7XG4gICAgcmV0dXJuIG5hbWUucmVwbGFjZShcImxhbmd1YWdlOlwiLCBcImxhbmd1YWdlLVwiKTtcbiAgfVxuICAvLyB0aWVyZWQgc2NvcGU6IGNvbW1lbnQubGluZVxuICBpZiAobmFtZS5pbmNsdWRlcyhcIi5cIikpIHtcbiAgICBjb25zdCBwaWVjZXMgPSBuYW1lLnNwbGl0KFwiLlwiKTtcbiAgICByZXR1cm4gW1xuICAgICAgYCR7cHJlZml4fSR7cGllY2VzLnNoaWZ0KCl9YCxcbiAgICAgIC4uLihwaWVjZXMubWFwKCh4LCBpKSA9PiBgJHt4fSR7XCJfXCIucmVwZWF0KGkgKyAxKX1gKSlcbiAgICBdLmpvaW4oXCIgXCIpO1xuICB9XG4gIC8vIHNpbXBsZSBzY29wZVxuICByZXR1cm4gYCR7cHJlZml4fSR7bmFtZX1gO1xufTtcblxuLyoqIEB0eXBlIHtSZW5kZXJlcn0gKi9cbmNsYXNzIEhUTUxSZW5kZXJlciB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IEhUTUxSZW5kZXJlclxuICAgKlxuICAgKiBAcGFyYW0ge1RyZWV9IHBhcnNlVHJlZSAtIHRoZSBwYXJzZSB0cmVlIChtdXN0IHN1cHBvcnQgYHdhbGtgIEFQSSlcbiAgICogQHBhcmFtIHt7Y2xhc3NQcmVmaXg6IHN0cmluZ319IG9wdGlvbnNcbiAgICovXG4gIGNvbnN0cnVjdG9yKHBhcnNlVHJlZSwgb3B0aW9ucykge1xuICAgIHRoaXMuYnVmZmVyID0gXCJcIjtcbiAgICB0aGlzLmNsYXNzUHJlZml4ID0gb3B0aW9ucy5jbGFzc1ByZWZpeDtcbiAgICBwYXJzZVRyZWUud2Fsayh0aGlzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIHRleHRzIHRvIHRoZSBvdXRwdXQgc3RyZWFtXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0ICovXG4gIGFkZFRleHQodGV4dCkge1xuICAgIHRoaXMuYnVmZmVyICs9IGVzY2FwZUhUTUwodGV4dCk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIG5vZGUgb3BlbiB0byB0aGUgb3V0cHV0IHN0cmVhbSAoaWYgbmVlZGVkKVxuICAgKlxuICAgKiBAcGFyYW0ge05vZGV9IG5vZGUgKi9cbiAgb3Blbk5vZGUobm9kZSkge1xuICAgIGlmICghZW1pdHNXcmFwcGluZ1RhZ3Mobm9kZSkpIHJldHVybjtcblxuICAgIGNvbnN0IGNsYXNzTmFtZSA9IHNjb3BlVG9DU1NDbGFzcyhub2RlLnNjb3BlLFxuICAgICAgeyBwcmVmaXg6IHRoaXMuY2xhc3NQcmVmaXggfSk7XG4gICAgdGhpcy5zcGFuKGNsYXNzTmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIG5vZGUgY2xvc2UgdG8gdGhlIG91dHB1dCBzdHJlYW0gKGlmIG5lZWRlZClcbiAgICpcbiAgICogQHBhcmFtIHtOb2RlfSBub2RlICovXG4gIGNsb3NlTm9kZShub2RlKSB7XG4gICAgaWYgKCFlbWl0c1dyYXBwaW5nVGFncyhub2RlKSkgcmV0dXJuO1xuXG4gICAgdGhpcy5idWZmZXIgKz0gU1BBTl9DTE9TRTtcbiAgfVxuXG4gIC8qKlxuICAgKiByZXR1cm5zIHRoZSBhY2N1bXVsYXRlZCBidWZmZXJcbiAgKi9cbiAgdmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuYnVmZmVyO1xuICB9XG5cbiAgLy8gaGVscGVyc1xuXG4gIC8qKlxuICAgKiBCdWlsZHMgYSBzcGFuIGVsZW1lbnRcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNsYXNzTmFtZSAqL1xuICBzcGFuKGNsYXNzTmFtZSkge1xuICAgIHRoaXMuYnVmZmVyICs9IGA8c3BhbiBjbGFzcz1cIiR7Y2xhc3NOYW1lfVwiPmA7XG4gIH1cbn1cblxuLyoqIEB0eXBlZGVmIHt7c2NvcGU/OiBzdHJpbmcsIGxhbmd1YWdlPzogc3RyaW5nLCBjaGlsZHJlbjogTm9kZVtdfSB8IHN0cmluZ30gTm9kZSAqL1xuLyoqIEB0eXBlZGVmIHt7c2NvcGU/OiBzdHJpbmcsIGxhbmd1YWdlPzogc3RyaW5nLCBjaGlsZHJlbjogTm9kZVtdfSB9IERhdGFOb2RlICovXG4vKiogQHR5cGVkZWYge2ltcG9ydCgnaGlnaGxpZ2h0LmpzJykuRW1pdHRlcn0gRW1pdHRlciAqL1xuLyoqICAqL1xuXG4vKiogQHJldHVybnMge0RhdGFOb2RlfSAqL1xuY29uc3QgbmV3Tm9kZSA9IChvcHRzID0ge30pID0+IHtcbiAgLyoqIEB0eXBlIERhdGFOb2RlICovXG4gIGNvbnN0IHJlc3VsdCA9IHsgY2hpbGRyZW46IFtdIH07XG4gIE9iamVjdC5hc3NpZ24ocmVzdWx0LCBvcHRzKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbmNsYXNzIFRva2VuVHJlZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIC8qKiBAdHlwZSBEYXRhTm9kZSAqL1xuICAgIHRoaXMucm9vdE5vZGUgPSBuZXdOb2RlKCk7XG4gICAgdGhpcy5zdGFjayA9IFt0aGlzLnJvb3ROb2RlXTtcbiAgfVxuXG4gIGdldCB0b3AoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAxXTtcbiAgfVxuXG4gIGdldCByb290KCkgeyByZXR1cm4gdGhpcy5yb290Tm9kZTsgfVxuXG4gIC8qKiBAcGFyYW0ge05vZGV9IG5vZGUgKi9cbiAgYWRkKG5vZGUpIHtcbiAgICB0aGlzLnRvcC5jaGlsZHJlbi5wdXNoKG5vZGUpO1xuICB9XG5cbiAgLyoqIEBwYXJhbSB7c3RyaW5nfSBzY29wZSAqL1xuICBvcGVuTm9kZShzY29wZSkge1xuICAgIC8qKiBAdHlwZSBOb2RlICovXG4gICAgY29uc3Qgbm9kZSA9IG5ld05vZGUoeyBzY29wZSB9KTtcbiAgICB0aGlzLmFkZChub2RlKTtcbiAgICB0aGlzLnN0YWNrLnB1c2gobm9kZSk7XG4gIH1cblxuICBjbG9zZU5vZGUoKSB7XG4gICAgaWYgKHRoaXMuc3RhY2subGVuZ3RoID4gMSkge1xuICAgICAgcmV0dXJuIHRoaXMuc3RhY2sucG9wKCk7XG4gICAgfVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZmluZWRcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY2xvc2VBbGxOb2RlcygpIHtcbiAgICB3aGlsZSAodGhpcy5jbG9zZU5vZGUoKSk7XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHRoaXMucm9vdE5vZGUsIG51bGwsIDQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEB0eXBlZGVmIHsgaW1wb3J0KFwiLi9odG1sX3JlbmRlcmVyXCIpLlJlbmRlcmVyIH0gUmVuZGVyZXJcbiAgICogQHBhcmFtIHtSZW5kZXJlcn0gYnVpbGRlclxuICAgKi9cbiAgd2FsayhidWlsZGVyKSB7XG4gICAgLy8gdGhpcyBkb2VzIG5vdFxuICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLl93YWxrKGJ1aWxkZXIsIHRoaXMucm9vdE5vZGUpO1xuICAgIC8vIHRoaXMgd29ya3NcbiAgICAvLyByZXR1cm4gVG9rZW5UcmVlLl93YWxrKGJ1aWxkZXIsIHRoaXMucm9vdE5vZGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7UmVuZGVyZXJ9IGJ1aWxkZXJcbiAgICogQHBhcmFtIHtOb2RlfSBub2RlXG4gICAqL1xuICBzdGF0aWMgX3dhbGsoYnVpbGRlciwgbm9kZSkge1xuICAgIGlmICh0eXBlb2Ygbm9kZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgYnVpbGRlci5hZGRUZXh0KG5vZGUpO1xuICAgIH0gZWxzZSBpZiAobm9kZS5jaGlsZHJlbikge1xuICAgICAgYnVpbGRlci5vcGVuTm9kZShub2RlKTtcbiAgICAgIG5vZGUuY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQpID0+IHRoaXMuX3dhbGsoYnVpbGRlciwgY2hpbGQpKTtcbiAgICAgIGJ1aWxkZXIuY2xvc2VOb2RlKG5vZGUpO1xuICAgIH1cbiAgICByZXR1cm4gYnVpbGRlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge05vZGV9IG5vZGVcbiAgICovXG4gIHN0YXRpYyBfY29sbGFwc2Uobm9kZSkge1xuICAgIGlmICh0eXBlb2Ygbm9kZSA9PT0gXCJzdHJpbmdcIikgcmV0dXJuO1xuICAgIGlmICghbm9kZS5jaGlsZHJlbikgcmV0dXJuO1xuXG4gICAgaWYgKG5vZGUuY2hpbGRyZW4uZXZlcnkoZWwgPT4gdHlwZW9mIGVsID09PSBcInN0cmluZ1wiKSkge1xuICAgICAgLy8gbm9kZS50ZXh0ID0gbm9kZS5jaGlsZHJlbi5qb2luKFwiXCIpO1xuICAgICAgLy8gZGVsZXRlIG5vZGUuY2hpbGRyZW47XG4gICAgICBub2RlLmNoaWxkcmVuID0gW25vZGUuY2hpbGRyZW4uam9pbihcIlwiKV07XG4gICAgfSBlbHNlIHtcbiAgICAgIG5vZGUuY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQpID0+IHtcbiAgICAgICAgVG9rZW5UcmVlLl9jb2xsYXBzZShjaGlsZCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gIEN1cnJlbnRseSB0aGlzIGlzIGFsbCBwcml2YXRlIEFQSSwgYnV0IHRoaXMgaXMgdGhlIG1pbmltYWwgQVBJIG5lY2Vzc2FyeVxuICB0aGF0IGFuIEVtaXR0ZXIgbXVzdCBpbXBsZW1lbnQgdG8gZnVsbHkgc3VwcG9ydCB0aGUgcGFyc2VyLlxuXG4gIE1pbmltYWwgaW50ZXJmYWNlOlxuXG4gIC0gYWRkVGV4dCh0ZXh0KVxuICAtIF9fYWRkU3VibGFuZ3VhZ2UoZW1pdHRlciwgc3ViTGFuZ3VhZ2VOYW1lKVxuICAtIHN0YXJ0U2NvcGUoc2NvcGUpXG4gIC0gZW5kU2NvcGUoKVxuICAtIGZpbmFsaXplKClcbiAgLSB0b0hUTUwoKVxuXG4qL1xuXG4vKipcbiAqIEBpbXBsZW1lbnRzIHtFbWl0dGVyfVxuICovXG5jbGFzcyBUb2tlblRyZWVFbWl0dGVyIGV4dGVuZHMgVG9rZW5UcmVlIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7Kn0gb3B0aW9uc1xuICAgKi9cbiAgY29uc3RydWN0b3Iob3B0aW9ucykge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dFxuICAgKi9cbiAgYWRkVGV4dCh0ZXh0KSB7XG4gICAgaWYgKHRleHQgPT09IFwiXCIpIHsgcmV0dXJuOyB9XG5cbiAgICB0aGlzLmFkZCh0ZXh0KTtcbiAgfVxuXG4gIC8qKiBAcGFyYW0ge3N0cmluZ30gc2NvcGUgKi9cbiAgc3RhcnRTY29wZShzY29wZSkge1xuICAgIHRoaXMub3Blbk5vZGUoc2NvcGUpO1xuICB9XG5cbiAgZW5kU2NvcGUoKSB7XG4gICAgdGhpcy5jbG9zZU5vZGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0VtaXR0ZXIgJiB7cm9vdDogRGF0YU5vZGV9fSBlbWl0dGVyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gICAqL1xuICBfX2FkZFN1Ymxhbmd1YWdlKGVtaXR0ZXIsIG5hbWUpIHtcbiAgICAvKiogQHR5cGUgRGF0YU5vZGUgKi9cbiAgICBjb25zdCBub2RlID0gZW1pdHRlci5yb290O1xuICAgIGlmIChuYW1lKSBub2RlLnNjb3BlID0gYGxhbmd1YWdlOiR7bmFtZX1gO1xuXG4gICAgdGhpcy5hZGQobm9kZSk7XG4gIH1cblxuICB0b0hUTUwoKSB7XG4gICAgY29uc3QgcmVuZGVyZXIgPSBuZXcgSFRNTFJlbmRlcmVyKHRoaXMsIHRoaXMub3B0aW9ucyk7XG4gICAgcmV0dXJuIHJlbmRlcmVyLnZhbHVlKCk7XG4gIH1cblxuICBmaW5hbGl6ZSgpIHtcbiAgICB0aGlzLmNsb3NlQWxsTm9kZXMoKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybnMge1JlZ0V4cH1cbiAqICovXG5cbi8qKlxuICogQHBhcmFtIHtSZWdFeHAgfCBzdHJpbmcgfSByZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gc291cmNlKHJlKSB7XG4gIGlmICghcmUpIHJldHVybiBudWxsO1xuICBpZiAodHlwZW9mIHJlID09PSBcInN0cmluZ1wiKSByZXR1cm4gcmU7XG5cbiAgcmV0dXJuIHJlLnNvdXJjZTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge1JlZ0V4cCB8IHN0cmluZyB9IHJlXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBsb29rYWhlYWQocmUpIHtcbiAgcmV0dXJuIGNvbmNhdCgnKD89JywgcmUsICcpJyk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtSZWdFeHAgfCBzdHJpbmcgfSByZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gYW55TnVtYmVyT2ZUaW1lcyhyZSkge1xuICByZXR1cm4gY29uY2F0KCcoPzonLCByZSwgJykqJyk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtSZWdFeHAgfCBzdHJpbmcgfSByZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gb3B0aW9uYWwocmUpIHtcbiAgcmV0dXJuIGNvbmNhdCgnKD86JywgcmUsICcpPycpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7Li4uKFJlZ0V4cCB8IHN0cmluZykgfSBhcmdzXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBjb25jYXQoLi4uYXJncykge1xuICBjb25zdCBqb2luZWQgPSBhcmdzLm1hcCgoeCkgPT4gc291cmNlKHgpKS5qb2luKFwiXCIpO1xuICByZXR1cm4gam9pbmVkO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7IEFycmF5PHN0cmluZyB8IFJlZ0V4cCB8IE9iamVjdD4gfSBhcmdzXG4gKiBAcmV0dXJucyB7b2JqZWN0fVxuICovXG5mdW5jdGlvbiBzdHJpcE9wdGlvbnNGcm9tQXJncyhhcmdzKSB7XG4gIGNvbnN0IG9wdHMgPSBhcmdzW2FyZ3MubGVuZ3RoIC0gMV07XG5cbiAgaWYgKHR5cGVvZiBvcHRzID09PSAnb2JqZWN0JyAmJiBvcHRzLmNvbnN0cnVjdG9yID09PSBPYmplY3QpIHtcbiAgICBhcmdzLnNwbGljZShhcmdzLmxlbmd0aCAtIDEsIDEpO1xuICAgIHJldHVybiBvcHRzO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB7fTtcbiAgfVxufVxuXG4vKiogQHR5cGVkZWYgeyB7Y2FwdHVyZT86IGJvb2xlYW59IH0gUmVnZXhFaXRoZXJPcHRpb25zICovXG5cbi8qKlxuICogQW55IG9mIHRoZSBwYXNzZWQgZXhwcmVzc3Npb25zIG1heSBtYXRjaFxuICpcbiAqIENyZWF0ZXMgYSBodWdlIHRoaXMgfCB0aGlzIHwgdGhhdCB8IHRoYXQgbWF0Y2hcbiAqIEBwYXJhbSB7KFJlZ0V4cCB8IHN0cmluZylbXSB8IFsuLi4oUmVnRXhwIHwgc3RyaW5nKVtdLCBSZWdleEVpdGhlck9wdGlvbnNdfSBhcmdzXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBlaXRoZXIoLi4uYXJncykge1xuICAvKiogQHR5cGUgeyBvYmplY3QgJiB7Y2FwdHVyZT86IGJvb2xlYW59IH0gICovXG4gIGNvbnN0IG9wdHMgPSBzdHJpcE9wdGlvbnNGcm9tQXJncyhhcmdzKTtcbiAgY29uc3Qgam9pbmVkID0gJygnXG4gICAgKyAob3B0cy5jYXB0dXJlID8gXCJcIiA6IFwiPzpcIilcbiAgICArIGFyZ3MubWFwKCh4KSA9PiBzb3VyY2UoeCkpLmpvaW4oXCJ8XCIpICsgXCIpXCI7XG4gIHJldHVybiBqb2luZWQ7XG59XG5cbi8qKlxuICogQHBhcmFtIHtSZWdFeHAgfCBzdHJpbmd9IHJlXG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICovXG5mdW5jdGlvbiBjb3VudE1hdGNoR3JvdXBzKHJlKSB7XG4gIHJldHVybiAobmV3IFJlZ0V4cChyZS50b1N0cmluZygpICsgJ3wnKSkuZXhlYygnJykubGVuZ3RoIC0gMTtcbn1cblxuLyoqXG4gKiBEb2VzIGxleGVtZSBzdGFydCB3aXRoIGEgcmVndWxhciBleHByZXNzaW9uIG1hdGNoIGF0IHRoZSBiZWdpbm5pbmdcbiAqIEBwYXJhbSB7UmVnRXhwfSByZVxuICogQHBhcmFtIHtzdHJpbmd9IGxleGVtZVxuICovXG5mdW5jdGlvbiBzdGFydHNXaXRoKHJlLCBsZXhlbWUpIHtcbiAgY29uc3QgbWF0Y2ggPSByZSAmJiByZS5leGVjKGxleGVtZSk7XG4gIHJldHVybiBtYXRjaCAmJiBtYXRjaC5pbmRleCA9PT0gMDtcbn1cblxuLy8gQkFDS1JFRl9SRSBtYXRjaGVzIGFuIG9wZW4gcGFyZW50aGVzaXMgb3IgYmFja3JlZmVyZW5jZS4gVG8gYXZvaWRcbi8vIGFuIGluY29ycmVjdCBwYXJzZSwgaXQgYWRkaXRpb25hbGx5IG1hdGNoZXMgdGhlIGZvbGxvd2luZzpcbi8vIC0gWy4uLl0gZWxlbWVudHMsIHdoZXJlIHRoZSBtZWFuaW5nIG9mIHBhcmVudGhlc2VzIGFuZCBlc2NhcGVzIGNoYW5nZVxuLy8gLSBvdGhlciBlc2NhcGUgc2VxdWVuY2VzLCBzbyB3ZSBkbyBub3QgbWlzcGFyc2UgZXNjYXBlIHNlcXVlbmNlcyBhc1xuLy8gICBpbnRlcmVzdGluZyBlbGVtZW50c1xuLy8gLSBub24tbWF0Y2hpbmcgb3IgbG9va2FoZWFkIHBhcmVudGhlc2VzLCB3aGljaCBkbyBub3QgY2FwdHVyZS4gVGhlc2Vcbi8vICAgZm9sbG93IHRoZSAnKCcgd2l0aCBhICc/Jy5cbmNvbnN0IEJBQ0tSRUZfUkUgPSAvXFxbKD86W15cXFxcXFxdXXxcXFxcLikqXFxdfFxcKFxcPz98XFxcXChbMS05XVswLTldKil8XFxcXC4vO1xuXG4vLyAqKklOVEVSTkFMKiogTm90IGludGVuZGVkIGZvciBvdXRzaWRlIHVzYWdlXG4vLyBqb2luIGxvZ2ljYWxseSBjb21wdXRlcyByZWdleHBzLmpvaW4oc2VwYXJhdG9yKSwgYnV0IGZpeGVzIHRoZVxuLy8gYmFja3JlZmVyZW5jZXMgc28gdGhleSBjb250aW51ZSB0byBtYXRjaC5cbi8vIGl0IGFsc28gcGxhY2VzIGVhY2ggaW5kaXZpZHVhbCByZWd1bGFyIGV4cHJlc3Npb24gaW50byBpdCdzIG93blxuLy8gbWF0Y2ggZ3JvdXAsIGtlZXBpbmcgdHJhY2sgb2YgdGhlIHNlcXVlbmNpbmcgb2YgdGhvc2UgbWF0Y2ggZ3JvdXBzXG4vLyBpcyBjdXJyZW50bHkgYW4gZXhlcmNpc2UgZm9yIHRoZSBjYWxsZXIuIDotKVxuLyoqXG4gKiBAcGFyYW0geyhzdHJpbmcgfCBSZWdFeHApW119IHJlZ2V4cHNcbiAqIEBwYXJhbSB7e2pvaW5XaXRoOiBzdHJpbmd9fSBvcHRzXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBfcmV3cml0ZUJhY2tyZWZlcmVuY2VzKHJlZ2V4cHMsIHsgam9pbldpdGggfSkge1xuICBsZXQgbnVtQ2FwdHVyZXMgPSAwO1xuXG4gIHJldHVybiByZWdleHBzLm1hcCgocmVnZXgpID0+IHtcbiAgICBudW1DYXB0dXJlcyArPSAxO1xuICAgIGNvbnN0IG9mZnNldCA9IG51bUNhcHR1cmVzO1xuICAgIGxldCByZSA9IHNvdXJjZShyZWdleCk7XG4gICAgbGV0IG91dCA9ICcnO1xuXG4gICAgd2hpbGUgKHJlLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IG1hdGNoID0gQkFDS1JFRl9SRS5leGVjKHJlKTtcbiAgICAgIGlmICghbWF0Y2gpIHtcbiAgICAgICAgb3V0ICs9IHJlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIG91dCArPSByZS5zdWJzdHJpbmcoMCwgbWF0Y2guaW5kZXgpO1xuICAgICAgcmUgPSByZS5zdWJzdHJpbmcobWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGgpO1xuICAgICAgaWYgKG1hdGNoWzBdWzBdID09PSAnXFxcXCcgJiYgbWF0Y2hbMV0pIHtcbiAgICAgICAgLy8gQWRqdXN0IHRoZSBiYWNrcmVmZXJlbmNlLlxuICAgICAgICBvdXQgKz0gJ1xcXFwnICsgU3RyaW5nKE51bWJlcihtYXRjaFsxXSkgKyBvZmZzZXQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ICs9IG1hdGNoWzBdO1xuICAgICAgICBpZiAobWF0Y2hbMF0gPT09ICcoJykge1xuICAgICAgICAgIG51bUNhcHR1cmVzKys7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG91dDtcbiAgfSkubWFwKHJlID0+IGAoJHtyZX0pYCkuam9pbihqb2luV2l0aCk7XG59XG5cbi8qKiBAdHlwZWRlZiB7aW1wb3J0KCdoaWdobGlnaHQuanMnKS5Nb2RlfSBNb2RlICovXG4vKiogQHR5cGVkZWYge2ltcG9ydCgnaGlnaGxpZ2h0LmpzJykuTW9kZUNhbGxiYWNrfSBNb2RlQ2FsbGJhY2sgKi9cblxuLy8gQ29tbW9uIHJlZ2V4cHNcbmNvbnN0IE1BVENIX05PVEhJTkdfUkUgPSAvXFxiXFxCLztcbmNvbnN0IElERU5UX1JFID0gJ1thLXpBLVpdXFxcXHcqJztcbmNvbnN0IFVOREVSU0NPUkVfSURFTlRfUkUgPSAnW2EtekEtWl9dXFxcXHcqJztcbmNvbnN0IE5VTUJFUl9SRSA9ICdcXFxcYlxcXFxkKyhcXFxcLlxcXFxkKyk/JztcbmNvbnN0IENfTlVNQkVSX1JFID0gJygtPykoXFxcXGIwW3hYXVthLWZBLUYwLTldK3woXFxcXGJcXFxcZCsoXFxcXC5cXFxcZCopP3xcXFxcLlxcXFxkKykoW2VFXVstK10/XFxcXGQrKT8pJzsgLy8gMHguLi4sIDAuLi4sIGRlY2ltYWwsIGZsb2F0XG5jb25zdCBCSU5BUllfTlVNQkVSX1JFID0gJ1xcXFxiKDBiWzAxXSspJzsgLy8gMGIuLi5cbmNvbnN0IFJFX1NUQVJURVJTX1JFID0gJyF8IT18IT09fCV8JT18JnwmJnwmPXxcXFxcKnxcXFxcKj18XFxcXCt8XFxcXCs9fCx8LXwtPXwvPXwvfDp8O3w8PHw8PD18PD18PHw9PT18PT18PXw+Pj49fD4+PXw+PXw+Pj58Pj58PnxcXFxcP3xcXFxcW3xcXFxce3xcXFxcKHxcXFxcXnxcXFxcXj18XFxcXHx8XFxcXHw9fFxcXFx8XFxcXHx8fic7XG5cbi8qKlxuKiBAcGFyYW0geyBQYXJ0aWFsPE1vZGU+ICYge2JpbmFyeT86IHN0cmluZyB8IFJlZ0V4cH0gfSBvcHRzXG4qL1xuY29uc3QgU0hFQkFORyA9IChvcHRzID0ge30pID0+IHtcbiAgY29uc3QgYmVnaW5TaGViYW5nID0gL14jIVsgXSpcXC8vO1xuICBpZiAob3B0cy5iaW5hcnkpIHtcbiAgICBvcHRzLmJlZ2luID0gY29uY2F0KFxuICAgICAgYmVnaW5TaGViYW5nLFxuICAgICAgLy4qXFxiLyxcbiAgICAgIG9wdHMuYmluYXJ5LFxuICAgICAgL1xcYi4qLyk7XG4gIH1cbiAgcmV0dXJuIGluaGVyaXQkMSh7XG4gICAgc2NvcGU6ICdtZXRhJyxcbiAgICBiZWdpbjogYmVnaW5TaGViYW5nLFxuICAgIGVuZDogLyQvLFxuICAgIHJlbGV2YW5jZTogMCxcbiAgICAvKiogQHR5cGUge01vZGVDYWxsYmFja30gKi9cbiAgICBcIm9uOmJlZ2luXCI6IChtLCByZXNwKSA9PiB7XG4gICAgICBpZiAobS5pbmRleCAhPT0gMCkgcmVzcC5pZ25vcmVNYXRjaCgpO1xuICAgIH1cbiAgfSwgb3B0cyk7XG59O1xuXG4vLyBDb21tb24gbW9kZXNcbmNvbnN0IEJBQ0tTTEFTSF9FU0NBUEUgPSB7XG4gIGJlZ2luOiAnXFxcXFxcXFxbXFxcXHNcXFxcU10nLCByZWxldmFuY2U6IDBcbn07XG5jb25zdCBBUE9TX1NUUklOR19NT0RFID0ge1xuICBzY29wZTogJ3N0cmluZycsXG4gIGJlZ2luOiAnXFwnJyxcbiAgZW5kOiAnXFwnJyxcbiAgaWxsZWdhbDogJ1xcXFxuJyxcbiAgY29udGFpbnM6IFtCQUNLU0xBU0hfRVNDQVBFXVxufTtcbmNvbnN0IFFVT1RFX1NUUklOR19NT0RFID0ge1xuICBzY29wZTogJ3N0cmluZycsXG4gIGJlZ2luOiAnXCInLFxuICBlbmQ6ICdcIicsXG4gIGlsbGVnYWw6ICdcXFxcbicsXG4gIGNvbnRhaW5zOiBbQkFDS1NMQVNIX0VTQ0FQRV1cbn07XG5jb25zdCBQSFJBU0FMX1dPUkRTX01PREUgPSB7XG4gIGJlZ2luOiAvXFxiKGF8YW58dGhlfGFyZXxJJ218aXNuJ3R8ZG9uJ3R8ZG9lc24ndHx3b24ndHxidXR8anVzdHxzaG91bGR8cHJldHR5fHNpbXBseXxlbm91Z2h8Z29ubmF8Z29pbmd8d3RmfHNvfHN1Y2h8d2lsbHx5b3V8eW91cnx0aGV5fGxpa2V8bW9yZSlcXGIvXG59O1xuLyoqXG4gKiBDcmVhdGVzIGEgY29tbWVudCBtb2RlXG4gKlxuICogQHBhcmFtIHtzdHJpbmcgfCBSZWdFeHB9IGJlZ2luXG4gKiBAcGFyYW0ge3N0cmluZyB8IFJlZ0V4cH0gZW5kXG4gKiBAcGFyYW0ge01vZGUgfCB7fX0gW21vZGVPcHRpb25zXVxuICogQHJldHVybnMge1BhcnRpYWw8TW9kZT59XG4gKi9cbmNvbnN0IENPTU1FTlQgPSBmdW5jdGlvbihiZWdpbiwgZW5kLCBtb2RlT3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IG1vZGUgPSBpbmhlcml0JDEoXG4gICAge1xuICAgICAgc2NvcGU6ICdjb21tZW50JyxcbiAgICAgIGJlZ2luLFxuICAgICAgZW5kLFxuICAgICAgY29udGFpbnM6IFtdXG4gICAgfSxcbiAgICBtb2RlT3B0aW9uc1xuICApO1xuICBtb2RlLmNvbnRhaW5zLnB1c2goe1xuICAgIHNjb3BlOiAnZG9jdGFnJyxcbiAgICAvLyBoYWNrIHRvIGF2b2lkIHRoZSBzcGFjZSBmcm9tIGJlaW5nIGluY2x1ZGVkLiB0aGUgc3BhY2UgaXMgbmVjZXNzYXJ5IHRvXG4gICAgLy8gbWF0Y2ggaGVyZSB0byBwcmV2ZW50IHRoZSBwbGFpbiB0ZXh0IHJ1bGUgYmVsb3cgZnJvbSBnb2JibGluZyB1cCBkb2N0YWdzXG4gICAgYmVnaW46ICdbIF0qKD89KFRPRE98RklYTUV8Tk9URXxCVUd8T1BUSU1JWkV8SEFDS3xYWFgpOiknLFxuICAgIGVuZDogLyhUT0RPfEZJWE1FfE5PVEV8QlVHfE9QVElNSVpFfEhBQ0t8WFhYKTovLFxuICAgIGV4Y2x1ZGVCZWdpbjogdHJ1ZSxcbiAgICByZWxldmFuY2U6IDBcbiAgfSk7XG4gIGNvbnN0IEVOR0xJU0hfV09SRCA9IGVpdGhlcihcbiAgICAvLyBsaXN0IG9mIGNvbW1vbiAxIGFuZCAyIGxldHRlciB3b3JkcyBpbiBFbmdsaXNoXG4gICAgXCJJXCIsXG4gICAgXCJhXCIsXG4gICAgXCJpc1wiLFxuICAgIFwic29cIixcbiAgICBcInVzXCIsXG4gICAgXCJ0b1wiLFxuICAgIFwiYXRcIixcbiAgICBcImlmXCIsXG4gICAgXCJpblwiLFxuICAgIFwiaXRcIixcbiAgICBcIm9uXCIsXG4gICAgLy8gbm90ZTogdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0IG9mIGNvbnRyYWN0aW9ucywganVzdCBwb3B1bGFyIG9uZXNcbiAgICAvW0EtWmEtel0rWyddKGR8dmV8cmV8bGx8dHxzfG4pLywgLy8gY29udHJhY3Rpb25zIC0gY2FuJ3Qgd2UnZCB0aGV5J3JlIGxldCdzLCBldGNcbiAgICAvW0EtWmEtel0rWy1dW2Etel0rLywgLy8gYG5vLXdheWAsIGV0Yy5cbiAgICAvW0EtWmEtel1bYS16XXsyLH0vIC8vIGFsbG93IGNhcGl0YWxpemVkIHdvcmRzIGF0IGJlZ2lubmluZyBvZiBzZW50ZW5jZXNcbiAgKTtcbiAgLy8gbG9va2luZyBsaWtlIHBsYWluIHRleHQsIG1vcmUgbGlrZWx5IHRvIGJlIGEgY29tbWVudFxuICBtb2RlLmNvbnRhaW5zLnB1c2goXG4gICAge1xuICAgICAgLy8gVE9ETzogaG93IHRvIGluY2x1ZGUgXCIsICgsICkgd2l0aG91dCBicmVha2luZyBncmFtbWFycyB0aGF0IHVzZSB0aGVzZSBmb3JcbiAgICAgIC8vIGNvbW1lbnQgZGVsaW1pdGVycz9cbiAgICAgIC8vIGJlZ2luOiAvWyBdKyhbKClcIl0/KFtBLVphLXonLV17Myx9fGlzfGF8SXxzb3x1c3xbdFRdW29PXXxhdHxpZnxpbnxpdHxvbilbLl0/WygpXCI6XT8oWy5dWyBdfFsgXXxcXCkpKXszfS9cbiAgICAgIC8vIC0tLVxuXG4gICAgICAvLyB0aGlzIHRyaWVzIHRvIGZpbmQgc2VxdWVuY2VzIG9mIDMgZW5nbGlzaCB3b3JkcyBpbiBhIHJvdyAod2l0aG91dCBhbnlcbiAgICAgIC8vIFwicHJvZ3JhbW1pbmdcIiB0eXBlIHN5bnRheCkgdGhpcyBnaXZlcyB1cyBhIHN0cm9uZyBzaWduYWwgdGhhdCB3ZSd2ZVxuICAgICAgLy8gVFJVTFkgZm91bmQgYSBjb21tZW50IC0gdnMgcGVyaGFwcyBzY2FubmluZyB3aXRoIHRoZSB3cm9uZyBsYW5ndWFnZS5cbiAgICAgIC8vIEl0J3MgcG9zc2libGUgdG8gZmluZCBzb21ldGhpbmcgdGhhdCBMT09LUyBsaWtlIHRoZSBzdGFydCBvZiB0aGVcbiAgICAgIC8vIGNvbW1lbnQgLSBidXQgdGhlbiBpZiB0aGVyZSBpcyBubyByZWFkYWJsZSB0ZXh0IC0gZ29vZCBjaGFuY2UgaXQgaXMgYVxuICAgICAgLy8gZmFsc2UgbWF0Y2ggYW5kIG5vdCBhIGNvbW1lbnQuXG4gICAgICAvL1xuICAgICAgLy8gZm9yIGEgdmlzdWFsIGV4YW1wbGUgcGxlYXNlIHNlZTpcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9oaWdobGlnaHRqcy9oaWdobGlnaHQuanMvaXNzdWVzLzI4MjdcblxuICAgICAgYmVnaW46IGNvbmNhdChcbiAgICAgICAgL1sgXSsvLCAvLyBuZWNlc3NhcnkgdG8gcHJldmVudCB1cyBnb2JibGluZyB1cCBkb2N0YWdzIGxpa2UgLyogQGF1dGhvciBCb2IgTWNnaWxsICovXG4gICAgICAgICcoJyxcbiAgICAgICAgRU5HTElTSF9XT1JELFxuICAgICAgICAvWy5dP1s6XT8oWy5dWyBdfFsgXSkvLFxuICAgICAgICAnKXszfScpIC8vIGxvb2sgZm9yIDMgd29yZHMgaW4gYSByb3dcbiAgICB9XG4gICk7XG4gIHJldHVybiBtb2RlO1xufTtcbmNvbnN0IENfTElORV9DT01NRU5UX01PREUgPSBDT01NRU5UKCcvLycsICckJyk7XG5jb25zdCBDX0JMT0NLX0NPTU1FTlRfTU9ERSA9IENPTU1FTlQoJy9cXFxcKicsICdcXFxcKi8nKTtcbmNvbnN0IEhBU0hfQ09NTUVOVF9NT0RFID0gQ09NTUVOVCgnIycsICckJyk7XG5jb25zdCBOVU1CRVJfTU9ERSA9IHtcbiAgc2NvcGU6ICdudW1iZXInLFxuICBiZWdpbjogTlVNQkVSX1JFLFxuICByZWxldmFuY2U6IDBcbn07XG5jb25zdCBDX05VTUJFUl9NT0RFID0ge1xuICBzY29wZTogJ251bWJlcicsXG4gIGJlZ2luOiBDX05VTUJFUl9SRSxcbiAgcmVsZXZhbmNlOiAwXG59O1xuY29uc3QgQklOQVJZX05VTUJFUl9NT0RFID0ge1xuICBzY29wZTogJ251bWJlcicsXG4gIGJlZ2luOiBCSU5BUllfTlVNQkVSX1JFLFxuICByZWxldmFuY2U6IDBcbn07XG5jb25zdCBSRUdFWFBfTU9ERSA9IHtcbiAgc2NvcGU6IFwicmVnZXhwXCIsXG4gIGJlZ2luOiAvXFwvKD89W14vXFxuXSpcXC8pLyxcbiAgZW5kOiAvXFwvW2dpbXV5XSovLFxuICBjb250YWluczogW1xuICAgIEJBQ0tTTEFTSF9FU0NBUEUsXG4gICAge1xuICAgICAgYmVnaW46IC9cXFsvLFxuICAgICAgZW5kOiAvXFxdLyxcbiAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgIGNvbnRhaW5zOiBbQkFDS1NMQVNIX0VTQ0FQRV1cbiAgICB9XG4gIF1cbn07XG5jb25zdCBUSVRMRV9NT0RFID0ge1xuICBzY29wZTogJ3RpdGxlJyxcbiAgYmVnaW46IElERU5UX1JFLFxuICByZWxldmFuY2U6IDBcbn07XG5jb25zdCBVTkRFUlNDT1JFX1RJVExFX01PREUgPSB7XG4gIHNjb3BlOiAndGl0bGUnLFxuICBiZWdpbjogVU5ERVJTQ09SRV9JREVOVF9SRSxcbiAgcmVsZXZhbmNlOiAwXG59O1xuY29uc3QgTUVUSE9EX0dVQVJEID0ge1xuICAvLyBleGNsdWRlcyBtZXRob2QgbmFtZXMgZnJvbSBrZXl3b3JkIHByb2Nlc3NpbmdcbiAgYmVnaW46ICdcXFxcLlxcXFxzKicgKyBVTkRFUlNDT1JFX0lERU5UX1JFLFxuICByZWxldmFuY2U6IDBcbn07XG5cbi8qKlxuICogQWRkcyBlbmQgc2FtZSBhcyBiZWdpbiBtZWNoYW5pY3MgdG8gYSBtb2RlXG4gKlxuICogWW91ciBtb2RlIG11c3QgaW5jbHVkZSBhdCBsZWFzdCBhIHNpbmdsZSAoKSBtYXRjaCBncm91cCBhcyB0aGF0IGZpcnN0IG1hdGNoXG4gKiBncm91cCBpcyB3aGF0IGlzIHVzZWQgZm9yIGNvbXBhcmlzb25cbiAqIEBwYXJhbSB7UGFydGlhbDxNb2RlPn0gbW9kZVxuICovXG5jb25zdCBFTkRfU0FNRV9BU19CRUdJTiA9IGZ1bmN0aW9uKG1vZGUpIHtcbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24obW9kZSxcbiAgICB7XG4gICAgICAvKiogQHR5cGUge01vZGVDYWxsYmFja30gKi9cbiAgICAgICdvbjpiZWdpbic6IChtLCByZXNwKSA9PiB7IHJlc3AuZGF0YS5fYmVnaW5NYXRjaCA9IG1bMV07IH0sXG4gICAgICAvKiogQHR5cGUge01vZGVDYWxsYmFja30gKi9cbiAgICAgICdvbjplbmQnOiAobSwgcmVzcCkgPT4geyBpZiAocmVzcC5kYXRhLl9iZWdpbk1hdGNoICE9PSBtWzFdKSByZXNwLmlnbm9yZU1hdGNoKCk7IH1cbiAgICB9KTtcbn07XG5cbnZhciBNT0RFUyA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcbiAgX19wcm90b19fOiBudWxsLFxuICBBUE9TX1NUUklOR19NT0RFOiBBUE9TX1NUUklOR19NT0RFLFxuICBCQUNLU0xBU0hfRVNDQVBFOiBCQUNLU0xBU0hfRVNDQVBFLFxuICBCSU5BUllfTlVNQkVSX01PREU6IEJJTkFSWV9OVU1CRVJfTU9ERSxcbiAgQklOQVJZX05VTUJFUl9SRTogQklOQVJZX05VTUJFUl9SRSxcbiAgQ09NTUVOVDogQ09NTUVOVCxcbiAgQ19CTE9DS19DT01NRU5UX01PREU6IENfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICBDX0xJTkVfQ09NTUVOVF9NT0RFOiBDX0xJTkVfQ09NTUVOVF9NT0RFLFxuICBDX05VTUJFUl9NT0RFOiBDX05VTUJFUl9NT0RFLFxuICBDX05VTUJFUl9SRTogQ19OVU1CRVJfUkUsXG4gIEVORF9TQU1FX0FTX0JFR0lOOiBFTkRfU0FNRV9BU19CRUdJTixcbiAgSEFTSF9DT01NRU5UX01PREU6IEhBU0hfQ09NTUVOVF9NT0RFLFxuICBJREVOVF9SRTogSURFTlRfUkUsXG4gIE1BVENIX05PVEhJTkdfUkU6IE1BVENIX05PVEhJTkdfUkUsXG4gIE1FVEhPRF9HVUFSRDogTUVUSE9EX0dVQVJELFxuICBOVU1CRVJfTU9ERTogTlVNQkVSX01PREUsXG4gIE5VTUJFUl9SRTogTlVNQkVSX1JFLFxuICBQSFJBU0FMX1dPUkRTX01PREU6IFBIUkFTQUxfV09SRFNfTU9ERSxcbiAgUVVPVEVfU1RSSU5HX01PREU6IFFVT1RFX1NUUklOR19NT0RFLFxuICBSRUdFWFBfTU9ERTogUkVHRVhQX01PREUsXG4gIFJFX1NUQVJURVJTX1JFOiBSRV9TVEFSVEVSU19SRSxcbiAgU0hFQkFORzogU0hFQkFORyxcbiAgVElUTEVfTU9ERTogVElUTEVfTU9ERSxcbiAgVU5ERVJTQ09SRV9JREVOVF9SRTogVU5ERVJTQ09SRV9JREVOVF9SRSxcbiAgVU5ERVJTQ09SRV9USVRMRV9NT0RFOiBVTkRFUlNDT1JFX1RJVExFX01PREVcbn0pO1xuXG4vKipcbkB0eXBlZGVmIHtpbXBvcnQoJ2hpZ2hsaWdodC5qcycpLkNhbGxiYWNrUmVzcG9uc2V9IENhbGxiYWNrUmVzcG9uc2VcbkB0eXBlZGVmIHtpbXBvcnQoJ2hpZ2hsaWdodC5qcycpLkNvbXBpbGVyRXh0fSBDb21waWxlckV4dFxuKi9cblxuLy8gR3JhbW1hciBleHRlbnNpb25zIC8gcGx1Z2luc1xuLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vaGlnaGxpZ2h0anMvaGlnaGxpZ2h0LmpzL2lzc3Vlcy8yODMzXG5cbi8vIEdyYW1tYXIgZXh0ZW5zaW9ucyBhbGxvdyBcInN5bnRhY3RpYyBzdWdhclwiIHRvIGJlIGFkZGVkIHRvIHRoZSBncmFtbWFyIG1vZGVzXG4vLyB3aXRob3V0IHJlcXVpcmluZyBhbnkgdW5kZXJseWluZyBjaGFuZ2VzIHRvIHRoZSBjb21waWxlciBpbnRlcm5hbHMuXG5cbi8vIGBjb21waWxlTWF0Y2hgIGJlaW5nIHRoZSBwZXJmZWN0IHNtYWxsIGV4YW1wbGUgb2Ygbm93IGFsbG93aW5nIGEgZ3JhbW1hclxuLy8gYXV0aG9yIHRvIHdyaXRlIGBtYXRjaGAgd2hlbiB0aGV5IGRlc2lyZSB0byBtYXRjaCBhIHNpbmdsZSBleHByZXNzaW9uIHJhdGhlclxuLy8gdGhhbiBiZWluZyBmb3JjZWQgdG8gdXNlIGBiZWdpbmAuICBUaGUgZXh0ZW5zaW9uIHRoZW4ganVzdCBtb3ZlcyBgbWF0Y2hgIGludG9cbi8vIGBiZWdpbmAgd2hlbiBpdCBydW5zLiAgSWUsIG5vIGZlYXR1cmVzIGhhdmUgYmVlbiBhZGRlZCwgYnV0IHdlJ3ZlIGp1c3QgbWFkZVxuLy8gdGhlIGV4cGVyaWVuY2Ugb2Ygd3JpdGluZyAoYW5kIHJlYWRpbmcgZ3JhbW1hcnMpIGEgbGl0dGxlIGJpdCBuaWNlci5cblxuLy8gLS0tLS0tXG5cbi8vIFRPRE86IFdlIG5lZWQgbmVnYXRpdmUgbG9vay1iZWhpbmQgc3VwcG9ydCB0byBkbyB0aGlzIHByb3Blcmx5XG4vKipcbiAqIFNraXAgYSBtYXRjaCBpZiBpdCBoYXMgYSBwcmVjZWRpbmcgZG90XG4gKlxuICogVGhpcyBpcyB1c2VkIGZvciBgYmVnaW5LZXl3b3Jkc2AgdG8gcHJldmVudCBtYXRjaGluZyBleHByZXNzaW9ucyBzdWNoIGFzXG4gKiBgYm9iLmtleXdvcmQuZG8oKWAuIFRoZSBtb2RlIGNvbXBpbGVyIGF1dG9tYXRpY2FsbHkgd2lyZXMgdGhpcyB1cCBhcyBhXG4gKiBzcGVjaWFsIF9pbnRlcm5hbF8gJ29uOmJlZ2luJyBjYWxsYmFjayBmb3IgbW9kZXMgd2l0aCBgYmVnaW5LZXl3b3Jkc2BcbiAqIEBwYXJhbSB7UmVnRXhwTWF0Y2hBcnJheX0gbWF0Y2hcbiAqIEBwYXJhbSB7Q2FsbGJhY2tSZXNwb25zZX0gcmVzcG9uc2VcbiAqL1xuZnVuY3Rpb24gc2tpcElmSGFzUHJlY2VkaW5nRG90KG1hdGNoLCByZXNwb25zZSkge1xuICBjb25zdCBiZWZvcmUgPSBtYXRjaC5pbnB1dFttYXRjaC5pbmRleCAtIDFdO1xuICBpZiAoYmVmb3JlID09PSBcIi5cIikge1xuICAgIHJlc3BvbnNlLmlnbm9yZU1hdGNoKCk7XG4gIH1cbn1cblxuLyoqXG4gKlxuICogQHR5cGUge0NvbXBpbGVyRXh0fVxuICovXG5mdW5jdGlvbiBzY29wZUNsYXNzTmFtZShtb2RlLCBfcGFyZW50KSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZmluZWRcbiAgaWYgKG1vZGUuY2xhc3NOYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICBtb2RlLnNjb3BlID0gbW9kZS5jbGFzc05hbWU7XG4gICAgZGVsZXRlIG1vZGUuY2xhc3NOYW1lO1xuICB9XG59XG5cbi8qKlxuICogYGJlZ2luS2V5d29yZHNgIHN5bnRhY3RpYyBzdWdhclxuICogQHR5cGUge0NvbXBpbGVyRXh0fVxuICovXG5mdW5jdGlvbiBiZWdpbktleXdvcmRzKG1vZGUsIHBhcmVudCkge1xuICBpZiAoIXBhcmVudCkgcmV0dXJuO1xuICBpZiAoIW1vZGUuYmVnaW5LZXl3b3JkcykgcmV0dXJuO1xuXG4gIC8vIGZvciBsYW5ndWFnZXMgd2l0aCBrZXl3b3JkcyB0aGF0IGluY2x1ZGUgbm9uLXdvcmQgY2hhcmFjdGVycyBjaGVja2luZyBmb3JcbiAgLy8gYSB3b3JkIGJvdW5kYXJ5IGlzIG5vdCBzdWZmaWNpZW50LCBzbyBpbnN0ZWFkIHdlIGNoZWNrIGZvciBhIHdvcmQgYm91bmRhcnlcbiAgLy8gb3Igd2hpdGVzcGFjZSAtIHRoaXMgZG9lcyBubyBoYXJtIGluIGFueSBjYXNlIHNpbmNlIG91ciBrZXl3b3JkIGVuZ2luZVxuICAvLyBkb2Vzbid0IGFsbG93IHNwYWNlcyBpbiBrZXl3b3JkcyBhbnl3YXlzIGFuZCB3ZSBzdGlsbCBjaGVjayBmb3IgdGhlIGJvdW5kYXJ5XG4gIC8vIGZpcnN0XG4gIG1vZGUuYmVnaW4gPSAnXFxcXGIoJyArIG1vZGUuYmVnaW5LZXl3b3Jkcy5zcGxpdCgnICcpLmpvaW4oJ3wnKSArICcpKD8hXFxcXC4pKD89XFxcXGJ8XFxcXHMpJztcbiAgbW9kZS5fX2JlZm9yZUJlZ2luID0gc2tpcElmSGFzUHJlY2VkaW5nRG90O1xuICBtb2RlLmtleXdvcmRzID0gbW9kZS5rZXl3b3JkcyB8fCBtb2RlLmJlZ2luS2V5d29yZHM7XG4gIGRlbGV0ZSBtb2RlLmJlZ2luS2V5d29yZHM7XG5cbiAgLy8gcHJldmVudHMgZG91YmxlIHJlbGV2YW5jZSwgdGhlIGtleXdvcmRzIHRoZW1zZWx2ZXMgcHJvdmlkZVxuICAvLyByZWxldmFuY2UsIHRoZSBtb2RlIGRvZXNuJ3QgbmVlZCB0byBkb3VibGUgaXRcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmaW5lZFxuICBpZiAobW9kZS5yZWxldmFuY2UgPT09IHVuZGVmaW5lZCkgbW9kZS5yZWxldmFuY2UgPSAwO1xufVxuXG4vKipcbiAqIEFsbG93IGBpbGxlZ2FsYCB0byBjb250YWluIGFuIGFycmF5IG9mIGlsbGVnYWwgdmFsdWVzXG4gKiBAdHlwZSB7Q29tcGlsZXJFeHR9XG4gKi9cbmZ1bmN0aW9uIGNvbXBpbGVJbGxlZ2FsKG1vZGUsIF9wYXJlbnQpIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KG1vZGUuaWxsZWdhbCkpIHJldHVybjtcblxuICBtb2RlLmlsbGVnYWwgPSBlaXRoZXIoLi4ubW9kZS5pbGxlZ2FsKTtcbn1cblxuLyoqXG4gKiBgbWF0Y2hgIHRvIG1hdGNoIGEgc2luZ2xlIGV4cHJlc3Npb24gZm9yIHJlYWRhYmlsaXR5XG4gKiBAdHlwZSB7Q29tcGlsZXJFeHR9XG4gKi9cbmZ1bmN0aW9uIGNvbXBpbGVNYXRjaChtb2RlLCBfcGFyZW50KSB7XG4gIGlmICghbW9kZS5tYXRjaCkgcmV0dXJuO1xuICBpZiAobW9kZS5iZWdpbiB8fCBtb2RlLmVuZCkgdGhyb3cgbmV3IEVycm9yKFwiYmVnaW4gJiBlbmQgYXJlIG5vdCBzdXBwb3J0ZWQgd2l0aCBtYXRjaFwiKTtcblxuICBtb2RlLmJlZ2luID0gbW9kZS5tYXRjaDtcbiAgZGVsZXRlIG1vZGUubWF0Y2g7XG59XG5cbi8qKlxuICogcHJvdmlkZXMgdGhlIGRlZmF1bHQgMSByZWxldmFuY2UgdG8gYWxsIG1vZGVzXG4gKiBAdHlwZSB7Q29tcGlsZXJFeHR9XG4gKi9cbmZ1bmN0aW9uIGNvbXBpbGVSZWxldmFuY2UobW9kZSwgX3BhcmVudCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZpbmVkXG4gIGlmIChtb2RlLnJlbGV2YW5jZSA9PT0gdW5kZWZpbmVkKSBtb2RlLnJlbGV2YW5jZSA9IDE7XG59XG5cbi8vIGFsbG93IGJlZm9yZU1hdGNoIHRvIGFjdCBhcyBhIFwicXVhbGlmaWVyXCIgZm9yIHRoZSBtYXRjaFxuLy8gdGhlIGZ1bGwgbWF0Y2ggYmVnaW4gbXVzdCBiZSBbYmVmb3JlTWF0Y2hdW2JlZ2luXVxuY29uc3QgYmVmb3JlTWF0Y2hFeHQgPSAobW9kZSwgcGFyZW50KSA9PiB7XG4gIGlmICghbW9kZS5iZWZvcmVNYXRjaCkgcmV0dXJuO1xuICAvLyBzdGFydHMgY29uZmxpY3RzIHdpdGggZW5kc1BhcmVudCB3aGljaCB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgY2hpbGRcbiAgLy8gcnVsZSBpcyBub3QgbWF0Y2hlZCBtdWx0aXBsZSB0aW1lc1xuICBpZiAobW9kZS5zdGFydHMpIHRocm93IG5ldyBFcnJvcihcImJlZm9yZU1hdGNoIGNhbm5vdCBiZSB1c2VkIHdpdGggc3RhcnRzXCIpO1xuXG4gIGNvbnN0IG9yaWdpbmFsTW9kZSA9IE9iamVjdC5hc3NpZ24oe30sIG1vZGUpO1xuICBPYmplY3Qua2V5cyhtb2RlKS5mb3JFYWNoKChrZXkpID0+IHsgZGVsZXRlIG1vZGVba2V5XTsgfSk7XG5cbiAgbW9kZS5rZXl3b3JkcyA9IG9yaWdpbmFsTW9kZS5rZXl3b3JkcztcbiAgbW9kZS5iZWdpbiA9IGNvbmNhdChvcmlnaW5hbE1vZGUuYmVmb3JlTWF0Y2gsIGxvb2thaGVhZChvcmlnaW5hbE1vZGUuYmVnaW4pKTtcbiAgbW9kZS5zdGFydHMgPSB7XG4gICAgcmVsZXZhbmNlOiAwLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBPYmplY3QuYXNzaWduKG9yaWdpbmFsTW9kZSwgeyBlbmRzUGFyZW50OiB0cnVlIH0pXG4gICAgXVxuICB9O1xuICBtb2RlLnJlbGV2YW5jZSA9IDA7XG5cbiAgZGVsZXRlIG9yaWdpbmFsTW9kZS5iZWZvcmVNYXRjaDtcbn07XG5cbi8vIGtleXdvcmRzIHRoYXQgc2hvdWxkIGhhdmUgbm8gZGVmYXVsdCByZWxldmFuY2UgdmFsdWVcbmNvbnN0IENPTU1PTl9LRVlXT1JEUyA9IFtcbiAgJ29mJyxcbiAgJ2FuZCcsXG4gICdmb3InLFxuICAnaW4nLFxuICAnbm90JyxcbiAgJ29yJyxcbiAgJ2lmJyxcbiAgJ3RoZW4nLFxuICAncGFyZW50JywgLy8gY29tbW9uIHZhcmlhYmxlIG5hbWVcbiAgJ2xpc3QnLCAvLyBjb21tb24gdmFyaWFibGUgbmFtZVxuICAndmFsdWUnIC8vIGNvbW1vbiB2YXJpYWJsZSBuYW1lXG5dO1xuXG5jb25zdCBERUZBVUxUX0tFWVdPUkRfU0NPUEUgPSBcImtleXdvcmRcIjtcblxuLyoqXG4gKiBHaXZlbiByYXcga2V5d29yZHMgZnJvbSBhIGxhbmd1YWdlIGRlZmluaXRpb24sIGNvbXBpbGUgdGhlbS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZyB8IFJlY29yZDxzdHJpbmcsc3RyaW5nfHN0cmluZ1tdPiB8IEFycmF5PHN0cmluZz59IHJhd0tleXdvcmRzXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGNhc2VJbnNlbnNpdGl2ZVxuICovXG5mdW5jdGlvbiBjb21waWxlS2V5d29yZHMocmF3S2V5d29yZHMsIGNhc2VJbnNlbnNpdGl2ZSwgc2NvcGVOYW1lID0gREVGQVVMVF9LRVlXT1JEX1NDT1BFKSB7XG4gIC8qKiBAdHlwZSB7aW1wb3J0KFwiaGlnaGxpZ2h0LmpzL3ByaXZhdGVcIikuS2V5d29yZERpY3R9ICovXG4gIGNvbnN0IGNvbXBpbGVkS2V5d29yZHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gIC8vIGlucHV0IGNhbiBiZSBhIHN0cmluZyBvZiBrZXl3b3JkcywgYW4gYXJyYXkgb2Yga2V5d29yZHMsIG9yIGEgb2JqZWN0IHdpdGhcbiAgLy8gbmFtZWQga2V5cyByZXByZXNlbnRpbmcgc2NvcGVOYW1lICh3aGljaCBjYW4gdGhlbiBwb2ludCB0byBhIHN0cmluZyBvciBhcnJheSlcbiAgaWYgKHR5cGVvZiByYXdLZXl3b3JkcyA9PT0gJ3N0cmluZycpIHtcbiAgICBjb21waWxlTGlzdChzY29wZU5hbWUsIHJhd0tleXdvcmRzLnNwbGl0KFwiIFwiKSk7XG4gIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShyYXdLZXl3b3JkcykpIHtcbiAgICBjb21waWxlTGlzdChzY29wZU5hbWUsIHJhd0tleXdvcmRzKTtcbiAgfSBlbHNlIHtcbiAgICBPYmplY3Qua2V5cyhyYXdLZXl3b3JkcykuZm9yRWFjaChmdW5jdGlvbihzY29wZU5hbWUpIHtcbiAgICAgIC8vIGNvbGxhcHNlIGFsbCBvdXIgb2JqZWN0cyBiYWNrIGludG8gdGhlIHBhcmVudCBvYmplY3RcbiAgICAgIE9iamVjdC5hc3NpZ24oXG4gICAgICAgIGNvbXBpbGVkS2V5d29yZHMsXG4gICAgICAgIGNvbXBpbGVLZXl3b3JkcyhyYXdLZXl3b3Jkc1tzY29wZU5hbWVdLCBjYXNlSW5zZW5zaXRpdmUsIHNjb3BlTmFtZSlcbiAgICAgICk7XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIGNvbXBpbGVkS2V5d29yZHM7XG5cbiAgLy8gLS0tXG5cbiAgLyoqXG4gICAqIENvbXBpbGVzIGFuIGluZGl2aWR1YWwgbGlzdCBvZiBrZXl3b3Jkc1xuICAgKlxuICAgKiBFeDogXCJmb3IgaWYgd2hlbiB3aGlsZXw1XCJcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHNjb3BlTmFtZVxuICAgKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IGtleXdvcmRMaXN0XG4gICAqL1xuICBmdW5jdGlvbiBjb21waWxlTGlzdChzY29wZU5hbWUsIGtleXdvcmRMaXN0KSB7XG4gICAgaWYgKGNhc2VJbnNlbnNpdGl2ZSkge1xuICAgICAga2V5d29yZExpc3QgPSBrZXl3b3JkTGlzdC5tYXAoeCA9PiB4LnRvTG93ZXJDYXNlKCkpO1xuICAgIH1cbiAgICBrZXl3b3JkTGlzdC5mb3JFYWNoKGZ1bmN0aW9uKGtleXdvcmQpIHtcbiAgICAgIGNvbnN0IHBhaXIgPSBrZXl3b3JkLnNwbGl0KCd8Jyk7XG4gICAgICBjb21waWxlZEtleXdvcmRzW3BhaXJbMF1dID0gW3Njb3BlTmFtZSwgc2NvcmVGb3JLZXl3b3JkKHBhaXJbMF0sIHBhaXJbMV0pXTtcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIHByb3BlciBzY29yZSBmb3IgYSBnaXZlbiBrZXl3b3JkXG4gKlxuICogQWxzbyB0YWtlcyBpbnRvIGFjY291bnQgY29tbWVudCBrZXl3b3Jkcywgd2hpY2ggd2lsbCBiZSBzY29yZWQgMCBVTkxFU1NcbiAqIGFub3RoZXIgc2NvcmUgaGFzIGJlZW4gbWFudWFsbHkgYXNzaWduZWQuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5d29yZFxuICogQHBhcmFtIHtzdHJpbmd9IFtwcm92aWRlZFNjb3JlXVxuICovXG5mdW5jdGlvbiBzY29yZUZvcktleXdvcmQoa2V5d29yZCwgcHJvdmlkZWRTY29yZSkge1xuICAvLyBtYW51YWwgc2NvcmVzIGFsd2F5cyB3aW4gb3ZlciBjb21tb24ga2V5d29yZHNcbiAgLy8gc28geW91IGNhbiBmb3JjZSBhIHNjb3JlIG9mIDEgaWYgeW91IHJlYWxseSBpbnNpc3RcbiAgaWYgKHByb3ZpZGVkU2NvcmUpIHtcbiAgICByZXR1cm4gTnVtYmVyKHByb3ZpZGVkU2NvcmUpO1xuICB9XG5cbiAgcmV0dXJuIGNvbW1vbktleXdvcmQoa2V5d29yZCkgPyAwIDogMTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmVzIGlmIGEgZ2l2ZW4ga2V5d29yZCBpcyBjb21tb24gb3Igbm90XG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGtleXdvcmQgKi9cbmZ1bmN0aW9uIGNvbW1vbktleXdvcmQoa2V5d29yZCkge1xuICByZXR1cm4gQ09NTU9OX0tFWVdPUkRTLmluY2x1ZGVzKGtleXdvcmQudG9Mb3dlckNhc2UoKSk7XG59XG5cbi8qXG5cbkZvciB0aGUgcmVhc29uaW5nIGJlaGluZCB0aGlzIHBsZWFzZSBzZWU6XG5odHRwczovL2dpdGh1Yi5jb20vaGlnaGxpZ2h0anMvaGlnaGxpZ2h0LmpzL2lzc3Vlcy8yODgwI2lzc3VlY29tbWVudC03NDcyNzU0MTlcblxuKi9cblxuLyoqXG4gKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgYm9vbGVhbj59XG4gKi9cbmNvbnN0IHNlZW5EZXByZWNhdGlvbnMgPSB7fTtcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZVxuICovXG5jb25zdCBlcnJvciA9IChtZXNzYWdlKSA9PiB7XG4gIGNvbnNvbGUuZXJyb3IobWVzc2FnZSk7XG59O1xuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlXG4gKiBAcGFyYW0ge2FueX0gYXJnc1xuICovXG5jb25zdCB3YXJuID0gKG1lc3NhZ2UsIC4uLmFyZ3MpID0+IHtcbiAgY29uc29sZS5sb2coYFdBUk46ICR7bWVzc2FnZX1gLCAuLi5hcmdzKTtcbn07XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZlcnNpb25cbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlXG4gKi9cbmNvbnN0IGRlcHJlY2F0ZWQgPSAodmVyc2lvbiwgbWVzc2FnZSkgPT4ge1xuICBpZiAoc2VlbkRlcHJlY2F0aW9uc1tgJHt2ZXJzaW9ufS8ke21lc3NhZ2V9YF0pIHJldHVybjtcblxuICBjb25zb2xlLmxvZyhgRGVwcmVjYXRlZCBhcyBvZiAke3ZlcnNpb259LiAke21lc3NhZ2V9YCk7XG4gIHNlZW5EZXByZWNhdGlvbnNbYCR7dmVyc2lvbn0vJHttZXNzYWdlfWBdID0gdHJ1ZTtcbn07XG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLXRocm93LWxpdGVyYWwgKi9cblxuLyoqXG5AdHlwZWRlZiB7aW1wb3J0KCdoaWdobGlnaHQuanMnKS5Db21waWxlZE1vZGV9IENvbXBpbGVkTW9kZVxuKi9cblxuY29uc3QgTXVsdGlDbGFzc0Vycm9yID0gbmV3IEVycm9yKCk7XG5cbi8qKlxuICogUmVudW1iZXJzIGxhYmVsZWQgc2NvcGUgbmFtZXMgdG8gYWNjb3VudCBmb3IgYWRkaXRpb25hbCBpbm5lciBtYXRjaFxuICogZ3JvdXBzIHRoYXQgb3RoZXJ3aXNlIHdvdWxkIGJyZWFrIGV2ZXJ5dGhpbmcuXG4gKlxuICogTGV0cyBzYXkgd2UgMyBtYXRjaCBzY29wZXM6XG4gKlxuICogICB7IDEgPT4gLi4uLCAyID0+IC4uLiwgMyA9PiAuLi4gfVxuICpcbiAqIFNvIHdoYXQgd2UgbmVlZCBpcyBhIGNsZWFuIG1hdGNoIGxpa2UgdGhpczpcbiAqXG4gKiAgIChhKShiKShjKSA9PiBbIFwiYVwiLCBcImJcIiwgXCJjXCIgXVxuICpcbiAqIEJ1dCB0aGlzIGZhbGxzIGFwYXJ0IHdpdGggaW5uZXIgbWF0Y2ggZ3JvdXBzOlxuICpcbiAqIChhKSgoKGIpKSkoYykgPT4gW1wiYVwiLCBcImJcIiwgXCJiXCIsIFwiYlwiLCBcImNcIiBdXG4gKlxuICogT3VyIHNjb3BlcyBhcmUgbm93IFwib3V0IG9mIGFsaWdubWVudFwiIGFuZCB3ZSdyZSByZXBlYXRpbmcgYGJgIDMgdGltZXMuXG4gKiBXaGF0IG5lZWRzIHRvIGhhcHBlbiBpcyB0aGUgbnVtYmVycyBhcmUgcmVtYXBwZWQ6XG4gKlxuICogICB7IDEgPT4gLi4uLCAyID0+IC4uLiwgNSA9PiAuLi4gfVxuICpcbiAqIFdlIGFsc28gbmVlZCB0byBrbm93IHRoYXQgdGhlIE9OTFkgZ3JvdXBzIHRoYXQgc2hvdWxkIGJlIG91dHB1dFxuICogYXJlIDEsIDIsIGFuZCA1LiAgVGhpcyBmdW5jdGlvbiBoYW5kbGVzIHRoaXMgYmVoYXZpb3IuXG4gKlxuICogQHBhcmFtIHtDb21waWxlZE1vZGV9IG1vZGVcbiAqIEBwYXJhbSB7QXJyYXk8UmVnRXhwIHwgc3RyaW5nPn0gcmVnZXhlc1xuICogQHBhcmFtIHt7a2V5OiBcImJlZ2luU2NvcGVcInxcImVuZFNjb3BlXCJ9fSBvcHRzXG4gKi9cbmZ1bmN0aW9uIHJlbWFwU2NvcGVOYW1lcyhtb2RlLCByZWdleGVzLCB7IGtleSB9KSB7XG4gIGxldCBvZmZzZXQgPSAwO1xuICBjb25zdCBzY29wZU5hbWVzID0gbW9kZVtrZXldO1xuICAvKiogQHR5cGUgUmVjb3JkPG51bWJlcixib29sZWFuPiAqL1xuICBjb25zdCBlbWl0ID0ge307XG4gIC8qKiBAdHlwZSBSZWNvcmQ8bnVtYmVyLHN0cmluZz4gKi9cbiAgY29uc3QgcG9zaXRpb25zID0ge307XG5cbiAgZm9yIChsZXQgaSA9IDE7IGkgPD0gcmVnZXhlcy5sZW5ndGg7IGkrKykge1xuICAgIHBvc2l0aW9uc1tpICsgb2Zmc2V0XSA9IHNjb3BlTmFtZXNbaV07XG4gICAgZW1pdFtpICsgb2Zmc2V0XSA9IHRydWU7XG4gICAgb2Zmc2V0ICs9IGNvdW50TWF0Y2hHcm91cHMocmVnZXhlc1tpIC0gMV0pO1xuICB9XG4gIC8vIHdlIHVzZSBfZW1pdCB0byBrZWVwIHRyYWNrIG9mIHdoaWNoIG1hdGNoIGdyb3VwcyBhcmUgXCJ0b3AtbGV2ZWxcIiB0byBhdm9pZCBkb3VibGVcbiAgLy8gb3V0cHV0IGZyb20gaW5zaWRlIG1hdGNoIGdyb3Vwc1xuICBtb2RlW2tleV0gPSBwb3NpdGlvbnM7XG4gIG1vZGVba2V5XS5fZW1pdCA9IGVtaXQ7XG4gIG1vZGVba2V5XS5fbXVsdGkgPSB0cnVlO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7Q29tcGlsZWRNb2RlfSBtb2RlXG4gKi9cbmZ1bmN0aW9uIGJlZ2luTXVsdGlDbGFzcyhtb2RlKSB7XG4gIGlmICghQXJyYXkuaXNBcnJheShtb2RlLmJlZ2luKSkgcmV0dXJuO1xuXG4gIGlmIChtb2RlLnNraXAgfHwgbW9kZS5leGNsdWRlQmVnaW4gfHwgbW9kZS5yZXR1cm5CZWdpbikge1xuICAgIGVycm9yKFwic2tpcCwgZXhjbHVkZUJlZ2luLCByZXR1cm5CZWdpbiBub3QgY29tcGF0aWJsZSB3aXRoIGJlZ2luU2NvcGU6IHt9XCIpO1xuICAgIHRocm93IE11bHRpQ2xhc3NFcnJvcjtcbiAgfVxuXG4gIGlmICh0eXBlb2YgbW9kZS5iZWdpblNjb3BlICE9PSBcIm9iamVjdFwiIHx8IG1vZGUuYmVnaW5TY29wZSA9PT0gbnVsbCkge1xuICAgIGVycm9yKFwiYmVnaW5TY29wZSBtdXN0IGJlIG9iamVjdFwiKTtcbiAgICB0aHJvdyBNdWx0aUNsYXNzRXJyb3I7XG4gIH1cblxuICByZW1hcFNjb3BlTmFtZXMobW9kZSwgbW9kZS5iZWdpbiwgeyBrZXk6IFwiYmVnaW5TY29wZVwiIH0pO1xuICBtb2RlLmJlZ2luID0gX3Jld3JpdGVCYWNrcmVmZXJlbmNlcyhtb2RlLmJlZ2luLCB7IGpvaW5XaXRoOiBcIlwiIH0pO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7Q29tcGlsZWRNb2RlfSBtb2RlXG4gKi9cbmZ1bmN0aW9uIGVuZE11bHRpQ2xhc3MobW9kZSkge1xuICBpZiAoIUFycmF5LmlzQXJyYXkobW9kZS5lbmQpKSByZXR1cm47XG5cbiAgaWYgKG1vZGUuc2tpcCB8fCBtb2RlLmV4Y2x1ZGVFbmQgfHwgbW9kZS5yZXR1cm5FbmQpIHtcbiAgICBlcnJvcihcInNraXAsIGV4Y2x1ZGVFbmQsIHJldHVybkVuZCBub3QgY29tcGF0aWJsZSB3aXRoIGVuZFNjb3BlOiB7fVwiKTtcbiAgICB0aHJvdyBNdWx0aUNsYXNzRXJyb3I7XG4gIH1cblxuICBpZiAodHlwZW9mIG1vZGUuZW5kU2NvcGUgIT09IFwib2JqZWN0XCIgfHwgbW9kZS5lbmRTY29wZSA9PT0gbnVsbCkge1xuICAgIGVycm9yKFwiZW5kU2NvcGUgbXVzdCBiZSBvYmplY3RcIik7XG4gICAgdGhyb3cgTXVsdGlDbGFzc0Vycm9yO1xuICB9XG5cbiAgcmVtYXBTY29wZU5hbWVzKG1vZGUsIG1vZGUuZW5kLCB7IGtleTogXCJlbmRTY29wZVwiIH0pO1xuICBtb2RlLmVuZCA9IF9yZXdyaXRlQmFja3JlZmVyZW5jZXMobW9kZS5lbmQsIHsgam9pbldpdGg6IFwiXCIgfSk7XG59XG5cbi8qKlxuICogdGhpcyBleGlzdHMgb25seSB0byBhbGxvdyBgc2NvcGU6IHt9YCB0byBiZSB1c2VkIGJlc2lkZSBgbWF0Y2g6YFxuICogT3RoZXJ3aXNlIGBiZWdpblNjb3BlYCB3b3VsZCBuZWNlc3NhcnkgYW5kIHRoYXQgd291bGQgbG9vayB3ZWlyZFxuXG4gIHtcbiAgICBtYXRjaDogWyAvZGVmLywgL1xcdysvIF1cbiAgICBzY29wZTogeyAxOiBcImtleXdvcmRcIiAsIDI6IFwidGl0bGVcIiB9XG4gIH1cblxuICogQHBhcmFtIHtDb21waWxlZE1vZGV9IG1vZGVcbiAqL1xuZnVuY3Rpb24gc2NvcGVTdWdhcihtb2RlKSB7XG4gIGlmIChtb2RlLnNjb3BlICYmIHR5cGVvZiBtb2RlLnNjb3BlID09PSBcIm9iamVjdFwiICYmIG1vZGUuc2NvcGUgIT09IG51bGwpIHtcbiAgICBtb2RlLmJlZ2luU2NvcGUgPSBtb2RlLnNjb3BlO1xuICAgIGRlbGV0ZSBtb2RlLnNjb3BlO1xuICB9XG59XG5cbi8qKlxuICogQHBhcmFtIHtDb21waWxlZE1vZGV9IG1vZGVcbiAqL1xuZnVuY3Rpb24gTXVsdGlDbGFzcyhtb2RlKSB7XG4gIHNjb3BlU3VnYXIobW9kZSk7XG5cbiAgaWYgKHR5cGVvZiBtb2RlLmJlZ2luU2NvcGUgPT09IFwic3RyaW5nXCIpIHtcbiAgICBtb2RlLmJlZ2luU2NvcGUgPSB7IF93cmFwOiBtb2RlLmJlZ2luU2NvcGUgfTtcbiAgfVxuICBpZiAodHlwZW9mIG1vZGUuZW5kU2NvcGUgPT09IFwic3RyaW5nXCIpIHtcbiAgICBtb2RlLmVuZFNjb3BlID0geyBfd3JhcDogbW9kZS5lbmRTY29wZSB9O1xuICB9XG5cbiAgYmVnaW5NdWx0aUNsYXNzKG1vZGUpO1xuICBlbmRNdWx0aUNsYXNzKG1vZGUpO1xufVxuXG4vKipcbkB0eXBlZGVmIHtpbXBvcnQoJ2hpZ2hsaWdodC5qcycpLk1vZGV9IE1vZGVcbkB0eXBlZGVmIHtpbXBvcnQoJ2hpZ2hsaWdodC5qcycpLkNvbXBpbGVkTW9kZX0gQ29tcGlsZWRNb2RlXG5AdHlwZWRlZiB7aW1wb3J0KCdoaWdobGlnaHQuanMnKS5MYW5ndWFnZX0gTGFuZ3VhZ2VcbkB0eXBlZGVmIHtpbXBvcnQoJ2hpZ2hsaWdodC5qcycpLkhMSlNQbHVnaW59IEhMSlNQbHVnaW5cbkB0eXBlZGVmIHtpbXBvcnQoJ2hpZ2hsaWdodC5qcycpLkNvbXBpbGVkTGFuZ3VhZ2V9IENvbXBpbGVkTGFuZ3VhZ2VcbiovXG5cbi8vIGNvbXBpbGF0aW9uXG5cbi8qKlxuICogQ29tcGlsZXMgYSBsYW5ndWFnZSBkZWZpbml0aW9uIHJlc3VsdFxuICpcbiAqIEdpdmVuIHRoZSByYXcgcmVzdWx0IG9mIGEgbGFuZ3VhZ2UgZGVmaW5pdGlvbiAoTGFuZ3VhZ2UpLCBjb21waWxlcyB0aGlzIHNvXG4gKiB0aGF0IGl0IGlzIHJlYWR5IGZvciBoaWdobGlnaHRpbmcgY29kZS5cbiAqIEBwYXJhbSB7TGFuZ3VhZ2V9IGxhbmd1YWdlXG4gKiBAcmV0dXJucyB7Q29tcGlsZWRMYW5ndWFnZX1cbiAqL1xuZnVuY3Rpb24gY29tcGlsZUxhbmd1YWdlKGxhbmd1YWdlKSB7XG4gIC8qKlxuICAgKiBCdWlsZHMgYSByZWdleCB3aXRoIHRoZSBjYXNlIHNlbnNpdGl2aXR5IG9mIHRoZSBjdXJyZW50IGxhbmd1YWdlXG4gICAqXG4gICAqIEBwYXJhbSB7UmVnRXhwIHwgc3RyaW5nfSB2YWx1ZVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtnbG9iYWxdXG4gICAqL1xuICBmdW5jdGlvbiBsYW5nUmUodmFsdWUsIGdsb2JhbCkge1xuICAgIHJldHVybiBuZXcgUmVnRXhwKFxuICAgICAgc291cmNlKHZhbHVlKSxcbiAgICAgICdtJ1xuICAgICAgKyAobGFuZ3VhZ2UuY2FzZV9pbnNlbnNpdGl2ZSA/ICdpJyA6ICcnKVxuICAgICAgKyAobGFuZ3VhZ2UudW5pY29kZVJlZ2V4ID8gJ3UnIDogJycpXG4gICAgICArIChnbG9iYWwgPyAnZycgOiAnJylcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAgU3RvcmVzIG11bHRpcGxlIHJlZ3VsYXIgZXhwcmVzc2lvbnMgYW5kIGFsbG93cyB5b3UgdG8gcXVpY2tseSBzZWFyY2ggZm9yXG4gICAgdGhlbSBhbGwgaW4gYSBzdHJpbmcgc2ltdWx0YW5lb3VzbHkgLSByZXR1cm5pbmcgdGhlIGZpcnN0IG1hdGNoLiAgSXQgZG9lc1xuICAgIHRoaXMgYnkgY3JlYXRpbmcgYSBodWdlIChhfGJ8YykgcmVnZXggLSBlYWNoIGluZGl2aWR1YWwgaXRlbSB3cmFwcGVkIHdpdGggKClcbiAgICBhbmQgam9pbmVkIGJ5IGB8YCAtIHVzaW5nIG1hdGNoIGdyb3VwcyB0byB0cmFjayBwb3NpdGlvbi4gIFdoZW4gYSBtYXRjaCBpc1xuICAgIGZvdW5kIGNoZWNraW5nIHdoaWNoIHBvc2l0aW9uIGluIHRoZSBhcnJheSBoYXMgY29udGVudCBhbGxvd3MgdXMgdG8gZmlndXJlXG4gICAgb3V0IHdoaWNoIG9mIHRoZSBvcmlnaW5hbCByZWdleGVzIC8gbWF0Y2ggZ3JvdXBzIHRyaWdnZXJlZCB0aGUgbWF0Y2guXG5cbiAgICBUaGUgbWF0Y2ggb2JqZWN0IGl0c2VsZiAodGhlIHJlc3VsdCBvZiBgUmVnZXguZXhlY2ApIGlzIHJldHVybmVkIGJ1dCBhbHNvXG4gICAgZW5oYW5jZWQgYnkgbWVyZ2luZyBpbiBhbnkgbWV0YS1kYXRhIHRoYXQgd2FzIHJlZ2lzdGVyZWQgd2l0aCB0aGUgcmVnZXguXG4gICAgVGhpcyBpcyBob3cgd2Uga2VlcCB0cmFjayBvZiB3aGljaCBtb2RlIG1hdGNoZWQsIGFuZCB3aGF0IHR5cGUgb2YgcnVsZVxuICAgIChgaWxsZWdhbGAsIGBiZWdpbmAsIGVuZCwgZXRjKS5cbiAgKi9cbiAgY2xhc3MgTXVsdGlSZWdleCB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICB0aGlzLm1hdGNoSW5kZXhlcyA9IHt9O1xuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgdGhpcy5yZWdleGVzID0gW107XG4gICAgICB0aGlzLm1hdGNoQXQgPSAxO1xuICAgICAgdGhpcy5wb3NpdGlvbiA9IDA7XG4gICAgfVxuXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGFkZFJ1bGUocmUsIG9wdHMpIHtcbiAgICAgIG9wdHMucG9zaXRpb24gPSB0aGlzLnBvc2l0aW9uKys7XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICB0aGlzLm1hdGNoSW5kZXhlc1t0aGlzLm1hdGNoQXRdID0gb3B0cztcbiAgICAgIHRoaXMucmVnZXhlcy5wdXNoKFtvcHRzLCByZV0pO1xuICAgICAgdGhpcy5tYXRjaEF0ICs9IGNvdW50TWF0Y2hHcm91cHMocmUpICsgMTtcbiAgICB9XG5cbiAgICBjb21waWxlKCkge1xuICAgICAgaWYgKHRoaXMucmVnZXhlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgLy8gYXZvaWRzIHRoZSBuZWVkIHRvIGNoZWNrIGxlbmd0aCBldmVyeSB0aW1lIGV4ZWMgaXMgY2FsbGVkXG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgdGhpcy5leGVjID0gKCkgPT4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHRlcm1pbmF0b3JzID0gdGhpcy5yZWdleGVzLm1hcChlbCA9PiBlbFsxXSk7XG4gICAgICB0aGlzLm1hdGNoZXJSZSA9IGxhbmdSZShfcmV3cml0ZUJhY2tyZWZlcmVuY2VzKHRlcm1pbmF0b3JzLCB7IGpvaW5XaXRoOiAnfCcgfSksIHRydWUpO1xuICAgICAgdGhpcy5sYXN0SW5kZXggPSAwO1xuICAgIH1cblxuICAgIC8qKiBAcGFyYW0ge3N0cmluZ30gcyAqL1xuICAgIGV4ZWMocykge1xuICAgICAgdGhpcy5tYXRjaGVyUmUubGFzdEluZGV4ID0gdGhpcy5sYXN0SW5kZXg7XG4gICAgICBjb25zdCBtYXRjaCA9IHRoaXMubWF0Y2hlclJlLmV4ZWMocyk7XG4gICAgICBpZiAoIW1hdGNoKSB7IHJldHVybiBudWxsOyB9XG5cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZmluZWRcbiAgICAgIGNvbnN0IGkgPSBtYXRjaC5maW5kSW5kZXgoKGVsLCBpKSA9PiBpID4gMCAmJiBlbCAhPT0gdW5kZWZpbmVkKTtcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIGNvbnN0IG1hdGNoRGF0YSA9IHRoaXMubWF0Y2hJbmRleGVzW2ldO1xuICAgICAgLy8gdHJpbSBvZmYgYW55IGVhcmxpZXIgbm9uLXJlbGV2YW50IG1hdGNoIGdyb3VwcyAoaWUsIHRoZSBvdGhlciByZWdleFxuICAgICAgLy8gbWF0Y2ggZ3JvdXBzIHRoYXQgbWFrZSB1cCB0aGUgbXVsdGktbWF0Y2hlcilcbiAgICAgIG1hdGNoLnNwbGljZSgwLCBpKTtcblxuICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24obWF0Y2gsIG1hdGNoRGF0YSk7XG4gICAgfVxuICB9XG5cbiAgLypcbiAgICBDcmVhdGVkIHRvIHNvbHZlIHRoZSBrZXkgZGVmaWNpZW50bHkgd2l0aCBNdWx0aVJlZ2V4IC0gdGhlcmUgaXMgbm8gd2F5IHRvXG4gICAgdGVzdCBmb3IgbXVsdGlwbGUgbWF0Y2hlcyBhdCBhIHNpbmdsZSBsb2NhdGlvbi4gIFdoeSB3b3VsZCB3ZSBuZWVkIHRvIGRvXG4gICAgdGhhdD8gIEluIHRoZSBmdXR1cmUgYSBtb3JlIGR5bmFtaWMgZW5naW5lIHdpbGwgYWxsb3cgY2VydGFpbiBtYXRjaGVzIHRvIGJlXG4gICAgaWdub3JlZC4gIEFuIGV4YW1wbGU6IGlmIHdlIG1hdGNoZWQgc2F5IHRoZSAzcmQgcmVnZXggaW4gYSBsYXJnZSBncm91cCBidXRcbiAgICBkZWNpZGVkIHRvIGlnbm9yZSBpdCAtIHdlJ2QgbmVlZCB0byBzdGFydGVkIHRlc3RpbmcgYWdhaW4gYXQgdGhlIDR0aFxuICAgIHJlZ2V4Li4uIGJ1dCBNdWx0aVJlZ2V4IGl0c2VsZiBnaXZlcyB1cyBubyByZWFsIHdheSB0byBkbyB0aGF0LlxuXG4gICAgU28gd2hhdCB0aGlzIGNsYXNzIGNyZWF0ZXMgTXVsdGlSZWdleHMgb24gdGhlIGZseSBmb3Igd2hhdGV2ZXIgc2VhcmNoXG4gICAgcG9zaXRpb24gdGhleSBhcmUgbmVlZGVkLlxuXG4gICAgTk9URTogVGhlc2UgYWRkaXRpb25hbCBNdWx0aVJlZ2V4IG9iamVjdHMgYXJlIGNyZWF0ZWQgZHluYW1pY2FsbHkuICBGb3IgbW9zdFxuICAgIGdyYW1tYXJzIG1vc3Qgb2YgdGhlIHRpbWUgd2Ugd2lsbCBuZXZlciBhY3R1YWxseSBuZWVkIGFueXRoaW5nIG1vcmUgdGhhbiB0aGVcbiAgICBmaXJzdCBNdWx0aVJlZ2V4IC0gc28gdGhpcyBzaG91bGRuJ3QgaGF2ZSB0b28gbXVjaCBvdmVyaGVhZC5cblxuICAgIFNheSB0aGlzIGlzIG91ciBzZWFyY2ggZ3JvdXAsIGFuZCB3ZSBtYXRjaCByZWdleDMsIGJ1dCB3aXNoIHRvIGlnbm9yZSBpdC5cblxuICAgICAgcmVnZXgxIHwgcmVnZXgyIHwgcmVnZXgzIHwgcmVnZXg0IHwgcmVnZXg1ICAgICcgaWUsIHN0YXJ0QXQgPSAwXG5cbiAgICBXaGF0IHdlIG5lZWQgaXMgYSBuZXcgTXVsdGlSZWdleCB0aGF0IG9ubHkgaW5jbHVkZXMgdGhlIHJlbWFpbmluZ1xuICAgIHBvc3NpYmlsaXRpZXM6XG5cbiAgICAgIHJlZ2V4NCB8IHJlZ2V4NSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIGllLCBzdGFydEF0ID0gM1xuXG4gICAgVGhpcyBjbGFzcyB3cmFwcyBhbGwgdGhhdCBjb21wbGV4aXR5IHVwIGluIGEgc2ltcGxlIEFQSS4uLiBgc3RhcnRBdGAgZGVjaWRlc1xuICAgIHdoZXJlIGluIHRoZSBhcnJheSBvZiBleHByZXNzaW9ucyB0byBzdGFydCBkb2luZyB0aGUgbWF0Y2hpbmcuIEl0XG4gICAgYXV0by1pbmNyZW1lbnRzLCBzbyBpZiBhIG1hdGNoIGlzIGZvdW5kIGF0IHBvc2l0aW9uIDIsIHRoZW4gc3RhcnRBdCB3aWxsIGJlXG4gICAgc2V0IHRvIDMuICBJZiB0aGUgZW5kIGlzIHJlYWNoZWQgc3RhcnRBdCB3aWxsIHJldHVybiB0byAwLlxuXG4gICAgTU9TVCBvZiB0aGUgdGltZSB0aGUgcGFyc2VyIHdpbGwgYmUgc2V0dGluZyBzdGFydEF0IG1hbnVhbGx5IHRvIDAuXG4gICovXG4gIGNsYXNzIFJlc3VtYWJsZU11bHRpUmVnZXgge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgdGhpcy5ydWxlcyA9IFtdO1xuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgdGhpcy5tdWx0aVJlZ2V4ZXMgPSBbXTtcbiAgICAgIHRoaXMuY291bnQgPSAwO1xuXG4gICAgICB0aGlzLmxhc3RJbmRleCA9IDA7XG4gICAgICB0aGlzLnJlZ2V4SW5kZXggPSAwO1xuICAgIH1cblxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBnZXRNYXRjaGVyKGluZGV4KSB7XG4gICAgICBpZiAodGhpcy5tdWx0aVJlZ2V4ZXNbaW5kZXhdKSByZXR1cm4gdGhpcy5tdWx0aVJlZ2V4ZXNbaW5kZXhdO1xuXG4gICAgICBjb25zdCBtYXRjaGVyID0gbmV3IE11bHRpUmVnZXgoKTtcbiAgICAgIHRoaXMucnVsZXMuc2xpY2UoaW5kZXgpLmZvckVhY2goKFtyZSwgb3B0c10pID0+IG1hdGNoZXIuYWRkUnVsZShyZSwgb3B0cykpO1xuICAgICAgbWF0Y2hlci5jb21waWxlKCk7XG4gICAgICB0aGlzLm11bHRpUmVnZXhlc1tpbmRleF0gPSBtYXRjaGVyO1xuICAgICAgcmV0dXJuIG1hdGNoZXI7XG4gICAgfVxuXG4gICAgcmVzdW1pbmdTY2FuQXRTYW1lUG9zaXRpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZWdleEluZGV4ICE9PSAwO1xuICAgIH1cblxuICAgIGNvbnNpZGVyQWxsKCkge1xuICAgICAgdGhpcy5yZWdleEluZGV4ID0gMDtcbiAgICB9XG5cbiAgICAvLyBAdHMtaWdub3JlXG4gICAgYWRkUnVsZShyZSwgb3B0cykge1xuICAgICAgdGhpcy5ydWxlcy5wdXNoKFtyZSwgb3B0c10pO1xuICAgICAgaWYgKG9wdHMudHlwZSA9PT0gXCJiZWdpblwiKSB0aGlzLmNvdW50Kys7XG4gICAgfVxuXG4gICAgLyoqIEBwYXJhbSB7c3RyaW5nfSBzICovXG4gICAgZXhlYyhzKSB7XG4gICAgICBjb25zdCBtID0gdGhpcy5nZXRNYXRjaGVyKHRoaXMucmVnZXhJbmRleCk7XG4gICAgICBtLmxhc3RJbmRleCA9IHRoaXMubGFzdEluZGV4O1xuICAgICAgbGV0IHJlc3VsdCA9IG0uZXhlYyhzKTtcblxuICAgICAgLy8gVGhlIGZvbGxvd2luZyBpcyBiZWNhdXNlIHdlIGhhdmUgbm8gZWFzeSB3YXkgdG8gc2F5IFwicmVzdW1lIHNjYW5uaW5nIGF0IHRoZVxuICAgICAgLy8gZXhpc3RpbmcgcG9zaXRpb24gYnV0IGFsc28gc2tpcCB0aGUgY3VycmVudCBydWxlIE9OTFlcIi4gV2hhdCBoYXBwZW5zIGlzXG4gICAgICAvLyBhbGwgcHJpb3IgcnVsZXMgYXJlIGFsc28gc2tpcHBlZCB3aGljaCBjYW4gcmVzdWx0IGluIG1hdGNoaW5nIHRoZSB3cm9uZ1xuICAgICAgLy8gdGhpbmcuIEV4YW1wbGUgb2YgbWF0Y2hpbmcgXCJib29nZXJcIjpcblxuICAgICAgLy8gb3VyIG1hdGNoZXIgaXMgW3N0cmluZywgXCJib29nZXJcIiwgbnVtYmVyXVxuICAgICAgLy9cbiAgICAgIC8vIC4uLi5ib29nZXIuLi4uXG5cbiAgICAgIC8vIGlmIFwiYm9vZ2VyXCIgaXMgaWdub3JlZCB0aGVuIHdlJ2QgcmVhbGx5IG5lZWQgYSByZWdleCB0byBzY2FuIGZyb20gdGhlXG4gICAgICAvLyBTQU1FIHBvc2l0aW9uIGZvciBvbmx5OiBbc3RyaW5nLCBudW1iZXJdIGJ1dCBpZ25vcmluZyBcImJvb2dlclwiIChpZiBpdFxuICAgICAgLy8gd2FzIHRoZSBmaXJzdCBtYXRjaCksIGEgc2ltcGxlIHJlc3VtZSB3b3VsZCBzY2FuIGFoZWFkIHdobyBrbm93cyBob3dcbiAgICAgIC8vIGZhciBsb29raW5nIG9ubHkgZm9yIFwibnVtYmVyXCIsIGlnbm9yaW5nIHBvdGVudGlhbCBzdHJpbmcgbWF0Y2hlcyAob3JcbiAgICAgIC8vIGZ1dHVyZSBcImJvb2dlclwiIG1hdGNoZXMgdGhhdCBtaWdodCBiZSB2YWxpZC4pXG5cbiAgICAgIC8vIFNvIHdoYXQgd2UgZG86IFdlIGV4ZWN1dGUgdHdvIG1hdGNoZXJzLCBvbmUgcmVzdW1pbmcgYXQgdGhlIHNhbWVcbiAgICAgIC8vIHBvc2l0aW9uLCBidXQgdGhlIHNlY29uZCBmdWxsIG1hdGNoZXIgc3RhcnRpbmcgYXQgdGhlIHBvc2l0aW9uIGFmdGVyOlxuXG4gICAgICAvLyAgICAgLy0tLSByZXN1bWUgZmlyc3QgcmVnZXggbWF0Y2ggaGVyZSAoZm9yIFtudW1iZXJdKVxuICAgICAgLy8gICAgIHwvLS0tLSBmdWxsIG1hdGNoIGhlcmUgZm9yIFtzdHJpbmcsIFwiYm9vZ2VyXCIsIG51bWJlcl1cbiAgICAgIC8vICAgICB2dlxuICAgICAgLy8gLi4uLmJvb2dlci4uLi5cblxuICAgICAgLy8gV2hpY2ggZXZlciByZXN1bHRzIGluIGEgbWF0Y2ggZmlyc3QgaXMgdGhlbiB1c2VkLiBTbyB0aGlzIDMtNCBzdGVwXG4gICAgICAvLyBwcm9jZXNzIGVzc2VudGlhbGx5IGFsbG93cyB1cyB0byBzYXkgXCJtYXRjaCBhdCB0aGlzIHBvc2l0aW9uLCBleGNsdWRpbmdcbiAgICAgIC8vIGEgcHJpb3IgcnVsZSB0aGF0IHdhcyBpZ25vcmVkXCIuXG4gICAgICAvL1xuICAgICAgLy8gMS4gTWF0Y2ggXCJib29nZXJcIiBmaXJzdCwgaWdub3JlLiBBbHNvIHByb3ZlcyB0aGF0IFtzdHJpbmddIGRvZXMgbm9uIG1hdGNoLlxuICAgICAgLy8gMi4gUmVzdW1lIG1hdGNoaW5nIGZvciBbbnVtYmVyXVxuICAgICAgLy8gMy4gTWF0Y2ggYXQgaW5kZXggKyAxIGZvciBbc3RyaW5nLCBcImJvb2dlclwiLCBudW1iZXJdXG4gICAgICAvLyA0LiBJZiAjMiBhbmQgIzMgcmVzdWx0IGluIG1hdGNoZXMsIHdoaWNoIGNhbWUgZmlyc3Q/XG4gICAgICBpZiAodGhpcy5yZXN1bWluZ1NjYW5BdFNhbWVQb3NpdGlvbigpKSB7XG4gICAgICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0LmluZGV4ID09PSB0aGlzLmxhc3RJbmRleCkgOyBlbHNlIHsgLy8gdXNlIHRoZSBzZWNvbmQgbWF0Y2hlciByZXN1bHRcbiAgICAgICAgICBjb25zdCBtMiA9IHRoaXMuZ2V0TWF0Y2hlcigwKTtcbiAgICAgICAgICBtMi5sYXN0SW5kZXggPSB0aGlzLmxhc3RJbmRleCArIDE7XG4gICAgICAgICAgcmVzdWx0ID0gbTIuZXhlYyhzKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgIHRoaXMucmVnZXhJbmRleCArPSByZXN1bHQucG9zaXRpb24gKyAxO1xuICAgICAgICBpZiAodGhpcy5yZWdleEluZGV4ID09PSB0aGlzLmNvdW50KSB7XG4gICAgICAgICAgLy8gd3JhcC1hcm91bmQgdG8gY29uc2lkZXJpbmcgYWxsIG1hdGNoZXMgYWdhaW5cbiAgICAgICAgICB0aGlzLmNvbnNpZGVyQWxsKCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2l2ZW4gYSBtb2RlLCBidWlsZHMgYSBodWdlIFJlc3VtYWJsZU11bHRpUmVnZXggdGhhdCBjYW4gYmUgdXNlZCB0byB3YWxrXG4gICAqIHRoZSBjb250ZW50IGFuZCBmaW5kIG1hdGNoZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7Q29tcGlsZWRNb2RlfSBtb2RlXG4gICAqIEByZXR1cm5zIHtSZXN1bWFibGVNdWx0aVJlZ2V4fVxuICAgKi9cbiAgZnVuY3Rpb24gYnVpbGRNb2RlUmVnZXgobW9kZSkge1xuICAgIGNvbnN0IG1tID0gbmV3IFJlc3VtYWJsZU11bHRpUmVnZXgoKTtcblxuICAgIG1vZGUuY29udGFpbnMuZm9yRWFjaCh0ZXJtID0+IG1tLmFkZFJ1bGUodGVybS5iZWdpbiwgeyBydWxlOiB0ZXJtLCB0eXBlOiBcImJlZ2luXCIgfSkpO1xuXG4gICAgaWYgKG1vZGUudGVybWluYXRvckVuZCkge1xuICAgICAgbW0uYWRkUnVsZShtb2RlLnRlcm1pbmF0b3JFbmQsIHsgdHlwZTogXCJlbmRcIiB9KTtcbiAgICB9XG4gICAgaWYgKG1vZGUuaWxsZWdhbCkge1xuICAgICAgbW0uYWRkUnVsZShtb2RlLmlsbGVnYWwsIHsgdHlwZTogXCJpbGxlZ2FsXCIgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1tO1xuICB9XG5cbiAgLyoqIHNraXAgdnMgYWJvcnQgdnMgaWdub3JlXG4gICAqXG4gICAqIEBza2lwICAgLSBUaGUgbW9kZSBpcyBzdGlsbCBlbnRlcmVkIGFuZCBleGl0ZWQgbm9ybWFsbHkgKGFuZCBjb250YWlucyBydWxlcyBhcHBseSksXG4gICAqICAgICAgICAgICBidXQgYWxsIGNvbnRlbnQgaXMgaGVsZCBhbmQgYWRkZWQgdG8gdGhlIHBhcmVudCBidWZmZXIgcmF0aGVyIHRoYW4gYmVpbmdcbiAgICogICAgICAgICAgIG91dHB1dCB3aGVuIHRoZSBtb2RlIGVuZHMuICBNb3N0bHkgdXNlZCB3aXRoIGBzdWJsYW5ndWFnZWAgdG8gYnVpbGQgdXBcbiAgICogICAgICAgICAgIGEgc2luZ2xlIGxhcmdlIGJ1ZmZlciB0aGFuIGNhbiBiZSBwYXJzZWQgYnkgc3VibGFuZ3VhZ2UuXG4gICAqXG4gICAqICAgICAgICAgICAgIC0gVGhlIG1vZGUgYmVnaW4gYW5kcyBlbmRzIG5vcm1hbGx5LlxuICAgKiAgICAgICAgICAgICAtIENvbnRlbnQgbWF0Y2hlZCBpcyBhZGRlZCB0byB0aGUgcGFyZW50IG1vZGUgYnVmZmVyLlxuICAgKiAgICAgICAgICAgICAtIFRoZSBwYXJzZXIgY3Vyc29yIGlzIG1vdmVkIGZvcndhcmQgbm9ybWFsbHkuXG4gICAqXG4gICAqIEBhYm9ydCAgLSBBIGhhY2sgcGxhY2Vob2xkZXIgdW50aWwgd2UgaGF2ZSBpZ25vcmUuICBBYm9ydHMgdGhlIG1vZGUgKGFzIGlmIGl0XG4gICAqICAgICAgICAgICBuZXZlciBtYXRjaGVkKSBidXQgRE9FUyBOT1QgY29udGludWUgdG8gbWF0Y2ggc3Vic2VxdWVudCBgY29udGFpbnNgXG4gICAqICAgICAgICAgICBtb2Rlcy4gIEFib3J0IGlzIGJhZC9zdWJvcHRpbWFsIGJlY2F1c2UgaXQgY2FuIHJlc3VsdCBpbiBtb2Rlc1xuICAgKiAgICAgICAgICAgZmFydGhlciBkb3duIG5vdCBnZXR0aW5nIGFwcGxpZWQgYmVjYXVzZSBhbiBlYXJsaWVyIHJ1bGUgZWF0cyB0aGVcbiAgICogICAgICAgICAgIGNvbnRlbnQgYnV0IHRoZW4gYWJvcnRzLlxuICAgKlxuICAgKiAgICAgICAgICAgICAtIFRoZSBtb2RlIGRvZXMgbm90IGJlZ2luLlxuICAgKiAgICAgICAgICAgICAtIENvbnRlbnQgbWF0Y2hlZCBieSBgYmVnaW5gIGlzIGFkZGVkIHRvIHRoZSBtb2RlIGJ1ZmZlci5cbiAgICogICAgICAgICAgICAgLSBUaGUgcGFyc2VyIGN1cnNvciBpcyBtb3ZlZCBmb3J3YXJkIGFjY29yZGluZ2x5LlxuICAgKlxuICAgKiBAaWdub3JlIC0gSWdub3JlcyB0aGUgbW9kZSAoYXMgaWYgaXQgbmV2ZXIgbWF0Y2hlZCkgYW5kIGNvbnRpbnVlcyB0byBtYXRjaCBhbnlcbiAgICogICAgICAgICAgIHN1YnNlcXVlbnQgYGNvbnRhaW5zYCBtb2Rlcy4gIElnbm9yZSBpc24ndCB0ZWNobmljYWxseSBwb3NzaWJsZSB3aXRoXG4gICAqICAgICAgICAgICB0aGUgY3VycmVudCBwYXJzZXIgaW1wbGVtZW50YXRpb24uXG4gICAqXG4gICAqICAgICAgICAgICAgIC0gVGhlIG1vZGUgZG9lcyBub3QgYmVnaW4uXG4gICAqICAgICAgICAgICAgIC0gQ29udGVudCBtYXRjaGVkIGJ5IGBiZWdpbmAgaXMgaWdub3JlZC5cbiAgICogICAgICAgICAgICAgLSBUaGUgcGFyc2VyIGN1cnNvciBpcyBub3QgbW92ZWQgZm9yd2FyZC5cbiAgICovXG5cbiAgLyoqXG4gICAqIENvbXBpbGVzIGFuIGluZGl2aWR1YWwgbW9kZVxuICAgKlxuICAgKiBUaGlzIGNhbiByYWlzZSBhbiBlcnJvciBpZiB0aGUgbW9kZSBjb250YWlucyBjZXJ0YWluIGRldGVjdGFibGUga25vd24gbG9naWNcbiAgICogaXNzdWVzLlxuICAgKiBAcGFyYW0ge01vZGV9IG1vZGVcbiAgICogQHBhcmFtIHtDb21waWxlZE1vZGUgfCBudWxsfSBbcGFyZW50XVxuICAgKiBAcmV0dXJucyB7Q29tcGlsZWRNb2RlIHwgbmV2ZXJ9XG4gICAqL1xuICBmdW5jdGlvbiBjb21waWxlTW9kZShtb2RlLCBwYXJlbnQpIHtcbiAgICBjb25zdCBjbW9kZSA9IC8qKiBAdHlwZSBDb21waWxlZE1vZGUgKi8gKG1vZGUpO1xuICAgIGlmIChtb2RlLmlzQ29tcGlsZWQpIHJldHVybiBjbW9kZTtcblxuICAgIFtcbiAgICAgIHNjb3BlQ2xhc3NOYW1lLFxuICAgICAgLy8gZG8gdGhpcyBlYXJseSBzbyBjb21waWxlciBleHRlbnNpb25zIGdlbmVyYWxseSBkb24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0XG4gICAgICAvLyB0aGUgZGlzdGluY3Rpb24gYmV0d2VlbiBtYXRjaC9iZWdpblxuICAgICAgY29tcGlsZU1hdGNoLFxuICAgICAgTXVsdGlDbGFzcyxcbiAgICAgIGJlZm9yZU1hdGNoRXh0XG4gICAgXS5mb3JFYWNoKGV4dCA9PiBleHQobW9kZSwgcGFyZW50KSk7XG5cbiAgICBsYW5ndWFnZS5jb21waWxlckV4dGVuc2lvbnMuZm9yRWFjaChleHQgPT4gZXh0KG1vZGUsIHBhcmVudCkpO1xuXG4gICAgLy8gX19iZWZvcmVCZWdpbiBpcyBjb25zaWRlcmVkIHByaXZhdGUgQVBJLCBpbnRlcm5hbCB1c2Ugb25seVxuICAgIG1vZGUuX19iZWZvcmVCZWdpbiA9IG51bGw7XG5cbiAgICBbXG4gICAgICBiZWdpbktleXdvcmRzLFxuICAgICAgLy8gZG8gdGhpcyBsYXRlciBzbyBjb21waWxlciBleHRlbnNpb25zIHRoYXQgY29tZSBlYXJsaWVyIGhhdmUgYWNjZXNzIHRvIHRoZVxuICAgICAgLy8gcmF3IGFycmF5IGlmIHRoZXkgd2FudGVkIHRvIHBlcmhhcHMgbWFuaXB1bGF0ZSBpdCwgZXRjLlxuICAgICAgY29tcGlsZUlsbGVnYWwsXG4gICAgICAvLyBkZWZhdWx0IHRvIDEgcmVsZXZhbmNlIGlmIG5vdCBzcGVjaWZpZWRcbiAgICAgIGNvbXBpbGVSZWxldmFuY2VcbiAgICBdLmZvckVhY2goZXh0ID0+IGV4dChtb2RlLCBwYXJlbnQpKTtcblxuICAgIG1vZGUuaXNDb21waWxlZCA9IHRydWU7XG5cbiAgICBsZXQga2V5d29yZFBhdHRlcm4gPSBudWxsO1xuICAgIGlmICh0eXBlb2YgbW9kZS5rZXl3b3JkcyA9PT0gXCJvYmplY3RcIiAmJiBtb2RlLmtleXdvcmRzLiRwYXR0ZXJuKSB7XG4gICAgICAvLyB3ZSBuZWVkIGEgY29weSBiZWNhdXNlIGtleXdvcmRzIG1pZ2h0IGJlIGNvbXBpbGVkIG11bHRpcGxlIHRpbWVzXG4gICAgICAvLyBzbyB3ZSBjYW4ndCBnbyBkZWxldGluZyAkcGF0dGVybiBmcm9tIHRoZSBvcmlnaW5hbCBvbiB0aGUgZmlyc3RcbiAgICAgIC8vIHBhc3NcbiAgICAgIG1vZGUua2V5d29yZHMgPSBPYmplY3QuYXNzaWduKHt9LCBtb2RlLmtleXdvcmRzKTtcbiAgICAgIGtleXdvcmRQYXR0ZXJuID0gbW9kZS5rZXl3b3Jkcy4kcGF0dGVybjtcbiAgICAgIGRlbGV0ZSBtb2RlLmtleXdvcmRzLiRwYXR0ZXJuO1xuICAgIH1cbiAgICBrZXl3b3JkUGF0dGVybiA9IGtleXdvcmRQYXR0ZXJuIHx8IC9cXHcrLztcblxuICAgIGlmIChtb2RlLmtleXdvcmRzKSB7XG4gICAgICBtb2RlLmtleXdvcmRzID0gY29tcGlsZUtleXdvcmRzKG1vZGUua2V5d29yZHMsIGxhbmd1YWdlLmNhc2VfaW5zZW5zaXRpdmUpO1xuICAgIH1cblxuICAgIGNtb2RlLmtleXdvcmRQYXR0ZXJuUmUgPSBsYW5nUmUoa2V5d29yZFBhdHRlcm4sIHRydWUpO1xuXG4gICAgaWYgKHBhcmVudCkge1xuICAgICAgaWYgKCFtb2RlLmJlZ2luKSBtb2RlLmJlZ2luID0gL1xcQnxcXGIvO1xuICAgICAgY21vZGUuYmVnaW5SZSA9IGxhbmdSZShjbW9kZS5iZWdpbik7XG4gICAgICBpZiAoIW1vZGUuZW5kICYmICFtb2RlLmVuZHNXaXRoUGFyZW50KSBtb2RlLmVuZCA9IC9cXEJ8XFxiLztcbiAgICAgIGlmIChtb2RlLmVuZCkgY21vZGUuZW5kUmUgPSBsYW5nUmUoY21vZGUuZW5kKTtcbiAgICAgIGNtb2RlLnRlcm1pbmF0b3JFbmQgPSBzb3VyY2UoY21vZGUuZW5kKSB8fCAnJztcbiAgICAgIGlmIChtb2RlLmVuZHNXaXRoUGFyZW50ICYmIHBhcmVudC50ZXJtaW5hdG9yRW5kKSB7XG4gICAgICAgIGNtb2RlLnRlcm1pbmF0b3JFbmQgKz0gKG1vZGUuZW5kID8gJ3wnIDogJycpICsgcGFyZW50LnRlcm1pbmF0b3JFbmQ7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChtb2RlLmlsbGVnYWwpIGNtb2RlLmlsbGVnYWxSZSA9IGxhbmdSZSgvKiogQHR5cGUge1JlZ0V4cCB8IHN0cmluZ30gKi8gKG1vZGUuaWxsZWdhbCkpO1xuICAgIGlmICghbW9kZS5jb250YWlucykgbW9kZS5jb250YWlucyA9IFtdO1xuXG4gICAgbW9kZS5jb250YWlucyA9IFtdLmNvbmNhdCguLi5tb2RlLmNvbnRhaW5zLm1hcChmdW5jdGlvbihjKSB7XG4gICAgICByZXR1cm4gZXhwYW5kT3JDbG9uZU1vZGUoYyA9PT0gJ3NlbGYnID8gbW9kZSA6IGMpO1xuICAgIH0pKTtcbiAgICBtb2RlLmNvbnRhaW5zLmZvckVhY2goZnVuY3Rpb24oYykgeyBjb21waWxlTW9kZSgvKiogQHR5cGUgTW9kZSAqLyAoYyksIGNtb2RlKTsgfSk7XG5cbiAgICBpZiAobW9kZS5zdGFydHMpIHtcbiAgICAgIGNvbXBpbGVNb2RlKG1vZGUuc3RhcnRzLCBwYXJlbnQpO1xuICAgIH1cblxuICAgIGNtb2RlLm1hdGNoZXIgPSBidWlsZE1vZGVSZWdleChjbW9kZSk7XG4gICAgcmV0dXJuIGNtb2RlO1xuICB9XG5cbiAgaWYgKCFsYW5ndWFnZS5jb21waWxlckV4dGVuc2lvbnMpIGxhbmd1YWdlLmNvbXBpbGVyRXh0ZW5zaW9ucyA9IFtdO1xuXG4gIC8vIHNlbGYgaXMgbm90IHZhbGlkIGF0IHRoZSB0b3AtbGV2ZWxcbiAgaWYgKGxhbmd1YWdlLmNvbnRhaW5zICYmIGxhbmd1YWdlLmNvbnRhaW5zLmluY2x1ZGVzKCdzZWxmJykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJFUlI6IGNvbnRhaW5zIGBzZWxmYCBpcyBub3Qgc3VwcG9ydGVkIGF0IHRoZSB0b3AtbGV2ZWwgb2YgYSBsYW5ndWFnZS4gIFNlZSBkb2N1bWVudGF0aW9uLlwiKTtcbiAgfVxuXG4gIC8vIHdlIG5lZWQgYSBudWxsIG9iamVjdCwgd2hpY2ggaW5oZXJpdCB3aWxsIGd1YXJhbnRlZVxuICBsYW5ndWFnZS5jbGFzc05hbWVBbGlhc2VzID0gaW5oZXJpdCQxKGxhbmd1YWdlLmNsYXNzTmFtZUFsaWFzZXMgfHwge30pO1xuXG4gIHJldHVybiBjb21waWxlTW9kZSgvKiogQHR5cGUgTW9kZSAqLyAobGFuZ3VhZ2UpKTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmVzIGlmIGEgbW9kZSBoYXMgYSBkZXBlbmRlbmN5IG9uIGl0J3MgcGFyZW50IG9yIG5vdFxuICpcbiAqIElmIGEgbW9kZSBkb2VzIGhhdmUgYSBwYXJlbnQgZGVwZW5kZW5jeSB0aGVuIG9mdGVuIHdlIG5lZWQgdG8gY2xvbmUgaXQgaWZcbiAqIGl0J3MgdXNlZCBpbiBtdWx0aXBsZSBwbGFjZXMgc28gdGhhdCBlYWNoIGNvcHkgcG9pbnRzIHRvIHRoZSBjb3JyZWN0IHBhcmVudCxcbiAqIHdoZXJlLWFzIG1vZGVzIHdpdGhvdXQgYSBwYXJlbnQgY2FuIG9mdGVuIHNhZmVseSBiZSByZS11c2VkIGF0IHRoZSBib3R0b20gb2ZcbiAqIGEgbW9kZSBjaGFpbi5cbiAqXG4gKiBAcGFyYW0ge01vZGUgfCBudWxsfSBtb2RlXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSBpcyB0aGVyZSBhIGRlcGVuZGVuY3kgb24gdGhlIHBhcmVudD9cbiAqICovXG5mdW5jdGlvbiBkZXBlbmRlbmN5T25QYXJlbnQobW9kZSkge1xuICBpZiAoIW1vZGUpIHJldHVybiBmYWxzZTtcblxuICByZXR1cm4gbW9kZS5lbmRzV2l0aFBhcmVudCB8fCBkZXBlbmRlbmN5T25QYXJlbnQobW9kZS5zdGFydHMpO1xufVxuXG4vKipcbiAqIEV4cGFuZHMgYSBtb2RlIG9yIGNsb25lcyBpdCBpZiBuZWNlc3NhcnlcbiAqXG4gKiBUaGlzIGlzIG5lY2Vzc2FyeSBmb3IgbW9kZXMgd2l0aCBwYXJlbnRhbCBkZXBlbmRlbmNlaXMgKHNlZSBub3RlcyBvblxuICogYGRlcGVuZGVuY3lPblBhcmVudGApIGFuZCBmb3Igbm9kZXMgdGhhdCBoYXZlIGB2YXJpYW50c2AgLSB3aGljaCBtdXN0IHRoZW4gYmVcbiAqIGV4cGxvZGVkIGludG8gdGhlaXIgb3duIGluZGl2aWR1YWwgbW9kZXMgYXQgY29tcGlsZSB0aW1lLlxuICpcbiAqIEBwYXJhbSB7TW9kZX0gbW9kZVxuICogQHJldHVybnMge01vZGUgfCBNb2RlW119XG4gKiAqL1xuZnVuY3Rpb24gZXhwYW5kT3JDbG9uZU1vZGUobW9kZSkge1xuICBpZiAobW9kZS52YXJpYW50cyAmJiAhbW9kZS5jYWNoZWRWYXJpYW50cykge1xuICAgIG1vZGUuY2FjaGVkVmFyaWFudHMgPSBtb2RlLnZhcmlhbnRzLm1hcChmdW5jdGlvbih2YXJpYW50KSB7XG4gICAgICByZXR1cm4gaW5oZXJpdCQxKG1vZGUsIHsgdmFyaWFudHM6IG51bGwgfSwgdmFyaWFudCk7XG4gICAgfSk7XG4gIH1cblxuICAvLyBFWFBBTkRcbiAgLy8gaWYgd2UgaGF2ZSB2YXJpYW50cyB0aGVuIGVzc2VudGlhbGx5IFwicmVwbGFjZVwiIHRoZSBtb2RlIHdpdGggdGhlIHZhcmlhbnRzXG4gIC8vIHRoaXMgaGFwcGVucyBpbiBjb21waWxlTW9kZSwgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbVxuICBpZiAobW9kZS5jYWNoZWRWYXJpYW50cykge1xuICAgIHJldHVybiBtb2RlLmNhY2hlZFZhcmlhbnRzO1xuICB9XG5cbiAgLy8gQ0xPTkVcbiAgLy8gaWYgd2UgaGF2ZSBkZXBlbmRlbmNpZXMgb24gcGFyZW50cyB0aGVuIHdlIG5lZWQgYSB1bmlxdWVcbiAgLy8gaW5zdGFuY2Ugb2Ygb3Vyc2VsdmVzLCBzbyB3ZSBjYW4gYmUgcmV1c2VkIHdpdGggbWFueVxuICAvLyBkaWZmZXJlbnQgcGFyZW50cyB3aXRob3V0IGlzc3VlXG4gIGlmIChkZXBlbmRlbmN5T25QYXJlbnQobW9kZSkpIHtcbiAgICByZXR1cm4gaW5oZXJpdCQxKG1vZGUsIHsgc3RhcnRzOiBtb2RlLnN0YXJ0cyA/IGluaGVyaXQkMShtb2RlLnN0YXJ0cykgOiBudWxsIH0pO1xuICB9XG5cbiAgaWYgKE9iamVjdC5pc0Zyb3plbihtb2RlKSkge1xuICAgIHJldHVybiBpbmhlcml0JDEobW9kZSk7XG4gIH1cblxuICAvLyBubyBzcGVjaWFsIGRlcGVuZGVuY3kgaXNzdWVzLCBqdXN0IHJldHVybiBvdXJzZWx2ZXNcbiAgcmV0dXJuIG1vZGU7XG59XG5cbnZhciB2ZXJzaW9uID0gXCIxMS4xMS4xXCI7XG5cbmNsYXNzIEhUTUxJbmplY3Rpb25FcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IocmVhc29uLCBodG1sKSB7XG4gICAgc3VwZXIocmVhc29uKTtcbiAgICB0aGlzLm5hbWUgPSBcIkhUTUxJbmplY3Rpb25FcnJvclwiO1xuICAgIHRoaXMuaHRtbCA9IGh0bWw7XG4gIH1cbn1cblxuLypcblN5bnRheCBoaWdobGlnaHRpbmcgd2l0aCBsYW5ndWFnZSBhdXRvZGV0ZWN0aW9uLlxuaHR0cHM6Ly9oaWdobGlnaHRqcy5vcmcvXG4qL1xuXG5cblxuLyoqXG5AdHlwZWRlZiB7aW1wb3J0KCdoaWdobGlnaHQuanMnKS5Nb2RlfSBNb2RlXG5AdHlwZWRlZiB7aW1wb3J0KCdoaWdobGlnaHQuanMnKS5Db21waWxlZE1vZGV9IENvbXBpbGVkTW9kZVxuQHR5cGVkZWYge2ltcG9ydCgnaGlnaGxpZ2h0LmpzJykuQ29tcGlsZWRTY29wZX0gQ29tcGlsZWRTY29wZVxuQHR5cGVkZWYge2ltcG9ydCgnaGlnaGxpZ2h0LmpzJykuTGFuZ3VhZ2V9IExhbmd1YWdlXG5AdHlwZWRlZiB7aW1wb3J0KCdoaWdobGlnaHQuanMnKS5ITEpTQXBpfSBITEpTQXBpXG5AdHlwZWRlZiB7aW1wb3J0KCdoaWdobGlnaHQuanMnKS5ITEpTUGx1Z2lufSBITEpTUGx1Z2luXG5AdHlwZWRlZiB7aW1wb3J0KCdoaWdobGlnaHQuanMnKS5QbHVnaW5FdmVudH0gUGx1Z2luRXZlbnRcbkB0eXBlZGVmIHtpbXBvcnQoJ2hpZ2hsaWdodC5qcycpLkhMSlNPcHRpb25zfSBITEpTT3B0aW9uc1xuQHR5cGVkZWYge2ltcG9ydCgnaGlnaGxpZ2h0LmpzJykuTGFuZ3VhZ2VGbn0gTGFuZ3VhZ2VGblxuQHR5cGVkZWYge2ltcG9ydCgnaGlnaGxpZ2h0LmpzJykuSGlnaGxpZ2h0ZWRIVE1MRWxlbWVudH0gSGlnaGxpZ2h0ZWRIVE1MRWxlbWVudFxuQHR5cGVkZWYge2ltcG9ydCgnaGlnaGxpZ2h0LmpzJykuQmVmb3JlSGlnaGxpZ2h0Q29udGV4dH0gQmVmb3JlSGlnaGxpZ2h0Q29udGV4dFxuQHR5cGVkZWYge2ltcG9ydCgnaGlnaGxpZ2h0LmpzL3ByaXZhdGUnKS5NYXRjaFR5cGV9IE1hdGNoVHlwZVxuQHR5cGVkZWYge2ltcG9ydCgnaGlnaGxpZ2h0LmpzL3ByaXZhdGUnKS5LZXl3b3JkRGF0YX0gS2V5d29yZERhdGFcbkB0eXBlZGVmIHtpbXBvcnQoJ2hpZ2hsaWdodC5qcy9wcml2YXRlJykuRW5oYW5jZWRNYXRjaH0gRW5oYW5jZWRNYXRjaFxuQHR5cGVkZWYge2ltcG9ydCgnaGlnaGxpZ2h0LmpzL3ByaXZhdGUnKS5Bbm5vdGF0ZWRFcnJvcn0gQW5ub3RhdGVkRXJyb3JcbkB0eXBlZGVmIHtpbXBvcnQoJ2hpZ2hsaWdodC5qcycpLkF1dG9IaWdobGlnaHRSZXN1bHR9IEF1dG9IaWdobGlnaHRSZXN1bHRcbkB0eXBlZGVmIHtpbXBvcnQoJ2hpZ2hsaWdodC5qcycpLkhpZ2hsaWdodE9wdGlvbnN9IEhpZ2hsaWdodE9wdGlvbnNcbkB0eXBlZGVmIHtpbXBvcnQoJ2hpZ2hsaWdodC5qcycpLkhpZ2hsaWdodFJlc3VsdH0gSGlnaGxpZ2h0UmVzdWx0XG4qL1xuXG5cbmNvbnN0IGVzY2FwZSA9IGVzY2FwZUhUTUw7XG5jb25zdCBpbmhlcml0ID0gaW5oZXJpdCQxO1xuY29uc3QgTk9fTUFUQ0ggPSBTeW1ib2woXCJub21hdGNoXCIpO1xuY29uc3QgTUFYX0tFWVdPUkRfSElUUyA9IDc7XG5cbi8qKlxuICogQHBhcmFtIHthbnl9IGhsanMgLSBvYmplY3QgdGhhdCBpcyBleHRlbmRlZCAobGVnYWN5KVxuICogQHJldHVybnMge0hMSlNBcGl9XG4gKi9cbmNvbnN0IEhMSlMgPSBmdW5jdGlvbihobGpzKSB7XG4gIC8vIEdsb2JhbCBpbnRlcm5hbCB2YXJpYWJsZXMgdXNlZCB3aXRoaW4gdGhlIGhpZ2hsaWdodC5qcyBsaWJyYXJ5LlxuICAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIExhbmd1YWdlPn0gKi9cbiAgY29uc3QgbGFuZ3VhZ2VzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fSAqL1xuICBjb25zdCBhbGlhc2VzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgLyoqIEB0eXBlIHtITEpTUGx1Z2luW119ICovXG4gIGNvbnN0IHBsdWdpbnMgPSBbXTtcblxuICAvLyBzYWZlL3Byb2R1Y3Rpb24gbW9kZSAtIHN3YWxsb3dzIG1vcmUgZXJyb3JzLCB0cmllcyB0byBrZWVwIHJ1bm5pbmdcbiAgLy8gZXZlbiBpZiBhIHNpbmdsZSBzeW50YXggb3IgcGFyc2UgaGl0cyBhIGZhdGFsIGVycm9yXG4gIGxldCBTQUZFX01PREUgPSB0cnVlO1xuICBjb25zdCBMQU5HVUFHRV9OT1RfRk9VTkQgPSBcIkNvdWxkIG5vdCBmaW5kIHRoZSBsYW5ndWFnZSAne30nLCBkaWQgeW91IGZvcmdldCB0byBsb2FkL2luY2x1ZGUgYSBsYW5ndWFnZSBtb2R1bGU/XCI7XG4gIC8qKiBAdHlwZSB7TGFuZ3VhZ2V9ICovXG4gIGNvbnN0IFBMQUlOVEVYVF9MQU5HVUFHRSA9IHsgZGlzYWJsZUF1dG9kZXRlY3Q6IHRydWUsIG5hbWU6ICdQbGFpbiB0ZXh0JywgY29udGFpbnM6IFtdIH07XG5cbiAgLy8gR2xvYmFsIG9wdGlvbnMgdXNlZCB3aGVuIHdpdGhpbiBleHRlcm5hbCBBUElzLiBUaGlzIGlzIG1vZGlmaWVkIHdoZW5cbiAgLy8gY2FsbGluZyB0aGUgYGhsanMuY29uZmlndXJlYCBmdW5jdGlvbi5cbiAgLyoqIEB0eXBlIEhMSlNPcHRpb25zICovXG4gIGxldCBvcHRpb25zID0ge1xuICAgIGlnbm9yZVVuZXNjYXBlZEhUTUw6IGZhbHNlLFxuICAgIHRocm93VW5lc2NhcGVkSFRNTDogZmFsc2UsXG4gICAgbm9IaWdobGlnaHRSZTogL14obm8tP2hpZ2hsaWdodCkkL2ksXG4gICAgbGFuZ3VhZ2VEZXRlY3RSZTogL1xcYmxhbmcoPzp1YWdlKT8tKFtcXHctXSspXFxiL2ksXG4gICAgY2xhc3NQcmVmaXg6ICdobGpzLScsXG4gICAgY3NzU2VsZWN0b3I6ICdwcmUgY29kZScsXG4gICAgbGFuZ3VhZ2VzOiBudWxsLFxuICAgIC8vIGJldGEgY29uZmlndXJhdGlvbiBvcHRpb25zLCBzdWJqZWN0IHRvIGNoYW5nZSwgd2VsY29tZSB0byBkaXNjdXNzXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2hpZ2hsaWdodGpzL2hpZ2hsaWdodC5qcy9pc3N1ZXMvMTA4NlxuICAgIF9fZW1pdHRlcjogVG9rZW5UcmVlRW1pdHRlclxuICB9O1xuXG4gIC8qIFV0aWxpdHkgZnVuY3Rpb25zICovXG5cbiAgLyoqXG4gICAqIFRlc3RzIGEgbGFuZ3VhZ2UgbmFtZSB0byBzZWUgaWYgaGlnaGxpZ2h0aW5nIHNob3VsZCBiZSBza2lwcGVkXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsYW5ndWFnZU5hbWVcbiAgICovXG4gIGZ1bmN0aW9uIHNob3VsZE5vdEhpZ2hsaWdodChsYW5ndWFnZU5hbWUpIHtcbiAgICByZXR1cm4gb3B0aW9ucy5ub0hpZ2hsaWdodFJlLnRlc3QobGFuZ3VhZ2VOYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0hpZ2hsaWdodGVkSFRNTEVsZW1lbnR9IGJsb2NrIC0gdGhlIEhUTUwgZWxlbWVudCB0byBkZXRlcm1pbmUgbGFuZ3VhZ2UgZm9yXG4gICAqL1xuICBmdW5jdGlvbiBibG9ja0xhbmd1YWdlKGJsb2NrKSB7XG4gICAgbGV0IGNsYXNzZXMgPSBibG9jay5jbGFzc05hbWUgKyAnICc7XG5cbiAgICBjbGFzc2VzICs9IGJsb2NrLnBhcmVudE5vZGUgPyBibG9jay5wYXJlbnROb2RlLmNsYXNzTmFtZSA6ICcnO1xuXG4gICAgLy8gbGFuZ3VhZ2UtKiB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgbm9uLXByZWZpeGVkIGNsYXNzIG5hbWVzLlxuICAgIGNvbnN0IG1hdGNoID0gb3B0aW9ucy5sYW5ndWFnZURldGVjdFJlLmV4ZWMoY2xhc3Nlcyk7XG4gICAgaWYgKG1hdGNoKSB7XG4gICAgICBjb25zdCBsYW5ndWFnZSA9IGdldExhbmd1YWdlKG1hdGNoWzFdKTtcbiAgICAgIGlmICghbGFuZ3VhZ2UpIHtcbiAgICAgICAgd2FybihMQU5HVUFHRV9OT1RfRk9VTkQucmVwbGFjZShcInt9XCIsIG1hdGNoWzFdKSk7XG4gICAgICAgIHdhcm4oXCJGYWxsaW5nIGJhY2sgdG8gbm8taGlnaGxpZ2h0IG1vZGUgZm9yIHRoaXMgYmxvY2suXCIsIGJsb2NrKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBsYW5ndWFnZSA/IG1hdGNoWzFdIDogJ25vLWhpZ2hsaWdodCc7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNsYXNzZXNcbiAgICAgIC5zcGxpdCgvXFxzKy8pXG4gICAgICAuZmluZCgoX2NsYXNzKSA9PiBzaG91bGROb3RIaWdobGlnaHQoX2NsYXNzKSB8fCBnZXRMYW5ndWFnZShfY2xhc3MpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb3JlIGhpZ2hsaWdodGluZyBmdW5jdGlvbi5cbiAgICpcbiAgICogT0xEIEFQSVxuICAgKiBoaWdobGlnaHQobGFuZywgY29kZSwgaWdub3JlSWxsZWdhbHMsIGNvbnRpbnVhdGlvbilcbiAgICpcbiAgICogTkVXIEFQSVxuICAgKiBoaWdobGlnaHQoY29kZSwge2xhbmcsIGlnbm9yZUlsbGVnYWxzfSlcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNvZGVPckxhbmd1YWdlTmFtZSAtIHRoZSBsYW5ndWFnZSB0byB1c2UgZm9yIGhpZ2hsaWdodGluZ1xuICAgKiBAcGFyYW0ge3N0cmluZyB8IEhpZ2hsaWdodE9wdGlvbnN9IG9wdGlvbnNPckNvZGUgLSB0aGUgY29kZSB0byBoaWdobGlnaHRcbiAgICogQHBhcmFtIHtib29sZWFufSBbaWdub3JlSWxsZWdhbHNdIC0gd2hldGhlciB0byBpZ25vcmUgaWxsZWdhbCBtYXRjaGVzLCBkZWZhdWx0IGlzIHRvIGJhaWxcbiAgICpcbiAgICogQHJldHVybnMge0hpZ2hsaWdodFJlc3VsdH0gUmVzdWx0IC0gYW4gb2JqZWN0IHRoYXQgcmVwcmVzZW50cyB0aGUgcmVzdWx0XG4gICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBsYW5ndWFnZSAtIHRoZSBsYW5ndWFnZSBuYW1lXG4gICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSByZWxldmFuY2UgLSB0aGUgcmVsZXZhbmNlIHNjb3JlXG4gICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB2YWx1ZSAtIHRoZSBoaWdobGlnaHRlZCBIVE1MIGNvZGVcbiAgICogQHByb3BlcnR5IHtzdHJpbmd9IGNvZGUgLSB0aGUgb3JpZ2luYWwgcmF3IGNvZGVcbiAgICogQHByb3BlcnR5IHtDb21waWxlZE1vZGV9IHRvcCAtIHRvcCBvZiB0aGUgY3VycmVudCBtb2RlIHN0YWNrXG4gICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gaWxsZWdhbCAtIGluZGljYXRlcyB3aGV0aGVyIGFueSBpbGxlZ2FsIG1hdGNoZXMgd2VyZSBmb3VuZFxuICAqL1xuICBmdW5jdGlvbiBoaWdobGlnaHQoY29kZU9yTGFuZ3VhZ2VOYW1lLCBvcHRpb25zT3JDb2RlLCBpZ25vcmVJbGxlZ2Fscykge1xuICAgIGxldCBjb2RlID0gXCJcIjtcbiAgICBsZXQgbGFuZ3VhZ2VOYW1lID0gXCJcIjtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnNPckNvZGUgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIGNvZGUgPSBjb2RlT3JMYW5ndWFnZU5hbWU7XG4gICAgICBpZ25vcmVJbGxlZ2FscyA9IG9wdGlvbnNPckNvZGUuaWdub3JlSWxsZWdhbHM7XG4gICAgICBsYW5ndWFnZU5hbWUgPSBvcHRpb25zT3JDb2RlLmxhbmd1YWdlO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBvbGQgQVBJXG4gICAgICBkZXByZWNhdGVkKFwiMTAuNy4wXCIsIFwiaGlnaGxpZ2h0KGxhbmcsIGNvZGUsIC4uLmFyZ3MpIGhhcyBiZWVuIGRlcHJlY2F0ZWQuXCIpO1xuICAgICAgZGVwcmVjYXRlZChcIjEwLjcuMFwiLCBcIlBsZWFzZSB1c2UgaGlnaGxpZ2h0KGNvZGUsIG9wdGlvbnMpIGluc3RlYWQuXFxuaHR0cHM6Ly9naXRodWIuY29tL2hpZ2hsaWdodGpzL2hpZ2hsaWdodC5qcy9pc3N1ZXMvMjI3N1wiKTtcbiAgICAgIGxhbmd1YWdlTmFtZSA9IGNvZGVPckxhbmd1YWdlTmFtZTtcbiAgICAgIGNvZGUgPSBvcHRpb25zT3JDb2RlO1xuICAgIH1cblxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9oaWdobGlnaHRqcy9oaWdobGlnaHQuanMvaXNzdWVzLzMxNDlcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZpbmVkXG4gICAgaWYgKGlnbm9yZUlsbGVnYWxzID09PSB1bmRlZmluZWQpIHsgaWdub3JlSWxsZWdhbHMgPSB0cnVlOyB9XG5cbiAgICAvKiogQHR5cGUge0JlZm9yZUhpZ2hsaWdodENvbnRleHR9ICovXG4gICAgY29uc3QgY29udGV4dCA9IHtcbiAgICAgIGNvZGUsXG4gICAgICBsYW5ndWFnZTogbGFuZ3VhZ2VOYW1lXG4gICAgfTtcbiAgICAvLyB0aGUgcGx1Z2luIGNhbiBjaGFuZ2UgdGhlIGRlc2lyZWQgbGFuZ3VhZ2Ugb3IgdGhlIGNvZGUgdG8gYmUgaGlnaGxpZ2h0ZWRcbiAgICAvLyBqdXN0IGJlIGNoYW5naW5nIHRoZSBvYmplY3QgaXQgd2FzIHBhc3NlZFxuICAgIGZpcmUoXCJiZWZvcmU6aGlnaGxpZ2h0XCIsIGNvbnRleHQpO1xuXG4gICAgLy8gYSBiZWZvcmUgcGx1Z2luIGNhbiB1c3VycCB0aGUgcmVzdWx0IGNvbXBsZXRlbHkgYnkgcHJvdmlkaW5nIGl0J3Mgb3duXG4gICAgLy8gaW4gd2hpY2ggY2FzZSB3ZSBkb24ndCBldmVuIG5lZWQgdG8gY2FsbCBoaWdobGlnaHRcbiAgICBjb25zdCByZXN1bHQgPSBjb250ZXh0LnJlc3VsdFxuICAgICAgPyBjb250ZXh0LnJlc3VsdFxuICAgICAgOiBfaGlnaGxpZ2h0KGNvbnRleHQubGFuZ3VhZ2UsIGNvbnRleHQuY29kZSwgaWdub3JlSWxsZWdhbHMpO1xuXG4gICAgcmVzdWx0LmNvZGUgPSBjb250ZXh0LmNvZGU7XG4gICAgLy8gdGhlIHBsdWdpbiBjYW4gY2hhbmdlIGFueXRoaW5nIGluIHJlc3VsdCB0byBzdWl0ZSBpdFxuICAgIGZpcmUoXCJhZnRlcjpoaWdobGlnaHRcIiwgcmVzdWx0KTtcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogcHJpdmF0ZSBoaWdobGlnaHQgdGhhdCdzIHVzZWQgaW50ZXJuYWxseSBhbmQgZG9lcyBub3QgZmlyZSBjYWxsYmFja3NcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxhbmd1YWdlTmFtZSAtIHRoZSBsYW5ndWFnZSB0byB1c2UgZm9yIGhpZ2hsaWdodGluZ1xuICAgKiBAcGFyYW0ge3N0cmluZ30gY29kZVRvSGlnaGxpZ2h0IC0gdGhlIGNvZGUgdG8gaGlnaGxpZ2h0XG4gICAqIEBwYXJhbSB7Ym9vbGVhbj99IFtpZ25vcmVJbGxlZ2Fsc10gLSB3aGV0aGVyIHRvIGlnbm9yZSBpbGxlZ2FsIG1hdGNoZXMsIGRlZmF1bHQgaXMgdG8gYmFpbFxuICAgKiBAcGFyYW0ge0NvbXBpbGVkTW9kZT99IFtjb250aW51YXRpb25dIC0gY3VycmVudCBjb250aW51YXRpb24gbW9kZSwgaWYgYW55XG4gICAqIEByZXR1cm5zIHtIaWdobGlnaHRSZXN1bHR9IC0gcmVzdWx0IG9mIHRoZSBoaWdobGlnaHQgb3BlcmF0aW9uXG4gICovXG4gIGZ1bmN0aW9uIF9oaWdobGlnaHQobGFuZ3VhZ2VOYW1lLCBjb2RlVG9IaWdobGlnaHQsIGlnbm9yZUlsbGVnYWxzLCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBrZXl3b3JkSGl0cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm4ga2V5d29yZCBkYXRhIGlmIGEgbWF0Y2ggaXMgYSBrZXl3b3JkXG4gICAgICogQHBhcmFtIHtDb21waWxlZE1vZGV9IG1vZGUgLSBjdXJyZW50IG1vZGVcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbWF0Y2hUZXh0IC0gdGhlIHRleHR1YWwgbWF0Y2hcbiAgICAgKiBAcmV0dXJucyB7S2V5d29yZERhdGEgfCBmYWxzZX1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBrZXl3b3JkRGF0YShtb2RlLCBtYXRjaFRleHQpIHtcbiAgICAgIHJldHVybiBtb2RlLmtleXdvcmRzW21hdGNoVGV4dF07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcHJvY2Vzc0tleXdvcmRzKCkge1xuICAgICAgaWYgKCF0b3Aua2V5d29yZHMpIHtcbiAgICAgICAgZW1pdHRlci5hZGRUZXh0KG1vZGVCdWZmZXIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGxldCBsYXN0SW5kZXggPSAwO1xuICAgICAgdG9wLmtleXdvcmRQYXR0ZXJuUmUubGFzdEluZGV4ID0gMDtcbiAgICAgIGxldCBtYXRjaCA9IHRvcC5rZXl3b3JkUGF0dGVyblJlLmV4ZWMobW9kZUJ1ZmZlcik7XG4gICAgICBsZXQgYnVmID0gXCJcIjtcblxuICAgICAgd2hpbGUgKG1hdGNoKSB7XG4gICAgICAgIGJ1ZiArPSBtb2RlQnVmZmVyLnN1YnN0cmluZyhsYXN0SW5kZXgsIG1hdGNoLmluZGV4KTtcbiAgICAgICAgY29uc3Qgd29yZCA9IGxhbmd1YWdlLmNhc2VfaW5zZW5zaXRpdmUgPyBtYXRjaFswXS50b0xvd2VyQ2FzZSgpIDogbWF0Y2hbMF07XG4gICAgICAgIGNvbnN0IGRhdGEgPSBrZXl3b3JkRGF0YSh0b3AsIHdvcmQpO1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgIGNvbnN0IFtraW5kLCBrZXl3b3JkUmVsZXZhbmNlXSA9IGRhdGE7XG4gICAgICAgICAgZW1pdHRlci5hZGRUZXh0KGJ1Zik7XG4gICAgICAgICAgYnVmID0gXCJcIjtcblxuICAgICAgICAgIGtleXdvcmRIaXRzW3dvcmRdID0gKGtleXdvcmRIaXRzW3dvcmRdIHx8IDApICsgMTtcbiAgICAgICAgICBpZiAoa2V5d29yZEhpdHNbd29yZF0gPD0gTUFYX0tFWVdPUkRfSElUUykgcmVsZXZhbmNlICs9IGtleXdvcmRSZWxldmFuY2U7XG4gICAgICAgICAgaWYgKGtpbmQuc3RhcnRzV2l0aChcIl9cIikpIHtcbiAgICAgICAgICAgIC8vIF8gaW1wbGllZCBmb3IgcmVsZXZhbmNlIG9ubHksIGRvIG5vdCBoaWdobGlnaHRcbiAgICAgICAgICAgIC8vIGJ5IGFwcGx5aW5nIGEgY2xhc3MgbmFtZVxuICAgICAgICAgICAgYnVmICs9IG1hdGNoWzBdO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBjc3NDbGFzcyA9IGxhbmd1YWdlLmNsYXNzTmFtZUFsaWFzZXNba2luZF0gfHwga2luZDtcbiAgICAgICAgICAgIGVtaXRLZXl3b3JkKG1hdGNoWzBdLCBjc3NDbGFzcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJ1ZiArPSBtYXRjaFswXTtcbiAgICAgICAgfVxuICAgICAgICBsYXN0SW5kZXggPSB0b3Aua2V5d29yZFBhdHRlcm5SZS5sYXN0SW5kZXg7XG4gICAgICAgIG1hdGNoID0gdG9wLmtleXdvcmRQYXR0ZXJuUmUuZXhlYyhtb2RlQnVmZmVyKTtcbiAgICAgIH1cbiAgICAgIGJ1ZiArPSBtb2RlQnVmZmVyLnN1YnN0cmluZyhsYXN0SW5kZXgpO1xuICAgICAgZW1pdHRlci5hZGRUZXh0KGJ1Zik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcHJvY2Vzc1N1Ykxhbmd1YWdlKCkge1xuICAgICAgaWYgKG1vZGVCdWZmZXIgPT09IFwiXCIpIHJldHVybjtcbiAgICAgIC8qKiBAdHlwZSBIaWdobGlnaHRSZXN1bHQgKi9cbiAgICAgIGxldCByZXN1bHQgPSBudWxsO1xuXG4gICAgICBpZiAodHlwZW9mIHRvcC5zdWJMYW5ndWFnZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgaWYgKCFsYW5ndWFnZXNbdG9wLnN1Ykxhbmd1YWdlXSkge1xuICAgICAgICAgIGVtaXR0ZXIuYWRkVGV4dChtb2RlQnVmZmVyKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0ID0gX2hpZ2hsaWdodCh0b3Auc3ViTGFuZ3VhZ2UsIG1vZGVCdWZmZXIsIHRydWUsIGNvbnRpbnVhdGlvbnNbdG9wLnN1Ykxhbmd1YWdlXSk7XG4gICAgICAgIGNvbnRpbnVhdGlvbnNbdG9wLnN1Ykxhbmd1YWdlXSA9IC8qKiBAdHlwZSB7Q29tcGlsZWRNb2RlfSAqLyAocmVzdWx0Ll90b3ApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0ID0gaGlnaGxpZ2h0QXV0byhtb2RlQnVmZmVyLCB0b3Auc3ViTGFuZ3VhZ2UubGVuZ3RoID8gdG9wLnN1Ykxhbmd1YWdlIDogbnVsbCk7XG4gICAgICB9XG5cbiAgICAgIC8vIENvdW50aW5nIGVtYmVkZGVkIGxhbmd1YWdlIHNjb3JlIHRvd2FyZHMgdGhlIGhvc3QgbGFuZ3VhZ2UgbWF5IGJlIGRpc2FibGVkXG4gICAgICAvLyB3aXRoIHplcm9pbmcgdGhlIGNvbnRhaW5pbmcgbW9kZSByZWxldmFuY2UuIFVzZSBjYXNlIGluIHBvaW50IGlzIE1hcmtkb3duIHRoYXRcbiAgICAgIC8vIGFsbG93cyBYTUwgZXZlcnl3aGVyZSBhbmQgbWFrZXMgZXZlcnkgWE1MIHNuaXBwZXQgdG8gaGF2ZSBhIG11Y2ggbGFyZ2VyIE1hcmtkb3duXG4gICAgICAvLyBzY29yZS5cbiAgICAgIGlmICh0b3AucmVsZXZhbmNlID4gMCkge1xuICAgICAgICByZWxldmFuY2UgKz0gcmVzdWx0LnJlbGV2YW5jZTtcbiAgICAgIH1cbiAgICAgIGVtaXR0ZXIuX19hZGRTdWJsYW5ndWFnZShyZXN1bHQuX2VtaXR0ZXIsIHJlc3VsdC5sYW5ndWFnZSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcHJvY2Vzc0J1ZmZlcigpIHtcbiAgICAgIGlmICh0b3Auc3ViTGFuZ3VhZ2UgIT0gbnVsbCkge1xuICAgICAgICBwcm9jZXNzU3ViTGFuZ3VhZ2UoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHByb2Nlc3NLZXl3b3JkcygpO1xuICAgICAgfVxuICAgICAgbW9kZUJ1ZmZlciA9ICcnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0XG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHNjb3BlXG4gICAgICovXG4gICAgZnVuY3Rpb24gZW1pdEtleXdvcmQoa2V5d29yZCwgc2NvcGUpIHtcbiAgICAgIGlmIChrZXl3b3JkID09PSBcIlwiKSByZXR1cm47XG5cbiAgICAgIGVtaXR0ZXIuc3RhcnRTY29wZShzY29wZSk7XG4gICAgICBlbWl0dGVyLmFkZFRleHQoa2V5d29yZCk7XG4gICAgICBlbWl0dGVyLmVuZFNjb3BlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtDb21waWxlZFNjb3BlfSBzY29wZVxuICAgICAqIEBwYXJhbSB7UmVnRXhwTWF0Y2hBcnJheX0gbWF0Y2hcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBlbWl0TXVsdGlDbGFzcyhzY29wZSwgbWF0Y2gpIHtcbiAgICAgIGxldCBpID0gMTtcbiAgICAgIGNvbnN0IG1heCA9IG1hdGNoLmxlbmd0aCAtIDE7XG4gICAgICB3aGlsZSAoaSA8PSBtYXgpIHtcbiAgICAgICAgaWYgKCFzY29wZS5fZW1pdFtpXSkgeyBpKys7IGNvbnRpbnVlOyB9XG4gICAgICAgIGNvbnN0IGtsYXNzID0gbGFuZ3VhZ2UuY2xhc3NOYW1lQWxpYXNlc1tzY29wZVtpXV0gfHwgc2NvcGVbaV07XG4gICAgICAgIGNvbnN0IHRleHQgPSBtYXRjaFtpXTtcbiAgICAgICAgaWYgKGtsYXNzKSB7XG4gICAgICAgICAgZW1pdEtleXdvcmQodGV4dCwga2xhc3MpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG1vZGVCdWZmZXIgPSB0ZXh0O1xuICAgICAgICAgIHByb2Nlc3NLZXl3b3JkcygpO1xuICAgICAgICAgIG1vZGVCdWZmZXIgPSBcIlwiO1xuICAgICAgICB9XG4gICAgICAgIGkrKztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge0NvbXBpbGVkTW9kZX0gbW9kZSAtIG5ldyBtb2RlIHRvIHN0YXJ0XG4gICAgICogQHBhcmFtIHtSZWdFeHBNYXRjaEFycmF5fSBtYXRjaFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHN0YXJ0TmV3TW9kZShtb2RlLCBtYXRjaCkge1xuICAgICAgaWYgKG1vZGUuc2NvcGUgJiYgdHlwZW9mIG1vZGUuc2NvcGUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgZW1pdHRlci5vcGVuTm9kZShsYW5ndWFnZS5jbGFzc05hbWVBbGlhc2VzW21vZGUuc2NvcGVdIHx8IG1vZGUuc2NvcGUpO1xuICAgICAgfVxuICAgICAgaWYgKG1vZGUuYmVnaW5TY29wZSkge1xuICAgICAgICAvLyBiZWdpblNjb3BlIGp1c3Qgd3JhcHMgdGhlIGJlZ2luIG1hdGNoIGl0c2VsZiBpbiBhIHNjb3BlXG4gICAgICAgIGlmIChtb2RlLmJlZ2luU2NvcGUuX3dyYXApIHtcbiAgICAgICAgICBlbWl0S2V5d29yZChtb2RlQnVmZmVyLCBsYW5ndWFnZS5jbGFzc05hbWVBbGlhc2VzW21vZGUuYmVnaW5TY29wZS5fd3JhcF0gfHwgbW9kZS5iZWdpblNjb3BlLl93cmFwKTtcbiAgICAgICAgICBtb2RlQnVmZmVyID0gXCJcIjtcbiAgICAgICAgfSBlbHNlIGlmIChtb2RlLmJlZ2luU2NvcGUuX211bHRpKSB7XG4gICAgICAgICAgLy8gYXQgdGhpcyBwb2ludCBtb2RlQnVmZmVyIHNob3VsZCBqdXN0IGJlIHRoZSBtYXRjaFxuICAgICAgICAgIGVtaXRNdWx0aUNsYXNzKG1vZGUuYmVnaW5TY29wZSwgbWF0Y2gpO1xuICAgICAgICAgIG1vZGVCdWZmZXIgPSBcIlwiO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRvcCA9IE9iamVjdC5jcmVhdGUobW9kZSwgeyBwYXJlbnQ6IHsgdmFsdWU6IHRvcCB9IH0pO1xuICAgICAgcmV0dXJuIHRvcDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge0NvbXBpbGVkTW9kZSB9IG1vZGUgLSB0aGUgbW9kZSB0byBwb3RlbnRpYWxseSBlbmRcbiAgICAgKiBAcGFyYW0ge1JlZ0V4cE1hdGNoQXJyYXl9IG1hdGNoIC0gdGhlIGxhdGVzdCBtYXRjaFxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBtYXRjaFBsdXNSZW1haW5kZXIgLSBtYXRjaCBwbHVzIHJlbWFpbmRlciBvZiBjb250ZW50XG4gICAgICogQHJldHVybnMge0NvbXBpbGVkTW9kZSB8IHZvaWR9IC0gdGhlIG5leHQgbW9kZSwgb3IgaWYgdm9pZCBjb250aW51ZSBvbiBpbiBjdXJyZW50IG1vZGVcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBlbmRPZk1vZGUobW9kZSwgbWF0Y2gsIG1hdGNoUGx1c1JlbWFpbmRlcikge1xuICAgICAgbGV0IG1hdGNoZWQgPSBzdGFydHNXaXRoKG1vZGUuZW5kUmUsIG1hdGNoUGx1c1JlbWFpbmRlcik7XG5cbiAgICAgIGlmIChtYXRjaGVkKSB7XG4gICAgICAgIGlmIChtb2RlW1wib246ZW5kXCJdKSB7XG4gICAgICAgICAgY29uc3QgcmVzcCA9IG5ldyBSZXNwb25zZShtb2RlKTtcbiAgICAgICAgICBtb2RlW1wib246ZW5kXCJdKG1hdGNoLCByZXNwKTtcbiAgICAgICAgICBpZiAocmVzcC5pc01hdGNoSWdub3JlZCkgbWF0Y2hlZCA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1hdGNoZWQpIHtcbiAgICAgICAgICB3aGlsZSAobW9kZS5lbmRzUGFyZW50ICYmIG1vZGUucGFyZW50KSB7XG4gICAgICAgICAgICBtb2RlID0gbW9kZS5wYXJlbnQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBtb2RlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBldmVuIGlmIG9uOmVuZCBmaXJlcyBhbiBgaWdub3JlYCBpdCdzIHN0aWxsIHBvc3NpYmxlXG4gICAgICAvLyB0aGF0IHdlIG1pZ2h0IHRyaWdnZXIgdGhlIGVuZCBub2RlIGJlY2F1c2Ugb2YgYSBwYXJlbnQgbW9kZVxuICAgICAgaWYgKG1vZGUuZW5kc1dpdGhQYXJlbnQpIHtcbiAgICAgICAgcmV0dXJuIGVuZE9mTW9kZShtb2RlLnBhcmVudCwgbWF0Y2gsIG1hdGNoUGx1c1JlbWFpbmRlcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSGFuZGxlIG1hdGNoaW5nIGJ1dCB0aGVuIGlnbm9yaW5nIGEgc2VxdWVuY2Ugb2YgdGV4dFxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGxleGVtZSAtIHN0cmluZyBjb250YWluaW5nIGZ1bGwgbWF0Y2ggdGV4dFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGRvSWdub3JlKGxleGVtZSkge1xuICAgICAgaWYgKHRvcC5tYXRjaGVyLnJlZ2V4SW5kZXggPT09IDApIHtcbiAgICAgICAgLy8gbm8gbW9yZSByZWdleGVzIHRvIHBvdGVudGlhbGx5IG1hdGNoIGhlcmUsIHNvIHdlIG1vdmUgdGhlIGN1cnNvciBmb3J3YXJkIG9uZVxuICAgICAgICAvLyBzcGFjZVxuICAgICAgICBtb2RlQnVmZmVyICs9IGxleGVtZVswXTtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBubyBuZWVkIHRvIG1vdmUgdGhlIGN1cnNvciwgd2Ugc3RpbGwgaGF2ZSBhZGRpdGlvbmFsIHJlZ2V4ZXMgdG8gdHJ5IGFuZFxuICAgICAgICAvLyBtYXRjaCBhdCB0aGlzIHZlcnkgc3BvdFxuICAgICAgICByZXN1bWVTY2FuQXRTYW1lUG9zaXRpb24gPSB0cnVlO1xuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBIYW5kbGUgdGhlIHN0YXJ0IG9mIGEgbmV3IHBvdGVudGlhbCBtb2RlIG1hdGNoXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0VuaGFuY2VkTWF0Y2h9IG1hdGNoIC0gdGhlIGN1cnJlbnQgbWF0Y2hcbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBob3cgZmFyIHRvIGFkdmFuY2UgdGhlIHBhcnNlIGN1cnNvclxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGRvQmVnaW5NYXRjaChtYXRjaCkge1xuICAgICAgY29uc3QgbGV4ZW1lID0gbWF0Y2hbMF07XG4gICAgICBjb25zdCBuZXdNb2RlID0gbWF0Y2gucnVsZTtcblxuICAgICAgY29uc3QgcmVzcCA9IG5ldyBSZXNwb25zZShuZXdNb2RlKTtcbiAgICAgIC8vIGZpcnN0IGludGVybmFsIGJlZm9yZSBjYWxsYmFja3MsIHRoZW4gdGhlIHB1YmxpYyBvbmVzXG4gICAgICBjb25zdCBiZWZvcmVDYWxsYmFja3MgPSBbbmV3TW9kZS5fX2JlZm9yZUJlZ2luLCBuZXdNb2RlW1wib246YmVnaW5cIl1dO1xuICAgICAgZm9yIChjb25zdCBjYiBvZiBiZWZvcmVDYWxsYmFja3MpIHtcbiAgICAgICAgaWYgKCFjYikgY29udGludWU7XG4gICAgICAgIGNiKG1hdGNoLCByZXNwKTtcbiAgICAgICAgaWYgKHJlc3AuaXNNYXRjaElnbm9yZWQpIHJldHVybiBkb0lnbm9yZShsZXhlbWUpO1xuICAgICAgfVxuXG4gICAgICBpZiAobmV3TW9kZS5za2lwKSB7XG4gICAgICAgIG1vZGVCdWZmZXIgKz0gbGV4ZW1lO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKG5ld01vZGUuZXhjbHVkZUJlZ2luKSB7XG4gICAgICAgICAgbW9kZUJ1ZmZlciArPSBsZXhlbWU7XG4gICAgICAgIH1cbiAgICAgICAgcHJvY2Vzc0J1ZmZlcigpO1xuICAgICAgICBpZiAoIW5ld01vZGUucmV0dXJuQmVnaW4gJiYgIW5ld01vZGUuZXhjbHVkZUJlZ2luKSB7XG4gICAgICAgICAgbW9kZUJ1ZmZlciA9IGxleGVtZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgc3RhcnROZXdNb2RlKG5ld01vZGUsIG1hdGNoKTtcbiAgICAgIHJldHVybiBuZXdNb2RlLnJldHVybkJlZ2luID8gMCA6IGxleGVtZS5sZW5ndGg7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSGFuZGxlIHRoZSBwb3RlbnRpYWwgZW5kIG9mIG1vZGVcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7UmVnRXhwTWF0Y2hBcnJheX0gbWF0Y2ggLSB0aGUgY3VycmVudCBtYXRjaFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGRvRW5kTWF0Y2gobWF0Y2gpIHtcbiAgICAgIGNvbnN0IGxleGVtZSA9IG1hdGNoWzBdO1xuICAgICAgY29uc3QgbWF0Y2hQbHVzUmVtYWluZGVyID0gY29kZVRvSGlnaGxpZ2h0LnN1YnN0cmluZyhtYXRjaC5pbmRleCk7XG5cbiAgICAgIGNvbnN0IGVuZE1vZGUgPSBlbmRPZk1vZGUodG9wLCBtYXRjaCwgbWF0Y2hQbHVzUmVtYWluZGVyKTtcbiAgICAgIGlmICghZW5kTW9kZSkgeyByZXR1cm4gTk9fTUFUQ0g7IH1cblxuICAgICAgY29uc3Qgb3JpZ2luID0gdG9wO1xuICAgICAgaWYgKHRvcC5lbmRTY29wZSAmJiB0b3AuZW5kU2NvcGUuX3dyYXApIHtcbiAgICAgICAgcHJvY2Vzc0J1ZmZlcigpO1xuICAgICAgICBlbWl0S2V5d29yZChsZXhlbWUsIHRvcC5lbmRTY29wZS5fd3JhcCk7XG4gICAgICB9IGVsc2UgaWYgKHRvcC5lbmRTY29wZSAmJiB0b3AuZW5kU2NvcGUuX211bHRpKSB7XG4gICAgICAgIHByb2Nlc3NCdWZmZXIoKTtcbiAgICAgICAgZW1pdE11bHRpQ2xhc3ModG9wLmVuZFNjb3BlLCBtYXRjaCk7XG4gICAgICB9IGVsc2UgaWYgKG9yaWdpbi5za2lwKSB7XG4gICAgICAgIG1vZGVCdWZmZXIgKz0gbGV4ZW1lO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKCEob3JpZ2luLnJldHVybkVuZCB8fCBvcmlnaW4uZXhjbHVkZUVuZCkpIHtcbiAgICAgICAgICBtb2RlQnVmZmVyICs9IGxleGVtZTtcbiAgICAgICAgfVxuICAgICAgICBwcm9jZXNzQnVmZmVyKCk7XG4gICAgICAgIGlmIChvcmlnaW4uZXhjbHVkZUVuZCkge1xuICAgICAgICAgIG1vZGVCdWZmZXIgPSBsZXhlbWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGRvIHtcbiAgICAgICAgaWYgKHRvcC5zY29wZSkge1xuICAgICAgICAgIGVtaXR0ZXIuY2xvc2VOb2RlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0b3Auc2tpcCAmJiAhdG9wLnN1Ykxhbmd1YWdlKSB7XG4gICAgICAgICAgcmVsZXZhbmNlICs9IHRvcC5yZWxldmFuY2U7XG4gICAgICAgIH1cbiAgICAgICAgdG9wID0gdG9wLnBhcmVudDtcbiAgICAgIH0gd2hpbGUgKHRvcCAhPT0gZW5kTW9kZS5wYXJlbnQpO1xuICAgICAgaWYgKGVuZE1vZGUuc3RhcnRzKSB7XG4gICAgICAgIHN0YXJ0TmV3TW9kZShlbmRNb2RlLnN0YXJ0cywgbWF0Y2gpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG9yaWdpbi5yZXR1cm5FbmQgPyAwIDogbGV4ZW1lLmxlbmd0aDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwcm9jZXNzQ29udGludWF0aW9ucygpIHtcbiAgICAgIGNvbnN0IGxpc3QgPSBbXTtcbiAgICAgIGZvciAobGV0IGN1cnJlbnQgPSB0b3A7IGN1cnJlbnQgIT09IGxhbmd1YWdlOyBjdXJyZW50ID0gY3VycmVudC5wYXJlbnQpIHtcbiAgICAgICAgaWYgKGN1cnJlbnQuc2NvcGUpIHtcbiAgICAgICAgICBsaXN0LnVuc2hpZnQoY3VycmVudC5zY29wZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGxpc3QuZm9yRWFjaChpdGVtID0+IGVtaXR0ZXIub3Blbk5vZGUoaXRlbSkpO1xuICAgIH1cblxuICAgIC8qKiBAdHlwZSB7e3R5cGU/OiBNYXRjaFR5cGUsIGluZGV4PzogbnVtYmVyLCBydWxlPzogTW9kZX19fSAqL1xuICAgIGxldCBsYXN0TWF0Y2ggPSB7fTtcblxuICAgIC8qKlxuICAgICAqICBQcm9jZXNzIGFuIGluZGl2aWR1YWwgbWF0Y2hcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0QmVmb3JlTWF0Y2ggLSB0ZXh0IHByZWNlZGluZyB0aGUgbWF0Y2ggKHNpbmNlIHRoZSBsYXN0IG1hdGNoKVxuICAgICAqIEBwYXJhbSB7RW5oYW5jZWRNYXRjaH0gW21hdGNoXSAtIHRoZSBtYXRjaCBpdHNlbGZcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBwcm9jZXNzTGV4ZW1lKHRleHRCZWZvcmVNYXRjaCwgbWF0Y2gpIHtcbiAgICAgIGNvbnN0IGxleGVtZSA9IG1hdGNoICYmIG1hdGNoWzBdO1xuXG4gICAgICAvLyBhZGQgbm9uLW1hdGNoZWQgdGV4dCB0byB0aGUgY3VycmVudCBtb2RlIGJ1ZmZlclxuICAgICAgbW9kZUJ1ZmZlciArPSB0ZXh0QmVmb3JlTWF0Y2g7XG5cbiAgICAgIGlmIChsZXhlbWUgPT0gbnVsbCkge1xuICAgICAgICBwcm9jZXNzQnVmZmVyKCk7XG4gICAgICAgIHJldHVybiAwO1xuICAgICAgfVxuXG4gICAgICAvLyB3ZSd2ZSBmb3VuZCBhIDAgd2lkdGggbWF0Y2ggYW5kIHdlJ3JlIHN0dWNrLCBzbyB3ZSBuZWVkIHRvIGFkdmFuY2VcbiAgICAgIC8vIHRoaXMgaGFwcGVucyB3aGVuIHdlIGhhdmUgYmFkbHkgYmVoYXZlZCBydWxlcyB0aGF0IGhhdmUgb3B0aW9uYWwgbWF0Y2hlcnMgdG8gdGhlIGRlZ3JlZSB0aGF0XG4gICAgICAvLyBzb21ldGltZXMgdGhleSBjYW4gZW5kIHVwIG1hdGNoaW5nIG5vdGhpbmcgYXQgYWxsXG4gICAgICAvLyBSZWY6IGh0dHBzOi8vZ2l0aHViLmNvbS9oaWdobGlnaHRqcy9oaWdobGlnaHQuanMvaXNzdWVzLzIxNDBcbiAgICAgIGlmIChsYXN0TWF0Y2gudHlwZSA9PT0gXCJiZWdpblwiICYmIG1hdGNoLnR5cGUgPT09IFwiZW5kXCIgJiYgbGFzdE1hdGNoLmluZGV4ID09PSBtYXRjaC5pbmRleCAmJiBsZXhlbWUgPT09IFwiXCIpIHtcbiAgICAgICAgLy8gc3BpdCB0aGUgXCJza2lwcGVkXCIgY2hhcmFjdGVyIHRoYXQgb3VyIHJlZ2V4IGNob2tlZCBvbiBiYWNrIGludG8gdGhlIG91dHB1dCBzZXF1ZW5jZVxuICAgICAgICBtb2RlQnVmZmVyICs9IGNvZGVUb0hpZ2hsaWdodC5zbGljZShtYXRjaC5pbmRleCwgbWF0Y2guaW5kZXggKyAxKTtcbiAgICAgICAgaWYgKCFTQUZFX01PREUpIHtcbiAgICAgICAgICAvKiogQHR5cGUge0Fubm90YXRlZEVycm9yfSAqL1xuICAgICAgICAgIGNvbnN0IGVyciA9IG5ldyBFcnJvcihgMCB3aWR0aCBtYXRjaCByZWdleCAoJHtsYW5ndWFnZU5hbWV9KWApO1xuICAgICAgICAgIGVyci5sYW5ndWFnZU5hbWUgPSBsYW5ndWFnZU5hbWU7XG4gICAgICAgICAgZXJyLmJhZFJ1bGUgPSBsYXN0TWF0Y2gucnVsZTtcbiAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIDE7XG4gICAgICB9XG4gICAgICBsYXN0TWF0Y2ggPSBtYXRjaDtcblxuICAgICAgaWYgKG1hdGNoLnR5cGUgPT09IFwiYmVnaW5cIikge1xuICAgICAgICByZXR1cm4gZG9CZWdpbk1hdGNoKG1hdGNoKTtcbiAgICAgIH0gZWxzZSBpZiAobWF0Y2gudHlwZSA9PT0gXCJpbGxlZ2FsXCIgJiYgIWlnbm9yZUlsbGVnYWxzKSB7XG4gICAgICAgIC8vIGlsbGVnYWwgbWF0Y2gsIHdlIGRvIG5vdCBjb250aW51ZSBwcm9jZXNzaW5nXG4gICAgICAgIC8qKiBAdHlwZSB7QW5ub3RhdGVkRXJyb3J9ICovXG4gICAgICAgIGNvbnN0IGVyciA9IG5ldyBFcnJvcignSWxsZWdhbCBsZXhlbWUgXCInICsgbGV4ZW1lICsgJ1wiIGZvciBtb2RlIFwiJyArICh0b3Auc2NvcGUgfHwgJzx1bm5hbWVkPicpICsgJ1wiJyk7XG4gICAgICAgIGVyci5tb2RlID0gdG9wO1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9IGVsc2UgaWYgKG1hdGNoLnR5cGUgPT09IFwiZW5kXCIpIHtcbiAgICAgICAgY29uc3QgcHJvY2Vzc2VkID0gZG9FbmRNYXRjaChtYXRjaCk7XG4gICAgICAgIGlmIChwcm9jZXNzZWQgIT09IE5PX01BVENIKSB7XG4gICAgICAgICAgcmV0dXJuIHByb2Nlc3NlZDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBlZGdlIGNhc2UgZm9yIHdoZW4gaWxsZWdhbCBtYXRjaGVzICQgKGVuZCBvZiBsaW5lKSB3aGljaCBpcyB0ZWNobmljYWxseVxuICAgICAgLy8gYSAwIHdpZHRoIG1hdGNoIGJ1dCBub3QgYSBiZWdpbi9lbmQgbWF0Y2ggc28gaXQncyBub3QgY2F1Z2h0IGJ5IHRoZVxuICAgICAgLy8gZmlyc3QgaGFuZGxlciAod2hlbiBpZ25vcmVJbGxlZ2FscyBpcyB0cnVlKVxuICAgICAgaWYgKG1hdGNoLnR5cGUgPT09IFwiaWxsZWdhbFwiICYmIGxleGVtZSA9PT0gXCJcIikge1xuICAgICAgICAvLyBhZHZhbmNlIHNvIHdlIGFyZW4ndCBzdHVjayBpbiBhbiBpbmZpbml0ZSBsb29wXG4gICAgICAgIG1vZGVCdWZmZXIgKz0gXCJcXG5cIjtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgICB9XG5cbiAgICAgIC8vIGluZmluaXRlIGxvb3BzIGFyZSBCQUQsIHRoaXMgaXMgYSBsYXN0IGRpdGNoIGNhdGNoIGFsbC4gaWYgd2UgaGF2ZSBhXG4gICAgICAvLyBkZWNlbnQgbnVtYmVyIG9mIGl0ZXJhdGlvbnMgeWV0IG91ciBpbmRleCAoY3Vyc29yIHBvc2l0aW9uIGluIG91clxuICAgICAgLy8gcGFyc2luZykgc3RpbGwgM3ggYmVoaW5kIG91ciBpbmRleCB0aGVuIHNvbWV0aGluZyBpcyB2ZXJ5IHdyb25nXG4gICAgICAvLyBzbyB3ZSBiYWlsXG4gICAgICBpZiAoaXRlcmF0aW9ucyA+IDEwMDAwMCAmJiBpdGVyYXRpb25zID4gbWF0Y2guaW5kZXggKiAzKSB7XG4gICAgICAgIGNvbnN0IGVyciA9IG5ldyBFcnJvcigncG90ZW50aWFsIGluZmluaXRlIGxvb3AsIHdheSBtb3JlIGl0ZXJhdGlvbnMgdGhhbiBtYXRjaGVzJyk7XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cblxuICAgICAgLypcbiAgICAgIFdoeSBtaWdodCBiZSBmaW5kIG91cnNlbHZlcyBoZXJlPyAgQW4gcG90ZW50aWFsIGVuZCBtYXRjaCB0aGF0IHdhc1xuICAgICAgdHJpZ2dlcmVkIGJ1dCBjb3VsZCBub3QgYmUgY29tcGxldGVkLiAgSUUsIGBkb0VuZE1hdGNoYCByZXR1cm5lZCBOT19NQVRDSC5cbiAgICAgICh0aGlzIGNvdWxkIGJlIGJlY2F1c2UgYSBjYWxsYmFjayByZXF1ZXN0cyB0aGUgbWF0Y2ggYmUgaWdub3JlZCwgZXRjKVxuXG4gICAgICBUaGlzIGNhdXNlcyBubyByZWFsIGhhcm0gb3RoZXIgdGhhbiBzdG9wcGluZyBhIGZldyB0aW1lcyB0b28gbWFueS5cbiAgICAgICovXG5cbiAgICAgIG1vZGVCdWZmZXIgKz0gbGV4ZW1lO1xuICAgICAgcmV0dXJuIGxleGVtZS5sZW5ndGg7XG4gICAgfVxuXG4gICAgY29uc3QgbGFuZ3VhZ2UgPSBnZXRMYW5ndWFnZShsYW5ndWFnZU5hbWUpO1xuICAgIGlmICghbGFuZ3VhZ2UpIHtcbiAgICAgIGVycm9yKExBTkdVQUdFX05PVF9GT1VORC5yZXBsYWNlKFwie31cIiwgbGFuZ3VhZ2VOYW1lKSk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gbGFuZ3VhZ2U6IFwiJyArIGxhbmd1YWdlTmFtZSArICdcIicpO1xuICAgIH1cblxuICAgIGNvbnN0IG1kID0gY29tcGlsZUxhbmd1YWdlKGxhbmd1YWdlKTtcbiAgICBsZXQgcmVzdWx0ID0gJyc7XG4gICAgLyoqIEB0eXBlIHtDb21waWxlZE1vZGV9ICovXG4gICAgbGV0IHRvcCA9IGNvbnRpbnVhdGlvbiB8fCBtZDtcbiAgICAvKiogQHR5cGUgUmVjb3JkPHN0cmluZyxDb21waWxlZE1vZGU+ICovXG4gICAgY29uc3QgY29udGludWF0aW9ucyA9IHt9OyAvLyBrZWVwIGNvbnRpbnVhdGlvbnMgZm9yIHN1Yi1sYW5ndWFnZXNcbiAgICBjb25zdCBlbWl0dGVyID0gbmV3IG9wdGlvbnMuX19lbWl0dGVyKG9wdGlvbnMpO1xuICAgIHByb2Nlc3NDb250aW51YXRpb25zKCk7XG4gICAgbGV0IG1vZGVCdWZmZXIgPSAnJztcbiAgICBsZXQgcmVsZXZhbmNlID0gMDtcbiAgICBsZXQgaW5kZXggPSAwO1xuICAgIGxldCBpdGVyYXRpb25zID0gMDtcbiAgICBsZXQgcmVzdW1lU2NhbkF0U2FtZVBvc2l0aW9uID0gZmFsc2U7XG5cbiAgICB0cnkge1xuICAgICAgaWYgKCFsYW5ndWFnZS5fX2VtaXRUb2tlbnMpIHtcbiAgICAgICAgdG9wLm1hdGNoZXIuY29uc2lkZXJBbGwoKTtcblxuICAgICAgICBmb3IgKDs7KSB7XG4gICAgICAgICAgaXRlcmF0aW9ucysrO1xuICAgICAgICAgIGlmIChyZXN1bWVTY2FuQXRTYW1lUG9zaXRpb24pIHtcbiAgICAgICAgICAgIC8vIG9ubHkgcmVnZXhlcyBub3QgbWF0Y2hlZCBwcmV2aW91c2x5IHdpbGwgbm93IGJlXG4gICAgICAgICAgICAvLyBjb25zaWRlcmVkIGZvciBhIHBvdGVudGlhbCBtYXRjaFxuICAgICAgICAgICAgcmVzdW1lU2NhbkF0U2FtZVBvc2l0aW9uID0gZmFsc2U7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRvcC5tYXRjaGVyLmNvbnNpZGVyQWxsKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRvcC5tYXRjaGVyLmxhc3RJbmRleCA9IGluZGV4O1xuXG4gICAgICAgICAgY29uc3QgbWF0Y2ggPSB0b3AubWF0Y2hlci5leGVjKGNvZGVUb0hpZ2hsaWdodCk7XG4gICAgICAgICAgLy8gY29uc29sZS5sb2coXCJtYXRjaFwiLCBtYXRjaFswXSwgbWF0Y2gucnVsZSAmJiBtYXRjaC5ydWxlLmJlZ2luKVxuXG4gICAgICAgICAgaWYgKCFtYXRjaCkgYnJlYWs7XG5cbiAgICAgICAgICBjb25zdCBiZWZvcmVNYXRjaCA9IGNvZGVUb0hpZ2hsaWdodC5zdWJzdHJpbmcoaW5kZXgsIG1hdGNoLmluZGV4KTtcbiAgICAgICAgICBjb25zdCBwcm9jZXNzZWRDb3VudCA9IHByb2Nlc3NMZXhlbWUoYmVmb3JlTWF0Y2gsIG1hdGNoKTtcbiAgICAgICAgICBpbmRleCA9IG1hdGNoLmluZGV4ICsgcHJvY2Vzc2VkQ291bnQ7XG4gICAgICAgIH1cbiAgICAgICAgcHJvY2Vzc0xleGVtZShjb2RlVG9IaWdobGlnaHQuc3Vic3RyaW5nKGluZGV4KSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsYW5ndWFnZS5fX2VtaXRUb2tlbnMoY29kZVRvSGlnaGxpZ2h0LCBlbWl0dGVyKTtcbiAgICAgIH1cblxuICAgICAgZW1pdHRlci5maW5hbGl6ZSgpO1xuICAgICAgcmVzdWx0ID0gZW1pdHRlci50b0hUTUwoKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbGFuZ3VhZ2U6IGxhbmd1YWdlTmFtZSxcbiAgICAgICAgdmFsdWU6IHJlc3VsdCxcbiAgICAgICAgcmVsZXZhbmNlLFxuICAgICAgICBpbGxlZ2FsOiBmYWxzZSxcbiAgICAgICAgX2VtaXR0ZXI6IGVtaXR0ZXIsXG4gICAgICAgIF90b3A6IHRvcFxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmIChlcnIubWVzc2FnZSAmJiBlcnIubWVzc2FnZS5pbmNsdWRlcygnSWxsZWdhbCcpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbGFuZ3VhZ2U6IGxhbmd1YWdlTmFtZSxcbiAgICAgICAgICB2YWx1ZTogZXNjYXBlKGNvZGVUb0hpZ2hsaWdodCksXG4gICAgICAgICAgaWxsZWdhbDogdHJ1ZSxcbiAgICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgICAgX2lsbGVnYWxCeToge1xuICAgICAgICAgICAgbWVzc2FnZTogZXJyLm1lc3NhZ2UsXG4gICAgICAgICAgICBpbmRleCxcbiAgICAgICAgICAgIGNvbnRleHQ6IGNvZGVUb0hpZ2hsaWdodC5zbGljZShpbmRleCAtIDEwMCwgaW5kZXggKyAxMDApLFxuICAgICAgICAgICAgbW9kZTogZXJyLm1vZGUsXG4gICAgICAgICAgICByZXN1bHRTb0ZhcjogcmVzdWx0XG4gICAgICAgICAgfSxcbiAgICAgICAgICBfZW1pdHRlcjogZW1pdHRlclxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIGlmIChTQUZFX01PREUpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBsYW5ndWFnZTogbGFuZ3VhZ2VOYW1lLFxuICAgICAgICAgIHZhbHVlOiBlc2NhcGUoY29kZVRvSGlnaGxpZ2h0KSxcbiAgICAgICAgICBpbGxlZ2FsOiBmYWxzZSxcbiAgICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgICAgZXJyb3JSYWlzZWQ6IGVycixcbiAgICAgICAgICBfZW1pdHRlcjogZW1pdHRlcixcbiAgICAgICAgICBfdG9wOiB0b3BcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogcmV0dXJucyBhIHZhbGlkIGhpZ2hsaWdodCByZXN1bHQsIHdpdGhvdXQgYWN0dWFsbHkgZG9pbmcgYW55IGFjdHVhbCB3b3JrLFxuICAgKiBhdXRvIGhpZ2hsaWdodCBzdGFydHMgd2l0aCB0aGlzIGFuZCBpdCdzIHBvc3NpYmxlIGZvciBzbWFsbCBzbmlwcGV0cyB0aGF0XG4gICAqIGF1dG8tZGV0ZWN0aW9uIG1heSBub3QgZmluZCBhIGJldHRlciBtYXRjaFxuICAgKiBAcGFyYW0ge3N0cmluZ30gY29kZVxuICAgKiBAcmV0dXJucyB7SGlnaGxpZ2h0UmVzdWx0fVxuICAgKi9cbiAgZnVuY3Rpb24ganVzdFRleHRIaWdobGlnaHRSZXN1bHQoY29kZSkge1xuICAgIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAgIHZhbHVlOiBlc2NhcGUoY29kZSksXG4gICAgICBpbGxlZ2FsOiBmYWxzZSxcbiAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgIF90b3A6IFBMQUlOVEVYVF9MQU5HVUFHRSxcbiAgICAgIF9lbWl0dGVyOiBuZXcgb3B0aW9ucy5fX2VtaXR0ZXIob3B0aW9ucylcbiAgICB9O1xuICAgIHJlc3VsdC5fZW1pdHRlci5hZGRUZXh0KGNvZGUpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgSGlnaGxpZ2h0aW5nIHdpdGggbGFuZ3VhZ2UgZGV0ZWN0aW9uLiBBY2NlcHRzIGEgc3RyaW5nIHdpdGggdGhlIGNvZGUgdG9cbiAgaGlnaGxpZ2h0LiBSZXR1cm5zIGFuIG9iamVjdCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcblxuICAtIGxhbmd1YWdlIChkZXRlY3RlZCBsYW5ndWFnZSlcbiAgLSByZWxldmFuY2UgKGludClcbiAgLSB2YWx1ZSAoYW4gSFRNTCBzdHJpbmcgd2l0aCBoaWdobGlnaHRpbmcgbWFya3VwKVxuICAtIHNlY29uZEJlc3QgKG9iamVjdCB3aXRoIHRoZSBzYW1lIHN0cnVjdHVyZSBmb3Igc2Vjb25kLWJlc3QgaGV1cmlzdGljYWxseVxuICAgIGRldGVjdGVkIGxhbmd1YWdlLCBtYXkgYmUgYWJzZW50KVxuXG4gICAgQHBhcmFtIHtzdHJpbmd9IGNvZGVcbiAgICBAcGFyYW0ge0FycmF5PHN0cmluZz59IFtsYW5ndWFnZVN1YnNldF1cbiAgICBAcmV0dXJucyB7QXV0b0hpZ2hsaWdodFJlc3VsdH1cbiAgKi9cbiAgZnVuY3Rpb24gaGlnaGxpZ2h0QXV0byhjb2RlLCBsYW5ndWFnZVN1YnNldCkge1xuICAgIGxhbmd1YWdlU3Vic2V0ID0gbGFuZ3VhZ2VTdWJzZXQgfHwgb3B0aW9ucy5sYW5ndWFnZXMgfHwgT2JqZWN0LmtleXMobGFuZ3VhZ2VzKTtcbiAgICBjb25zdCBwbGFpbnRleHQgPSBqdXN0VGV4dEhpZ2hsaWdodFJlc3VsdChjb2RlKTtcblxuICAgIGNvbnN0IHJlc3VsdHMgPSBsYW5ndWFnZVN1YnNldC5maWx0ZXIoZ2V0TGFuZ3VhZ2UpLmZpbHRlcihhdXRvRGV0ZWN0aW9uKS5tYXAobmFtZSA9PlxuICAgICAgX2hpZ2hsaWdodChuYW1lLCBjb2RlLCBmYWxzZSlcbiAgICApO1xuICAgIHJlc3VsdHMudW5zaGlmdChwbGFpbnRleHQpOyAvLyBwbGFpbnRleHQgaXMgYWx3YXlzIGFuIG9wdGlvblxuXG4gICAgY29uc3Qgc29ydGVkID0gcmVzdWx0cy5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAvLyBzb3J0IGJhc2Ugb24gcmVsZXZhbmNlXG4gICAgICBpZiAoYS5yZWxldmFuY2UgIT09IGIucmVsZXZhbmNlKSByZXR1cm4gYi5yZWxldmFuY2UgLSBhLnJlbGV2YW5jZTtcblxuICAgICAgLy8gYWx3YXlzIGF3YXJkIHRoZSB0aWUgdG8gdGhlIGJhc2UgbGFuZ3VhZ2VcbiAgICAgIC8vIGllIGlmIEMrKyBhbmQgQXJkdWlubyBhcmUgdGllZCwgaXQncyBtb3JlIGxpa2VseSB0byBiZSBDKytcbiAgICAgIGlmIChhLmxhbmd1YWdlICYmIGIubGFuZ3VhZ2UpIHtcbiAgICAgICAgaWYgKGdldExhbmd1YWdlKGEubGFuZ3VhZ2UpLnN1cGVyc2V0T2YgPT09IGIubGFuZ3VhZ2UpIHtcbiAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgfSBlbHNlIGlmIChnZXRMYW5ndWFnZShiLmxhbmd1YWdlKS5zdXBlcnNldE9mID09PSBhLmxhbmd1YWdlKSB7XG4gICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIG90aGVyd2lzZSBzYXkgdGhleSBhcmUgZXF1YWwsIHdoaWNoIGhhcyB0aGUgZWZmZWN0IG9mIHNvcnRpbmcgb25cbiAgICAgIC8vIHJlbGV2YW5jZSB3aGlsZSBwcmVzZXJ2aW5nIHRoZSBvcmlnaW5hbCBvcmRlcmluZyAtIHdoaWNoIGlzIGhvdyB0aWVzXG4gICAgICAvLyBoYXZlIGhpc3RvcmljYWxseSBiZWVuIHNldHRsZWQsIGllIHRoZSBsYW5ndWFnZSB0aGF0IGNvbWVzIGZpcnN0IGFsd2F5c1xuICAgICAgLy8gd2lucyBpbiB0aGUgY2FzZSBvZiBhIHRpZVxuICAgICAgcmV0dXJuIDA7XG4gICAgfSk7XG5cbiAgICBjb25zdCBbYmVzdCwgc2Vjb25kQmVzdF0gPSBzb3J0ZWQ7XG5cbiAgICAvKiogQHR5cGUge0F1dG9IaWdobGlnaHRSZXN1bHR9ICovXG4gICAgY29uc3QgcmVzdWx0ID0gYmVzdDtcbiAgICByZXN1bHQuc2Vjb25kQmVzdCA9IHNlY29uZEJlc3Q7XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkcyBuZXcgY2xhc3MgbmFtZSBmb3IgYmxvY2sgZ2l2ZW4gdGhlIGxhbmd1YWdlIG5hbWVcbiAgICpcbiAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2N1cnJlbnRMYW5nXVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3Jlc3VsdExhbmddXG4gICAqL1xuICBmdW5jdGlvbiB1cGRhdGVDbGFzc05hbWUoZWxlbWVudCwgY3VycmVudExhbmcsIHJlc3VsdExhbmcpIHtcbiAgICBjb25zdCBsYW5ndWFnZSA9IChjdXJyZW50TGFuZyAmJiBhbGlhc2VzW2N1cnJlbnRMYW5nXSkgfHwgcmVzdWx0TGFuZztcblxuICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZChcImhsanNcIik7XG4gICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKGBsYW5ndWFnZS0ke2xhbmd1YWdlfWApO1xuICB9XG5cbiAgLyoqXG4gICAqIEFwcGxpZXMgaGlnaGxpZ2h0aW5nIHRvIGEgRE9NIG5vZGUgY29udGFpbmluZyBjb2RlLlxuICAgKlxuICAgKiBAcGFyYW0ge0hpZ2hsaWdodGVkSFRNTEVsZW1lbnR9IGVsZW1lbnQgLSB0aGUgSFRNTCBlbGVtZW50IHRvIGhpZ2hsaWdodFxuICAqL1xuICBmdW5jdGlvbiBoaWdobGlnaHRFbGVtZW50KGVsZW1lbnQpIHtcbiAgICAvKiogQHR5cGUgSFRNTEVsZW1lbnQgKi9cbiAgICBsZXQgbm9kZSA9IG51bGw7XG4gICAgY29uc3QgbGFuZ3VhZ2UgPSBibG9ja0xhbmd1YWdlKGVsZW1lbnQpO1xuXG4gICAgaWYgKHNob3VsZE5vdEhpZ2hsaWdodChsYW5ndWFnZSkpIHJldHVybjtcblxuICAgIGZpcmUoXCJiZWZvcmU6aGlnaGxpZ2h0RWxlbWVudFwiLFxuICAgICAgeyBlbDogZWxlbWVudCwgbGFuZ3VhZ2UgfSk7XG5cbiAgICBpZiAoZWxlbWVudC5kYXRhc2V0LmhpZ2hsaWdodGVkKSB7XG4gICAgICBjb25zb2xlLmxvZyhcIkVsZW1lbnQgcHJldmlvdXNseSBoaWdobGlnaHRlZC4gVG8gaGlnaGxpZ2h0IGFnYWluLCBmaXJzdCB1bnNldCBgZGF0YXNldC5oaWdobGlnaHRlZGAuXCIsIGVsZW1lbnQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIHdlIHNob3VsZCBiZSBhbGwgdGV4dCwgbm8gY2hpbGQgbm9kZXMgKHVuZXNjYXBlZCBIVE1MKSAtIHRoaXMgaXMgcG9zc2libHlcbiAgICAvLyBhbiBIVE1MIGluamVjdGlvbiBhdHRhY2sgLSBpdCdzIGxpa2VseSB0b28gbGF0ZSBpZiB0aGlzIGlzIGFscmVhZHkgaW5cbiAgICAvLyBwcm9kdWN0aW9uICh0aGUgY29kZSBoYXMgbGlrZWx5IGFscmVhZHkgZG9uZSBpdHMgZGFtYWdlIGJ5IHRoZSB0aW1lXG4gICAgLy8gd2UncmUgc2VlaW5nIGl0KS4uLiBidXQgd2UgeWVsbCBsb3VkbHkgYWJvdXQgdGhpcyBzbyB0aGF0IGhvcGVmdWxseSBpdCdzXG4gICAgLy8gbW9yZSBsaWtlbHkgdG8gYmUgY2F1Z2h0IGluIGRldmVsb3BtZW50IGJlZm9yZSBtYWtpbmcgaXQgdG8gcHJvZHVjdGlvblxuICAgIGlmIChlbGVtZW50LmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgIGlmICghb3B0aW9ucy5pZ25vcmVVbmVzY2FwZWRIVE1MKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcIk9uZSBvZiB5b3VyIGNvZGUgYmxvY2tzIGluY2x1ZGVzIHVuZXNjYXBlZCBIVE1MLiBUaGlzIGlzIGEgcG90ZW50aWFsbHkgc2VyaW91cyBzZWN1cml0eSByaXNrLlwiKTtcbiAgICAgICAgY29uc29sZS53YXJuKFwiaHR0cHM6Ly9naXRodWIuY29tL2hpZ2hsaWdodGpzL2hpZ2hsaWdodC5qcy93aWtpL3NlY3VyaXR5XCIpO1xuICAgICAgICBjb25zb2xlLndhcm4oXCJUaGUgZWxlbWVudCB3aXRoIHVuZXNjYXBlZCBIVE1MOlwiKTtcbiAgICAgICAgY29uc29sZS53YXJuKGVsZW1lbnQpO1xuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbnMudGhyb3dVbmVzY2FwZWRIVE1MKSB7XG4gICAgICAgIGNvbnN0IGVyciA9IG5ldyBIVE1MSW5qZWN0aW9uRXJyb3IoXG4gICAgICAgICAgXCJPbmUgb2YgeW91ciBjb2RlIGJsb2NrcyBpbmNsdWRlcyB1bmVzY2FwZWQgSFRNTC5cIixcbiAgICAgICAgICBlbGVtZW50LmlubmVySFRNTFxuICAgICAgICApO1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbm9kZSA9IGVsZW1lbnQ7XG4gICAgY29uc3QgdGV4dCA9IG5vZGUudGV4dENvbnRlbnQ7XG4gICAgY29uc3QgcmVzdWx0ID0gbGFuZ3VhZ2UgPyBoaWdobGlnaHQodGV4dCwgeyBsYW5ndWFnZSwgaWdub3JlSWxsZWdhbHM6IHRydWUgfSkgOiBoaWdobGlnaHRBdXRvKHRleHQpO1xuXG4gICAgZWxlbWVudC5pbm5lckhUTUwgPSByZXN1bHQudmFsdWU7XG4gICAgZWxlbWVudC5kYXRhc2V0LmhpZ2hsaWdodGVkID0gXCJ5ZXNcIjtcbiAgICB1cGRhdGVDbGFzc05hbWUoZWxlbWVudCwgbGFuZ3VhZ2UsIHJlc3VsdC5sYW5ndWFnZSk7XG4gICAgZWxlbWVudC5yZXN1bHQgPSB7XG4gICAgICBsYW5ndWFnZTogcmVzdWx0Lmxhbmd1YWdlLFxuICAgICAgLy8gVE9ETzogcmVtb3ZlIHdpdGggdmVyc2lvbiAxMS4wXG4gICAgICByZTogcmVzdWx0LnJlbGV2YW5jZSxcbiAgICAgIHJlbGV2YW5jZTogcmVzdWx0LnJlbGV2YW5jZVxuICAgIH07XG4gICAgaWYgKHJlc3VsdC5zZWNvbmRCZXN0KSB7XG4gICAgICBlbGVtZW50LnNlY29uZEJlc3QgPSB7XG4gICAgICAgIGxhbmd1YWdlOiByZXN1bHQuc2Vjb25kQmVzdC5sYW5ndWFnZSxcbiAgICAgICAgcmVsZXZhbmNlOiByZXN1bHQuc2Vjb25kQmVzdC5yZWxldmFuY2VcbiAgICAgIH07XG4gICAgfVxuXG4gICAgZmlyZShcImFmdGVyOmhpZ2hsaWdodEVsZW1lbnRcIiwgeyBlbDogZWxlbWVudCwgcmVzdWx0LCB0ZXh0IH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgaGlnaGxpZ2h0LmpzIGdsb2JhbCBvcHRpb25zIHdpdGggdGhlIHBhc3NlZCBvcHRpb25zXG4gICAqXG4gICAqIEBwYXJhbSB7UGFydGlhbDxITEpTT3B0aW9ucz59IHVzZXJPcHRpb25zXG4gICAqL1xuICBmdW5jdGlvbiBjb25maWd1cmUodXNlck9wdGlvbnMpIHtcbiAgICBvcHRpb25zID0gaW5oZXJpdChvcHRpb25zLCB1c2VyT3B0aW9ucyk7XG4gIH1cblxuICAvLyBUT0RPOiByZW1vdmUgdjEyLCBkZXByZWNhdGVkXG4gIGNvbnN0IGluaXRIaWdobGlnaHRpbmcgPSAoKSA9PiB7XG4gICAgaGlnaGxpZ2h0QWxsKCk7XG4gICAgZGVwcmVjYXRlZChcIjEwLjYuMFwiLCBcImluaXRIaWdobGlnaHRpbmcoKSBkZXByZWNhdGVkLiAgVXNlIGhpZ2hsaWdodEFsbCgpIG5vdy5cIik7XG4gIH07XG5cbiAgLy8gVE9ETzogcmVtb3ZlIHYxMiwgZGVwcmVjYXRlZFxuICBmdW5jdGlvbiBpbml0SGlnaGxpZ2h0aW5nT25Mb2FkKCkge1xuICAgIGhpZ2hsaWdodEFsbCgpO1xuICAgIGRlcHJlY2F0ZWQoXCIxMC42LjBcIiwgXCJpbml0SGlnaGxpZ2h0aW5nT25Mb2FkKCkgZGVwcmVjYXRlZC4gIFVzZSBoaWdobGlnaHRBbGwoKSBub3cuXCIpO1xuICB9XG5cbiAgbGV0IHdhbnRzSGlnaGxpZ2h0ID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIGF1dG8taGlnaGxpZ2h0cyBhbGwgcHJlPmNvZGUgZWxlbWVudHMgb24gdGhlIHBhZ2VcbiAgICovXG4gIGZ1bmN0aW9uIGhpZ2hsaWdodEFsbCgpIHtcbiAgICBmdW5jdGlvbiBib290KCkge1xuICAgICAgLy8gaWYgYSBoaWdobGlnaHQgd2FzIHJlcXVlc3RlZCBiZWZvcmUgRE9NIHdhcyBsb2FkZWQsIGRvIG5vd1xuICAgICAgaGlnaGxpZ2h0QWxsKCk7XG4gICAgfVxuXG4gICAgLy8gaWYgd2UgYXJlIGNhbGxlZCB0b28gZWFybHkgaW4gdGhlIGxvYWRpbmcgcHJvY2Vzc1xuICAgIGlmIChkb2N1bWVudC5yZWFkeVN0YXRlID09PSBcImxvYWRpbmdcIikge1xuICAgICAgLy8gbWFrZSBzdXJlIHRoZSBldmVudCBsaXN0ZW5lciBpcyBvbmx5IGFkZGVkIG9uY2VcbiAgICAgIGlmICghd2FudHNIaWdobGlnaHQpIHtcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCBib290LCBmYWxzZSk7XG4gICAgICB9XG4gICAgICB3YW50c0hpZ2hsaWdodCA9IHRydWU7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYmxvY2tzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChvcHRpb25zLmNzc1NlbGVjdG9yKTtcbiAgICBibG9ja3MuZm9yRWFjaChoaWdobGlnaHRFbGVtZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlciBhIGxhbmd1YWdlIGdyYW1tYXIgbW9kdWxlXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsYW5ndWFnZU5hbWVcbiAgICogQHBhcmFtIHtMYW5ndWFnZUZufSBsYW5ndWFnZURlZmluaXRpb25cbiAgICovXG4gIGZ1bmN0aW9uIHJlZ2lzdGVyTGFuZ3VhZ2UobGFuZ3VhZ2VOYW1lLCBsYW5ndWFnZURlZmluaXRpb24pIHtcbiAgICBsZXQgbGFuZyA9IG51bGw7XG4gICAgdHJ5IHtcbiAgICAgIGxhbmcgPSBsYW5ndWFnZURlZmluaXRpb24oaGxqcyk7XG4gICAgfSBjYXRjaCAoZXJyb3IkMSkge1xuICAgICAgZXJyb3IoXCJMYW5ndWFnZSBkZWZpbml0aW9uIGZvciAne30nIGNvdWxkIG5vdCBiZSByZWdpc3RlcmVkLlwiLnJlcGxhY2UoXCJ7fVwiLCBsYW5ndWFnZU5hbWUpKTtcbiAgICAgIC8vIGhhcmQgb3Igc29mdCBlcnJvclxuICAgICAgaWYgKCFTQUZFX01PREUpIHsgdGhyb3cgZXJyb3IkMTsgfSBlbHNlIHsgZXJyb3IoZXJyb3IkMSk7IH1cbiAgICAgIC8vIGxhbmd1YWdlcyB0aGF0IGhhdmUgc2VyaW91cyBlcnJvcnMgYXJlIHJlcGxhY2VkIHdpdGggZXNzZW50aWFsbHkgYVxuICAgICAgLy8gXCJwbGFpbnRleHRcIiBzdGFuZC1pbiBzbyB0aGF0IHRoZSBjb2RlIGJsb2NrcyB3aWxsIHN0aWxsIGdldCBub3JtYWxcbiAgICAgIC8vIGNzcyBjbGFzc2VzIGFwcGxpZWQgdG8gdGhlbSAtIGFuZCBvbmUgYmFkIGxhbmd1YWdlIHdvbid0IGJyZWFrIHRoZVxuICAgICAgLy8gZW50aXJlIGhpZ2hsaWdodGVyXG4gICAgICBsYW5nID0gUExBSU5URVhUX0xBTkdVQUdFO1xuICAgIH1cbiAgICAvLyBnaXZlIGl0IGEgdGVtcG9yYXJ5IG5hbWUgaWYgaXQgZG9lc24ndCBoYXZlIG9uZSBpbiB0aGUgbWV0YS1kYXRhXG4gICAgaWYgKCFsYW5nLm5hbWUpIGxhbmcubmFtZSA9IGxhbmd1YWdlTmFtZTtcbiAgICBsYW5ndWFnZXNbbGFuZ3VhZ2VOYW1lXSA9IGxhbmc7XG4gICAgbGFuZy5yYXdEZWZpbml0aW9uID0gbGFuZ3VhZ2VEZWZpbml0aW9uLmJpbmQobnVsbCwgaGxqcyk7XG5cbiAgICBpZiAobGFuZy5hbGlhc2VzKSB7XG4gICAgICByZWdpc3RlckFsaWFzZXMobGFuZy5hbGlhc2VzLCB7IGxhbmd1YWdlTmFtZSB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGEgbGFuZ3VhZ2UgZ3JhbW1hciBtb2R1bGVcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxhbmd1YWdlTmFtZVxuICAgKi9cbiAgZnVuY3Rpb24gdW5yZWdpc3Rlckxhbmd1YWdlKGxhbmd1YWdlTmFtZSkge1xuICAgIGRlbGV0ZSBsYW5ndWFnZXNbbGFuZ3VhZ2VOYW1lXTtcbiAgICBmb3IgKGNvbnN0IGFsaWFzIG9mIE9iamVjdC5rZXlzKGFsaWFzZXMpKSB7XG4gICAgICBpZiAoYWxpYXNlc1thbGlhc10gPT09IGxhbmd1YWdlTmFtZSkge1xuICAgICAgICBkZWxldGUgYWxpYXNlc1thbGlhc107XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtzdHJpbmdbXX0gTGlzdCBvZiBsYW5ndWFnZSBpbnRlcm5hbCBuYW1lc1xuICAgKi9cbiAgZnVuY3Rpb24gbGlzdExhbmd1YWdlcygpIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMobGFuZ3VhZ2VzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIG5hbWUgb2YgdGhlIGxhbmd1YWdlIHRvIHJldHJpZXZlXG4gICAqIEByZXR1cm5zIHtMYW5ndWFnZSB8IHVuZGVmaW5lZH1cbiAgICovXG4gIGZ1bmN0aW9uIGdldExhbmd1YWdlKG5hbWUpIHtcbiAgICBuYW1lID0gKG5hbWUgfHwgJycpLnRvTG93ZXJDYXNlKCk7XG4gICAgcmV0dXJuIGxhbmd1YWdlc1tuYW1lXSB8fCBsYW5ndWFnZXNbYWxpYXNlc1tuYW1lXV07XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd8c3RyaW5nW119IGFsaWFzTGlzdCAtIHNpbmdsZSBhbGlhcyBvciBsaXN0IG9mIGFsaWFzZXNcbiAgICogQHBhcmFtIHt7bGFuZ3VhZ2VOYW1lOiBzdHJpbmd9fSBvcHRzXG4gICAqL1xuICBmdW5jdGlvbiByZWdpc3RlckFsaWFzZXMoYWxpYXNMaXN0LCB7IGxhbmd1YWdlTmFtZSB9KSB7XG4gICAgaWYgKHR5cGVvZiBhbGlhc0xpc3QgPT09ICdzdHJpbmcnKSB7XG4gICAgICBhbGlhc0xpc3QgPSBbYWxpYXNMaXN0XTtcbiAgICB9XG4gICAgYWxpYXNMaXN0LmZvckVhY2goYWxpYXMgPT4geyBhbGlhc2VzW2FsaWFzLnRvTG93ZXJDYXNlKCldID0gbGFuZ3VhZ2VOYW1lOyB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIGlmIGEgZ2l2ZW4gbGFuZ3VhZ2UgaGFzIGF1dG8tZGV0ZWN0aW9uIGVuYWJsZWRcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBuYW1lIG9mIHRoZSBsYW5ndWFnZVxuICAgKi9cbiAgZnVuY3Rpb24gYXV0b0RldGVjdGlvbihuYW1lKSB7XG4gICAgY29uc3QgbGFuZyA9IGdldExhbmd1YWdlKG5hbWUpO1xuICAgIHJldHVybiBsYW5nICYmICFsYW5nLmRpc2FibGVBdXRvZGV0ZWN0O1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZ3JhZGVzIHRoZSBvbGQgaGlnaGxpZ2h0QmxvY2sgcGx1Z2lucyB0byB0aGUgbmV3XG4gICAqIGhpZ2hsaWdodEVsZW1lbnQgQVBJXG4gICAqIEBwYXJhbSB7SExKU1BsdWdpbn0gcGx1Z2luXG4gICAqL1xuICBmdW5jdGlvbiB1cGdyYWRlUGx1Z2luQVBJKHBsdWdpbikge1xuICAgIC8vIFRPRE86IHJlbW92ZSB3aXRoIHYxMlxuICAgIGlmIChwbHVnaW5bXCJiZWZvcmU6aGlnaGxpZ2h0QmxvY2tcIl0gJiYgIXBsdWdpbltcImJlZm9yZTpoaWdobGlnaHRFbGVtZW50XCJdKSB7XG4gICAgICBwbHVnaW5bXCJiZWZvcmU6aGlnaGxpZ2h0RWxlbWVudFwiXSA9IChkYXRhKSA9PiB7XG4gICAgICAgIHBsdWdpbltcImJlZm9yZTpoaWdobGlnaHRCbG9ja1wiXShcbiAgICAgICAgICBPYmplY3QuYXNzaWduKHsgYmxvY2s6IGRhdGEuZWwgfSwgZGF0YSlcbiAgICAgICAgKTtcbiAgICAgIH07XG4gICAgfVxuICAgIGlmIChwbHVnaW5bXCJhZnRlcjpoaWdobGlnaHRCbG9ja1wiXSAmJiAhcGx1Z2luW1wiYWZ0ZXI6aGlnaGxpZ2h0RWxlbWVudFwiXSkge1xuICAgICAgcGx1Z2luW1wiYWZ0ZXI6aGlnaGxpZ2h0RWxlbWVudFwiXSA9IChkYXRhKSA9PiB7XG4gICAgICAgIHBsdWdpbltcImFmdGVyOmhpZ2hsaWdodEJsb2NrXCJdKFxuICAgICAgICAgIE9iamVjdC5hc3NpZ24oeyBibG9jazogZGF0YS5lbCB9LCBkYXRhKVxuICAgICAgICApO1xuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtITEpTUGx1Z2lufSBwbHVnaW5cbiAgICovXG4gIGZ1bmN0aW9uIGFkZFBsdWdpbihwbHVnaW4pIHtcbiAgICB1cGdyYWRlUGx1Z2luQVBJKHBsdWdpbik7XG4gICAgcGx1Z2lucy5wdXNoKHBsdWdpbik7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtITEpTUGx1Z2lufSBwbHVnaW5cbiAgICovXG4gIGZ1bmN0aW9uIHJlbW92ZVBsdWdpbihwbHVnaW4pIHtcbiAgICBjb25zdCBpbmRleCA9IHBsdWdpbnMuaW5kZXhPZihwbHVnaW4pO1xuICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgIHBsdWdpbnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtQbHVnaW5FdmVudH0gZXZlbnRcbiAgICogQHBhcmFtIHthbnl9IGFyZ3NcbiAgICovXG4gIGZ1bmN0aW9uIGZpcmUoZXZlbnQsIGFyZ3MpIHtcbiAgICBjb25zdCBjYiA9IGV2ZW50O1xuICAgIHBsdWdpbnMuZm9yRWFjaChmdW5jdGlvbihwbHVnaW4pIHtcbiAgICAgIGlmIChwbHVnaW5bY2JdKSB7XG4gICAgICAgIHBsdWdpbltjYl0oYXJncyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogREVQUkVDQVRFRFxuICAgKiBAcGFyYW0ge0hpZ2hsaWdodGVkSFRNTEVsZW1lbnR9IGVsXG4gICAqL1xuICBmdW5jdGlvbiBkZXByZWNhdGVIaWdobGlnaHRCbG9jayhlbCkge1xuICAgIGRlcHJlY2F0ZWQoXCIxMC43LjBcIiwgXCJoaWdobGlnaHRCbG9jayB3aWxsIGJlIHJlbW92ZWQgZW50aXJlbHkgaW4gdjEyLjBcIik7XG4gICAgZGVwcmVjYXRlZChcIjEwLjcuMFwiLCBcIlBsZWFzZSB1c2UgaGlnaGxpZ2h0RWxlbWVudCBub3cuXCIpO1xuXG4gICAgcmV0dXJuIGhpZ2hsaWdodEVsZW1lbnQoZWwpO1xuICB9XG5cbiAgLyogSW50ZXJmYWNlIGRlZmluaXRpb24gKi9cbiAgT2JqZWN0LmFzc2lnbihobGpzLCB7XG4gICAgaGlnaGxpZ2h0LFxuICAgIGhpZ2hsaWdodEF1dG8sXG4gICAgaGlnaGxpZ2h0QWxsLFxuICAgIGhpZ2hsaWdodEVsZW1lbnQsXG4gICAgLy8gVE9ETzogUmVtb3ZlIHdpdGggdjEyIEFQSVxuICAgIGhpZ2hsaWdodEJsb2NrOiBkZXByZWNhdGVIaWdobGlnaHRCbG9jayxcbiAgICBjb25maWd1cmUsXG4gICAgaW5pdEhpZ2hsaWdodGluZyxcbiAgICBpbml0SGlnaGxpZ2h0aW5nT25Mb2FkLFxuICAgIHJlZ2lzdGVyTGFuZ3VhZ2UsXG4gICAgdW5yZWdpc3Rlckxhbmd1YWdlLFxuICAgIGxpc3RMYW5ndWFnZXMsXG4gICAgZ2V0TGFuZ3VhZ2UsXG4gICAgcmVnaXN0ZXJBbGlhc2VzLFxuICAgIGF1dG9EZXRlY3Rpb24sXG4gICAgaW5oZXJpdCxcbiAgICBhZGRQbHVnaW4sXG4gICAgcmVtb3ZlUGx1Z2luXG4gIH0pO1xuXG4gIGhsanMuZGVidWdNb2RlID0gZnVuY3Rpb24oKSB7IFNBRkVfTU9ERSA9IGZhbHNlOyB9O1xuICBobGpzLnNhZmVNb2RlID0gZnVuY3Rpb24oKSB7IFNBRkVfTU9ERSA9IHRydWU7IH07XG4gIGhsanMudmVyc2lvblN0cmluZyA9IHZlcnNpb247XG5cbiAgaGxqcy5yZWdleCA9IHtcbiAgICBjb25jYXQ6IGNvbmNhdCxcbiAgICBsb29rYWhlYWQ6IGxvb2thaGVhZCxcbiAgICBlaXRoZXI6IGVpdGhlcixcbiAgICBvcHRpb25hbDogb3B0aW9uYWwsXG4gICAgYW55TnVtYmVyT2ZUaW1lczogYW55TnVtYmVyT2ZUaW1lc1xuICB9O1xuXG4gIGZvciAoY29uc3Qga2V5IGluIE1PREVTKSB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGlmICh0eXBlb2YgTU9ERVNba2V5XSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgZGVlcEZyZWV6ZShNT0RFU1trZXldKTtcbiAgICB9XG4gIH1cblxuICAvLyBtZXJnZSBhbGwgdGhlIG1vZGVzL3JlZ2V4ZXMgaW50byBvdXIgbWFpbiBvYmplY3RcbiAgT2JqZWN0LmFzc2lnbihobGpzLCBNT0RFUyk7XG5cbiAgcmV0dXJuIGhsanM7XG59O1xuXG4vLyBPdGhlciBuYW1lcyBmb3IgdGhlIHZhcmlhYmxlIG1heSBicmVhayBidWlsZCBzY3JpcHRcbmNvbnN0IGhpZ2hsaWdodCA9IEhMSlMoe30pO1xuXG4vLyByZXR1cm5zIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBoaWdobGlnaHRlciB0byBiZSB1c2VkIGZvciBleHRlbnNpb25zXG4vLyBjaGVjayBodHRwczovL2dpdGh1Yi5jb20vd29vb3JtL2xvd2xpZ2h0L2lzc3Vlcy80N1xuaGlnaGxpZ2h0Lm5ld0luc3RhbmNlID0gKCkgPT4gSExKUyh7fSk7XG5cbm1vZHVsZS5leHBvcnRzID0gaGlnaGxpZ2h0O1xuaGlnaGxpZ2h0LkhpZ2hsaWdodEpTID0gaGlnaGxpZ2h0O1xuaGlnaGxpZ2h0LmRlZmF1bHQgPSBoaWdobGlnaHQ7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///1074\n")},1147:module=>{eval("/*\nLanguage: R\nDescription: R is a free software environment for statistical computing and graphics.\nAuthor: Joe Cheng \nContributors: Konrad Rudolph \nWebsite: https://www.r-project.org\nCategory: common,scientific\n*/\n\n/** @type LanguageFn */\nfunction r(hljs) {\n const regex = hljs.regex;\n // Identifiers in R cannot start with `_`, but they can start with `.` if it\n // is not immediately followed by a digit.\n // R also supports quoted identifiers, which are near-arbitrary sequences\n // delimited by backticks (`…`), which may contain escape sequences. These are\n // handled in a separate mode. See `test/markup/r/names.txt` for examples.\n // FIXME: Support Unicode identifiers.\n const IDENT_RE = /(?:(?:[a-zA-Z]|\\.[._a-zA-Z])[._a-zA-Z0-9]*)|\\.(?!\\d)/;\n const NUMBER_TYPES_RE = regex.either(\n // Special case: only hexadecimal binary powers can contain fractions\n /0[xX][0-9a-fA-F]+\\.[0-9a-fA-F]*[pP][+-]?\\d+i?/,\n // Hexadecimal numbers without fraction and optional binary power\n /0[xX][0-9a-fA-F]+(?:[pP][+-]?\\d+)?[Li]?/,\n // Decimal numbers\n /(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+)?[Li]?/\n );\n const OPERATORS_RE = /[=!<>:]=|\\|\\||&&|:::?|<-|<<-|->>|->|\\|>|[-+*\\/?!$&|:<=>@^~]|\\*\\*/;\n const PUNCTUATION_RE = regex.either(\n /[()]/,\n /[{}]/,\n /\\[\\[/,\n /[[\\]]/,\n /\\\\/,\n /,/\n );\n\n return {\n name: 'R',\n\n keywords: {\n $pattern: IDENT_RE,\n keyword:\n 'function if in break next repeat else for while',\n literal:\n 'NULL NA TRUE FALSE Inf NaN NA_integer_|10 NA_real_|10 '\n + 'NA_character_|10 NA_complex_|10',\n built_in:\n // Builtin constants\n 'LETTERS letters month.abb month.name pi T F '\n // Primitive functions\n // These are all the functions in `base` that are implemented as a\n // `.Primitive`, minus those functions that are also keywords.\n + 'abs acos acosh all any anyNA Arg as.call as.character '\n + 'as.complex as.double as.environment as.integer as.logical '\n + 'as.null.default as.numeric as.raw asin asinh atan atanh attr '\n + 'attributes baseenv browser c call ceiling class Conj cos cosh '\n + 'cospi cummax cummin cumprod cumsum digamma dim dimnames '\n + 'emptyenv exp expression floor forceAndCall gamma gc.time '\n + 'globalenv Im interactive invisible is.array is.atomic is.call '\n + 'is.character is.complex is.double is.environment is.expression '\n + 'is.finite is.function is.infinite is.integer is.language '\n + 'is.list is.logical is.matrix is.na is.name is.nan is.null '\n + 'is.numeric is.object is.pairlist is.raw is.recursive is.single '\n + 'is.symbol lazyLoadDBfetch length lgamma list log max min '\n + 'missing Mod names nargs nzchar oldClass on.exit pos.to.env '\n + 'proc.time prod quote range Re rep retracemem return round '\n + 'seq_along seq_len seq.int sign signif sin sinh sinpi sqrt '\n + 'standardGeneric substitute sum switch tan tanh tanpi tracemem '\n + 'trigamma trunc unclass untracemem UseMethod xtfrm',\n },\n\n contains: [\n // Roxygen comments\n hljs.COMMENT(\n /#'/,\n /$/,\n { contains: [\n {\n // Handle `@examples` separately to cause all subsequent code\n // until the next `@`-tag on its own line to be kept as-is,\n // preventing highlighting. This code is example R code, so nested\n // doctags shouldn’t be treated as such. See\n // `test/markup/r/roxygen.txt` for an example.\n scope: 'doctag',\n match: /@examples/,\n starts: {\n end: regex.lookahead(regex.either(\n // end if another doc comment\n /\\n^#'\\s*(?=@[a-zA-Z]+)/,\n // or a line with no comment\n /\\n^(?!#')/\n )),\n endsParent: true\n }\n },\n {\n // Handle `@param` to highlight the parameter name following\n // after.\n scope: 'doctag',\n begin: '@param',\n end: /$/,\n contains: [\n {\n scope: 'variable',\n variants: [\n { match: IDENT_RE },\n { match: /`(?:\\\\.|[^`\\\\])+`/ }\n ],\n endsParent: true\n }\n ]\n },\n {\n scope: 'doctag',\n match: /@[a-zA-Z]+/\n },\n {\n scope: 'keyword',\n match: /\\\\[a-zA-Z]+/\n }\n ] }\n ),\n\n hljs.HASH_COMMENT_MODE,\n\n {\n scope: 'string',\n contains: [ hljs.BACKSLASH_ESCAPE ],\n variants: [\n hljs.END_SAME_AS_BEGIN({\n begin: /[rR]\"(-*)\\(/,\n end: /\\)(-*)\"/\n }),\n hljs.END_SAME_AS_BEGIN({\n begin: /[rR]\"(-*)\\{/,\n end: /\\}(-*)\"/\n }),\n hljs.END_SAME_AS_BEGIN({\n begin: /[rR]\"(-*)\\[/,\n end: /\\](-*)\"/\n }),\n hljs.END_SAME_AS_BEGIN({\n begin: /[rR]'(-*)\\(/,\n end: /\\)(-*)'/\n }),\n hljs.END_SAME_AS_BEGIN({\n begin: /[rR]'(-*)\\{/,\n end: /\\}(-*)'/\n }),\n hljs.END_SAME_AS_BEGIN({\n begin: /[rR]'(-*)\\[/,\n end: /\\](-*)'/\n }),\n {\n begin: '\"',\n end: '\"',\n relevance: 0\n },\n {\n begin: \"'\",\n end: \"'\",\n relevance: 0\n }\n ],\n },\n\n // Matching numbers immediately following punctuation and operators is\n // tricky since we need to look at the character ahead of a number to\n // ensure the number is not part of an identifier, and we cannot use\n // negative look-behind assertions. So instead we explicitly handle all\n // possible combinations of (operator|punctuation), number.\n // TODO: replace with negative look-behind when available\n // { begin: /(?{eval("/*\nLanguage: MoonScript\nAuthor: Billy Quith \nDescription: MoonScript is a programming language that transcompiles to Lua.\nOrigin: coffeescript.js\nWebsite: http://moonscript.org/\nCategory: scripting\n*/\n\nfunction moonscript(hljs) {\n const KEYWORDS = {\n keyword:\n // Moonscript keywords\n 'if then not for in while do return else elseif break continue switch and or '\n + 'unless when class extends super local import export from using',\n literal:\n 'true false nil',\n built_in:\n '_G _VERSION assert collectgarbage dofile error getfenv getmetatable ipairs load '\n + 'loadfile loadstring module next pairs pcall print rawequal rawget rawset require '\n + 'select setfenv setmetatable tonumber tostring type unpack xpcall coroutine debug '\n + 'io math os package string table'\n };\n const JS_IDENT_RE = '[A-Za-z$_][0-9A-Za-z$_]*';\n const SUBST = {\n className: 'subst',\n begin: /#\\{/,\n end: /\\}/,\n keywords: KEYWORDS\n };\n const EXPRESSIONS = [\n hljs.inherit(hljs.C_NUMBER_MODE,\n { starts: {\n end: '(\\\\s*/)?',\n relevance: 0\n } }), // a number tries to eat the following slash to prevent treating it as a regexp\n {\n className: 'string',\n variants: [\n {\n begin: /'/,\n end: /'/,\n contains: [ hljs.BACKSLASH_ESCAPE ]\n },\n {\n begin: /\"/,\n end: /\"/,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n SUBST\n ]\n }\n ]\n },\n {\n className: 'built_in',\n begin: '@__' + hljs.IDENT_RE\n },\n { begin: '@' + hljs.IDENT_RE // relevance booster on par with CoffeeScript\n },\n { begin: hljs.IDENT_RE + '\\\\\\\\' + hljs.IDENT_RE // inst\\method\n }\n ];\n SUBST.contains = EXPRESSIONS;\n\n const TITLE = hljs.inherit(hljs.TITLE_MODE, { begin: JS_IDENT_RE });\n const POSSIBLE_PARAMS_RE = '(\\\\(.*\\\\)\\\\s*)?\\\\B[-=]>';\n const PARAMS = {\n className: 'params',\n begin: '\\\\([^\\\\(]',\n returnBegin: true,\n /* We need another contained nameless mode to not have every nested\n pair of parens to be called \"params\" */\n contains: [\n {\n begin: /\\(/,\n end: /\\)/,\n keywords: KEYWORDS,\n contains: [ 'self' ].concat(EXPRESSIONS)\n }\n ]\n };\n\n return {\n name: 'MoonScript',\n aliases: [ 'moon' ],\n keywords: KEYWORDS,\n illegal: /\\/\\*/,\n contains: EXPRESSIONS.concat([\n hljs.COMMENT('--', '$'),\n {\n className: 'function', // function: -> =>\n begin: '^\\\\s*' + JS_IDENT_RE + '\\\\s*=\\\\s*' + POSSIBLE_PARAMS_RE,\n end: '[-=]>',\n returnBegin: true,\n contains: [\n TITLE,\n PARAMS\n ]\n },\n {\n begin: /[\\(,:=]\\s*/, // anonymous function start\n relevance: 0,\n contains: [\n {\n className: 'function',\n begin: POSSIBLE_PARAMS_RE,\n end: '[-=]>',\n returnBegin: true,\n contains: [ PARAMS ]\n }\n ]\n },\n {\n className: 'class',\n beginKeywords: 'class',\n end: '$',\n illegal: /[:=\"\\[\\]]/,\n contains: [\n {\n beginKeywords: 'extends',\n endsWithParent: true,\n illegal: /[:=\"\\[\\]]/,\n contains: [ TITLE ]\n },\n TITLE\n ]\n },\n {\n className: 'name', // table\n begin: JS_IDENT_RE + ':',\n end: ':',\n returnBegin: true,\n returnEnd: true,\n relevance: 0\n }\n ])\n };\n}\n\nmodule.exports = moonscript;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTE3MS5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2YsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxNQUFNO0FBQ04sS0FBSztBQUNMLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUEsZ0RBQWdELG9CQUFvQjtBQUNwRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9vYnNpZGlhbi1taW5kbWFwLW5leHRnZW4vLi9ub2RlX21vZHVsZXMvLnBucG0vaGlnaGxpZ2h0LmpzQDExLjExLjEvbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL21vb25zY3JpcHQuanM/ZWViOCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuTGFuZ3VhZ2U6IE1vb25TY3JpcHRcbkF1dGhvcjogQmlsbHkgUXVpdGggPGNoaW5iaWxseWJpbGJvQGdtYWlsLmNvbT5cbkRlc2NyaXB0aW9uOiBNb29uU2NyaXB0IGlzIGEgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UgdGhhdCB0cmFuc2NvbXBpbGVzIHRvIEx1YS5cbk9yaWdpbjogY29mZmVlc2NyaXB0LmpzXG5XZWJzaXRlOiBodHRwOi8vbW9vbnNjcmlwdC5vcmcvXG5DYXRlZ29yeTogc2NyaXB0aW5nXG4qL1xuXG5mdW5jdGlvbiBtb29uc2NyaXB0KGhsanMpIHtcbiAgY29uc3QgS0VZV09SRFMgPSB7XG4gICAga2V5d29yZDpcbiAgICAgIC8vIE1vb25zY3JpcHQga2V5d29yZHNcbiAgICAgICdpZiB0aGVuIG5vdCBmb3IgaW4gd2hpbGUgZG8gcmV0dXJuIGVsc2UgZWxzZWlmIGJyZWFrIGNvbnRpbnVlIHN3aXRjaCBhbmQgb3IgJ1xuICAgICAgKyAndW5sZXNzIHdoZW4gY2xhc3MgZXh0ZW5kcyBzdXBlciBsb2NhbCBpbXBvcnQgZXhwb3J0IGZyb20gdXNpbmcnLFxuICAgIGxpdGVyYWw6XG4gICAgICAndHJ1ZSBmYWxzZSBuaWwnLFxuICAgIGJ1aWx0X2luOlxuICAgICAgJ19HIF9WRVJTSU9OIGFzc2VydCBjb2xsZWN0Z2FyYmFnZSBkb2ZpbGUgZXJyb3IgZ2V0ZmVudiBnZXRtZXRhdGFibGUgaXBhaXJzIGxvYWQgJ1xuICAgICAgKyAnbG9hZGZpbGUgbG9hZHN0cmluZyBtb2R1bGUgbmV4dCBwYWlycyBwY2FsbCBwcmludCByYXdlcXVhbCByYXdnZXQgcmF3c2V0IHJlcXVpcmUgJ1xuICAgICAgKyAnc2VsZWN0IHNldGZlbnYgc2V0bWV0YXRhYmxlIHRvbnVtYmVyIHRvc3RyaW5nIHR5cGUgdW5wYWNrIHhwY2FsbCBjb3JvdXRpbmUgZGVidWcgJ1xuICAgICAgKyAnaW8gbWF0aCBvcyBwYWNrYWdlIHN0cmluZyB0YWJsZSdcbiAgfTtcbiAgY29uc3QgSlNfSURFTlRfUkUgPSAnW0EtWmEteiRfXVswLTlBLVphLXokX10qJztcbiAgY29uc3QgU1VCU1QgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3Vic3QnLFxuICAgIGJlZ2luOiAvI1xcey8sXG4gICAgZW5kOiAvXFx9LyxcbiAgICBrZXl3b3JkczogS0VZV09SRFNcbiAgfTtcbiAgY29uc3QgRVhQUkVTU0lPTlMgPSBbXG4gICAgaGxqcy5pbmhlcml0KGhsanMuQ19OVU1CRVJfTU9ERSxcbiAgICAgIHsgc3RhcnRzOiB7XG4gICAgICAgIGVuZDogJyhcXFxccyovKT8nLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0gfSksIC8vIGEgbnVtYmVyIHRyaWVzIHRvIGVhdCB0aGUgZm9sbG93aW5nIHNsYXNoIHRvIHByZXZlbnQgdHJlYXRpbmcgaXQgYXMgYSByZWdleHBcbiAgICB7XG4gICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGJlZ2luOiAvJy8sXG4gICAgICAgICAgZW5kOiAvJy8sXG4gICAgICAgICAgY29udGFpbnM6IFsgaGxqcy5CQUNLU0xBU0hfRVNDQVBFIF1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGJlZ2luOiAvXCIvLFxuICAgICAgICAgIGVuZDogL1wiLyxcbiAgICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICAgaGxqcy5CQUNLU0xBU0hfRVNDQVBFLFxuICAgICAgICAgICAgU1VCU1RcbiAgICAgICAgICBdXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9LFxuICAgIHtcbiAgICAgIGNsYXNzTmFtZTogJ2J1aWx0X2luJyxcbiAgICAgIGJlZ2luOiAnQF9fJyArIGhsanMuSURFTlRfUkVcbiAgICB9LFxuICAgIHsgYmVnaW46ICdAJyArIGhsanMuSURFTlRfUkUgLy8gcmVsZXZhbmNlIGJvb3N0ZXIgb24gcGFyIHdpdGggQ29mZmVlU2NyaXB0XG4gICAgfSxcbiAgICB7IGJlZ2luOiBobGpzLklERU5UX1JFICsgJ1xcXFxcXFxcJyArIGhsanMuSURFTlRfUkUgLy8gaW5zdFxcbWV0aG9kXG4gICAgfVxuICBdO1xuICBTVUJTVC5jb250YWlucyA9IEVYUFJFU1NJT05TO1xuXG4gIGNvbnN0IFRJVExFID0gaGxqcy5pbmhlcml0KGhsanMuVElUTEVfTU9ERSwgeyBiZWdpbjogSlNfSURFTlRfUkUgfSk7XG4gIGNvbnN0IFBPU1NJQkxFX1BBUkFNU19SRSA9ICcoXFxcXCguKlxcXFwpXFxcXHMqKT9cXFxcQlstPV0+JztcbiAgY29uc3QgUEFSQU1TID0ge1xuICAgIGNsYXNzTmFtZTogJ3BhcmFtcycsXG4gICAgYmVnaW46ICdcXFxcKFteXFxcXChdJyxcbiAgICByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICAvKiBXZSBuZWVkIGFub3RoZXIgY29udGFpbmVkIG5hbWVsZXNzIG1vZGUgdG8gbm90IGhhdmUgZXZlcnkgbmVzdGVkXG4gICAgcGFpciBvZiBwYXJlbnMgdG8gYmUgY2FsbGVkIFwicGFyYW1zXCIgKi9cbiAgICBjb250YWluczogW1xuICAgICAge1xuICAgICAgICBiZWdpbjogL1xcKC8sXG4gICAgICAgIGVuZDogL1xcKS8sXG4gICAgICAgIGtleXdvcmRzOiBLRVlXT1JEUyxcbiAgICAgICAgY29udGFpbnM6IFsgJ3NlbGYnIF0uY29uY2F0KEVYUFJFU1NJT05TKVxuICAgICAgfVxuICAgIF1cbiAgfTtcblxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdNb29uU2NyaXB0JyxcbiAgICBhbGlhc2VzOiBbICdtb29uJyBdLFxuICAgIGtleXdvcmRzOiBLRVlXT1JEUyxcbiAgICBpbGxlZ2FsOiAvXFwvXFwqLyxcbiAgICBjb250YWluczogRVhQUkVTU0lPTlMuY29uY2F0KFtcbiAgICAgIGhsanMuQ09NTUVOVCgnLS0nLCAnJCcpLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdmdW5jdGlvbicsIC8vIGZ1bmN0aW9uOiAtPiA9PlxuICAgICAgICBiZWdpbjogJ15cXFxccyonICsgSlNfSURFTlRfUkUgKyAnXFxcXHMqPVxcXFxzKicgKyBQT1NTSUJMRV9QQVJBTVNfUkUsXG4gICAgICAgIGVuZDogJ1stPV0+JyxcbiAgICAgICAgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgVElUTEUsXG4gICAgICAgICAgUEFSQU1TXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvW1xcKCw6PV1cXHMqLywgLy8gYW5vbnltb3VzIGZ1bmN0aW9uIHN0YXJ0XG4gICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdmdW5jdGlvbicsXG4gICAgICAgICAgICBiZWdpbjogUE9TU0lCTEVfUEFSQU1TX1JFLFxuICAgICAgICAgICAgZW5kOiAnWy09XT4nLFxuICAgICAgICAgICAgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgICAgICAgICBjb250YWluczogWyBQQVJBTVMgXVxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnY2xhc3MnLFxuICAgICAgICBiZWdpbktleXdvcmRzOiAnY2xhc3MnLFxuICAgICAgICBlbmQ6ICckJyxcbiAgICAgICAgaWxsZWdhbDogL1s6PVwiXFxbXFxdXS8sXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW5LZXl3b3JkczogJ2V4dGVuZHMnLFxuICAgICAgICAgICAgZW5kc1dpdGhQYXJlbnQ6IHRydWUsXG4gICAgICAgICAgICBpbGxlZ2FsOiAvWzo9XCJcXFtcXF1dLyxcbiAgICAgICAgICAgIGNvbnRhaW5zOiBbIFRJVExFIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFRJVExFXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ25hbWUnLCAvLyB0YWJsZVxuICAgICAgICBiZWdpbjogSlNfSURFTlRfUkUgKyAnOicsXG4gICAgICAgIGVuZDogJzonLFxuICAgICAgICByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICAgICAgcmV0dXJuRW5kOiB0cnVlLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH1cbiAgICBdKVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1vb25zY3JpcHQ7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///1171\n")},1214:module=>{eval('const IDENT_RE = \'[A-Za-z$_][0-9A-Za-z$_]*\';\nconst KEYWORDS = [\n "as", // for exports\n "in",\n "of",\n "if",\n "for",\n "while",\n "finally",\n "var",\n "new",\n "function",\n "do",\n "return",\n "void",\n "else",\n "break",\n "catch",\n "instanceof",\n "with",\n "throw",\n "case",\n "default",\n "try",\n "switch",\n "continue",\n "typeof",\n "delete",\n "let",\n "yield",\n "const",\n "class",\n // JS handles these with a special rule\n // "get",\n // "set",\n "debugger",\n "async",\n "await",\n "static",\n "import",\n "from",\n "export",\n "extends",\n // It\'s reached stage 3, which is "recommended for implementation":\n "using"\n];\nconst LITERALS = [\n "true",\n "false",\n "null",\n "undefined",\n "NaN",\n "Infinity"\n];\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects\nconst TYPES = [\n // Fundamental objects\n "Object",\n "Function",\n "Boolean",\n "Symbol",\n // numbers and dates\n "Math",\n "Date",\n "Number",\n "BigInt",\n // text\n "String",\n "RegExp",\n // Indexed collections\n "Array",\n "Float32Array",\n "Float64Array",\n "Int8Array",\n "Uint8Array",\n "Uint8ClampedArray",\n "Int16Array",\n "Int32Array",\n "Uint16Array",\n "Uint32Array",\n "BigInt64Array",\n "BigUint64Array",\n // Keyed collections\n "Set",\n "Map",\n "WeakSet",\n "WeakMap",\n // Structured data\n "ArrayBuffer",\n "SharedArrayBuffer",\n "Atomics",\n "DataView",\n "JSON",\n // Control abstraction objects\n "Promise",\n "Generator",\n "GeneratorFunction",\n "AsyncFunction",\n // Reflection\n "Reflect",\n "Proxy",\n // Internationalization\n "Intl",\n // WebAssembly\n "WebAssembly"\n];\n\nconst ERROR_TYPES = [\n "Error",\n "EvalError",\n "InternalError",\n "RangeError",\n "ReferenceError",\n "SyntaxError",\n "TypeError",\n "URIError"\n];\n\nconst BUILT_IN_GLOBALS = [\n "setInterval",\n "setTimeout",\n "clearInterval",\n "clearTimeout",\n\n "require",\n "exports",\n\n "eval",\n "isFinite",\n "isNaN",\n "parseFloat",\n "parseInt",\n "decodeURI",\n "decodeURIComponent",\n "encodeURI",\n "encodeURIComponent",\n "escape",\n "unescape"\n];\n\nconst BUILT_IN_VARIABLES = [\n "arguments",\n "this",\n "super",\n "console",\n "window",\n "document",\n "localStorage",\n "sessionStorage",\n "module",\n "global" // Node.js\n];\n\nconst BUILT_INS = [].concat(\n BUILT_IN_GLOBALS,\n TYPES,\n ERROR_TYPES\n);\n\n/*\nLanguage: JavaScript\nDescription: JavaScript (JS) is a lightweight, interpreted, or just-in-time compiled programming language with first-class functions.\nCategory: common, scripting, web\nWebsite: https://developer.mozilla.org/en-US/docs/Web/JavaScript\n*/\n\n\n/** @type LanguageFn */\nfunction javascript(hljs) {\n const regex = hljs.regex;\n /**\n * Takes a string like " {\n const tag = "\',\n end: \'\'\n };\n // to avoid some special cases inside isTrulyOpeningTag\n const XML_SELF_CLOSING = /<[A-Za-z0-9\\\\._:-]+\\s*\\/>/;\n const XML_TAG = {\n begin: /<[A-Za-z0-9\\\\._:-]+/,\n end: /\\/[A-Za-z0-9\\\\._:-]+>|\\/>/,\n /**\n * @param {RegExpMatchArray} match\n * @param {CallbackResponse} response\n */\n isTrulyOpeningTag: (match, response) => {\n const afterMatchIndex = match[0].length + match.index;\n const nextChar = match.input[afterMatchIndex];\n if (\n // HTML should not include another raw `<` inside a tag\n // nested type?\n // `>`, etc.\n nextChar === "<" ||\n // the , gives away that this is not HTML\n // ``\n nextChar === ","\n ) {\n response.ignoreMatch();\n return;\n }\n\n // ``\n // Quite possibly a tag, lets look for a matching closing tag...\n if (nextChar === ">") {\n // if we cannot find a matching closing tag, then we\n // will ignore it\n if (!hasClosingTag(match, { after: afterMatchIndex })) {\n response.ignoreMatch();\n }\n }\n\n // `` (self-closing)\n // handled by simpleSelfClosing rule\n\n let m;\n const afterMatch = match.input.substring(afterMatchIndex);\n\n // some more template typing stuff\n // (key?: string) => Modify<\n if ((m = afterMatch.match(/^\\s*=/))) {\n response.ignoreMatch();\n return;\n }\n\n // ``\n // technically this could be HTML, but it smells like a type\n // NOTE: This is ugh, but added specifically for https://github.com/highlightjs/highlight.js/issues/3276\n if ((m = afterMatch.match(/^\\s+extends\\s+/))) {\n if (m.index === 0) {\n response.ignoreMatch();\n // eslint-disable-next-line no-useless-return\n return;\n }\n }\n }\n };\n const KEYWORDS$1 = {\n $pattern: IDENT_RE,\n keyword: KEYWORDS,\n literal: LITERALS,\n built_in: BUILT_INS,\n "variable.language": BUILT_IN_VARIABLES\n };\n\n // https://tc39.es/ecma262/#sec-literals-numeric-literals\n const decimalDigits = \'[0-9](_?[0-9])*\';\n const frac = `\\\\.(${decimalDigits})`;\n // DecimalIntegerLiteral, including Annex B NonOctalDecimalIntegerLiteral\n // https://tc39.es/ecma262/#sec-additional-syntax-numeric-literals\n const decimalInteger = `0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*`;\n const NUMBER = {\n className: \'number\',\n variants: [\n // DecimalLiteral\n { begin: `(\\\\b(${decimalInteger})((${frac})|\\\\.)?|(${frac}))` +\n `[eE][+-]?(${decimalDigits})\\\\b` },\n { begin: `\\\\b(${decimalInteger})\\\\b((${frac})\\\\b|\\\\.)?|(${frac})\\\\b` },\n\n // DecimalBigIntegerLiteral\n { begin: `\\\\b(0|[1-9](_?[0-9])*)n\\\\b` },\n\n // NonDecimalIntegerLiteral\n { begin: "\\\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*n?\\\\b" },\n { begin: "\\\\b0[bB][0-1](_?[0-1])*n?\\\\b" },\n { begin: "\\\\b0[oO][0-7](_?[0-7])*n?\\\\b" },\n\n // LegacyOctalIntegerLiteral (does not include underscore separators)\n // https://tc39.es/ecma262/#sec-additional-syntax-numeric-literals\n { begin: "\\\\b0[0-7]+n?\\\\b" },\n ],\n relevance: 0\n };\n\n const SUBST = {\n className: \'subst\',\n begin: \'\\\\$\\\\{\',\n end: \'\\\\}\',\n keywords: KEYWORDS$1,\n contains: [] // defined later\n };\n const HTML_TEMPLATE = {\n begin: \'\\.?html`\',\n end: \'\',\n starts: {\n end: \'`\',\n returnEnd: false,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n SUBST\n ],\n subLanguage: \'xml\'\n }\n };\n const CSS_TEMPLATE = {\n begin: \'\\.?css`\',\n end: \'\',\n starts: {\n end: \'`\',\n returnEnd: false,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n SUBST\n ],\n subLanguage: \'css\'\n }\n };\n const GRAPHQL_TEMPLATE = {\n begin: \'\\.?gql`\',\n end: \'\',\n starts: {\n end: \'`\',\n returnEnd: false,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n SUBST\n ],\n subLanguage: \'graphql\'\n }\n };\n const TEMPLATE_STRING = {\n className: \'string\',\n begin: \'`\',\n end: \'`\',\n contains: [\n hljs.BACKSLASH_ESCAPE,\n SUBST\n ]\n };\n const JSDOC_COMMENT = hljs.COMMENT(\n /\\/\\*\\*(?!\\/)/,\n \'\\\\*/\',\n {\n relevance: 0,\n contains: [\n {\n begin: \'(?=@[A-Za-z]+)\',\n relevance: 0,\n contains: [\n {\n className: \'doctag\',\n begin: \'@[A-Za-z]+\'\n },\n {\n className: \'type\',\n begin: \'\\\\{\',\n end: \'\\\\}\',\n excludeEnd: true,\n excludeBegin: true,\n relevance: 0\n },\n {\n className: \'variable\',\n begin: IDENT_RE$1 + \'(?=\\\\s*(-)|$)\',\n endsParent: true,\n relevance: 0\n },\n // eat spaces (not newlines) so we can find\n // types or variables\n {\n begin: /(?=[^\\n])\\s/,\n relevance: 0\n }\n ]\n }\n ]\n }\n );\n const COMMENT = {\n className: "comment",\n variants: [\n JSDOC_COMMENT,\n hljs.C_BLOCK_COMMENT_MODE,\n hljs.C_LINE_COMMENT_MODE\n ]\n };\n const SUBST_INTERNALS = [\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE,\n HTML_TEMPLATE,\n CSS_TEMPLATE,\n GRAPHQL_TEMPLATE,\n TEMPLATE_STRING,\n // Skip numbers when they are part of a variable name\n { match: /\\$\\d+/ },\n NUMBER,\n // This is intentional:\n // See https://github.com/highlightjs/highlight.js/issues/3288\n // hljs.REGEXP_MODE\n ];\n SUBST.contains = SUBST_INTERNALS\n .concat({\n // we need to pair up {} inside our subst to prevent\n // it from ending too early by matching another }\n begin: /\\{/,\n end: /\\}/,\n keywords: KEYWORDS$1,\n contains: [\n "self"\n ].concat(SUBST_INTERNALS)\n });\n const SUBST_AND_COMMENTS = [].concat(COMMENT, SUBST.contains);\n const PARAMS_CONTAINS = SUBST_AND_COMMENTS.concat([\n // eat recursive parens in sub expressions\n {\n begin: /(\\s*)\\(/,\n end: /\\)/,\n keywords: KEYWORDS$1,\n contains: ["self"].concat(SUBST_AND_COMMENTS)\n }\n ]);\n const PARAMS = {\n className: \'params\',\n // convert this to negative lookbehind in v12\n begin: /(\\s*)\\(/, // to match the parms with\n end: /\\)/,\n excludeBegin: true,\n excludeEnd: true,\n keywords: KEYWORDS$1,\n contains: PARAMS_CONTAINS\n };\n\n // ES6 classes\n const CLASS_OR_EXTENDS = {\n variants: [\n // class Car extends vehicle\n {\n match: [\n /class/,\n /\\s+/,\n IDENT_RE$1,\n /\\s+/,\n /extends/,\n /\\s+/,\n regex.concat(IDENT_RE$1, "(", regex.concat(/\\./, IDENT_RE$1), ")*")\n ],\n scope: {\n 1: "keyword",\n 3: "title.class",\n 5: "keyword",\n 7: "title.class.inherited"\n }\n },\n // class Car\n {\n match: [\n /class/,\n /\\s+/,\n IDENT_RE$1\n ],\n scope: {\n 1: "keyword",\n 3: "title.class"\n }\n },\n\n ]\n };\n\n const CLASS_REFERENCE = {\n relevance: 0,\n match:\n regex.either(\n // Hard coded exceptions\n /\\bJSON/,\n // Float32Array, OutT\n /\\b[A-Z][a-z]+([A-Z][a-z]*|\\d)*/,\n // CSSFactory, CSSFactoryT\n /\\b[A-Z]{2,}([A-Z][a-z]+|\\d)+([A-Z][a-z]*)*/,\n // FPs, FPsT\n /\\b[A-Z]{2,}[a-z]+([A-Z][a-z]+|\\d)*([A-Z][a-z]*)*/,\n // P\n // single letters are not highlighted\n // BLAH\n // this will be flagged as a UPPER_CASE_CONSTANT instead\n ),\n className: "title.class",\n keywords: {\n _: [\n // se we still get relevance credit for JS library classes\n ...TYPES,\n ...ERROR_TYPES\n ]\n }\n };\n\n const USE_STRICT = {\n label: "use_strict",\n className: \'meta\',\n relevance: 10,\n begin: /^\\s*[\'"]use (strict|asm)[\'"]/\n };\n\n const FUNCTION_DEFINITION = {\n variants: [\n {\n match: [\n /function/,\n /\\s+/,\n IDENT_RE$1,\n /(?=\\s*\\()/\n ]\n },\n // anonymous function\n {\n match: [\n /function/,\n /\\s*(?=\\()/\n ]\n }\n ],\n className: {\n 1: "keyword",\n 3: "title.function"\n },\n label: "func.def",\n contains: [ PARAMS ],\n illegal: /%/\n };\n\n const UPPER_CASE_CONSTANT = {\n relevance: 0,\n match: /\\b[A-Z][A-Z_0-9]+\\b/,\n className: "variable.constant"\n };\n\n function noneOf(list) {\n return regex.concat("(?!", list.join("|"), ")");\n }\n\n const FUNCTION_CALL = {\n match: regex.concat(\n /\\b/,\n noneOf([\n ...BUILT_IN_GLOBALS,\n "super",\n "import"\n ].map(x => `${x}\\\\s*\\\\(`)),\n IDENT_RE$1, regex.lookahead(/\\s*\\(/)),\n className: "title.function",\n relevance: 0\n };\n\n const PROPERTY_ACCESS = {\n begin: regex.concat(/\\./, regex.lookahead(\n regex.concat(IDENT_RE$1, /(?![0-9A-Za-z$_(])/)\n )),\n end: IDENT_RE$1,\n excludeBegin: true,\n keywords: "prototype",\n className: "property",\n relevance: 0\n };\n\n const GETTER_OR_SETTER = {\n match: [\n /get|set/,\n /\\s+/,\n IDENT_RE$1,\n /(?=\\()/\n ],\n className: {\n 1: "keyword",\n 3: "title.function"\n },\n contains: [\n { // eat to avoid empty params\n begin: /\\(\\)/\n },\n PARAMS\n ]\n };\n\n const FUNC_LEAD_IN_RE = \'(\\\\(\' +\n \'[^()]*(\\\\(\' +\n \'[^()]*(\\\\(\' +\n \'[^()]*\' +\n \'\\\\)[^()]*)*\' +\n \'\\\\)[^()]*)*\' +\n \'\\\\)|\' + hljs.UNDERSCORE_IDENT_RE + \')\\\\s*=>\';\n\n const FUNCTION_VARIABLE = {\n match: [\n /const|var|let/, /\\s+/,\n IDENT_RE$1, /\\s*/,\n /=\\s*/,\n /(async\\s*)?/, // async is optional\n regex.lookahead(FUNC_LEAD_IN_RE)\n ],\n keywords: "async",\n className: {\n 1: "keyword",\n 3: "title.function"\n },\n contains: [\n PARAMS\n ]\n };\n\n return {\n name: \'JavaScript\',\n aliases: [\'js\', \'jsx\', \'mjs\', \'cjs\'],\n keywords: KEYWORDS$1,\n // this will be extended by TypeScript\n exports: { PARAMS_CONTAINS, CLASS_REFERENCE },\n illegal: /#(?![$_A-z])/,\n contains: [\n hljs.SHEBANG({\n label: "shebang",\n binary: "node",\n relevance: 5\n }),\n USE_STRICT,\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE,\n HTML_TEMPLATE,\n CSS_TEMPLATE,\n GRAPHQL_TEMPLATE,\n TEMPLATE_STRING,\n COMMENT,\n // Skip numbers when they are part of a variable name\n { match: /\\$\\d+/ },\n NUMBER,\n CLASS_REFERENCE,\n {\n scope: \'attr\',\n match: IDENT_RE$1 + regex.lookahead(\':\'),\n relevance: 0\n },\n FUNCTION_VARIABLE,\n { // "value" container\n begin: \'(\' + hljs.RE_STARTERS_RE + \'|\\\\b(case|return|throw)\\\\b)\\\\s*\',\n keywords: \'return throw case\',\n relevance: 0,\n contains: [\n COMMENT,\n hljs.REGEXP_MODE,\n {\n className: \'function\',\n // we have to count the parens to make sure we actually have the\n // correct bounding ( ) before the =>. There could be any number of\n // sub-expressions inside also surrounded by parens.\n begin: FUNC_LEAD_IN_RE,\n returnBegin: true,\n end: \'\\\\s*=>\',\n contains: [\n {\n className: \'params\',\n variants: [\n {\n begin: hljs.UNDERSCORE_IDENT_RE,\n relevance: 0\n },\n {\n className: null,\n begin: /\\(\\s*\\)/,\n skip: true\n },\n {\n begin: /(\\s*)\\(/,\n end: /\\)/,\n excludeBegin: true,\n excludeEnd: true,\n keywords: KEYWORDS$1,\n contains: PARAMS_CONTAINS\n }\n ]\n }\n ]\n },\n { // could be a comma delimited list of params to a function call\n begin: /,/,\n relevance: 0\n },\n {\n match: /\\s+/,\n relevance: 0\n },\n { // JSX\n variants: [\n { begin: FRAGMENT.begin, end: FRAGMENT.end },\n { match: XML_SELF_CLOSING },\n {\n begin: XML_TAG.begin,\n // we carefully check the opening tag to see if it truly\n // is a tag and not a false positive\n \'on:begin\': XML_TAG.isTrulyOpeningTag,\n end: XML_TAG.end\n }\n ],\n subLanguage: \'xml\',\n contains: [\n {\n begin: XML_TAG.begin,\n end: XML_TAG.end,\n skip: true,\n contains: [\'self\']\n }\n ]\n }\n ],\n },\n FUNCTION_DEFINITION,\n {\n // prevent this from getting swallowed up by function\n // since they appear "function like"\n beginKeywords: "while if switch catch for"\n },\n {\n // we have to count the parens to make sure we actually have the correct\n // bounding ( ). There could be any number of sub-expressions inside\n // also surrounded by parens.\n begin: \'\\\\b(?!function)\' + hljs.UNDERSCORE_IDENT_RE +\n \'\\\\(\' + // first parens\n \'[^()]*(\\\\(\' +\n \'[^()]*(\\\\(\' +\n \'[^()]*\' +\n \'\\\\)[^()]*)*\' +\n \'\\\\)[^()]*)*\' +\n \'\\\\)\\\\s*\\\\{\', // end parens\n returnBegin:true,\n label: "func.def",\n contains: [\n PARAMS,\n hljs.inherit(hljs.TITLE_MODE, { begin: IDENT_RE$1, className: "title.function" })\n ]\n },\n // catch ... so it won\'t trigger the property rule below\n {\n match: /\\.\\.\\./,\n relevance: 0\n },\n PROPERTY_ACCESS,\n // hack: prevents detection of keywords in some circumstances\n // .keyword()\n // $keyword = x\n {\n match: \'\\\\$\' + IDENT_RE$1,\n relevance: 0\n },\n {\n match: [ /\\bconstructor(?=\\s*\\()/ ],\n className: { 1: "title.function" },\n contains: [ PARAMS ]\n },\n FUNCTION_CALL,\n UPPER_CASE_CONSTANT,\n CLASS_OR_EXTENDS,\n GETTER_OR_SETTER,\n {\n match: /\\$[(.]/ // relevance booster for a pattern common to JS libs: `$(something)` and `$.something`\n }\n ]\n };\n}\n\n/*\nLanguage: TypeScript\nAuthor: Panu Horsmalahti \nContributors: Ike Ku \nDescription: TypeScript is a strict superset of JavaScript\nWebsite: https://www.typescriptlang.org\nCategory: common, scripting\n*/\n\n\n/** @type LanguageFn */\nfunction typescript(hljs) {\n const regex = hljs.regex;\n const tsLanguage = javascript(hljs);\n\n const IDENT_RE$1 = IDENT_RE;\n const TYPES = [\n "any",\n "void",\n "number",\n "boolean",\n "string",\n "object",\n "never",\n "symbol",\n "bigint",\n "unknown"\n ];\n const NAMESPACE = {\n begin: [\n /namespace/,\n /\\s+/,\n hljs.IDENT_RE\n ],\n beginScope: {\n 1: "keyword",\n 3: "title.class"\n }\n };\n const INTERFACE = {\n beginKeywords: \'interface\',\n end: /\\{/,\n excludeEnd: true,\n keywords: {\n keyword: \'interface extends\',\n built_in: TYPES\n },\n contains: [ tsLanguage.exports.CLASS_REFERENCE ]\n };\n const USE_STRICT = {\n className: \'meta\',\n relevance: 10,\n begin: /^\\s*[\'"]use strict[\'"]/\n };\n const TS_SPECIFIC_KEYWORDS = [\n "type",\n // "namespace",\n "interface",\n "public",\n "private",\n "protected",\n "implements",\n "declare",\n "abstract",\n "readonly",\n "enum",\n "override",\n "satisfies"\n ];\n /*\n namespace is a TS keyword but it\'s fine to use it as a variable name too.\n const message = \'foo\';\n const namespace = \'bar\';\n */\n const KEYWORDS$1 = {\n $pattern: IDENT_RE,\n keyword: KEYWORDS.concat(TS_SPECIFIC_KEYWORDS),\n literal: LITERALS,\n built_in: BUILT_INS.concat(TYPES),\n "variable.language": BUILT_IN_VARIABLES\n };\n\n const DECORATOR = {\n className: \'meta\',\n begin: \'@\' + IDENT_RE$1,\n };\n\n const swapMode = (mode, label, replacement) => {\n const indx = mode.contains.findIndex(m => m.label === label);\n if (indx === -1) { throw new Error("can not find mode to replace"); }\n\n mode.contains.splice(indx, 1, replacement);\n };\n\n\n // this should update anywhere keywords is used since\n // it will be the same actual JS object\n Object.assign(tsLanguage.keywords, KEYWORDS$1);\n\n tsLanguage.exports.PARAMS_CONTAINS.push(DECORATOR);\n\n // highlight the function params\n const ATTRIBUTE_HIGHLIGHT = tsLanguage.contains.find(c => c.scope === "attr");\n\n // take default attr rule and extend it to support optionals\n const OPTIONAL_KEY_OR_ARGUMENT = Object.assign({},\n ATTRIBUTE_HIGHLIGHT,\n { match: regex.concat(IDENT_RE$1, regex.lookahead(/\\s*\\?:/)) }\n );\n tsLanguage.exports.PARAMS_CONTAINS.push([\n tsLanguage.exports.CLASS_REFERENCE, // class reference for highlighting the params types\n ATTRIBUTE_HIGHLIGHT, // highlight the params key\n OPTIONAL_KEY_OR_ARGUMENT, // Added for optional property assignment highlighting\n ]);\n\n // Add the optional property assignment highlighting for objects or classes\n tsLanguage.contains = tsLanguage.contains.concat([\n DECORATOR,\n NAMESPACE,\n INTERFACE,\n OPTIONAL_KEY_OR_ARGUMENT, // Added for optional property assignment highlighting\n ]);\n\n // TS gets a simpler shebang rule than JS\n swapMode(tsLanguage, "shebang", hljs.SHEBANG());\n // JS use strict rule purposely excludes `asm` which makes no sense\n swapMode(tsLanguage, "use_strict", USE_STRICT);\n\n const functionDeclaration = tsLanguage.contains.find(m => m.label === "func.def");\n functionDeclaration.relevance = 0; // () => {} is more typical in TypeScript\n\n Object.assign(tsLanguage, {\n name: \'TypeScript\',\n aliases: [\n \'ts\',\n \'tsx\',\n \'mts\',\n \'cts\'\n ]\n });\n\n return tsLanguage;\n}\n\nmodule.exports = typescript;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTIxNC5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxrQkFBa0I7QUFDL0IsY0FBYyxlQUFlO0FBQzdCO0FBQ0Esa0NBQWtDLE9BQU87QUFDekM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsa0JBQWtCO0FBQ2pDLGVBQWUsa0JBQWtCO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0Msd0JBQXdCO0FBQzVEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxzQkFBc0IsY0FBYztBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsZUFBZSxlQUFlLEtBQUssS0FBSyxXQUFXLEtBQUs7QUFDaEUscUJBQXFCLGNBQWMsT0FBTztBQUMxQyxRQUFRLGNBQWMsZUFBZSxRQUFRLEtBQUssY0FBYyxLQUFLLE9BQU87O0FBRTVFO0FBQ0EsUUFBUSxxQ0FBcUM7O0FBRTdDO0FBQ0EsUUFBUSxtREFBbUQ7QUFDM0QsUUFBUSx1Q0FBdUM7QUFDL0MsUUFBUSx1Q0FBdUM7O0FBRS9DO0FBQ0E7QUFDQSxRQUFRLDBCQUEwQjtBQUNsQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQixhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLHlCQUF5QjtBQUN6Qix1QkFBdUI7QUFDdkI7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTSxnQkFBZ0I7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQkFBK0I7QUFDL0I7QUFDQSxnQkFBZ0I7QUFDaEIsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTzs7QUFFUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsR0FBRztBQUNsQjtBQUNBLGVBQWUsR0FBRztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixFQUFFO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsUUFBUTtBQUNSO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsa0NBQWtDO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLGdCQUFnQjtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1gsWUFBWTtBQUNaO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYLFlBQVk7QUFDWjtBQUNBLGdCQUFnQiwwQ0FBMEM7QUFDMUQsZ0JBQWdCLHlCQUF5QjtBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQ0FBMEMsZ0RBQWdEO0FBQzFGO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxxQkFBcUIscUJBQXFCO0FBQzFDO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHVCQUF1Qjs7QUFFdkI7QUFDQTs7O0FBR0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxtREFBbUQ7QUFDbkQ7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EscUNBQXFDLFlBQVk7O0FBRWpEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9vYnNpZGlhbi1taW5kbWFwLW5leHRnZW4vLi9ub2RlX21vZHVsZXMvLnBucG0vaGlnaGxpZ2h0LmpzQDExLjExLjEvbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3R5cGVzY3JpcHQuanM/MGFlMCJdLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBJREVOVF9SRSA9ICdbQS1aYS16JF9dWzAtOUEtWmEteiRfXSonO1xuY29uc3QgS0VZV09SRFMgPSBbXG4gIFwiYXNcIiwgLy8gZm9yIGV4cG9ydHNcbiAgXCJpblwiLFxuICBcIm9mXCIsXG4gIFwiaWZcIixcbiAgXCJmb3JcIixcbiAgXCJ3aGlsZVwiLFxuICBcImZpbmFsbHlcIixcbiAgXCJ2YXJcIixcbiAgXCJuZXdcIixcbiAgXCJmdW5jdGlvblwiLFxuICBcImRvXCIsXG4gIFwicmV0dXJuXCIsXG4gIFwidm9pZFwiLFxuICBcImVsc2VcIixcbiAgXCJicmVha1wiLFxuICBcImNhdGNoXCIsXG4gIFwiaW5zdGFuY2VvZlwiLFxuICBcIndpdGhcIixcbiAgXCJ0aHJvd1wiLFxuICBcImNhc2VcIixcbiAgXCJkZWZhdWx0XCIsXG4gIFwidHJ5XCIsXG4gIFwic3dpdGNoXCIsXG4gIFwiY29udGludWVcIixcbiAgXCJ0eXBlb2ZcIixcbiAgXCJkZWxldGVcIixcbiAgXCJsZXRcIixcbiAgXCJ5aWVsZFwiLFxuICBcImNvbnN0XCIsXG4gIFwiY2xhc3NcIixcbiAgLy8gSlMgaGFuZGxlcyB0aGVzZSB3aXRoIGEgc3BlY2lhbCBydWxlXG4gIC8vIFwiZ2V0XCIsXG4gIC8vIFwic2V0XCIsXG4gIFwiZGVidWdnZXJcIixcbiAgXCJhc3luY1wiLFxuICBcImF3YWl0XCIsXG4gIFwic3RhdGljXCIsXG4gIFwiaW1wb3J0XCIsXG4gIFwiZnJvbVwiLFxuICBcImV4cG9ydFwiLFxuICBcImV4dGVuZHNcIixcbiAgLy8gSXQncyByZWFjaGVkIHN0YWdlIDMsIHdoaWNoIGlzIFwicmVjb21tZW5kZWQgZm9yIGltcGxlbWVudGF0aW9uXCI6XG4gIFwidXNpbmdcIlxuXTtcbmNvbnN0IExJVEVSQUxTID0gW1xuICBcInRydWVcIixcbiAgXCJmYWxzZVwiLFxuICBcIm51bGxcIixcbiAgXCJ1bmRlZmluZWRcIixcbiAgXCJOYU5cIixcbiAgXCJJbmZpbml0eVwiXG5dO1xuXG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0c1xuY29uc3QgVFlQRVMgPSBbXG4gIC8vIEZ1bmRhbWVudGFsIG9iamVjdHNcbiAgXCJPYmplY3RcIixcbiAgXCJGdW5jdGlvblwiLFxuICBcIkJvb2xlYW5cIixcbiAgXCJTeW1ib2xcIixcbiAgLy8gbnVtYmVycyBhbmQgZGF0ZXNcbiAgXCJNYXRoXCIsXG4gIFwiRGF0ZVwiLFxuICBcIk51bWJlclwiLFxuICBcIkJpZ0ludFwiLFxuICAvLyB0ZXh0XG4gIFwiU3RyaW5nXCIsXG4gIFwiUmVnRXhwXCIsXG4gIC8vIEluZGV4ZWQgY29sbGVjdGlvbnNcbiAgXCJBcnJheVwiLFxuICBcIkZsb2F0MzJBcnJheVwiLFxuICBcIkZsb2F0NjRBcnJheVwiLFxuICBcIkludDhBcnJheVwiLFxuICBcIlVpbnQ4QXJyYXlcIixcbiAgXCJVaW50OENsYW1wZWRBcnJheVwiLFxuICBcIkludDE2QXJyYXlcIixcbiAgXCJJbnQzMkFycmF5XCIsXG4gIFwiVWludDE2QXJyYXlcIixcbiAgXCJVaW50MzJBcnJheVwiLFxuICBcIkJpZ0ludDY0QXJyYXlcIixcbiAgXCJCaWdVaW50NjRBcnJheVwiLFxuICAvLyBLZXllZCBjb2xsZWN0aW9uc1xuICBcIlNldFwiLFxuICBcIk1hcFwiLFxuICBcIldlYWtTZXRcIixcbiAgXCJXZWFrTWFwXCIsXG4gIC8vIFN0cnVjdHVyZWQgZGF0YVxuICBcIkFycmF5QnVmZmVyXCIsXG4gIFwiU2hhcmVkQXJyYXlCdWZmZXJcIixcbiAgXCJBdG9taWNzXCIsXG4gIFwiRGF0YVZpZXdcIixcbiAgXCJKU09OXCIsXG4gIC8vIENvbnRyb2wgYWJzdHJhY3Rpb24gb2JqZWN0c1xuICBcIlByb21pc2VcIixcbiAgXCJHZW5lcmF0b3JcIixcbiAgXCJHZW5lcmF0b3JGdW5jdGlvblwiLFxuICBcIkFzeW5jRnVuY3Rpb25cIixcbiAgLy8gUmVmbGVjdGlvblxuICBcIlJlZmxlY3RcIixcbiAgXCJQcm94eVwiLFxuICAvLyBJbnRlcm5hdGlvbmFsaXphdGlvblxuICBcIkludGxcIixcbiAgLy8gV2ViQXNzZW1ibHlcbiAgXCJXZWJBc3NlbWJseVwiXG5dO1xuXG5jb25zdCBFUlJPUl9UWVBFUyA9IFtcbiAgXCJFcnJvclwiLFxuICBcIkV2YWxFcnJvclwiLFxuICBcIkludGVybmFsRXJyb3JcIixcbiAgXCJSYW5nZUVycm9yXCIsXG4gIFwiUmVmZXJlbmNlRXJyb3JcIixcbiAgXCJTeW50YXhFcnJvclwiLFxuICBcIlR5cGVFcnJvclwiLFxuICBcIlVSSUVycm9yXCJcbl07XG5cbmNvbnN0IEJVSUxUX0lOX0dMT0JBTFMgPSBbXG4gIFwic2V0SW50ZXJ2YWxcIixcbiAgXCJzZXRUaW1lb3V0XCIsXG4gIFwiY2xlYXJJbnRlcnZhbFwiLFxuICBcImNsZWFyVGltZW91dFwiLFxuXG4gIFwicmVxdWlyZVwiLFxuICBcImV4cG9ydHNcIixcblxuICBcImV2YWxcIixcbiAgXCJpc0Zpbml0ZVwiLFxuICBcImlzTmFOXCIsXG4gIFwicGFyc2VGbG9hdFwiLFxuICBcInBhcnNlSW50XCIsXG4gIFwiZGVjb2RlVVJJXCIsXG4gIFwiZGVjb2RlVVJJQ29tcG9uZW50XCIsXG4gIFwiZW5jb2RlVVJJXCIsXG4gIFwiZW5jb2RlVVJJQ29tcG9uZW50XCIsXG4gIFwiZXNjYXBlXCIsXG4gIFwidW5lc2NhcGVcIlxuXTtcblxuY29uc3QgQlVJTFRfSU5fVkFSSUFCTEVTID0gW1xuICBcImFyZ3VtZW50c1wiLFxuICBcInRoaXNcIixcbiAgXCJzdXBlclwiLFxuICBcImNvbnNvbGVcIixcbiAgXCJ3aW5kb3dcIixcbiAgXCJkb2N1bWVudFwiLFxuICBcImxvY2FsU3RvcmFnZVwiLFxuICBcInNlc3Npb25TdG9yYWdlXCIsXG4gIFwibW9kdWxlXCIsXG4gIFwiZ2xvYmFsXCIgLy8gTm9kZS5qc1xuXTtcblxuY29uc3QgQlVJTFRfSU5TID0gW10uY29uY2F0KFxuICBCVUlMVF9JTl9HTE9CQUxTLFxuICBUWVBFUyxcbiAgRVJST1JfVFlQRVNcbik7XG5cbi8qXG5MYW5ndWFnZTogSmF2YVNjcmlwdFxuRGVzY3JpcHRpb246IEphdmFTY3JpcHQgKEpTKSBpcyBhIGxpZ2h0d2VpZ2h0LCBpbnRlcnByZXRlZCwgb3IganVzdC1pbi10aW1lIGNvbXBpbGVkIHByb2dyYW1taW5nIGxhbmd1YWdlIHdpdGggZmlyc3QtY2xhc3MgZnVuY3Rpb25zLlxuQ2F0ZWdvcnk6IGNvbW1vbiwgc2NyaXB0aW5nLCB3ZWJcbldlYnNpdGU6IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHRcbiovXG5cblxuLyoqIEB0eXBlIExhbmd1YWdlRm4gKi9cbmZ1bmN0aW9uIGphdmFzY3JpcHQoaGxqcykge1xuICBjb25zdCByZWdleCA9IGhsanMucmVnZXg7XG4gIC8qKlxuICAgKiBUYWtlcyBhIHN0cmluZyBsaWtlIFwiPEJvb2dlclwiIGFuZCBjaGVja3MgdG8gc2VlXG4gICAqIGlmIHdlIGNhbiBmaW5kIGEgbWF0Y2hpbmcgXCI8L0Jvb2dlclwiIGxhdGVyIGluIHRoZVxuICAgKiBjb250ZW50LlxuICAgKiBAcGFyYW0ge1JlZ0V4cE1hdGNoQXJyYXl9IG1hdGNoXG4gICAqIEBwYXJhbSB7e2FmdGVyOm51bWJlcn19IHBhcmFtMVxuICAgKi9cbiAgY29uc3QgaGFzQ2xvc2luZ1RhZyA9IChtYXRjaCwgeyBhZnRlciB9KSA9PiB7XG4gICAgY29uc3QgdGFnID0gXCI8L1wiICsgbWF0Y2hbMF0uc2xpY2UoMSk7XG4gICAgY29uc3QgcG9zID0gbWF0Y2guaW5wdXQuaW5kZXhPZih0YWcsIGFmdGVyKTtcbiAgICByZXR1cm4gcG9zICE9PSAtMTtcbiAgfTtcblxuICBjb25zdCBJREVOVF9SRSQxID0gSURFTlRfUkU7XG4gIGNvbnN0IEZSQUdNRU5UID0ge1xuICAgIGJlZ2luOiAnPD4nLFxuICAgIGVuZDogJzwvPidcbiAgfTtcbiAgLy8gdG8gYXZvaWQgc29tZSBzcGVjaWFsIGNhc2VzIGluc2lkZSBpc1RydWx5T3BlbmluZ1RhZ1xuICBjb25zdCBYTUxfU0VMRl9DTE9TSU5HID0gLzxbQS1aYS16MC05XFxcXC5fOi1dK1xccypcXC8+LztcbiAgY29uc3QgWE1MX1RBRyA9IHtcbiAgICBiZWdpbjogLzxbQS1aYS16MC05XFxcXC5fOi1dKy8sXG4gICAgZW5kOiAvXFwvW0EtWmEtejAtOVxcXFwuXzotXSs+fFxcLz4vLFxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7UmVnRXhwTWF0Y2hBcnJheX0gbWF0Y2hcbiAgICAgKiBAcGFyYW0ge0NhbGxiYWNrUmVzcG9uc2V9IHJlc3BvbnNlXG4gICAgICovXG4gICAgaXNUcnVseU9wZW5pbmdUYWc6IChtYXRjaCwgcmVzcG9uc2UpID0+IHtcbiAgICAgIGNvbnN0IGFmdGVyTWF0Y2hJbmRleCA9IG1hdGNoWzBdLmxlbmd0aCArIG1hdGNoLmluZGV4O1xuICAgICAgY29uc3QgbmV4dENoYXIgPSBtYXRjaC5pbnB1dFthZnRlck1hdGNoSW5kZXhdO1xuICAgICAgaWYgKFxuICAgICAgICAvLyBIVE1MIHNob3VsZCBub3QgaW5jbHVkZSBhbm90aGVyIHJhdyBgPGAgaW5zaWRlIGEgdGFnXG4gICAgICAgIC8vIG5lc3RlZCB0eXBlP1xuICAgICAgICAvLyBgPEFycmF5PEFycmF5PG51bWJlcj4+YCwgZXRjLlxuICAgICAgICBuZXh0Q2hhciA9PT0gXCI8XCIgfHxcbiAgICAgICAgLy8gdGhlICwgZ2l2ZXMgYXdheSB0aGF0IHRoaXMgaXMgbm90IEhUTUxcbiAgICAgICAgLy8gYDxULCBBIGV4dGVuZHMga2V5b2YgVCwgVj5gXG4gICAgICAgIG5leHRDaGFyID09PSBcIixcIlxuICAgICAgICApIHtcbiAgICAgICAgcmVzcG9uc2UuaWdub3JlTWF0Y2goKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBgPHNvbWV0aGluZz5gXG4gICAgICAvLyBRdWl0ZSBwb3NzaWJseSBhIHRhZywgbGV0cyBsb29rIGZvciBhIG1hdGNoaW5nIGNsb3NpbmcgdGFnLi4uXG4gICAgICBpZiAobmV4dENoYXIgPT09IFwiPlwiKSB7XG4gICAgICAgIC8vIGlmIHdlIGNhbm5vdCBmaW5kIGEgbWF0Y2hpbmcgY2xvc2luZyB0YWcsIHRoZW4gd2VcbiAgICAgICAgLy8gd2lsbCBpZ25vcmUgaXRcbiAgICAgICAgaWYgKCFoYXNDbG9zaW5nVGFnKG1hdGNoLCB7IGFmdGVyOiBhZnRlck1hdGNoSW5kZXggfSkpIHtcbiAgICAgICAgICByZXNwb25zZS5pZ25vcmVNYXRjaCgpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIGA8YmxhaCAvPmAgKHNlbGYtY2xvc2luZylcbiAgICAgIC8vIGhhbmRsZWQgYnkgc2ltcGxlU2VsZkNsb3NpbmcgcnVsZVxuXG4gICAgICBsZXQgbTtcbiAgICAgIGNvbnN0IGFmdGVyTWF0Y2ggPSBtYXRjaC5pbnB1dC5zdWJzdHJpbmcoYWZ0ZXJNYXRjaEluZGV4KTtcblxuICAgICAgLy8gc29tZSBtb3JlIHRlbXBsYXRlIHR5cGluZyBzdHVmZlxuICAgICAgLy8gIDxUID0gYW55PihrZXk/OiBzdHJpbmcpID0+IE1vZGlmeTxcbiAgICAgIGlmICgobSA9IGFmdGVyTWF0Y2gubWF0Y2goL15cXHMqPS8pKSkge1xuICAgICAgICByZXNwb25zZS5pZ25vcmVNYXRjaCgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIGA8RnJvbSBleHRlbmRzIHN0cmluZz5gXG4gICAgICAvLyB0ZWNobmljYWxseSB0aGlzIGNvdWxkIGJlIEhUTUwsIGJ1dCBpdCBzbWVsbHMgbGlrZSBhIHR5cGVcbiAgICAgIC8vIE5PVEU6IFRoaXMgaXMgdWdoLCBidXQgYWRkZWQgc3BlY2lmaWNhbGx5IGZvciBodHRwczovL2dpdGh1Yi5jb20vaGlnaGxpZ2h0anMvaGlnaGxpZ2h0LmpzL2lzc3Vlcy8zMjc2XG4gICAgICBpZiAoKG0gPSBhZnRlck1hdGNoLm1hdGNoKC9eXFxzK2V4dGVuZHNcXHMrLykpKSB7XG4gICAgICAgIGlmIChtLmluZGV4ID09PSAwKSB7XG4gICAgICAgICAgcmVzcG9uc2UuaWdub3JlTWF0Y2goKTtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlbGVzcy1yZXR1cm5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIGNvbnN0IEtFWVdPUkRTJDEgPSB7XG4gICAgJHBhdHRlcm46IElERU5UX1JFLFxuICAgIGtleXdvcmQ6IEtFWVdPUkRTLFxuICAgIGxpdGVyYWw6IExJVEVSQUxTLFxuICAgIGJ1aWx0X2luOiBCVUlMVF9JTlMsXG4gICAgXCJ2YXJpYWJsZS5sYW5ndWFnZVwiOiBCVUlMVF9JTl9WQVJJQUJMRVNcbiAgfTtcblxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWxpdGVyYWxzLW51bWVyaWMtbGl0ZXJhbHNcbiAgY29uc3QgZGVjaW1hbERpZ2l0cyA9ICdbMC05XShfP1swLTldKSonO1xuICBjb25zdCBmcmFjID0gYFxcXFwuKCR7ZGVjaW1hbERpZ2l0c30pYDtcbiAgLy8gRGVjaW1hbEludGVnZXJMaXRlcmFsLCBpbmNsdWRpbmcgQW5uZXggQiBOb25PY3RhbERlY2ltYWxJbnRlZ2VyTGl0ZXJhbFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFkZGl0aW9uYWwtc3ludGF4LW51bWVyaWMtbGl0ZXJhbHNcbiAgY29uc3QgZGVjaW1hbEludGVnZXIgPSBgMHxbMS05XShfP1swLTldKSp8MFswLTddKls4OV1bMC05XSpgO1xuICBjb25zdCBOVU1CRVIgPSB7XG4gICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICB2YXJpYW50czogW1xuICAgICAgLy8gRGVjaW1hbExpdGVyYWxcbiAgICAgIHsgYmVnaW46IGAoXFxcXGIoJHtkZWNpbWFsSW50ZWdlcn0pKCgke2ZyYWN9KXxcXFxcLik/fCgke2ZyYWN9KSlgICtcbiAgICAgICAgYFtlRV1bKy1dPygke2RlY2ltYWxEaWdpdHN9KVxcXFxiYCB9LFxuICAgICAgeyBiZWdpbjogYFxcXFxiKCR7ZGVjaW1hbEludGVnZXJ9KVxcXFxiKCgke2ZyYWN9KVxcXFxifFxcXFwuKT98KCR7ZnJhY30pXFxcXGJgIH0sXG5cbiAgICAgIC8vIERlY2ltYWxCaWdJbnRlZ2VyTGl0ZXJhbFxuICAgICAgeyBiZWdpbjogYFxcXFxiKDB8WzEtOV0oXz9bMC05XSkqKW5cXFxcYmAgfSxcblxuICAgICAgLy8gTm9uRGVjaW1hbEludGVnZXJMaXRlcmFsXG4gICAgICB7IGJlZ2luOiBcIlxcXFxiMFt4WF1bMC05YS1mQS1GXShfP1swLTlhLWZBLUZdKSpuP1xcXFxiXCIgfSxcbiAgICAgIHsgYmVnaW46IFwiXFxcXGIwW2JCXVswLTFdKF8/WzAtMV0pKm4/XFxcXGJcIiB9LFxuICAgICAgeyBiZWdpbjogXCJcXFxcYjBbb09dWzAtN10oXz9bMC03XSkqbj9cXFxcYlwiIH0sXG5cbiAgICAgIC8vIExlZ2FjeU9jdGFsSW50ZWdlckxpdGVyYWwgKGRvZXMgbm90IGluY2x1ZGUgdW5kZXJzY29yZSBzZXBhcmF0b3JzKVxuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hZGRpdGlvbmFsLXN5bnRheC1udW1lcmljLWxpdGVyYWxzXG4gICAgICB7IGJlZ2luOiBcIlxcXFxiMFswLTddK24/XFxcXGJcIiB9LFxuICAgIF0sXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG5cbiAgY29uc3QgU1VCU1QgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3Vic3QnLFxuICAgIGJlZ2luOiAnXFxcXCRcXFxceycsXG4gICAgZW5kOiAnXFxcXH0nLFxuICAgIGtleXdvcmRzOiBLRVlXT1JEUyQxLFxuICAgIGNvbnRhaW5zOiBbXSAvLyBkZWZpbmVkIGxhdGVyXG4gIH07XG4gIGNvbnN0IEhUTUxfVEVNUExBVEUgPSB7XG4gICAgYmVnaW46ICdcXC4/aHRtbGAnLFxuICAgIGVuZDogJycsXG4gICAgc3RhcnRzOiB7XG4gICAgICBlbmQ6ICdgJyxcbiAgICAgIHJldHVybkVuZDogZmFsc2UsXG4gICAgICBjb250YWluczogW1xuICAgICAgICBobGpzLkJBQ0tTTEFTSF9FU0NBUEUsXG4gICAgICAgIFNVQlNUXG4gICAgICBdLFxuICAgICAgc3ViTGFuZ3VhZ2U6ICd4bWwnXG4gICAgfVxuICB9O1xuICBjb25zdCBDU1NfVEVNUExBVEUgPSB7XG4gICAgYmVnaW46ICdcXC4/Y3NzYCcsXG4gICAgZW5kOiAnJyxcbiAgICBzdGFydHM6IHtcbiAgICAgIGVuZDogJ2AnLFxuICAgICAgcmV0dXJuRW5kOiBmYWxzZSxcbiAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgIGhsanMuQkFDS1NMQVNIX0VTQ0FQRSxcbiAgICAgICAgU1VCU1RcbiAgICAgIF0sXG4gICAgICBzdWJMYW5ndWFnZTogJ2NzcydcbiAgICB9XG4gIH07XG4gIGNvbnN0IEdSQVBIUUxfVEVNUExBVEUgPSB7XG4gICAgYmVnaW46ICdcXC4/Z3FsYCcsXG4gICAgZW5kOiAnJyxcbiAgICBzdGFydHM6IHtcbiAgICAgIGVuZDogJ2AnLFxuICAgICAgcmV0dXJuRW5kOiBmYWxzZSxcbiAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgIGhsanMuQkFDS1NMQVNIX0VTQ0FQRSxcbiAgICAgICAgU1VCU1RcbiAgICAgIF0sXG4gICAgICBzdWJMYW5ndWFnZTogJ2dyYXBocWwnXG4gICAgfVxuICB9O1xuICBjb25zdCBURU1QTEFURV9TVFJJTkcgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICBiZWdpbjogJ2AnLFxuICAgIGVuZDogJ2AnLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkJBQ0tTTEFTSF9FU0NBUEUsXG4gICAgICBTVUJTVFxuICAgIF1cbiAgfTtcbiAgY29uc3QgSlNET0NfQ09NTUVOVCA9IGhsanMuQ09NTUVOVChcbiAgICAvXFwvXFwqXFwqKD8hXFwvKS8sXG4gICAgJ1xcXFwqLycsXG4gICAge1xuICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgY29udGFpbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGJlZ2luOiAnKD89QFtBLVphLXpdKyknLFxuICAgICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBjbGFzc05hbWU6ICdkb2N0YWcnLFxuICAgICAgICAgICAgICBiZWdpbjogJ0BbQS1aYS16XSsnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBjbGFzc05hbWU6ICd0eXBlJyxcbiAgICAgICAgICAgICAgYmVnaW46ICdcXFxceycsXG4gICAgICAgICAgICAgIGVuZDogJ1xcXFx9JyxcbiAgICAgICAgICAgICAgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAgICAgICAgZXhjbHVkZUJlZ2luOiB0cnVlLFxuICAgICAgICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGNsYXNzTmFtZTogJ3ZhcmlhYmxlJyxcbiAgICAgICAgICAgICAgYmVnaW46IElERU5UX1JFJDEgKyAnKD89XFxcXHMqKC0pfCQpJyxcbiAgICAgICAgICAgICAgZW5kc1BhcmVudDogdHJ1ZSxcbiAgICAgICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLy8gZWF0IHNwYWNlcyAobm90IG5ld2xpbmVzKSBzbyB3ZSBjYW4gZmluZFxuICAgICAgICAgICAgLy8gdHlwZXMgb3IgdmFyaWFibGVzXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGJlZ2luOiAvKD89W15cXG5dKVxccy8sXG4gICAgICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICAgICAgfVxuICAgICAgICAgIF1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH1cbiAgKTtcbiAgY29uc3QgQ09NTUVOVCA9IHtcbiAgICBjbGFzc05hbWU6IFwiY29tbWVudFwiLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICBKU0RPQ19DT01NRU5ULFxuICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERVxuICAgIF1cbiAgfTtcbiAgY29uc3QgU1VCU1RfSU5URVJOQUxTID0gW1xuICAgIGhsanMuQVBPU19TVFJJTkdfTU9ERSxcbiAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgIEhUTUxfVEVNUExBVEUsXG4gICAgQ1NTX1RFTVBMQVRFLFxuICAgIEdSQVBIUUxfVEVNUExBVEUsXG4gICAgVEVNUExBVEVfU1RSSU5HLFxuICAgIC8vIFNraXAgbnVtYmVycyB3aGVuIHRoZXkgYXJlIHBhcnQgb2YgYSB2YXJpYWJsZSBuYW1lXG4gICAgeyBtYXRjaDogL1xcJFxcZCsvIH0sXG4gICAgTlVNQkVSLFxuICAgIC8vIFRoaXMgaXMgaW50ZW50aW9uYWw6XG4gICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9oaWdobGlnaHRqcy9oaWdobGlnaHQuanMvaXNzdWVzLzMyODhcbiAgICAvLyBobGpzLlJFR0VYUF9NT0RFXG4gIF07XG4gIFNVQlNULmNvbnRhaW5zID0gU1VCU1RfSU5URVJOQUxTXG4gICAgLmNvbmNhdCh7XG4gICAgICAvLyB3ZSBuZWVkIHRvIHBhaXIgdXAge30gaW5zaWRlIG91ciBzdWJzdCB0byBwcmV2ZW50XG4gICAgICAvLyBpdCBmcm9tIGVuZGluZyB0b28gZWFybHkgYnkgbWF0Y2hpbmcgYW5vdGhlciB9XG4gICAgICBiZWdpbjogL1xcey8sXG4gICAgICBlbmQ6IC9cXH0vLFxuICAgICAga2V5d29yZHM6IEtFWVdPUkRTJDEsXG4gICAgICBjb250YWluczogW1xuICAgICAgICBcInNlbGZcIlxuICAgICAgXS5jb25jYXQoU1VCU1RfSU5URVJOQUxTKVxuICAgIH0pO1xuICBjb25zdCBTVUJTVF9BTkRfQ09NTUVOVFMgPSBbXS5jb25jYXQoQ09NTUVOVCwgU1VCU1QuY29udGFpbnMpO1xuICBjb25zdCBQQVJBTVNfQ09OVEFJTlMgPSBTVUJTVF9BTkRfQ09NTUVOVFMuY29uY2F0KFtcbiAgICAvLyBlYXQgcmVjdXJzaXZlIHBhcmVucyBpbiBzdWIgZXhwcmVzc2lvbnNcbiAgICB7XG4gICAgICBiZWdpbjogLyhcXHMqKVxcKC8sXG4gICAgICBlbmQ6IC9cXCkvLFxuICAgICAga2V5d29yZHM6IEtFWVdPUkRTJDEsXG4gICAgICBjb250YWluczogW1wic2VsZlwiXS5jb25jYXQoU1VCU1RfQU5EX0NPTU1FTlRTKVxuICAgIH1cbiAgXSk7XG4gIGNvbnN0IFBBUkFNUyA9IHtcbiAgICBjbGFzc05hbWU6ICdwYXJhbXMnLFxuICAgIC8vIGNvbnZlcnQgdGhpcyB0byBuZWdhdGl2ZSBsb29rYmVoaW5kIGluIHYxMlxuICAgIGJlZ2luOiAvKFxccyopXFwoLywgLy8gdG8gbWF0Y2ggdGhlIHBhcm1zIHdpdGhcbiAgICBlbmQ6IC9cXCkvLFxuICAgIGV4Y2x1ZGVCZWdpbjogdHJ1ZSxcbiAgICBleGNsdWRlRW5kOiB0cnVlLFxuICAgIGtleXdvcmRzOiBLRVlXT1JEUyQxLFxuICAgIGNvbnRhaW5zOiBQQVJBTVNfQ09OVEFJTlNcbiAgfTtcblxuICAvLyBFUzYgY2xhc3Nlc1xuICBjb25zdCBDTEFTU19PUl9FWFRFTkRTID0ge1xuICAgIHZhcmlhbnRzOiBbXG4gICAgICAvLyBjbGFzcyBDYXIgZXh0ZW5kcyB2ZWhpY2xlXG4gICAgICB7XG4gICAgICAgIG1hdGNoOiBbXG4gICAgICAgICAgL2NsYXNzLyxcbiAgICAgICAgICAvXFxzKy8sXG4gICAgICAgICAgSURFTlRfUkUkMSxcbiAgICAgICAgICAvXFxzKy8sXG4gICAgICAgICAgL2V4dGVuZHMvLFxuICAgICAgICAgIC9cXHMrLyxcbiAgICAgICAgICByZWdleC5jb25jYXQoSURFTlRfUkUkMSwgXCIoXCIsIHJlZ2V4LmNvbmNhdCgvXFwuLywgSURFTlRfUkUkMSksIFwiKSpcIilcbiAgICAgICAgXSxcbiAgICAgICAgc2NvcGU6IHtcbiAgICAgICAgICAxOiBcImtleXdvcmRcIixcbiAgICAgICAgICAzOiBcInRpdGxlLmNsYXNzXCIsXG4gICAgICAgICAgNTogXCJrZXl3b3JkXCIsXG4gICAgICAgICAgNzogXCJ0aXRsZS5jbGFzcy5pbmhlcml0ZWRcIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgLy8gY2xhc3MgQ2FyXG4gICAgICB7XG4gICAgICAgIG1hdGNoOiBbXG4gICAgICAgICAgL2NsYXNzLyxcbiAgICAgICAgICAvXFxzKy8sXG4gICAgICAgICAgSURFTlRfUkUkMVxuICAgICAgICBdLFxuICAgICAgICBzY29wZToge1xuICAgICAgICAgIDE6IFwia2V5d29yZFwiLFxuICAgICAgICAgIDM6IFwidGl0bGUuY2xhc3NcIlxuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgXVxuICB9O1xuXG4gIGNvbnN0IENMQVNTX1JFRkVSRU5DRSA9IHtcbiAgICByZWxldmFuY2U6IDAsXG4gICAgbWF0Y2g6XG4gICAgcmVnZXguZWl0aGVyKFxuICAgICAgLy8gSGFyZCBjb2RlZCBleGNlcHRpb25zXG4gICAgICAvXFxiSlNPTi8sXG4gICAgICAvLyBGbG9hdDMyQXJyYXksIE91dFRcbiAgICAgIC9cXGJbQS1aXVthLXpdKyhbQS1aXVthLXpdKnxcXGQpKi8sXG4gICAgICAvLyBDU1NGYWN0b3J5LCBDU1NGYWN0b3J5VFxuICAgICAgL1xcYltBLVpdezIsfShbQS1aXVthLXpdK3xcXGQpKyhbQS1aXVthLXpdKikqLyxcbiAgICAgIC8vIEZQcywgRlBzVFxuICAgICAgL1xcYltBLVpdezIsfVthLXpdKyhbQS1aXVthLXpdK3xcXGQpKihbQS1aXVthLXpdKikqLyxcbiAgICAgIC8vIFBcbiAgICAgIC8vIHNpbmdsZSBsZXR0ZXJzIGFyZSBub3QgaGlnaGxpZ2h0ZWRcbiAgICAgIC8vIEJMQUhcbiAgICAgIC8vIHRoaXMgd2lsbCBiZSBmbGFnZ2VkIGFzIGEgVVBQRVJfQ0FTRV9DT05TVEFOVCBpbnN0ZWFkXG4gICAgKSxcbiAgICBjbGFzc05hbWU6IFwidGl0bGUuY2xhc3NcIixcbiAgICBrZXl3b3Jkczoge1xuICAgICAgXzogW1xuICAgICAgICAvLyBzZSB3ZSBzdGlsbCBnZXQgcmVsZXZhbmNlIGNyZWRpdCBmb3IgSlMgbGlicmFyeSBjbGFzc2VzXG4gICAgICAgIC4uLlRZUEVTLFxuICAgICAgICAuLi5FUlJPUl9UWVBFU1xuICAgICAgXVxuICAgIH1cbiAgfTtcblxuICBjb25zdCBVU0VfU1RSSUNUID0ge1xuICAgIGxhYmVsOiBcInVzZV9zdHJpY3RcIixcbiAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICByZWxldmFuY2U6IDEwLFxuICAgIGJlZ2luOiAvXlxccypbJ1wiXXVzZSAoc3RyaWN0fGFzbSlbJ1wiXS9cbiAgfTtcblxuICBjb25zdCBGVU5DVElPTl9ERUZJTklUSU9OID0ge1xuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7XG4gICAgICAgIG1hdGNoOiBbXG4gICAgICAgICAgL2Z1bmN0aW9uLyxcbiAgICAgICAgICAvXFxzKy8sXG4gICAgICAgICAgSURFTlRfUkUkMSxcbiAgICAgICAgICAvKD89XFxzKlxcKCkvXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICAvLyBhbm9ueW1vdXMgZnVuY3Rpb25cbiAgICAgIHtcbiAgICAgICAgbWF0Y2g6IFtcbiAgICAgICAgICAvZnVuY3Rpb24vLFxuICAgICAgICAgIC9cXHMqKD89XFwoKS9cbiAgICAgICAgXVxuICAgICAgfVxuICAgIF0sXG4gICAgY2xhc3NOYW1lOiB7XG4gICAgICAxOiBcImtleXdvcmRcIixcbiAgICAgIDM6IFwidGl0bGUuZnVuY3Rpb25cIlxuICAgIH0sXG4gICAgbGFiZWw6IFwiZnVuYy5kZWZcIixcbiAgICBjb250YWluczogWyBQQVJBTVMgXSxcbiAgICBpbGxlZ2FsOiAvJS9cbiAgfTtcblxuICBjb25zdCBVUFBFUl9DQVNFX0NPTlNUQU5UID0ge1xuICAgIHJlbGV2YW5jZTogMCxcbiAgICBtYXRjaDogL1xcYltBLVpdW0EtWl8wLTldK1xcYi8sXG4gICAgY2xhc3NOYW1lOiBcInZhcmlhYmxlLmNvbnN0YW50XCJcbiAgfTtcblxuICBmdW5jdGlvbiBub25lT2YobGlzdCkge1xuICAgIHJldHVybiByZWdleC5jb25jYXQoXCIoPyFcIiwgbGlzdC5qb2luKFwifFwiKSwgXCIpXCIpO1xuICB9XG5cbiAgY29uc3QgRlVOQ1RJT05fQ0FMTCA9IHtcbiAgICBtYXRjaDogcmVnZXguY29uY2F0KFxuICAgICAgL1xcYi8sXG4gICAgICBub25lT2YoW1xuICAgICAgICAuLi5CVUlMVF9JTl9HTE9CQUxTLFxuICAgICAgICBcInN1cGVyXCIsXG4gICAgICAgIFwiaW1wb3J0XCJcbiAgICAgIF0ubWFwKHggPT4gYCR7eH1cXFxccypcXFxcKGApKSxcbiAgICAgIElERU5UX1JFJDEsIHJlZ2V4Lmxvb2thaGVhZCgvXFxzKlxcKC8pKSxcbiAgICBjbGFzc05hbWU6IFwidGl0bGUuZnVuY3Rpb25cIixcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcblxuICBjb25zdCBQUk9QRVJUWV9BQ0NFU1MgPSB7XG4gICAgYmVnaW46IHJlZ2V4LmNvbmNhdCgvXFwuLywgcmVnZXgubG9va2FoZWFkKFxuICAgICAgcmVnZXguY29uY2F0KElERU5UX1JFJDEsIC8oPyFbMC05QS1aYS16JF8oXSkvKVxuICAgICkpLFxuICAgIGVuZDogSURFTlRfUkUkMSxcbiAgICBleGNsdWRlQmVnaW46IHRydWUsXG4gICAga2V5d29yZHM6IFwicHJvdG90eXBlXCIsXG4gICAgY2xhc3NOYW1lOiBcInByb3BlcnR5XCIsXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG5cbiAgY29uc3QgR0VUVEVSX09SX1NFVFRFUiA9IHtcbiAgICBtYXRjaDogW1xuICAgICAgL2dldHxzZXQvLFxuICAgICAgL1xccysvLFxuICAgICAgSURFTlRfUkUkMSxcbiAgICAgIC8oPz1cXCgpL1xuICAgIF0sXG4gICAgY2xhc3NOYW1lOiB7XG4gICAgICAxOiBcImtleXdvcmRcIixcbiAgICAgIDM6IFwidGl0bGUuZnVuY3Rpb25cIlxuICAgIH0sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHsgLy8gZWF0IHRvIGF2b2lkIGVtcHR5IHBhcmFtc1xuICAgICAgICBiZWdpbjogL1xcKFxcKS9cbiAgICAgIH0sXG4gICAgICBQQVJBTVNcbiAgICBdXG4gIH07XG5cbiAgY29uc3QgRlVOQ19MRUFEX0lOX1JFID0gJyhcXFxcKCcgK1xuICAgICdbXigpXSooXFxcXCgnICtcbiAgICAnW14oKV0qKFxcXFwoJyArXG4gICAgJ1teKCldKicgK1xuICAgICdcXFxcKVteKCldKikqJyArXG4gICAgJ1xcXFwpW14oKV0qKSonICtcbiAgICAnXFxcXCl8JyArIGhsanMuVU5ERVJTQ09SRV9JREVOVF9SRSArICcpXFxcXHMqPT4nO1xuXG4gIGNvbnN0IEZVTkNUSU9OX1ZBUklBQkxFID0ge1xuICAgIG1hdGNoOiBbXG4gICAgICAvY29uc3R8dmFyfGxldC8sIC9cXHMrLyxcbiAgICAgIElERU5UX1JFJDEsIC9cXHMqLyxcbiAgICAgIC89XFxzKi8sXG4gICAgICAvKGFzeW5jXFxzKik/LywgLy8gYXN5bmMgaXMgb3B0aW9uYWxcbiAgICAgIHJlZ2V4Lmxvb2thaGVhZChGVU5DX0xFQURfSU5fUkUpXG4gICAgXSxcbiAgICBrZXl3b3JkczogXCJhc3luY1wiLFxuICAgIGNsYXNzTmFtZToge1xuICAgICAgMTogXCJrZXl3b3JkXCIsXG4gICAgICAzOiBcInRpdGxlLmZ1bmN0aW9uXCJcbiAgICB9LFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBQQVJBTVNcbiAgICBdXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnSmF2YVNjcmlwdCcsXG4gICAgYWxpYXNlczogWydqcycsICdqc3gnLCAnbWpzJywgJ2NqcyddLFxuICAgIGtleXdvcmRzOiBLRVlXT1JEUyQxLFxuICAgIC8vIHRoaXMgd2lsbCBiZSBleHRlbmRlZCBieSBUeXBlU2NyaXB0XG4gICAgZXhwb3J0czogeyBQQVJBTVNfQ09OVEFJTlMsIENMQVNTX1JFRkVSRU5DRSB9LFxuICAgIGlsbGVnYWw6IC8jKD8hWyRfQS16XSkvLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLlNIRUJBTkcoe1xuICAgICAgICBsYWJlbDogXCJzaGViYW5nXCIsXG4gICAgICAgIGJpbmFyeTogXCJub2RlXCIsXG4gICAgICAgIHJlbGV2YW5jZTogNVxuICAgICAgfSksXG4gICAgICBVU0VfU1RSSUNULFxuICAgICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgIEhUTUxfVEVNUExBVEUsXG4gICAgICBDU1NfVEVNUExBVEUsXG4gICAgICBHUkFQSFFMX1RFTVBMQVRFLFxuICAgICAgVEVNUExBVEVfU1RSSU5HLFxuICAgICAgQ09NTUVOVCxcbiAgICAgIC8vIFNraXAgbnVtYmVycyB3aGVuIHRoZXkgYXJlIHBhcnQgb2YgYSB2YXJpYWJsZSBuYW1lXG4gICAgICB7IG1hdGNoOiAvXFwkXFxkKy8gfSxcbiAgICAgIE5VTUJFUixcbiAgICAgIENMQVNTX1JFRkVSRU5DRSxcbiAgICAgIHtcbiAgICAgICAgc2NvcGU6ICdhdHRyJyxcbiAgICAgICAgbWF0Y2g6IElERU5UX1JFJDEgKyByZWdleC5sb29rYWhlYWQoJzonKSxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAgRlVOQ1RJT05fVkFSSUFCTEUsXG4gICAgICB7IC8vIFwidmFsdWVcIiBjb250YWluZXJcbiAgICAgICAgYmVnaW46ICcoJyArIGhsanMuUkVfU1RBUlRFUlNfUkUgKyAnfFxcXFxiKGNhc2V8cmV0dXJufHRocm93KVxcXFxiKVxcXFxzKicsXG4gICAgICAgIGtleXdvcmRzOiAncmV0dXJuIHRocm93IGNhc2UnLFxuICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgQ09NTUVOVCxcbiAgICAgICAgICBobGpzLlJFR0VYUF9NT0RFLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ2Z1bmN0aW9uJyxcbiAgICAgICAgICAgIC8vIHdlIGhhdmUgdG8gY291bnQgdGhlIHBhcmVucyB0byBtYWtlIHN1cmUgd2UgYWN0dWFsbHkgaGF2ZSB0aGVcbiAgICAgICAgICAgIC8vIGNvcnJlY3QgYm91bmRpbmcgKCApIGJlZm9yZSB0aGUgPT4uICBUaGVyZSBjb3VsZCBiZSBhbnkgbnVtYmVyIG9mXG4gICAgICAgICAgICAvLyBzdWItZXhwcmVzc2lvbnMgaW5zaWRlIGFsc28gc3Vycm91bmRlZCBieSBwYXJlbnMuXG4gICAgICAgICAgICBiZWdpbjogRlVOQ19MRUFEX0lOX1JFLFxuICAgICAgICAgICAgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgICAgICAgICBlbmQ6ICdcXFxccyo9PicsXG4gICAgICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAncGFyYW1zJyxcbiAgICAgICAgICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBiZWdpbjogaGxqcy5VTkRFUlNDT1JFX0lERU5UX1JFLFxuICAgICAgICAgICAgICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgYmVnaW46IC9cXChcXHMqXFwpLyxcbiAgICAgICAgICAgICAgICAgICAgc2tpcDogdHJ1ZVxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgYmVnaW46IC8oXFxzKilcXCgvLFxuICAgICAgICAgICAgICAgICAgICBlbmQ6IC9cXCkvLFxuICAgICAgICAgICAgICAgICAgICBleGNsdWRlQmVnaW46IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGtleXdvcmRzOiBLRVlXT1JEUyQxLFxuICAgICAgICAgICAgICAgICAgICBjb250YWluczogUEFSQU1TX0NPTlRBSU5TXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7IC8vIGNvdWxkIGJlIGEgY29tbWEgZGVsaW1pdGVkIGxpc3Qgb2YgcGFyYW1zIHRvIGEgZnVuY3Rpb24gY2FsbFxuICAgICAgICAgICAgYmVnaW46IC8sLyxcbiAgICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgbWF0Y2g6IC9cXHMrLyxcbiAgICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICAgIH0sXG4gICAgICAgICAgeyAvLyBKU1hcbiAgICAgICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAgICAgIHsgYmVnaW46IEZSQUdNRU5ULmJlZ2luLCBlbmQ6IEZSQUdNRU5ULmVuZCB9LFxuICAgICAgICAgICAgICB7IG1hdGNoOiBYTUxfU0VMRl9DTE9TSU5HIH0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBiZWdpbjogWE1MX1RBRy5iZWdpbixcbiAgICAgICAgICAgICAgICAvLyB3ZSBjYXJlZnVsbHkgY2hlY2sgdGhlIG9wZW5pbmcgdGFnIHRvIHNlZSBpZiBpdCB0cnVseVxuICAgICAgICAgICAgICAgIC8vIGlzIGEgdGFnIGFuZCBub3QgYSBmYWxzZSBwb3NpdGl2ZVxuICAgICAgICAgICAgICAgICdvbjpiZWdpbic6IFhNTF9UQUcuaXNUcnVseU9wZW5pbmdUYWcsXG4gICAgICAgICAgICAgICAgZW5kOiBYTUxfVEFHLmVuZFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgc3ViTGFuZ3VhZ2U6ICd4bWwnLFxuICAgICAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJlZ2luOiBYTUxfVEFHLmJlZ2luLFxuICAgICAgICAgICAgICAgIGVuZDogWE1MX1RBRy5lbmQsXG4gICAgICAgICAgICAgICAgc2tpcDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBjb250YWluczogWydzZWxmJ11cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgICBGVU5DVElPTl9ERUZJTklUSU9OLFxuICAgICAge1xuICAgICAgICAvLyBwcmV2ZW50IHRoaXMgZnJvbSBnZXR0aW5nIHN3YWxsb3dlZCB1cCBieSBmdW5jdGlvblxuICAgICAgICAvLyBzaW5jZSB0aGV5IGFwcGVhciBcImZ1bmN0aW9uIGxpa2VcIlxuICAgICAgICBiZWdpbktleXdvcmRzOiBcIndoaWxlIGlmIHN3aXRjaCBjYXRjaCBmb3JcIlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgLy8gd2UgaGF2ZSB0byBjb3VudCB0aGUgcGFyZW5zIHRvIG1ha2Ugc3VyZSB3ZSBhY3R1YWxseSBoYXZlIHRoZSBjb3JyZWN0XG4gICAgICAgIC8vIGJvdW5kaW5nICggKS4gIFRoZXJlIGNvdWxkIGJlIGFueSBudW1iZXIgb2Ygc3ViLWV4cHJlc3Npb25zIGluc2lkZVxuICAgICAgICAvLyBhbHNvIHN1cnJvdW5kZWQgYnkgcGFyZW5zLlxuICAgICAgICBiZWdpbjogJ1xcXFxiKD8hZnVuY3Rpb24pJyArIGhsanMuVU5ERVJTQ09SRV9JREVOVF9SRSArXG4gICAgICAgICAgJ1xcXFwoJyArIC8vIGZpcnN0IHBhcmVuc1xuICAgICAgICAgICdbXigpXSooXFxcXCgnICtcbiAgICAgICAgICAgICdbXigpXSooXFxcXCgnICtcbiAgICAgICAgICAgICAgJ1teKCldKicgK1xuICAgICAgICAgICAgJ1xcXFwpW14oKV0qKSonICtcbiAgICAgICAgICAnXFxcXClbXigpXSopKicgK1xuICAgICAgICAgICdcXFxcKVxcXFxzKlxcXFx7JywgLy8gZW5kIHBhcmVuc1xuICAgICAgICByZXR1cm5CZWdpbjp0cnVlLFxuICAgICAgICBsYWJlbDogXCJmdW5jLmRlZlwiLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIFBBUkFNUyxcbiAgICAgICAgICBobGpzLmluaGVyaXQoaGxqcy5USVRMRV9NT0RFLCB7IGJlZ2luOiBJREVOVF9SRSQxLCBjbGFzc05hbWU6IFwidGl0bGUuZnVuY3Rpb25cIiB9KVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgLy8gY2F0Y2ggLi4uIHNvIGl0IHdvbid0IHRyaWdnZXIgdGhlIHByb3BlcnR5IHJ1bGUgYmVsb3dcbiAgICAgIHtcbiAgICAgICAgbWF0Y2g6IC9cXC5cXC5cXC4vLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICBQUk9QRVJUWV9BQ0NFU1MsXG4gICAgICAvLyBoYWNrOiBwcmV2ZW50cyBkZXRlY3Rpb24gb2Yga2V5d29yZHMgaW4gc29tZSBjaXJjdW1zdGFuY2VzXG4gICAgICAvLyAua2V5d29yZCgpXG4gICAgICAvLyAka2V5d29yZCA9IHhcbiAgICAgIHtcbiAgICAgICAgbWF0Y2g6ICdcXFxcJCcgKyBJREVOVF9SRSQxLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG1hdGNoOiBbIC9cXGJjb25zdHJ1Y3Rvcig/PVxccypcXCgpLyBdLFxuICAgICAgICBjbGFzc05hbWU6IHsgMTogXCJ0aXRsZS5mdW5jdGlvblwiIH0sXG4gICAgICAgIGNvbnRhaW5zOiBbIFBBUkFNUyBdXG4gICAgICB9LFxuICAgICAgRlVOQ1RJT05fQ0FMTCxcbiAgICAgIFVQUEVSX0NBU0VfQ09OU1RBTlQsXG4gICAgICBDTEFTU19PUl9FWFRFTkRTLFxuICAgICAgR0VUVEVSX09SX1NFVFRFUixcbiAgICAgIHtcbiAgICAgICAgbWF0Y2g6IC9cXCRbKC5dLyAvLyByZWxldmFuY2UgYm9vc3RlciBmb3IgYSBwYXR0ZXJuIGNvbW1vbiB0byBKUyBsaWJzOiBgJChzb21ldGhpbmcpYCBhbmQgYCQuc29tZXRoaW5nYFxuICAgICAgfVxuICAgIF1cbiAgfTtcbn1cblxuLypcbkxhbmd1YWdlOiBUeXBlU2NyaXB0XG5BdXRob3I6IFBhbnUgSG9yc21hbGFodGkgPHBhbnUuaG9yc21hbGFodGlAaWtpLmZpPlxuQ29udHJpYnV0b3JzOiBJa2UgS3UgPGRlbXBmaUB5YWhvby5jb20+XG5EZXNjcmlwdGlvbjogVHlwZVNjcmlwdCBpcyBhIHN0cmljdCBzdXBlcnNldCBvZiBKYXZhU2NyaXB0XG5XZWJzaXRlOiBodHRwczovL3d3dy50eXBlc2NyaXB0bGFuZy5vcmdcbkNhdGVnb3J5OiBjb21tb24sIHNjcmlwdGluZ1xuKi9cblxuXG4vKiogQHR5cGUgTGFuZ3VhZ2VGbiAqL1xuZnVuY3Rpb24gdHlwZXNjcmlwdChobGpzKSB7XG4gIGNvbnN0IHJlZ2V4ID0gaGxqcy5yZWdleDtcbiAgY29uc3QgdHNMYW5ndWFnZSA9IGphdmFzY3JpcHQoaGxqcyk7XG5cbiAgY29uc3QgSURFTlRfUkUkMSA9IElERU5UX1JFO1xuICBjb25zdCBUWVBFUyA9IFtcbiAgICBcImFueVwiLFxuICAgIFwidm9pZFwiLFxuICAgIFwibnVtYmVyXCIsXG4gICAgXCJib29sZWFuXCIsXG4gICAgXCJzdHJpbmdcIixcbiAgICBcIm9iamVjdFwiLFxuICAgIFwibmV2ZXJcIixcbiAgICBcInN5bWJvbFwiLFxuICAgIFwiYmlnaW50XCIsXG4gICAgXCJ1bmtub3duXCJcbiAgXTtcbiAgY29uc3QgTkFNRVNQQUNFID0ge1xuICAgIGJlZ2luOiBbXG4gICAgICAvbmFtZXNwYWNlLyxcbiAgICAgIC9cXHMrLyxcbiAgICAgIGhsanMuSURFTlRfUkVcbiAgICBdLFxuICAgIGJlZ2luU2NvcGU6IHtcbiAgICAgIDE6IFwia2V5d29yZFwiLFxuICAgICAgMzogXCJ0aXRsZS5jbGFzc1wiXG4gICAgfVxuICB9O1xuICBjb25zdCBJTlRFUkZBQ0UgPSB7XG4gICAgYmVnaW5LZXl3b3JkczogJ2ludGVyZmFjZScsXG4gICAgZW5kOiAvXFx7LyxcbiAgICBleGNsdWRlRW5kOiB0cnVlLFxuICAgIGtleXdvcmRzOiB7XG4gICAgICBrZXl3b3JkOiAnaW50ZXJmYWNlIGV4dGVuZHMnLFxuICAgICAgYnVpbHRfaW46IFRZUEVTXG4gICAgfSxcbiAgICBjb250YWluczogWyB0c0xhbmd1YWdlLmV4cG9ydHMuQ0xBU1NfUkVGRVJFTkNFIF1cbiAgfTtcbiAgY29uc3QgVVNFX1NUUklDVCA9IHtcbiAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICByZWxldmFuY2U6IDEwLFxuICAgIGJlZ2luOiAvXlxccypbJ1wiXXVzZSBzdHJpY3RbJ1wiXS9cbiAgfTtcbiAgY29uc3QgVFNfU1BFQ0lGSUNfS0VZV09SRFMgPSBbXG4gICAgXCJ0eXBlXCIsXG4gICAgLy8gXCJuYW1lc3BhY2VcIixcbiAgICBcImludGVyZmFjZVwiLFxuICAgIFwicHVibGljXCIsXG4gICAgXCJwcml2YXRlXCIsXG4gICAgXCJwcm90ZWN0ZWRcIixcbiAgICBcImltcGxlbWVudHNcIixcbiAgICBcImRlY2xhcmVcIixcbiAgICBcImFic3RyYWN0XCIsXG4gICAgXCJyZWFkb25seVwiLFxuICAgIFwiZW51bVwiLFxuICAgIFwib3ZlcnJpZGVcIixcbiAgICBcInNhdGlzZmllc1wiXG4gIF07XG4gIC8qXG4gICAgbmFtZXNwYWNlIGlzIGEgVFMga2V5d29yZCBidXQgaXQncyBmaW5lIHRvIHVzZSBpdCBhcyBhIHZhcmlhYmxlIG5hbWUgdG9vLlxuICAgIGNvbnN0IG1lc3NhZ2UgPSAnZm9vJztcbiAgICBjb25zdCBuYW1lc3BhY2UgPSAnYmFyJztcbiAgKi9cbiAgY29uc3QgS0VZV09SRFMkMSA9IHtcbiAgICAkcGF0dGVybjogSURFTlRfUkUsXG4gICAga2V5d29yZDogS0VZV09SRFMuY29uY2F0KFRTX1NQRUNJRklDX0tFWVdPUkRTKSxcbiAgICBsaXRlcmFsOiBMSVRFUkFMUyxcbiAgICBidWlsdF9pbjogQlVJTFRfSU5TLmNvbmNhdChUWVBFUyksXG4gICAgXCJ2YXJpYWJsZS5sYW5ndWFnZVwiOiBCVUlMVF9JTl9WQVJJQUJMRVNcbiAgfTtcblxuICBjb25zdCBERUNPUkFUT1IgPSB7XG4gICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgYmVnaW46ICdAJyArIElERU5UX1JFJDEsXG4gIH07XG5cbiAgY29uc3Qgc3dhcE1vZGUgPSAobW9kZSwgbGFiZWwsIHJlcGxhY2VtZW50KSA9PiB7XG4gICAgY29uc3QgaW5keCA9IG1vZGUuY29udGFpbnMuZmluZEluZGV4KG0gPT4gbS5sYWJlbCA9PT0gbGFiZWwpO1xuICAgIGlmIChpbmR4ID09PSAtMSkgeyB0aHJvdyBuZXcgRXJyb3IoXCJjYW4gbm90IGZpbmQgbW9kZSB0byByZXBsYWNlXCIpOyB9XG5cbiAgICBtb2RlLmNvbnRhaW5zLnNwbGljZShpbmR4LCAxLCByZXBsYWNlbWVudCk7XG4gIH07XG5cblxuICAvLyB0aGlzIHNob3VsZCB1cGRhdGUgYW55d2hlcmUga2V5d29yZHMgaXMgdXNlZCBzaW5jZVxuICAvLyBpdCB3aWxsIGJlIHRoZSBzYW1lIGFjdHVhbCBKUyBvYmplY3RcbiAgT2JqZWN0LmFzc2lnbih0c0xhbmd1YWdlLmtleXdvcmRzLCBLRVlXT1JEUyQxKTtcblxuICB0c0xhbmd1YWdlLmV4cG9ydHMuUEFSQU1TX0NPTlRBSU5TLnB1c2goREVDT1JBVE9SKTtcblxuICAvLyBoaWdobGlnaHQgdGhlIGZ1bmN0aW9uIHBhcmFtc1xuICBjb25zdCBBVFRSSUJVVEVfSElHSExJR0hUID0gdHNMYW5ndWFnZS5jb250YWlucy5maW5kKGMgPT4gYy5zY29wZSA9PT0gXCJhdHRyXCIpO1xuXG4gIC8vIHRha2UgZGVmYXVsdCBhdHRyIHJ1bGUgYW5kIGV4dGVuZCBpdCB0byBzdXBwb3J0IG9wdGlvbmFsc1xuICBjb25zdCBPUFRJT05BTF9LRVlfT1JfQVJHVU1FTlQgPSBPYmplY3QuYXNzaWduKHt9LFxuICAgIEFUVFJJQlVURV9ISUdITElHSFQsXG4gICAgeyBtYXRjaDogcmVnZXguY29uY2F0KElERU5UX1JFJDEsIHJlZ2V4Lmxvb2thaGVhZCgvXFxzKlxcPzovKSkgfVxuICApO1xuICB0c0xhbmd1YWdlLmV4cG9ydHMuUEFSQU1TX0NPTlRBSU5TLnB1c2goW1xuICAgIHRzTGFuZ3VhZ2UuZXhwb3J0cy5DTEFTU19SRUZFUkVOQ0UsIC8vIGNsYXNzIHJlZmVyZW5jZSBmb3IgaGlnaGxpZ2h0aW5nIHRoZSBwYXJhbXMgdHlwZXNcbiAgICBBVFRSSUJVVEVfSElHSExJR0hULCAvLyBoaWdobGlnaHQgdGhlIHBhcmFtcyBrZXlcbiAgICBPUFRJT05BTF9LRVlfT1JfQVJHVU1FTlQsIC8vIEFkZGVkIGZvciBvcHRpb25hbCBwcm9wZXJ0eSBhc3NpZ25tZW50IGhpZ2hsaWdodGluZ1xuICBdKTtcblxuICAvLyBBZGQgdGhlIG9wdGlvbmFsIHByb3BlcnR5IGFzc2lnbm1lbnQgaGlnaGxpZ2h0aW5nIGZvciBvYmplY3RzIG9yIGNsYXNzZXNcbiAgdHNMYW5ndWFnZS5jb250YWlucyA9IHRzTGFuZ3VhZ2UuY29udGFpbnMuY29uY2F0KFtcbiAgICBERUNPUkFUT1IsXG4gICAgTkFNRVNQQUNFLFxuICAgIElOVEVSRkFDRSxcbiAgICBPUFRJT05BTF9LRVlfT1JfQVJHVU1FTlQsIC8vIEFkZGVkIGZvciBvcHRpb25hbCBwcm9wZXJ0eSBhc3NpZ25tZW50IGhpZ2hsaWdodGluZ1xuICBdKTtcblxuICAvLyBUUyBnZXRzIGEgc2ltcGxlciBzaGViYW5nIHJ1bGUgdGhhbiBKU1xuICBzd2FwTW9kZSh0c0xhbmd1YWdlLCBcInNoZWJhbmdcIiwgaGxqcy5TSEVCQU5HKCkpO1xuICAvLyBKUyB1c2Ugc3RyaWN0IHJ1bGUgcHVycG9zZWx5IGV4Y2x1ZGVzIGBhc21gIHdoaWNoIG1ha2VzIG5vIHNlbnNlXG4gIHN3YXBNb2RlKHRzTGFuZ3VhZ2UsIFwidXNlX3N0cmljdFwiLCBVU0VfU1RSSUNUKTtcblxuICBjb25zdCBmdW5jdGlvbkRlY2xhcmF0aW9uID0gdHNMYW5ndWFnZS5jb250YWlucy5maW5kKG0gPT4gbS5sYWJlbCA9PT0gXCJmdW5jLmRlZlwiKTtcbiAgZnVuY3Rpb25EZWNsYXJhdGlvbi5yZWxldmFuY2UgPSAwOyAvLyAoKSA9PiB7fSBpcyBtb3JlIHR5cGljYWwgaW4gVHlwZVNjcmlwdFxuXG4gIE9iamVjdC5hc3NpZ24odHNMYW5ndWFnZSwge1xuICAgIG5hbWU6ICdUeXBlU2NyaXB0JyxcbiAgICBhbGlhc2VzOiBbXG4gICAgICAndHMnLFxuICAgICAgJ3RzeCcsXG4gICAgICAnbXRzJyxcbiAgICAgICdjdHMnXG4gICAgXVxuICB9KTtcblxuICByZXR1cm4gdHNMYW5ndWFnZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0eXBlc2NyaXB0O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1214\n')},1217:module=>{eval("/*\nLanguage: Parser3\nRequires: xml.js\nAuthor: Oleg Volchkov \nWebsite: https://www.parser.ru/en/\nCategory: template\n*/\n\nfunction parser3(hljs) {\n const CURLY_SUBCOMMENT = hljs.COMMENT(\n /\\{/,\n /\\}/,\n { contains: [ 'self' ] }\n );\n return {\n name: 'Parser3',\n subLanguage: 'xml',\n relevance: 0,\n contains: [\n hljs.COMMENT('^#', '$'),\n hljs.COMMENT(\n /\\^rem\\{/,\n /\\}/,\n {\n relevance: 10,\n contains: [ CURLY_SUBCOMMENT ]\n }\n ),\n {\n className: 'meta',\n begin: '^@(?:BASE|USE|CLASS|OPTIONS)$',\n relevance: 10\n },\n {\n className: 'title',\n begin: '@[\\\\w\\\\-]+\\\\[[\\\\w^;\\\\-]*\\\\](?:\\\\[[\\\\w^;\\\\-]*\\\\])?(?:.*)$'\n },\n {\n className: 'variable',\n begin: /\\$\\{?[\\w\\-.:]+\\}?/\n },\n {\n className: 'keyword',\n begin: /\\^[\\w\\-.:]+/\n },\n {\n className: 'number',\n begin: '\\\\^#[0-9a-fA-F]+'\n },\n hljs.C_NUMBER_MODE\n ]\n };\n}\n\nmodule.exports = parser3;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTIxNy5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQLE9BQU87QUFDUCxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQixXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxtQ0FBbUMsb0JBQW9CO0FBQ3ZELE9BQU87QUFDUDtBQUNBO0FBQ0Esb0JBQW9CLFlBQVk7QUFDaEMsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9vYnNpZGlhbi1taW5kbWFwLW5leHRnZW4vLi9ub2RlX21vZHVsZXMvLnBucG0vaGlnaGxpZ2h0LmpzQDExLjExLjEvbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3BhcnNlcjMuanM/ODljMSJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuTGFuZ3VhZ2U6IFBhcnNlcjNcblJlcXVpcmVzOiB4bWwuanNcbkF1dGhvcjogT2xlZyBWb2xjaGtvdiA8b2xlZ0B2b2xjaGtvdi5uZXQ+XG5XZWJzaXRlOiBodHRwczovL3d3dy5wYXJzZXIucnUvZW4vXG5DYXRlZ29yeTogdGVtcGxhdGVcbiovXG5cbmZ1bmN0aW9uIHBhcnNlcjMoaGxqcykge1xuICBjb25zdCBDVVJMWV9TVUJDT01NRU5UID0gaGxqcy5DT01NRU5UKFxuICAgIC9cXHsvLFxuICAgIC9cXH0vLFxuICAgIHsgY29udGFpbnM6IFsgJ3NlbGYnIF0gfVxuICApO1xuICByZXR1cm4ge1xuICAgIG5hbWU6ICdQYXJzZXIzJyxcbiAgICBzdWJMYW5ndWFnZTogJ3htbCcsXG4gICAgcmVsZXZhbmNlOiAwLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkNPTU1FTlQoJ14jJywgJyQnKSxcbiAgICAgIGhsanMuQ09NTUVOVChcbiAgICAgICAgL1xcXnJlbVxcey8sXG4gICAgICAgIC9cXH0vLFxuICAgICAgICB7XG4gICAgICAgICAgcmVsZXZhbmNlOiAxMCxcbiAgICAgICAgICBjb250YWluczogWyBDVVJMWV9TVUJDT01NRU5UIF1cbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgICAgIGJlZ2luOiAnXkAoPzpCQVNFfFVTRXxDTEFTU3xPUFRJT05TKSQnLFxuICAgICAgICByZWxldmFuY2U6IDEwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICd0aXRsZScsXG4gICAgICAgIGJlZ2luOiAnQFtcXFxcd1xcXFwtXStcXFxcW1tcXFxcd147XFxcXC1dKlxcXFxdKD86XFxcXFtbXFxcXHdeO1xcXFwtXSpcXFxcXSk/KD86LiopJCdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3ZhcmlhYmxlJyxcbiAgICAgICAgYmVnaW46IC9cXCRcXHs/W1xcd1xcLS46XStcXH0/L1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAna2V5d29yZCcsXG4gICAgICAgIGJlZ2luOiAvXFxeW1xcd1xcLS46XSsvXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgICAgICBiZWdpbjogJ1xcXFxeI1swLTlhLWZBLUZdKydcbiAgICAgIH0sXG4gICAgICBobGpzLkNfTlVNQkVSX01PREVcbiAgICBdXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyc2VyMztcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1217\n")},1239:(__unused_webpack_module,exports,__webpack_require__)=>{"use strict";eval("\n\nvar map = __webpack_require__(4713);\nvar _null = __webpack_require__(9430);\nvar seq = __webpack_require__(9796);\nvar string = __webpack_require__(5874);\nvar binary = __webpack_require__(4325);\nvar bool = __webpack_require__(4512);\nvar float = __webpack_require__(9936);\nvar int = __webpack_require__(3375);\nvar merge = __webpack_require__(4054);\nvar omap = __webpack_require__(4089);\nvar pairs = __webpack_require__(7067);\nvar set = __webpack_require__(5814);\nvar timestamp = __webpack_require__(4006);\n\nconst schema = [\n map.map,\n seq.seq,\n string.string,\n _null.nullTag,\n bool.trueTag,\n bool.falseTag,\n int.intBin,\n int.intOct,\n int.int,\n int.intHex,\n float.floatNaN,\n float.floatExp,\n float.float,\n binary.binary,\n merge.merge,\n omap.omap,\n pairs.pairs,\n set.set,\n timestamp.intTime,\n timestamp.floatTime,\n timestamp.timestamp\n];\n\nexports.schema = schema;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTIzOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixVQUFVLG1CQUFPLENBQUMsSUFBa0I7QUFDcEMsWUFBWSxtQkFBTyxDQUFDLElBQW1CO0FBQ3ZDLFVBQVUsbUJBQU8sQ0FBQyxJQUFrQjtBQUNwQyxhQUFhLG1CQUFPLENBQUMsSUFBcUI7QUFDMUMsYUFBYSxtQkFBTyxDQUFDLElBQWE7QUFDbEMsV0FBVyxtQkFBTyxDQUFDLElBQVc7QUFDOUIsWUFBWSxtQkFBTyxDQUFDLElBQVk7QUFDaEMsVUFBVSxtQkFBTyxDQUFDLElBQVU7QUFDNUIsWUFBWSxtQkFBTyxDQUFDLElBQVk7QUFDaEMsV0FBVyxtQkFBTyxDQUFDLElBQVc7QUFDOUIsWUFBWSxtQkFBTyxDQUFDLElBQVk7QUFDaEMsVUFBVSxtQkFBTyxDQUFDLElBQVU7QUFDNUIsZ0JBQWdCLG1CQUFPLENBQUMsSUFBZ0I7O0FBRXhDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsY0FBYyIsInNvdXJjZXMiOlsid2VicGFjazovL29ic2lkaWFuLW1pbmRtYXAtbmV4dGdlbi8uL25vZGVfbW9kdWxlcy8ucG5wbS95YW1sQDIuOC4wL25vZGVfbW9kdWxlcy95YW1sL2Rpc3Qvc2NoZW1hL3lhbWwtMS4xL3NjaGVtYS5qcz9jZjU5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIG1hcCA9IHJlcXVpcmUoJy4uL2NvbW1vbi9tYXAuanMnKTtcbnZhciBfbnVsbCA9IHJlcXVpcmUoJy4uL2NvbW1vbi9udWxsLmpzJyk7XG52YXIgc2VxID0gcmVxdWlyZSgnLi4vY29tbW9uL3NlcS5qcycpO1xudmFyIHN0cmluZyA9IHJlcXVpcmUoJy4uL2NvbW1vbi9zdHJpbmcuanMnKTtcbnZhciBiaW5hcnkgPSByZXF1aXJlKCcuL2JpbmFyeS5qcycpO1xudmFyIGJvb2wgPSByZXF1aXJlKCcuL2Jvb2wuanMnKTtcbnZhciBmbG9hdCA9IHJlcXVpcmUoJy4vZmxvYXQuanMnKTtcbnZhciBpbnQgPSByZXF1aXJlKCcuL2ludC5qcycpO1xudmFyIG1lcmdlID0gcmVxdWlyZSgnLi9tZXJnZS5qcycpO1xudmFyIG9tYXAgPSByZXF1aXJlKCcuL29tYXAuanMnKTtcbnZhciBwYWlycyA9IHJlcXVpcmUoJy4vcGFpcnMuanMnKTtcbnZhciBzZXQgPSByZXF1aXJlKCcuL3NldC5qcycpO1xudmFyIHRpbWVzdGFtcCA9IHJlcXVpcmUoJy4vdGltZXN0YW1wLmpzJyk7XG5cbmNvbnN0IHNjaGVtYSA9IFtcbiAgICBtYXAubWFwLFxuICAgIHNlcS5zZXEsXG4gICAgc3RyaW5nLnN0cmluZyxcbiAgICBfbnVsbC5udWxsVGFnLFxuICAgIGJvb2wudHJ1ZVRhZyxcbiAgICBib29sLmZhbHNlVGFnLFxuICAgIGludC5pbnRCaW4sXG4gICAgaW50LmludE9jdCxcbiAgICBpbnQuaW50LFxuICAgIGludC5pbnRIZXgsXG4gICAgZmxvYXQuZmxvYXROYU4sXG4gICAgZmxvYXQuZmxvYXRFeHAsXG4gICAgZmxvYXQuZmxvYXQsXG4gICAgYmluYXJ5LmJpbmFyeSxcbiAgICBtZXJnZS5tZXJnZSxcbiAgICBvbWFwLm9tYXAsXG4gICAgcGFpcnMucGFpcnMsXG4gICAgc2V0LnNldCxcbiAgICB0aW1lc3RhbXAuaW50VGltZSxcbiAgICB0aW1lc3RhbXAuZmxvYXRUaW1lLFxuICAgIHRpbWVzdGFtcC50aW1lc3RhbXBcbl07XG5cbmV4cG9ydHMuc2NoZW1hID0gc2NoZW1hO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1239\n")},1278:module=>{eval('/*\n Language: Flix\n Category: functional\n Author: Magnus Madsen \n Website: https://flix.dev/\n */\n\n/** @type LanguageFn */\nfunction flix(hljs) {\n const CHAR = {\n className: \'string\',\n begin: /\'(.|\\\\[xXuU][a-zA-Z0-9]+)\'/\n };\n\n const STRING = {\n className: \'string\',\n variants: [\n {\n begin: \'"\',\n end: \'"\'\n }\n ]\n };\n\n const NAME = {\n className: \'title\',\n relevance: 0,\n begin: /[^0-9\\n\\t "\'(),.`{}\\[\\]:;][^\\n\\t "\'(),.`{}\\[\\]:;]+|[^0-9\\n\\t "\'(),.`{}\\[\\]:;=]/\n };\n\n const METHOD = {\n className: \'function\',\n beginKeywords: \'def\',\n end: /[:={\\[(\\n;]/,\n excludeEnd: true,\n contains: [ NAME ]\n };\n\n return {\n name: \'Flix\',\n keywords: {\n keyword: [\n "case",\n "class",\n "def",\n "else",\n "enum",\n "if",\n "impl",\n "import",\n "in",\n "lat",\n "rel",\n "index",\n "let",\n "match",\n "namespace",\n "switch",\n "type",\n "yield",\n "with"\n ],\n literal: [\n "true",\n "false"\n ]\n },\n contains: [\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE,\n CHAR,\n STRING,\n METHOD,\n hljs.C_NUMBER_MODE\n ]\n };\n}\n\nmodule.exports = flix;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTI3OC5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSwrQkFBK0IsTUFBTSxpQkFBaUIsTUFBTSxzQkFBc0IsTUFBTTtBQUN4Rjs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxjQUFjLE1BQU07QUFDcEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vb2JzaWRpYW4tbWluZG1hcC1uZXh0Z2VuLy4vbm9kZV9tb2R1bGVzLy5wbnBtL2hpZ2hsaWdodC5qc0AxMS4xMS4xL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9mbGl4LmpzP2UyZDAiXSwic291cmNlc0NvbnRlbnQiOlsiLypcbiBMYW5ndWFnZTogRmxpeFxuIENhdGVnb3J5OiBmdW5jdGlvbmFsXG4gQXV0aG9yOiBNYWdudXMgTWFkc2VuIDxtbWFkc2VuQHV3YXRlcmxvby5jYT5cbiBXZWJzaXRlOiBodHRwczovL2ZsaXguZGV2L1xuICovXG5cbi8qKiBAdHlwZSBMYW5ndWFnZUZuICovXG5mdW5jdGlvbiBmbGl4KGhsanMpIHtcbiAgY29uc3QgQ0hBUiA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIGJlZ2luOiAvJygufFxcXFxbeFh1VV1bYS16QS1aMC05XSspJy9cbiAgfTtcblxuICBjb25zdCBTVFJJTkcgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICB2YXJpYW50czogW1xuICAgICAge1xuICAgICAgICBiZWdpbjogJ1wiJyxcbiAgICAgICAgZW5kOiAnXCInXG4gICAgICB9XG4gICAgXVxuICB9O1xuXG4gIGNvbnN0IE5BTUUgPSB7XG4gICAgY2xhc3NOYW1lOiAndGl0bGUnLFxuICAgIHJlbGV2YW5jZTogMCxcbiAgICBiZWdpbjogL1teMC05XFxuXFx0IFwiJygpLC5ge31cXFtcXF06O11bXlxcblxcdCBcIicoKSwuYHt9XFxbXFxdOjtdK3xbXjAtOVxcblxcdCBcIicoKSwuYHt9XFxbXFxdOjs9XS9cbiAgfTtcblxuICBjb25zdCBNRVRIT0QgPSB7XG4gICAgY2xhc3NOYW1lOiAnZnVuY3Rpb24nLFxuICAgIGJlZ2luS2V5d29yZHM6ICdkZWYnLFxuICAgIGVuZDogL1s6PXtcXFsoXFxuO10vLFxuICAgIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgY29udGFpbnM6IFsgTkFNRSBdXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnRmxpeCcsXG4gICAga2V5d29yZHM6IHtcbiAgICAgIGtleXdvcmQ6IFtcbiAgICAgICAgXCJjYXNlXCIsXG4gICAgICAgIFwiY2xhc3NcIixcbiAgICAgICAgXCJkZWZcIixcbiAgICAgICAgXCJlbHNlXCIsXG4gICAgICAgIFwiZW51bVwiLFxuICAgICAgICBcImlmXCIsXG4gICAgICAgIFwiaW1wbFwiLFxuICAgICAgICBcImltcG9ydFwiLFxuICAgICAgICBcImluXCIsXG4gICAgICAgIFwibGF0XCIsXG4gICAgICAgIFwicmVsXCIsXG4gICAgICAgIFwiaW5kZXhcIixcbiAgICAgICAgXCJsZXRcIixcbiAgICAgICAgXCJtYXRjaFwiLFxuICAgICAgICBcIm5hbWVzcGFjZVwiLFxuICAgICAgICBcInN3aXRjaFwiLFxuICAgICAgICBcInR5cGVcIixcbiAgICAgICAgXCJ5aWVsZFwiLFxuICAgICAgICBcIndpdGhcIlxuICAgICAgXSxcbiAgICAgIGxpdGVyYWw6IFtcbiAgICAgICAgXCJ0cnVlXCIsXG4gICAgICAgIFwiZmFsc2VcIlxuICAgICAgXVxuICAgIH0sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgICBDSEFSLFxuICAgICAgU1RSSU5HLFxuICAgICAgTUVUSE9ELFxuICAgICAgaGxqcy5DX05VTUJFUl9NT0RFXG4gICAgXVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZsaXg7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///1278\n')},1298:module=>{eval("/*\nLanguage: Plain text\nAuthor: Egor Rogov (e.rogov@postgrespro.ru)\nDescription: Plain text without any highlighting.\nCategory: common\n*/\n\nfunction plaintext(hljs) {\n return {\n name: 'Plain text',\n aliases: [\n 'text',\n 'txt'\n ],\n disableAutodetect: true\n };\n}\n\nmodule.exports = plaintext;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTI5OC5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9vYnNpZGlhbi1taW5kbWFwLW5leHRnZW4vLi9ub2RlX21vZHVsZXMvLnBucG0vaGlnaGxpZ2h0LmpzQDExLjExLjEvbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3BsYWludGV4dC5qcz9kMDJiIl0sInNvdXJjZXNDb250ZW50IjpbIi8qXG5MYW5ndWFnZTogUGxhaW4gdGV4dFxuQXV0aG9yOiBFZ29yIFJvZ292IChlLnJvZ292QHBvc3RncmVzcHJvLnJ1KVxuRGVzY3JpcHRpb246IFBsYWluIHRleHQgd2l0aG91dCBhbnkgaGlnaGxpZ2h0aW5nLlxuQ2F0ZWdvcnk6IGNvbW1vblxuKi9cblxuZnVuY3Rpb24gcGxhaW50ZXh0KGhsanMpIHtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnUGxhaW4gdGV4dCcsXG4gICAgYWxpYXNlczogW1xuICAgICAgJ3RleHQnLFxuICAgICAgJ3R4dCdcbiAgICBdLFxuICAgIGRpc2FibGVBdXRvZGV0ZWN0OiB0cnVlXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcGxhaW50ZXh0O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1298\n")},1303:module=>{eval("/*\nLanguage: Python\nDescription: Python is an interpreted, object-oriented, high-level programming language with dynamic semantics.\nWebsite: https://www.python.org\nCategory: common\n*/\n\nfunction python(hljs) {\n const regex = hljs.regex;\n const IDENT_RE = /[\\p{XID_Start}_]\\p{XID_Continue}*/u;\n const RESERVED_WORDS = [\n 'and',\n 'as',\n 'assert',\n 'async',\n 'await',\n 'break',\n 'case',\n 'class',\n 'continue',\n 'def',\n 'del',\n 'elif',\n 'else',\n 'except',\n 'finally',\n 'for',\n 'from',\n 'global',\n 'if',\n 'import',\n 'in',\n 'is',\n 'lambda',\n 'match',\n 'nonlocal|10',\n 'not',\n 'or',\n 'pass',\n 'raise',\n 'return',\n 'try',\n 'while',\n 'with',\n 'yield'\n ];\n\n const BUILT_INS = [\n '__import__',\n 'abs',\n 'all',\n 'any',\n 'ascii',\n 'bin',\n 'bool',\n 'breakpoint',\n 'bytearray',\n 'bytes',\n 'callable',\n 'chr',\n 'classmethod',\n 'compile',\n 'complex',\n 'delattr',\n 'dict',\n 'dir',\n 'divmod',\n 'enumerate',\n 'eval',\n 'exec',\n 'filter',\n 'float',\n 'format',\n 'frozenset',\n 'getattr',\n 'globals',\n 'hasattr',\n 'hash',\n 'help',\n 'hex',\n 'id',\n 'input',\n 'int',\n 'isinstance',\n 'issubclass',\n 'iter',\n 'len',\n 'list',\n 'locals',\n 'map',\n 'max',\n 'memoryview',\n 'min',\n 'next',\n 'object',\n 'oct',\n 'open',\n 'ord',\n 'pow',\n 'print',\n 'property',\n 'range',\n 'repr',\n 'reversed',\n 'round',\n 'set',\n 'setattr',\n 'slice',\n 'sorted',\n 'staticmethod',\n 'str',\n 'sum',\n 'super',\n 'tuple',\n 'type',\n 'vars',\n 'zip'\n ];\n\n const LITERALS = [\n '__debug__',\n 'Ellipsis',\n 'False',\n 'None',\n 'NotImplemented',\n 'True'\n ];\n\n // https://docs.python.org/3/library/typing.html\n // TODO: Could these be supplemented by a CamelCase matcher in certain\n // contexts, leaving these remaining only for relevance hinting?\n const TYPES = [\n \"Any\",\n \"Callable\",\n \"Coroutine\",\n \"Dict\",\n \"List\",\n \"Literal\",\n \"Generic\",\n \"Optional\",\n \"Sequence\",\n \"Set\",\n \"Tuple\",\n \"Type\",\n \"Union\"\n ];\n\n const KEYWORDS = {\n $pattern: /[A-Za-z]\\w+|__\\w+__/,\n keyword: RESERVED_WORDS,\n built_in: BUILT_INS,\n literal: LITERALS,\n type: TYPES\n };\n\n const PROMPT = {\n className: 'meta',\n begin: /^(>>>|\\.\\.\\.) /\n };\n\n const SUBST = {\n className: 'subst',\n begin: /\\{/,\n end: /\\}/,\n keywords: KEYWORDS,\n illegal: /#/\n };\n\n const LITERAL_BRACKET = {\n begin: /\\{\\{/,\n relevance: 0\n };\n\n const STRING = {\n className: 'string',\n contains: [ hljs.BACKSLASH_ESCAPE ],\n variants: [\n {\n begin: /([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?'''/,\n end: /'''/,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n PROMPT\n ],\n relevance: 10\n },\n {\n begin: /([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?\"\"\"/,\n end: /\"\"\"/,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n PROMPT\n ],\n relevance: 10\n },\n {\n begin: /([fF][rR]|[rR][fF]|[fF])'''/,\n end: /'''/,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n PROMPT,\n LITERAL_BRACKET,\n SUBST\n ]\n },\n {\n begin: /([fF][rR]|[rR][fF]|[fF])\"\"\"/,\n end: /\"\"\"/,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n PROMPT,\n LITERAL_BRACKET,\n SUBST\n ]\n },\n {\n begin: /([uU]|[rR])'/,\n end: /'/,\n relevance: 10\n },\n {\n begin: /([uU]|[rR])\"/,\n end: /\"/,\n relevance: 10\n },\n {\n begin: /([bB]|[bB][rR]|[rR][bB])'/,\n end: /'/\n },\n {\n begin: /([bB]|[bB][rR]|[rR][bB])\"/,\n end: /\"/\n },\n {\n begin: /([fF][rR]|[rR][fF]|[fF])'/,\n end: /'/,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n LITERAL_BRACKET,\n SUBST\n ]\n },\n {\n begin: /([fF][rR]|[rR][fF]|[fF])\"/,\n end: /\"/,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n LITERAL_BRACKET,\n SUBST\n ]\n },\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE\n ]\n };\n\n // https://docs.python.org/3.9/reference/lexical_analysis.html#numeric-literals\n const digitpart = '[0-9](_?[0-9])*';\n const pointfloat = `(\\\\b(${digitpart}))?\\\\.(${digitpart})|\\\\b(${digitpart})\\\\.`;\n // Whitespace after a number (or any lexical token) is needed only if its absence\n // would change the tokenization\n // https://docs.python.org/3.9/reference/lexical_analysis.html#whitespace-between-tokens\n // We deviate slightly, requiring a word boundary or a keyword\n // to avoid accidentally recognizing *prefixes* (e.g., `0` in `0x41` or `08` or `0__1`)\n const lookahead = `\\\\b|${RESERVED_WORDS.join('|')}`;\n const NUMBER = {\n className: 'number',\n relevance: 0,\n variants: [\n // exponentfloat, pointfloat\n // https://docs.python.org/3.9/reference/lexical_analysis.html#floating-point-literals\n // optionally imaginary\n // https://docs.python.org/3.9/reference/lexical_analysis.html#imaginary-literals\n // Note: no leading \\b because floats can start with a decimal point\n // and we don't want to mishandle e.g. `fn(.5)`,\n // no trailing \\b for pointfloat because it can end with a decimal point\n // and we don't want to mishandle e.g. `0..hex()`; this should be safe\n // because both MUST contain a decimal point and so cannot be confused with\n // the interior part of an identifier\n {\n begin: `(\\\\b(${digitpart})|(${pointfloat}))[eE][+-]?(${digitpart})[jJ]?(?=${lookahead})`\n },\n {\n begin: `(${pointfloat})[jJ]?`\n },\n\n // decinteger, bininteger, octinteger, hexinteger\n // https://docs.python.org/3.9/reference/lexical_analysis.html#integer-literals\n // optionally \"long\" in Python 2\n // https://docs.python.org/2.7/reference/lexical_analysis.html#integer-and-long-integer-literals\n // decinteger is optionally imaginary\n // https://docs.python.org/3.9/reference/lexical_analysis.html#imaginary-literals\n {\n begin: `\\\\b([1-9](_?[0-9])*|0+(_?0)*)[lLjJ]?(?=${lookahead})`\n },\n {\n begin: `\\\\b0[bB](_?[01])+[lL]?(?=${lookahead})`\n },\n {\n begin: `\\\\b0[oO](_?[0-7])+[lL]?(?=${lookahead})`\n },\n {\n begin: `\\\\b0[xX](_?[0-9a-fA-F])+[lL]?(?=${lookahead})`\n },\n\n // imagnumber (digitpart-based)\n // https://docs.python.org/3.9/reference/lexical_analysis.html#imaginary-literals\n {\n begin: `\\\\b(${digitpart})[jJ](?=${lookahead})`\n }\n ]\n };\n const COMMENT_TYPE = {\n className: \"comment\",\n begin: regex.lookahead(/# type:/),\n end: /$/,\n keywords: KEYWORDS,\n contains: [\n { // prevent keywords from coloring `type`\n begin: /# type:/\n },\n // comment within a datatype comment includes no keywords\n {\n begin: /#/,\n end: /\\b\\B/,\n endsWithParent: true\n }\n ]\n };\n const PARAMS = {\n className: 'params',\n variants: [\n // Exclude params in functions without params\n {\n className: \"\",\n begin: /\\(\\s*\\)/,\n skip: true\n },\n {\n begin: /\\(/,\n end: /\\)/,\n excludeBegin: true,\n excludeEnd: true,\n keywords: KEYWORDS,\n contains: [\n 'self',\n PROMPT,\n NUMBER,\n STRING,\n hljs.HASH_COMMENT_MODE\n ]\n }\n ]\n };\n SUBST.contains = [\n STRING,\n NUMBER,\n PROMPT\n ];\n\n return {\n name: 'Python',\n aliases: [\n 'py',\n 'gyp',\n 'ipython'\n ],\n unicodeRegex: true,\n keywords: KEYWORDS,\n illegal: /(<\\/|\\?)|=>/,\n contains: [\n PROMPT,\n NUMBER,\n {\n // very common convention\n scope: 'variable.language',\n match: /\\bself\\b/\n },\n {\n // eat \"if\" prior to string so that it won't accidentally be\n // labeled as an f-string\n beginKeywords: \"if\",\n relevance: 0\n },\n { match: /\\bor\\b/, scope: \"keyword\" },\n STRING,\n COMMENT_TYPE,\n hljs.HASH_COMMENT_MODE,\n {\n match: [\n /\\bdef/, /\\s+/,\n IDENT_RE,\n ],\n scope: {\n 1: \"keyword\",\n 3: \"title.function\"\n },\n contains: [ PARAMS ]\n },\n {\n variants: [\n {\n match: [\n /\\bclass/, /\\s+/,\n IDENT_RE, /\\s*/,\n /\\(\\s*/, IDENT_RE,/\\s*\\)/\n ],\n },\n {\n match: [\n /\\bclass/, /\\s+/,\n IDENT_RE\n ],\n }\n ],\n scope: {\n 1: \"keyword\",\n 3: \"title.class\",\n 6: \"title.class.inherited\",\n }\n },\n {\n className: 'meta',\n begin: /^[\\t ]*@/,\n end: /(?=#)|$/,\n contains: [\n NUMBER,\n PARAMS,\n STRING\n ]\n }\n ]\n };\n}\n\nmodule.exports = python;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTMwMy5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHdCQUF3QixVQUFVLEtBQUssYUFBYTtBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsY0FBYztBQUNkLFlBQVk7QUFDWjtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxjQUFjLEVBQUU7QUFDaEI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSw2QkFBNkIsVUFBVSxTQUFTLFVBQVUsUUFBUSxVQUFVO0FBQzVFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkIseUJBQXlCO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5REFBeUQ7QUFDekQ7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLFVBQVUsS0FBSyxXQUFXLGNBQWMsVUFBVSxXQUFXLFVBQVU7QUFDOUYsT0FBTztBQUNQO0FBQ0EsbUJBQW1CLFdBQVc7QUFDOUIsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlEQUF5RCxVQUFVO0FBQ25FLE9BQU87QUFDUDtBQUNBLDJDQUEyQyxVQUFVO0FBQ3JELE9BQU87QUFDUDtBQUNBLDRDQUE0QyxVQUFVO0FBQ3RELE9BQU87QUFDUDtBQUNBLGtEQUFrRCxVQUFVO0FBQzVELE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLFVBQVUsVUFBVSxVQUFVO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLFFBQVEsbUNBQW1DO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9vYnNpZGlhbi1taW5kbWFwLW5leHRnZW4vLi9ub2RlX21vZHVsZXMvLnBucG0vaGlnaGxpZ2h0LmpzQDExLjExLjEvbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3B5dGhvbi5qcz82ODA1Il0sInNvdXJjZXNDb250ZW50IjpbIi8qXG5MYW5ndWFnZTogUHl0aG9uXG5EZXNjcmlwdGlvbjogUHl0aG9uIGlzIGFuIGludGVycHJldGVkLCBvYmplY3Qtb3JpZW50ZWQsIGhpZ2gtbGV2ZWwgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2Ugd2l0aCBkeW5hbWljIHNlbWFudGljcy5cbldlYnNpdGU6IGh0dHBzOi8vd3d3LnB5dGhvbi5vcmdcbkNhdGVnb3J5OiBjb21tb25cbiovXG5cbmZ1bmN0aW9uIHB5dGhvbihobGpzKSB7XG4gIGNvbnN0IHJlZ2V4ID0gaGxqcy5yZWdleDtcbiAgY29uc3QgSURFTlRfUkUgPSAvW1xccHtYSURfU3RhcnR9X11cXHB7WElEX0NvbnRpbnVlfSovdTtcbiAgY29uc3QgUkVTRVJWRURfV09SRFMgPSBbXG4gICAgJ2FuZCcsXG4gICAgJ2FzJyxcbiAgICAnYXNzZXJ0JyxcbiAgICAnYXN5bmMnLFxuICAgICdhd2FpdCcsXG4gICAgJ2JyZWFrJyxcbiAgICAnY2FzZScsXG4gICAgJ2NsYXNzJyxcbiAgICAnY29udGludWUnLFxuICAgICdkZWYnLFxuICAgICdkZWwnLFxuICAgICdlbGlmJyxcbiAgICAnZWxzZScsXG4gICAgJ2V4Y2VwdCcsXG4gICAgJ2ZpbmFsbHknLFxuICAgICdmb3InLFxuICAgICdmcm9tJyxcbiAgICAnZ2xvYmFsJyxcbiAgICAnaWYnLFxuICAgICdpbXBvcnQnLFxuICAgICdpbicsXG4gICAgJ2lzJyxcbiAgICAnbGFtYmRhJyxcbiAgICAnbWF0Y2gnLFxuICAgICdub25sb2NhbHwxMCcsXG4gICAgJ25vdCcsXG4gICAgJ29yJyxcbiAgICAncGFzcycsXG4gICAgJ3JhaXNlJyxcbiAgICAncmV0dXJuJyxcbiAgICAndHJ5JyxcbiAgICAnd2hpbGUnLFxuICAgICd3aXRoJyxcbiAgICAneWllbGQnXG4gIF07XG5cbiAgY29uc3QgQlVJTFRfSU5TID0gW1xuICAgICdfX2ltcG9ydF9fJyxcbiAgICAnYWJzJyxcbiAgICAnYWxsJyxcbiAgICAnYW55JyxcbiAgICAnYXNjaWknLFxuICAgICdiaW4nLFxuICAgICdib29sJyxcbiAgICAnYnJlYWtwb2ludCcsXG4gICAgJ2J5dGVhcnJheScsXG4gICAgJ2J5dGVzJyxcbiAgICAnY2FsbGFibGUnLFxuICAgICdjaHInLFxuICAgICdjbGFzc21ldGhvZCcsXG4gICAgJ2NvbXBpbGUnLFxuICAgICdjb21wbGV4JyxcbiAgICAnZGVsYXR0cicsXG4gICAgJ2RpY3QnLFxuICAgICdkaXInLFxuICAgICdkaXZtb2QnLFxuICAgICdlbnVtZXJhdGUnLFxuICAgICdldmFsJyxcbiAgICAnZXhlYycsXG4gICAgJ2ZpbHRlcicsXG4gICAgJ2Zsb2F0JyxcbiAgICAnZm9ybWF0JyxcbiAgICAnZnJvemVuc2V0JyxcbiAgICAnZ2V0YXR0cicsXG4gICAgJ2dsb2JhbHMnLFxuICAgICdoYXNhdHRyJyxcbiAgICAnaGFzaCcsXG4gICAgJ2hlbHAnLFxuICAgICdoZXgnLFxuICAgICdpZCcsXG4gICAgJ2lucHV0JyxcbiAgICAnaW50JyxcbiAgICAnaXNpbnN0YW5jZScsXG4gICAgJ2lzc3ViY2xhc3MnLFxuICAgICdpdGVyJyxcbiAgICAnbGVuJyxcbiAgICAnbGlzdCcsXG4gICAgJ2xvY2FscycsXG4gICAgJ21hcCcsXG4gICAgJ21heCcsXG4gICAgJ21lbW9yeXZpZXcnLFxuICAgICdtaW4nLFxuICAgICduZXh0JyxcbiAgICAnb2JqZWN0JyxcbiAgICAnb2N0JyxcbiAgICAnb3BlbicsXG4gICAgJ29yZCcsXG4gICAgJ3BvdycsXG4gICAgJ3ByaW50JyxcbiAgICAncHJvcGVydHknLFxuICAgICdyYW5nZScsXG4gICAgJ3JlcHInLFxuICAgICdyZXZlcnNlZCcsXG4gICAgJ3JvdW5kJyxcbiAgICAnc2V0JyxcbiAgICAnc2V0YXR0cicsXG4gICAgJ3NsaWNlJyxcbiAgICAnc29ydGVkJyxcbiAgICAnc3RhdGljbWV0aG9kJyxcbiAgICAnc3RyJyxcbiAgICAnc3VtJyxcbiAgICAnc3VwZXInLFxuICAgICd0dXBsZScsXG4gICAgJ3R5cGUnLFxuICAgICd2YXJzJyxcbiAgICAnemlwJ1xuICBdO1xuXG4gIGNvbnN0IExJVEVSQUxTID0gW1xuICAgICdfX2RlYnVnX18nLFxuICAgICdFbGxpcHNpcycsXG4gICAgJ0ZhbHNlJyxcbiAgICAnTm9uZScsXG4gICAgJ05vdEltcGxlbWVudGVkJyxcbiAgICAnVHJ1ZSdcbiAgXTtcblxuICAvLyBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHlwaW5nLmh0bWxcbiAgLy8gVE9ETzogQ291bGQgdGhlc2UgYmUgc3VwcGxlbWVudGVkIGJ5IGEgQ2FtZWxDYXNlIG1hdGNoZXIgaW4gY2VydGFpblxuICAvLyBjb250ZXh0cywgbGVhdmluZyB0aGVzZSByZW1haW5pbmcgb25seSBmb3IgcmVsZXZhbmNlIGhpbnRpbmc/XG4gIGNvbnN0IFRZUEVTID0gW1xuICAgIFwiQW55XCIsXG4gICAgXCJDYWxsYWJsZVwiLFxuICAgIFwiQ29yb3V0aW5lXCIsXG4gICAgXCJEaWN0XCIsXG4gICAgXCJMaXN0XCIsXG4gICAgXCJMaXRlcmFsXCIsXG4gICAgXCJHZW5lcmljXCIsXG4gICAgXCJPcHRpb25hbFwiLFxuICAgIFwiU2VxdWVuY2VcIixcbiAgICBcIlNldFwiLFxuICAgIFwiVHVwbGVcIixcbiAgICBcIlR5cGVcIixcbiAgICBcIlVuaW9uXCJcbiAgXTtcblxuICBjb25zdCBLRVlXT1JEUyA9IHtcbiAgICAkcGF0dGVybjogL1tBLVphLXpdXFx3K3xfX1xcdytfXy8sXG4gICAga2V5d29yZDogUkVTRVJWRURfV09SRFMsXG4gICAgYnVpbHRfaW46IEJVSUxUX0lOUyxcbiAgICBsaXRlcmFsOiBMSVRFUkFMUyxcbiAgICB0eXBlOiBUWVBFU1xuICB9O1xuXG4gIGNvbnN0IFBST01QVCA9IHtcbiAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICBiZWdpbjogL14oPj4+fFxcLlxcLlxcLikgL1xuICB9O1xuXG4gIGNvbnN0IFNVQlNUID0ge1xuICAgIGNsYXNzTmFtZTogJ3N1YnN0JyxcbiAgICBiZWdpbjogL1xcey8sXG4gICAgZW5kOiAvXFx9LyxcbiAgICBrZXl3b3JkczogS0VZV09SRFMsXG4gICAgaWxsZWdhbDogLyMvXG4gIH07XG5cbiAgY29uc3QgTElURVJBTF9CUkFDS0VUID0ge1xuICAgIGJlZ2luOiAvXFx7XFx7LyxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcblxuICBjb25zdCBTVFJJTkcgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICBjb250YWluczogWyBobGpzLkJBQ0tTTEFTSF9FU0NBUEUgXSxcbiAgICB2YXJpYW50czogW1xuICAgICAge1xuICAgICAgICBiZWdpbjogLyhbdVVdfFtiQl18W3JSXXxbYkJdW3JSXXxbclJdW2JCXSk/JycnLyxcbiAgICAgICAgZW5kOiAvJycnLyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBobGpzLkJBQ0tTTEFTSF9FU0NBUEUsXG4gICAgICAgICAgUFJPTVBUXG4gICAgICAgIF0sXG4gICAgICAgIHJlbGV2YW5jZTogMTBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvKFt1VV18W2JCXXxbclJdfFtiQl1bclJdfFtyUl1bYkJdKT9cIlwiXCIvLFxuICAgICAgICBlbmQ6IC9cIlwiXCIvLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIGhsanMuQkFDS1NMQVNIX0VTQ0FQRSxcbiAgICAgICAgICBQUk9NUFRcbiAgICAgICAgXSxcbiAgICAgICAgcmVsZXZhbmNlOiAxMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC8oW2ZGXVtyUl18W3JSXVtmRl18W2ZGXSknJycvLFxuICAgICAgICBlbmQ6IC8nJycvLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIGhsanMuQkFDS1NMQVNIX0VTQ0FQRSxcbiAgICAgICAgICBQUk9NUFQsXG4gICAgICAgICAgTElURVJBTF9CUkFDS0VULFxuICAgICAgICAgIFNVQlNUXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvKFtmRl1bclJdfFtyUl1bZkZdfFtmRl0pXCJcIlwiLyxcbiAgICAgICAgZW5kOiAvXCJcIlwiLyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBobGpzLkJBQ0tTTEFTSF9FU0NBUEUsXG4gICAgICAgICAgUFJPTVBULFxuICAgICAgICAgIExJVEVSQUxfQlJBQ0tFVCxcbiAgICAgICAgICBTVUJTVFxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogLyhbdVVdfFtyUl0pJy8sXG4gICAgICAgIGVuZDogLycvLFxuICAgICAgICByZWxldmFuY2U6IDEwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogLyhbdVVdfFtyUl0pXCIvLFxuICAgICAgICBlbmQ6IC9cIi8sXG4gICAgICAgIHJlbGV2YW5jZTogMTBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvKFtiQl18W2JCXVtyUl18W3JSXVtiQl0pJy8sXG4gICAgICAgIGVuZDogLycvXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogLyhbYkJdfFtiQl1bclJdfFtyUl1bYkJdKVwiLyxcbiAgICAgICAgZW5kOiAvXCIvXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogLyhbZkZdW3JSXXxbclJdW2ZGXXxbZkZdKScvLFxuICAgICAgICBlbmQ6IC8nLyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBobGpzLkJBQ0tTTEFTSF9FU0NBUEUsXG4gICAgICAgICAgTElURVJBTF9CUkFDS0VULFxuICAgICAgICAgIFNVQlNUXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvKFtmRl1bclJdfFtyUl1bZkZdfFtmRl0pXCIvLFxuICAgICAgICBlbmQ6IC9cIi8sXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgaGxqcy5CQUNLU0xBU0hfRVNDQVBFLFxuICAgICAgICAgIExJVEVSQUxfQlJBQ0tFVCxcbiAgICAgICAgICBTVUJTVFxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERVxuICAgIF1cbiAgfTtcblxuICAvLyBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zLjkvcmVmZXJlbmNlL2xleGljYWxfYW5hbHlzaXMuaHRtbCNudW1lcmljLWxpdGVyYWxzXG4gIGNvbnN0IGRpZ2l0cGFydCA9ICdbMC05XShfP1swLTldKSonO1xuICBjb25zdCBwb2ludGZsb2F0ID0gYChcXFxcYigke2RpZ2l0cGFydH0pKT9cXFxcLigke2RpZ2l0cGFydH0pfFxcXFxiKCR7ZGlnaXRwYXJ0fSlcXFxcLmA7XG4gIC8vIFdoaXRlc3BhY2UgYWZ0ZXIgYSBudW1iZXIgKG9yIGFueSBsZXhpY2FsIHRva2VuKSBpcyBuZWVkZWQgb25seSBpZiBpdHMgYWJzZW5jZVxuICAvLyB3b3VsZCBjaGFuZ2UgdGhlIHRva2VuaXphdGlvblxuICAvLyBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zLjkvcmVmZXJlbmNlL2xleGljYWxfYW5hbHlzaXMuaHRtbCN3aGl0ZXNwYWNlLWJldHdlZW4tdG9rZW5zXG4gIC8vIFdlIGRldmlhdGUgc2xpZ2h0bHksIHJlcXVpcmluZyBhIHdvcmQgYm91bmRhcnkgb3IgYSBrZXl3b3JkXG4gIC8vIHRvIGF2b2lkIGFjY2lkZW50YWxseSByZWNvZ25pemluZyAqcHJlZml4ZXMqIChlLmcuLCBgMGAgaW4gYDB4NDFgIG9yIGAwOGAgb3IgYDBfXzFgKVxuICBjb25zdCBsb29rYWhlYWQgPSBgXFxcXGJ8JHtSRVNFUlZFRF9XT1JEUy5qb2luKCd8Jyl9YDtcbiAgY29uc3QgTlVNQkVSID0ge1xuICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgcmVsZXZhbmNlOiAwLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICAvLyBleHBvbmVudGZsb2F0LCBwb2ludGZsb2F0XG4gICAgICAvLyBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zLjkvcmVmZXJlbmNlL2xleGljYWxfYW5hbHlzaXMuaHRtbCNmbG9hdGluZy1wb2ludC1saXRlcmFsc1xuICAgICAgLy8gb3B0aW9uYWxseSBpbWFnaW5hcnlcbiAgICAgIC8vIGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMuOS9yZWZlcmVuY2UvbGV4aWNhbF9hbmFseXNpcy5odG1sI2ltYWdpbmFyeS1saXRlcmFsc1xuICAgICAgLy8gTm90ZTogbm8gbGVhZGluZyBcXGIgYmVjYXVzZSBmbG9hdHMgY2FuIHN0YXJ0IHdpdGggYSBkZWNpbWFsIHBvaW50XG4gICAgICAvLyBhbmQgd2UgZG9uJ3Qgd2FudCB0byBtaXNoYW5kbGUgZS5nLiBgZm4oLjUpYCxcbiAgICAgIC8vIG5vIHRyYWlsaW5nIFxcYiBmb3IgcG9pbnRmbG9hdCBiZWNhdXNlIGl0IGNhbiBlbmQgd2l0aCBhIGRlY2ltYWwgcG9pbnRcbiAgICAgIC8vIGFuZCB3ZSBkb24ndCB3YW50IHRvIG1pc2hhbmRsZSBlLmcuIGAwLi5oZXgoKWA7IHRoaXMgc2hvdWxkIGJlIHNhZmVcbiAgICAgIC8vIGJlY2F1c2UgYm90aCBNVVNUIGNvbnRhaW4gYSBkZWNpbWFsIHBvaW50IGFuZCBzbyBjYW5ub3QgYmUgY29uZnVzZWQgd2l0aFxuICAgICAgLy8gdGhlIGludGVyaW9yIHBhcnQgb2YgYW4gaWRlbnRpZmllclxuICAgICAge1xuICAgICAgICBiZWdpbjogYChcXFxcYigke2RpZ2l0cGFydH0pfCgke3BvaW50ZmxvYXR9KSlbZUVdWystXT8oJHtkaWdpdHBhcnR9KVtqSl0/KD89JHtsb29rYWhlYWR9KWBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiBgKCR7cG9pbnRmbG9hdH0pW2pKXT9gXG4gICAgICB9LFxuXG4gICAgICAvLyBkZWNpbnRlZ2VyLCBiaW5pbnRlZ2VyLCBvY3RpbnRlZ2VyLCBoZXhpbnRlZ2VyXG4gICAgICAvLyBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zLjkvcmVmZXJlbmNlL2xleGljYWxfYW5hbHlzaXMuaHRtbCNpbnRlZ2VyLWxpdGVyYWxzXG4gICAgICAvLyBvcHRpb25hbGx5IFwibG9uZ1wiIGluIFB5dGhvbiAyXG4gICAgICAvLyBodHRwczovL2RvY3MucHl0aG9uLm9yZy8yLjcvcmVmZXJlbmNlL2xleGljYWxfYW5hbHlzaXMuaHRtbCNpbnRlZ2VyLWFuZC1sb25nLWludGVnZXItbGl0ZXJhbHNcbiAgICAgIC8vIGRlY2ludGVnZXIgaXMgb3B0aW9uYWxseSBpbWFnaW5hcnlcbiAgICAgIC8vIGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMuOS9yZWZlcmVuY2UvbGV4aWNhbF9hbmFseXNpcy5odG1sI2ltYWdpbmFyeS1saXRlcmFsc1xuICAgICAge1xuICAgICAgICBiZWdpbjogYFxcXFxiKFsxLTldKF8/WzAtOV0pKnwwKyhfPzApKilbbExqSl0/KD89JHtsb29rYWhlYWR9KWBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiBgXFxcXGIwW2JCXShfP1swMV0pK1tsTF0/KD89JHtsb29rYWhlYWR9KWBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiBgXFxcXGIwW29PXShfP1swLTddKStbbExdPyg/PSR7bG9va2FoZWFkfSlgXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogYFxcXFxiMFt4WF0oXz9bMC05YS1mQS1GXSkrW2xMXT8oPz0ke2xvb2thaGVhZH0pYFxuICAgICAgfSxcblxuICAgICAgLy8gaW1hZ251bWJlciAoZGlnaXRwYXJ0LWJhc2VkKVxuICAgICAgLy8gaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy45L3JlZmVyZW5jZS9sZXhpY2FsX2FuYWx5c2lzLmh0bWwjaW1hZ2luYXJ5LWxpdGVyYWxzXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiBgXFxcXGIoJHtkaWdpdHBhcnR9KVtqSl0oPz0ke2xvb2thaGVhZH0pYFxuICAgICAgfVxuICAgIF1cbiAgfTtcbiAgY29uc3QgQ09NTUVOVF9UWVBFID0ge1xuICAgIGNsYXNzTmFtZTogXCJjb21tZW50XCIsXG4gICAgYmVnaW46IHJlZ2V4Lmxvb2thaGVhZCgvIyB0eXBlOi8pLFxuICAgIGVuZDogLyQvLFxuICAgIGtleXdvcmRzOiBLRVlXT1JEUyxcbiAgICBjb250YWluczogW1xuICAgICAgeyAvLyBwcmV2ZW50IGtleXdvcmRzIGZyb20gY29sb3JpbmcgYHR5cGVgXG4gICAgICAgIGJlZ2luOiAvIyB0eXBlOi9cbiAgICAgIH0sXG4gICAgICAvLyBjb21tZW50IHdpdGhpbiBhIGRhdGF0eXBlIGNvbW1lbnQgaW5jbHVkZXMgbm8ga2V5d29yZHNcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC8jLyxcbiAgICAgICAgZW5kOiAvXFxiXFxCLyxcbiAgICAgICAgZW5kc1dpdGhQYXJlbnQ6IHRydWVcbiAgICAgIH1cbiAgICBdXG4gIH07XG4gIGNvbnN0IFBBUkFNUyA9IHtcbiAgICBjbGFzc05hbWU6ICdwYXJhbXMnLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICAvLyBFeGNsdWRlIHBhcmFtcyBpbiBmdW5jdGlvbnMgd2l0aG91dCBwYXJhbXNcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiBcIlwiLFxuICAgICAgICBiZWdpbjogL1xcKFxccypcXCkvLFxuICAgICAgICBza2lwOiB0cnVlXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogL1xcKC8sXG4gICAgICAgIGVuZDogL1xcKS8sXG4gICAgICAgIGV4Y2x1ZGVCZWdpbjogdHJ1ZSxcbiAgICAgICAgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAga2V5d29yZHM6IEtFWVdPUkRTLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICdzZWxmJyxcbiAgICAgICAgICBQUk9NUFQsXG4gICAgICAgICAgTlVNQkVSLFxuICAgICAgICAgIFNUUklORyxcbiAgICAgICAgICBobGpzLkhBU0hfQ09NTUVOVF9NT0RFXG4gICAgICAgIF1cbiAgICAgIH1cbiAgICBdXG4gIH07XG4gIFNVQlNULmNvbnRhaW5zID0gW1xuICAgIFNUUklORyxcbiAgICBOVU1CRVIsXG4gICAgUFJPTVBUXG4gIF07XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnUHl0aG9uJyxcbiAgICBhbGlhc2VzOiBbXG4gICAgICAncHknLFxuICAgICAgJ2d5cCcsXG4gICAgICAnaXB5dGhvbidcbiAgICBdLFxuICAgIHVuaWNvZGVSZWdleDogdHJ1ZSxcbiAgICBrZXl3b3JkczogS0VZV09SRFMsXG4gICAgaWxsZWdhbDogLyg8XFwvfFxcPyl8PT4vLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBQUk9NUFQsXG4gICAgICBOVU1CRVIsXG4gICAgICB7XG4gICAgICAgIC8vIHZlcnkgY29tbW9uIGNvbnZlbnRpb25cbiAgICAgICAgc2NvcGU6ICd2YXJpYWJsZS5sYW5ndWFnZScsXG4gICAgICAgIG1hdGNoOiAvXFxic2VsZlxcYi9cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIC8vIGVhdCBcImlmXCIgcHJpb3IgdG8gc3RyaW5nIHNvIHRoYXQgaXQgd29uJ3QgYWNjaWRlbnRhbGx5IGJlXG4gICAgICAgIC8vIGxhYmVsZWQgYXMgYW4gZi1zdHJpbmdcbiAgICAgICAgYmVnaW5LZXl3b3JkczogXCJpZlwiLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7IG1hdGNoOiAvXFxib3JcXGIvLCBzY29wZTogXCJrZXl3b3JkXCIgfSxcbiAgICAgIFNUUklORyxcbiAgICAgIENPTU1FTlRfVFlQRSxcbiAgICAgIGhsanMuSEFTSF9DT01NRU5UX01PREUsXG4gICAgICB7XG4gICAgICAgIG1hdGNoOiBbXG4gICAgICAgICAgL1xcYmRlZi8sIC9cXHMrLyxcbiAgICAgICAgICBJREVOVF9SRSxcbiAgICAgICAgXSxcbiAgICAgICAgc2NvcGU6IHtcbiAgICAgICAgICAxOiBcImtleXdvcmRcIixcbiAgICAgICAgICAzOiBcInRpdGxlLmZ1bmN0aW9uXCJcbiAgICAgICAgfSxcbiAgICAgICAgY29udGFpbnM6IFsgUEFSQU1TIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbWF0Y2g6IFtcbiAgICAgICAgICAgICAgL1xcYmNsYXNzLywgL1xccysvLFxuICAgICAgICAgICAgICBJREVOVF9SRSwgL1xccyovLFxuICAgICAgICAgICAgICAvXFwoXFxzKi8sIElERU5UX1JFLC9cXHMqXFwpL1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG1hdGNoOiBbXG4gICAgICAgICAgICAgIC9cXGJjbGFzcy8sIC9cXHMrLyxcbiAgICAgICAgICAgICAgSURFTlRfUkVcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICBzY29wZToge1xuICAgICAgICAgIDE6IFwia2V5d29yZFwiLFxuICAgICAgICAgIDM6IFwidGl0bGUuY2xhc3NcIixcbiAgICAgICAgICA2OiBcInRpdGxlLmNsYXNzLmluaGVyaXRlZFwiLFxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICAgICAgYmVnaW46IC9eW1xcdCBdKkAvLFxuICAgICAgICBlbmQ6IC8oPz0jKXwkLyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBOVU1CRVIsXG4gICAgICAgICAgUEFSQU1TLFxuICAgICAgICAgIFNUUklOR1xuICAgICAgICBdXG4gICAgICB9XG4gICAgXVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHB5dGhvbjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1303\n")},1330:module=>{eval('/*\nLanguage: Excel formulae\nAuthor: Victor Zhou \nDescription: Excel formulae\nWebsite: https://products.office.com/en-us/excel/\nCategory: enterprise\n*/\n\n/** @type LanguageFn */\nfunction excel(hljs) {\n // built-in functions imported from https://web.archive.org/web/20241205190205/https://support.microsoft.com/en-us/office/excel-functions-alphabetical-b3944572-255d-4efb-bb96-c6d90033e188\n const BUILT_INS = [\n "ABS",\n "ACCRINT",\n "ACCRINTM",\n "ACOS",\n "ACOSH",\n "ACOT",\n "ACOTH",\n "AGGREGATE",\n "ADDRESS",\n "AMORDEGRC",\n "AMORLINC",\n "AND",\n "ARABIC",\n "AREAS",\n "ARRAYTOTEXT",\n "ASC",\n "ASIN",\n "ASINH",\n "ATAN",\n "ATAN2",\n "ATANH",\n "AVEDEV",\n "AVERAGE",\n "AVERAGEA",\n "AVERAGEIF",\n "AVERAGEIFS",\n "BAHTTEXT",\n "BASE",\n "BESSELI",\n "BESSELJ",\n "BESSELK",\n "BESSELY",\n "BETADIST",\n "BETA.DIST",\n "BETAINV",\n "BETA.INV",\n "BIN2DEC",\n "BIN2HEX",\n "BIN2OCT",\n "BINOMDIST",\n "BINOM.DIST",\n "BINOM.DIST.RANGE",\n "BINOM.INV",\n "BITAND",\n "BITLSHIFT",\n "BITOR",\n "BITRSHIFT",\n "BITXOR",\n "BYCOL",\n "BYROW",\n "CALL",\n "CEILING",\n "CEILING.MATH",\n "CEILING.PRECISE",\n "CELL",\n "CHAR",\n "CHIDIST",\n "CHIINV",\n "CHITEST",\n "CHISQ.DIST",\n "CHISQ.DIST.RT",\n "CHISQ.INV",\n "CHISQ.INV.RT",\n "CHISQ.TEST",\n "CHOOSE",\n "CHOOSECOLS",\n "CHOOSEROWS",\n "CLEAN",\n "CODE",\n "COLUMN",\n "COLUMNS",\n "COMBIN",\n "COMBINA",\n "COMPLEX",\n "CONCAT",\n "CONCATENATE",\n "CONFIDENCE",\n "CONFIDENCE.NORM",\n "CONFIDENCE.T",\n "CONVERT",\n "CORREL",\n "COS",\n "COSH",\n "COT",\n "COTH",\n "COUNT",\n "COUNTA",\n "COUNTBLANK",\n "COUNTIF",\n "COUNTIFS",\n "COUPDAYBS",\n "COUPDAYS",\n "COUPDAYSNC",\n "COUPNCD",\n "COUPNUM",\n "COUPPCD",\n "COVAR",\n "COVARIANCE.P",\n "COVARIANCE.S",\n "CRITBINOM",\n "CSC",\n "CSCH",\n "CUBEKPIMEMBER",\n "CUBEMEMBER",\n "CUBEMEMBERPROPERTY",\n "CUBERANKEDMEMBER",\n "CUBESET",\n "CUBESETCOUNT",\n "CUBEVALUE",\n "CUMIPMT",\n "CUMPRINC",\n "DATE",\n "DATEDIF",\n "DATEVALUE",\n "DAVERAGE",\n "DAY",\n "DAYS",\n "DAYS360",\n "DB",\n "DBCS",\n "DCOUNT",\n "DCOUNTA",\n "DDB",\n "DEC2BIN",\n "DEC2HEX",\n "DEC2OCT",\n "DECIMAL",\n "DEGREES",\n "DELTA",\n "DEVSQ",\n "DGET",\n "DISC",\n "DMAX",\n "DMIN",\n "DOLLAR",\n "DOLLARDE",\n "DOLLARFR",\n "DPRODUCT",\n "DROP",\n "DSTDEV",\n "DSTDEVP",\n "DSUM",\n "DURATION",\n "DVAR",\n "DVARP",\n "EDATE",\n "EFFECT",\n "ENCODEURL",\n "EOMONTH",\n "ERF",\n "ERF.PRECISE",\n "ERFC",\n "ERFC.PRECISE",\n "ERROR.TYPE",\n "EUROCONVERT",\n "EVEN",\n "EXACT",\n "EXP",\n "EXPAND",\n "EXPON.DIST",\n "EXPONDIST",\n "FACT",\n "FACTDOUBLE",\n "FALSE",\n "F.DIST",\n "FDIST",\n "F.DIST.RT",\n "FILTER",\n "FILTERXML",\n "FIND",\n "FINDB",\n "F.INV",\n "F.INV.RT",\n "FINV",\n "FISHER",\n "FISHERINV",\n "FIXED",\n "FLOOR",\n "FLOOR.MATH",\n "FLOOR.PRECISE",\n "FORECAST",\n "FORECAST.ETS",\n "FORECAST.ETS.CONFINT",\n "FORECAST.ETS.SEASONALITY",\n "FORECAST.ETS.STAT",\n "FORECAST.LINEAR",\n "FORMULATEXT",\n "FREQUENCY",\n "F.TEST",\n "FTEST",\n "FV",\n "FVSCHEDULE",\n "GAMMA",\n "GAMMA.DIST",\n "GAMMADIST",\n "GAMMA.INV",\n "GAMMAINV",\n "GAMMALN",\n "GAMMALN.PRECISE",\n "GAUSS",\n "GCD",\n "GEOMEAN",\n "GESTEP",\n "GETPIVOTDATA",\n "GROWTH",\n "HARMEAN",\n "HEX2BIN",\n "HEX2DEC",\n "HEX2OCT",\n "HLOOKUP",\n "HOUR",\n "HSTACK",\n "HYPERLINK",\n "HYPGEOM.DIST",\n "HYPGEOMDIST",\n "IF",\n "IFERROR",\n "IFNA",\n "IFS",\n "IMABS",\n "IMAGE",\n "IMAGINARY",\n "IMARGUMENT",\n "IMCONJUGATE",\n "IMCOS",\n "IMCOSH",\n "IMCOT",\n "IMCSC",\n "IMCSCH",\n "IMDIV",\n "IMEXP",\n "IMLN",\n "IMLOG10",\n "IMLOG2",\n "IMPOWER",\n "IMPRODUCT",\n "IMREAL",\n "IMSEC",\n "IMSECH",\n "IMSIN",\n "IMSINH",\n "IMSQRT",\n "IMSUB",\n "IMSUM",\n "IMTAN",\n "INDEX",\n "INDIRECT",\n "INFO",\n "INT",\n "INTERCEPT",\n "INTRATE",\n "IPMT",\n "IRR",\n "ISBLANK",\n "ISERR",\n "ISERROR",\n "ISEVEN",\n "ISFORMULA",\n "ISLOGICAL",\n "ISNA",\n "ISNONTEXT",\n "ISNUMBER",\n "ISODD",\n "ISOMITTED",\n "ISREF",\n "ISTEXT",\n "ISO.CEILING",\n "ISOWEEKNUM",\n "ISPMT",\n "JIS",\n "KURT",\n "LAMBDA",\n "LARGE",\n "LCM",\n "LEFT",\n "LEFTB",\n "LEN",\n "LENB",\n "LET",\n "LINEST",\n "LN",\n "LOG",\n "LOG10",\n "LOGEST",\n "LOGINV",\n "LOGNORM.DIST",\n "LOGNORMDIST",\n "LOGNORM.INV",\n "LOOKUP",\n "LOWER",\n "MAKEARRAY",\n "MAP",\n "MATCH",\n "MAX",\n "MAXA",\n "MAXIFS",\n "MDETERM",\n "MDURATION",\n "MEDIAN",\n "MID",\n "MIDB",\n "MIN",\n "MINIFS",\n "MINA",\n "MINUTE",\n "MINVERSE",\n "MIRR",\n "MMULT",\n "MOD",\n "MODE",\n "MODE.MULT",\n "MODE.SNGL",\n "MONTH",\n "MROUND",\n "MULTINOMIAL",\n "MUNIT",\n "N",\n "NA",\n "NEGBINOM.DIST",\n "NEGBINOMDIST",\n "NETWORKDAYS",\n "NETWORKDAYS.INTL",\n "NOMINAL",\n "NORM.DIST",\n "NORMDIST",\n "NORMINV",\n "NORM.INV",\n "NORM.S.DIST",\n "NORMSDIST",\n "NORM.S.INV",\n "NORMSINV",\n "NOT",\n "NOW",\n "NPER",\n "NPV",\n "NUMBERVALUE",\n "OCT2BIN",\n "OCT2DEC",\n "OCT2HEX",\n "ODD",\n "ODDFPRICE",\n "ODDFYIELD",\n "ODDLPRICE",\n "ODDLYIELD",\n "OFFSET",\n "OR",\n "PDURATION",\n "PEARSON",\n "PERCENTILE.EXC",\n "PERCENTILE.INC",\n "PERCENTILE",\n "PERCENTRANK.EXC",\n "PERCENTRANK.INC",\n "PERCENTRANK",\n "PERMUT",\n "PERMUTATIONA",\n "PHI",\n "PHONETIC",\n "PI",\n "PMT",\n "POISSON.DIST",\n "POISSON",\n "POWER",\n "PPMT",\n "PRICE",\n "PRICEDISC",\n "PRICEMAT",\n "PROB",\n "PRODUCT",\n "PROPER",\n "PV",\n "QUARTILE",\n "QUARTILE.EXC",\n "QUARTILE.INC",\n "QUOTIENT",\n "RADIANS",\n "RAND",\n "RANDARRAY",\n "RANDBETWEEN",\n "RANK.AVG",\n "RANK.EQ",\n "RANK",\n "RATE",\n "RECEIVED",\n "REDUCE",\n "REGISTER.ID",\n "REPLACE",\n "REPLACEB",\n "REPT",\n "RIGHT",\n "RIGHTB",\n "ROMAN",\n "ROUND",\n "ROUNDDOWN",\n "ROUNDUP",\n "ROW",\n "ROWS",\n "RRI",\n "RSQ",\n "RTD",\n "SCAN",\n "SEARCH",\n "SEARCHB",\n "SEC",\n "SECH",\n "SECOND",\n "SEQUENCE",\n "SERIESSUM",\n "SHEET",\n "SHEETS",\n "SIGN",\n "SIN",\n "SINH",\n "SKEW",\n "SKEW.P",\n "SLN",\n "SLOPE",\n "SMALL",\n "SORT",\n "SORTBY",\n "SQRT",\n "SQRTPI",\n "SQL.REQUEST",\n "STANDARDIZE",\n "STOCKHISTORY",\n "STDEV",\n "STDEV.P",\n "STDEV.S",\n "STDEVA",\n "STDEVP",\n "STDEVPA",\n "STEYX",\n "SUBSTITUTE",\n "SUBTOTAL",\n "SUM",\n "SUMIF",\n "SUMIFS",\n "SUMPRODUCT",\n "SUMSQ",\n "SUMX2MY2",\n "SUMX2PY2",\n "SUMXMY2",\n "SWITCH",\n "SYD",\n "T",\n "TAN",\n "TANH",\n "TAKE",\n "TBILLEQ",\n "TBILLPRICE",\n "TBILLYIELD",\n "T.DIST",\n "T.DIST.2T",\n "T.DIST.RT",\n "TDIST",\n "TEXT",\n "TEXTAFTER",\n "TEXTBEFORE",\n "TEXTJOIN",\n "TEXTSPLIT",\n "TIME",\n "TIMEVALUE",\n "T.INV",\n "T.INV.2T",\n "TINV",\n "TOCOL",\n "TOROW",\n "TODAY",\n "TRANSPOSE",\n "TREND",\n "TRIM",\n "TRIMMEAN",\n "TRUE",\n "TRUNC",\n "T.TEST",\n "TTEST",\n "TYPE",\n "UNICHAR",\n "UNICODE",\n "UNIQUE",\n "UPPER",\n "VALUE",\n "VALUETOTEXT",\n "VAR",\n "VAR.P",\n "VAR.S",\n "VARA",\n "VARP",\n "VARPA",\n "VDB",\n "VLOOKUP",\n "VSTACK",\n "WEBSERVICE",\n "WEEKDAY",\n "WEEKNUM",\n "WEIBULL",\n "WEIBULL.DIST",\n "WORKDAY",\n "WORKDAY.INTL",\n "WRAPCOLS",\n "WRAPROWS",\n "XIRR",\n "XLOOKUP",\n "XMATCH",\n "XNPV",\n "XOR",\n "YEAR",\n "YEARFRAC",\n "YIELD",\n "YIELDDISC",\n "YIELDMAT",\n "Z.TEST",\n "ZTEST"\n ];\n return {\n name: \'Excel formulae\',\n aliases: [\n \'xlsx\',\n \'xls\'\n ],\n case_insensitive: true,\n keywords: {\n $pattern: /[a-zA-Z][\\w\\.]*/,\n built_in: BUILT_INS\n },\n contains: [\n {\n /* matches a beginning equal sign found in Excel formula examples */\n begin: /^=/,\n end: /[^=]/,\n returnEnd: true,\n illegal: /=/, /* only allow single equal sign at front of line */\n relevance: 10\n },\n /* technically, there can be more than 2 letters in column names, but this prevents conflict with some keywords */\n {\n /* matches a reference to a single cell */\n className: \'symbol\',\n begin: /\\b[A-Z]{1,2}\\d+\\b/,\n end: /[^\\d]/,\n excludeEnd: true,\n relevance: 0\n },\n {\n /* matches a reference to a range of cells */\n className: \'symbol\',\n begin: /[A-Z]{0,2}\\d*:[A-Z]{0,2}\\d*/,\n relevance: 0\n },\n hljs.BACKSLASH_ESCAPE,\n hljs.QUOTE_STRING_MODE,\n {\n className: \'number\',\n begin: hljs.NUMBER_RE + \'(%)?\',\n relevance: 0\n },\n /* Excel formula comments are done by putting the comment in a function call to N() */\n hljs.COMMENT(/\\bN\\(/, /\\)/,\n {\n excludeBegin: true,\n excludeEnd: true,\n illegal: /\\n/\n })\n ]\n };\n}\n\nmodule.exports = excel;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTMzMC5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixJQUFJO0FBQzVCO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxzQkFBc0IsSUFBSSxVQUFVLElBQUk7QUFDeEM7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9vYnNpZGlhbi1taW5kbWFwLW5leHRnZW4vLi9ub2RlX21vZHVsZXMvLnBucG0vaGlnaGxpZ2h0LmpzQDExLjExLjEvbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2V4Y2VsLmpzP2VmNjAiXSwic291cmNlc0NvbnRlbnQiOlsiLypcbkxhbmd1YWdlOiBFeGNlbCBmb3JtdWxhZVxuQXV0aG9yOiBWaWN0b3IgWmhvdSA8T2lDTXVka2lwc0B1c2Vycy5ub3JlcGx5LmdpdGh1Yi5jb20+XG5EZXNjcmlwdGlvbjogRXhjZWwgZm9ybXVsYWVcbldlYnNpdGU6IGh0dHBzOi8vcHJvZHVjdHMub2ZmaWNlLmNvbS9lbi11cy9leGNlbC9cbkNhdGVnb3J5OiBlbnRlcnByaXNlXG4qL1xuXG4vKiogQHR5cGUgTGFuZ3VhZ2VGbiAqL1xuZnVuY3Rpb24gZXhjZWwoaGxqcykge1xuICAvLyBidWlsdC1pbiBmdW5jdGlvbnMgaW1wb3J0ZWQgZnJvbSBodHRwczovL3dlYi5hcmNoaXZlLm9yZy93ZWIvMjAyNDEyMDUxOTAyMDUvaHR0cHM6Ly9zdXBwb3J0Lm1pY3Jvc29mdC5jb20vZW4tdXMvb2ZmaWNlL2V4Y2VsLWZ1bmN0aW9ucy1hbHBoYWJldGljYWwtYjM5NDQ1NzItMjU1ZC00ZWZiLWJiOTYtYzZkOTAwMzNlMTg4XG4gIGNvbnN0IEJVSUxUX0lOUyA9IFtcbiAgICBcIkFCU1wiLFxuICAgIFwiQUNDUklOVFwiLFxuICAgIFwiQUNDUklOVE1cIixcbiAgICBcIkFDT1NcIixcbiAgICBcIkFDT1NIXCIsXG4gICAgXCJBQ09UXCIsXG4gICAgXCJBQ09USFwiLFxuICAgIFwiQUdHUkVHQVRFXCIsXG4gICAgXCJBRERSRVNTXCIsXG4gICAgXCJBTU9SREVHUkNcIixcbiAgICBcIkFNT1JMSU5DXCIsXG4gICAgXCJBTkRcIixcbiAgICBcIkFSQUJJQ1wiLFxuICAgIFwiQVJFQVNcIixcbiAgICBcIkFSUkFZVE9URVhUXCIsXG4gICAgXCJBU0NcIixcbiAgICBcIkFTSU5cIixcbiAgICBcIkFTSU5IXCIsXG4gICAgXCJBVEFOXCIsXG4gICAgXCJBVEFOMlwiLFxuICAgIFwiQVRBTkhcIixcbiAgICBcIkFWRURFVlwiLFxuICAgIFwiQVZFUkFHRVwiLFxuICAgIFwiQVZFUkFHRUFcIixcbiAgICBcIkFWRVJBR0VJRlwiLFxuICAgIFwiQVZFUkFHRUlGU1wiLFxuICAgIFwiQkFIVFRFWFRcIixcbiAgICBcIkJBU0VcIixcbiAgICBcIkJFU1NFTElcIixcbiAgICBcIkJFU1NFTEpcIixcbiAgICBcIkJFU1NFTEtcIixcbiAgICBcIkJFU1NFTFlcIixcbiAgICBcIkJFVEFESVNUXCIsXG4gICAgXCJCRVRBLkRJU1RcIixcbiAgICBcIkJFVEFJTlZcIixcbiAgICBcIkJFVEEuSU5WXCIsXG4gICAgXCJCSU4yREVDXCIsXG4gICAgXCJCSU4ySEVYXCIsXG4gICAgXCJCSU4yT0NUXCIsXG4gICAgXCJCSU5PTURJU1RcIixcbiAgICBcIkJJTk9NLkRJU1RcIixcbiAgICBcIkJJTk9NLkRJU1QuUkFOR0VcIixcbiAgICBcIkJJTk9NLklOVlwiLFxuICAgIFwiQklUQU5EXCIsXG4gICAgXCJCSVRMU0hJRlRcIixcbiAgICBcIkJJVE9SXCIsXG4gICAgXCJCSVRSU0hJRlRcIixcbiAgICBcIkJJVFhPUlwiLFxuICAgIFwiQllDT0xcIixcbiAgICBcIkJZUk9XXCIsXG4gICAgXCJDQUxMXCIsXG4gICAgXCJDRUlMSU5HXCIsXG4gICAgXCJDRUlMSU5HLk1BVEhcIixcbiAgICBcIkNFSUxJTkcuUFJFQ0lTRVwiLFxuICAgIFwiQ0VMTFwiLFxuICAgIFwiQ0hBUlwiLFxuICAgIFwiQ0hJRElTVFwiLFxuICAgIFwiQ0hJSU5WXCIsXG4gICAgXCJDSElURVNUXCIsXG4gICAgXCJDSElTUS5ESVNUXCIsXG4gICAgXCJDSElTUS5ESVNULlJUXCIsXG4gICAgXCJDSElTUS5JTlZcIixcbiAgICBcIkNISVNRLklOVi5SVFwiLFxuICAgIFwiQ0hJU1EuVEVTVFwiLFxuICAgIFwiQ0hPT1NFXCIsXG4gICAgXCJDSE9PU0VDT0xTXCIsXG4gICAgXCJDSE9PU0VST1dTXCIsXG4gICAgXCJDTEVBTlwiLFxuICAgIFwiQ09ERVwiLFxuICAgIFwiQ09MVU1OXCIsXG4gICAgXCJDT0xVTU5TXCIsXG4gICAgXCJDT01CSU5cIixcbiAgICBcIkNPTUJJTkFcIixcbiAgICBcIkNPTVBMRVhcIixcbiAgICBcIkNPTkNBVFwiLFxuICAgIFwiQ09OQ0FURU5BVEVcIixcbiAgICBcIkNPTkZJREVOQ0VcIixcbiAgICBcIkNPTkZJREVOQ0UuTk9STVwiLFxuICAgIFwiQ09ORklERU5DRS5UXCIsXG4gICAgXCJDT05WRVJUXCIsXG4gICAgXCJDT1JSRUxcIixcbiAgICBcIkNPU1wiLFxuICAgIFwiQ09TSFwiLFxuICAgIFwiQ09UXCIsXG4gICAgXCJDT1RIXCIsXG4gICAgXCJDT1VOVFwiLFxuICAgIFwiQ09VTlRBXCIsXG4gICAgXCJDT1VOVEJMQU5LXCIsXG4gICAgXCJDT1VOVElGXCIsXG4gICAgXCJDT1VOVElGU1wiLFxuICAgIFwiQ09VUERBWUJTXCIsXG4gICAgXCJDT1VQREFZU1wiLFxuICAgIFwiQ09VUERBWVNOQ1wiLFxuICAgIFwiQ09VUE5DRFwiLFxuICAgIFwiQ09VUE5VTVwiLFxuICAgIFwiQ09VUFBDRFwiLFxuICAgIFwiQ09WQVJcIixcbiAgICBcIkNPVkFSSUFOQ0UuUFwiLFxuICAgIFwiQ09WQVJJQU5DRS5TXCIsXG4gICAgXCJDUklUQklOT01cIixcbiAgICBcIkNTQ1wiLFxuICAgIFwiQ1NDSFwiLFxuICAgIFwiQ1VCRUtQSU1FTUJFUlwiLFxuICAgIFwiQ1VCRU1FTUJFUlwiLFxuICAgIFwiQ1VCRU1FTUJFUlBST1BFUlRZXCIsXG4gICAgXCJDVUJFUkFOS0VETUVNQkVSXCIsXG4gICAgXCJDVUJFU0VUXCIsXG4gICAgXCJDVUJFU0VUQ09VTlRcIixcbiAgICBcIkNVQkVWQUxVRVwiLFxuICAgIFwiQ1VNSVBNVFwiLFxuICAgIFwiQ1VNUFJJTkNcIixcbiAgICBcIkRBVEVcIixcbiAgICBcIkRBVEVESUZcIixcbiAgICBcIkRBVEVWQUxVRVwiLFxuICAgIFwiREFWRVJBR0VcIixcbiAgICBcIkRBWVwiLFxuICAgIFwiREFZU1wiLFxuICAgIFwiREFZUzM2MFwiLFxuICAgIFwiREJcIixcbiAgICBcIkRCQ1NcIixcbiAgICBcIkRDT1VOVFwiLFxuICAgIFwiRENPVU5UQVwiLFxuICAgIFwiRERCXCIsXG4gICAgXCJERUMyQklOXCIsXG4gICAgXCJERUMySEVYXCIsXG4gICAgXCJERUMyT0NUXCIsXG4gICAgXCJERUNJTUFMXCIsXG4gICAgXCJERUdSRUVTXCIsXG4gICAgXCJERUxUQVwiLFxuICAgIFwiREVWU1FcIixcbiAgICBcIkRHRVRcIixcbiAgICBcIkRJU0NcIixcbiAgICBcIkRNQVhcIixcbiAgICBcIkRNSU5cIixcbiAgICBcIkRPTExBUlwiLFxuICAgIFwiRE9MTEFSREVcIixcbiAgICBcIkRPTExBUkZSXCIsXG4gICAgXCJEUFJPRFVDVFwiLFxuICAgIFwiRFJPUFwiLFxuICAgIFwiRFNUREVWXCIsXG4gICAgXCJEU1RERVZQXCIsXG4gICAgXCJEU1VNXCIsXG4gICAgXCJEVVJBVElPTlwiLFxuICAgIFwiRFZBUlwiLFxuICAgIFwiRFZBUlBcIixcbiAgICBcIkVEQVRFXCIsXG4gICAgXCJFRkZFQ1RcIixcbiAgICBcIkVOQ09ERVVSTFwiLFxuICAgIFwiRU9NT05USFwiLFxuICAgIFwiRVJGXCIsXG4gICAgXCJFUkYuUFJFQ0lTRVwiLFxuICAgIFwiRVJGQ1wiLFxuICAgIFwiRVJGQy5QUkVDSVNFXCIsXG4gICAgXCJFUlJPUi5UWVBFXCIsXG4gICAgXCJFVVJPQ09OVkVSVFwiLFxuICAgIFwiRVZFTlwiLFxuICAgIFwiRVhBQ1RcIixcbiAgICBcIkVYUFwiLFxuICAgIFwiRVhQQU5EXCIsXG4gICAgXCJFWFBPTi5ESVNUXCIsXG4gICAgXCJFWFBPTkRJU1RcIixcbiAgICBcIkZBQ1RcIixcbiAgICBcIkZBQ1RET1VCTEVcIixcbiAgICBcIkZBTFNFXCIsXG4gICAgXCJGLkRJU1RcIixcbiAgICBcIkZESVNUXCIsXG4gICAgXCJGLkRJU1QuUlRcIixcbiAgICBcIkZJTFRFUlwiLFxuICAgIFwiRklMVEVSWE1MXCIsXG4gICAgXCJGSU5EXCIsXG4gICAgXCJGSU5EQlwiLFxuICAgIFwiRi5JTlZcIixcbiAgICBcIkYuSU5WLlJUXCIsXG4gICAgXCJGSU5WXCIsXG4gICAgXCJGSVNIRVJcIixcbiAgICBcIkZJU0hFUklOVlwiLFxuICAgIFwiRklYRURcIixcbiAgICBcIkZMT09SXCIsXG4gICAgXCJGTE9PUi5NQVRIXCIsXG4gICAgXCJGTE9PUi5QUkVDSVNFXCIsXG4gICAgXCJGT1JFQ0FTVFwiLFxuICAgIFwiRk9SRUNBU1QuRVRTXCIsXG4gICAgXCJGT1JFQ0FTVC5FVFMuQ09ORklOVFwiLFxuICAgIFwiRk9SRUNBU1QuRVRTLlNFQVNPTkFMSVRZXCIsXG4gICAgXCJGT1JFQ0FTVC5FVFMuU1RBVFwiLFxuICAgIFwiRk9SRUNBU1QuTElORUFSXCIsXG4gICAgXCJGT1JNVUxBVEVYVFwiLFxuICAgIFwiRlJFUVVFTkNZXCIsXG4gICAgXCJGLlRFU1RcIixcbiAgICBcIkZURVNUXCIsXG4gICAgXCJGVlwiLFxuICAgIFwiRlZTQ0hFRFVMRVwiLFxuICAgIFwiR0FNTUFcIixcbiAgICBcIkdBTU1BLkRJU1RcIixcbiAgICBcIkdBTU1BRElTVFwiLFxuICAgIFwiR0FNTUEuSU5WXCIsXG4gICAgXCJHQU1NQUlOVlwiLFxuICAgIFwiR0FNTUFMTlwiLFxuICAgIFwiR0FNTUFMTi5QUkVDSVNFXCIsXG4gICAgXCJHQVVTU1wiLFxuICAgIFwiR0NEXCIsXG4gICAgXCJHRU9NRUFOXCIsXG4gICAgXCJHRVNURVBcIixcbiAgICBcIkdFVFBJVk9UREFUQVwiLFxuICAgIFwiR1JPV1RIXCIsXG4gICAgXCJIQVJNRUFOXCIsXG4gICAgXCJIRVgyQklOXCIsXG4gICAgXCJIRVgyREVDXCIsXG4gICAgXCJIRVgyT0NUXCIsXG4gICAgXCJITE9PS1VQXCIsXG4gICAgXCJIT1VSXCIsXG4gICAgXCJIU1RBQ0tcIixcbiAgICBcIkhZUEVSTElOS1wiLFxuICAgIFwiSFlQR0VPTS5ESVNUXCIsXG4gICAgXCJIWVBHRU9NRElTVFwiLFxuICAgIFwiSUZcIixcbiAgICBcIklGRVJST1JcIixcbiAgICBcIklGTkFcIixcbiAgICBcIklGU1wiLFxuICAgIFwiSU1BQlNcIixcbiAgICBcIklNQUdFXCIsXG4gICAgXCJJTUFHSU5BUllcIixcbiAgICBcIklNQVJHVU1FTlRcIixcbiAgICBcIklNQ09OSlVHQVRFXCIsXG4gICAgXCJJTUNPU1wiLFxuICAgIFwiSU1DT1NIXCIsXG4gICAgXCJJTUNPVFwiLFxuICAgIFwiSU1DU0NcIixcbiAgICBcIklNQ1NDSFwiLFxuICAgIFwiSU1ESVZcIixcbiAgICBcIklNRVhQXCIsXG4gICAgXCJJTUxOXCIsXG4gICAgXCJJTUxPRzEwXCIsXG4gICAgXCJJTUxPRzJcIixcbiAgICBcIklNUE9XRVJcIixcbiAgICBcIklNUFJPRFVDVFwiLFxuICAgIFwiSU1SRUFMXCIsXG4gICAgXCJJTVNFQ1wiLFxuICAgIFwiSU1TRUNIXCIsXG4gICAgXCJJTVNJTlwiLFxuICAgIFwiSU1TSU5IXCIsXG4gICAgXCJJTVNRUlRcIixcbiAgICBcIklNU1VCXCIsXG4gICAgXCJJTVNVTVwiLFxuICAgIFwiSU1UQU5cIixcbiAgICBcIklOREVYXCIsXG4gICAgXCJJTkRJUkVDVFwiLFxuICAgIFwiSU5GT1wiLFxuICAgIFwiSU5UXCIsXG4gICAgXCJJTlRFUkNFUFRcIixcbiAgICBcIklOVFJBVEVcIixcbiAgICBcIklQTVRcIixcbiAgICBcIklSUlwiLFxuICAgIFwiSVNCTEFOS1wiLFxuICAgIFwiSVNFUlJcIixcbiAgICBcIklTRVJST1JcIixcbiAgICBcIklTRVZFTlwiLFxuICAgIFwiSVNGT1JNVUxBXCIsXG4gICAgXCJJU0xPR0lDQUxcIixcbiAgICBcIklTTkFcIixcbiAgICBcIklTTk9OVEVYVFwiLFxuICAgIFwiSVNOVU1CRVJcIixcbiAgICBcIklTT0REXCIsXG4gICAgXCJJU09NSVRURURcIixcbiAgICBcIklTUkVGXCIsXG4gICAgXCJJU1RFWFRcIixcbiAgICBcIklTTy5DRUlMSU5HXCIsXG4gICAgXCJJU09XRUVLTlVNXCIsXG4gICAgXCJJU1BNVFwiLFxuICAgIFwiSklTXCIsXG4gICAgXCJLVVJUXCIsXG4gICAgXCJMQU1CREFcIixcbiAgICBcIkxBUkdFXCIsXG4gICAgXCJMQ01cIixcbiAgICBcIkxFRlRcIixcbiAgICBcIkxFRlRCXCIsXG4gICAgXCJMRU5cIixcbiAgICBcIkxFTkJcIixcbiAgICBcIkxFVFwiLFxuICAgIFwiTElORVNUXCIsXG4gICAgXCJMTlwiLFxuICAgIFwiTE9HXCIsXG4gICAgXCJMT0cxMFwiLFxuICAgIFwiTE9HRVNUXCIsXG4gICAgXCJMT0dJTlZcIixcbiAgICBcIkxPR05PUk0uRElTVFwiLFxuICAgIFwiTE9HTk9STURJU1RcIixcbiAgICBcIkxPR05PUk0uSU5WXCIsXG4gICAgXCJMT09LVVBcIixcbiAgICBcIkxPV0VSXCIsXG4gICAgXCJNQUtFQVJSQVlcIixcbiAgICBcIk1BUFwiLFxuICAgIFwiTUFUQ0hcIixcbiAgICBcIk1BWFwiLFxuICAgIFwiTUFYQVwiLFxuICAgIFwiTUFYSUZTXCIsXG4gICAgXCJNREVURVJNXCIsXG4gICAgXCJNRFVSQVRJT05cIixcbiAgICBcIk1FRElBTlwiLFxuICAgIFwiTUlEXCIsXG4gICAgXCJNSURCXCIsXG4gICAgXCJNSU5cIixcbiAgICBcIk1JTklGU1wiLFxuICAgIFwiTUlOQVwiLFxuICAgIFwiTUlOVVRFXCIsXG4gICAgXCJNSU5WRVJTRVwiLFxuICAgIFwiTUlSUlwiLFxuICAgIFwiTU1VTFRcIixcbiAgICBcIk1PRFwiLFxuICAgIFwiTU9ERVwiLFxuICAgIFwiTU9ERS5NVUxUXCIsXG4gICAgXCJNT0RFLlNOR0xcIixcbiAgICBcIk1PTlRIXCIsXG4gICAgXCJNUk9VTkRcIixcbiAgICBcIk1VTFRJTk9NSUFMXCIsXG4gICAgXCJNVU5JVFwiLFxuICAgIFwiTlwiLFxuICAgIFwiTkFcIixcbiAgICBcIk5FR0JJTk9NLkRJU1RcIixcbiAgICBcIk5FR0JJTk9NRElTVFwiLFxuICAgIFwiTkVUV09SS0RBWVNcIixcbiAgICBcIk5FVFdPUktEQVlTLklOVExcIixcbiAgICBcIk5PTUlOQUxcIixcbiAgICBcIk5PUk0uRElTVFwiLFxuICAgIFwiTk9STURJU1RcIixcbiAgICBcIk5PUk1JTlZcIixcbiAgICBcIk5PUk0uSU5WXCIsXG4gICAgXCJOT1JNLlMuRElTVFwiLFxuICAgIFwiTk9STVNESVNUXCIsXG4gICAgXCJOT1JNLlMuSU5WXCIsXG4gICAgXCJOT1JNU0lOVlwiLFxuICAgIFwiTk9UXCIsXG4gICAgXCJOT1dcIixcbiAgICBcIk5QRVJcIixcbiAgICBcIk5QVlwiLFxuICAgIFwiTlVNQkVSVkFMVUVcIixcbiAgICBcIk9DVDJCSU5cIixcbiAgICBcIk9DVDJERUNcIixcbiAgICBcIk9DVDJIRVhcIixcbiAgICBcIk9ERFwiLFxuICAgIFwiT0RERlBSSUNFXCIsXG4gICAgXCJPRERGWUlFTERcIixcbiAgICBcIk9ERExQUklDRVwiLFxuICAgIFwiT0RETFlJRUxEXCIsXG4gICAgXCJPRkZTRVRcIixcbiAgICBcIk9SXCIsXG4gICAgXCJQRFVSQVRJT05cIixcbiAgICBcIlBFQVJTT05cIixcbiAgICBcIlBFUkNFTlRJTEUuRVhDXCIsXG4gICAgXCJQRVJDRU5USUxFLklOQ1wiLFxuICAgIFwiUEVSQ0VOVElMRVwiLFxuICAgIFwiUEVSQ0VOVFJBTksuRVhDXCIsXG4gICAgXCJQRVJDRU5UUkFOSy5JTkNcIixcbiAgICBcIlBFUkNFTlRSQU5LXCIsXG4gICAgXCJQRVJNVVRcIixcbiAgICBcIlBFUk1VVEFUSU9OQVwiLFxuICAgIFwiUEhJXCIsXG4gICAgXCJQSE9ORVRJQ1wiLFxuICAgIFwiUElcIixcbiAgICBcIlBNVFwiLFxuICAgIFwiUE9JU1NPTi5ESVNUXCIsXG4gICAgXCJQT0lTU09OXCIsXG4gICAgXCJQT1dFUlwiLFxuICAgIFwiUFBNVFwiLFxuICAgIFwiUFJJQ0VcIixcbiAgICBcIlBSSUNFRElTQ1wiLFxuICAgIFwiUFJJQ0VNQVRcIixcbiAgICBcIlBST0JcIixcbiAgICBcIlBST0RVQ1RcIixcbiAgICBcIlBST1BFUlwiLFxuICAgIFwiUFZcIixcbiAgICBcIlFVQVJUSUxFXCIsXG4gICAgXCJRVUFSVElMRS5FWENcIixcbiAgICBcIlFVQVJUSUxFLklOQ1wiLFxuICAgIFwiUVVPVElFTlRcIixcbiAgICBcIlJBRElBTlNcIixcbiAgICBcIlJBTkRcIixcbiAgICBcIlJBTkRBUlJBWVwiLFxuICAgIFwiUkFOREJFVFdFRU5cIixcbiAgICBcIlJBTksuQVZHXCIsXG4gICAgXCJSQU5LLkVRXCIsXG4gICAgXCJSQU5LXCIsXG4gICAgXCJSQVRFXCIsXG4gICAgXCJSRUNFSVZFRFwiLFxuICAgIFwiUkVEVUNFXCIsXG4gICAgXCJSRUdJU1RFUi5JRFwiLFxuICAgIFwiUkVQTEFDRVwiLFxuICAgIFwiUkVQTEFDRUJcIixcbiAgICBcIlJFUFRcIixcbiAgICBcIlJJR0hUXCIsXG4gICAgXCJSSUdIVEJcIixcbiAgICBcIlJPTUFOXCIsXG4gICAgXCJST1VORFwiLFxuICAgIFwiUk9VTkRET1dOXCIsXG4gICAgXCJST1VORFVQXCIsXG4gICAgXCJST1dcIixcbiAgICBcIlJPV1NcIixcbiAgICBcIlJSSVwiLFxuICAgIFwiUlNRXCIsXG4gICAgXCJSVERcIixcbiAgICBcIlNDQU5cIixcbiAgICBcIlNFQVJDSFwiLFxuICAgIFwiU0VBUkNIQlwiLFxuICAgIFwiU0VDXCIsXG4gICAgXCJTRUNIXCIsXG4gICAgXCJTRUNPTkRcIixcbiAgICBcIlNFUVVFTkNFXCIsXG4gICAgXCJTRVJJRVNTVU1cIixcbiAgICBcIlNIRUVUXCIsXG4gICAgXCJTSEVFVFNcIixcbiAgICBcIlNJR05cIixcbiAgICBcIlNJTlwiLFxuICAgIFwiU0lOSFwiLFxuICAgIFwiU0tFV1wiLFxuICAgIFwiU0tFVy5QXCIsXG4gICAgXCJTTE5cIixcbiAgICBcIlNMT1BFXCIsXG4gICAgXCJTTUFMTFwiLFxuICAgIFwiU09SVFwiLFxuICAgIFwiU09SVEJZXCIsXG4gICAgXCJTUVJUXCIsXG4gICAgXCJTUVJUUElcIixcbiAgICBcIlNRTC5SRVFVRVNUXCIsXG4gICAgXCJTVEFOREFSRElaRVwiLFxuICAgIFwiU1RPQ0tISVNUT1JZXCIsXG4gICAgXCJTVERFVlwiLFxuICAgIFwiU1RERVYuUFwiLFxuICAgIFwiU1RERVYuU1wiLFxuICAgIFwiU1RERVZBXCIsXG4gICAgXCJTVERFVlBcIixcbiAgICBcIlNUREVWUEFcIixcbiAgICBcIlNURVlYXCIsXG4gICAgXCJTVUJTVElUVVRFXCIsXG4gICAgXCJTVUJUT1RBTFwiLFxuICAgIFwiU1VNXCIsXG4gICAgXCJTVU1JRlwiLFxuICAgIFwiU1VNSUZTXCIsXG4gICAgXCJTVU1QUk9EVUNUXCIsXG4gICAgXCJTVU1TUVwiLFxuICAgIFwiU1VNWDJNWTJcIixcbiAgICBcIlNVTVgyUFkyXCIsXG4gICAgXCJTVU1YTVkyXCIsXG4gICAgXCJTV0lUQ0hcIixcbiAgICBcIlNZRFwiLFxuICAgIFwiVFwiLFxuICAgIFwiVEFOXCIsXG4gICAgXCJUQU5IXCIsXG4gICAgXCJUQUtFXCIsXG4gICAgXCJUQklMTEVRXCIsXG4gICAgXCJUQklMTFBSSUNFXCIsXG4gICAgXCJUQklMTFlJRUxEXCIsXG4gICAgXCJULkRJU1RcIixcbiAgICBcIlQuRElTVC4yVFwiLFxuICAgIFwiVC5ESVNULlJUXCIsXG4gICAgXCJURElTVFwiLFxuICAgIFwiVEVYVFwiLFxuICAgIFwiVEVYVEFGVEVSXCIsXG4gICAgXCJURVhUQkVGT1JFXCIsXG4gICAgXCJURVhUSk9JTlwiLFxuICAgIFwiVEVYVFNQTElUXCIsXG4gICAgXCJUSU1FXCIsXG4gICAgXCJUSU1FVkFMVUVcIixcbiAgICBcIlQuSU5WXCIsXG4gICAgXCJULklOVi4yVFwiLFxuICAgIFwiVElOVlwiLFxuICAgIFwiVE9DT0xcIixcbiAgICBcIlRPUk9XXCIsXG4gICAgXCJUT0RBWVwiLFxuICAgIFwiVFJBTlNQT1NFXCIsXG4gICAgXCJUUkVORFwiLFxuICAgIFwiVFJJTVwiLFxuICAgIFwiVFJJTU1FQU5cIixcbiAgICBcIlRSVUVcIixcbiAgICBcIlRSVU5DXCIsXG4gICAgXCJULlRFU1RcIixcbiAgICBcIlRURVNUXCIsXG4gICAgXCJUWVBFXCIsXG4gICAgXCJVTklDSEFSXCIsXG4gICAgXCJVTklDT0RFXCIsXG4gICAgXCJVTklRVUVcIixcbiAgICBcIlVQUEVSXCIsXG4gICAgXCJWQUxVRVwiLFxuICAgIFwiVkFMVUVUT1RFWFRcIixcbiAgICBcIlZBUlwiLFxuICAgIFwiVkFSLlBcIixcbiAgICBcIlZBUi5TXCIsXG4gICAgXCJWQVJBXCIsXG4gICAgXCJWQVJQXCIsXG4gICAgXCJWQVJQQVwiLFxuICAgIFwiVkRCXCIsXG4gICAgXCJWTE9PS1VQXCIsXG4gICAgXCJWU1RBQ0tcIixcbiAgICBcIldFQlNFUlZJQ0VcIixcbiAgICBcIldFRUtEQVlcIixcbiAgICBcIldFRUtOVU1cIixcbiAgICBcIldFSUJVTExcIixcbiAgICBcIldFSUJVTEwuRElTVFwiLFxuICAgIFwiV09SS0RBWVwiLFxuICAgIFwiV09SS0RBWS5JTlRMXCIsXG4gICAgXCJXUkFQQ09MU1wiLFxuICAgIFwiV1JBUFJPV1NcIixcbiAgICBcIlhJUlJcIixcbiAgICBcIlhMT09LVVBcIixcbiAgICBcIlhNQVRDSFwiLFxuICAgIFwiWE5QVlwiLFxuICAgIFwiWE9SXCIsXG4gICAgXCJZRUFSXCIsXG4gICAgXCJZRUFSRlJBQ1wiLFxuICAgIFwiWUlFTERcIixcbiAgICBcIllJRUxERElTQ1wiLFxuICAgIFwiWUlFTERNQVRcIixcbiAgICBcIlouVEVTVFwiLFxuICAgIFwiWlRFU1RcIlxuICBdO1xuICByZXR1cm4ge1xuICAgIG5hbWU6ICdFeGNlbCBmb3JtdWxhZScsXG4gICAgYWxpYXNlczogW1xuICAgICAgJ3hsc3gnLFxuICAgICAgJ3hscydcbiAgICBdLFxuICAgIGNhc2VfaW5zZW5zaXRpdmU6IHRydWUsXG4gICAga2V5d29yZHM6IHtcbiAgICAgICRwYXR0ZXJuOiAvW2EtekEtWl1bXFx3XFwuXSovLFxuICAgICAgYnVpbHRfaW46IEJVSUxUX0lOU1xuICAgIH0sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgLyogbWF0Y2hlcyBhIGJlZ2lubmluZyBlcXVhbCBzaWduIGZvdW5kIGluIEV4Y2VsIGZvcm11bGEgZXhhbXBsZXMgKi9cbiAgICAgICAgYmVnaW46IC9ePS8sXG4gICAgICAgIGVuZDogL1tePV0vLFxuICAgICAgICByZXR1cm5FbmQ6IHRydWUsXG4gICAgICAgIGlsbGVnYWw6IC89LywgLyogb25seSBhbGxvdyBzaW5nbGUgZXF1YWwgc2lnbiBhdCBmcm9udCBvZiBsaW5lICovXG4gICAgICAgIHJlbGV2YW5jZTogMTBcbiAgICAgIH0sXG4gICAgICAvKiB0ZWNobmljYWxseSwgdGhlcmUgY2FuIGJlIG1vcmUgdGhhbiAyIGxldHRlcnMgaW4gY29sdW1uIG5hbWVzLCBidXQgdGhpcyBwcmV2ZW50cyBjb25mbGljdCB3aXRoIHNvbWUga2V5d29yZHMgKi9cbiAgICAgIHtcbiAgICAgICAgLyogbWF0Y2hlcyBhIHJlZmVyZW5jZSB0byBhIHNpbmdsZSBjZWxsICovXG4gICAgICAgIGNsYXNzTmFtZTogJ3N5bWJvbCcsXG4gICAgICAgIGJlZ2luOiAvXFxiW0EtWl17MSwyfVxcZCtcXGIvLFxuICAgICAgICBlbmQ6IC9bXlxcZF0vLFxuICAgICAgICBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIC8qIG1hdGNoZXMgYSByZWZlcmVuY2UgdG8gYSByYW5nZSBvZiBjZWxscyAqL1xuICAgICAgICBjbGFzc05hbWU6ICdzeW1ib2wnLFxuICAgICAgICBiZWdpbjogL1tBLVpdezAsMn1cXGQqOltBLVpdezAsMn1cXGQqLyxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAgaGxqcy5CQUNLU0xBU0hfRVNDQVBFLFxuICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICAgICAgYmVnaW46IGhsanMuTlVNQkVSX1JFICsgJyglKT8nLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICAvKiBFeGNlbCBmb3JtdWxhIGNvbW1lbnRzIGFyZSBkb25lIGJ5IHB1dHRpbmcgdGhlIGNvbW1lbnQgaW4gYSBmdW5jdGlvbiBjYWxsIHRvIE4oKSAqL1xuICAgICAgaGxqcy5DT01NRU5UKC9cXGJOXFwoLywgL1xcKS8sXG4gICAgICAgIHtcbiAgICAgICAgICBleGNsdWRlQmVnaW46IHRydWUsXG4gICAgICAgICAgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAgICBpbGxlZ2FsOiAvXFxuL1xuICAgICAgICB9KVxuICAgIF1cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBleGNlbDtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1330\n')},1353:(module,__unused_webpack_exports,__webpack_require__)=>{"use strict";eval("// JS-YAML's default schema for `load` function.\n// It is not described in the YAML specification.\n//\n// This schema is based on JS-YAML's default safe schema and includes\n// JavaScript-specific types: !!js/undefined, !!js/regexp and !!js/function.\n//\n// Also this schema is used as default base schema at `Schema.create` function.\n\n\n\n\n\nvar Schema = __webpack_require__(8796);\n\n\nmodule.exports = Schema.DEFAULT = new Schema({\n include: [\n __webpack_require__(1961)\n ],\n explicit: [\n __webpack_require__(9091),\n __webpack_require__(8150),\n __webpack_require__(4391)\n ]\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTM1My5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR2E7OztBQUdiLGFBQWEsbUJBQU8sQ0FBQyxJQUFXOzs7QUFHaEM7QUFDQTtBQUNBLElBQUksbUJBQU8sQ0FBQyxJQUFnQjtBQUM1QjtBQUNBO0FBQ0EsSUFBSSxtQkFBTyxDQUFDLElBQXNCO0FBQ2xDLElBQUksbUJBQU8sQ0FBQyxJQUFtQjtBQUMvQixJQUFJLG1CQUFPLENBQUMsSUFBcUI7QUFDakM7QUFDQSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vb2JzaWRpYW4tbWluZG1hcC1uZXh0Z2VuLy4vbm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4xL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3NjaGVtYS9kZWZhdWx0X2Z1bGwuanM/NjVlYSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBKUy1ZQU1MJ3MgZGVmYXVsdCBzY2hlbWEgZm9yIGBsb2FkYCBmdW5jdGlvbi5cbi8vIEl0IGlzIG5vdCBkZXNjcmliZWQgaW4gdGhlIFlBTUwgc3BlY2lmaWNhdGlvbi5cbi8vXG4vLyBUaGlzIHNjaGVtYSBpcyBiYXNlZCBvbiBKUy1ZQU1MJ3MgZGVmYXVsdCBzYWZlIHNjaGVtYSBhbmQgaW5jbHVkZXNcbi8vIEphdmFTY3JpcHQtc3BlY2lmaWMgdHlwZXM6ICEhanMvdW5kZWZpbmVkLCAhIWpzL3JlZ2V4cCBhbmQgISFqcy9mdW5jdGlvbi5cbi8vXG4vLyBBbHNvIHRoaXMgc2NoZW1hIGlzIHVzZWQgYXMgZGVmYXVsdCBiYXNlIHNjaGVtYSBhdCBgU2NoZW1hLmNyZWF0ZWAgZnVuY3Rpb24uXG5cblxuJ3VzZSBzdHJpY3QnO1xuXG5cbnZhciBTY2hlbWEgPSByZXF1aXJlKCcuLi9zY2hlbWEnKTtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IFNjaGVtYS5ERUZBVUxUID0gbmV3IFNjaGVtYSh7XG4gIGluY2x1ZGU6IFtcbiAgICByZXF1aXJlKCcuL2RlZmF1bHRfc2FmZScpXG4gIF0sXG4gIGV4cGxpY2l0OiBbXG4gICAgcmVxdWlyZSgnLi4vdHlwZS9qcy91bmRlZmluZWQnKSxcbiAgICByZXF1aXJlKCcuLi90eXBlL2pzL3JlZ2V4cCcpLFxuICAgIHJlcXVpcmUoJy4uL3R5cGUvanMvZnVuY3Rpb24nKVxuICBdXG59KTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1353\n")},1356:function(module){eval("(function webpackUniversalModuleDefinition(root, factory) {\n/* istanbul ignore next */\n\tif(true)\n\t\tmodule.exports = factory();\n\telse // removed by dead control flow\n{}\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n\n/******/ \t// The require function\n/******/ \tfunction __nested_webpack_require_583__(moduleId) {\n\n/******/ \t\t// Check if module is in cache\n/* istanbul ignore if */\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __nested_webpack_require_583__);\n\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n\n\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__nested_webpack_require_583__.m = modules;\n\n/******/ \t// expose the module cache\n/******/ \t__nested_webpack_require_583__.c = installedModules;\n\n/******/ \t// __webpack_public_path__\n/******/ \t__nested_webpack_require_583__.p = \"\";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __nested_webpack_require_583__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ function(module, exports, __nested_webpack_require_1808__) {\n\n\t\"use strict\";\n\t/*\n\t Copyright JS Foundation and other contributors, https://js.foundation/\n\n\t Redistribution and use in source and binary forms, with or without\n\t modification, are permitted provided that the following conditions are met:\n\n\t * Redistributions of source code must retain the above copyright\n\t notice, this list of conditions and the following disclaimer.\n\t * Redistributions in binary form must reproduce the above copyright\n\t notice, this list of conditions and the following disclaimer in the\n\t documentation and/or other materials provided with the distribution.\n\n\t THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n\t AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n\t IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n\t ARE DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY\n\t DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n\t (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n\t LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n\t ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n\t (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n\t THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\t*/\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar comment_handler_1 = __nested_webpack_require_1808__(1);\n\tvar jsx_parser_1 = __nested_webpack_require_1808__(3);\n\tvar parser_1 = __nested_webpack_require_1808__(8);\n\tvar tokenizer_1 = __nested_webpack_require_1808__(15);\n\tfunction parse(code, options, delegate) {\n\t var commentHandler = null;\n\t var proxyDelegate = function (node, metadata) {\n\t if (delegate) {\n\t delegate(node, metadata);\n\t }\n\t if (commentHandler) {\n\t commentHandler.visit(node, metadata);\n\t }\n\t };\n\t var parserDelegate = (typeof delegate === 'function') ? proxyDelegate : null;\n\t var collectComment = false;\n\t if (options) {\n\t collectComment = (typeof options.comment === 'boolean' && options.comment);\n\t var attachComment = (typeof options.attachComment === 'boolean' && options.attachComment);\n\t if (collectComment || attachComment) {\n\t commentHandler = new comment_handler_1.CommentHandler();\n\t commentHandler.attach = attachComment;\n\t options.comment = true;\n\t parserDelegate = proxyDelegate;\n\t }\n\t }\n\t var isModule = false;\n\t if (options && typeof options.sourceType === 'string') {\n\t isModule = (options.sourceType === 'module');\n\t }\n\t var parser;\n\t if (options && typeof options.jsx === 'boolean' && options.jsx) {\n\t parser = new jsx_parser_1.JSXParser(code, options, parserDelegate);\n\t }\n\t else {\n\t parser = new parser_1.Parser(code, options, parserDelegate);\n\t }\n\t var program = isModule ? parser.parseModule() : parser.parseScript();\n\t var ast = program;\n\t if (collectComment && commentHandler) {\n\t ast.comments = commentHandler.comments;\n\t }\n\t if (parser.config.tokens) {\n\t ast.tokens = parser.tokens;\n\t }\n\t if (parser.config.tolerant) {\n\t ast.errors = parser.errorHandler.errors;\n\t }\n\t return ast;\n\t}\n\texports.parse = parse;\n\tfunction parseModule(code, options, delegate) {\n\t var parsingOptions = options || {};\n\t parsingOptions.sourceType = 'module';\n\t return parse(code, parsingOptions, delegate);\n\t}\n\texports.parseModule = parseModule;\n\tfunction parseScript(code, options, delegate) {\n\t var parsingOptions = options || {};\n\t parsingOptions.sourceType = 'script';\n\t return parse(code, parsingOptions, delegate);\n\t}\n\texports.parseScript = parseScript;\n\tfunction tokenize(code, options, delegate) {\n\t var tokenizer = new tokenizer_1.Tokenizer(code, options);\n\t var tokens;\n\t tokens = [];\n\t try {\n\t while (true) {\n\t var token = tokenizer.getNextToken();\n\t if (!token) {\n\t break;\n\t }\n\t if (delegate) {\n\t token = delegate(token);\n\t }\n\t tokens.push(token);\n\t }\n\t }\n\t catch (e) {\n\t tokenizer.errorHandler.tolerate(e);\n\t }\n\t if (tokenizer.errorHandler.tolerant) {\n\t tokens.errors = tokenizer.errors();\n\t }\n\t return tokens;\n\t}\n\texports.tokenize = tokenize;\n\tvar syntax_1 = __nested_webpack_require_1808__(2);\n\texports.Syntax = syntax_1.Syntax;\n\t// Sync with *.json manifests.\n\texports.version = '4.0.1';\n\n\n/***/ },\n/* 1 */\n/***/ function(module, exports, __nested_webpack_require_6456__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar syntax_1 = __nested_webpack_require_6456__(2);\n\tvar CommentHandler = (function () {\n\t function CommentHandler() {\n\t this.attach = false;\n\t this.comments = [];\n\t this.stack = [];\n\t this.leading = [];\n\t this.trailing = [];\n\t }\n\t CommentHandler.prototype.insertInnerComments = function (node, metadata) {\n\t // innnerComments for properties empty block\n\t // `function a() {/** comments **\\/}`\n\t if (node.type === syntax_1.Syntax.BlockStatement && node.body.length === 0) {\n\t var innerComments = [];\n\t for (var i = this.leading.length - 1; i >= 0; --i) {\n\t var entry = this.leading[i];\n\t if (metadata.end.offset >= entry.start) {\n\t innerComments.unshift(entry.comment);\n\t this.leading.splice(i, 1);\n\t this.trailing.splice(i, 1);\n\t }\n\t }\n\t if (innerComments.length) {\n\t node.innerComments = innerComments;\n\t }\n\t }\n\t };\n\t CommentHandler.prototype.findTrailingComments = function (metadata) {\n\t var trailingComments = [];\n\t if (this.trailing.length > 0) {\n\t for (var i = this.trailing.length - 1; i >= 0; --i) {\n\t var entry_1 = this.trailing[i];\n\t if (entry_1.start >= metadata.end.offset) {\n\t trailingComments.unshift(entry_1.comment);\n\t }\n\t }\n\t this.trailing.length = 0;\n\t return trailingComments;\n\t }\n\t var entry = this.stack[this.stack.length - 1];\n\t if (entry && entry.node.trailingComments) {\n\t var firstComment = entry.node.trailingComments[0];\n\t if (firstComment && firstComment.range[0] >= metadata.end.offset) {\n\t trailingComments = entry.node.trailingComments;\n\t delete entry.node.trailingComments;\n\t }\n\t }\n\t return trailingComments;\n\t };\n\t CommentHandler.prototype.findLeadingComments = function (metadata) {\n\t var leadingComments = [];\n\t var target;\n\t while (this.stack.length > 0) {\n\t var entry = this.stack[this.stack.length - 1];\n\t if (entry && entry.start >= metadata.start.offset) {\n\t target = entry.node;\n\t this.stack.pop();\n\t }\n\t else {\n\t break;\n\t }\n\t }\n\t if (target) {\n\t var count = target.leadingComments ? target.leadingComments.length : 0;\n\t for (var i = count - 1; i >= 0; --i) {\n\t var comment = target.leadingComments[i];\n\t if (comment.range[1] <= metadata.start.offset) {\n\t leadingComments.unshift(comment);\n\t target.leadingComments.splice(i, 1);\n\t }\n\t }\n\t if (target.leadingComments && target.leadingComments.length === 0) {\n\t delete target.leadingComments;\n\t }\n\t return leadingComments;\n\t }\n\t for (var i = this.leading.length - 1; i >= 0; --i) {\n\t var entry = this.leading[i];\n\t if (entry.start <= metadata.start.offset) {\n\t leadingComments.unshift(entry.comment);\n\t this.leading.splice(i, 1);\n\t }\n\t }\n\t return leadingComments;\n\t };\n\t CommentHandler.prototype.visitNode = function (node, metadata) {\n\t if (node.type === syntax_1.Syntax.Program && node.body.length > 0) {\n\t return;\n\t }\n\t this.insertInnerComments(node, metadata);\n\t var trailingComments = this.findTrailingComments(metadata);\n\t var leadingComments = this.findLeadingComments(metadata);\n\t if (leadingComments.length > 0) {\n\t node.leadingComments = leadingComments;\n\t }\n\t if (trailingComments.length > 0) {\n\t node.trailingComments = trailingComments;\n\t }\n\t this.stack.push({\n\t node: node,\n\t start: metadata.start.offset\n\t });\n\t };\n\t CommentHandler.prototype.visitComment = function (node, metadata) {\n\t var type = (node.type[0] === 'L') ? 'Line' : 'Block';\n\t var comment = {\n\t type: type,\n\t value: node.value\n\t };\n\t if (node.range) {\n\t comment.range = node.range;\n\t }\n\t if (node.loc) {\n\t comment.loc = node.loc;\n\t }\n\t this.comments.push(comment);\n\t if (this.attach) {\n\t var entry = {\n\t comment: {\n\t type: type,\n\t value: node.value,\n\t range: [metadata.start.offset, metadata.end.offset]\n\t },\n\t start: metadata.start.offset\n\t };\n\t if (node.loc) {\n\t entry.comment.loc = node.loc;\n\t }\n\t node.type = type;\n\t this.leading.push(entry);\n\t this.trailing.push(entry);\n\t }\n\t };\n\t CommentHandler.prototype.visit = function (node, metadata) {\n\t if (node.type === 'LineComment') {\n\t this.visitComment(node, metadata);\n\t }\n\t else if (node.type === 'BlockComment') {\n\t this.visitComment(node, metadata);\n\t }\n\t else if (this.attach) {\n\t this.visitNode(node, metadata);\n\t }\n\t };\n\t return CommentHandler;\n\t}());\n\texports.CommentHandler = CommentHandler;\n\n\n/***/ },\n/* 2 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\texports.Syntax = {\n\t AssignmentExpression: 'AssignmentExpression',\n\t AssignmentPattern: 'AssignmentPattern',\n\t ArrayExpression: 'ArrayExpression',\n\t ArrayPattern: 'ArrayPattern',\n\t ArrowFunctionExpression: 'ArrowFunctionExpression',\n\t AwaitExpression: 'AwaitExpression',\n\t BlockStatement: 'BlockStatement',\n\t BinaryExpression: 'BinaryExpression',\n\t BreakStatement: 'BreakStatement',\n\t CallExpression: 'CallExpression',\n\t CatchClause: 'CatchClause',\n\t ClassBody: 'ClassBody',\n\t ClassDeclaration: 'ClassDeclaration',\n\t ClassExpression: 'ClassExpression',\n\t ConditionalExpression: 'ConditionalExpression',\n\t ContinueStatement: 'ContinueStatement',\n\t DoWhileStatement: 'DoWhileStatement',\n\t DebuggerStatement: 'DebuggerStatement',\n\t EmptyStatement: 'EmptyStatement',\n\t ExportAllDeclaration: 'ExportAllDeclaration',\n\t ExportDefaultDeclaration: 'ExportDefaultDeclaration',\n\t ExportNamedDeclaration: 'ExportNamedDeclaration',\n\t ExportSpecifier: 'ExportSpecifier',\n\t ExpressionStatement: 'ExpressionStatement',\n\t ForStatement: 'ForStatement',\n\t ForOfStatement: 'ForOfStatement',\n\t ForInStatement: 'ForInStatement',\n\t FunctionDeclaration: 'FunctionDeclaration',\n\t FunctionExpression: 'FunctionExpression',\n\t Identifier: 'Identifier',\n\t IfStatement: 'IfStatement',\n\t ImportDeclaration: 'ImportDeclaration',\n\t ImportDefaultSpecifier: 'ImportDefaultSpecifier',\n\t ImportNamespaceSpecifier: 'ImportNamespaceSpecifier',\n\t ImportSpecifier: 'ImportSpecifier',\n\t Literal: 'Literal',\n\t LabeledStatement: 'LabeledStatement',\n\t LogicalExpression: 'LogicalExpression',\n\t MemberExpression: 'MemberExpression',\n\t MetaProperty: 'MetaProperty',\n\t MethodDefinition: 'MethodDefinition',\n\t NewExpression: 'NewExpression',\n\t ObjectExpression: 'ObjectExpression',\n\t ObjectPattern: 'ObjectPattern',\n\t Program: 'Program',\n\t Property: 'Property',\n\t RestElement: 'RestElement',\n\t ReturnStatement: 'ReturnStatement',\n\t SequenceExpression: 'SequenceExpression',\n\t SpreadElement: 'SpreadElement',\n\t Super: 'Super',\n\t SwitchCase: 'SwitchCase',\n\t SwitchStatement: 'SwitchStatement',\n\t TaggedTemplateExpression: 'TaggedTemplateExpression',\n\t TemplateElement: 'TemplateElement',\n\t TemplateLiteral: 'TemplateLiteral',\n\t ThisExpression: 'ThisExpression',\n\t ThrowStatement: 'ThrowStatement',\n\t TryStatement: 'TryStatement',\n\t UnaryExpression: 'UnaryExpression',\n\t UpdateExpression: 'UpdateExpression',\n\t VariableDeclaration: 'VariableDeclaration',\n\t VariableDeclarator: 'VariableDeclarator',\n\t WhileStatement: 'WhileStatement',\n\t WithStatement: 'WithStatement',\n\t YieldExpression: 'YieldExpression'\n\t};\n\n\n/***/ },\n/* 3 */\n/***/ function(module, exports, __nested_webpack_require_15019__) {\n\n\t\"use strict\";\n/* istanbul ignore next */\n\tvar __extends = (this && this.__extends) || (function () {\n\t var extendStatics = Object.setPrototypeOf ||\n\t ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t return function (d, b) {\n\t extendStatics(d, b);\n\t function __() { this.constructor = d; }\n\t d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar character_1 = __nested_webpack_require_15019__(4);\n\tvar JSXNode = __nested_webpack_require_15019__(5);\n\tvar jsx_syntax_1 = __nested_webpack_require_15019__(6);\n\tvar Node = __nested_webpack_require_15019__(7);\n\tvar parser_1 = __nested_webpack_require_15019__(8);\n\tvar token_1 = __nested_webpack_require_15019__(13);\n\tvar xhtml_entities_1 = __nested_webpack_require_15019__(14);\n\ttoken_1.TokenName[100 /* Identifier */] = 'JSXIdentifier';\n\ttoken_1.TokenName[101 /* Text */] = 'JSXText';\n\t// Fully qualified element name, e.g. returns \"svg:path\"\n\tfunction getQualifiedElementName(elementName) {\n\t var qualifiedName;\n\t switch (elementName.type) {\n\t case jsx_syntax_1.JSXSyntax.JSXIdentifier:\n\t var id = elementName;\n\t qualifiedName = id.name;\n\t break;\n\t case jsx_syntax_1.JSXSyntax.JSXNamespacedName:\n\t var ns = elementName;\n\t qualifiedName = getQualifiedElementName(ns.namespace) + ':' +\n\t getQualifiedElementName(ns.name);\n\t break;\n\t case jsx_syntax_1.JSXSyntax.JSXMemberExpression:\n\t var expr = elementName;\n\t qualifiedName = getQualifiedElementName(expr.object) + '.' +\n\t getQualifiedElementName(expr.property);\n\t break;\n\t /* istanbul ignore next */\n\t default:\n\t break;\n\t }\n\t return qualifiedName;\n\t}\n\tvar JSXParser = (function (_super) {\n\t __extends(JSXParser, _super);\n\t function JSXParser(code, options, delegate) {\n\t return _super.call(this, code, options, delegate) || this;\n\t }\n\t JSXParser.prototype.parsePrimaryExpression = function () {\n\t return this.match('<') ? this.parseJSXRoot() : _super.prototype.parsePrimaryExpression.call(this);\n\t };\n\t JSXParser.prototype.startJSX = function () {\n\t // Unwind the scanner before the lookahead token.\n\t this.scanner.index = this.startMarker.index;\n\t this.scanner.lineNumber = this.startMarker.line;\n\t this.scanner.lineStart = this.startMarker.index - this.startMarker.column;\n\t };\n\t JSXParser.prototype.finishJSX = function () {\n\t // Prime the next lookahead.\n\t this.nextToken();\n\t };\n\t JSXParser.prototype.reenterJSX = function () {\n\t this.startJSX();\n\t this.expectJSX('}');\n\t // Pop the closing '}' added from the lookahead.\n\t if (this.config.tokens) {\n\t this.tokens.pop();\n\t }\n\t };\n\t JSXParser.prototype.createJSXNode = function () {\n\t this.collectComments();\n\t return {\n\t index: this.scanner.index,\n\t line: this.scanner.lineNumber,\n\t column: this.scanner.index - this.scanner.lineStart\n\t };\n\t };\n\t JSXParser.prototype.createJSXChildNode = function () {\n\t return {\n\t index: this.scanner.index,\n\t line: this.scanner.lineNumber,\n\t column: this.scanner.index - this.scanner.lineStart\n\t };\n\t };\n\t JSXParser.prototype.scanXHTMLEntity = function (quote) {\n\t var result = '&';\n\t var valid = true;\n\t var terminated = false;\n\t var numeric = false;\n\t var hex = false;\n\t while (!this.scanner.eof() && valid && !terminated) {\n\t var ch = this.scanner.source[this.scanner.index];\n\t if (ch === quote) {\n\t break;\n\t }\n\t terminated = (ch === ';');\n\t result += ch;\n\t ++this.scanner.index;\n\t if (!terminated) {\n\t switch (result.length) {\n\t case 2:\n\t // e.g. '{'\n\t numeric = (ch === '#');\n\t break;\n\t case 3:\n\t if (numeric) {\n\t // e.g. 'A'\n\t hex = (ch === 'x');\n\t valid = hex || character_1.Character.isDecimalDigit(ch.charCodeAt(0));\n\t numeric = numeric && !hex;\n\t }\n\t break;\n\t default:\n\t valid = valid && !(numeric && !character_1.Character.isDecimalDigit(ch.charCodeAt(0)));\n\t valid = valid && !(hex && !character_1.Character.isHexDigit(ch.charCodeAt(0)));\n\t break;\n\t }\n\t }\n\t }\n\t if (valid && terminated && result.length > 2) {\n\t // e.g. 'A' becomes just '#x41'\n\t var str = result.substr(1, result.length - 2);\n\t if (numeric && str.length > 1) {\n\t result = String.fromCharCode(parseInt(str.substr(1), 10));\n\t }\n\t else if (hex && str.length > 2) {\n\t result = String.fromCharCode(parseInt('0' + str.substr(1), 16));\n\t }\n\t else if (!numeric && !hex && xhtml_entities_1.XHTMLEntities[str]) {\n\t result = xhtml_entities_1.XHTMLEntities[str];\n\t }\n\t }\n\t return result;\n\t };\n\t // Scan the next JSX token. This replaces Scanner#lex when in JSX mode.\n\t JSXParser.prototype.lexJSX = function () {\n\t var cp = this.scanner.source.charCodeAt(this.scanner.index);\n\t // < > / : = { }\n\t if (cp === 60 || cp === 62 || cp === 47 || cp === 58 || cp === 61 || cp === 123 || cp === 125) {\n\t var value = this.scanner.source[this.scanner.index++];\n\t return {\n\t type: 7 /* Punctuator */,\n\t value: value,\n\t lineNumber: this.scanner.lineNumber,\n\t lineStart: this.scanner.lineStart,\n\t start: this.scanner.index - 1,\n\t end: this.scanner.index\n\t };\n\t }\n\t // \" '\n\t if (cp === 34 || cp === 39) {\n\t var start = this.scanner.index;\n\t var quote = this.scanner.source[this.scanner.index++];\n\t var str = '';\n\t while (!this.scanner.eof()) {\n\t var ch = this.scanner.source[this.scanner.index++];\n\t if (ch === quote) {\n\t break;\n\t }\n\t else if (ch === '&') {\n\t str += this.scanXHTMLEntity(quote);\n\t }\n\t else {\n\t str += ch;\n\t }\n\t }\n\t return {\n\t type: 8 /* StringLiteral */,\n\t value: str,\n\t lineNumber: this.scanner.lineNumber,\n\t lineStart: this.scanner.lineStart,\n\t start: start,\n\t end: this.scanner.index\n\t };\n\t }\n\t // ... or .\n\t if (cp === 46) {\n\t var n1 = this.scanner.source.charCodeAt(this.scanner.index + 1);\n\t var n2 = this.scanner.source.charCodeAt(this.scanner.index + 2);\n\t var value = (n1 === 46 && n2 === 46) ? '...' : '.';\n\t var start = this.scanner.index;\n\t this.scanner.index += value.length;\n\t return {\n\t type: 7 /* Punctuator */,\n\t value: value,\n\t lineNumber: this.scanner.lineNumber,\n\t lineStart: this.scanner.lineStart,\n\t start: start,\n\t end: this.scanner.index\n\t };\n\t }\n\t // `\n\t if (cp === 96) {\n\t // Only placeholder, since it will be rescanned as a real assignment expression.\n\t return {\n\t type: 10 /* Template */,\n\t value: '',\n\t lineNumber: this.scanner.lineNumber,\n\t lineStart: this.scanner.lineStart,\n\t start: this.scanner.index,\n\t end: this.scanner.index\n\t };\n\t }\n\t // Identifer can not contain backslash (char code 92).\n\t if (character_1.Character.isIdentifierStart(cp) && (cp !== 92)) {\n\t var start = this.scanner.index;\n\t ++this.scanner.index;\n\t while (!this.scanner.eof()) {\n\t var ch = this.scanner.source.charCodeAt(this.scanner.index);\n\t if (character_1.Character.isIdentifierPart(ch) && (ch !== 92)) {\n\t ++this.scanner.index;\n\t }\n\t else if (ch === 45) {\n\t // Hyphen (char code 45) can be part of an identifier.\n\t ++this.scanner.index;\n\t }\n\t else {\n\t break;\n\t }\n\t }\n\t var id = this.scanner.source.slice(start, this.scanner.index);\n\t return {\n\t type: 100 /* Identifier */,\n\t value: id,\n\t lineNumber: this.scanner.lineNumber,\n\t lineStart: this.scanner.lineStart,\n\t start: start,\n\t end: this.scanner.index\n\t };\n\t }\n\t return this.scanner.lex();\n\t };\n\t JSXParser.prototype.nextJSXToken = function () {\n\t this.collectComments();\n\t this.startMarker.index = this.scanner.index;\n\t this.startMarker.line = this.scanner.lineNumber;\n\t this.startMarker.column = this.scanner.index - this.scanner.lineStart;\n\t var token = this.lexJSX();\n\t this.lastMarker.index = this.scanner.index;\n\t this.lastMarker.line = this.scanner.lineNumber;\n\t this.lastMarker.column = this.scanner.index - this.scanner.lineStart;\n\t if (this.config.tokens) {\n\t this.tokens.push(this.convertToken(token));\n\t }\n\t return token;\n\t };\n\t JSXParser.prototype.nextJSXText = function () {\n\t this.startMarker.index = this.scanner.index;\n\t this.startMarker.line = this.scanner.lineNumber;\n\t this.startMarker.column = this.scanner.index - this.scanner.lineStart;\n\t var start = this.scanner.index;\n\t var text = '';\n\t while (!this.scanner.eof()) {\n\t var ch = this.scanner.source[this.scanner.index];\n\t if (ch === '{' || ch === '<') {\n\t break;\n\t }\n\t ++this.scanner.index;\n\t text += ch;\n\t if (character_1.Character.isLineTerminator(ch.charCodeAt(0))) {\n\t ++this.scanner.lineNumber;\n\t if (ch === '\\r' && this.scanner.source[this.scanner.index] === '\\n') {\n\t ++this.scanner.index;\n\t }\n\t this.scanner.lineStart = this.scanner.index;\n\t }\n\t }\n\t this.lastMarker.index = this.scanner.index;\n\t this.lastMarker.line = this.scanner.lineNumber;\n\t this.lastMarker.column = this.scanner.index - this.scanner.lineStart;\n\t var token = {\n\t type: 101 /* Text */,\n\t value: text,\n\t lineNumber: this.scanner.lineNumber,\n\t lineStart: this.scanner.lineStart,\n\t start: start,\n\t end: this.scanner.index\n\t };\n\t if ((text.length > 0) && this.config.tokens) {\n\t this.tokens.push(this.convertToken(token));\n\t }\n\t return token;\n\t };\n\t JSXParser.prototype.peekJSXToken = function () {\n\t var state = this.scanner.saveState();\n\t this.scanner.scanComments();\n\t var next = this.lexJSX();\n\t this.scanner.restoreState(state);\n\t return next;\n\t };\n\t // Expect the next JSX token to match the specified punctuator.\n\t // If not, an exception will be thrown.\n\t JSXParser.prototype.expectJSX = function (value) {\n\t var token = this.nextJSXToken();\n\t if (token.type !== 7 /* Punctuator */ || token.value !== value) {\n\t this.throwUnexpectedToken(token);\n\t }\n\t };\n\t // Return true if the next JSX token matches the specified punctuator.\n\t JSXParser.prototype.matchJSX = function (value) {\n\t var next = this.peekJSXToken();\n\t return next.type === 7 /* Punctuator */ && next.value === value;\n\t };\n\t JSXParser.prototype.parseJSXIdentifier = function () {\n\t var node = this.createJSXNode();\n\t var token = this.nextJSXToken();\n\t if (token.type !== 100 /* Identifier */) {\n\t this.throwUnexpectedToken(token);\n\t }\n\t return this.finalize(node, new JSXNode.JSXIdentifier(token.value));\n\t };\n\t JSXParser.prototype.parseJSXElementName = function () {\n\t var node = this.createJSXNode();\n\t var elementName = this.parseJSXIdentifier();\n\t if (this.matchJSX(':')) {\n\t var namespace = elementName;\n\t this.expectJSX(':');\n\t var name_1 = this.parseJSXIdentifier();\n\t elementName = this.finalize(node, new JSXNode.JSXNamespacedName(namespace, name_1));\n\t }\n\t else if (this.matchJSX('.')) {\n\t while (this.matchJSX('.')) {\n\t var object = elementName;\n\t this.expectJSX('.');\n\t var property = this.parseJSXIdentifier();\n\t elementName = this.finalize(node, new JSXNode.JSXMemberExpression(object, property));\n\t }\n\t }\n\t return elementName;\n\t };\n\t JSXParser.prototype.parseJSXAttributeName = function () {\n\t var node = this.createJSXNode();\n\t var attributeName;\n\t var identifier = this.parseJSXIdentifier();\n\t if (this.matchJSX(':')) {\n\t var namespace = identifier;\n\t this.expectJSX(':');\n\t var name_2 = this.parseJSXIdentifier();\n\t attributeName = this.finalize(node, new JSXNode.JSXNamespacedName(namespace, name_2));\n\t }\n\t else {\n\t attributeName = identifier;\n\t }\n\t return attributeName;\n\t };\n\t JSXParser.prototype.parseJSXStringLiteralAttribute = function () {\n\t var node = this.createJSXNode();\n\t var token = this.nextJSXToken();\n\t if (token.type !== 8 /* StringLiteral */) {\n\t this.throwUnexpectedToken(token);\n\t }\n\t var raw = this.getTokenRaw(token);\n\t return this.finalize(node, new Node.Literal(token.value, raw));\n\t };\n\t JSXParser.prototype.parseJSXExpressionAttribute = function () {\n\t var node = this.createJSXNode();\n\t this.expectJSX('{');\n\t this.finishJSX();\n\t if (this.match('}')) {\n\t this.tolerateError('JSX attributes must only be assigned a non-empty expression');\n\t }\n\t var expression = this.parseAssignmentExpression();\n\t this.reenterJSX();\n\t return this.finalize(node, new JSXNode.JSXExpressionContainer(expression));\n\t };\n\t JSXParser.prototype.parseJSXAttributeValue = function () {\n\t return this.matchJSX('{') ? this.parseJSXExpressionAttribute() :\n\t this.matchJSX('<') ? this.parseJSXElement() : this.parseJSXStringLiteralAttribute();\n\t };\n\t JSXParser.prototype.parseJSXNameValueAttribute = function () {\n\t var node = this.createJSXNode();\n\t var name = this.parseJSXAttributeName();\n\t var value = null;\n\t if (this.matchJSX('=')) {\n\t this.expectJSX('=');\n\t value = this.parseJSXAttributeValue();\n\t }\n\t return this.finalize(node, new JSXNode.JSXAttribute(name, value));\n\t };\n\t JSXParser.prototype.parseJSXSpreadAttribute = function () {\n\t var node = this.createJSXNode();\n\t this.expectJSX('{');\n\t this.expectJSX('...');\n\t this.finishJSX();\n\t var argument = this.parseAssignmentExpression();\n\t this.reenterJSX();\n\t return this.finalize(node, new JSXNode.JSXSpreadAttribute(argument));\n\t };\n\t JSXParser.prototype.parseJSXAttributes = function () {\n\t var attributes = [];\n\t while (!this.matchJSX('/') && !this.matchJSX('>')) {\n\t var attribute = this.matchJSX('{') ? this.parseJSXSpreadAttribute() :\n\t this.parseJSXNameValueAttribute();\n\t attributes.push(attribute);\n\t }\n\t return attributes;\n\t };\n\t JSXParser.prototype.parseJSXOpeningElement = function () {\n\t var node = this.createJSXNode();\n\t this.expectJSX('<');\n\t var name = this.parseJSXElementName();\n\t var attributes = this.parseJSXAttributes();\n\t var selfClosing = this.matchJSX('/');\n\t if (selfClosing) {\n\t this.expectJSX('/');\n\t }\n\t this.expectJSX('>');\n\t return this.finalize(node, new JSXNode.JSXOpeningElement(name, selfClosing, attributes));\n\t };\n\t JSXParser.prototype.parseJSXBoundaryElement = function () {\n\t var node = this.createJSXNode();\n\t this.expectJSX('<');\n\t if (this.matchJSX('/')) {\n\t this.expectJSX('/');\n\t var name_3 = this.parseJSXElementName();\n\t this.expectJSX('>');\n\t return this.finalize(node, new JSXNode.JSXClosingElement(name_3));\n\t }\n\t var name = this.parseJSXElementName();\n\t var attributes = this.parseJSXAttributes();\n\t var selfClosing = this.matchJSX('/');\n\t if (selfClosing) {\n\t this.expectJSX('/');\n\t }\n\t this.expectJSX('>');\n\t return this.finalize(node, new JSXNode.JSXOpeningElement(name, selfClosing, attributes));\n\t };\n\t JSXParser.prototype.parseJSXEmptyExpression = function () {\n\t var node = this.createJSXChildNode();\n\t this.collectComments();\n\t this.lastMarker.index = this.scanner.index;\n\t this.lastMarker.line = this.scanner.lineNumber;\n\t this.lastMarker.column = this.scanner.index - this.scanner.lineStart;\n\t return this.finalize(node, new JSXNode.JSXEmptyExpression());\n\t };\n\t JSXParser.prototype.parseJSXExpressionContainer = function () {\n\t var node = this.createJSXNode();\n\t this.expectJSX('{');\n\t var expression;\n\t if (this.matchJSX('}')) {\n\t expression = this.parseJSXEmptyExpression();\n\t this.expectJSX('}');\n\t }\n\t else {\n\t this.finishJSX();\n\t expression = this.parseAssignmentExpression();\n\t this.reenterJSX();\n\t }\n\t return this.finalize(node, new JSXNode.JSXExpressionContainer(expression));\n\t };\n\t JSXParser.prototype.parseJSXChildren = function () {\n\t var children = [];\n\t while (!this.scanner.eof()) {\n\t var node = this.createJSXChildNode();\n\t var token = this.nextJSXText();\n\t if (token.start < token.end) {\n\t var raw = this.getTokenRaw(token);\n\t var child = this.finalize(node, new JSXNode.JSXText(token.value, raw));\n\t children.push(child);\n\t }\n\t if (this.scanner.source[this.scanner.index] === '{') {\n\t var container = this.parseJSXExpressionContainer();\n\t children.push(container);\n\t }\n\t else {\n\t break;\n\t }\n\t }\n\t return children;\n\t };\n\t JSXParser.prototype.parseComplexJSXElement = function (el) {\n\t var stack = [];\n\t while (!this.scanner.eof()) {\n\t el.children = el.children.concat(this.parseJSXChildren());\n\t var node = this.createJSXChildNode();\n\t var element = this.parseJSXBoundaryElement();\n\t if (element.type === jsx_syntax_1.JSXSyntax.JSXOpeningElement) {\n\t var opening = element;\n\t if (opening.selfClosing) {\n\t var child = this.finalize(node, new JSXNode.JSXElement(opening, [], null));\n\t el.children.push(child);\n\t }\n\t else {\n\t stack.push(el);\n\t el = { node: node, opening: opening, closing: null, children: [] };\n\t }\n\t }\n\t if (element.type === jsx_syntax_1.JSXSyntax.JSXClosingElement) {\n\t el.closing = element;\n\t var open_1 = getQualifiedElementName(el.opening.name);\n\t var close_1 = getQualifiedElementName(el.closing.name);\n\t if (open_1 !== close_1) {\n\t this.tolerateError('Expected corresponding JSX closing tag for %0', open_1);\n\t }\n\t if (stack.length > 0) {\n\t var child = this.finalize(el.node, new JSXNode.JSXElement(el.opening, el.children, el.closing));\n\t el = stack[stack.length - 1];\n\t el.children.push(child);\n\t stack.pop();\n\t }\n\t else {\n\t break;\n\t }\n\t }\n\t }\n\t return el;\n\t };\n\t JSXParser.prototype.parseJSXElement = function () {\n\t var node = this.createJSXNode();\n\t var opening = this.parseJSXOpeningElement();\n\t var children = [];\n\t var closing = null;\n\t if (!opening.selfClosing) {\n\t var el = this.parseComplexJSXElement({ node: node, opening: opening, closing: closing, children: children });\n\t children = el.children;\n\t closing = el.closing;\n\t }\n\t return this.finalize(node, new JSXNode.JSXElement(opening, children, closing));\n\t };\n\t JSXParser.prototype.parseJSXRoot = function () {\n\t // Pop the opening '<' added from the lookahead.\n\t if (this.config.tokens) {\n\t this.tokens.pop();\n\t }\n\t this.startJSX();\n\t var element = this.parseJSXElement();\n\t this.finishJSX();\n\t return element;\n\t };\n\t JSXParser.prototype.isStartOfExpression = function () {\n\t return _super.prototype.isStartOfExpression.call(this) || this.match('<');\n\t };\n\t return JSXParser;\n\t}(parser_1.Parser));\n\texports.JSXParser = JSXParser;\n\n\n/***/ },\n/* 4 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\t// See also tools/generate-unicode-regex.js.\n\tvar Regex = {\n\t // Unicode v8.0.0 NonAsciiIdentifierStart:\n\t NonAsciiIdentifierStart: /[\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u08A0-\\u08B4\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2118-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u309B-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FD5\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6EF\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7AD\\uA7B0-\\uA7B7\\uA7F7-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB65\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDD40-\\uDD74\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF30-\\uDF4A\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF\\uDFD1-\\uDFD5]|\\uD801[\\uDC00-\\uDC9D\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE33\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2]|\\uD804[\\uDC03-\\uDC37\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDD03-\\uDD26\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEDE\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF50\\uDF5D-\\uDF61]|\\uD805[\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDD80-\\uDDAE\\uDDD8-\\uDDDB\\uDE00-\\uDE2F\\uDE44\\uDE80-\\uDEAA\\uDF00-\\uDF19]|\\uD806[\\uDCA0-\\uDCDF\\uDCFF\\uDEC0-\\uDEF8]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC00-\\uDC6E\\uDC80-\\uDD43]|[\\uD80C\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDF00-\\uDF44\\uDF50\\uDF93-\\uDF9F]|\\uD82C[\\uDC00\\uDC01]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB]|\\uD83A[\\uDC00-\\uDCC4]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDED6\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF34\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1]|\\uD87E[\\uDC00-\\uDE1D]/,\n\t // Unicode v8.0.0 NonAsciiIdentifierPart:\n\t NonAsciiIdentifierPart: /[\\xAA\\xB5\\xB7\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0300-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u0483-\\u0487\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0610-\\u061A\\u0620-\\u0669\\u066E-\\u06D3\\u06D5-\\u06DC\\u06DF-\\u06E8\\u06EA-\\u06FC\\u06FF\\u0710-\\u074A\\u074D-\\u07B1\\u07C0-\\u07F5\\u07FA\\u0800-\\u082D\\u0840-\\u085B\\u08A0-\\u08B4\\u08E3-\\u0963\\u0966-\\u096F\\u0971-\\u0983\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BC-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CE\\u09D7\\u09DC\\u09DD\\u09DF-\\u09E3\\u09E6-\\u09F1\\u0A01-\\u0A03\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A59-\\u0A5C\\u0A5E\\u0A66-\\u0A75\\u0A81-\\u0A83\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABC-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AD0\\u0AE0-\\u0AE3\\u0AE6-\\u0AEF\\u0AF9\\u0B01-\\u0B03\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3C-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B56\\u0B57\\u0B5C\\u0B5D\\u0B5F-\\u0B63\\u0B66-\\u0B6F\\u0B71\\u0B82\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD0\\u0BD7\\u0BE6-\\u0BEF\\u0C00-\\u0C03\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C58-\\u0C5A\\u0C60-\\u0C63\\u0C66-\\u0C6F\\u0C81-\\u0C83\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBC-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CDE\\u0CE0-\\u0CE3\\u0CE6-\\u0CEF\\u0CF1\\u0CF2\\u0D01-\\u0D03\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4E\\u0D57\\u0D5F-\\u0D63\\u0D66-\\u0D6F\\u0D7A-\\u0D7F\\u0D82\\u0D83\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DE6-\\u0DEF\\u0DF2\\u0DF3\\u0E01-\\u0E3A\\u0E40-\\u0E4E\\u0E50-\\u0E59\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB9\\u0EBB-\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EC8-\\u0ECD\\u0ED0-\\u0ED9\\u0EDC-\\u0EDF\\u0F00\\u0F18\\u0F19\\u0F20-\\u0F29\\u0F35\\u0F37\\u0F39\\u0F3E-\\u0F47\\u0F49-\\u0F6C\\u0F71-\\u0F84\\u0F86-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u1000-\\u1049\\u1050-\\u109D\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u135D-\\u135F\\u1369-\\u1371\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1714\\u1720-\\u1734\\u1740-\\u1753\\u1760-\\u176C\\u176E-\\u1770\\u1772\\u1773\\u1780-\\u17D3\\u17D7\\u17DC\\u17DD\\u17E0-\\u17E9\\u180B-\\u180D\\u1810-\\u1819\\u1820-\\u1877\\u1880-\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1920-\\u192B\\u1930-\\u193B\\u1946-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u19D0-\\u19DA\\u1A00-\\u1A1B\\u1A20-\\u1A5E\\u1A60-\\u1A7C\\u1A7F-\\u1A89\\u1A90-\\u1A99\\u1AA7\\u1AB0-\\u1ABD\\u1B00-\\u1B4B\\u1B50-\\u1B59\\u1B6B-\\u1B73\\u1B80-\\u1BF3\\u1C00-\\u1C37\\u1C40-\\u1C49\\u1C4D-\\u1C7D\\u1CD0-\\u1CD2\\u1CD4-\\u1CF6\\u1CF8\\u1CF9\\u1D00-\\u1DF5\\u1DFC-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u200C\\u200D\\u203F\\u2040\\u2054\\u2071\\u207F\\u2090-\\u209C\\u20D0-\\u20DC\\u20E1\\u20E5-\\u20F0\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2118-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D7F-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2DE0-\\u2DFF\\u3005-\\u3007\\u3021-\\u302F\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u3099-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FD5\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA62B\\uA640-\\uA66F\\uA674-\\uA67D\\uA67F-\\uA6F1\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7AD\\uA7B0-\\uA7B7\\uA7F7-\\uA827\\uA840-\\uA873\\uA880-\\uA8C4\\uA8D0-\\uA8D9\\uA8E0-\\uA8F7\\uA8FB\\uA8FD\\uA900-\\uA92D\\uA930-\\uA953\\uA960-\\uA97C\\uA980-\\uA9C0\\uA9CF-\\uA9D9\\uA9E0-\\uA9FE\\uAA00-\\uAA36\\uAA40-\\uAA4D\\uAA50-\\uAA59\\uAA60-\\uAA76\\uAA7A-\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEF\\uAAF2-\\uAAF6\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB65\\uAB70-\\uABEA\\uABEC\\uABED\\uABF0-\\uABF9\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE00-\\uFE0F\\uFE20-\\uFE2F\\uFE33\\uFE34\\uFE4D-\\uFE4F\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF10-\\uFF19\\uFF21-\\uFF3A\\uFF3F\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDD40-\\uDD74\\uDDFD\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDEE0\\uDF00-\\uDF1F\\uDF30-\\uDF4A\\uDF50-\\uDF7A\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF\\uDFD1-\\uDFD5]|\\uD801[\\uDC00-\\uDC9D\\uDCA0-\\uDCA9\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE33\\uDE38-\\uDE3A\\uDE3F\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE6\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2]|\\uD804[\\uDC00-\\uDC46\\uDC66-\\uDC6F\\uDC7F-\\uDCBA\\uDCD0-\\uDCE8\\uDCF0-\\uDCF9\\uDD00-\\uDD34\\uDD36-\\uDD3F\\uDD50-\\uDD73\\uDD76\\uDD80-\\uDDC4\\uDDCA-\\uDDCC\\uDDD0-\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE37\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEEA\\uDEF0-\\uDEF9\\uDF00-\\uDF03\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3C-\\uDF44\\uDF47\\uDF48\\uDF4B-\\uDF4D\\uDF50\\uDF57\\uDF5D-\\uDF63\\uDF66-\\uDF6C\\uDF70-\\uDF74]|\\uD805[\\uDC80-\\uDCC5\\uDCC7\\uDCD0-\\uDCD9\\uDD80-\\uDDB5\\uDDB8-\\uDDC0\\uDDD8-\\uDDDD\\uDE00-\\uDE40\\uDE44\\uDE50-\\uDE59\\uDE80-\\uDEB7\\uDEC0-\\uDEC9\\uDF00-\\uDF19\\uDF1D-\\uDF2B\\uDF30-\\uDF39]|\\uD806[\\uDCA0-\\uDCE9\\uDCFF\\uDEC0-\\uDEF8]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC00-\\uDC6E\\uDC80-\\uDD43]|[\\uD80C\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE60-\\uDE69\\uDED0-\\uDEED\\uDEF0-\\uDEF4\\uDF00-\\uDF36\\uDF40-\\uDF43\\uDF50-\\uDF59\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDF00-\\uDF44\\uDF50-\\uDF7E\\uDF8F-\\uDF9F]|\\uD82C[\\uDC00\\uDC01]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99\\uDC9D\\uDC9E]|\\uD834[\\uDD65-\\uDD69\\uDD6D-\\uDD72\\uDD7B-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDE42-\\uDE44]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB\\uDFCE-\\uDFFF]|\\uD836[\\uDE00-\\uDE36\\uDE3B-\\uDE6C\\uDE75\\uDE84\\uDE9B-\\uDE9F\\uDEA1-\\uDEAF]|\\uD83A[\\uDC00-\\uDCC4\\uDCD0-\\uDCD6]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDED6\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF34\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1]|\\uD87E[\\uDC00-\\uDE1D]|\\uDB40[\\uDD00-\\uDDEF]/\n\t};\n\texports.Character = {\n\t /* tslint:disable:no-bitwise */\n\t fromCodePoint: function (cp) {\n\t return (cp < 0x10000) ? String.fromCharCode(cp) :\n\t String.fromCharCode(0xD800 + ((cp - 0x10000) >> 10)) +\n\t String.fromCharCode(0xDC00 + ((cp - 0x10000) & 1023));\n\t },\n\t // https://tc39.github.io/ecma262/#sec-white-space\n\t isWhiteSpace: function (cp) {\n\t return (cp === 0x20) || (cp === 0x09) || (cp === 0x0B) || (cp === 0x0C) || (cp === 0xA0) ||\n\t (cp >= 0x1680 && [0x1680, 0x2000, 0x2001, 0x2002, 0x2003, 0x2004, 0x2005, 0x2006, 0x2007, 0x2008, 0x2009, 0x200A, 0x202F, 0x205F, 0x3000, 0xFEFF].indexOf(cp) >= 0);\n\t },\n\t // https://tc39.github.io/ecma262/#sec-line-terminators\n\t isLineTerminator: function (cp) {\n\t return (cp === 0x0A) || (cp === 0x0D) || (cp === 0x2028) || (cp === 0x2029);\n\t },\n\t // https://tc39.github.io/ecma262/#sec-names-and-keywords\n\t isIdentifierStart: function (cp) {\n\t return (cp === 0x24) || (cp === 0x5F) ||\n\t (cp >= 0x41 && cp <= 0x5A) ||\n\t (cp >= 0x61 && cp <= 0x7A) ||\n\t (cp === 0x5C) ||\n\t ((cp >= 0x80) && Regex.NonAsciiIdentifierStart.test(exports.Character.fromCodePoint(cp)));\n\t },\n\t isIdentifierPart: function (cp) {\n\t return (cp === 0x24) || (cp === 0x5F) ||\n\t (cp >= 0x41 && cp <= 0x5A) ||\n\t (cp >= 0x61 && cp <= 0x7A) ||\n\t (cp >= 0x30 && cp <= 0x39) ||\n\t (cp === 0x5C) ||\n\t ((cp >= 0x80) && Regex.NonAsciiIdentifierPart.test(exports.Character.fromCodePoint(cp)));\n\t },\n\t // https://tc39.github.io/ecma262/#sec-literals-numeric-literals\n\t isDecimalDigit: function (cp) {\n\t return (cp >= 0x30 && cp <= 0x39); // 0..9\n\t },\n\t isHexDigit: function (cp) {\n\t return (cp >= 0x30 && cp <= 0x39) ||\n\t (cp >= 0x41 && cp <= 0x46) ||\n\t (cp >= 0x61 && cp <= 0x66); // a..f\n\t },\n\t isOctalDigit: function (cp) {\n\t return (cp >= 0x30 && cp <= 0x37); // 0..7\n\t }\n\t};\n\n\n/***/ },\n/* 5 */\n/***/ function(module, exports, __nested_webpack_require_54354__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar jsx_syntax_1 = __nested_webpack_require_54354__(6);\n\t/* tslint:disable:max-classes-per-file */\n\tvar JSXClosingElement = (function () {\n\t function JSXClosingElement(name) {\n\t this.type = jsx_syntax_1.JSXSyntax.JSXClosingElement;\n\t this.name = name;\n\t }\n\t return JSXClosingElement;\n\t}());\n\texports.JSXClosingElement = JSXClosingElement;\n\tvar JSXElement = (function () {\n\t function JSXElement(openingElement, children, closingElement) {\n\t this.type = jsx_syntax_1.JSXSyntax.JSXElement;\n\t this.openingElement = openingElement;\n\t this.children = children;\n\t this.closingElement = closingElement;\n\t }\n\t return JSXElement;\n\t}());\n\texports.JSXElement = JSXElement;\n\tvar JSXEmptyExpression = (function () {\n\t function JSXEmptyExpression() {\n\t this.type = jsx_syntax_1.JSXSyntax.JSXEmptyExpression;\n\t }\n\t return JSXEmptyExpression;\n\t}());\n\texports.JSXEmptyExpression = JSXEmptyExpression;\n\tvar JSXExpressionContainer = (function () {\n\t function JSXExpressionContainer(expression) {\n\t this.type = jsx_syntax_1.JSXSyntax.JSXExpressionContainer;\n\t this.expression = expression;\n\t }\n\t return JSXExpressionContainer;\n\t}());\n\texports.JSXExpressionContainer = JSXExpressionContainer;\n\tvar JSXIdentifier = (function () {\n\t function JSXIdentifier(name) {\n\t this.type = jsx_syntax_1.JSXSyntax.JSXIdentifier;\n\t this.name = name;\n\t }\n\t return JSXIdentifier;\n\t}());\n\texports.JSXIdentifier = JSXIdentifier;\n\tvar JSXMemberExpression = (function () {\n\t function JSXMemberExpression(object, property) {\n\t this.type = jsx_syntax_1.JSXSyntax.JSXMemberExpression;\n\t this.object = object;\n\t this.property = property;\n\t }\n\t return JSXMemberExpression;\n\t}());\n\texports.JSXMemberExpression = JSXMemberExpression;\n\tvar JSXAttribute = (function () {\n\t function JSXAttribute(name, value) {\n\t this.type = jsx_syntax_1.JSXSyntax.JSXAttribute;\n\t this.name = name;\n\t this.value = value;\n\t }\n\t return JSXAttribute;\n\t}());\n\texports.JSXAttribute = JSXAttribute;\n\tvar JSXNamespacedName = (function () {\n\t function JSXNamespacedName(namespace, name) {\n\t this.type = jsx_syntax_1.JSXSyntax.JSXNamespacedName;\n\t this.namespace = namespace;\n\t this.name = name;\n\t }\n\t return JSXNamespacedName;\n\t}());\n\texports.JSXNamespacedName = JSXNamespacedName;\n\tvar JSXOpeningElement = (function () {\n\t function JSXOpeningElement(name, selfClosing, attributes) {\n\t this.type = jsx_syntax_1.JSXSyntax.JSXOpeningElement;\n\t this.name = name;\n\t this.selfClosing = selfClosing;\n\t this.attributes = attributes;\n\t }\n\t return JSXOpeningElement;\n\t}());\n\texports.JSXOpeningElement = JSXOpeningElement;\n\tvar JSXSpreadAttribute = (function () {\n\t function JSXSpreadAttribute(argument) {\n\t this.type = jsx_syntax_1.JSXSyntax.JSXSpreadAttribute;\n\t this.argument = argument;\n\t }\n\t return JSXSpreadAttribute;\n\t}());\n\texports.JSXSpreadAttribute = JSXSpreadAttribute;\n\tvar JSXText = (function () {\n\t function JSXText(value, raw) {\n\t this.type = jsx_syntax_1.JSXSyntax.JSXText;\n\t this.value = value;\n\t this.raw = raw;\n\t }\n\t return JSXText;\n\t}());\n\texports.JSXText = JSXText;\n\n\n/***/ },\n/* 6 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\texports.JSXSyntax = {\n\t JSXAttribute: 'JSXAttribute',\n\t JSXClosingElement: 'JSXClosingElement',\n\t JSXElement: 'JSXElement',\n\t JSXEmptyExpression: 'JSXEmptyExpression',\n\t JSXExpressionContainer: 'JSXExpressionContainer',\n\t JSXIdentifier: 'JSXIdentifier',\n\t JSXMemberExpression: 'JSXMemberExpression',\n\t JSXNamespacedName: 'JSXNamespacedName',\n\t JSXOpeningElement: 'JSXOpeningElement',\n\t JSXSpreadAttribute: 'JSXSpreadAttribute',\n\t JSXText: 'JSXText'\n\t};\n\n\n/***/ },\n/* 7 */\n/***/ function(module, exports, __nested_webpack_require_58416__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar syntax_1 = __nested_webpack_require_58416__(2);\n\t/* tslint:disable:max-classes-per-file */\n\tvar ArrayExpression = (function () {\n\t function ArrayExpression(elements) {\n\t this.type = syntax_1.Syntax.ArrayExpression;\n\t this.elements = elements;\n\t }\n\t return ArrayExpression;\n\t}());\n\texports.ArrayExpression = ArrayExpression;\n\tvar ArrayPattern = (function () {\n\t function ArrayPattern(elements) {\n\t this.type = syntax_1.Syntax.ArrayPattern;\n\t this.elements = elements;\n\t }\n\t return ArrayPattern;\n\t}());\n\texports.ArrayPattern = ArrayPattern;\n\tvar ArrowFunctionExpression = (function () {\n\t function ArrowFunctionExpression(params, body, expression) {\n\t this.type = syntax_1.Syntax.ArrowFunctionExpression;\n\t this.id = null;\n\t this.params = params;\n\t this.body = body;\n\t this.generator = false;\n\t this.expression = expression;\n\t this.async = false;\n\t }\n\t return ArrowFunctionExpression;\n\t}());\n\texports.ArrowFunctionExpression = ArrowFunctionExpression;\n\tvar AssignmentExpression = (function () {\n\t function AssignmentExpression(operator, left, right) {\n\t this.type = syntax_1.Syntax.AssignmentExpression;\n\t this.operator = operator;\n\t this.left = left;\n\t this.right = right;\n\t }\n\t return AssignmentExpression;\n\t}());\n\texports.AssignmentExpression = AssignmentExpression;\n\tvar AssignmentPattern = (function () {\n\t function AssignmentPattern(left, right) {\n\t this.type = syntax_1.Syntax.AssignmentPattern;\n\t this.left = left;\n\t this.right = right;\n\t }\n\t return AssignmentPattern;\n\t}());\n\texports.AssignmentPattern = AssignmentPattern;\n\tvar AsyncArrowFunctionExpression = (function () {\n\t function AsyncArrowFunctionExpression(params, body, expression) {\n\t this.type = syntax_1.Syntax.ArrowFunctionExpression;\n\t this.id = null;\n\t this.params = params;\n\t this.body = body;\n\t this.generator = false;\n\t this.expression = expression;\n\t this.async = true;\n\t }\n\t return AsyncArrowFunctionExpression;\n\t}());\n\texports.AsyncArrowFunctionExpression = AsyncArrowFunctionExpression;\n\tvar AsyncFunctionDeclaration = (function () {\n\t function AsyncFunctionDeclaration(id, params, body) {\n\t this.type = syntax_1.Syntax.FunctionDeclaration;\n\t this.id = id;\n\t this.params = params;\n\t this.body = body;\n\t this.generator = false;\n\t this.expression = false;\n\t this.async = true;\n\t }\n\t return AsyncFunctionDeclaration;\n\t}());\n\texports.AsyncFunctionDeclaration = AsyncFunctionDeclaration;\n\tvar AsyncFunctionExpression = (function () {\n\t function AsyncFunctionExpression(id, params, body) {\n\t this.type = syntax_1.Syntax.FunctionExpression;\n\t this.id = id;\n\t this.params = params;\n\t this.body = body;\n\t this.generator = false;\n\t this.expression = false;\n\t this.async = true;\n\t }\n\t return AsyncFunctionExpression;\n\t}());\n\texports.AsyncFunctionExpression = AsyncFunctionExpression;\n\tvar AwaitExpression = (function () {\n\t function AwaitExpression(argument) {\n\t this.type = syntax_1.Syntax.AwaitExpression;\n\t this.argument = argument;\n\t }\n\t return AwaitExpression;\n\t}());\n\texports.AwaitExpression = AwaitExpression;\n\tvar BinaryExpression = (function () {\n\t function BinaryExpression(operator, left, right) {\n\t var logical = (operator === '||' || operator === '&&');\n\t this.type = logical ? syntax_1.Syntax.LogicalExpression : syntax_1.Syntax.BinaryExpression;\n\t this.operator = operator;\n\t this.left = left;\n\t this.right = right;\n\t }\n\t return BinaryExpression;\n\t}());\n\texports.BinaryExpression = BinaryExpression;\n\tvar BlockStatement = (function () {\n\t function BlockStatement(body) {\n\t this.type = syntax_1.Syntax.BlockStatement;\n\t this.body = body;\n\t }\n\t return BlockStatement;\n\t}());\n\texports.BlockStatement = BlockStatement;\n\tvar BreakStatement = (function () {\n\t function BreakStatement(label) {\n\t this.type = syntax_1.Syntax.BreakStatement;\n\t this.label = label;\n\t }\n\t return BreakStatement;\n\t}());\n\texports.BreakStatement = BreakStatement;\n\tvar CallExpression = (function () {\n\t function CallExpression(callee, args) {\n\t this.type = syntax_1.Syntax.CallExpression;\n\t this.callee = callee;\n\t this.arguments = args;\n\t }\n\t return CallExpression;\n\t}());\n\texports.CallExpression = CallExpression;\n\tvar CatchClause = (function () {\n\t function CatchClause(param, body) {\n\t this.type = syntax_1.Syntax.CatchClause;\n\t this.param = param;\n\t this.body = body;\n\t }\n\t return CatchClause;\n\t}());\n\texports.CatchClause = CatchClause;\n\tvar ClassBody = (function () {\n\t function ClassBody(body) {\n\t this.type = syntax_1.Syntax.ClassBody;\n\t this.body = body;\n\t }\n\t return ClassBody;\n\t}());\n\texports.ClassBody = ClassBody;\n\tvar ClassDeclaration = (function () {\n\t function ClassDeclaration(id, superClass, body) {\n\t this.type = syntax_1.Syntax.ClassDeclaration;\n\t this.id = id;\n\t this.superClass = superClass;\n\t this.body = body;\n\t }\n\t return ClassDeclaration;\n\t}());\n\texports.ClassDeclaration = ClassDeclaration;\n\tvar ClassExpression = (function () {\n\t function ClassExpression(id, superClass, body) {\n\t this.type = syntax_1.Syntax.ClassExpression;\n\t this.id = id;\n\t this.superClass = superClass;\n\t this.body = body;\n\t }\n\t return ClassExpression;\n\t}());\n\texports.ClassExpression = ClassExpression;\n\tvar ComputedMemberExpression = (function () {\n\t function ComputedMemberExpression(object, property) {\n\t this.type = syntax_1.Syntax.MemberExpression;\n\t this.computed = true;\n\t this.object = object;\n\t this.property = property;\n\t }\n\t return ComputedMemberExpression;\n\t}());\n\texports.ComputedMemberExpression = ComputedMemberExpression;\n\tvar ConditionalExpression = (function () {\n\t function ConditionalExpression(test, consequent, alternate) {\n\t this.type = syntax_1.Syntax.ConditionalExpression;\n\t this.test = test;\n\t this.consequent = consequent;\n\t this.alternate = alternate;\n\t }\n\t return ConditionalExpression;\n\t}());\n\texports.ConditionalExpression = ConditionalExpression;\n\tvar ContinueStatement = (function () {\n\t function ContinueStatement(label) {\n\t this.type = syntax_1.Syntax.ContinueStatement;\n\t this.label = label;\n\t }\n\t return ContinueStatement;\n\t}());\n\texports.ContinueStatement = ContinueStatement;\n\tvar DebuggerStatement = (function () {\n\t function DebuggerStatement() {\n\t this.type = syntax_1.Syntax.DebuggerStatement;\n\t }\n\t return DebuggerStatement;\n\t}());\n\texports.DebuggerStatement = DebuggerStatement;\n\tvar Directive = (function () {\n\t function Directive(expression, directive) {\n\t this.type = syntax_1.Syntax.ExpressionStatement;\n\t this.expression = expression;\n\t this.directive = directive;\n\t }\n\t return Directive;\n\t}());\n\texports.Directive = Directive;\n\tvar DoWhileStatement = (function () {\n\t function DoWhileStatement(body, test) {\n\t this.type = syntax_1.Syntax.DoWhileStatement;\n\t this.body = body;\n\t this.test = test;\n\t }\n\t return DoWhileStatement;\n\t}());\n\texports.DoWhileStatement = DoWhileStatement;\n\tvar EmptyStatement = (function () {\n\t function EmptyStatement() {\n\t this.type = syntax_1.Syntax.EmptyStatement;\n\t }\n\t return EmptyStatement;\n\t}());\n\texports.EmptyStatement = EmptyStatement;\n\tvar ExportAllDeclaration = (function () {\n\t function ExportAllDeclaration(source) {\n\t this.type = syntax_1.Syntax.ExportAllDeclaration;\n\t this.source = source;\n\t }\n\t return ExportAllDeclaration;\n\t}());\n\texports.ExportAllDeclaration = ExportAllDeclaration;\n\tvar ExportDefaultDeclaration = (function () {\n\t function ExportDefaultDeclaration(declaration) {\n\t this.type = syntax_1.Syntax.ExportDefaultDeclaration;\n\t this.declaration = declaration;\n\t }\n\t return ExportDefaultDeclaration;\n\t}());\n\texports.ExportDefaultDeclaration = ExportDefaultDeclaration;\n\tvar ExportNamedDeclaration = (function () {\n\t function ExportNamedDeclaration(declaration, specifiers, source) {\n\t this.type = syntax_1.Syntax.ExportNamedDeclaration;\n\t this.declaration = declaration;\n\t this.specifiers = specifiers;\n\t this.source = source;\n\t }\n\t return ExportNamedDeclaration;\n\t}());\n\texports.ExportNamedDeclaration = ExportNamedDeclaration;\n\tvar ExportSpecifier = (function () {\n\t function ExportSpecifier(local, exported) {\n\t this.type = syntax_1.Syntax.ExportSpecifier;\n\t this.exported = exported;\n\t this.local = local;\n\t }\n\t return ExportSpecifier;\n\t}());\n\texports.ExportSpecifier = ExportSpecifier;\n\tvar ExpressionStatement = (function () {\n\t function ExpressionStatement(expression) {\n\t this.type = syntax_1.Syntax.ExpressionStatement;\n\t this.expression = expression;\n\t }\n\t return ExpressionStatement;\n\t}());\n\texports.ExpressionStatement = ExpressionStatement;\n\tvar ForInStatement = (function () {\n\t function ForInStatement(left, right, body) {\n\t this.type = syntax_1.Syntax.ForInStatement;\n\t this.left = left;\n\t this.right = right;\n\t this.body = body;\n\t this.each = false;\n\t }\n\t return ForInStatement;\n\t}());\n\texports.ForInStatement = ForInStatement;\n\tvar ForOfStatement = (function () {\n\t function ForOfStatement(left, right, body) {\n\t this.type = syntax_1.Syntax.ForOfStatement;\n\t this.left = left;\n\t this.right = right;\n\t this.body = body;\n\t }\n\t return ForOfStatement;\n\t}());\n\texports.ForOfStatement = ForOfStatement;\n\tvar ForStatement = (function () {\n\t function ForStatement(init, test, update, body) {\n\t this.type = syntax_1.Syntax.ForStatement;\n\t this.init = init;\n\t this.test = test;\n\t this.update = update;\n\t this.body = body;\n\t }\n\t return ForStatement;\n\t}());\n\texports.ForStatement = ForStatement;\n\tvar FunctionDeclaration = (function () {\n\t function FunctionDeclaration(id, params, body, generator) {\n\t this.type = syntax_1.Syntax.FunctionDeclaration;\n\t this.id = id;\n\t this.params = params;\n\t this.body = body;\n\t this.generator = generator;\n\t this.expression = false;\n\t this.async = false;\n\t }\n\t return FunctionDeclaration;\n\t}());\n\texports.FunctionDeclaration = FunctionDeclaration;\n\tvar FunctionExpression = (function () {\n\t function FunctionExpression(id, params, body, generator) {\n\t this.type = syntax_1.Syntax.FunctionExpression;\n\t this.id = id;\n\t this.params = params;\n\t this.body = body;\n\t this.generator = generator;\n\t this.expression = false;\n\t this.async = false;\n\t }\n\t return FunctionExpression;\n\t}());\n\texports.FunctionExpression = FunctionExpression;\n\tvar Identifier = (function () {\n\t function Identifier(name) {\n\t this.type = syntax_1.Syntax.Identifier;\n\t this.name = name;\n\t }\n\t return Identifier;\n\t}());\n\texports.Identifier = Identifier;\n\tvar IfStatement = (function () {\n\t function IfStatement(test, consequent, alternate) {\n\t this.type = syntax_1.Syntax.IfStatement;\n\t this.test = test;\n\t this.consequent = consequent;\n\t this.alternate = alternate;\n\t }\n\t return IfStatement;\n\t}());\n\texports.IfStatement = IfStatement;\n\tvar ImportDeclaration = (function () {\n\t function ImportDeclaration(specifiers, source) {\n\t this.type = syntax_1.Syntax.ImportDeclaration;\n\t this.specifiers = specifiers;\n\t this.source = source;\n\t }\n\t return ImportDeclaration;\n\t}());\n\texports.ImportDeclaration = ImportDeclaration;\n\tvar ImportDefaultSpecifier = (function () {\n\t function ImportDefaultSpecifier(local) {\n\t this.type = syntax_1.Syntax.ImportDefaultSpecifier;\n\t this.local = local;\n\t }\n\t return ImportDefaultSpecifier;\n\t}());\n\texports.ImportDefaultSpecifier = ImportDefaultSpecifier;\n\tvar ImportNamespaceSpecifier = (function () {\n\t function ImportNamespaceSpecifier(local) {\n\t this.type = syntax_1.Syntax.ImportNamespaceSpecifier;\n\t this.local = local;\n\t }\n\t return ImportNamespaceSpecifier;\n\t}());\n\texports.ImportNamespaceSpecifier = ImportNamespaceSpecifier;\n\tvar ImportSpecifier = (function () {\n\t function ImportSpecifier(local, imported) {\n\t this.type = syntax_1.Syntax.ImportSpecifier;\n\t this.local = local;\n\t this.imported = imported;\n\t }\n\t return ImportSpecifier;\n\t}());\n\texports.ImportSpecifier = ImportSpecifier;\n\tvar LabeledStatement = (function () {\n\t function LabeledStatement(label, body) {\n\t this.type = syntax_1.Syntax.LabeledStatement;\n\t this.label = label;\n\t this.body = body;\n\t }\n\t return LabeledStatement;\n\t}());\n\texports.LabeledStatement = LabeledStatement;\n\tvar Literal = (function () {\n\t function Literal(value, raw) {\n\t this.type = syntax_1.Syntax.Literal;\n\t this.value = value;\n\t this.raw = raw;\n\t }\n\t return Literal;\n\t}());\n\texports.Literal = Literal;\n\tvar MetaProperty = (function () {\n\t function MetaProperty(meta, property) {\n\t this.type = syntax_1.Syntax.MetaProperty;\n\t this.meta = meta;\n\t this.property = property;\n\t }\n\t return MetaProperty;\n\t}());\n\texports.MetaProperty = MetaProperty;\n\tvar MethodDefinition = (function () {\n\t function MethodDefinition(key, computed, value, kind, isStatic) {\n\t this.type = syntax_1.Syntax.MethodDefinition;\n\t this.key = key;\n\t this.computed = computed;\n\t this.value = value;\n\t this.kind = kind;\n\t this.static = isStatic;\n\t }\n\t return MethodDefinition;\n\t}());\n\texports.MethodDefinition = MethodDefinition;\n\tvar Module = (function () {\n\t function Module(body) {\n\t this.type = syntax_1.Syntax.Program;\n\t this.body = body;\n\t this.sourceType = 'module';\n\t }\n\t return Module;\n\t}());\n\texports.Module = Module;\n\tvar NewExpression = (function () {\n\t function NewExpression(callee, args) {\n\t this.type = syntax_1.Syntax.NewExpression;\n\t this.callee = callee;\n\t this.arguments = args;\n\t }\n\t return NewExpression;\n\t}());\n\texports.NewExpression = NewExpression;\n\tvar ObjectExpression = (function () {\n\t function ObjectExpression(properties) {\n\t this.type = syntax_1.Syntax.ObjectExpression;\n\t this.properties = properties;\n\t }\n\t return ObjectExpression;\n\t}());\n\texports.ObjectExpression = ObjectExpression;\n\tvar ObjectPattern = (function () {\n\t function ObjectPattern(properties) {\n\t this.type = syntax_1.Syntax.ObjectPattern;\n\t this.properties = properties;\n\t }\n\t return ObjectPattern;\n\t}());\n\texports.ObjectPattern = ObjectPattern;\n\tvar Property = (function () {\n\t function Property(kind, key, computed, value, method, shorthand) {\n\t this.type = syntax_1.Syntax.Property;\n\t this.key = key;\n\t this.computed = computed;\n\t this.value = value;\n\t this.kind = kind;\n\t this.method = method;\n\t this.shorthand = shorthand;\n\t }\n\t return Property;\n\t}());\n\texports.Property = Property;\n\tvar RegexLiteral = (function () {\n\t function RegexLiteral(value, raw, pattern, flags) {\n\t this.type = syntax_1.Syntax.Literal;\n\t this.value = value;\n\t this.raw = raw;\n\t this.regex = { pattern: pattern, flags: flags };\n\t }\n\t return RegexLiteral;\n\t}());\n\texports.RegexLiteral = RegexLiteral;\n\tvar RestElement = (function () {\n\t function RestElement(argument) {\n\t this.type = syntax_1.Syntax.RestElement;\n\t this.argument = argument;\n\t }\n\t return RestElement;\n\t}());\n\texports.RestElement = RestElement;\n\tvar ReturnStatement = (function () {\n\t function ReturnStatement(argument) {\n\t this.type = syntax_1.Syntax.ReturnStatement;\n\t this.argument = argument;\n\t }\n\t return ReturnStatement;\n\t}());\n\texports.ReturnStatement = ReturnStatement;\n\tvar Script = (function () {\n\t function Script(body) {\n\t this.type = syntax_1.Syntax.Program;\n\t this.body = body;\n\t this.sourceType = 'script';\n\t }\n\t return Script;\n\t}());\n\texports.Script = Script;\n\tvar SequenceExpression = (function () {\n\t function SequenceExpression(expressions) {\n\t this.type = syntax_1.Syntax.SequenceExpression;\n\t this.expressions = expressions;\n\t }\n\t return SequenceExpression;\n\t}());\n\texports.SequenceExpression = SequenceExpression;\n\tvar SpreadElement = (function () {\n\t function SpreadElement(argument) {\n\t this.type = syntax_1.Syntax.SpreadElement;\n\t this.argument = argument;\n\t }\n\t return SpreadElement;\n\t}());\n\texports.SpreadElement = SpreadElement;\n\tvar StaticMemberExpression = (function () {\n\t function StaticMemberExpression(object, property) {\n\t this.type = syntax_1.Syntax.MemberExpression;\n\t this.computed = false;\n\t this.object = object;\n\t this.property = property;\n\t }\n\t return StaticMemberExpression;\n\t}());\n\texports.StaticMemberExpression = StaticMemberExpression;\n\tvar Super = (function () {\n\t function Super() {\n\t this.type = syntax_1.Syntax.Super;\n\t }\n\t return Super;\n\t}());\n\texports.Super = Super;\n\tvar SwitchCase = (function () {\n\t function SwitchCase(test, consequent) {\n\t this.type = syntax_1.Syntax.SwitchCase;\n\t this.test = test;\n\t this.consequent = consequent;\n\t }\n\t return SwitchCase;\n\t}());\n\texports.SwitchCase = SwitchCase;\n\tvar SwitchStatement = (function () {\n\t function SwitchStatement(discriminant, cases) {\n\t this.type = syntax_1.Syntax.SwitchStatement;\n\t this.discriminant = discriminant;\n\t this.cases = cases;\n\t }\n\t return SwitchStatement;\n\t}());\n\texports.SwitchStatement = SwitchStatement;\n\tvar TaggedTemplateExpression = (function () {\n\t function TaggedTemplateExpression(tag, quasi) {\n\t this.type = syntax_1.Syntax.TaggedTemplateExpression;\n\t this.tag = tag;\n\t this.quasi = quasi;\n\t }\n\t return TaggedTemplateExpression;\n\t}());\n\texports.TaggedTemplateExpression = TaggedTemplateExpression;\n\tvar TemplateElement = (function () {\n\t function TemplateElement(value, tail) {\n\t this.type = syntax_1.Syntax.TemplateElement;\n\t this.value = value;\n\t this.tail = tail;\n\t }\n\t return TemplateElement;\n\t}());\n\texports.TemplateElement = TemplateElement;\n\tvar TemplateLiteral = (function () {\n\t function TemplateLiteral(quasis, expressions) {\n\t this.type = syntax_1.Syntax.TemplateLiteral;\n\t this.quasis = quasis;\n\t this.expressions = expressions;\n\t }\n\t return TemplateLiteral;\n\t}());\n\texports.TemplateLiteral = TemplateLiteral;\n\tvar ThisExpression = (function () {\n\t function ThisExpression() {\n\t this.type = syntax_1.Syntax.ThisExpression;\n\t }\n\t return ThisExpression;\n\t}());\n\texports.ThisExpression = ThisExpression;\n\tvar ThrowStatement = (function () {\n\t function ThrowStatement(argument) {\n\t this.type = syntax_1.Syntax.ThrowStatement;\n\t this.argument = argument;\n\t }\n\t return ThrowStatement;\n\t}());\n\texports.ThrowStatement = ThrowStatement;\n\tvar TryStatement = (function () {\n\t function TryStatement(block, handler, finalizer) {\n\t this.type = syntax_1.Syntax.TryStatement;\n\t this.block = block;\n\t this.handler = handler;\n\t this.finalizer = finalizer;\n\t }\n\t return TryStatement;\n\t}());\n\texports.TryStatement = TryStatement;\n\tvar UnaryExpression = (function () {\n\t function UnaryExpression(operator, argument) {\n\t this.type = syntax_1.Syntax.UnaryExpression;\n\t this.operator = operator;\n\t this.argument = argument;\n\t this.prefix = true;\n\t }\n\t return UnaryExpression;\n\t}());\n\texports.UnaryExpression = UnaryExpression;\n\tvar UpdateExpression = (function () {\n\t function UpdateExpression(operator, argument, prefix) {\n\t this.type = syntax_1.Syntax.UpdateExpression;\n\t this.operator = operator;\n\t this.argument = argument;\n\t this.prefix = prefix;\n\t }\n\t return UpdateExpression;\n\t}());\n\texports.UpdateExpression = UpdateExpression;\n\tvar VariableDeclaration = (function () {\n\t function VariableDeclaration(declarations, kind) {\n\t this.type = syntax_1.Syntax.VariableDeclaration;\n\t this.declarations = declarations;\n\t this.kind = kind;\n\t }\n\t return VariableDeclaration;\n\t}());\n\texports.VariableDeclaration = VariableDeclaration;\n\tvar VariableDeclarator = (function () {\n\t function VariableDeclarator(id, init) {\n\t this.type = syntax_1.Syntax.VariableDeclarator;\n\t this.id = id;\n\t this.init = init;\n\t }\n\t return VariableDeclarator;\n\t}());\n\texports.VariableDeclarator = VariableDeclarator;\n\tvar WhileStatement = (function () {\n\t function WhileStatement(test, body) {\n\t this.type = syntax_1.Syntax.WhileStatement;\n\t this.test = test;\n\t this.body = body;\n\t }\n\t return WhileStatement;\n\t}());\n\texports.WhileStatement = WhileStatement;\n\tvar WithStatement = (function () {\n\t function WithStatement(object, body) {\n\t this.type = syntax_1.Syntax.WithStatement;\n\t this.object = object;\n\t this.body = body;\n\t }\n\t return WithStatement;\n\t}());\n\texports.WithStatement = WithStatement;\n\tvar YieldExpression = (function () {\n\t function YieldExpression(argument, delegate) {\n\t this.type = syntax_1.Syntax.YieldExpression;\n\t this.argument = argument;\n\t this.delegate = delegate;\n\t }\n\t return YieldExpression;\n\t}());\n\texports.YieldExpression = YieldExpression;\n\n\n/***/ },\n/* 8 */\n/***/ function(module, exports, __nested_webpack_require_80491__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar assert_1 = __nested_webpack_require_80491__(9);\n\tvar error_handler_1 = __nested_webpack_require_80491__(10);\n\tvar messages_1 = __nested_webpack_require_80491__(11);\n\tvar Node = __nested_webpack_require_80491__(7);\n\tvar scanner_1 = __nested_webpack_require_80491__(12);\n\tvar syntax_1 = __nested_webpack_require_80491__(2);\n\tvar token_1 = __nested_webpack_require_80491__(13);\n\tvar ArrowParameterPlaceHolder = 'ArrowParameterPlaceHolder';\n\tvar Parser = (function () {\n\t function Parser(code, options, delegate) {\n\t if (options === void 0) { options = {}; }\n\t this.config = {\n\t range: (typeof options.range === 'boolean') && options.range,\n\t loc: (typeof options.loc === 'boolean') && options.loc,\n\t source: null,\n\t tokens: (typeof options.tokens === 'boolean') && options.tokens,\n\t comment: (typeof options.comment === 'boolean') && options.comment,\n\t tolerant: (typeof options.tolerant === 'boolean') && options.tolerant\n\t };\n\t if (this.config.loc && options.source && options.source !== null) {\n\t this.config.source = String(options.source);\n\t }\n\t this.delegate = delegate;\n\t this.errorHandler = new error_handler_1.ErrorHandler();\n\t this.errorHandler.tolerant = this.config.tolerant;\n\t this.scanner = new scanner_1.Scanner(code, this.errorHandler);\n\t this.scanner.trackComment = this.config.comment;\n\t this.operatorPrecedence = {\n\t ')': 0,\n\t ';': 0,\n\t ',': 0,\n\t '=': 0,\n\t ']': 0,\n\t '||': 1,\n\t '&&': 2,\n\t '|': 3,\n\t '^': 4,\n\t '&': 5,\n\t '==': 6,\n\t '!=': 6,\n\t '===': 6,\n\t '!==': 6,\n\t '<': 7,\n\t '>': 7,\n\t '<=': 7,\n\t '>=': 7,\n\t '<<': 8,\n\t '>>': 8,\n\t '>>>': 8,\n\t '+': 9,\n\t '-': 9,\n\t '*': 11,\n\t '/': 11,\n\t '%': 11\n\t };\n\t this.lookahead = {\n\t type: 2 /* EOF */,\n\t value: '',\n\t lineNumber: this.scanner.lineNumber,\n\t lineStart: 0,\n\t start: 0,\n\t end: 0\n\t };\n\t this.hasLineTerminator = false;\n\t this.context = {\n\t isModule: false,\n\t await: false,\n\t allowIn: true,\n\t allowStrictDirective: true,\n\t allowYield: true,\n\t firstCoverInitializedNameError: null,\n\t isAssignmentTarget: false,\n\t isBindingElement: false,\n\t inFunctionBody: false,\n\t inIteration: false,\n\t inSwitch: false,\n\t labelSet: {},\n\t strict: false\n\t };\n\t this.tokens = [];\n\t this.startMarker = {\n\t index: 0,\n\t line: this.scanner.lineNumber,\n\t column: 0\n\t };\n\t this.lastMarker = {\n\t index: 0,\n\t line: this.scanner.lineNumber,\n\t column: 0\n\t };\n\t this.nextToken();\n\t this.lastMarker = {\n\t index: this.scanner.index,\n\t line: this.scanner.lineNumber,\n\t column: this.scanner.index - this.scanner.lineStart\n\t };\n\t }\n\t Parser.prototype.throwError = function (messageFormat) {\n\t var values = [];\n\t for (var _i = 1; _i < arguments.length; _i++) {\n\t values[_i - 1] = arguments[_i];\n\t }\n\t var args = Array.prototype.slice.call(arguments, 1);\n\t var msg = messageFormat.replace(/%(\\d)/g, function (whole, idx) {\n\t assert_1.assert(idx < args.length, 'Message reference must be in range');\n\t return args[idx];\n\t });\n\t var index = this.lastMarker.index;\n\t var line = this.lastMarker.line;\n\t var column = this.lastMarker.column + 1;\n\t throw this.errorHandler.createError(index, line, column, msg);\n\t };\n\t Parser.prototype.tolerateError = function (messageFormat) {\n\t var values = [];\n\t for (var _i = 1; _i < arguments.length; _i++) {\n\t values[_i - 1] = arguments[_i];\n\t }\n\t var args = Array.prototype.slice.call(arguments, 1);\n\t var msg = messageFormat.replace(/%(\\d)/g, function (whole, idx) {\n\t assert_1.assert(idx < args.length, 'Message reference must be in range');\n\t return args[idx];\n\t });\n\t var index = this.lastMarker.index;\n\t var line = this.scanner.lineNumber;\n\t var column = this.lastMarker.column + 1;\n\t this.errorHandler.tolerateError(index, line, column, msg);\n\t };\n\t // Throw an exception because of the token.\n\t Parser.prototype.unexpectedTokenError = function (token, message) {\n\t var msg = message || messages_1.Messages.UnexpectedToken;\n\t var value;\n\t if (token) {\n\t if (!message) {\n\t msg = (token.type === 2 /* EOF */) ? messages_1.Messages.UnexpectedEOS :\n\t (token.type === 3 /* Identifier */) ? messages_1.Messages.UnexpectedIdentifier :\n\t (token.type === 6 /* NumericLiteral */) ? messages_1.Messages.UnexpectedNumber :\n\t (token.type === 8 /* StringLiteral */) ? messages_1.Messages.UnexpectedString :\n\t (token.type === 10 /* Template */) ? messages_1.Messages.UnexpectedTemplate :\n\t messages_1.Messages.UnexpectedToken;\n\t if (token.type === 4 /* Keyword */) {\n\t if (this.scanner.isFutureReservedWord(token.value)) {\n\t msg = messages_1.Messages.UnexpectedReserved;\n\t }\n\t else if (this.context.strict && this.scanner.isStrictModeReservedWord(token.value)) {\n\t msg = messages_1.Messages.StrictReservedWord;\n\t }\n\t }\n\t }\n\t value = token.value;\n\t }\n\t else {\n\t value = 'ILLEGAL';\n\t }\n\t msg = msg.replace('%0', value);\n\t if (token && typeof token.lineNumber === 'number') {\n\t var index = token.start;\n\t var line = token.lineNumber;\n\t var lastMarkerLineStart = this.lastMarker.index - this.lastMarker.column;\n\t var column = token.start - lastMarkerLineStart + 1;\n\t return this.errorHandler.createError(index, line, column, msg);\n\t }\n\t else {\n\t var index = this.lastMarker.index;\n\t var line = this.lastMarker.line;\n\t var column = this.lastMarker.column + 1;\n\t return this.errorHandler.createError(index, line, column, msg);\n\t }\n\t };\n\t Parser.prototype.throwUnexpectedToken = function (token, message) {\n\t throw this.unexpectedTokenError(token, message);\n\t };\n\t Parser.prototype.tolerateUnexpectedToken = function (token, message) {\n\t this.errorHandler.tolerate(this.unexpectedTokenError(token, message));\n\t };\n\t Parser.prototype.collectComments = function () {\n\t if (!this.config.comment) {\n\t this.scanner.scanComments();\n\t }\n\t else {\n\t var comments = this.scanner.scanComments();\n\t if (comments.length > 0 && this.delegate) {\n\t for (var i = 0; i < comments.length; ++i) {\n\t var e = comments[i];\n\t var node = void 0;\n\t node = {\n\t type: e.multiLine ? 'BlockComment' : 'LineComment',\n\t value: this.scanner.source.slice(e.slice[0], e.slice[1])\n\t };\n\t if (this.config.range) {\n\t node.range = e.range;\n\t }\n\t if (this.config.loc) {\n\t node.loc = e.loc;\n\t }\n\t var metadata = {\n\t start: {\n\t line: e.loc.start.line,\n\t column: e.loc.start.column,\n\t offset: e.range[0]\n\t },\n\t end: {\n\t line: e.loc.end.line,\n\t column: e.loc.end.column,\n\t offset: e.range[1]\n\t }\n\t };\n\t this.delegate(node, metadata);\n\t }\n\t }\n\t }\n\t };\n\t // From internal representation to an external structure\n\t Parser.prototype.getTokenRaw = function (token) {\n\t return this.scanner.source.slice(token.start, token.end);\n\t };\n\t Parser.prototype.convertToken = function (token) {\n\t var t = {\n\t type: token_1.TokenName[token.type],\n\t value: this.getTokenRaw(token)\n\t };\n\t if (this.config.range) {\n\t t.range = [token.start, token.end];\n\t }\n\t if (this.config.loc) {\n\t t.loc = {\n\t start: {\n\t line: this.startMarker.line,\n\t column: this.startMarker.column\n\t },\n\t end: {\n\t line: this.scanner.lineNumber,\n\t column: this.scanner.index - this.scanner.lineStart\n\t }\n\t };\n\t }\n\t if (token.type === 9 /* RegularExpression */) {\n\t var pattern = token.pattern;\n\t var flags = token.flags;\n\t t.regex = { pattern: pattern, flags: flags };\n\t }\n\t return t;\n\t };\n\t Parser.prototype.nextToken = function () {\n\t var token = this.lookahead;\n\t this.lastMarker.index = this.scanner.index;\n\t this.lastMarker.line = this.scanner.lineNumber;\n\t this.lastMarker.column = this.scanner.index - this.scanner.lineStart;\n\t this.collectComments();\n\t if (this.scanner.index !== this.startMarker.index) {\n\t this.startMarker.index = this.scanner.index;\n\t this.startMarker.line = this.scanner.lineNumber;\n\t this.startMarker.column = this.scanner.index - this.scanner.lineStart;\n\t }\n\t var next = this.scanner.lex();\n\t this.hasLineTerminator = (token.lineNumber !== next.lineNumber);\n\t if (next && this.context.strict && next.type === 3 /* Identifier */) {\n\t if (this.scanner.isStrictModeReservedWord(next.value)) {\n\t next.type = 4 /* Keyword */;\n\t }\n\t }\n\t this.lookahead = next;\n\t if (this.config.tokens && next.type !== 2 /* EOF */) {\n\t this.tokens.push(this.convertToken(next));\n\t }\n\t return token;\n\t };\n\t Parser.prototype.nextRegexToken = function () {\n\t this.collectComments();\n\t var token = this.scanner.scanRegExp();\n\t if (this.config.tokens) {\n\t // Pop the previous token, '/' or '/='\n\t // This is added from the lookahead token.\n\t this.tokens.pop();\n\t this.tokens.push(this.convertToken(token));\n\t }\n\t // Prime the next lookahead.\n\t this.lookahead = token;\n\t this.nextToken();\n\t return token;\n\t };\n\t Parser.prototype.createNode = function () {\n\t return {\n\t index: this.startMarker.index,\n\t line: this.startMarker.line,\n\t column: this.startMarker.column\n\t };\n\t };\n\t Parser.prototype.startNode = function (token, lastLineStart) {\n\t if (lastLineStart === void 0) { lastLineStart = 0; }\n\t var column = token.start - token.lineStart;\n\t var line = token.lineNumber;\n\t if (column < 0) {\n\t column += lastLineStart;\n\t line--;\n\t }\n\t return {\n\t index: token.start,\n\t line: line,\n\t column: column\n\t };\n\t };\n\t Parser.prototype.finalize = function (marker, node) {\n\t if (this.config.range) {\n\t node.range = [marker.index, this.lastMarker.index];\n\t }\n\t if (this.config.loc) {\n\t node.loc = {\n\t start: {\n\t line: marker.line,\n\t column: marker.column,\n\t },\n\t end: {\n\t line: this.lastMarker.line,\n\t column: this.lastMarker.column\n\t }\n\t };\n\t if (this.config.source) {\n\t node.loc.source = this.config.source;\n\t }\n\t }\n\t if (this.delegate) {\n\t var metadata = {\n\t start: {\n\t line: marker.line,\n\t column: marker.column,\n\t offset: marker.index\n\t },\n\t end: {\n\t line: this.lastMarker.line,\n\t column: this.lastMarker.column,\n\t offset: this.lastMarker.index\n\t }\n\t };\n\t this.delegate(node, metadata);\n\t }\n\t return node;\n\t };\n\t // Expect the next token to match the specified punctuator.\n\t // If not, an exception will be thrown.\n\t Parser.prototype.expect = function (value) {\n\t var token = this.nextToken();\n\t if (token.type !== 7 /* Punctuator */ || token.value !== value) {\n\t this.throwUnexpectedToken(token);\n\t }\n\t };\n\t // Quietly expect a comma when in tolerant mode, otherwise delegates to expect().\n\t Parser.prototype.expectCommaSeparator = function () {\n\t if (this.config.tolerant) {\n\t var token = this.lookahead;\n\t if (token.type === 7 /* Punctuator */ && token.value === ',') {\n\t this.nextToken();\n\t }\n\t else if (token.type === 7 /* Punctuator */ && token.value === ';') {\n\t this.nextToken();\n\t this.tolerateUnexpectedToken(token);\n\t }\n\t else {\n\t this.tolerateUnexpectedToken(token, messages_1.Messages.UnexpectedToken);\n\t }\n\t }\n\t else {\n\t this.expect(',');\n\t }\n\t };\n\t // Expect the next token to match the specified keyword.\n\t // If not, an exception will be thrown.\n\t Parser.prototype.expectKeyword = function (keyword) {\n\t var token = this.nextToken();\n\t if (token.type !== 4 /* Keyword */ || token.value !== keyword) {\n\t this.throwUnexpectedToken(token);\n\t }\n\t };\n\t // Return true if the next token matches the specified punctuator.\n\t Parser.prototype.match = function (value) {\n\t return this.lookahead.type === 7 /* Punctuator */ && this.lookahead.value === value;\n\t };\n\t // Return true if the next token matches the specified keyword\n\t Parser.prototype.matchKeyword = function (keyword) {\n\t return this.lookahead.type === 4 /* Keyword */ && this.lookahead.value === keyword;\n\t };\n\t // Return true if the next token matches the specified contextual keyword\n\t // (where an identifier is sometimes a keyword depending on the context)\n\t Parser.prototype.matchContextualKeyword = function (keyword) {\n\t return this.lookahead.type === 3 /* Identifier */ && this.lookahead.value === keyword;\n\t };\n\t // Return true if the next token is an assignment operator\n\t Parser.prototype.matchAssign = function () {\n\t if (this.lookahead.type !== 7 /* Punctuator */) {\n\t return false;\n\t }\n\t var op = this.lookahead.value;\n\t return op === '=' ||\n\t op === '*=' ||\n\t op === '**=' ||\n\t op === '/=' ||\n\t op === '%=' ||\n\t op === '+=' ||\n\t op === '-=' ||\n\t op === '<<=' ||\n\t op === '>>=' ||\n\t op === '>>>=' ||\n\t op === '&=' ||\n\t op === '^=' ||\n\t op === '|=';\n\t };\n\t // Cover grammar support.\n\t //\n\t // When an assignment expression position starts with an left parenthesis, the determination of the type\n\t // of the syntax is to be deferred arbitrarily long until the end of the parentheses pair (plus a lookahead)\n\t // or the first comma. This situation also defers the determination of all the expressions nested in the pair.\n\t //\n\t // There are three productions that can be parsed in a parentheses pair that needs to be determined\n\t // after the outermost pair is closed. They are:\n\t //\n\t // 1. AssignmentExpression\n\t // 2. BindingElements\n\t // 3. AssignmentTargets\n\t //\n\t // In order to avoid exponential backtracking, we use two flags to denote if the production can be\n\t // binding element or assignment target.\n\t //\n\t // The three productions have the relationship:\n\t //\n\t // BindingElements ⊆ AssignmentTargets ⊆ AssignmentExpression\n\t //\n\t // with a single exception that CoverInitializedName when used directly in an Expression, generates\n\t // an early error. Therefore, we need the third state, firstCoverInitializedNameError, to track the\n\t // first usage of CoverInitializedName and report it when we reached the end of the parentheses pair.\n\t //\n\t // isolateCoverGrammar function runs the given parser function with a new cover grammar context, and it does not\n\t // effect the current flags. This means the production the parser parses is only used as an expression. Therefore\n\t // the CoverInitializedName check is conducted.\n\t //\n\t // inheritCoverGrammar function runs the given parse function with a new cover grammar context, and it propagates\n\t // the flags outside of the parser. This means the production the parser parses is used as a part of a potential\n\t // pattern. The CoverInitializedName check is deferred.\n\t Parser.prototype.isolateCoverGrammar = function (parseFunction) {\n\t var previousIsBindingElement = this.context.isBindingElement;\n\t var previousIsAssignmentTarget = this.context.isAssignmentTarget;\n\t var previousFirstCoverInitializedNameError = this.context.firstCoverInitializedNameError;\n\t this.context.isBindingElement = true;\n\t this.context.isAssignmentTarget = true;\n\t this.context.firstCoverInitializedNameError = null;\n\t var result = parseFunction.call(this);\n\t if (this.context.firstCoverInitializedNameError !== null) {\n\t this.throwUnexpectedToken(this.context.firstCoverInitializedNameError);\n\t }\n\t this.context.isBindingElement = previousIsBindingElement;\n\t this.context.isAssignmentTarget = previousIsAssignmentTarget;\n\t this.context.firstCoverInitializedNameError = previousFirstCoverInitializedNameError;\n\t return result;\n\t };\n\t Parser.prototype.inheritCoverGrammar = function (parseFunction) {\n\t var previousIsBindingElement = this.context.isBindingElement;\n\t var previousIsAssignmentTarget = this.context.isAssignmentTarget;\n\t var previousFirstCoverInitializedNameError = this.context.firstCoverInitializedNameError;\n\t this.context.isBindingElement = true;\n\t this.context.isAssignmentTarget = true;\n\t this.context.firstCoverInitializedNameError = null;\n\t var result = parseFunction.call(this);\n\t this.context.isBindingElement = this.context.isBindingElement && previousIsBindingElement;\n\t this.context.isAssignmentTarget = this.context.isAssignmentTarget && previousIsAssignmentTarget;\n\t this.context.firstCoverInitializedNameError = previousFirstCoverInitializedNameError || this.context.firstCoverInitializedNameError;\n\t return result;\n\t };\n\t Parser.prototype.consumeSemicolon = function () {\n\t if (this.match(';')) {\n\t this.nextToken();\n\t }\n\t else if (!this.hasLineTerminator) {\n\t if (this.lookahead.type !== 2 /* EOF */ && !this.match('}')) {\n\t this.throwUnexpectedToken(this.lookahead);\n\t }\n\t this.lastMarker.index = this.startMarker.index;\n\t this.lastMarker.line = this.startMarker.line;\n\t this.lastMarker.column = this.startMarker.column;\n\t }\n\t };\n\t // https://tc39.github.io/ecma262/#sec-primary-expression\n\t Parser.prototype.parsePrimaryExpression = function () {\n\t var node = this.createNode();\n\t var expr;\n\t var token, raw;\n\t switch (this.lookahead.type) {\n\t case 3 /* Identifier */:\n\t if ((this.context.isModule || this.context.await) && this.lookahead.value === 'await') {\n\t this.tolerateUnexpectedToken(this.lookahead);\n\t }\n\t expr = this.matchAsyncFunction() ? this.parseFunctionExpression() : this.finalize(node, new Node.Identifier(this.nextToken().value));\n\t break;\n\t case 6 /* NumericLiteral */:\n\t case 8 /* StringLiteral */:\n\t if (this.context.strict && this.lookahead.octal) {\n\t this.tolerateUnexpectedToken(this.lookahead, messages_1.Messages.StrictOctalLiteral);\n\t }\n\t this.context.isAssignmentTarget = false;\n\t this.context.isBindingElement = false;\n\t token = this.nextToken();\n\t raw = this.getTokenRaw(token);\n\t expr = this.finalize(node, new Node.Literal(token.value, raw));\n\t break;\n\t case 1 /* BooleanLiteral */:\n\t this.context.isAssignmentTarget = false;\n\t this.context.isBindingElement = false;\n\t token = this.nextToken();\n\t raw = this.getTokenRaw(token);\n\t expr = this.finalize(node, new Node.Literal(token.value === 'true', raw));\n\t break;\n\t case 5 /* NullLiteral */:\n\t this.context.isAssignmentTarget = false;\n\t this.context.isBindingElement = false;\n\t token = this.nextToken();\n\t raw = this.getTokenRaw(token);\n\t expr = this.finalize(node, new Node.Literal(null, raw));\n\t break;\n\t case 10 /* Template */:\n\t expr = this.parseTemplateLiteral();\n\t break;\n\t case 7 /* Punctuator */:\n\t switch (this.lookahead.value) {\n\t case '(':\n\t this.context.isBindingElement = false;\n\t expr = this.inheritCoverGrammar(this.parseGroupExpression);\n\t break;\n\t case '[':\n\t expr = this.inheritCoverGrammar(this.parseArrayInitializer);\n\t break;\n\t case '{':\n\t expr = this.inheritCoverGrammar(this.parseObjectInitializer);\n\t break;\n\t case '/':\n\t case '/=':\n\t this.context.isAssignmentTarget = false;\n\t this.context.isBindingElement = false;\n\t this.scanner.index = this.startMarker.index;\n\t token = this.nextRegexToken();\n\t raw = this.getTokenRaw(token);\n\t expr = this.finalize(node, new Node.RegexLiteral(token.regex, raw, token.pattern, token.flags));\n\t break;\n\t default:\n\t expr = this.throwUnexpectedToken(this.nextToken());\n\t }\n\t break;\n\t case 4 /* Keyword */:\n\t if (!this.context.strict && this.context.allowYield && this.matchKeyword('yield')) {\n\t expr = this.parseIdentifierName();\n\t }\n\t else if (!this.context.strict && this.matchKeyword('let')) {\n\t expr = this.finalize(node, new Node.Identifier(this.nextToken().value));\n\t }\n\t else {\n\t this.context.isAssignmentTarget = false;\n\t this.context.isBindingElement = false;\n\t if (this.matchKeyword('function')) {\n\t expr = this.parseFunctionExpression();\n\t }\n\t else if (this.matchKeyword('this')) {\n\t this.nextToken();\n\t expr = this.finalize(node, new Node.ThisExpression());\n\t }\n\t else if (this.matchKeyword('class')) {\n\t expr = this.parseClassExpression();\n\t }\n\t else {\n\t expr = this.throwUnexpectedToken(this.nextToken());\n\t }\n\t }\n\t break;\n\t default:\n\t expr = this.throwUnexpectedToken(this.nextToken());\n\t }\n\t return expr;\n\t };\n\t // https://tc39.github.io/ecma262/#sec-array-initializer\n\t Parser.prototype.parseSpreadElement = function () {\n\t var node = this.createNode();\n\t this.expect('...');\n\t var arg = this.inheritCoverGrammar(this.parseAssignmentExpression);\n\t return this.finalize(node, new Node.SpreadElement(arg));\n\t };\n\t Parser.prototype.parseArrayInitializer = function () {\n\t var node = this.createNode();\n\t var elements = [];\n\t this.expect('[');\n\t while (!this.match(']')) {\n\t if (this.match(',')) {\n\t this.nextToken();\n\t elements.push(null);\n\t }\n\t else if (this.match('...')) {\n\t var element = this.parseSpreadElement();\n\t if (!this.match(']')) {\n\t this.context.isAssignmentTarget = false;\n\t this.context.isBindingElement = false;\n\t this.expect(',');\n\t }\n\t elements.push(element);\n\t }\n\t else {\n\t elements.push(this.inheritCoverGrammar(this.parseAssignmentExpression));\n\t if (!this.match(']')) {\n\t this.expect(',');\n\t }\n\t }\n\t }\n\t this.expect(']');\n\t return this.finalize(node, new Node.ArrayExpression(elements));\n\t };\n\t // https://tc39.github.io/ecma262/#sec-object-initializer\n\t Parser.prototype.parsePropertyMethod = function (params) {\n\t this.context.isAssignmentTarget = false;\n\t this.context.isBindingElement = false;\n\t var previousStrict = this.context.strict;\n\t var previousAllowStrictDirective = this.context.allowStrictDirective;\n\t this.context.allowStrictDirective = params.simple;\n\t var body = this.isolateCoverGrammar(this.parseFunctionSourceElements);\n\t if (this.context.strict && params.firstRestricted) {\n\t this.tolerateUnexpectedToken(params.firstRestricted, params.message);\n\t }\n\t if (this.context.strict && params.stricted) {\n\t this.tolerateUnexpectedToken(params.stricted, params.message);\n\t }\n\t this.context.strict = previousStrict;\n\t this.context.allowStrictDirective = previousAllowStrictDirective;\n\t return body;\n\t };\n\t Parser.prototype.parsePropertyMethodFunction = function () {\n\t var isGenerator = false;\n\t var node = this.createNode();\n\t var previousAllowYield = this.context.allowYield;\n\t this.context.allowYield = true;\n\t var params = this.parseFormalParameters();\n\t var method = this.parsePropertyMethod(params);\n\t this.context.allowYield = previousAllowYield;\n\t return this.finalize(node, new Node.FunctionExpression(null, params.params, method, isGenerator));\n\t };\n\t Parser.prototype.parsePropertyMethodAsyncFunction = function () {\n\t var node = this.createNode();\n\t var previousAllowYield = this.context.allowYield;\n\t var previousAwait = this.context.await;\n\t this.context.allowYield = false;\n\t this.context.await = true;\n\t var params = this.parseFormalParameters();\n\t var method = this.parsePropertyMethod(params);\n\t this.context.allowYield = previousAllowYield;\n\t this.context.await = previousAwait;\n\t return this.finalize(node, new Node.AsyncFunctionExpression(null, params.params, method));\n\t };\n\t Parser.prototype.parseObjectPropertyKey = function () {\n\t var node = this.createNode();\n\t var token = this.nextToken();\n\t var key;\n\t switch (token.type) {\n\t case 8 /* StringLiteral */:\n\t case 6 /* NumericLiteral */:\n\t if (this.context.strict && token.octal) {\n\t this.tolerateUnexpectedToken(token, messages_1.Messages.StrictOctalLiteral);\n\t }\n\t var raw = this.getTokenRaw(token);\n\t key = this.finalize(node, new Node.Literal(token.value, raw));\n\t break;\n\t case 3 /* Identifier */:\n\t case 1 /* BooleanLiteral */:\n\t case 5 /* NullLiteral */:\n\t case 4 /* Keyword */:\n\t key = this.finalize(node, new Node.Identifier(token.value));\n\t break;\n\t case 7 /* Punctuator */:\n\t if (token.value === '[') {\n\t key = this.isolateCoverGrammar(this.parseAssignmentExpression);\n\t this.expect(']');\n\t }\n\t else {\n\t key = this.throwUnexpectedToken(token);\n\t }\n\t break;\n\t default:\n\t key = this.throwUnexpectedToken(token);\n\t }\n\t return key;\n\t };\n\t Parser.prototype.isPropertyKey = function (key, value) {\n\t return (key.type === syntax_1.Syntax.Identifier && key.name === value) ||\n\t (key.type === syntax_1.Syntax.Literal && key.value === value);\n\t };\n\t Parser.prototype.parseObjectProperty = function (hasProto) {\n\t var node = this.createNode();\n\t var token = this.lookahead;\n\t var kind;\n\t var key = null;\n\t var value = null;\n\t var computed = false;\n\t var method = false;\n\t var shorthand = false;\n\t var isAsync = false;\n\t if (token.type === 3 /* Identifier */) {\n\t var id = token.value;\n\t this.nextToken();\n\t computed = this.match('[');\n\t isAsync = !this.hasLineTerminator && (id === 'async') &&\n\t !this.match(':') && !this.match('(') && !this.match('*') && !this.match(',');\n\t key = isAsync ? this.parseObjectPropertyKey() : this.finalize(node, new Node.Identifier(id));\n\t }\n\t else if (this.match('*')) {\n\t this.nextToken();\n\t }\n\t else {\n\t computed = this.match('[');\n\t key = this.parseObjectPropertyKey();\n\t }\n\t var lookaheadPropertyKey = this.qualifiedPropertyName(this.lookahead);\n\t if (token.type === 3 /* Identifier */ && !isAsync && token.value === 'get' && lookaheadPropertyKey) {\n\t kind = 'get';\n\t computed = this.match('[');\n\t key = this.parseObjectPropertyKey();\n\t this.context.allowYield = false;\n\t value = this.parseGetterMethod();\n\t }\n\t else if (token.type === 3 /* Identifier */ && !isAsync && token.value === 'set' && lookaheadPropertyKey) {\n\t kind = 'set';\n\t computed = this.match('[');\n\t key = this.parseObjectPropertyKey();\n\t value = this.parseSetterMethod();\n\t }\n\t else if (token.type === 7 /* Punctuator */ && token.value === '*' && lookaheadPropertyKey) {\n\t kind = 'init';\n\t computed = this.match('[');\n\t key = this.parseObjectPropertyKey();\n\t value = this.parseGeneratorMethod();\n\t method = true;\n\t }\n\t else {\n\t if (!key) {\n\t this.throwUnexpectedToken(this.lookahead);\n\t }\n\t kind = 'init';\n\t if (this.match(':') && !isAsync) {\n\t if (!computed && this.isPropertyKey(key, '__proto__')) {\n\t if (hasProto.value) {\n\t this.tolerateError(messages_1.Messages.DuplicateProtoProperty);\n\t }\n\t hasProto.value = true;\n\t }\n\t this.nextToken();\n\t value = this.inheritCoverGrammar(this.parseAssignmentExpression);\n\t }\n\t else if (this.match('(')) {\n\t value = isAsync ? this.parsePropertyMethodAsyncFunction() : this.parsePropertyMethodFunction();\n\t method = true;\n\t }\n\t else if (token.type === 3 /* Identifier */) {\n\t var id = this.finalize(node, new Node.Identifier(token.value));\n\t if (this.match('=')) {\n\t this.context.firstCoverInitializedNameError = this.lookahead;\n\t this.nextToken();\n\t shorthand = true;\n\t var init = this.isolateCoverGrammar(this.parseAssignmentExpression);\n\t value = this.finalize(node, new Node.AssignmentPattern(id, init));\n\t }\n\t else {\n\t shorthand = true;\n\t value = id;\n\t }\n\t }\n\t else {\n\t this.throwUnexpectedToken(this.nextToken());\n\t }\n\t }\n\t return this.finalize(node, new Node.Property(kind, key, computed, value, method, shorthand));\n\t };\n\t Parser.prototype.parseObjectInitializer = function () {\n\t var node = this.createNode();\n\t this.expect('{');\n\t var properties = [];\n\t var hasProto = { value: false };\n\t while (!this.match('}')) {\n\t properties.push(this.parseObjectProperty(hasProto));\n\t if (!this.match('}')) {\n\t this.expectCommaSeparator();\n\t }\n\t }\n\t this.expect('}');\n\t return this.finalize(node, new Node.ObjectExpression(properties));\n\t };\n\t // https://tc39.github.io/ecma262/#sec-template-literals\n\t Parser.prototype.parseTemplateHead = function () {\n\t assert_1.assert(this.lookahead.head, 'Template literal must start with a template head');\n\t var node = this.createNode();\n\t var token = this.nextToken();\n\t var raw = token.value;\n\t var cooked = token.cooked;\n\t return this.finalize(node, new Node.TemplateElement({ raw: raw, cooked: cooked }, token.tail));\n\t };\n\t Parser.prototype.parseTemplateElement = function () {\n\t if (this.lookahead.type !== 10 /* Template */) {\n\t this.throwUnexpectedToken();\n\t }\n\t var node = this.createNode();\n\t var token = this.nextToken();\n\t var raw = token.value;\n\t var cooked = token.cooked;\n\t return this.finalize(node, new Node.TemplateElement({ raw: raw, cooked: cooked }, token.tail));\n\t };\n\t Parser.prototype.parseTemplateLiteral = function () {\n\t var node = this.createNode();\n\t var expressions = [];\n\t var quasis = [];\n\t var quasi = this.parseTemplateHead();\n\t quasis.push(quasi);\n\t while (!quasi.tail) {\n\t expressions.push(this.parseExpression());\n\t quasi = this.parseTemplateElement();\n\t quasis.push(quasi);\n\t }\n\t return this.finalize(node, new Node.TemplateLiteral(quasis, expressions));\n\t };\n\t // https://tc39.github.io/ecma262/#sec-grouping-operator\n\t Parser.prototype.reinterpretExpressionAsPattern = function (expr) {\n\t switch (expr.type) {\n\t case syntax_1.Syntax.Identifier:\n\t case syntax_1.Syntax.MemberExpression:\n\t case syntax_1.Syntax.RestElement:\n\t case syntax_1.Syntax.AssignmentPattern:\n\t break;\n\t case syntax_1.Syntax.SpreadElement:\n\t expr.type = syntax_1.Syntax.RestElement;\n\t this.reinterpretExpressionAsPattern(expr.argument);\n\t break;\n\t case syntax_1.Syntax.ArrayExpression:\n\t expr.type = syntax_1.Syntax.ArrayPattern;\n\t for (var i = 0; i < expr.elements.length; i++) {\n\t if (expr.elements[i] !== null) {\n\t this.reinterpretExpressionAsPattern(expr.elements[i]);\n\t }\n\t }\n\t break;\n\t case syntax_1.Syntax.ObjectExpression:\n\t expr.type = syntax_1.Syntax.ObjectPattern;\n\t for (var i = 0; i < expr.properties.length; i++) {\n\t this.reinterpretExpressionAsPattern(expr.properties[i].value);\n\t }\n\t break;\n\t case syntax_1.Syntax.AssignmentExpression:\n\t expr.type = syntax_1.Syntax.AssignmentPattern;\n\t delete expr.operator;\n\t this.reinterpretExpressionAsPattern(expr.left);\n\t break;\n\t default:\n\t // Allow other node type for tolerant parsing.\n\t break;\n\t }\n\t };\n\t Parser.prototype.parseGroupExpression = function () {\n\t var expr;\n\t this.expect('(');\n\t if (this.match(')')) {\n\t this.nextToken();\n\t if (!this.match('=>')) {\n\t this.expect('=>');\n\t }\n\t expr = {\n\t type: ArrowParameterPlaceHolder,\n\t params: [],\n\t async: false\n\t };\n\t }\n\t else {\n\t var startToken = this.lookahead;\n\t var params = [];\n\t if (this.match('...')) {\n\t expr = this.parseRestElement(params);\n\t this.expect(')');\n\t if (!this.match('=>')) {\n\t this.expect('=>');\n\t }\n\t expr = {\n\t type: ArrowParameterPlaceHolder,\n\t params: [expr],\n\t async: false\n\t };\n\t }\n\t else {\n\t var arrow = false;\n\t this.context.isBindingElement = true;\n\t expr = this.inheritCoverGrammar(this.parseAssignmentExpression);\n\t if (this.match(',')) {\n\t var expressions = [];\n\t this.context.isAssignmentTarget = false;\n\t expressions.push(expr);\n\t while (this.lookahead.type !== 2 /* EOF */) {\n\t if (!this.match(',')) {\n\t break;\n\t }\n\t this.nextToken();\n\t if (this.match(')')) {\n\t this.nextToken();\n\t for (var i = 0; i < expressions.length; i++) {\n\t this.reinterpretExpressionAsPattern(expressions[i]);\n\t }\n\t arrow = true;\n\t expr = {\n\t type: ArrowParameterPlaceHolder,\n\t params: expressions,\n\t async: false\n\t };\n\t }\n\t else if (this.match('...')) {\n\t if (!this.context.isBindingElement) {\n\t this.throwUnexpectedToken(this.lookahead);\n\t }\n\t expressions.push(this.parseRestElement(params));\n\t this.expect(')');\n\t if (!this.match('=>')) {\n\t this.expect('=>');\n\t }\n\t this.context.isBindingElement = false;\n\t for (var i = 0; i < expressions.length; i++) {\n\t this.reinterpretExpressionAsPattern(expressions[i]);\n\t }\n\t arrow = true;\n\t expr = {\n\t type: ArrowParameterPlaceHolder,\n\t params: expressions,\n\t async: false\n\t };\n\t }\n\t else {\n\t expressions.push(this.inheritCoverGrammar(this.parseAssignmentExpression));\n\t }\n\t if (arrow) {\n\t break;\n\t }\n\t }\n\t if (!arrow) {\n\t expr = this.finalize(this.startNode(startToken), new Node.SequenceExpression(expressions));\n\t }\n\t }\n\t if (!arrow) {\n\t this.expect(')');\n\t if (this.match('=>')) {\n\t if (expr.type === syntax_1.Syntax.Identifier && expr.name === 'yield') {\n\t arrow = true;\n\t expr = {\n\t type: ArrowParameterPlaceHolder,\n\t params: [expr],\n\t async: false\n\t };\n\t }\n\t if (!arrow) {\n\t if (!this.context.isBindingElement) {\n\t this.throwUnexpectedToken(this.lookahead);\n\t }\n\t if (expr.type === syntax_1.Syntax.SequenceExpression) {\n\t for (var i = 0; i < expr.expressions.length; i++) {\n\t this.reinterpretExpressionAsPattern(expr.expressions[i]);\n\t }\n\t }\n\t else {\n\t this.reinterpretExpressionAsPattern(expr);\n\t }\n\t var parameters = (expr.type === syntax_1.Syntax.SequenceExpression ? expr.expressions : [expr]);\n\t expr = {\n\t type: ArrowParameterPlaceHolder,\n\t params: parameters,\n\t async: false\n\t };\n\t }\n\t }\n\t this.context.isBindingElement = false;\n\t }\n\t }\n\t }\n\t return expr;\n\t };\n\t // https://tc39.github.io/ecma262/#sec-left-hand-side-expressions\n\t Parser.prototype.parseArguments = function () {\n\t this.expect('(');\n\t var args = [];\n\t if (!this.match(')')) {\n\t while (true) {\n\t var expr = this.match('...') ? this.parseSpreadElement() :\n\t this.isolateCoverGrammar(this.parseAssignmentExpression);\n\t args.push(expr);\n\t if (this.match(')')) {\n\t break;\n\t }\n\t this.expectCommaSeparator();\n\t if (this.match(')')) {\n\t break;\n\t }\n\t }\n\t }\n\t this.expect(')');\n\t return args;\n\t };\n\t Parser.prototype.isIdentifierName = function (token) {\n\t return token.type === 3 /* Identifier */ ||\n\t token.type === 4 /* Keyword */ ||\n\t token.type === 1 /* BooleanLiteral */ ||\n\t token.type === 5 /* NullLiteral */;\n\t };\n\t Parser.prototype.parseIdentifierName = function () {\n\t var node = this.createNode();\n\t var token = this.nextToken();\n\t if (!this.isIdentifierName(token)) {\n\t this.throwUnexpectedToken(token);\n\t }\n\t return this.finalize(node, new Node.Identifier(token.value));\n\t };\n\t Parser.prototype.parseNewExpression = function () {\n\t var node = this.createNode();\n\t var id = this.parseIdentifierName();\n\t assert_1.assert(id.name === 'new', 'New expression must start with `new`');\n\t var expr;\n\t if (this.match('.')) {\n\t this.nextToken();\n\t if (this.lookahead.type === 3 /* Identifier */ && this.context.inFunctionBody && this.lookahead.value === 'target') {\n\t var property = this.parseIdentifierName();\n\t expr = new Node.MetaProperty(id, property);\n\t }\n\t else {\n\t this.throwUnexpectedToken(this.lookahead);\n\t }\n\t }\n\t else {\n\t var callee = this.isolateCoverGrammar(this.parseLeftHandSideExpression);\n\t var args = this.match('(') ? this.parseArguments() : [];\n\t expr = new Node.NewExpression(callee, args);\n\t this.context.isAssignmentTarget = false;\n\t this.context.isBindingElement = false;\n\t }\n\t return this.finalize(node, expr);\n\t };\n\t Parser.prototype.parseAsyncArgument = function () {\n\t var arg = this.parseAssignmentExpression();\n\t this.context.firstCoverInitializedNameError = null;\n\t return arg;\n\t };\n\t Parser.prototype.parseAsyncArguments = function () {\n\t this.expect('(');\n\t var args = [];\n\t if (!this.match(')')) {\n\t while (true) {\n\t var expr = this.match('...') ? this.parseSpreadElement() :\n\t this.isolateCoverGrammar(this.parseAsyncArgument);\n\t args.push(expr);\n\t if (this.match(')')) {\n\t break;\n\t }\n\t this.expectCommaSeparator();\n\t if (this.match(')')) {\n\t break;\n\t }\n\t }\n\t }\n\t this.expect(')');\n\t return args;\n\t };\n\t Parser.prototype.parseLeftHandSideExpressionAllowCall = function () {\n\t var startToken = this.lookahead;\n\t var maybeAsync = this.matchContextualKeyword('async');\n\t var previousAllowIn = this.context.allowIn;\n\t this.context.allowIn = true;\n\t var expr;\n\t if (this.matchKeyword('super') && this.context.inFunctionBody) {\n\t expr = this.createNode();\n\t this.nextToken();\n\t expr = this.finalize(expr, new Node.Super());\n\t if (!this.match('(') && !this.match('.') && !this.match('[')) {\n\t this.throwUnexpectedToken(this.lookahead);\n\t }\n\t }\n\t else {\n\t expr = this.inheritCoverGrammar(this.matchKeyword('new') ? this.parseNewExpression : this.parsePrimaryExpression);\n\t }\n\t while (true) {\n\t if (this.match('.')) {\n\t this.context.isBindingElement = false;\n\t this.context.isAssignmentTarget = true;\n\t this.expect('.');\n\t var property = this.parseIdentifierName();\n\t expr = this.finalize(this.startNode(startToken), new Node.StaticMemberExpression(expr, property));\n\t }\n\t else if (this.match('(')) {\n\t var asyncArrow = maybeAsync && (startToken.lineNumber === this.lookahead.lineNumber);\n\t this.context.isBindingElement = false;\n\t this.context.isAssignmentTarget = false;\n\t var args = asyncArrow ? this.parseAsyncArguments() : this.parseArguments();\n\t expr = this.finalize(this.startNode(startToken), new Node.CallExpression(expr, args));\n\t if (asyncArrow && this.match('=>')) {\n\t for (var i = 0; i < args.length; ++i) {\n\t this.reinterpretExpressionAsPattern(args[i]);\n\t }\n\t expr = {\n\t type: ArrowParameterPlaceHolder,\n\t params: args,\n\t async: true\n\t };\n\t }\n\t }\n\t else if (this.match('[')) {\n\t this.context.isBindingElement = false;\n\t this.context.isAssignmentTarget = true;\n\t this.expect('[');\n\t var property = this.isolateCoverGrammar(this.parseExpression);\n\t this.expect(']');\n\t expr = this.finalize(this.startNode(startToken), new Node.ComputedMemberExpression(expr, property));\n\t }\n\t else if (this.lookahead.type === 10 /* Template */ && this.lookahead.head) {\n\t var quasi = this.parseTemplateLiteral();\n\t expr = this.finalize(this.startNode(startToken), new Node.TaggedTemplateExpression(expr, quasi));\n\t }\n\t else {\n\t break;\n\t }\n\t }\n\t this.context.allowIn = previousAllowIn;\n\t return expr;\n\t };\n\t Parser.prototype.parseSuper = function () {\n\t var node = this.createNode();\n\t this.expectKeyword('super');\n\t if (!this.match('[') && !this.match('.')) {\n\t this.throwUnexpectedToken(this.lookahead);\n\t }\n\t return this.finalize(node, new Node.Super());\n\t };\n\t Parser.prototype.parseLeftHandSideExpression = function () {\n\t assert_1.assert(this.context.allowIn, 'callee of new expression always allow in keyword.');\n\t var node = this.startNode(this.lookahead);\n\t var expr = (this.matchKeyword('super') && this.context.inFunctionBody) ? this.parseSuper() :\n\t this.inheritCoverGrammar(this.matchKeyword('new') ? this.parseNewExpression : this.parsePrimaryExpression);\n\t while (true) {\n\t if (this.match('[')) {\n\t this.context.isBindingElement = false;\n\t this.context.isAssignmentTarget = true;\n\t this.expect('[');\n\t var property = this.isolateCoverGrammar(this.parseExpression);\n\t this.expect(']');\n\t expr = this.finalize(node, new Node.ComputedMemberExpression(expr, property));\n\t }\n\t else if (this.match('.')) {\n\t this.context.isBindingElement = false;\n\t this.context.isAssignmentTarget = true;\n\t this.expect('.');\n\t var property = this.parseIdentifierName();\n\t expr = this.finalize(node, new Node.StaticMemberExpression(expr, property));\n\t }\n\t else if (this.lookahead.type === 10 /* Template */ && this.lookahead.head) {\n\t var quasi = this.parseTemplateLiteral();\n\t expr = this.finalize(node, new Node.TaggedTemplateExpression(expr, quasi));\n\t }\n\t else {\n\t break;\n\t }\n\t }\n\t return expr;\n\t };\n\t // https://tc39.github.io/ecma262/#sec-update-expressions\n\t Parser.prototype.parseUpdateExpression = function () {\n\t var expr;\n\t var startToken = this.lookahead;\n\t if (this.match('++') || this.match('--')) {\n\t var node = this.startNode(startToken);\n\t var token = this.nextToken();\n\t expr = this.inheritCoverGrammar(this.parseUnaryExpression);\n\t if (this.context.strict && expr.type === syntax_1.Syntax.Identifier && this.scanner.isRestrictedWord(expr.name)) {\n\t this.tolerateError(messages_1.Messages.StrictLHSPrefix);\n\t }\n\t if (!this.context.isAssignmentTarget) {\n\t this.tolerateError(messages_1.Messages.InvalidLHSInAssignment);\n\t }\n\t var prefix = true;\n\t expr = this.finalize(node, new Node.UpdateExpression(token.value, expr, prefix));\n\t this.context.isAssignmentTarget = false;\n\t this.context.isBindingElement = false;\n\t }\n\t else {\n\t expr = this.inheritCoverGrammar(this.parseLeftHandSideExpressionAllowCall);\n\t if (!this.hasLineTerminator && this.lookahead.type === 7 /* Punctuator */) {\n\t if (this.match('++') || this.match('--')) {\n\t if (this.context.strict && expr.type === syntax_1.Syntax.Identifier && this.scanner.isRestrictedWord(expr.name)) {\n\t this.tolerateError(messages_1.Messages.StrictLHSPostfix);\n\t }\n\t if (!this.context.isAssignmentTarget) {\n\t this.tolerateError(messages_1.Messages.InvalidLHSInAssignment);\n\t }\n\t this.context.isAssignmentTarget = false;\n\t this.context.isBindingElement = false;\n\t var operator = this.nextToken().value;\n\t var prefix = false;\n\t expr = this.finalize(this.startNode(startToken), new Node.UpdateExpression(operator, expr, prefix));\n\t }\n\t }\n\t }\n\t return expr;\n\t };\n\t // https://tc39.github.io/ecma262/#sec-unary-operators\n\t Parser.prototype.parseAwaitExpression = function () {\n\t var node = this.createNode();\n\t this.nextToken();\n\t var argument = this.parseUnaryExpression();\n\t return this.finalize(node, new Node.AwaitExpression(argument));\n\t };\n\t Parser.prototype.parseUnaryExpression = function () {\n\t var expr;\n\t if (this.match('+') || this.match('-') || this.match('~') || this.match('!') ||\n\t this.matchKeyword('delete') || this.matchKeyword('void') || this.matchKeyword('typeof')) {\n\t var node = this.startNode(this.lookahead);\n\t var token = this.nextToken();\n\t expr = this.inheritCoverGrammar(this.parseUnaryExpression);\n\t expr = this.finalize(node, new Node.UnaryExpression(token.value, expr));\n\t if (this.context.strict && expr.operator === 'delete' && expr.argument.type === syntax_1.Syntax.Identifier) {\n\t this.tolerateError(messages_1.Messages.StrictDelete);\n\t }\n\t this.context.isAssignmentTarget = false;\n\t this.context.isBindingElement = false;\n\t }\n\t else if (this.context.await && this.matchContextualKeyword('await')) {\n\t expr = this.parseAwaitExpression();\n\t }\n\t else {\n\t expr = this.parseUpdateExpression();\n\t }\n\t return expr;\n\t };\n\t Parser.prototype.parseExponentiationExpression = function () {\n\t var startToken = this.lookahead;\n\t var expr = this.inheritCoverGrammar(this.parseUnaryExpression);\n\t if (expr.type !== syntax_1.Syntax.UnaryExpression && this.match('**')) {\n\t this.nextToken();\n\t this.context.isAssignmentTarget = false;\n\t this.context.isBindingElement = false;\n\t var left = expr;\n\t var right = this.isolateCoverGrammar(this.parseExponentiationExpression);\n\t expr = this.finalize(this.startNode(startToken), new Node.BinaryExpression('**', left, right));\n\t }\n\t return expr;\n\t };\n\t // https://tc39.github.io/ecma262/#sec-exp-operator\n\t // https://tc39.github.io/ecma262/#sec-multiplicative-operators\n\t // https://tc39.github.io/ecma262/#sec-additive-operators\n\t // https://tc39.github.io/ecma262/#sec-bitwise-shift-operators\n\t // https://tc39.github.io/ecma262/#sec-relational-operators\n\t // https://tc39.github.io/ecma262/#sec-equality-operators\n\t // https://tc39.github.io/ecma262/#sec-binary-bitwise-operators\n\t // https://tc39.github.io/ecma262/#sec-binary-logical-operators\n\t Parser.prototype.binaryPrecedence = function (token) {\n\t var op = token.value;\n\t var precedence;\n\t if (token.type === 7 /* Punctuator */) {\n\t precedence = this.operatorPrecedence[op] || 0;\n\t }\n\t else if (token.type === 4 /* Keyword */) {\n\t precedence = (op === 'instanceof' || (this.context.allowIn && op === 'in')) ? 7 : 0;\n\t }\n\t else {\n\t precedence = 0;\n\t }\n\t return precedence;\n\t };\n\t Parser.prototype.parseBinaryExpression = function () {\n\t var startToken = this.lookahead;\n\t var expr = this.inheritCoverGrammar(this.parseExponentiationExpression);\n\t var token = this.lookahead;\n\t var prec = this.binaryPrecedence(token);\n\t if (prec > 0) {\n\t this.nextToken();\n\t this.context.isAssignmentTarget = false;\n\t this.context.isBindingElement = false;\n\t var markers = [startToken, this.lookahead];\n\t var left = expr;\n\t var right = this.isolateCoverGrammar(this.parseExponentiationExpression);\n\t var stack = [left, token.value, right];\n\t var precedences = [prec];\n\t while (true) {\n\t prec = this.binaryPrecedence(this.lookahead);\n\t if (prec <= 0) {\n\t break;\n\t }\n\t // Reduce: make a binary expression from the three topmost entries.\n\t while ((stack.length > 2) && (prec <= precedences[precedences.length - 1])) {\n\t right = stack.pop();\n\t var operator = stack.pop();\n\t precedences.pop();\n\t left = stack.pop();\n\t markers.pop();\n\t var node = this.startNode(markers[markers.length - 1]);\n\t stack.push(this.finalize(node, new Node.BinaryExpression(operator, left, right)));\n\t }\n\t // Shift.\n\t stack.push(this.nextToken().value);\n\t precedences.push(prec);\n\t markers.push(this.lookahead);\n\t stack.push(this.isolateCoverGrammar(this.parseExponentiationExpression));\n\t }\n\t // Final reduce to clean-up the stack.\n\t var i = stack.length - 1;\n\t expr = stack[i];\n\t var lastMarker = markers.pop();\n\t while (i > 1) {\n\t var marker = markers.pop();\n\t var lastLineStart = lastMarker && lastMarker.lineStart;\n\t var node = this.startNode(marker, lastLineStart);\n\t var operator = stack[i - 1];\n\t expr = this.finalize(node, new Node.BinaryExpression(operator, stack[i - 2], expr));\n\t i -= 2;\n\t lastMarker = marker;\n\t }\n\t }\n\t return expr;\n\t };\n\t // https://tc39.github.io/ecma262/#sec-conditional-operator\n\t Parser.prototype.parseConditionalExpression = function () {\n\t var startToken = this.lookahead;\n\t var expr = this.inheritCoverGrammar(this.parseBinaryExpression);\n\t if (this.match('?')) {\n\t this.nextToken();\n\t var previousAllowIn = this.context.allowIn;\n\t this.context.allowIn = true;\n\t var consequent = this.isolateCoverGrammar(this.parseAssignmentExpression);\n\t this.context.allowIn = previousAllowIn;\n\t this.expect(':');\n\t var alternate = this.isolateCoverGrammar(this.parseAssignmentExpression);\n\t expr = this.finalize(this.startNode(startToken), new Node.ConditionalExpression(expr, consequent, alternate));\n\t this.context.isAssignmentTarget = false;\n\t this.context.isBindingElement = false;\n\t }\n\t return expr;\n\t };\n\t // https://tc39.github.io/ecma262/#sec-assignment-operators\n\t Parser.prototype.checkPatternParam = function (options, param) {\n\t switch (param.type) {\n\t case syntax_1.Syntax.Identifier:\n\t this.validateParam(options, param, param.name);\n\t break;\n\t case syntax_1.Syntax.RestElement:\n\t this.checkPatternParam(options, param.argument);\n\t break;\n\t case syntax_1.Syntax.AssignmentPattern:\n\t this.checkPatternParam(options, param.left);\n\t break;\n\t case syntax_1.Syntax.ArrayPattern:\n\t for (var i = 0; i < param.elements.length; i++) {\n\t if (param.elements[i] !== null) {\n\t this.checkPatternParam(options, param.elements[i]);\n\t }\n\t }\n\t break;\n\t case syntax_1.Syntax.ObjectPattern:\n\t for (var i = 0; i < param.properties.length; i++) {\n\t this.checkPatternParam(options, param.properties[i].value);\n\t }\n\t break;\n\t default:\n\t break;\n\t }\n\t options.simple = options.simple && (param instanceof Node.Identifier);\n\t };\n\t Parser.prototype.reinterpretAsCoverFormalsList = function (expr) {\n\t var params = [expr];\n\t var options;\n\t var asyncArrow = false;\n\t switch (expr.type) {\n\t case syntax_1.Syntax.Identifier:\n\t break;\n\t case ArrowParameterPlaceHolder:\n\t params = expr.params;\n\t asyncArrow = expr.async;\n\t break;\n\t default:\n\t return null;\n\t }\n\t options = {\n\t simple: true,\n\t paramSet: {}\n\t };\n\t for (var i = 0; i < params.length; ++i) {\n\t var param = params[i];\n\t if (param.type === syntax_1.Syntax.AssignmentPattern) {\n\t if (param.right.type === syntax_1.Syntax.YieldExpression) {\n\t if (param.right.argument) {\n\t this.throwUnexpectedToken(this.lookahead);\n\t }\n\t param.right.type = syntax_1.Syntax.Identifier;\n\t param.right.name = 'yield';\n\t delete param.right.argument;\n\t delete param.right.delegate;\n\t }\n\t }\n\t else if (asyncArrow && param.type === syntax_1.Syntax.Identifier && param.name === 'await') {\n\t this.throwUnexpectedToken(this.lookahead);\n\t }\n\t this.checkPatternParam(options, param);\n\t params[i] = param;\n\t }\n\t if (this.context.strict || !this.context.allowYield) {\n\t for (var i = 0; i < params.length; ++i) {\n\t var param = params[i];\n\t if (param.type === syntax_1.Syntax.YieldExpression) {\n\t this.throwUnexpectedToken(this.lookahead);\n\t }\n\t }\n\t }\n\t if (options.message === messages_1.Messages.StrictParamDupe) {\n\t var token = this.context.strict ? options.stricted : options.firstRestricted;\n\t this.throwUnexpectedToken(token, options.message);\n\t }\n\t return {\n\t simple: options.simple,\n\t params: params,\n\t stricted: options.stricted,\n\t firstRestricted: options.firstRestricted,\n\t message: options.message\n\t };\n\t };\n\t Parser.prototype.parseAssignmentExpression = function () {\n\t var expr;\n\t if (!this.context.allowYield && this.matchKeyword('yield')) {\n\t expr = this.parseYieldExpression();\n\t }\n\t else {\n\t var startToken = this.lookahead;\n\t var token = startToken;\n\t expr = this.parseConditionalExpression();\n\t if (token.type === 3 /* Identifier */ && (token.lineNumber === this.lookahead.lineNumber) && token.value === 'async') {\n\t if (this.lookahead.type === 3 /* Identifier */ || this.matchKeyword('yield')) {\n\t var arg = this.parsePrimaryExpression();\n\t this.reinterpretExpressionAsPattern(arg);\n\t expr = {\n\t type: ArrowParameterPlaceHolder,\n\t params: [arg],\n\t async: true\n\t };\n\t }\n\t }\n\t if (expr.type === ArrowParameterPlaceHolder || this.match('=>')) {\n\t // https://tc39.github.io/ecma262/#sec-arrow-function-definitions\n\t this.context.isAssignmentTarget = false;\n\t this.context.isBindingElement = false;\n\t var isAsync = expr.async;\n\t var list = this.reinterpretAsCoverFormalsList(expr);\n\t if (list) {\n\t if (this.hasLineTerminator) {\n\t this.tolerateUnexpectedToken(this.lookahead);\n\t }\n\t this.context.firstCoverInitializedNameError = null;\n\t var previousStrict = this.context.strict;\n\t var previousAllowStrictDirective = this.context.allowStrictDirective;\n\t this.context.allowStrictDirective = list.simple;\n\t var previousAllowYield = this.context.allowYield;\n\t var previousAwait = this.context.await;\n\t this.context.allowYield = true;\n\t this.context.await = isAsync;\n\t var node = this.startNode(startToken);\n\t this.expect('=>');\n\t var body = void 0;\n\t if (this.match('{')) {\n\t var previousAllowIn = this.context.allowIn;\n\t this.context.allowIn = true;\n\t body = this.parseFunctionSourceElements();\n\t this.context.allowIn = previousAllowIn;\n\t }\n\t else {\n\t body = this.isolateCoverGrammar(this.parseAssignmentExpression);\n\t }\n\t var expression = body.type !== syntax_1.Syntax.BlockStatement;\n\t if (this.context.strict && list.firstRestricted) {\n\t this.throwUnexpectedToken(list.firstRestricted, list.message);\n\t }\n\t if (this.context.strict && list.stricted) {\n\t this.tolerateUnexpectedToken(list.stricted, list.message);\n\t }\n\t expr = isAsync ? this.finalize(node, new Node.AsyncArrowFunctionExpression(list.params, body, expression)) :\n\t this.finalize(node, new Node.ArrowFunctionExpression(list.params, body, expression));\n\t this.context.strict = previousStrict;\n\t this.context.allowStrictDirective = previousAllowStrictDirective;\n\t this.context.allowYield = previousAllowYield;\n\t this.context.await = previousAwait;\n\t }\n\t }\n\t else {\n\t if (this.matchAssign()) {\n\t if (!this.context.isAssignmentTarget) {\n\t this.tolerateError(messages_1.Messages.InvalidLHSInAssignment);\n\t }\n\t if (this.context.strict && expr.type === syntax_1.Syntax.Identifier) {\n\t var id = expr;\n\t if (this.scanner.isRestrictedWord(id.name)) {\n\t this.tolerateUnexpectedToken(token, messages_1.Messages.StrictLHSAssignment);\n\t }\n\t if (this.scanner.isStrictModeReservedWord(id.name)) {\n\t this.tolerateUnexpectedToken(token, messages_1.Messages.StrictReservedWord);\n\t }\n\t }\n\t if (!this.match('=')) {\n\t this.context.isAssignmentTarget = false;\n\t this.context.isBindingElement = false;\n\t }\n\t else {\n\t this.reinterpretExpressionAsPattern(expr);\n\t }\n\t token = this.nextToken();\n\t var operator = token.value;\n\t var right = this.isolateCoverGrammar(this.parseAssignmentExpression);\n\t expr = this.finalize(this.startNode(startToken), new Node.AssignmentExpression(operator, expr, right));\n\t this.context.firstCoverInitializedNameError = null;\n\t }\n\t }\n\t }\n\t return expr;\n\t };\n\t // https://tc39.github.io/ecma262/#sec-comma-operator\n\t Parser.prototype.parseExpression = function () {\n\t var startToken = this.lookahead;\n\t var expr = this.isolateCoverGrammar(this.parseAssignmentExpression);\n\t if (this.match(',')) {\n\t var expressions = [];\n\t expressions.push(expr);\n\t while (this.lookahead.type !== 2 /* EOF */) {\n\t if (!this.match(',')) {\n\t break;\n\t }\n\t this.nextToken();\n\t expressions.push(this.isolateCoverGrammar(this.parseAssignmentExpression));\n\t }\n\t expr = this.finalize(this.startNode(startToken), new Node.SequenceExpression(expressions));\n\t }\n\t return expr;\n\t };\n\t // https://tc39.github.io/ecma262/#sec-block\n\t Parser.prototype.parseStatementListItem = function () {\n\t var statement;\n\t this.context.isAssignmentTarget = true;\n\t this.context.isBindingElement = true;\n\t if (this.lookahead.type === 4 /* Keyword */) {\n\t switch (this.lookahead.value) {\n\t case 'export':\n\t if (!this.context.isModule) {\n\t this.tolerateUnexpectedToken(this.lookahead, messages_1.Messages.IllegalExportDeclaration);\n\t }\n\t statement = this.parseExportDeclaration();\n\t break;\n\t case 'import':\n\t if (!this.context.isModule) {\n\t this.tolerateUnexpectedToken(this.lookahead, messages_1.Messages.IllegalImportDeclaration);\n\t }\n\t statement = this.parseImportDeclaration();\n\t break;\n\t case 'const':\n\t statement = this.parseLexicalDeclaration({ inFor: false });\n\t break;\n\t case 'function':\n\t statement = this.parseFunctionDeclaration();\n\t break;\n\t case 'class':\n\t statement = this.parseClassDeclaration();\n\t break;\n\t case 'let':\n\t statement = this.isLexicalDeclaration() ? this.parseLexicalDeclaration({ inFor: false }) : this.parseStatement();\n\t break;\n\t default:\n\t statement = this.parseStatement();\n\t break;\n\t }\n\t }\n\t else {\n\t statement = this.parseStatement();\n\t }\n\t return statement;\n\t };\n\t Parser.prototype.parseBlock = function () {\n\t var node = this.createNode();\n\t this.expect('{');\n\t var block = [];\n\t while (true) {\n\t if (this.match('}')) {\n\t break;\n\t }\n\t block.push(this.parseStatementListItem());\n\t }\n\t this.expect('}');\n\t return this.finalize(node, new Node.BlockStatement(block));\n\t };\n\t // https://tc39.github.io/ecma262/#sec-let-and-const-declarations\n\t Parser.prototype.parseLexicalBinding = function (kind, options) {\n\t var node = this.createNode();\n\t var params = [];\n\t var id = this.parsePattern(params, kind);\n\t if (this.context.strict && id.type === syntax_1.Syntax.Identifier) {\n\t if (this.scanner.isRestrictedWord(id.name)) {\n\t this.tolerateError(messages_1.Messages.StrictVarName);\n\t }\n\t }\n\t var init = null;\n\t if (kind === 'const') {\n\t if (!this.matchKeyword('in') && !this.matchContextualKeyword('of')) {\n\t if (this.match('=')) {\n\t this.nextToken();\n\t init = this.isolateCoverGrammar(this.parseAssignmentExpression);\n\t }\n\t else {\n\t this.throwError(messages_1.Messages.DeclarationMissingInitializer, 'const');\n\t }\n\t }\n\t }\n\t else if ((!options.inFor && id.type !== syntax_1.Syntax.Identifier) || this.match('=')) {\n\t this.expect('=');\n\t init = this.isolateCoverGrammar(this.parseAssignmentExpression);\n\t }\n\t return this.finalize(node, new Node.VariableDeclarator(id, init));\n\t };\n\t Parser.prototype.parseBindingList = function (kind, options) {\n\t var list = [this.parseLexicalBinding(kind, options)];\n\t while (this.match(',')) {\n\t this.nextToken();\n\t list.push(this.parseLexicalBinding(kind, options));\n\t }\n\t return list;\n\t };\n\t Parser.prototype.isLexicalDeclaration = function () {\n\t var state = this.scanner.saveState();\n\t this.scanner.scanComments();\n\t var next = this.scanner.lex();\n\t this.scanner.restoreState(state);\n\t return (next.type === 3 /* Identifier */) ||\n\t (next.type === 7 /* Punctuator */ && next.value === '[') ||\n\t (next.type === 7 /* Punctuator */ && next.value === '{') ||\n\t (next.type === 4 /* Keyword */ && next.value === 'let') ||\n\t (next.type === 4 /* Keyword */ && next.value === 'yield');\n\t };\n\t Parser.prototype.parseLexicalDeclaration = function (options) {\n\t var node = this.createNode();\n\t var kind = this.nextToken().value;\n\t assert_1.assert(kind === 'let' || kind === 'const', 'Lexical declaration must be either let or const');\n\t var declarations = this.parseBindingList(kind, options);\n\t this.consumeSemicolon();\n\t return this.finalize(node, new Node.VariableDeclaration(declarations, kind));\n\t };\n\t // https://tc39.github.io/ecma262/#sec-destructuring-binding-patterns\n\t Parser.prototype.parseBindingRestElement = function (params, kind) {\n\t var node = this.createNode();\n\t this.expect('...');\n\t var arg = this.parsePattern(params, kind);\n\t return this.finalize(node, new Node.RestElement(arg));\n\t };\n\t Parser.prototype.parseArrayPattern = function (params, kind) {\n\t var node = this.createNode();\n\t this.expect('[');\n\t var elements = [];\n\t while (!this.match(']')) {\n\t if (this.match(',')) {\n\t this.nextToken();\n\t elements.push(null);\n\t }\n\t else {\n\t if (this.match('...')) {\n\t elements.push(this.parseBindingRestElement(params, kind));\n\t break;\n\t }\n\t else {\n\t elements.push(this.parsePatternWithDefault(params, kind));\n\t }\n\t if (!this.match(']')) {\n\t this.expect(',');\n\t }\n\t }\n\t }\n\t this.expect(']');\n\t return this.finalize(node, new Node.ArrayPattern(elements));\n\t };\n\t Parser.prototype.parsePropertyPattern = function (params, kind) {\n\t var node = this.createNode();\n\t var computed = false;\n\t var shorthand = false;\n\t var method = false;\n\t var key;\n\t var value;\n\t if (this.lookahead.type === 3 /* Identifier */) {\n\t var keyToken = this.lookahead;\n\t key = this.parseVariableIdentifier();\n\t var init = this.finalize(node, new Node.Identifier(keyToken.value));\n\t if (this.match('=')) {\n\t params.push(keyToken);\n\t shorthand = true;\n\t this.nextToken();\n\t var expr = this.parseAssignmentExpression();\n\t value = this.finalize(this.startNode(keyToken), new Node.AssignmentPattern(init, expr));\n\t }\n\t else if (!this.match(':')) {\n\t params.push(keyToken);\n\t shorthand = true;\n\t value = init;\n\t }\n\t else {\n\t this.expect(':');\n\t value = this.parsePatternWithDefault(params, kind);\n\t }\n\t }\n\t else {\n\t computed = this.match('[');\n\t key = this.parseObjectPropertyKey();\n\t this.expect(':');\n\t value = this.parsePatternWithDefault(params, kind);\n\t }\n\t return this.finalize(node, new Node.Property('init', key, computed, value, method, shorthand));\n\t };\n\t Parser.prototype.parseObjectPattern = function (params, kind) {\n\t var node = this.createNode();\n\t var properties = [];\n\t this.expect('{');\n\t while (!this.match('}')) {\n\t properties.push(this.parsePropertyPattern(params, kind));\n\t if (!this.match('}')) {\n\t this.expect(',');\n\t }\n\t }\n\t this.expect('}');\n\t return this.finalize(node, new Node.ObjectPattern(properties));\n\t };\n\t Parser.prototype.parsePattern = function (params, kind) {\n\t var pattern;\n\t if (this.match('[')) {\n\t pattern = this.parseArrayPattern(params, kind);\n\t }\n\t else if (this.match('{')) {\n\t pattern = this.parseObjectPattern(params, kind);\n\t }\n\t else {\n\t if (this.matchKeyword('let') && (kind === 'const' || kind === 'let')) {\n\t this.tolerateUnexpectedToken(this.lookahead, messages_1.Messages.LetInLexicalBinding);\n\t }\n\t params.push(this.lookahead);\n\t pattern = this.parseVariableIdentifier(kind);\n\t }\n\t return pattern;\n\t };\n\t Parser.prototype.parsePatternWithDefault = function (params, kind) {\n\t var startToken = this.lookahead;\n\t var pattern = this.parsePattern(params, kind);\n\t if (this.match('=')) {\n\t this.nextToken();\n\t var previousAllowYield = this.context.allowYield;\n\t this.context.allowYield = true;\n\t var right = this.isolateCoverGrammar(this.parseAssignmentExpression);\n\t this.context.allowYield = previousAllowYield;\n\t pattern = this.finalize(this.startNode(startToken), new Node.AssignmentPattern(pattern, right));\n\t }\n\t return pattern;\n\t };\n\t // https://tc39.github.io/ecma262/#sec-variable-statement\n\t Parser.prototype.parseVariableIdentifier = function (kind) {\n\t var node = this.createNode();\n\t var token = this.nextToken();\n\t if (token.type === 4 /* Keyword */ && token.value === 'yield') {\n\t if (this.context.strict) {\n\t this.tolerateUnexpectedToken(token, messages_1.Messages.StrictReservedWord);\n\t }\n\t else if (!this.context.allowYield) {\n\t this.throwUnexpectedToken(token);\n\t }\n\t }\n\t else if (token.type !== 3 /* Identifier */) {\n\t if (this.context.strict && token.type === 4 /* Keyword */ && this.scanner.isStrictModeReservedWord(token.value)) {\n\t this.tolerateUnexpectedToken(token, messages_1.Messages.StrictReservedWord);\n\t }\n\t else {\n\t if (this.context.strict || token.value !== 'let' || kind !== 'var') {\n\t this.throwUnexpectedToken(token);\n\t }\n\t }\n\t }\n\t else if ((this.context.isModule || this.context.await) && token.type === 3 /* Identifier */ && token.value === 'await') {\n\t this.tolerateUnexpectedToken(token);\n\t }\n\t return this.finalize(node, new Node.Identifier(token.value));\n\t };\n\t Parser.prototype.parseVariableDeclaration = function (options) {\n\t var node = this.createNode();\n\t var params = [];\n\t var id = this.parsePattern(params, 'var');\n\t if (this.context.strict && id.type === syntax_1.Syntax.Identifier) {\n\t if (this.scanner.isRestrictedWord(id.name)) {\n\t this.tolerateError(messages_1.Messages.StrictVarName);\n\t }\n\t }\n\t var init = null;\n\t if (this.match('=')) {\n\t this.nextToken();\n\t init = this.isolateCoverGrammar(this.parseAssignmentExpression);\n\t }\n\t else if (id.type !== syntax_1.Syntax.Identifier && !options.inFor) {\n\t this.expect('=');\n\t }\n\t return this.finalize(node, new Node.VariableDeclarator(id, init));\n\t };\n\t Parser.prototype.parseVariableDeclarationList = function (options) {\n\t var opt = { inFor: options.inFor };\n\t var list = [];\n\t list.push(this.parseVariableDeclaration(opt));\n\t while (this.match(',')) {\n\t this.nextToken();\n\t list.push(this.parseVariableDeclaration(opt));\n\t }\n\t return list;\n\t };\n\t Parser.prototype.parseVariableStatement = function () {\n\t var node = this.createNode();\n\t this.expectKeyword('var');\n\t var declarations = this.parseVariableDeclarationList({ inFor: false });\n\t this.consumeSemicolon();\n\t return this.finalize(node, new Node.VariableDeclaration(declarations, 'var'));\n\t };\n\t // https://tc39.github.io/ecma262/#sec-empty-statement\n\t Parser.prototype.parseEmptyStatement = function () {\n\t var node = this.createNode();\n\t this.expect(';');\n\t return this.finalize(node, new Node.EmptyStatement());\n\t };\n\t // https://tc39.github.io/ecma262/#sec-expression-statement\n\t Parser.prototype.parseExpressionStatement = function () {\n\t var node = this.createNode();\n\t var expr = this.parseExpression();\n\t this.consumeSemicolon();\n\t return this.finalize(node, new Node.ExpressionStatement(expr));\n\t };\n\t // https://tc39.github.io/ecma262/#sec-if-statement\n\t Parser.prototype.parseIfClause = function () {\n\t if (this.context.strict && this.matchKeyword('function')) {\n\t this.tolerateError(messages_1.Messages.StrictFunction);\n\t }\n\t return this.parseStatement();\n\t };\n\t Parser.prototype.parseIfStatement = function () {\n\t var node = this.createNode();\n\t var consequent;\n\t var alternate = null;\n\t this.expectKeyword('if');\n\t this.expect('(');\n\t var test = this.parseExpression();\n\t if (!this.match(')') && this.config.tolerant) {\n\t this.tolerateUnexpectedToken(this.nextToken());\n\t consequent = this.finalize(this.createNode(), new Node.EmptyStatement());\n\t }\n\t else {\n\t this.expect(')');\n\t consequent = this.parseIfClause();\n\t if (this.matchKeyword('else')) {\n\t this.nextToken();\n\t alternate = this.parseIfClause();\n\t }\n\t }\n\t return this.finalize(node, new Node.IfStatement(test, consequent, alternate));\n\t };\n\t // https://tc39.github.io/ecma262/#sec-do-while-statement\n\t Parser.prototype.parseDoWhileStatement = function () {\n\t var node = this.createNode();\n\t this.expectKeyword('do');\n\t var previousInIteration = this.context.inIteration;\n\t this.context.inIteration = true;\n\t var body = this.parseStatement();\n\t this.context.inIteration = previousInIteration;\n\t this.expectKeyword('while');\n\t this.expect('(');\n\t var test = this.parseExpression();\n\t if (!this.match(')') && this.config.tolerant) {\n\t this.tolerateUnexpectedToken(this.nextToken());\n\t }\n\t else {\n\t this.expect(')');\n\t if (this.match(';')) {\n\t this.nextToken();\n\t }\n\t }\n\t return this.finalize(node, new Node.DoWhileStatement(body, test));\n\t };\n\t // https://tc39.github.io/ecma262/#sec-while-statement\n\t Parser.prototype.parseWhileStatement = function () {\n\t var node = this.createNode();\n\t var body;\n\t this.expectKeyword('while');\n\t this.expect('(');\n\t var test = this.parseExpression();\n\t if (!this.match(')') && this.config.tolerant) {\n\t this.tolerateUnexpectedToken(this.nextToken());\n\t body = this.finalize(this.createNode(), new Node.EmptyStatement());\n\t }\n\t else {\n\t this.expect(')');\n\t var previousInIteration = this.context.inIteration;\n\t this.context.inIteration = true;\n\t body = this.parseStatement();\n\t this.context.inIteration = previousInIteration;\n\t }\n\t return this.finalize(node, new Node.WhileStatement(test, body));\n\t };\n\t // https://tc39.github.io/ecma262/#sec-for-statement\n\t // https://tc39.github.io/ecma262/#sec-for-in-and-for-of-statements\n\t Parser.prototype.parseForStatement = function () {\n\t var init = null;\n\t var test = null;\n\t var update = null;\n\t var forIn = true;\n\t var left, right;\n\t var node = this.createNode();\n\t this.expectKeyword('for');\n\t this.expect('(');\n\t if (this.match(';')) {\n\t this.nextToken();\n\t }\n\t else {\n\t if (this.matchKeyword('var')) {\n\t init = this.createNode();\n\t this.nextToken();\n\t var previousAllowIn = this.context.allowIn;\n\t this.context.allowIn = false;\n\t var declarations = this.parseVariableDeclarationList({ inFor: true });\n\t this.context.allowIn = previousAllowIn;\n\t if (declarations.length === 1 && this.matchKeyword('in')) {\n\t var decl = declarations[0];\n\t if (decl.init && (decl.id.type === syntax_1.Syntax.ArrayPattern || decl.id.type === syntax_1.Syntax.ObjectPattern || this.context.strict)) {\n\t this.tolerateError(messages_1.Messages.ForInOfLoopInitializer, 'for-in');\n\t }\n\t init = this.finalize(init, new Node.VariableDeclaration(declarations, 'var'));\n\t this.nextToken();\n\t left = init;\n\t right = this.parseExpression();\n\t init = null;\n\t }\n\t else if (declarations.length === 1 && declarations[0].init === null && this.matchContextualKeyword('of')) {\n\t init = this.finalize(init, new Node.VariableDeclaration(declarations, 'var'));\n\t this.nextToken();\n\t left = init;\n\t right = this.parseAssignmentExpression();\n\t init = null;\n\t forIn = false;\n\t }\n\t else {\n\t init = this.finalize(init, new Node.VariableDeclaration(declarations, 'var'));\n\t this.expect(';');\n\t }\n\t }\n\t else if (this.matchKeyword('const') || this.matchKeyword('let')) {\n\t init = this.createNode();\n\t var kind = this.nextToken().value;\n\t if (!this.context.strict && this.lookahead.value === 'in') {\n\t init = this.finalize(init, new Node.Identifier(kind));\n\t this.nextToken();\n\t left = init;\n\t right = this.parseExpression();\n\t init = null;\n\t }\n\t else {\n\t var previousAllowIn = this.context.allowIn;\n\t this.context.allowIn = false;\n\t var declarations = this.parseBindingList(kind, { inFor: true });\n\t this.context.allowIn = previousAllowIn;\n\t if (declarations.length === 1 && declarations[0].init === null && this.matchKeyword('in')) {\n\t init = this.finalize(init, new Node.VariableDeclaration(declarations, kind));\n\t this.nextToken();\n\t left = init;\n\t right = this.parseExpression();\n\t init = null;\n\t }\n\t else if (declarations.length === 1 && declarations[0].init === null && this.matchContextualKeyword('of')) {\n\t init = this.finalize(init, new Node.VariableDeclaration(declarations, kind));\n\t this.nextToken();\n\t left = init;\n\t right = this.parseAssignmentExpression();\n\t init = null;\n\t forIn = false;\n\t }\n\t else {\n\t this.consumeSemicolon();\n\t init = this.finalize(init, new Node.VariableDeclaration(declarations, kind));\n\t }\n\t }\n\t }\n\t else {\n\t var initStartToken = this.lookahead;\n\t var previousAllowIn = this.context.allowIn;\n\t this.context.allowIn = false;\n\t init = this.inheritCoverGrammar(this.parseAssignmentExpression);\n\t this.context.allowIn = previousAllowIn;\n\t if (this.matchKeyword('in')) {\n\t if (!this.context.isAssignmentTarget || init.type === syntax_1.Syntax.AssignmentExpression) {\n\t this.tolerateError(messages_1.Messages.InvalidLHSInForIn);\n\t }\n\t this.nextToken();\n\t this.reinterpretExpressionAsPattern(init);\n\t left = init;\n\t right = this.parseExpression();\n\t init = null;\n\t }\n\t else if (this.matchContextualKeyword('of')) {\n\t if (!this.context.isAssignmentTarget || init.type === syntax_1.Syntax.AssignmentExpression) {\n\t this.tolerateError(messages_1.Messages.InvalidLHSInForLoop);\n\t }\n\t this.nextToken();\n\t this.reinterpretExpressionAsPattern(init);\n\t left = init;\n\t right = this.parseAssignmentExpression();\n\t init = null;\n\t forIn = false;\n\t }\n\t else {\n\t if (this.match(',')) {\n\t var initSeq = [init];\n\t while (this.match(',')) {\n\t this.nextToken();\n\t initSeq.push(this.isolateCoverGrammar(this.parseAssignmentExpression));\n\t }\n\t init = this.finalize(this.startNode(initStartToken), new Node.SequenceExpression(initSeq));\n\t }\n\t this.expect(';');\n\t }\n\t }\n\t }\n\t if (typeof left === 'undefined') {\n\t if (!this.match(';')) {\n\t test = this.parseExpression();\n\t }\n\t this.expect(';');\n\t if (!this.match(')')) {\n\t update = this.parseExpression();\n\t }\n\t }\n\t var body;\n\t if (!this.match(')') && this.config.tolerant) {\n\t this.tolerateUnexpectedToken(this.nextToken());\n\t body = this.finalize(this.createNode(), new Node.EmptyStatement());\n\t }\n\t else {\n\t this.expect(')');\n\t var previousInIteration = this.context.inIteration;\n\t this.context.inIteration = true;\n\t body = this.isolateCoverGrammar(this.parseStatement);\n\t this.context.inIteration = previousInIteration;\n\t }\n\t return (typeof left === 'undefined') ?\n\t this.finalize(node, new Node.ForStatement(init, test, update, body)) :\n\t forIn ? this.finalize(node, new Node.ForInStatement(left, right, body)) :\n\t this.finalize(node, new Node.ForOfStatement(left, right, body));\n\t };\n\t // https://tc39.github.io/ecma262/#sec-continue-statement\n\t Parser.prototype.parseContinueStatement = function () {\n\t var node = this.createNode();\n\t this.expectKeyword('continue');\n\t var label = null;\n\t if (this.lookahead.type === 3 /* Identifier */ && !this.hasLineTerminator) {\n\t var id = this.parseVariableIdentifier();\n\t label = id;\n\t var key = '$' + id.name;\n\t if (!Object.prototype.hasOwnProperty.call(this.context.labelSet, key)) {\n\t this.throwError(messages_1.Messages.UnknownLabel, id.name);\n\t }\n\t }\n\t this.consumeSemicolon();\n\t if (label === null && !this.context.inIteration) {\n\t this.throwError(messages_1.Messages.IllegalContinue);\n\t }\n\t return this.finalize(node, new Node.ContinueStatement(label));\n\t };\n\t // https://tc39.github.io/ecma262/#sec-break-statement\n\t Parser.prototype.parseBreakStatement = function () {\n\t var node = this.createNode();\n\t this.expectKeyword('break');\n\t var label = null;\n\t if (this.lookahead.type === 3 /* Identifier */ && !this.hasLineTerminator) {\n\t var id = this.parseVariableIdentifier();\n\t var key = '$' + id.name;\n\t if (!Object.prototype.hasOwnProperty.call(this.context.labelSet, key)) {\n\t this.throwError(messages_1.Messages.UnknownLabel, id.name);\n\t }\n\t label = id;\n\t }\n\t this.consumeSemicolon();\n\t if (label === null && !this.context.inIteration && !this.context.inSwitch) {\n\t this.throwError(messages_1.Messages.IllegalBreak);\n\t }\n\t return this.finalize(node, new Node.BreakStatement(label));\n\t };\n\t // https://tc39.github.io/ecma262/#sec-return-statement\n\t Parser.prototype.parseReturnStatement = function () {\n\t if (!this.context.inFunctionBody) {\n\t this.tolerateError(messages_1.Messages.IllegalReturn);\n\t }\n\t var node = this.createNode();\n\t this.expectKeyword('return');\n\t var hasArgument = (!this.match(';') && !this.match('}') &&\n\t !this.hasLineTerminator && this.lookahead.type !== 2 /* EOF */) ||\n\t this.lookahead.type === 8 /* StringLiteral */ ||\n\t this.lookahead.type === 10 /* Template */;\n\t var argument = hasArgument ? this.parseExpression() : null;\n\t this.consumeSemicolon();\n\t return this.finalize(node, new Node.ReturnStatement(argument));\n\t };\n\t // https://tc39.github.io/ecma262/#sec-with-statement\n\t Parser.prototype.parseWithStatement = function () {\n\t if (this.context.strict) {\n\t this.tolerateError(messages_1.Messages.StrictModeWith);\n\t }\n\t var node = this.createNode();\n\t var body;\n\t this.expectKeyword('with');\n\t this.expect('(');\n\t var object = this.parseExpression();\n\t if (!this.match(')') && this.config.tolerant) {\n\t this.tolerateUnexpectedToken(this.nextToken());\n\t body = this.finalize(this.createNode(), new Node.EmptyStatement());\n\t }\n\t else {\n\t this.expect(')');\n\t body = this.parseStatement();\n\t }\n\t return this.finalize(node, new Node.WithStatement(object, body));\n\t };\n\t // https://tc39.github.io/ecma262/#sec-switch-statement\n\t Parser.prototype.parseSwitchCase = function () {\n\t var node = this.createNode();\n\t var test;\n\t if (this.matchKeyword('default')) {\n\t this.nextToken();\n\t test = null;\n\t }\n\t else {\n\t this.expectKeyword('case');\n\t test = this.parseExpression();\n\t }\n\t this.expect(':');\n\t var consequent = [];\n\t while (true) {\n\t if (this.match('}') || this.matchKeyword('default') || this.matchKeyword('case')) {\n\t break;\n\t }\n\t consequent.push(this.parseStatementListItem());\n\t }\n\t return this.finalize(node, new Node.SwitchCase(test, consequent));\n\t };\n\t Parser.prototype.parseSwitchStatement = function () {\n\t var node = this.createNode();\n\t this.expectKeyword('switch');\n\t this.expect('(');\n\t var discriminant = this.parseExpression();\n\t this.expect(')');\n\t var previousInSwitch = this.context.inSwitch;\n\t this.context.inSwitch = true;\n\t var cases = [];\n\t var defaultFound = false;\n\t this.expect('{');\n\t while (true) {\n\t if (this.match('}')) {\n\t break;\n\t }\n\t var clause = this.parseSwitchCase();\n\t if (clause.test === null) {\n\t if (defaultFound) {\n\t this.throwError(messages_1.Messages.MultipleDefaultsInSwitch);\n\t }\n\t defaultFound = true;\n\t }\n\t cases.push(clause);\n\t }\n\t this.expect('}');\n\t this.context.inSwitch = previousInSwitch;\n\t return this.finalize(node, new Node.SwitchStatement(discriminant, cases));\n\t };\n\t // https://tc39.github.io/ecma262/#sec-labelled-statements\n\t Parser.prototype.parseLabelledStatement = function () {\n\t var node = this.createNode();\n\t var expr = this.parseExpression();\n\t var statement;\n\t if ((expr.type === syntax_1.Syntax.Identifier) && this.match(':')) {\n\t this.nextToken();\n\t var id = expr;\n\t var key = '$' + id.name;\n\t if (Object.prototype.hasOwnProperty.call(this.context.labelSet, key)) {\n\t this.throwError(messages_1.Messages.Redeclaration, 'Label', id.name);\n\t }\n\t this.context.labelSet[key] = true;\n\t var body = void 0;\n\t if (this.matchKeyword('class')) {\n\t this.tolerateUnexpectedToken(this.lookahead);\n\t body = this.parseClassDeclaration();\n\t }\n\t else if (this.matchKeyword('function')) {\n\t var token = this.lookahead;\n\t var declaration = this.parseFunctionDeclaration();\n\t if (this.context.strict) {\n\t this.tolerateUnexpectedToken(token, messages_1.Messages.StrictFunction);\n\t }\n\t else if (declaration.generator) {\n\t this.tolerateUnexpectedToken(token, messages_1.Messages.GeneratorInLegacyContext);\n\t }\n\t body = declaration;\n\t }\n\t else {\n\t body = this.parseStatement();\n\t }\n\t delete this.context.labelSet[key];\n\t statement = new Node.LabeledStatement(id, body);\n\t }\n\t else {\n\t this.consumeSemicolon();\n\t statement = new Node.ExpressionStatement(expr);\n\t }\n\t return this.finalize(node, statement);\n\t };\n\t // https://tc39.github.io/ecma262/#sec-throw-statement\n\t Parser.prototype.parseThrowStatement = function () {\n\t var node = this.createNode();\n\t this.expectKeyword('throw');\n\t if (this.hasLineTerminator) {\n\t this.throwError(messages_1.Messages.NewlineAfterThrow);\n\t }\n\t var argument = this.parseExpression();\n\t this.consumeSemicolon();\n\t return this.finalize(node, new Node.ThrowStatement(argument));\n\t };\n\t // https://tc39.github.io/ecma262/#sec-try-statement\n\t Parser.prototype.parseCatchClause = function () {\n\t var node = this.createNode();\n\t this.expectKeyword('catch');\n\t this.expect('(');\n\t if (this.match(')')) {\n\t this.throwUnexpectedToken(this.lookahead);\n\t }\n\t var params = [];\n\t var param = this.parsePattern(params);\n\t var paramMap = {};\n\t for (var i = 0; i < params.length; i++) {\n\t var key = '$' + params[i].value;\n\t if (Object.prototype.hasOwnProperty.call(paramMap, key)) {\n\t this.tolerateError(messages_1.Messages.DuplicateBinding, params[i].value);\n\t }\n\t paramMap[key] = true;\n\t }\n\t if (this.context.strict && param.type === syntax_1.Syntax.Identifier) {\n\t if (this.scanner.isRestrictedWord(param.name)) {\n\t this.tolerateError(messages_1.Messages.StrictCatchVariable);\n\t }\n\t }\n\t this.expect(')');\n\t var body = this.parseBlock();\n\t return this.finalize(node, new Node.CatchClause(param, body));\n\t };\n\t Parser.prototype.parseFinallyClause = function () {\n\t this.expectKeyword('finally');\n\t return this.parseBlock();\n\t };\n\t Parser.prototype.parseTryStatement = function () {\n\t var node = this.createNode();\n\t this.expectKeyword('try');\n\t var block = this.parseBlock();\n\t var handler = this.matchKeyword('catch') ? this.parseCatchClause() : null;\n\t var finalizer = this.matchKeyword('finally') ? this.parseFinallyClause() : null;\n\t if (!handler && !finalizer) {\n\t this.throwError(messages_1.Messages.NoCatchOrFinally);\n\t }\n\t return this.finalize(node, new Node.TryStatement(block, handler, finalizer));\n\t };\n\t // https://tc39.github.io/ecma262/#sec-debugger-statement\n\t Parser.prototype.parseDebuggerStatement = function () {\n\t var node = this.createNode();\n\t this.expectKeyword('debugger');\n\t this.consumeSemicolon();\n\t return this.finalize(node, new Node.DebuggerStatement());\n\t };\n\t // https://tc39.github.io/ecma262/#sec-ecmascript-language-statements-and-declarations\n\t Parser.prototype.parseStatement = function () {\n\t var statement;\n\t switch (this.lookahead.type) {\n\t case 1 /* BooleanLiteral */:\n\t case 5 /* NullLiteral */:\n\t case 6 /* NumericLiteral */:\n\t case 8 /* StringLiteral */:\n\t case 10 /* Template */:\n\t case 9 /* RegularExpression */:\n\t statement = this.parseExpressionStatement();\n\t break;\n\t case 7 /* Punctuator */:\n\t var value = this.lookahead.value;\n\t if (value === '{') {\n\t statement = this.parseBlock();\n\t }\n\t else if (value === '(') {\n\t statement = this.parseExpressionStatement();\n\t }\n\t else if (value === ';') {\n\t statement = this.parseEmptyStatement();\n\t }\n\t else {\n\t statement = this.parseExpressionStatement();\n\t }\n\t break;\n\t case 3 /* Identifier */:\n\t statement = this.matchAsyncFunction() ? this.parseFunctionDeclaration() : this.parseLabelledStatement();\n\t break;\n\t case 4 /* Keyword */:\n\t switch (this.lookahead.value) {\n\t case 'break':\n\t statement = this.parseBreakStatement();\n\t break;\n\t case 'continue':\n\t statement = this.parseContinueStatement();\n\t break;\n\t case 'debugger':\n\t statement = this.parseDebuggerStatement();\n\t break;\n\t case 'do':\n\t statement = this.parseDoWhileStatement();\n\t break;\n\t case 'for':\n\t statement = this.parseForStatement();\n\t break;\n\t case 'function':\n\t statement = this.parseFunctionDeclaration();\n\t break;\n\t case 'if':\n\t statement = this.parseIfStatement();\n\t break;\n\t case 'return':\n\t statement = this.parseReturnStatement();\n\t break;\n\t case 'switch':\n\t statement = this.parseSwitchStatement();\n\t break;\n\t case 'throw':\n\t statement = this.parseThrowStatement();\n\t break;\n\t case 'try':\n\t statement = this.parseTryStatement();\n\t break;\n\t case 'var':\n\t statement = this.parseVariableStatement();\n\t break;\n\t case 'while':\n\t statement = this.parseWhileStatement();\n\t break;\n\t case 'with':\n\t statement = this.parseWithStatement();\n\t break;\n\t default:\n\t statement = this.parseExpressionStatement();\n\t break;\n\t }\n\t break;\n\t default:\n\t statement = this.throwUnexpectedToken(this.lookahead);\n\t }\n\t return statement;\n\t };\n\t // https://tc39.github.io/ecma262/#sec-function-definitions\n\t Parser.prototype.parseFunctionSourceElements = function () {\n\t var node = this.createNode();\n\t this.expect('{');\n\t var body = this.parseDirectivePrologues();\n\t var previousLabelSet = this.context.labelSet;\n\t var previousInIteration = this.context.inIteration;\n\t var previousInSwitch = this.context.inSwitch;\n\t var previousInFunctionBody = this.context.inFunctionBody;\n\t this.context.labelSet = {};\n\t this.context.inIteration = false;\n\t this.context.inSwitch = false;\n\t this.context.inFunctionBody = true;\n\t while (this.lookahead.type !== 2 /* EOF */) {\n\t if (this.match('}')) {\n\t break;\n\t }\n\t body.push(this.parseStatementListItem());\n\t }\n\t this.expect('}');\n\t this.context.labelSet = previousLabelSet;\n\t this.context.inIteration = previousInIteration;\n\t this.context.inSwitch = previousInSwitch;\n\t this.context.inFunctionBody = previousInFunctionBody;\n\t return this.finalize(node, new Node.BlockStatement(body));\n\t };\n\t Parser.prototype.validateParam = function (options, param, name) {\n\t var key = '$' + name;\n\t if (this.context.strict) {\n\t if (this.scanner.isRestrictedWord(name)) {\n\t options.stricted = param;\n\t options.message = messages_1.Messages.StrictParamName;\n\t }\n\t if (Object.prototype.hasOwnProperty.call(options.paramSet, key)) {\n\t options.stricted = param;\n\t options.message = messages_1.Messages.StrictParamDupe;\n\t }\n\t }\n\t else if (!options.firstRestricted) {\n\t if (this.scanner.isRestrictedWord(name)) {\n\t options.firstRestricted = param;\n\t options.message = messages_1.Messages.StrictParamName;\n\t }\n\t else if (this.scanner.isStrictModeReservedWord(name)) {\n\t options.firstRestricted = param;\n\t options.message = messages_1.Messages.StrictReservedWord;\n\t }\n\t else if (Object.prototype.hasOwnProperty.call(options.paramSet, key)) {\n\t options.stricted = param;\n\t options.message = messages_1.Messages.StrictParamDupe;\n\t }\n\t }\n\t /* istanbul ignore next */\n\t if (typeof Object.defineProperty === 'function') {\n\t Object.defineProperty(options.paramSet, key, { value: true, enumerable: true, writable: true, configurable: true });\n\t }\n\t else {\n\t options.paramSet[key] = true;\n\t }\n\t };\n\t Parser.prototype.parseRestElement = function (params) {\n\t var node = this.createNode();\n\t this.expect('...');\n\t var arg = this.parsePattern(params);\n\t if (this.match('=')) {\n\t this.throwError(messages_1.Messages.DefaultRestParameter);\n\t }\n\t if (!this.match(')')) {\n\t this.throwError(messages_1.Messages.ParameterAfterRestParameter);\n\t }\n\t return this.finalize(node, new Node.RestElement(arg));\n\t };\n\t Parser.prototype.parseFormalParameter = function (options) {\n\t var params = [];\n\t var param = this.match('...') ? this.parseRestElement(params) : this.parsePatternWithDefault(params);\n\t for (var i = 0; i < params.length; i++) {\n\t this.validateParam(options, params[i], params[i].value);\n\t }\n\t options.simple = options.simple && (param instanceof Node.Identifier);\n\t options.params.push(param);\n\t };\n\t Parser.prototype.parseFormalParameters = function (firstRestricted) {\n\t var options;\n\t options = {\n\t simple: true,\n\t params: [],\n\t firstRestricted: firstRestricted\n\t };\n\t this.expect('(');\n\t if (!this.match(')')) {\n\t options.paramSet = {};\n\t while (this.lookahead.type !== 2 /* EOF */) {\n\t this.parseFormalParameter(options);\n\t if (this.match(')')) {\n\t break;\n\t }\n\t this.expect(',');\n\t if (this.match(')')) {\n\t break;\n\t }\n\t }\n\t }\n\t this.expect(')');\n\t return {\n\t simple: options.simple,\n\t params: options.params,\n\t stricted: options.stricted,\n\t firstRestricted: options.firstRestricted,\n\t message: options.message\n\t };\n\t };\n\t Parser.prototype.matchAsyncFunction = function () {\n\t var match = this.matchContextualKeyword('async');\n\t if (match) {\n\t var state = this.scanner.saveState();\n\t this.scanner.scanComments();\n\t var next = this.scanner.lex();\n\t this.scanner.restoreState(state);\n\t match = (state.lineNumber === next.lineNumber) && (next.type === 4 /* Keyword */) && (next.value === 'function');\n\t }\n\t return match;\n\t };\n\t Parser.prototype.parseFunctionDeclaration = function (identifierIsOptional) {\n\t var node = this.createNode();\n\t var isAsync = this.matchContextualKeyword('async');\n\t if (isAsync) {\n\t this.nextToken();\n\t }\n\t this.expectKeyword('function');\n\t var isGenerator = isAsync ? false : this.match('*');\n\t if (isGenerator) {\n\t this.nextToken();\n\t }\n\t var message;\n\t var id = null;\n\t var firstRestricted = null;\n\t if (!identifierIsOptional || !this.match('(')) {\n\t var token = this.lookahead;\n\t id = this.parseVariableIdentifier();\n\t if (this.context.strict) {\n\t if (this.scanner.isRestrictedWord(token.value)) {\n\t this.tolerateUnexpectedToken(token, messages_1.Messages.StrictFunctionName);\n\t }\n\t }\n\t else {\n\t if (this.scanner.isRestrictedWord(token.value)) {\n\t firstRestricted = token;\n\t message = messages_1.Messages.StrictFunctionName;\n\t }\n\t else if (this.scanner.isStrictModeReservedWord(token.value)) {\n\t firstRestricted = token;\n\t message = messages_1.Messages.StrictReservedWord;\n\t }\n\t }\n\t }\n\t var previousAllowAwait = this.context.await;\n\t var previousAllowYield = this.context.allowYield;\n\t this.context.await = isAsync;\n\t this.context.allowYield = !isGenerator;\n\t var formalParameters = this.parseFormalParameters(firstRestricted);\n\t var params = formalParameters.params;\n\t var stricted = formalParameters.stricted;\n\t firstRestricted = formalParameters.firstRestricted;\n\t if (formalParameters.message) {\n\t message = formalParameters.message;\n\t }\n\t var previousStrict = this.context.strict;\n\t var previousAllowStrictDirective = this.context.allowStrictDirective;\n\t this.context.allowStrictDirective = formalParameters.simple;\n\t var body = this.parseFunctionSourceElements();\n\t if (this.context.strict && firstRestricted) {\n\t this.throwUnexpectedToken(firstRestricted, message);\n\t }\n\t if (this.context.strict && stricted) {\n\t this.tolerateUnexpectedToken(stricted, message);\n\t }\n\t this.context.strict = previousStrict;\n\t this.context.allowStrictDirective = previousAllowStrictDirective;\n\t this.context.await = previousAllowAwait;\n\t this.context.allowYield = previousAllowYield;\n\t return isAsync ? this.finalize(node, new Node.AsyncFunctionDeclaration(id, params, body)) :\n\t this.finalize(node, new Node.FunctionDeclaration(id, params, body, isGenerator));\n\t };\n\t Parser.prototype.parseFunctionExpression = function () {\n\t var node = this.createNode();\n\t var isAsync = this.matchContextualKeyword('async');\n\t if (isAsync) {\n\t this.nextToken();\n\t }\n\t this.expectKeyword('function');\n\t var isGenerator = isAsync ? false : this.match('*');\n\t if (isGenerator) {\n\t this.nextToken();\n\t }\n\t var message;\n\t var id = null;\n\t var firstRestricted;\n\t var previousAllowAwait = this.context.await;\n\t var previousAllowYield = this.context.allowYield;\n\t this.context.await = isAsync;\n\t this.context.allowYield = !isGenerator;\n\t if (!this.match('(')) {\n\t var token = this.lookahead;\n\t id = (!this.context.strict && !isGenerator && this.matchKeyword('yield')) ? this.parseIdentifierName() : this.parseVariableIdentifier();\n\t if (this.context.strict) {\n\t if (this.scanner.isRestrictedWord(token.value)) {\n\t this.tolerateUnexpectedToken(token, messages_1.Messages.StrictFunctionName);\n\t }\n\t }\n\t else {\n\t if (this.scanner.isRestrictedWord(token.value)) {\n\t firstRestricted = token;\n\t message = messages_1.Messages.StrictFunctionName;\n\t }\n\t else if (this.scanner.isStrictModeReservedWord(token.value)) {\n\t firstRestricted = token;\n\t message = messages_1.Messages.StrictReservedWord;\n\t }\n\t }\n\t }\n\t var formalParameters = this.parseFormalParameters(firstRestricted);\n\t var params = formalParameters.params;\n\t var stricted = formalParameters.stricted;\n\t firstRestricted = formalParameters.firstRestricted;\n\t if (formalParameters.message) {\n\t message = formalParameters.message;\n\t }\n\t var previousStrict = this.context.strict;\n\t var previousAllowStrictDirective = this.context.allowStrictDirective;\n\t this.context.allowStrictDirective = formalParameters.simple;\n\t var body = this.parseFunctionSourceElements();\n\t if (this.context.strict && firstRestricted) {\n\t this.throwUnexpectedToken(firstRestricted, message);\n\t }\n\t if (this.context.strict && stricted) {\n\t this.tolerateUnexpectedToken(stricted, message);\n\t }\n\t this.context.strict = previousStrict;\n\t this.context.allowStrictDirective = previousAllowStrictDirective;\n\t this.context.await = previousAllowAwait;\n\t this.context.allowYield = previousAllowYield;\n\t return isAsync ? this.finalize(node, new Node.AsyncFunctionExpression(id, params, body)) :\n\t this.finalize(node, new Node.FunctionExpression(id, params, body, isGenerator));\n\t };\n\t // https://tc39.github.io/ecma262/#sec-directive-prologues-and-the-use-strict-directive\n\t Parser.prototype.parseDirective = function () {\n\t var token = this.lookahead;\n\t var node = this.createNode();\n\t var expr = this.parseExpression();\n\t var directive = (expr.type === syntax_1.Syntax.Literal) ? this.getTokenRaw(token).slice(1, -1) : null;\n\t this.consumeSemicolon();\n\t return this.finalize(node, directive ? new Node.Directive(expr, directive) : new Node.ExpressionStatement(expr));\n\t };\n\t Parser.prototype.parseDirectivePrologues = function () {\n\t var firstRestricted = null;\n\t var body = [];\n\t while (true) {\n\t var token = this.lookahead;\n\t if (token.type !== 8 /* StringLiteral */) {\n\t break;\n\t }\n\t var statement = this.parseDirective();\n\t body.push(statement);\n\t var directive = statement.directive;\n\t if (typeof directive !== 'string') {\n\t break;\n\t }\n\t if (directive === 'use strict') {\n\t this.context.strict = true;\n\t if (firstRestricted) {\n\t this.tolerateUnexpectedToken(firstRestricted, messages_1.Messages.StrictOctalLiteral);\n\t }\n\t if (!this.context.allowStrictDirective) {\n\t this.tolerateUnexpectedToken(token, messages_1.Messages.IllegalLanguageModeDirective);\n\t }\n\t }\n\t else {\n\t if (!firstRestricted && token.octal) {\n\t firstRestricted = token;\n\t }\n\t }\n\t }\n\t return body;\n\t };\n\t // https://tc39.github.io/ecma262/#sec-method-definitions\n\t Parser.prototype.qualifiedPropertyName = function (token) {\n\t switch (token.type) {\n\t case 3 /* Identifier */:\n\t case 8 /* StringLiteral */:\n\t case 1 /* BooleanLiteral */:\n\t case 5 /* NullLiteral */:\n\t case 6 /* NumericLiteral */:\n\t case 4 /* Keyword */:\n\t return true;\n\t case 7 /* Punctuator */:\n\t return token.value === '[';\n\t default:\n\t break;\n\t }\n\t return false;\n\t };\n\t Parser.prototype.parseGetterMethod = function () {\n\t var node = this.createNode();\n\t var isGenerator = false;\n\t var previousAllowYield = this.context.allowYield;\n\t this.context.allowYield = !isGenerator;\n\t var formalParameters = this.parseFormalParameters();\n\t if (formalParameters.params.length > 0) {\n\t this.tolerateError(messages_1.Messages.BadGetterArity);\n\t }\n\t var method = this.parsePropertyMethod(formalParameters);\n\t this.context.allowYield = previousAllowYield;\n\t return this.finalize(node, new Node.FunctionExpression(null, formalParameters.params, method, isGenerator));\n\t };\n\t Parser.prototype.parseSetterMethod = function () {\n\t var node = this.createNode();\n\t var isGenerator = false;\n\t var previousAllowYield = this.context.allowYield;\n\t this.context.allowYield = !isGenerator;\n\t var formalParameters = this.parseFormalParameters();\n\t if (formalParameters.params.length !== 1) {\n\t this.tolerateError(messages_1.Messages.BadSetterArity);\n\t }\n\t else if (formalParameters.params[0] instanceof Node.RestElement) {\n\t this.tolerateError(messages_1.Messages.BadSetterRestParameter);\n\t }\n\t var method = this.parsePropertyMethod(formalParameters);\n\t this.context.allowYield = previousAllowYield;\n\t return this.finalize(node, new Node.FunctionExpression(null, formalParameters.params, method, isGenerator));\n\t };\n\t Parser.prototype.parseGeneratorMethod = function () {\n\t var node = this.createNode();\n\t var isGenerator = true;\n\t var previousAllowYield = this.context.allowYield;\n\t this.context.allowYield = true;\n\t var params = this.parseFormalParameters();\n\t this.context.allowYield = false;\n\t var method = this.parsePropertyMethod(params);\n\t this.context.allowYield = previousAllowYield;\n\t return this.finalize(node, new Node.FunctionExpression(null, params.params, method, isGenerator));\n\t };\n\t // https://tc39.github.io/ecma262/#sec-generator-function-definitions\n\t Parser.prototype.isStartOfExpression = function () {\n\t var start = true;\n\t var value = this.lookahead.value;\n\t switch (this.lookahead.type) {\n\t case 7 /* Punctuator */:\n\t start = (value === '[') || (value === '(') || (value === '{') ||\n\t (value === '+') || (value === '-') ||\n\t (value === '!') || (value === '~') ||\n\t (value === '++') || (value === '--') ||\n\t (value === '/') || (value === '/='); // regular expression literal\n\t break;\n\t case 4 /* Keyword */:\n\t start = (value === 'class') || (value === 'delete') ||\n\t (value === 'function') || (value === 'let') || (value === 'new') ||\n\t (value === 'super') || (value === 'this') || (value === 'typeof') ||\n\t (value === 'void') || (value === 'yield');\n\t break;\n\t default:\n\t break;\n\t }\n\t return start;\n\t };\n\t Parser.prototype.parseYieldExpression = function () {\n\t var node = this.createNode();\n\t this.expectKeyword('yield');\n\t var argument = null;\n\t var delegate = false;\n\t if (!this.hasLineTerminator) {\n\t var previousAllowYield = this.context.allowYield;\n\t this.context.allowYield = false;\n\t delegate = this.match('*');\n\t if (delegate) {\n\t this.nextToken();\n\t argument = this.parseAssignmentExpression();\n\t }\n\t else if (this.isStartOfExpression()) {\n\t argument = this.parseAssignmentExpression();\n\t }\n\t this.context.allowYield = previousAllowYield;\n\t }\n\t return this.finalize(node, new Node.YieldExpression(argument, delegate));\n\t };\n\t // https://tc39.github.io/ecma262/#sec-class-definitions\n\t Parser.prototype.parseClassElement = function (hasConstructor) {\n\t var token = this.lookahead;\n\t var node = this.createNode();\n\t var kind = '';\n\t var key = null;\n\t var value = null;\n\t var computed = false;\n\t var method = false;\n\t var isStatic = false;\n\t var isAsync = false;\n\t if (this.match('*')) {\n\t this.nextToken();\n\t }\n\t else {\n\t computed = this.match('[');\n\t key = this.parseObjectPropertyKey();\n\t var id = key;\n\t if (id.name === 'static' && (this.qualifiedPropertyName(this.lookahead) || this.match('*'))) {\n\t token = this.lookahead;\n\t isStatic = true;\n\t computed = this.match('[');\n\t if (this.match('*')) {\n\t this.nextToken();\n\t }\n\t else {\n\t key = this.parseObjectPropertyKey();\n\t }\n\t }\n\t if ((token.type === 3 /* Identifier */) && !this.hasLineTerminator && (token.value === 'async')) {\n\t var punctuator = this.lookahead.value;\n\t if (punctuator !== ':' && punctuator !== '(' && punctuator !== '*') {\n\t isAsync = true;\n\t token = this.lookahead;\n\t key = this.parseObjectPropertyKey();\n\t if (token.type === 3 /* Identifier */ && token.value === 'constructor') {\n\t this.tolerateUnexpectedToken(token, messages_1.Messages.ConstructorIsAsync);\n\t }\n\t }\n\t }\n\t }\n\t var lookaheadPropertyKey = this.qualifiedPropertyName(this.lookahead);\n\t if (token.type === 3 /* Identifier */) {\n\t if (token.value === 'get' && lookaheadPropertyKey) {\n\t kind = 'get';\n\t computed = this.match('[');\n\t key = this.parseObjectPropertyKey();\n\t this.context.allowYield = false;\n\t value = this.parseGetterMethod();\n\t }\n\t else if (token.value === 'set' && lookaheadPropertyKey) {\n\t kind = 'set';\n\t computed = this.match('[');\n\t key = this.parseObjectPropertyKey();\n\t value = this.parseSetterMethod();\n\t }\n\t }\n\t else if (token.type === 7 /* Punctuator */ && token.value === '*' && lookaheadPropertyKey) {\n\t kind = 'init';\n\t computed = this.match('[');\n\t key = this.parseObjectPropertyKey();\n\t value = this.parseGeneratorMethod();\n\t method = true;\n\t }\n\t if (!kind && key && this.match('(')) {\n\t kind = 'init';\n\t value = isAsync ? this.parsePropertyMethodAsyncFunction() : this.parsePropertyMethodFunction();\n\t method = true;\n\t }\n\t if (!kind) {\n\t this.throwUnexpectedToken(this.lookahead);\n\t }\n\t if (kind === 'init') {\n\t kind = 'method';\n\t }\n\t if (!computed) {\n\t if (isStatic && this.isPropertyKey(key, 'prototype')) {\n\t this.throwUnexpectedToken(token, messages_1.Messages.StaticPrototype);\n\t }\n\t if (!isStatic && this.isPropertyKey(key, 'constructor')) {\n\t if (kind !== 'method' || !method || (value && value.generator)) {\n\t this.throwUnexpectedToken(token, messages_1.Messages.ConstructorSpecialMethod);\n\t }\n\t if (hasConstructor.value) {\n\t this.throwUnexpectedToken(token, messages_1.Messages.DuplicateConstructor);\n\t }\n\t else {\n\t hasConstructor.value = true;\n\t }\n\t kind = 'constructor';\n\t }\n\t }\n\t return this.finalize(node, new Node.MethodDefinition(key, computed, value, kind, isStatic));\n\t };\n\t Parser.prototype.parseClassElementList = function () {\n\t var body = [];\n\t var hasConstructor = { value: false };\n\t this.expect('{');\n\t while (!this.match('}')) {\n\t if (this.match(';')) {\n\t this.nextToken();\n\t }\n\t else {\n\t body.push(this.parseClassElement(hasConstructor));\n\t }\n\t }\n\t this.expect('}');\n\t return body;\n\t };\n\t Parser.prototype.parseClassBody = function () {\n\t var node = this.createNode();\n\t var elementList = this.parseClassElementList();\n\t return this.finalize(node, new Node.ClassBody(elementList));\n\t };\n\t Parser.prototype.parseClassDeclaration = function (identifierIsOptional) {\n\t var node = this.createNode();\n\t var previousStrict = this.context.strict;\n\t this.context.strict = true;\n\t this.expectKeyword('class');\n\t var id = (identifierIsOptional && (this.lookahead.type !== 3 /* Identifier */)) ? null : this.parseVariableIdentifier();\n\t var superClass = null;\n\t if (this.matchKeyword('extends')) {\n\t this.nextToken();\n\t superClass = this.isolateCoverGrammar(this.parseLeftHandSideExpressionAllowCall);\n\t }\n\t var classBody = this.parseClassBody();\n\t this.context.strict = previousStrict;\n\t return this.finalize(node, new Node.ClassDeclaration(id, superClass, classBody));\n\t };\n\t Parser.prototype.parseClassExpression = function () {\n\t var node = this.createNode();\n\t var previousStrict = this.context.strict;\n\t this.context.strict = true;\n\t this.expectKeyword('class');\n\t var id = (this.lookahead.type === 3 /* Identifier */) ? this.parseVariableIdentifier() : null;\n\t var superClass = null;\n\t if (this.matchKeyword('extends')) {\n\t this.nextToken();\n\t superClass = this.isolateCoverGrammar(this.parseLeftHandSideExpressionAllowCall);\n\t }\n\t var classBody = this.parseClassBody();\n\t this.context.strict = previousStrict;\n\t return this.finalize(node, new Node.ClassExpression(id, superClass, classBody));\n\t };\n\t // https://tc39.github.io/ecma262/#sec-scripts\n\t // https://tc39.github.io/ecma262/#sec-modules\n\t Parser.prototype.parseModule = function () {\n\t this.context.strict = true;\n\t this.context.isModule = true;\n\t this.scanner.isModule = true;\n\t var node = this.createNode();\n\t var body = this.parseDirectivePrologues();\n\t while (this.lookahead.type !== 2 /* EOF */) {\n\t body.push(this.parseStatementListItem());\n\t }\n\t return this.finalize(node, new Node.Module(body));\n\t };\n\t Parser.prototype.parseScript = function () {\n\t var node = this.createNode();\n\t var body = this.parseDirectivePrologues();\n\t while (this.lookahead.type !== 2 /* EOF */) {\n\t body.push(this.parseStatementListItem());\n\t }\n\t return this.finalize(node, new Node.Script(body));\n\t };\n\t // https://tc39.github.io/ecma262/#sec-imports\n\t Parser.prototype.parseModuleSpecifier = function () {\n\t var node = this.createNode();\n\t if (this.lookahead.type !== 8 /* StringLiteral */) {\n\t this.throwError(messages_1.Messages.InvalidModuleSpecifier);\n\t }\n\t var token = this.nextToken();\n\t var raw = this.getTokenRaw(token);\n\t return this.finalize(node, new Node.Literal(token.value, raw));\n\t };\n\t // import {} ...;\n\t Parser.prototype.parseImportSpecifier = function () {\n\t var node = this.createNode();\n\t var imported;\n\t var local;\n\t if (this.lookahead.type === 3 /* Identifier */) {\n\t imported = this.parseVariableIdentifier();\n\t local = imported;\n\t if (this.matchContextualKeyword('as')) {\n\t this.nextToken();\n\t local = this.parseVariableIdentifier();\n\t }\n\t }\n\t else {\n\t imported = this.parseIdentifierName();\n\t local = imported;\n\t if (this.matchContextualKeyword('as')) {\n\t this.nextToken();\n\t local = this.parseVariableIdentifier();\n\t }\n\t else {\n\t this.throwUnexpectedToken(this.nextToken());\n\t }\n\t }\n\t return this.finalize(node, new Node.ImportSpecifier(local, imported));\n\t };\n\t // {foo, bar as bas}\n\t Parser.prototype.parseNamedImports = function () {\n\t this.expect('{');\n\t var specifiers = [];\n\t while (!this.match('}')) {\n\t specifiers.push(this.parseImportSpecifier());\n\t if (!this.match('}')) {\n\t this.expect(',');\n\t }\n\t }\n\t this.expect('}');\n\t return specifiers;\n\t };\n\t // import ...;\n\t Parser.prototype.parseImportDefaultSpecifier = function () {\n\t var node = this.createNode();\n\t var local = this.parseIdentifierName();\n\t return this.finalize(node, new Node.ImportDefaultSpecifier(local));\n\t };\n\t // import <* as foo> ...;\n\t Parser.prototype.parseImportNamespaceSpecifier = function () {\n\t var node = this.createNode();\n\t this.expect('*');\n\t if (!this.matchContextualKeyword('as')) {\n\t this.throwError(messages_1.Messages.NoAsAfterImportNamespace);\n\t }\n\t this.nextToken();\n\t var local = this.parseIdentifierName();\n\t return this.finalize(node, new Node.ImportNamespaceSpecifier(local));\n\t };\n\t Parser.prototype.parseImportDeclaration = function () {\n\t if (this.context.inFunctionBody) {\n\t this.throwError(messages_1.Messages.IllegalImportDeclaration);\n\t }\n\t var node = this.createNode();\n\t this.expectKeyword('import');\n\t var src;\n\t var specifiers = [];\n\t if (this.lookahead.type === 8 /* StringLiteral */) {\n\t // import 'foo';\n\t src = this.parseModuleSpecifier();\n\t }\n\t else {\n\t if (this.match('{')) {\n\t // import {bar}\n\t specifiers = specifiers.concat(this.parseNamedImports());\n\t }\n\t else if (this.match('*')) {\n\t // import * as foo\n\t specifiers.push(this.parseImportNamespaceSpecifier());\n\t }\n\t else if (this.isIdentifierName(this.lookahead) && !this.matchKeyword('default')) {\n\t // import foo\n\t specifiers.push(this.parseImportDefaultSpecifier());\n\t if (this.match(',')) {\n\t this.nextToken();\n\t if (this.match('*')) {\n\t // import foo, * as foo\n\t specifiers.push(this.parseImportNamespaceSpecifier());\n\t }\n\t else if (this.match('{')) {\n\t // import foo, {bar}\n\t specifiers = specifiers.concat(this.parseNamedImports());\n\t }\n\t else {\n\t this.throwUnexpectedToken(this.lookahead);\n\t }\n\t }\n\t }\n\t else {\n\t this.throwUnexpectedToken(this.nextToken());\n\t }\n\t if (!this.matchContextualKeyword('from')) {\n\t var message = this.lookahead.value ? messages_1.Messages.UnexpectedToken : messages_1.Messages.MissingFromClause;\n\t this.throwError(message, this.lookahead.value);\n\t }\n\t this.nextToken();\n\t src = this.parseModuleSpecifier();\n\t }\n\t this.consumeSemicolon();\n\t return this.finalize(node, new Node.ImportDeclaration(specifiers, src));\n\t };\n\t // https://tc39.github.io/ecma262/#sec-exports\n\t Parser.prototype.parseExportSpecifier = function () {\n\t var node = this.createNode();\n\t var local = this.parseIdentifierName();\n\t var exported = local;\n\t if (this.matchContextualKeyword('as')) {\n\t this.nextToken();\n\t exported = this.parseIdentifierName();\n\t }\n\t return this.finalize(node, new Node.ExportSpecifier(local, exported));\n\t };\n\t Parser.prototype.parseExportDeclaration = function () {\n\t if (this.context.inFunctionBody) {\n\t this.throwError(messages_1.Messages.IllegalExportDeclaration);\n\t }\n\t var node = this.createNode();\n\t this.expectKeyword('export');\n\t var exportDeclaration;\n\t if (this.matchKeyword('default')) {\n\t // export default ...\n\t this.nextToken();\n\t if (this.matchKeyword('function')) {\n\t // export default function foo () {}\n\t // export default function () {}\n\t var declaration = this.parseFunctionDeclaration(true);\n\t exportDeclaration = this.finalize(node, new Node.ExportDefaultDeclaration(declaration));\n\t }\n\t else if (this.matchKeyword('class')) {\n\t // export default class foo {}\n\t var declaration = this.parseClassDeclaration(true);\n\t exportDeclaration = this.finalize(node, new Node.ExportDefaultDeclaration(declaration));\n\t }\n\t else if (this.matchContextualKeyword('async')) {\n\t // export default async function f () {}\n\t // export default async function () {}\n\t // export default async x => x\n\t var declaration = this.matchAsyncFunction() ? this.parseFunctionDeclaration(true) : this.parseAssignmentExpression();\n\t exportDeclaration = this.finalize(node, new Node.ExportDefaultDeclaration(declaration));\n\t }\n\t else {\n\t if (this.matchContextualKeyword('from')) {\n\t this.throwError(messages_1.Messages.UnexpectedToken, this.lookahead.value);\n\t }\n\t // export default {};\n\t // export default [];\n\t // export default (1 + 2);\n\t var declaration = this.match('{') ? this.parseObjectInitializer() :\n\t this.match('[') ? this.parseArrayInitializer() : this.parseAssignmentExpression();\n\t this.consumeSemicolon();\n\t exportDeclaration = this.finalize(node, new Node.ExportDefaultDeclaration(declaration));\n\t }\n\t }\n\t else if (this.match('*')) {\n\t // export * from 'foo';\n\t this.nextToken();\n\t if (!this.matchContextualKeyword('from')) {\n\t var message = this.lookahead.value ? messages_1.Messages.UnexpectedToken : messages_1.Messages.MissingFromClause;\n\t this.throwError(message, this.lookahead.value);\n\t }\n\t this.nextToken();\n\t var src = this.parseModuleSpecifier();\n\t this.consumeSemicolon();\n\t exportDeclaration = this.finalize(node, new Node.ExportAllDeclaration(src));\n\t }\n\t else if (this.lookahead.type === 4 /* Keyword */) {\n\t // export var f = 1;\n\t var declaration = void 0;\n\t switch (this.lookahead.value) {\n\t case 'let':\n\t case 'const':\n\t declaration = this.parseLexicalDeclaration({ inFor: false });\n\t break;\n\t case 'var':\n\t case 'class':\n\t case 'function':\n\t declaration = this.parseStatementListItem();\n\t break;\n\t default:\n\t this.throwUnexpectedToken(this.lookahead);\n\t }\n\t exportDeclaration = this.finalize(node, new Node.ExportNamedDeclaration(declaration, [], null));\n\t }\n\t else if (this.matchAsyncFunction()) {\n\t var declaration = this.parseFunctionDeclaration();\n\t exportDeclaration = this.finalize(node, new Node.ExportNamedDeclaration(declaration, [], null));\n\t }\n\t else {\n\t var specifiers = [];\n\t var source = null;\n\t var isExportFromIdentifier = false;\n\t this.expect('{');\n\t while (!this.match('}')) {\n\t isExportFromIdentifier = isExportFromIdentifier || this.matchKeyword('default');\n\t specifiers.push(this.parseExportSpecifier());\n\t if (!this.match('}')) {\n\t this.expect(',');\n\t }\n\t }\n\t this.expect('}');\n\t if (this.matchContextualKeyword('from')) {\n\t // export {default} from 'foo';\n\t // export {foo} from 'foo';\n\t this.nextToken();\n\t source = this.parseModuleSpecifier();\n\t this.consumeSemicolon();\n\t }\n\t else if (isExportFromIdentifier) {\n\t // export {default}; // missing fromClause\n\t var message = this.lookahead.value ? messages_1.Messages.UnexpectedToken : messages_1.Messages.MissingFromClause;\n\t this.throwError(message, this.lookahead.value);\n\t }\n\t else {\n\t // export {foo};\n\t this.consumeSemicolon();\n\t }\n\t exportDeclaration = this.finalize(node, new Node.ExportNamedDeclaration(null, specifiers, source));\n\t }\n\t return exportDeclaration;\n\t };\n\t return Parser;\n\t}());\n\texports.Parser = Parser;\n\n\n/***/ },\n/* 9 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\t// Ensure the condition is true, otherwise throw an error.\n\t// This is only to have a better contract semantic, i.e. another safety net\n\t// to catch a logic error. The condition shall be fulfilled in normal case.\n\t// Do NOT use this to enforce a certain condition on any user input.\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tfunction assert(condition, message) {\n\t /* istanbul ignore if */\n\t if (!condition) {\n\t throw new Error('ASSERT: ' + message);\n\t }\n\t}\n\texports.assert = assert;\n\n\n/***/ },\n/* 10 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\t/* tslint:disable:max-classes-per-file */\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar ErrorHandler = (function () {\n\t function ErrorHandler() {\n\t this.errors = [];\n\t this.tolerant = false;\n\t }\n\t ErrorHandler.prototype.recordError = function (error) {\n\t this.errors.push(error);\n\t };\n\t ErrorHandler.prototype.tolerate = function (error) {\n\t if (this.tolerant) {\n\t this.recordError(error);\n\t }\n\t else {\n\t throw error;\n\t }\n\t };\n\t ErrorHandler.prototype.constructError = function (msg, column) {\n\t var error = new Error(msg);\n\t try {\n\t throw error;\n\t }\n\t catch (base) {\n\t /* istanbul ignore else */\n\t if (Object.create && Object.defineProperty) {\n\t error = Object.create(base);\n\t Object.defineProperty(error, 'column', { value: column });\n\t }\n\t }\n\t /* istanbul ignore next */\n\t return error;\n\t };\n\t ErrorHandler.prototype.createError = function (index, line, col, description) {\n\t var msg = 'Line ' + line + ': ' + description;\n\t var error = this.constructError(msg, col);\n\t error.index = index;\n\t error.lineNumber = line;\n\t error.description = description;\n\t return error;\n\t };\n\t ErrorHandler.prototype.throwError = function (index, line, col, description) {\n\t throw this.createError(index, line, col, description);\n\t };\n\t ErrorHandler.prototype.tolerateError = function (index, line, col, description) {\n\t var error = this.createError(index, line, col, description);\n\t if (this.tolerant) {\n\t this.recordError(error);\n\t }\n\t else {\n\t throw error;\n\t }\n\t };\n\t return ErrorHandler;\n\t}());\n\texports.ErrorHandler = ErrorHandler;\n\n\n/***/ },\n/* 11 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\t// Error messages should be identical to V8.\n\texports.Messages = {\n\t BadGetterArity: 'Getter must not have any formal parameters',\n\t BadSetterArity: 'Setter must have exactly one formal parameter',\n\t BadSetterRestParameter: 'Setter function argument must not be a rest parameter',\n\t ConstructorIsAsync: 'Class constructor may not be an async method',\n\t ConstructorSpecialMethod: 'Class constructor may not be an accessor',\n\t DeclarationMissingInitializer: 'Missing initializer in %0 declaration',\n\t DefaultRestParameter: 'Unexpected token =',\n\t DuplicateBinding: 'Duplicate binding %0',\n\t DuplicateConstructor: 'A class may only have one constructor',\n\t DuplicateProtoProperty: 'Duplicate __proto__ fields are not allowed in object literals',\n\t ForInOfLoopInitializer: '%0 loop variable declaration may not have an initializer',\n\t GeneratorInLegacyContext: 'Generator declarations are not allowed in legacy contexts',\n\t IllegalBreak: 'Illegal break statement',\n\t IllegalContinue: 'Illegal continue statement',\n\t IllegalExportDeclaration: 'Unexpected token',\n\t IllegalImportDeclaration: 'Unexpected token',\n\t IllegalLanguageModeDirective: 'Illegal \\'use strict\\' directive in function with non-simple parameter list',\n\t IllegalReturn: 'Illegal return statement',\n\t InvalidEscapedReservedWord: 'Keyword must not contain escaped characters',\n\t InvalidHexEscapeSequence: 'Invalid hexadecimal escape sequence',\n\t InvalidLHSInAssignment: 'Invalid left-hand side in assignment',\n\t InvalidLHSInForIn: 'Invalid left-hand side in for-in',\n\t InvalidLHSInForLoop: 'Invalid left-hand side in for-loop',\n\t InvalidModuleSpecifier: 'Unexpected token',\n\t InvalidRegExp: 'Invalid regular expression',\n\t LetInLexicalBinding: 'let is disallowed as a lexically bound name',\n\t MissingFromClause: 'Unexpected token',\n\t MultipleDefaultsInSwitch: 'More than one default clause in switch statement',\n\t NewlineAfterThrow: 'Illegal newline after throw',\n\t NoAsAfterImportNamespace: 'Unexpected token',\n\t NoCatchOrFinally: 'Missing catch or finally after try',\n\t ParameterAfterRestParameter: 'Rest parameter must be last formal parameter',\n\t Redeclaration: '%0 \\'%1\\' has already been declared',\n\t StaticPrototype: 'Classes may not have static property named prototype',\n\t StrictCatchVariable: 'Catch variable may not be eval or arguments in strict mode',\n\t StrictDelete: 'Delete of an unqualified identifier in strict mode.',\n\t StrictFunction: 'In strict mode code, functions can only be declared at top level or inside a block',\n\t StrictFunctionName: 'Function name may not be eval or arguments in strict mode',\n\t StrictLHSAssignment: 'Assignment to eval or arguments is not allowed in strict mode',\n\t StrictLHSPostfix: 'Postfix increment/decrement may not have eval or arguments operand in strict mode',\n\t StrictLHSPrefix: 'Prefix increment/decrement may not have eval or arguments operand in strict mode',\n\t StrictModeWith: 'Strict mode code may not include a with statement',\n\t StrictOctalLiteral: 'Octal literals are not allowed in strict mode.',\n\t StrictParamDupe: 'Strict mode function may not have duplicate parameter names',\n\t StrictParamName: 'Parameter name eval or arguments is not allowed in strict mode',\n\t StrictReservedWord: 'Use of future reserved word in strict mode',\n\t StrictVarName: 'Variable name may not be eval or arguments in strict mode',\n\t TemplateOctalLiteral: 'Octal literals are not allowed in template strings.',\n\t UnexpectedEOS: 'Unexpected end of input',\n\t UnexpectedIdentifier: 'Unexpected identifier',\n\t UnexpectedNumber: 'Unexpected number',\n\t UnexpectedReserved: 'Unexpected reserved word',\n\t UnexpectedString: 'Unexpected string',\n\t UnexpectedTemplate: 'Unexpected quasi %0',\n\t UnexpectedToken: 'Unexpected token %0',\n\t UnexpectedTokenIllegal: 'Unexpected token ILLEGAL',\n\t UnknownLabel: 'Undefined label \\'%0\\'',\n\t UnterminatedRegExp: 'Invalid regular expression: missing /'\n\t};\n\n\n/***/ },\n/* 12 */\n/***/ function(module, exports, __nested_webpack_require_226595__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar assert_1 = __nested_webpack_require_226595__(9);\n\tvar character_1 = __nested_webpack_require_226595__(4);\n\tvar messages_1 = __nested_webpack_require_226595__(11);\n\tfunction hexValue(ch) {\n\t return '0123456789abcdef'.indexOf(ch.toLowerCase());\n\t}\n\tfunction octalValue(ch) {\n\t return '01234567'.indexOf(ch);\n\t}\n\tvar Scanner = (function () {\n\t function Scanner(code, handler) {\n\t this.source = code;\n\t this.errorHandler = handler;\n\t this.trackComment = false;\n\t this.isModule = false;\n\t this.length = code.length;\n\t this.index = 0;\n\t this.lineNumber = (code.length > 0) ? 1 : 0;\n\t this.lineStart = 0;\n\t this.curlyStack = [];\n\t }\n\t Scanner.prototype.saveState = function () {\n\t return {\n\t index: this.index,\n\t lineNumber: this.lineNumber,\n\t lineStart: this.lineStart\n\t };\n\t };\n\t Scanner.prototype.restoreState = function (state) {\n\t this.index = state.index;\n\t this.lineNumber = state.lineNumber;\n\t this.lineStart = state.lineStart;\n\t };\n\t Scanner.prototype.eof = function () {\n\t return this.index >= this.length;\n\t };\n\t Scanner.prototype.throwUnexpectedToken = function (message) {\n\t if (message === void 0) { message = messages_1.Messages.UnexpectedTokenIllegal; }\n\t return this.errorHandler.throwError(this.index, this.lineNumber, this.index - this.lineStart + 1, message);\n\t };\n\t Scanner.prototype.tolerateUnexpectedToken = function (message) {\n\t if (message === void 0) { message = messages_1.Messages.UnexpectedTokenIllegal; }\n\t this.errorHandler.tolerateError(this.index, this.lineNumber, this.index - this.lineStart + 1, message);\n\t };\n\t // https://tc39.github.io/ecma262/#sec-comments\n\t Scanner.prototype.skipSingleLineComment = function (offset) {\n\t var comments = [];\n\t var start, loc;\n\t if (this.trackComment) {\n\t comments = [];\n\t start = this.index - offset;\n\t loc = {\n\t start: {\n\t line: this.lineNumber,\n\t column: this.index - this.lineStart - offset\n\t },\n\t end: {}\n\t };\n\t }\n\t while (!this.eof()) {\n\t var ch = this.source.charCodeAt(this.index);\n\t ++this.index;\n\t if (character_1.Character.isLineTerminator(ch)) {\n\t if (this.trackComment) {\n\t loc.end = {\n\t line: this.lineNumber,\n\t column: this.index - this.lineStart - 1\n\t };\n\t var entry = {\n\t multiLine: false,\n\t slice: [start + offset, this.index - 1],\n\t range: [start, this.index - 1],\n\t loc: loc\n\t };\n\t comments.push(entry);\n\t }\n\t if (ch === 13 && this.source.charCodeAt(this.index) === 10) {\n\t ++this.index;\n\t }\n\t ++this.lineNumber;\n\t this.lineStart = this.index;\n\t return comments;\n\t }\n\t }\n\t if (this.trackComment) {\n\t loc.end = {\n\t line: this.lineNumber,\n\t column: this.index - this.lineStart\n\t };\n\t var entry = {\n\t multiLine: false,\n\t slice: [start + offset, this.index],\n\t range: [start, this.index],\n\t loc: loc\n\t };\n\t comments.push(entry);\n\t }\n\t return comments;\n\t };\n\t Scanner.prototype.skipMultiLineComment = function () {\n\t var comments = [];\n\t var start, loc;\n\t if (this.trackComment) {\n\t comments = [];\n\t start = this.index - 2;\n\t loc = {\n\t start: {\n\t line: this.lineNumber,\n\t column: this.index - this.lineStart - 2\n\t },\n\t end: {}\n\t };\n\t }\n\t while (!this.eof()) {\n\t var ch = this.source.charCodeAt(this.index);\n\t if (character_1.Character.isLineTerminator(ch)) {\n\t if (ch === 0x0D && this.source.charCodeAt(this.index + 1) === 0x0A) {\n\t ++this.index;\n\t }\n\t ++this.lineNumber;\n\t ++this.index;\n\t this.lineStart = this.index;\n\t }\n\t else if (ch === 0x2A) {\n\t // Block comment ends with '*/'.\n\t if (this.source.charCodeAt(this.index + 1) === 0x2F) {\n\t this.index += 2;\n\t if (this.trackComment) {\n\t loc.end = {\n\t line: this.lineNumber,\n\t column: this.index - this.lineStart\n\t };\n\t var entry = {\n\t multiLine: true,\n\t slice: [start + 2, this.index - 2],\n\t range: [start, this.index],\n\t loc: loc\n\t };\n\t comments.push(entry);\n\t }\n\t return comments;\n\t }\n\t ++this.index;\n\t }\n\t else {\n\t ++this.index;\n\t }\n\t }\n\t // Ran off the end of the file - the whole thing is a comment\n\t if (this.trackComment) {\n\t loc.end = {\n\t line: this.lineNumber,\n\t column: this.index - this.lineStart\n\t };\n\t var entry = {\n\t multiLine: true,\n\t slice: [start + 2, this.index],\n\t range: [start, this.index],\n\t loc: loc\n\t };\n\t comments.push(entry);\n\t }\n\t this.tolerateUnexpectedToken();\n\t return comments;\n\t };\n\t Scanner.prototype.scanComments = function () {\n\t var comments;\n\t if (this.trackComment) {\n\t comments = [];\n\t }\n\t var start = (this.index === 0);\n\t while (!this.eof()) {\n\t var ch = this.source.charCodeAt(this.index);\n\t if (character_1.Character.isWhiteSpace(ch)) {\n\t ++this.index;\n\t }\n\t else if (character_1.Character.isLineTerminator(ch)) {\n\t ++this.index;\n\t if (ch === 0x0D && this.source.charCodeAt(this.index) === 0x0A) {\n\t ++this.index;\n\t }\n\t ++this.lineNumber;\n\t this.lineStart = this.index;\n\t start = true;\n\t }\n\t else if (ch === 0x2F) {\n\t ch = this.source.charCodeAt(this.index + 1);\n\t if (ch === 0x2F) {\n\t this.index += 2;\n\t var comment = this.skipSingleLineComment(2);\n\t if (this.trackComment) {\n\t comments = comments.concat(comment);\n\t }\n\t start = true;\n\t }\n\t else if (ch === 0x2A) {\n\t this.index += 2;\n\t var comment = this.skipMultiLineComment();\n\t if (this.trackComment) {\n\t comments = comments.concat(comment);\n\t }\n\t }\n\t else {\n\t break;\n\t }\n\t }\n\t else if (start && ch === 0x2D) {\n\t // U+003E is '>'\n\t if ((this.source.charCodeAt(this.index + 1) === 0x2D) && (this.source.charCodeAt(this.index + 2) === 0x3E)) {\n\t // '--\x3e' is a single-line comment\n\t this.index += 3;\n\t var comment = this.skipSingleLineComment(3);\n\t if (this.trackComment) {\n\t comments = comments.concat(comment);\n\t }\n\t }\n\t else {\n\t break;\n\t }\n\t }\n\t else if (ch === 0x3C && !this.isModule) {\n\t if (this.source.slice(this.index + 1, this.index + 4) === '!--') {\n\t this.index += 4; // `\x3c!--`\n\t var comment = this.skipSingleLineComment(4);\n\t if (this.trackComment) {\n\t comments = comments.concat(comment);\n\t }\n\t }\n\t else {\n\t break;\n\t }\n\t }\n\t else {\n\t break;\n\t }\n\t }\n\t return comments;\n\t };\n\t // https://tc39.github.io/ecma262/#sec-future-reserved-words\n\t Scanner.prototype.isFutureReservedWord = function (id) {\n\t switch (id) {\n\t case 'enum':\n\t case 'export':\n\t case 'import':\n\t case 'super':\n\t return true;\n\t default:\n\t return false;\n\t }\n\t };\n\t Scanner.prototype.isStrictModeReservedWord = function (id) {\n\t switch (id) {\n\t case 'implements':\n\t case 'interface':\n\t case 'package':\n\t case 'private':\n\t case 'protected':\n\t case 'public':\n\t case 'static':\n\t case 'yield':\n\t case 'let':\n\t return true;\n\t default:\n\t return false;\n\t }\n\t };\n\t Scanner.prototype.isRestrictedWord = function (id) {\n\t return id === 'eval' || id === 'arguments';\n\t };\n\t // https://tc39.github.io/ecma262/#sec-keywords\n\t Scanner.prototype.isKeyword = function (id) {\n\t switch (id.length) {\n\t case 2:\n\t return (id === 'if') || (id === 'in') || (id === 'do');\n\t case 3:\n\t return (id === 'var') || (id === 'for') || (id === 'new') ||\n\t (id === 'try') || (id === 'let');\n\t case 4:\n\t return (id === 'this') || (id === 'else') || (id === 'case') ||\n\t (id === 'void') || (id === 'with') || (id === 'enum');\n\t case 5:\n\t return (id === 'while') || (id === 'break') || (id === 'catch') ||\n\t (id === 'throw') || (id === 'const') || (id === 'yield') ||\n\t (id === 'class') || (id === 'super');\n\t case 6:\n\t return (id === 'return') || (id === 'typeof') || (id === 'delete') ||\n\t (id === 'switch') || (id === 'export') || (id === 'import');\n\t case 7:\n\t return (id === 'default') || (id === 'finally') || (id === 'extends');\n\t case 8:\n\t return (id === 'function') || (id === 'continue') || (id === 'debugger');\n\t case 10:\n\t return (id === 'instanceof');\n\t default:\n\t return false;\n\t }\n\t };\n\t Scanner.prototype.codePointAt = function (i) {\n\t var cp = this.source.charCodeAt(i);\n\t if (cp >= 0xD800 && cp <= 0xDBFF) {\n\t var second = this.source.charCodeAt(i + 1);\n\t if (second >= 0xDC00 && second <= 0xDFFF) {\n\t var first = cp;\n\t cp = (first - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n\t }\n\t }\n\t return cp;\n\t };\n\t Scanner.prototype.scanHexEscape = function (prefix) {\n\t var len = (prefix === 'u') ? 4 : 2;\n\t var code = 0;\n\t for (var i = 0; i < len; ++i) {\n\t if (!this.eof() && character_1.Character.isHexDigit(this.source.charCodeAt(this.index))) {\n\t code = code * 16 + hexValue(this.source[this.index++]);\n\t }\n\t else {\n\t return null;\n\t }\n\t }\n\t return String.fromCharCode(code);\n\t };\n\t Scanner.prototype.scanUnicodeCodePointEscape = function () {\n\t var ch = this.source[this.index];\n\t var code = 0;\n\t // At least, one hex digit is required.\n\t if (ch === '}') {\n\t this.throwUnexpectedToken();\n\t }\n\t while (!this.eof()) {\n\t ch = this.source[this.index++];\n\t if (!character_1.Character.isHexDigit(ch.charCodeAt(0))) {\n\t break;\n\t }\n\t code = code * 16 + hexValue(ch);\n\t }\n\t if (code > 0x10FFFF || ch !== '}') {\n\t this.throwUnexpectedToken();\n\t }\n\t return character_1.Character.fromCodePoint(code);\n\t };\n\t Scanner.prototype.getIdentifier = function () {\n\t var start = this.index++;\n\t while (!this.eof()) {\n\t var ch = this.source.charCodeAt(this.index);\n\t if (ch === 0x5C) {\n\t // Blackslash (U+005C) marks Unicode escape sequence.\n\t this.index = start;\n\t return this.getComplexIdentifier();\n\t }\n\t else if (ch >= 0xD800 && ch < 0xDFFF) {\n\t // Need to handle surrogate pairs.\n\t this.index = start;\n\t return this.getComplexIdentifier();\n\t }\n\t if (character_1.Character.isIdentifierPart(ch)) {\n\t ++this.index;\n\t }\n\t else {\n\t break;\n\t }\n\t }\n\t return this.source.slice(start, this.index);\n\t };\n\t Scanner.prototype.getComplexIdentifier = function () {\n\t var cp = this.codePointAt(this.index);\n\t var id = character_1.Character.fromCodePoint(cp);\n\t this.index += id.length;\n\t // '\\u' (U+005C, U+0075) denotes an escaped character.\n\t var ch;\n\t if (cp === 0x5C) {\n\t if (this.source.charCodeAt(this.index) !== 0x75) {\n\t this.throwUnexpectedToken();\n\t }\n\t ++this.index;\n\t if (this.source[this.index] === '{') {\n\t ++this.index;\n\t ch = this.scanUnicodeCodePointEscape();\n\t }\n\t else {\n\t ch = this.scanHexEscape('u');\n\t if (ch === null || ch === '\\\\' || !character_1.Character.isIdentifierStart(ch.charCodeAt(0))) {\n\t this.throwUnexpectedToken();\n\t }\n\t }\n\t id = ch;\n\t }\n\t while (!this.eof()) {\n\t cp = this.codePointAt(this.index);\n\t if (!character_1.Character.isIdentifierPart(cp)) {\n\t break;\n\t }\n\t ch = character_1.Character.fromCodePoint(cp);\n\t id += ch;\n\t this.index += ch.length;\n\t // '\\u' (U+005C, U+0075) denotes an escaped character.\n\t if (cp === 0x5C) {\n\t id = id.substr(0, id.length - 1);\n\t if (this.source.charCodeAt(this.index) !== 0x75) {\n\t this.throwUnexpectedToken();\n\t }\n\t ++this.index;\n\t if (this.source[this.index] === '{') {\n\t ++this.index;\n\t ch = this.scanUnicodeCodePointEscape();\n\t }\n\t else {\n\t ch = this.scanHexEscape('u');\n\t if (ch === null || ch === '\\\\' || !character_1.Character.isIdentifierPart(ch.charCodeAt(0))) {\n\t this.throwUnexpectedToken();\n\t }\n\t }\n\t id += ch;\n\t }\n\t }\n\t return id;\n\t };\n\t Scanner.prototype.octalToDecimal = function (ch) {\n\t // \\0 is not octal escape sequence\n\t var octal = (ch !== '0');\n\t var code = octalValue(ch);\n\t if (!this.eof() && character_1.Character.isOctalDigit(this.source.charCodeAt(this.index))) {\n\t octal = true;\n\t code = code * 8 + octalValue(this.source[this.index++]);\n\t // 3 digits are only allowed when string starts\n\t // with 0, 1, 2, 3\n\t if ('0123'.indexOf(ch) >= 0 && !this.eof() && character_1.Character.isOctalDigit(this.source.charCodeAt(this.index))) {\n\t code = code * 8 + octalValue(this.source[this.index++]);\n\t }\n\t }\n\t return {\n\t code: code,\n\t octal: octal\n\t };\n\t };\n\t // https://tc39.github.io/ecma262/#sec-names-and-keywords\n\t Scanner.prototype.scanIdentifier = function () {\n\t var type;\n\t var start = this.index;\n\t // Backslash (U+005C) starts an escaped character.\n\t var id = (this.source.charCodeAt(start) === 0x5C) ? this.getComplexIdentifier() : this.getIdentifier();\n\t // There is no keyword or literal with only one character.\n\t // Thus, it must be an identifier.\n\t if (id.length === 1) {\n\t type = 3 /* Identifier */;\n\t }\n\t else if (this.isKeyword(id)) {\n\t type = 4 /* Keyword */;\n\t }\n\t else if (id === 'null') {\n\t type = 5 /* NullLiteral */;\n\t }\n\t else if (id === 'true' || id === 'false') {\n\t type = 1 /* BooleanLiteral */;\n\t }\n\t else {\n\t type = 3 /* Identifier */;\n\t }\n\t if (type !== 3 /* Identifier */ && (start + id.length !== this.index)) {\n\t var restore = this.index;\n\t this.index = start;\n\t this.tolerateUnexpectedToken(messages_1.Messages.InvalidEscapedReservedWord);\n\t this.index = restore;\n\t }\n\t return {\n\t type: type,\n\t value: id,\n\t lineNumber: this.lineNumber,\n\t lineStart: this.lineStart,\n\t start: start,\n\t end: this.index\n\t };\n\t };\n\t // https://tc39.github.io/ecma262/#sec-punctuators\n\t Scanner.prototype.scanPunctuator = function () {\n\t var start = this.index;\n\t // Check for most common single-character punctuators.\n\t var str = this.source[this.index];\n\t switch (str) {\n\t case '(':\n\t case '{':\n\t if (str === '{') {\n\t this.curlyStack.push('{');\n\t }\n\t ++this.index;\n\t break;\n\t case '.':\n\t ++this.index;\n\t if (this.source[this.index] === '.' && this.source[this.index + 1] === '.') {\n\t // Spread operator: ...\n\t this.index += 2;\n\t str = '...';\n\t }\n\t break;\n\t case '}':\n\t ++this.index;\n\t this.curlyStack.pop();\n\t break;\n\t case ')':\n\t case ';':\n\t case ',':\n\t case '[':\n\t case ']':\n\t case ':':\n\t case '?':\n\t case '~':\n\t ++this.index;\n\t break;\n\t default:\n\t // 4-character punctuator.\n\t str = this.source.substr(this.index, 4);\n\t if (str === '>>>=') {\n\t this.index += 4;\n\t }\n\t else {\n\t // 3-character punctuators.\n\t str = str.substr(0, 3);\n\t if (str === '===' || str === '!==' || str === '>>>' ||\n\t str === '<<=' || str === '>>=' || str === '**=') {\n\t this.index += 3;\n\t }\n\t else {\n\t // 2-character punctuators.\n\t str = str.substr(0, 2);\n\t if (str === '&&' || str === '||' || str === '==' || str === '!=' ||\n\t str === '+=' || str === '-=' || str === '*=' || str === '/=' ||\n\t str === '++' || str === '--' || str === '<<' || str === '>>' ||\n\t str === '&=' || str === '|=' || str === '^=' || str === '%=' ||\n\t str === '<=' || str === '>=' || str === '=>' || str === '**') {\n\t this.index += 2;\n\t }\n\t else {\n\t // 1-character punctuators.\n\t str = this.source[this.index];\n\t if ('<>=!+-*%&|^/'.indexOf(str) >= 0) {\n\t ++this.index;\n\t }\n\t }\n\t }\n\t }\n\t }\n\t if (this.index === start) {\n\t this.throwUnexpectedToken();\n\t }\n\t return {\n\t type: 7 /* Punctuator */,\n\t value: str,\n\t lineNumber: this.lineNumber,\n\t lineStart: this.lineStart,\n\t start: start,\n\t end: this.index\n\t };\n\t };\n\t // https://tc39.github.io/ecma262/#sec-literals-numeric-literals\n\t Scanner.prototype.scanHexLiteral = function (start) {\n\t var num = '';\n\t while (!this.eof()) {\n\t if (!character_1.Character.isHexDigit(this.source.charCodeAt(this.index))) {\n\t break;\n\t }\n\t num += this.source[this.index++];\n\t }\n\t if (num.length === 0) {\n\t this.throwUnexpectedToken();\n\t }\n\t if (character_1.Character.isIdentifierStart(this.source.charCodeAt(this.index))) {\n\t this.throwUnexpectedToken();\n\t }\n\t return {\n\t type: 6 /* NumericLiteral */,\n\t value: parseInt('0x' + num, 16),\n\t lineNumber: this.lineNumber,\n\t lineStart: this.lineStart,\n\t start: start,\n\t end: this.index\n\t };\n\t };\n\t Scanner.prototype.scanBinaryLiteral = function (start) {\n\t var num = '';\n\t var ch;\n\t while (!this.eof()) {\n\t ch = this.source[this.index];\n\t if (ch !== '0' && ch !== '1') {\n\t break;\n\t }\n\t num += this.source[this.index++];\n\t }\n\t if (num.length === 0) {\n\t // only 0b or 0B\n\t this.throwUnexpectedToken();\n\t }\n\t if (!this.eof()) {\n\t ch = this.source.charCodeAt(this.index);\n\t /* istanbul ignore else */\n\t if (character_1.Character.isIdentifierStart(ch) || character_1.Character.isDecimalDigit(ch)) {\n\t this.throwUnexpectedToken();\n\t }\n\t }\n\t return {\n\t type: 6 /* NumericLiteral */,\n\t value: parseInt(num, 2),\n\t lineNumber: this.lineNumber,\n\t lineStart: this.lineStart,\n\t start: start,\n\t end: this.index\n\t };\n\t };\n\t Scanner.prototype.scanOctalLiteral = function (prefix, start) {\n\t var num = '';\n\t var octal = false;\n\t if (character_1.Character.isOctalDigit(prefix.charCodeAt(0))) {\n\t octal = true;\n\t num = '0' + this.source[this.index++];\n\t }\n\t else {\n\t ++this.index;\n\t }\n\t while (!this.eof()) {\n\t if (!character_1.Character.isOctalDigit(this.source.charCodeAt(this.index))) {\n\t break;\n\t }\n\t num += this.source[this.index++];\n\t }\n\t if (!octal && num.length === 0) {\n\t // only 0o or 0O\n\t this.throwUnexpectedToken();\n\t }\n\t if (character_1.Character.isIdentifierStart(this.source.charCodeAt(this.index)) || character_1.Character.isDecimalDigit(this.source.charCodeAt(this.index))) {\n\t this.throwUnexpectedToken();\n\t }\n\t return {\n\t type: 6 /* NumericLiteral */,\n\t value: parseInt(num, 8),\n\t octal: octal,\n\t lineNumber: this.lineNumber,\n\t lineStart: this.lineStart,\n\t start: start,\n\t end: this.index\n\t };\n\t };\n\t Scanner.prototype.isImplicitOctalLiteral = function () {\n\t // Implicit octal, unless there is a non-octal digit.\n\t // (Annex B.1.1 on Numeric Literals)\n\t for (var i = this.index + 1; i < this.length; ++i) {\n\t var ch = this.source[i];\n\t if (ch === '8' || ch === '9') {\n\t return false;\n\t }\n\t if (!character_1.Character.isOctalDigit(ch.charCodeAt(0))) {\n\t return true;\n\t }\n\t }\n\t return true;\n\t };\n\t Scanner.prototype.scanNumericLiteral = function () {\n\t var start = this.index;\n\t var ch = this.source[start];\n\t assert_1.assert(character_1.Character.isDecimalDigit(ch.charCodeAt(0)) || (ch === '.'), 'Numeric literal must start with a decimal digit or a decimal point');\n\t var num = '';\n\t if (ch !== '.') {\n\t num = this.source[this.index++];\n\t ch = this.source[this.index];\n\t // Hex number starts with '0x'.\n\t // Octal number starts with '0'.\n\t // Octal number in ES6 starts with '0o'.\n\t // Binary number in ES6 starts with '0b'.\n\t if (num === '0') {\n\t if (ch === 'x' || ch === 'X') {\n\t ++this.index;\n\t return this.scanHexLiteral(start);\n\t }\n\t if (ch === 'b' || ch === 'B') {\n\t ++this.index;\n\t return this.scanBinaryLiteral(start);\n\t }\n\t if (ch === 'o' || ch === 'O') {\n\t return this.scanOctalLiteral(ch, start);\n\t }\n\t if (ch && character_1.Character.isOctalDigit(ch.charCodeAt(0))) {\n\t if (this.isImplicitOctalLiteral()) {\n\t return this.scanOctalLiteral(ch, start);\n\t }\n\t }\n\t }\n\t while (character_1.Character.isDecimalDigit(this.source.charCodeAt(this.index))) {\n\t num += this.source[this.index++];\n\t }\n\t ch = this.source[this.index];\n\t }\n\t if (ch === '.') {\n\t num += this.source[this.index++];\n\t while (character_1.Character.isDecimalDigit(this.source.charCodeAt(this.index))) {\n\t num += this.source[this.index++];\n\t }\n\t ch = this.source[this.index];\n\t }\n\t if (ch === 'e' || ch === 'E') {\n\t num += this.source[this.index++];\n\t ch = this.source[this.index];\n\t if (ch === '+' || ch === '-') {\n\t num += this.source[this.index++];\n\t }\n\t if (character_1.Character.isDecimalDigit(this.source.charCodeAt(this.index))) {\n\t while (character_1.Character.isDecimalDigit(this.source.charCodeAt(this.index))) {\n\t num += this.source[this.index++];\n\t }\n\t }\n\t else {\n\t this.throwUnexpectedToken();\n\t }\n\t }\n\t if (character_1.Character.isIdentifierStart(this.source.charCodeAt(this.index))) {\n\t this.throwUnexpectedToken();\n\t }\n\t return {\n\t type: 6 /* NumericLiteral */,\n\t value: parseFloat(num),\n\t lineNumber: this.lineNumber,\n\t lineStart: this.lineStart,\n\t start: start,\n\t end: this.index\n\t };\n\t };\n\t // https://tc39.github.io/ecma262/#sec-literals-string-literals\n\t Scanner.prototype.scanStringLiteral = function () {\n\t var start = this.index;\n\t var quote = this.source[start];\n\t assert_1.assert((quote === '\\'' || quote === '\"'), 'String literal must starts with a quote');\n\t ++this.index;\n\t var octal = false;\n\t var str = '';\n\t while (!this.eof()) {\n\t var ch = this.source[this.index++];\n\t if (ch === quote) {\n\t quote = '';\n\t break;\n\t }\n\t else if (ch === '\\\\') {\n\t ch = this.source[this.index++];\n\t if (!ch || !character_1.Character.isLineTerminator(ch.charCodeAt(0))) {\n\t switch (ch) {\n\t case 'u':\n\t if (this.source[this.index] === '{') {\n\t ++this.index;\n\t str += this.scanUnicodeCodePointEscape();\n\t }\n\t else {\n\t var unescaped_1 = this.scanHexEscape(ch);\n\t if (unescaped_1 === null) {\n\t this.throwUnexpectedToken();\n\t }\n\t str += unescaped_1;\n\t }\n\t break;\n\t case 'x':\n\t var unescaped = this.scanHexEscape(ch);\n\t if (unescaped === null) {\n\t this.throwUnexpectedToken(messages_1.Messages.InvalidHexEscapeSequence);\n\t }\n\t str += unescaped;\n\t break;\n\t case 'n':\n\t str += '\\n';\n\t break;\n\t case 'r':\n\t str += '\\r';\n\t break;\n\t case 't':\n\t str += '\\t';\n\t break;\n\t case 'b':\n\t str += '\\b';\n\t break;\n\t case 'f':\n\t str += '\\f';\n\t break;\n\t case 'v':\n\t str += '\\x0B';\n\t break;\n\t case '8':\n\t case '9':\n\t str += ch;\n\t this.tolerateUnexpectedToken();\n\t break;\n\t default:\n\t if (ch && character_1.Character.isOctalDigit(ch.charCodeAt(0))) {\n\t var octToDec = this.octalToDecimal(ch);\n\t octal = octToDec.octal || octal;\n\t str += String.fromCharCode(octToDec.code);\n\t }\n\t else {\n\t str += ch;\n\t }\n\t break;\n\t }\n\t }\n\t else {\n\t ++this.lineNumber;\n\t if (ch === '\\r' && this.source[this.index] === '\\n') {\n\t ++this.index;\n\t }\n\t this.lineStart = this.index;\n\t }\n\t }\n\t else if (character_1.Character.isLineTerminator(ch.charCodeAt(0))) {\n\t break;\n\t }\n\t else {\n\t str += ch;\n\t }\n\t }\n\t if (quote !== '') {\n\t this.index = start;\n\t this.throwUnexpectedToken();\n\t }\n\t return {\n\t type: 8 /* StringLiteral */,\n\t value: str,\n\t octal: octal,\n\t lineNumber: this.lineNumber,\n\t lineStart: this.lineStart,\n\t start: start,\n\t end: this.index\n\t };\n\t };\n\t // https://tc39.github.io/ecma262/#sec-template-literal-lexical-components\n\t Scanner.prototype.scanTemplate = function () {\n\t var cooked = '';\n\t var terminated = false;\n\t var start = this.index;\n\t var head = (this.source[start] === '`');\n\t var tail = false;\n\t var rawOffset = 2;\n\t ++this.index;\n\t while (!this.eof()) {\n\t var ch = this.source[this.index++];\n\t if (ch === '`') {\n\t rawOffset = 1;\n\t tail = true;\n\t terminated = true;\n\t break;\n\t }\n\t else if (ch === '$') {\n\t if (this.source[this.index] === '{') {\n\t this.curlyStack.push('${');\n\t ++this.index;\n\t terminated = true;\n\t break;\n\t }\n\t cooked += ch;\n\t }\n\t else if (ch === '\\\\') {\n\t ch = this.source[this.index++];\n\t if (!character_1.Character.isLineTerminator(ch.charCodeAt(0))) {\n\t switch (ch) {\n\t case 'n':\n\t cooked += '\\n';\n\t break;\n\t case 'r':\n\t cooked += '\\r';\n\t break;\n\t case 't':\n\t cooked += '\\t';\n\t break;\n\t case 'u':\n\t if (this.source[this.index] === '{') {\n\t ++this.index;\n\t cooked += this.scanUnicodeCodePointEscape();\n\t }\n\t else {\n\t var restore = this.index;\n\t var unescaped_2 = this.scanHexEscape(ch);\n\t if (unescaped_2 !== null) {\n\t cooked += unescaped_2;\n\t }\n\t else {\n\t this.index = restore;\n\t cooked += ch;\n\t }\n\t }\n\t break;\n\t case 'x':\n\t var unescaped = this.scanHexEscape(ch);\n\t if (unescaped === null) {\n\t this.throwUnexpectedToken(messages_1.Messages.InvalidHexEscapeSequence);\n\t }\n\t cooked += unescaped;\n\t break;\n\t case 'b':\n\t cooked += '\\b';\n\t break;\n\t case 'f':\n\t cooked += '\\f';\n\t break;\n\t case 'v':\n\t cooked += '\\v';\n\t break;\n\t default:\n\t if (ch === '0') {\n\t if (character_1.Character.isDecimalDigit(this.source.charCodeAt(this.index))) {\n\t // Illegal: \\01 \\02 and so on\n\t this.throwUnexpectedToken(messages_1.Messages.TemplateOctalLiteral);\n\t }\n\t cooked += '\\0';\n\t }\n\t else if (character_1.Character.isOctalDigit(ch.charCodeAt(0))) {\n\t // Illegal: \\1 \\2\n\t this.throwUnexpectedToken(messages_1.Messages.TemplateOctalLiteral);\n\t }\n\t else {\n\t cooked += ch;\n\t }\n\t break;\n\t }\n\t }\n\t else {\n\t ++this.lineNumber;\n\t if (ch === '\\r' && this.source[this.index] === '\\n') {\n\t ++this.index;\n\t }\n\t this.lineStart = this.index;\n\t }\n\t }\n\t else if (character_1.Character.isLineTerminator(ch.charCodeAt(0))) {\n\t ++this.lineNumber;\n\t if (ch === '\\r' && this.source[this.index] === '\\n') {\n\t ++this.index;\n\t }\n\t this.lineStart = this.index;\n\t cooked += '\\n';\n\t }\n\t else {\n\t cooked += ch;\n\t }\n\t }\n\t if (!terminated) {\n\t this.throwUnexpectedToken();\n\t }\n\t if (!head) {\n\t this.curlyStack.pop();\n\t }\n\t return {\n\t type: 10 /* Template */,\n\t value: this.source.slice(start + 1, this.index - rawOffset),\n\t cooked: cooked,\n\t head: head,\n\t tail: tail,\n\t lineNumber: this.lineNumber,\n\t lineStart: this.lineStart,\n\t start: start,\n\t end: this.index\n\t };\n\t };\n\t // https://tc39.github.io/ecma262/#sec-literals-regular-expression-literals\n\t Scanner.prototype.testRegExp = function (pattern, flags) {\n\t // The BMP character to use as a replacement for astral symbols when\n\t // translating an ES6 \"u\"-flagged pattern to an ES5-compatible\n\t // approximation.\n\t // Note: replacing with '\\uFFFF' enables false positives in unlikely\n\t // scenarios. For example, `[\\u{1044f}-\\u{10440}]` is an invalid\n\t // pattern that would not be detected by this substitution.\n\t var astralSubstitute = '\\uFFFF';\n\t var tmp = pattern;\n\t var self = this;\n\t if (flags.indexOf('u') >= 0) {\n\t tmp = tmp\n\t .replace(/\\\\u\\{([0-9a-fA-F]+)\\}|\\\\u([a-fA-F0-9]{4})/g, function ($0, $1, $2) {\n\t var codePoint = parseInt($1 || $2, 16);\n\t if (codePoint > 0x10FFFF) {\n\t self.throwUnexpectedToken(messages_1.Messages.InvalidRegExp);\n\t }\n\t if (codePoint <= 0xFFFF) {\n\t return String.fromCharCode(codePoint);\n\t }\n\t return astralSubstitute;\n\t })\n\t .replace(/[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g, astralSubstitute);\n\t }\n\t // First, detect invalid regular expressions.\n\t try {\n\t RegExp(tmp);\n\t }\n\t catch (e) {\n\t this.throwUnexpectedToken(messages_1.Messages.InvalidRegExp);\n\t }\n\t // Return a regular expression object for this pattern-flag pair, or\n\t // `null` in case the current environment doesn't support the flags it\n\t // uses.\n\t try {\n\t return new RegExp(pattern, flags);\n\t }\n\t catch (exception) {\n\t /* istanbul ignore next */\n\t return null;\n\t }\n\t };\n\t Scanner.prototype.scanRegExpBody = function () {\n\t var ch = this.source[this.index];\n\t assert_1.assert(ch === '/', 'Regular expression literal must start with a slash');\n\t var str = this.source[this.index++];\n\t var classMarker = false;\n\t var terminated = false;\n\t while (!this.eof()) {\n\t ch = this.source[this.index++];\n\t str += ch;\n\t if (ch === '\\\\') {\n\t ch = this.source[this.index++];\n\t // https://tc39.github.io/ecma262/#sec-literals-regular-expression-literals\n\t if (character_1.Character.isLineTerminator(ch.charCodeAt(0))) {\n\t this.throwUnexpectedToken(messages_1.Messages.UnterminatedRegExp);\n\t }\n\t str += ch;\n\t }\n\t else if (character_1.Character.isLineTerminator(ch.charCodeAt(0))) {\n\t this.throwUnexpectedToken(messages_1.Messages.UnterminatedRegExp);\n\t }\n\t else if (classMarker) {\n\t if (ch === ']') {\n\t classMarker = false;\n\t }\n\t }\n\t else {\n\t if (ch === '/') {\n\t terminated = true;\n\t break;\n\t }\n\t else if (ch === '[') {\n\t classMarker = true;\n\t }\n\t }\n\t }\n\t if (!terminated) {\n\t this.throwUnexpectedToken(messages_1.Messages.UnterminatedRegExp);\n\t }\n\t // Exclude leading and trailing slash.\n\t return str.substr(1, str.length - 2);\n\t };\n\t Scanner.prototype.scanRegExpFlags = function () {\n\t var str = '';\n\t var flags = '';\n\t while (!this.eof()) {\n\t var ch = this.source[this.index];\n\t if (!character_1.Character.isIdentifierPart(ch.charCodeAt(0))) {\n\t break;\n\t }\n\t ++this.index;\n\t if (ch === '\\\\' && !this.eof()) {\n\t ch = this.source[this.index];\n\t if (ch === 'u') {\n\t ++this.index;\n\t var restore = this.index;\n\t var char = this.scanHexEscape('u');\n\t if (char !== null) {\n\t flags += char;\n\t for (str += '\\\\u'; restore < this.index; ++restore) {\n\t str += this.source[restore];\n\t }\n\t }\n\t else {\n\t this.index = restore;\n\t flags += 'u';\n\t str += '\\\\u';\n\t }\n\t this.tolerateUnexpectedToken();\n\t }\n\t else {\n\t str += '\\\\';\n\t this.tolerateUnexpectedToken();\n\t }\n\t }\n\t else {\n\t flags += ch;\n\t str += ch;\n\t }\n\t }\n\t return flags;\n\t };\n\t Scanner.prototype.scanRegExp = function () {\n\t var start = this.index;\n\t var pattern = this.scanRegExpBody();\n\t var flags = this.scanRegExpFlags();\n\t var value = this.testRegExp(pattern, flags);\n\t return {\n\t type: 9 /* RegularExpression */,\n\t value: '',\n\t pattern: pattern,\n\t flags: flags,\n\t regex: value,\n\t lineNumber: this.lineNumber,\n\t lineStart: this.lineStart,\n\t start: start,\n\t end: this.index\n\t };\n\t };\n\t Scanner.prototype.lex = function () {\n\t if (this.eof()) {\n\t return {\n\t type: 2 /* EOF */,\n\t value: '',\n\t lineNumber: this.lineNumber,\n\t lineStart: this.lineStart,\n\t start: this.index,\n\t end: this.index\n\t };\n\t }\n\t var cp = this.source.charCodeAt(this.index);\n\t if (character_1.Character.isIdentifierStart(cp)) {\n\t return this.scanIdentifier();\n\t }\n\t // Very common: ( and ) and ;\n\t if (cp === 0x28 || cp === 0x29 || cp === 0x3B) {\n\t return this.scanPunctuator();\n\t }\n\t // String literal starts with single quote (U+0027) or double quote (U+0022).\n\t if (cp === 0x27 || cp === 0x22) {\n\t return this.scanStringLiteral();\n\t }\n\t // Dot (.) U+002E can also start a floating-point number, hence the need\n\t // to check the next character.\n\t if (cp === 0x2E) {\n\t if (character_1.Character.isDecimalDigit(this.source.charCodeAt(this.index + 1))) {\n\t return this.scanNumericLiteral();\n\t }\n\t return this.scanPunctuator();\n\t }\n\t if (character_1.Character.isDecimalDigit(cp)) {\n\t return this.scanNumericLiteral();\n\t }\n\t // Template literals start with ` (U+0060) for template head\n\t // or } (U+007D) for template middle or template tail.\n\t if (cp === 0x60 || (cp === 0x7D && this.curlyStack[this.curlyStack.length - 1] === '${')) {\n\t return this.scanTemplate();\n\t }\n\t // Possible identifier start in a surrogate pair.\n\t if (cp >= 0xD800 && cp < 0xDFFF) {\n\t if (character_1.Character.isIdentifierStart(this.codePointAt(this.index))) {\n\t return this.scanIdentifier();\n\t }\n\t }\n\t return this.scanPunctuator();\n\t };\n\t return Scanner;\n\t}());\n\texports.Scanner = Scanner;\n\n\n/***/ },\n/* 13 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\texports.TokenName = {};\n\texports.TokenName[1 /* BooleanLiteral */] = 'Boolean';\n\texports.TokenName[2 /* EOF */] = '';\n\texports.TokenName[3 /* Identifier */] = 'Identifier';\n\texports.TokenName[4 /* Keyword */] = 'Keyword';\n\texports.TokenName[5 /* NullLiteral */] = 'Null';\n\texports.TokenName[6 /* NumericLiteral */] = 'Numeric';\n\texports.TokenName[7 /* Punctuator */] = 'Punctuator';\n\texports.TokenName[8 /* StringLiteral */] = 'String';\n\texports.TokenName[9 /* RegularExpression */] = 'RegularExpression';\n\texports.TokenName[10 /* Template */] = 'Template';\n\n\n/***/ },\n/* 14 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\t// Generated by generate-xhtml-entities.js. DO NOT MODIFY!\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\texports.XHTMLEntities = {\n\t quot: '\\u0022',\n\t amp: '\\u0026',\n\t apos: '\\u0027',\n\t gt: '\\u003E',\n\t nbsp: '\\u00A0',\n\t iexcl: '\\u00A1',\n\t cent: '\\u00A2',\n\t pound: '\\u00A3',\n\t curren: '\\u00A4',\n\t yen: '\\u00A5',\n\t brvbar: '\\u00A6',\n\t sect: '\\u00A7',\n\t uml: '\\u00A8',\n\t copy: '\\u00A9',\n\t ordf: '\\u00AA',\n\t laquo: '\\u00AB',\n\t not: '\\u00AC',\n\t shy: '\\u00AD',\n\t reg: '\\u00AE',\n\t macr: '\\u00AF',\n\t deg: '\\u00B0',\n\t plusmn: '\\u00B1',\n\t sup2: '\\u00B2',\n\t sup3: '\\u00B3',\n\t acute: '\\u00B4',\n\t micro: '\\u00B5',\n\t para: '\\u00B6',\n\t middot: '\\u00B7',\n\t cedil: '\\u00B8',\n\t sup1: '\\u00B9',\n\t ordm: '\\u00BA',\n\t raquo: '\\u00BB',\n\t frac14: '\\u00BC',\n\t frac12: '\\u00BD',\n\t frac34: '\\u00BE',\n\t iquest: '\\u00BF',\n\t Agrave: '\\u00C0',\n\t Aacute: '\\u00C1',\n\t Acirc: '\\u00C2',\n\t Atilde: '\\u00C3',\n\t Auml: '\\u00C4',\n\t Aring: '\\u00C5',\n\t AElig: '\\u00C6',\n\t Ccedil: '\\u00C7',\n\t Egrave: '\\u00C8',\n\t Eacute: '\\u00C9',\n\t Ecirc: '\\u00CA',\n\t Euml: '\\u00CB',\n\t Igrave: '\\u00CC',\n\t Iacute: '\\u00CD',\n\t Icirc: '\\u00CE',\n\t Iuml: '\\u00CF',\n\t ETH: '\\u00D0',\n\t Ntilde: '\\u00D1',\n\t Ograve: '\\u00D2',\n\t Oacute: '\\u00D3',\n\t Ocirc: '\\u00D4',\n\t Otilde: '\\u00D5',\n\t Ouml: '\\u00D6',\n\t times: '\\u00D7',\n\t Oslash: '\\u00D8',\n\t Ugrave: '\\u00D9',\n\t Uacute: '\\u00DA',\n\t Ucirc: '\\u00DB',\n\t Uuml: '\\u00DC',\n\t Yacute: '\\u00DD',\n\t THORN: '\\u00DE',\n\t szlig: '\\u00DF',\n\t agrave: '\\u00E0',\n\t aacute: '\\u00E1',\n\t acirc: '\\u00E2',\n\t atilde: '\\u00E3',\n\t auml: '\\u00E4',\n\t aring: '\\u00E5',\n\t aelig: '\\u00E6',\n\t ccedil: '\\u00E7',\n\t egrave: '\\u00E8',\n\t eacute: '\\u00E9',\n\t ecirc: '\\u00EA',\n\t euml: '\\u00EB',\n\t igrave: '\\u00EC',\n\t iacute: '\\u00ED',\n\t icirc: '\\u00EE',\n\t iuml: '\\u00EF',\n\t eth: '\\u00F0',\n\t ntilde: '\\u00F1',\n\t ograve: '\\u00F2',\n\t oacute: '\\u00F3',\n\t ocirc: '\\u00F4',\n\t otilde: '\\u00F5',\n\t ouml: '\\u00F6',\n\t divide: '\\u00F7',\n\t oslash: '\\u00F8',\n\t ugrave: '\\u00F9',\n\t uacute: '\\u00FA',\n\t ucirc: '\\u00FB',\n\t uuml: '\\u00FC',\n\t yacute: '\\u00FD',\n\t thorn: '\\u00FE',\n\t yuml: '\\u00FF',\n\t OElig: '\\u0152',\n\t oelig: '\\u0153',\n\t Scaron: '\\u0160',\n\t scaron: '\\u0161',\n\t Yuml: '\\u0178',\n\t fnof: '\\u0192',\n\t circ: '\\u02C6',\n\t tilde: '\\u02DC',\n\t Alpha: '\\u0391',\n\t Beta: '\\u0392',\n\t Gamma: '\\u0393',\n\t Delta: '\\u0394',\n\t Epsilon: '\\u0395',\n\t Zeta: '\\u0396',\n\t Eta: '\\u0397',\n\t Theta: '\\u0398',\n\t Iota: '\\u0399',\n\t Kappa: '\\u039A',\n\t Lambda: '\\u039B',\n\t Mu: '\\u039C',\n\t Nu: '\\u039D',\n\t Xi: '\\u039E',\n\t Omicron: '\\u039F',\n\t Pi: '\\u03A0',\n\t Rho: '\\u03A1',\n\t Sigma: '\\u03A3',\n\t Tau: '\\u03A4',\n\t Upsilon: '\\u03A5',\n\t Phi: '\\u03A6',\n\t Chi: '\\u03A7',\n\t Psi: '\\u03A8',\n\t Omega: '\\u03A9',\n\t alpha: '\\u03B1',\n\t beta: '\\u03B2',\n\t gamma: '\\u03B3',\n\t delta: '\\u03B4',\n\t epsilon: '\\u03B5',\n\t zeta: '\\u03B6',\n\t eta: '\\u03B7',\n\t theta: '\\u03B8',\n\t iota: '\\u03B9',\n\t kappa: '\\u03BA',\n\t lambda: '\\u03BB',\n\t mu: '\\u03BC',\n\t nu: '\\u03BD',\n\t xi: '\\u03BE',\n\t omicron: '\\u03BF',\n\t pi: '\\u03C0',\n\t rho: '\\u03C1',\n\t sigmaf: '\\u03C2',\n\t sigma: '\\u03C3',\n\t tau: '\\u03C4',\n\t upsilon: '\\u03C5',\n\t phi: '\\u03C6',\n\t chi: '\\u03C7',\n\t psi: '\\u03C8',\n\t omega: '\\u03C9',\n\t thetasym: '\\u03D1',\n\t upsih: '\\u03D2',\n\t piv: '\\u03D6',\n\t ensp: '\\u2002',\n\t emsp: '\\u2003',\n\t thinsp: '\\u2009',\n\t zwnj: '\\u200C',\n\t zwj: '\\u200D',\n\t lrm: '\\u200E',\n\t rlm: '\\u200F',\n\t ndash: '\\u2013',\n\t mdash: '\\u2014',\n\t lsquo: '\\u2018',\n\t rsquo: '\\u2019',\n\t sbquo: '\\u201A',\n\t ldquo: '\\u201C',\n\t rdquo: '\\u201D',\n\t bdquo: '\\u201E',\n\t dagger: '\\u2020',\n\t Dagger: '\\u2021',\n\t bull: '\\u2022',\n\t hellip: '\\u2026',\n\t permil: '\\u2030',\n\t prime: '\\u2032',\n\t Prime: '\\u2033',\n\t lsaquo: '\\u2039',\n\t rsaquo: '\\u203A',\n\t oline: '\\u203E',\n\t frasl: '\\u2044',\n\t euro: '\\u20AC',\n\t image: '\\u2111',\n\t weierp: '\\u2118',\n\t real: '\\u211C',\n\t trade: '\\u2122',\n\t alefsym: '\\u2135',\n\t larr: '\\u2190',\n\t uarr: '\\u2191',\n\t rarr: '\\u2192',\n\t darr: '\\u2193',\n\t harr: '\\u2194',\n\t crarr: '\\u21B5',\n\t lArr: '\\u21D0',\n\t uArr: '\\u21D1',\n\t rArr: '\\u21D2',\n\t dArr: '\\u21D3',\n\t hArr: '\\u21D4',\n\t forall: '\\u2200',\n\t part: '\\u2202',\n\t exist: '\\u2203',\n\t empty: '\\u2205',\n\t nabla: '\\u2207',\n\t isin: '\\u2208',\n\t notin: '\\u2209',\n\t ni: '\\u220B',\n\t prod: '\\u220F',\n\t sum: '\\u2211',\n\t minus: '\\u2212',\n\t lowast: '\\u2217',\n\t radic: '\\u221A',\n\t prop: '\\u221D',\n\t infin: '\\u221E',\n\t ang: '\\u2220',\n\t and: '\\u2227',\n\t or: '\\u2228',\n\t cap: '\\u2229',\n\t cup: '\\u222A',\n\t int: '\\u222B',\n\t there4: '\\u2234',\n\t sim: '\\u223C',\n\t cong: '\\u2245',\n\t asymp: '\\u2248',\n\t ne: '\\u2260',\n\t equiv: '\\u2261',\n\t le: '\\u2264',\n\t ge: '\\u2265',\n\t sub: '\\u2282',\n\t sup: '\\u2283',\n\t nsub: '\\u2284',\n\t sube: '\\u2286',\n\t supe: '\\u2287',\n\t oplus: '\\u2295',\n\t otimes: '\\u2297',\n\t perp: '\\u22A5',\n\t sdot: '\\u22C5',\n\t lceil: '\\u2308',\n\t rceil: '\\u2309',\n\t lfloor: '\\u230A',\n\t rfloor: '\\u230B',\n\t loz: '\\u25CA',\n\t spades: '\\u2660',\n\t clubs: '\\u2663',\n\t hearts: '\\u2665',\n\t diams: '\\u2666',\n\t lang: '\\u27E8',\n\t rang: '\\u27E9'\n\t};\n\n\n/***/ },\n/* 15 */\n/***/ function(module, exports, __nested_webpack_require_277122__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar error_handler_1 = __nested_webpack_require_277122__(10);\n\tvar scanner_1 = __nested_webpack_require_277122__(12);\n\tvar token_1 = __nested_webpack_require_277122__(13);\n\tvar Reader = (function () {\n\t function Reader() {\n\t this.values = [];\n\t this.curly = this.paren = -1;\n\t }\n\t // A function following one of those tokens is an expression.\n\t Reader.prototype.beforeFunctionExpression = function (t) {\n\t return ['(', '{', '[', 'in', 'typeof', 'instanceof', 'new',\n\t 'return', 'case', 'delete', 'throw', 'void',\n\t // assignment operators\n\t '=', '+=', '-=', '*=', '**=', '/=', '%=', '<<=', '>>=', '>>>=',\n\t '&=', '|=', '^=', ',',\n\t // binary/unary operators\n\t '+', '-', '*', '**', '/', '%', '++', '--', '<<', '>>', '>>>', '&',\n\t '|', '^', '!', '~', '&&', '||', '?', ':', '===', '==', '>=',\n\t '<=', '<', '>', '!=', '!=='].indexOf(t) >= 0;\n\t };\n\t // Determine if forward slash (/) is an operator or part of a regular expression\n\t // https://github.com/mozilla/sweet.js/wiki/design\n\t Reader.prototype.isRegexStart = function () {\n\t var previous = this.values[this.values.length - 1];\n\t var regex = (previous !== null);\n\t switch (previous) {\n\t case 'this':\n\t case ']':\n\t regex = false;\n\t break;\n\t case ')':\n\t var keyword = this.values[this.paren - 1];\n\t regex = (keyword === 'if' || keyword === 'while' || keyword === 'for' || keyword === 'with');\n\t break;\n\t case '}':\n\t // Dividing a function by anything makes little sense,\n\t // but we have to check for that.\n\t regex = false;\n\t if (this.values[this.curly - 3] === 'function') {\n\t // Anonymous function, e.g. function(){} /42\n\t var check = this.values[this.curly - 4];\n\t regex = check ? !this.beforeFunctionExpression(check) : false;\n\t }\n\t else if (this.values[this.curly - 4] === 'function') {\n\t // Named function, e.g. function f(){} /42/\n\t var check = this.values[this.curly - 5];\n\t regex = check ? !this.beforeFunctionExpression(check) : true;\n\t }\n\t break;\n\t default:\n\t break;\n\t }\n\t return regex;\n\t };\n\t Reader.prototype.push = function (token) {\n\t if (token.type === 7 /* Punctuator */ || token.type === 4 /* Keyword */) {\n\t if (token.value === '{') {\n\t this.curly = this.values.length;\n\t }\n\t else if (token.value === '(') {\n\t this.paren = this.values.length;\n\t }\n\t this.values.push(token.value);\n\t }\n\t else {\n\t this.values.push(null);\n\t }\n\t };\n\t return Reader;\n\t}());\n\tvar Tokenizer = (function () {\n\t function Tokenizer(code, config) {\n\t this.errorHandler = new error_handler_1.ErrorHandler();\n\t this.errorHandler.tolerant = config ? (typeof config.tolerant === 'boolean' && config.tolerant) : false;\n\t this.scanner = new scanner_1.Scanner(code, this.errorHandler);\n\t this.scanner.trackComment = config ? (typeof config.comment === 'boolean' && config.comment) : false;\n\t this.trackRange = config ? (typeof config.range === 'boolean' && config.range) : false;\n\t this.trackLoc = config ? (typeof config.loc === 'boolean' && config.loc) : false;\n\t this.buffer = [];\n\t this.reader = new Reader();\n\t }\n\t Tokenizer.prototype.errors = function () {\n\t return this.errorHandler.errors;\n\t };\n\t Tokenizer.prototype.getNextToken = function () {\n\t if (this.buffer.length === 0) {\n\t var comments = this.scanner.scanComments();\n\t if (this.scanner.trackComment) {\n\t for (var i = 0; i < comments.length; ++i) {\n\t var e = comments[i];\n\t var value = this.scanner.source.slice(e.slice[0], e.slice[1]);\n\t var comment = {\n\t type: e.multiLine ? 'BlockComment' : 'LineComment',\n\t value: value\n\t };\n\t if (this.trackRange) {\n\t comment.range = e.range;\n\t }\n\t if (this.trackLoc) {\n\t comment.loc = e.loc;\n\t }\n\t this.buffer.push(comment);\n\t }\n\t }\n\t if (!this.scanner.eof()) {\n\t var loc = void 0;\n\t if (this.trackLoc) {\n\t loc = {\n\t start: {\n\t line: this.scanner.lineNumber,\n\t column: this.scanner.index - this.scanner.lineStart\n\t },\n\t end: {}\n\t };\n\t }\n\t var startRegex = (this.scanner.source[this.scanner.index] === '/') && this.reader.isRegexStart();\n\t var token = startRegex ? this.scanner.scanRegExp() : this.scanner.lex();\n\t this.reader.push(token);\n\t var entry = {\n\t type: token_1.TokenName[token.type],\n\t value: this.scanner.source.slice(token.start, token.end)\n\t };\n\t if (this.trackRange) {\n\t entry.range = [token.start, token.end];\n\t }\n\t if (this.trackLoc) {\n\t loc.end = {\n\t line: this.scanner.lineNumber,\n\t column: this.scanner.index - this.scanner.lineStart\n\t };\n\t entry.loc = loc;\n\t }\n\t if (token.type === 9 /* RegularExpression */) {\n\t var pattern = token.pattern;\n\t var flags = token.flags;\n\t entry.regex = { pattern: pattern, flags: flags };\n\t }\n\t this.buffer.push(entry);\n\t }\n\t }\n\t return this.buffer.shift();\n\t };\n\t return Tokenizer;\n\t}());\n\texports.Tokenizer = Tokenizer;\n\n\n/***/ }\n/******/ ])\n});\n;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTM1Ni5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0EsSUFBSSxJQUF5RDtBQUM3RDtBQUNBLE1BQU07QUFBQSxFQU13QjtBQUM5QixDQUFDO0FBQ0QscUNBQXFDO0FBQ3JDO0FBQ0E7O0FBRUE7QUFDQSxtQkFBbUIsOEJBQW1COztBQUV0QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsdUJBQXVCO0FBQ3ZCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDBFQUEwRSw4QkFBbUI7O0FBRTdGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7QUFHQTtBQUNBLFVBQVUsOEJBQW1COztBQUU3QjtBQUNBLFVBQVUsOEJBQW1COztBQUU3QjtBQUNBLFVBQVUsOEJBQW1COztBQUU3QjtBQUNBLGlCQUFpQiw4QkFBbUI7QUFDcEMsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQywrQkFBbUI7O0FBRW5EO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0RBQWdELGFBQWE7QUFDN0QseUJBQXlCLCtCQUFtQjtBQUM1QyxvQkFBb0IsK0JBQW1CO0FBQ3ZDLGdCQUFnQiwrQkFBbUI7QUFDbkMsbUJBQW1CLCtCQUFtQjtBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsK0JBQW1CO0FBQ25DO0FBQ0E7QUFDQTs7O0FBR0EsT0FBTztBQUNQO0FBQ0EsZ0NBQWdDLCtCQUFtQjs7QUFFbkQ7QUFDQSxnREFBZ0QsYUFBYTtBQUM3RCxnQkFBZ0IsK0JBQW1CO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLGtCQUFrQjtBQUM5QztBQUNBO0FBQ0EsbURBQW1ELFFBQVE7QUFDM0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0RBQW9ELFFBQVE7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUNBQXFDLFFBQVE7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtDQUErQyxRQUFRO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGOzs7QUFHQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBLGdEQUFnRCxhQUFhO0FBQzdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBLE9BQU87QUFDUDtBQUNBLGdDQUFnQyxnQ0FBbUI7O0FBRW5EO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxnQkFBZ0Isc0NBQXNDLGtCQUFrQjtBQUNwRiwyQkFBMkI7QUFDM0I7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0EsRUFBRTtBQUNGLGdEQUFnRCxhQUFhO0FBQzdELG1CQUFtQixnQ0FBbUI7QUFDdEMsZUFBZSxnQ0FBbUI7QUFDbEMsb0JBQW9CLGdDQUFtQjtBQUN2QyxZQUFZLGdDQUFtQjtBQUMvQixnQkFBZ0IsZ0NBQW1CO0FBQ25DLGVBQWUsZ0NBQW1CO0FBQ2xDLHdCQUF3QixnQ0FBbUI7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEI7QUFDMUIsOEJBQThCO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQztBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0NBQXdDO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNENBQTRDO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEI7QUFDMUI7QUFDQSwwQkFBMEI7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0M7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQjtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCO0FBQzFCO0FBQ0EsNkJBQTZCO0FBQzdCO0FBQ0EsOEJBQThCO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtEQUErRDtBQUMvRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0RBQW9ELG9FQUFvRTtBQUN4SDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQSxnREFBZ0QsYUFBYTtBQUM3RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLDRDQUE0QztBQUM1QyxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EseUNBQXlDO0FBQ3pDLE1BQU07QUFDTjtBQUNBLDRDQUE0QztBQUM1QztBQUNBOzs7QUFHQSxPQUFPO0FBQ1A7QUFDQSxnQ0FBZ0MsZ0NBQW1COztBQUVuRDtBQUNBLGdEQUFnRCxhQUFhO0FBQzdELG9CQUFvQixnQ0FBbUI7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQSxnREFBZ0QsYUFBYTtBQUM3RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0EsT0FBTztBQUNQO0FBQ0EsZ0NBQWdDLGdDQUFtQjs7QUFFbkQ7QUFDQSxnREFBZ0QsYUFBYTtBQUM3RCxnQkFBZ0IsZ0NBQW1CO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QjtBQUN4QjtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjs7O0FBR0EsT0FBTztBQUNQO0FBQ0EsZ0NBQWdDLGdDQUFtQjs7QUFFbkQ7QUFDQSxnREFBZ0QsYUFBYTtBQUM3RCxnQkFBZ0IsZ0NBQW1CO0FBQ25DLHVCQUF1QixnQ0FBbUI7QUFDMUMsa0JBQWtCLGdDQUFtQjtBQUNyQyxZQUFZLGdDQUFtQjtBQUMvQixpQkFBaUIsZ0NBQW1CO0FBQ3BDLGdCQUFnQixnQ0FBbUI7QUFDbkMsZUFBZSxnQ0FBbUI7QUFDbEM7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQix1QkFBdUI7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCLHVCQUF1QjtBQUNqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQyxxQkFBcUI7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQjtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUM7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZFQUE2RTtBQUM3RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCO0FBQzFCO0FBQ0E7QUFDQTtBQUNBLHNFQUFzRTtBQUN0RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCO0FBQ3ZCO0FBQ0EsMEJBQTBCO0FBQzFCLDhCQUE4QjtBQUM5QjtBQUNBLCtCQUErQjtBQUMvQjtBQUNBO0FBQ0E7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0RBQStELDBCQUEwQjtBQUN6RjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrREFBK0QsMEJBQTBCO0FBQ3pGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDLDBCQUEwQjtBQUMzRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQyw0QkFBNEI7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkNBQTZDLHdCQUF3QjtBQUNyRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZDQUE2Qyx3QkFBd0I7QUFDckU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaURBQWlELDZCQUE2QjtBQUM5RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQyxpQkFBaUI7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDLDJCQUEyQjtBQUM1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUMsNkJBQTZCO0FBQzlEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUIsbUJBQW1CO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCLG1CQUFtQjtBQUNoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0NBQXNDO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnRUFBZ0UsY0FBYztBQUM5RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOEZBQThGLGNBQWM7QUFDNUc7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBLDhCQUE4QjtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QjtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtRUFBbUU7QUFDbkU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUI7QUFDdkIsOEJBQThCO0FBQzlCO0FBQ0EsK0JBQStCO0FBQy9CO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QjtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQjtBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnRUFBZ0UsY0FBYztBQUM5RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QjtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEI7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdFQUF3RSxhQUFhO0FBQ3JGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNFQUFzRSxhQUFhO0FBQ25GO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCO0FBQy9CO0FBQ0E7QUFDQSwyQkFBMkI7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMENBQTBDLG9CQUFvQjtBQUM5RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4QkFBOEI7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQSw4QkFBOEI7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QjtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUIsbUJBQW1CO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQztBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0NBQXNDO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QjtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QjtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QjtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDREQUE0RCxtRUFBbUU7QUFDL0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QixtQkFBbUI7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0RUFBNEU7QUFDNUU7QUFDQTtBQUNBO0FBQ0EsMERBQTBEO0FBQzFEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0M7QUFDaEMsdUJBQXVCO0FBQ3ZCLDhCQUE4QjtBQUM5Qiw4QkFBOEI7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsY0FBYztBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLHVCQUF1QjtBQUN2QjtBQUNBLDhCQUE4QjtBQUM5QjtBQUNBLCtCQUErQjtBQUMvQjtBQUNBO0FBQ0E7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QjtBQUM5Qiw0QkFBNEI7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkNBQTJDO0FBQzNDLHlDQUF5QztBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnREFBZ0Q7QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtFQUFrRSxjQUFjO0FBQ2hGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCO0FBQzNCLGtDQUFrQztBQUNsQztBQUNBO0FBQ0EsbUNBQW1DO0FBQ25DO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQjtBQUMzQjtBQUNBLDRCQUE0QixTQUFTO0FBQ3JDLDRCQUE0QixLQUFLO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsVUFBVTtBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QjtBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdEQUFnRCxhQUFhO0FBQzdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsZ0RBQWdELGFBQWE7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwREFBMEQsZUFBZTtBQUN6RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGOzs7QUFHQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBLGdEQUFnRCxhQUFhO0FBQzdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQSxPQUFPO0FBQ1A7QUFDQSxnQ0FBZ0MsaUNBQW1COztBQUVuRDtBQUNBLGdEQUFnRCxhQUFhO0FBQzdELGdCQUFnQixpQ0FBbUI7QUFDbkMsbUJBQW1CLGlDQUFtQjtBQUN0QyxrQkFBa0IsaUNBQW1CO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DO0FBQ25DO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQztBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0NBQXNDO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCLFNBQVM7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0I7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUNBQXlDO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQ0FBK0M7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1EQUFtRDtBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CO0FBQ3BCLCtCQUErQjtBQUMvQiw0Q0FBNEM7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQjtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQjtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0NBQXNDLGlCQUFpQjtBQUN2RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0RBQStEO0FBQy9EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbURBQW1EO0FBQ25ELDZDQUE2QztBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0RBQStEO0FBQy9EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlDQUF5QyxNQUFNLElBQUksTUFBTTtBQUN6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0MsZ0JBQWdCLGlCQUFpQixFQUFFO0FBQ25FO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNENBQTRDLHNCQUFzQjtBQUNsRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCLCtGQUErRjtBQUMvRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGOzs7QUFHQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBLGdEQUFnRCxhQUFhO0FBQzdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQSxnREFBZ0QsYUFBYTtBQUM3RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQSxPQUFPO0FBQ1A7QUFDQSxnQ0FBZ0MsaUNBQW1COztBQUVuRDtBQUNBLGdEQUFnRCxhQUFhO0FBQzdELHVCQUF1QixpQ0FBbUI7QUFDMUMsaUJBQWlCLGlDQUFtQjtBQUNwQyxlQUFlLGlDQUFtQjtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QjtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOERBQThEO0FBQzlEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNERBQTREO0FBQzVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUM7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQyxxQkFBcUI7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEI7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQztBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjs7O0FBR0E7QUFDQTtBQUNBLENBQUM7QUFDRCIsInNvdXJjZXMiOlsid2VicGFjazovL29ic2lkaWFuLW1pbmRtYXAtbmV4dGdlbi8uL25vZGVfbW9kdWxlcy8ucG5wbS9lc3ByaW1hQDQuMC4xL25vZGVfbW9kdWxlcy9lc3ByaW1hL2Rpc3QvZXNwcmltYS5qcz9hZjEyIl0sInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShbXSwgZmFjdG9yeSk7XG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuXHRlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jylcblx0XHRleHBvcnRzW1wiZXNwcmltYVwiXSA9IGZhY3RvcnkoKTtcblx0ZWxzZVxuXHRcdHJvb3RbXCJlc3ByaW1hXCJdID0gZmFjdG9yeSgpO1xufSkodGhpcywgZnVuY3Rpb24oKSB7XG5yZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcFxuLyoqKioqKi8gXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbi8qKioqKiovIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbi8qKioqKiovIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4vKioqKioqLyBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4vKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbi8qKioqKiovIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSlcbi8qKioqKiovIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuXG4vKioqKioqLyBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbi8qKioqKiovIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4vKioqKioqLyBcdFx0XHRleHBvcnRzOiB7fSxcbi8qKioqKiovIFx0XHRcdGlkOiBtb2R1bGVJZCxcbi8qKioqKiovIFx0XHRcdGxvYWRlZDogZmFsc2Vcbi8qKioqKiovIFx0XHR9O1xuXG4vKioqKioqLyBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4vKioqKioqLyBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbi8qKioqKiovIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4vKioqKioqLyBcdFx0bW9kdWxlLmxvYWRlZCA9IHRydWU7XG5cbi8qKioqKiovIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuLyoqKioqKi8gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbi8qKioqKiovIFx0fVxuXG5cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4vKioqKioqLyBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cbi8qKioqKiovIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4vKioqKioqLyBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xuLyoqKioqKi8gfSlcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKioqKioqLyAoW1xuLyogMCAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0XCJ1c2Ugc3RyaWN0XCI7XG5cdC8qXG5cdCAgQ29weXJpZ2h0IEpTIEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9ycywgaHR0cHM6Ly9qcy5mb3VuZGF0aW9uL1xuXG5cdCAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XG5cdCAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG5cblx0ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHRcblx0ICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuXHQgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodFxuXHQgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlXG5cdCAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG5cblx0ICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIlxuXHQgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEVcblx0ICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRVxuXHQgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCA8Q09QWVJJR0hUIEhPTERFUj4gQkUgTElBQkxFIEZPUiBBTllcblx0ICBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xuXHQgIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcblx0ICBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkRcblx0ICBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuXHQgIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRlxuXHQgIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG5cdCovXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0dmFyIGNvbW1lbnRfaGFuZGxlcl8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKTtcblx0dmFyIGpzeF9wYXJzZXJfMSA9IF9fd2VicGFja19yZXF1aXJlX18oMyk7XG5cdHZhciBwYXJzZXJfMSA9IF9fd2VicGFja19yZXF1aXJlX18oOCk7XG5cdHZhciB0b2tlbml6ZXJfMSA9IF9fd2VicGFja19yZXF1aXJlX18oMTUpO1xuXHRmdW5jdGlvbiBwYXJzZShjb2RlLCBvcHRpb25zLCBkZWxlZ2F0ZSkge1xuXHQgICAgdmFyIGNvbW1lbnRIYW5kbGVyID0gbnVsbDtcblx0ICAgIHZhciBwcm94eURlbGVnYXRlID0gZnVuY3Rpb24gKG5vZGUsIG1ldGFkYXRhKSB7XG5cdCAgICAgICAgaWYgKGRlbGVnYXRlKSB7XG5cdCAgICAgICAgICAgIGRlbGVnYXRlKG5vZGUsIG1ldGFkYXRhKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgaWYgKGNvbW1lbnRIYW5kbGVyKSB7XG5cdCAgICAgICAgICAgIGNvbW1lbnRIYW5kbGVyLnZpc2l0KG5vZGUsIG1ldGFkYXRhKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgdmFyIHBhcnNlckRlbGVnYXRlID0gKHR5cGVvZiBkZWxlZ2F0ZSA9PT0gJ2Z1bmN0aW9uJykgPyBwcm94eURlbGVnYXRlIDogbnVsbDtcblx0ICAgIHZhciBjb2xsZWN0Q29tbWVudCA9IGZhbHNlO1xuXHQgICAgaWYgKG9wdGlvbnMpIHtcblx0ICAgICAgICBjb2xsZWN0Q29tbWVudCA9ICh0eXBlb2Ygb3B0aW9ucy5jb21tZW50ID09PSAnYm9vbGVhbicgJiYgb3B0aW9ucy5jb21tZW50KTtcblx0ICAgICAgICB2YXIgYXR0YWNoQ29tbWVudCA9ICh0eXBlb2Ygb3B0aW9ucy5hdHRhY2hDb21tZW50ID09PSAnYm9vbGVhbicgJiYgb3B0aW9ucy5hdHRhY2hDb21tZW50KTtcblx0ICAgICAgICBpZiAoY29sbGVjdENvbW1lbnQgfHwgYXR0YWNoQ29tbWVudCkge1xuXHQgICAgICAgICAgICBjb21tZW50SGFuZGxlciA9IG5ldyBjb21tZW50X2hhbmRsZXJfMS5Db21tZW50SGFuZGxlcigpO1xuXHQgICAgICAgICAgICBjb21tZW50SGFuZGxlci5hdHRhY2ggPSBhdHRhY2hDb21tZW50O1xuXHQgICAgICAgICAgICBvcHRpb25zLmNvbW1lbnQgPSB0cnVlO1xuXHQgICAgICAgICAgICBwYXJzZXJEZWxlZ2F0ZSA9IHByb3h5RGVsZWdhdGU7XG5cdCAgICAgICAgfVxuXHQgICAgfVxuXHQgICAgdmFyIGlzTW9kdWxlID0gZmFsc2U7XG5cdCAgICBpZiAob3B0aW9ucyAmJiB0eXBlb2Ygb3B0aW9ucy5zb3VyY2VUeXBlID09PSAnc3RyaW5nJykge1xuXHQgICAgICAgIGlzTW9kdWxlID0gKG9wdGlvbnMuc291cmNlVHlwZSA9PT0gJ21vZHVsZScpO1xuXHQgICAgfVxuXHQgICAgdmFyIHBhcnNlcjtcblx0ICAgIGlmIChvcHRpb25zICYmIHR5cGVvZiBvcHRpb25zLmpzeCA9PT0gJ2Jvb2xlYW4nICYmIG9wdGlvbnMuanN4KSB7XG5cdCAgICAgICAgcGFyc2VyID0gbmV3IGpzeF9wYXJzZXJfMS5KU1hQYXJzZXIoY29kZSwgb3B0aW9ucywgcGFyc2VyRGVsZWdhdGUpO1xuXHQgICAgfVxuXHQgICAgZWxzZSB7XG5cdCAgICAgICAgcGFyc2VyID0gbmV3IHBhcnNlcl8xLlBhcnNlcihjb2RlLCBvcHRpb25zLCBwYXJzZXJEZWxlZ2F0ZSk7XG5cdCAgICB9XG5cdCAgICB2YXIgcHJvZ3JhbSA9IGlzTW9kdWxlID8gcGFyc2VyLnBhcnNlTW9kdWxlKCkgOiBwYXJzZXIucGFyc2VTY3JpcHQoKTtcblx0ICAgIHZhciBhc3QgPSBwcm9ncmFtO1xuXHQgICAgaWYgKGNvbGxlY3RDb21tZW50ICYmIGNvbW1lbnRIYW5kbGVyKSB7XG5cdCAgICAgICAgYXN0LmNvbW1lbnRzID0gY29tbWVudEhhbmRsZXIuY29tbWVudHM7XG5cdCAgICB9XG5cdCAgICBpZiAocGFyc2VyLmNvbmZpZy50b2tlbnMpIHtcblx0ICAgICAgICBhc3QudG9rZW5zID0gcGFyc2VyLnRva2Vucztcblx0ICAgIH1cblx0ICAgIGlmIChwYXJzZXIuY29uZmlnLnRvbGVyYW50KSB7XG5cdCAgICAgICAgYXN0LmVycm9ycyA9IHBhcnNlci5lcnJvckhhbmRsZXIuZXJyb3JzO1xuXHQgICAgfVxuXHQgICAgcmV0dXJuIGFzdDtcblx0fVxuXHRleHBvcnRzLnBhcnNlID0gcGFyc2U7XG5cdGZ1bmN0aW9uIHBhcnNlTW9kdWxlKGNvZGUsIG9wdGlvbnMsIGRlbGVnYXRlKSB7XG5cdCAgICB2YXIgcGFyc2luZ09wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXHQgICAgcGFyc2luZ09wdGlvbnMuc291cmNlVHlwZSA9ICdtb2R1bGUnO1xuXHQgICAgcmV0dXJuIHBhcnNlKGNvZGUsIHBhcnNpbmdPcHRpb25zLCBkZWxlZ2F0ZSk7XG5cdH1cblx0ZXhwb3J0cy5wYXJzZU1vZHVsZSA9IHBhcnNlTW9kdWxlO1xuXHRmdW5jdGlvbiBwYXJzZVNjcmlwdChjb2RlLCBvcHRpb25zLCBkZWxlZ2F0ZSkge1xuXHQgICAgdmFyIHBhcnNpbmdPcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblx0ICAgIHBhcnNpbmdPcHRpb25zLnNvdXJjZVR5cGUgPSAnc2NyaXB0Jztcblx0ICAgIHJldHVybiBwYXJzZShjb2RlLCBwYXJzaW5nT3B0aW9ucywgZGVsZWdhdGUpO1xuXHR9XG5cdGV4cG9ydHMucGFyc2VTY3JpcHQgPSBwYXJzZVNjcmlwdDtcblx0ZnVuY3Rpb24gdG9rZW5pemUoY29kZSwgb3B0aW9ucywgZGVsZWdhdGUpIHtcblx0ICAgIHZhciB0b2tlbml6ZXIgPSBuZXcgdG9rZW5pemVyXzEuVG9rZW5pemVyKGNvZGUsIG9wdGlvbnMpO1xuXHQgICAgdmFyIHRva2Vucztcblx0ICAgIHRva2VucyA9IFtdO1xuXHQgICAgdHJ5IHtcblx0ICAgICAgICB3aGlsZSAodHJ1ZSkge1xuXHQgICAgICAgICAgICB2YXIgdG9rZW4gPSB0b2tlbml6ZXIuZ2V0TmV4dFRva2VuKCk7XG5cdCAgICAgICAgICAgIGlmICghdG9rZW4pIHtcblx0ICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGlmIChkZWxlZ2F0ZSkge1xuXHQgICAgICAgICAgICAgICAgdG9rZW4gPSBkZWxlZ2F0ZSh0b2tlbik7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdG9rZW5zLnB1c2godG9rZW4pO1xuXHQgICAgICAgIH1cblx0ICAgIH1cblx0ICAgIGNhdGNoIChlKSB7XG5cdCAgICAgICAgdG9rZW5pemVyLmVycm9ySGFuZGxlci50b2xlcmF0ZShlKTtcblx0ICAgIH1cblx0ICAgIGlmICh0b2tlbml6ZXIuZXJyb3JIYW5kbGVyLnRvbGVyYW50KSB7XG5cdCAgICAgICAgdG9rZW5zLmVycm9ycyA9IHRva2VuaXplci5lcnJvcnMoKTtcblx0ICAgIH1cblx0ICAgIHJldHVybiB0b2tlbnM7XG5cdH1cblx0ZXhwb3J0cy50b2tlbml6ZSA9IHRva2VuaXplO1xuXHR2YXIgc3ludGF4XzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xuXHRleHBvcnRzLlN5bnRheCA9IHN5bnRheF8xLlN5bnRheDtcblx0Ly8gU3luYyB3aXRoICouanNvbiBtYW5pZmVzdHMuXG5cdGV4cG9ydHMudmVyc2lvbiA9ICc0LjAuMSc7XG5cblxuLyoqKi8gfSxcbi8qIDEgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdFwidXNlIHN0cmljdFwiO1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdHZhciBzeW50YXhfMSA9IF9fd2VicGFja19yZXF1aXJlX18oMik7XG5cdHZhciBDb21tZW50SGFuZGxlciA9IChmdW5jdGlvbiAoKSB7XG5cdCAgICBmdW5jdGlvbiBDb21tZW50SGFuZGxlcigpIHtcblx0ICAgICAgICB0aGlzLmF0dGFjaCA9IGZhbHNlO1xuXHQgICAgICAgIHRoaXMuY29tbWVudHMgPSBbXTtcblx0ICAgICAgICB0aGlzLnN0YWNrID0gW107XG5cdCAgICAgICAgdGhpcy5sZWFkaW5nID0gW107XG5cdCAgICAgICAgdGhpcy50cmFpbGluZyA9IFtdO1xuXHQgICAgfVxuXHQgICAgQ29tbWVudEhhbmRsZXIucHJvdG90eXBlLmluc2VydElubmVyQ29tbWVudHMgPSBmdW5jdGlvbiAobm9kZSwgbWV0YWRhdGEpIHtcblx0ICAgICAgICAvLyAgaW5ubmVyQ29tbWVudHMgZm9yIHByb3BlcnRpZXMgZW1wdHkgYmxvY2tcblx0ICAgICAgICAvLyAgYGZ1bmN0aW9uIGEoKSB7LyoqIGNvbW1lbnRzICoqXFwvfWBcblx0ICAgICAgICBpZiAobm9kZS50eXBlID09PSBzeW50YXhfMS5TeW50YXguQmxvY2tTdGF0ZW1lbnQgJiYgbm9kZS5ib2R5Lmxlbmd0aCA9PT0gMCkge1xuXHQgICAgICAgICAgICB2YXIgaW5uZXJDb21tZW50cyA9IFtdO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gdGhpcy5sZWFkaW5nLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgZW50cnkgPSB0aGlzLmxlYWRpbmdbaV07XG5cdCAgICAgICAgICAgICAgICBpZiAobWV0YWRhdGEuZW5kLm9mZnNldCA+PSBlbnRyeS5zdGFydCkge1xuXHQgICAgICAgICAgICAgICAgICAgIGlubmVyQ29tbWVudHMudW5zaGlmdChlbnRyeS5jb21tZW50KTtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLmxlYWRpbmcuc3BsaWNlKGksIDEpO1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMudHJhaWxpbmcuc3BsaWNlKGksIDEpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGlmIChpbm5lckNvbW1lbnRzLmxlbmd0aCkge1xuXHQgICAgICAgICAgICAgICAgbm9kZS5pbm5lckNvbW1lbnRzID0gaW5uZXJDb21tZW50cztcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICBDb21tZW50SGFuZGxlci5wcm90b3R5cGUuZmluZFRyYWlsaW5nQ29tbWVudHMgPSBmdW5jdGlvbiAobWV0YWRhdGEpIHtcblx0ICAgICAgICB2YXIgdHJhaWxpbmdDb21tZW50cyA9IFtdO1xuXHQgICAgICAgIGlmICh0aGlzLnRyYWlsaW5nLmxlbmd0aCA+IDApIHtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJhaWxpbmcubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcblx0ICAgICAgICAgICAgICAgIHZhciBlbnRyeV8xID0gdGhpcy50cmFpbGluZ1tpXTtcblx0ICAgICAgICAgICAgICAgIGlmIChlbnRyeV8xLnN0YXJ0ID49IG1ldGFkYXRhLmVuZC5vZmZzZXQpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0cmFpbGluZ0NvbW1lbnRzLnVuc2hpZnQoZW50cnlfMS5jb21tZW50KTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLnRyYWlsaW5nLmxlbmd0aCA9IDA7XG5cdCAgICAgICAgICAgIHJldHVybiB0cmFpbGluZ0NvbW1lbnRzO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoIC0gMV07XG5cdCAgICAgICAgaWYgKGVudHJ5ICYmIGVudHJ5Lm5vZGUudHJhaWxpbmdDb21tZW50cykge1xuXHQgICAgICAgICAgICB2YXIgZmlyc3RDb21tZW50ID0gZW50cnkubm9kZS50cmFpbGluZ0NvbW1lbnRzWzBdO1xuXHQgICAgICAgICAgICBpZiAoZmlyc3RDb21tZW50ICYmIGZpcnN0Q29tbWVudC5yYW5nZVswXSA+PSBtZXRhZGF0YS5lbmQub2Zmc2V0KSB7XG5cdCAgICAgICAgICAgICAgICB0cmFpbGluZ0NvbW1lbnRzID0gZW50cnkubm9kZS50cmFpbGluZ0NvbW1lbnRzO1xuXHQgICAgICAgICAgICAgICAgZGVsZXRlIGVudHJ5Lm5vZGUudHJhaWxpbmdDb21tZW50cztcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdHJhaWxpbmdDb21tZW50cztcblx0ICAgIH07XG5cdCAgICBDb21tZW50SGFuZGxlci5wcm90b3R5cGUuZmluZExlYWRpbmdDb21tZW50cyA9IGZ1bmN0aW9uIChtZXRhZGF0YSkge1xuXHQgICAgICAgIHZhciBsZWFkaW5nQ29tbWVudHMgPSBbXTtcblx0ICAgICAgICB2YXIgdGFyZ2V0O1xuXHQgICAgICAgIHdoaWxlICh0aGlzLnN0YWNrLmxlbmd0aCA+IDApIHtcblx0ICAgICAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aCAtIDFdO1xuXHQgICAgICAgICAgICBpZiAoZW50cnkgJiYgZW50cnkuc3RhcnQgPj0gbWV0YWRhdGEuc3RhcnQub2Zmc2V0KSB7XG5cdCAgICAgICAgICAgICAgICB0YXJnZXQgPSBlbnRyeS5ub2RlO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5zdGFjay5wb3AoKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmICh0YXJnZXQpIHtcblx0ICAgICAgICAgICAgdmFyIGNvdW50ID0gdGFyZ2V0LmxlYWRpbmdDb21tZW50cyA/IHRhcmdldC5sZWFkaW5nQ29tbWVudHMubGVuZ3RoIDogMDtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IGNvdW50IC0gMTsgaSA+PSAwOyAtLWkpIHtcblx0ICAgICAgICAgICAgICAgIHZhciBjb21tZW50ID0gdGFyZ2V0LmxlYWRpbmdDb21tZW50c1tpXTtcblx0ICAgICAgICAgICAgICAgIGlmIChjb21tZW50LnJhbmdlWzFdIDw9IG1ldGFkYXRhLnN0YXJ0Lm9mZnNldCkge1xuXHQgICAgICAgICAgICAgICAgICAgIGxlYWRpbmdDb21tZW50cy51bnNoaWZ0KGNvbW1lbnQpO1xuXHQgICAgICAgICAgICAgICAgICAgIHRhcmdldC5sZWFkaW5nQ29tbWVudHMuc3BsaWNlKGksIDEpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGlmICh0YXJnZXQubGVhZGluZ0NvbW1lbnRzICYmIHRhcmdldC5sZWFkaW5nQ29tbWVudHMubGVuZ3RoID09PSAwKSB7XG5cdCAgICAgICAgICAgICAgICBkZWxldGUgdGFyZ2V0LmxlYWRpbmdDb21tZW50cztcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICByZXR1cm4gbGVhZGluZ0NvbW1lbnRzO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBmb3IgKHZhciBpID0gdGhpcy5sZWFkaW5nLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG5cdCAgICAgICAgICAgIHZhciBlbnRyeSA9IHRoaXMubGVhZGluZ1tpXTtcblx0ICAgICAgICAgICAgaWYgKGVudHJ5LnN0YXJ0IDw9IG1ldGFkYXRhLnN0YXJ0Lm9mZnNldCkge1xuXHQgICAgICAgICAgICAgICAgbGVhZGluZ0NvbW1lbnRzLnVuc2hpZnQoZW50cnkuY29tbWVudCk7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmxlYWRpbmcuc3BsaWNlKGksIDEpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiBsZWFkaW5nQ29tbWVudHM7XG5cdCAgICB9O1xuXHQgICAgQ29tbWVudEhhbmRsZXIucHJvdG90eXBlLnZpc2l0Tm9kZSA9IGZ1bmN0aW9uIChub2RlLCBtZXRhZGF0YSkge1xuXHQgICAgICAgIGlmIChub2RlLnR5cGUgPT09IHN5bnRheF8xLlN5bnRheC5Qcm9ncmFtICYmIG5vZGUuYm9keS5sZW5ndGggPiAwKSB7XG5cdCAgICAgICAgICAgIHJldHVybjtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5pbnNlcnRJbm5lckNvbW1lbnRzKG5vZGUsIG1ldGFkYXRhKTtcblx0ICAgICAgICB2YXIgdHJhaWxpbmdDb21tZW50cyA9IHRoaXMuZmluZFRyYWlsaW5nQ29tbWVudHMobWV0YWRhdGEpO1xuXHQgICAgICAgIHZhciBsZWFkaW5nQ29tbWVudHMgPSB0aGlzLmZpbmRMZWFkaW5nQ29tbWVudHMobWV0YWRhdGEpO1xuXHQgICAgICAgIGlmIChsZWFkaW5nQ29tbWVudHMubGVuZ3RoID4gMCkge1xuXHQgICAgICAgICAgICBub2RlLmxlYWRpbmdDb21tZW50cyA9IGxlYWRpbmdDb21tZW50cztcblx0ICAgICAgICB9XG5cdCAgICAgICAgaWYgKHRyYWlsaW5nQ29tbWVudHMubGVuZ3RoID4gMCkge1xuXHQgICAgICAgICAgICBub2RlLnRyYWlsaW5nQ29tbWVudHMgPSB0cmFpbGluZ0NvbW1lbnRzO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLnN0YWNrLnB1c2goe1xuXHQgICAgICAgICAgICBub2RlOiBub2RlLFxuXHQgICAgICAgICAgICBzdGFydDogbWV0YWRhdGEuc3RhcnQub2Zmc2V0XG5cdCAgICAgICAgfSk7XG5cdCAgICB9O1xuXHQgICAgQ29tbWVudEhhbmRsZXIucHJvdG90eXBlLnZpc2l0Q29tbWVudCA9IGZ1bmN0aW9uIChub2RlLCBtZXRhZGF0YSkge1xuXHQgICAgICAgIHZhciB0eXBlID0gKG5vZGUudHlwZVswXSA9PT0gJ0wnKSA/ICdMaW5lJyA6ICdCbG9jayc7XG5cdCAgICAgICAgdmFyIGNvbW1lbnQgPSB7XG5cdCAgICAgICAgICAgIHR5cGU6IHR5cGUsXG5cdCAgICAgICAgICAgIHZhbHVlOiBub2RlLnZhbHVlXG5cdCAgICAgICAgfTtcblx0ICAgICAgICBpZiAobm9kZS5yYW5nZSkge1xuXHQgICAgICAgICAgICBjb21tZW50LnJhbmdlID0gbm9kZS5yYW5nZTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgaWYgKG5vZGUubG9jKSB7XG5cdCAgICAgICAgICAgIGNvbW1lbnQubG9jID0gbm9kZS5sb2M7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuY29tbWVudHMucHVzaChjb21tZW50KTtcblx0ICAgICAgICBpZiAodGhpcy5hdHRhY2gpIHtcblx0ICAgICAgICAgICAgdmFyIGVudHJ5ID0ge1xuXHQgICAgICAgICAgICAgICAgY29tbWVudDoge1xuXHQgICAgICAgICAgICAgICAgICAgIHR5cGU6IHR5cGUsXG5cdCAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG5vZGUudmFsdWUsXG5cdCAgICAgICAgICAgICAgICAgICAgcmFuZ2U6IFttZXRhZGF0YS5zdGFydC5vZmZzZXQsIG1ldGFkYXRhLmVuZC5vZmZzZXRdXG5cdCAgICAgICAgICAgICAgICB9LFxuXHQgICAgICAgICAgICAgICAgc3RhcnQ6IG1ldGFkYXRhLnN0YXJ0Lm9mZnNldFxuXHQgICAgICAgICAgICB9O1xuXHQgICAgICAgICAgICBpZiAobm9kZS5sb2MpIHtcblx0ICAgICAgICAgICAgICAgIGVudHJ5LmNvbW1lbnQubG9jID0gbm9kZS5sb2M7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgbm9kZS50eXBlID0gdHlwZTtcblx0ICAgICAgICAgICAgdGhpcy5sZWFkaW5nLnB1c2goZW50cnkpO1xuXHQgICAgICAgICAgICB0aGlzLnRyYWlsaW5nLnB1c2goZW50cnkpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICBDb21tZW50SGFuZGxlci5wcm90b3R5cGUudmlzaXQgPSBmdW5jdGlvbiAobm9kZSwgbWV0YWRhdGEpIHtcblx0ICAgICAgICBpZiAobm9kZS50eXBlID09PSAnTGluZUNvbW1lbnQnKSB7XG5cdCAgICAgICAgICAgIHRoaXMudmlzaXRDb21tZW50KG5vZGUsIG1ldGFkYXRhKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgZWxzZSBpZiAobm9kZS50eXBlID09PSAnQmxvY2tDb21tZW50Jykge1xuXHQgICAgICAgICAgICB0aGlzLnZpc2l0Q29tbWVudChub2RlLCBtZXRhZGF0YSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGVsc2UgaWYgKHRoaXMuYXR0YWNoKSB7XG5cdCAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUsIG1ldGFkYXRhKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIENvbW1lbnRIYW5kbGVyO1xuXHR9KCkpO1xuXHRleHBvcnRzLkNvbW1lbnRIYW5kbGVyID0gQ29tbWVudEhhbmRsZXI7XG5cblxuLyoqKi8gfSxcbi8qIDIgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdFwidXNlIHN0cmljdFwiO1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuU3ludGF4ID0ge1xuXHQgICAgQXNzaWdubWVudEV4cHJlc3Npb246ICdBc3NpZ25tZW50RXhwcmVzc2lvbicsXG5cdCAgICBBc3NpZ25tZW50UGF0dGVybjogJ0Fzc2lnbm1lbnRQYXR0ZXJuJyxcblx0ICAgIEFycmF5RXhwcmVzc2lvbjogJ0FycmF5RXhwcmVzc2lvbicsXG5cdCAgICBBcnJheVBhdHRlcm46ICdBcnJheVBhdHRlcm4nLFxuXHQgICAgQXJyb3dGdW5jdGlvbkV4cHJlc3Npb246ICdBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbicsXG5cdCAgICBBd2FpdEV4cHJlc3Npb246ICdBd2FpdEV4cHJlc3Npb24nLFxuXHQgICAgQmxvY2tTdGF0ZW1lbnQ6ICdCbG9ja1N0YXRlbWVudCcsXG5cdCAgICBCaW5hcnlFeHByZXNzaW9uOiAnQmluYXJ5RXhwcmVzc2lvbicsXG5cdCAgICBCcmVha1N0YXRlbWVudDogJ0JyZWFrU3RhdGVtZW50Jyxcblx0ICAgIENhbGxFeHByZXNzaW9uOiAnQ2FsbEV4cHJlc3Npb24nLFxuXHQgICAgQ2F0Y2hDbGF1c2U6ICdDYXRjaENsYXVzZScsXG5cdCAgICBDbGFzc0JvZHk6ICdDbGFzc0JvZHknLFxuXHQgICAgQ2xhc3NEZWNsYXJhdGlvbjogJ0NsYXNzRGVjbGFyYXRpb24nLFxuXHQgICAgQ2xhc3NFeHByZXNzaW9uOiAnQ2xhc3NFeHByZXNzaW9uJyxcblx0ICAgIENvbmRpdGlvbmFsRXhwcmVzc2lvbjogJ0NvbmRpdGlvbmFsRXhwcmVzc2lvbicsXG5cdCAgICBDb250aW51ZVN0YXRlbWVudDogJ0NvbnRpbnVlU3RhdGVtZW50Jyxcblx0ICAgIERvV2hpbGVTdGF0ZW1lbnQ6ICdEb1doaWxlU3RhdGVtZW50Jyxcblx0ICAgIERlYnVnZ2VyU3RhdGVtZW50OiAnRGVidWdnZXJTdGF0ZW1lbnQnLFxuXHQgICAgRW1wdHlTdGF0ZW1lbnQ6ICdFbXB0eVN0YXRlbWVudCcsXG5cdCAgICBFeHBvcnRBbGxEZWNsYXJhdGlvbjogJ0V4cG9ydEFsbERlY2xhcmF0aW9uJyxcblx0ICAgIEV4cG9ydERlZmF1bHREZWNsYXJhdGlvbjogJ0V4cG9ydERlZmF1bHREZWNsYXJhdGlvbicsXG5cdCAgICBFeHBvcnROYW1lZERlY2xhcmF0aW9uOiAnRXhwb3J0TmFtZWREZWNsYXJhdGlvbicsXG5cdCAgICBFeHBvcnRTcGVjaWZpZXI6ICdFeHBvcnRTcGVjaWZpZXInLFxuXHQgICAgRXhwcmVzc2lvblN0YXRlbWVudDogJ0V4cHJlc3Npb25TdGF0ZW1lbnQnLFxuXHQgICAgRm9yU3RhdGVtZW50OiAnRm9yU3RhdGVtZW50Jyxcblx0ICAgIEZvck9mU3RhdGVtZW50OiAnRm9yT2ZTdGF0ZW1lbnQnLFxuXHQgICAgRm9ySW5TdGF0ZW1lbnQ6ICdGb3JJblN0YXRlbWVudCcsXG5cdCAgICBGdW5jdGlvbkRlY2xhcmF0aW9uOiAnRnVuY3Rpb25EZWNsYXJhdGlvbicsXG5cdCAgICBGdW5jdGlvbkV4cHJlc3Npb246ICdGdW5jdGlvbkV4cHJlc3Npb24nLFxuXHQgICAgSWRlbnRpZmllcjogJ0lkZW50aWZpZXInLFxuXHQgICAgSWZTdGF0ZW1lbnQ6ICdJZlN0YXRlbWVudCcsXG5cdCAgICBJbXBvcnREZWNsYXJhdGlvbjogJ0ltcG9ydERlY2xhcmF0aW9uJyxcblx0ICAgIEltcG9ydERlZmF1bHRTcGVjaWZpZXI6ICdJbXBvcnREZWZhdWx0U3BlY2lmaWVyJyxcblx0ICAgIEltcG9ydE5hbWVzcGFjZVNwZWNpZmllcjogJ0ltcG9ydE5hbWVzcGFjZVNwZWNpZmllcicsXG5cdCAgICBJbXBvcnRTcGVjaWZpZXI6ICdJbXBvcnRTcGVjaWZpZXInLFxuXHQgICAgTGl0ZXJhbDogJ0xpdGVyYWwnLFxuXHQgICAgTGFiZWxlZFN0YXRlbWVudDogJ0xhYmVsZWRTdGF0ZW1lbnQnLFxuXHQgICAgTG9naWNhbEV4cHJlc3Npb246ICdMb2dpY2FsRXhwcmVzc2lvbicsXG5cdCAgICBNZW1iZXJFeHByZXNzaW9uOiAnTWVtYmVyRXhwcmVzc2lvbicsXG5cdCAgICBNZXRhUHJvcGVydHk6ICdNZXRhUHJvcGVydHknLFxuXHQgICAgTWV0aG9kRGVmaW5pdGlvbjogJ01ldGhvZERlZmluaXRpb24nLFxuXHQgICAgTmV3RXhwcmVzc2lvbjogJ05ld0V4cHJlc3Npb24nLFxuXHQgICAgT2JqZWN0RXhwcmVzc2lvbjogJ09iamVjdEV4cHJlc3Npb24nLFxuXHQgICAgT2JqZWN0UGF0dGVybjogJ09iamVjdFBhdHRlcm4nLFxuXHQgICAgUHJvZ3JhbTogJ1Byb2dyYW0nLFxuXHQgICAgUHJvcGVydHk6ICdQcm9wZXJ0eScsXG5cdCAgICBSZXN0RWxlbWVudDogJ1Jlc3RFbGVtZW50Jyxcblx0ICAgIFJldHVyblN0YXRlbWVudDogJ1JldHVyblN0YXRlbWVudCcsXG5cdCAgICBTZXF1ZW5jZUV4cHJlc3Npb246ICdTZXF1ZW5jZUV4cHJlc3Npb24nLFxuXHQgICAgU3ByZWFkRWxlbWVudDogJ1NwcmVhZEVsZW1lbnQnLFxuXHQgICAgU3VwZXI6ICdTdXBlcicsXG5cdCAgICBTd2l0Y2hDYXNlOiAnU3dpdGNoQ2FzZScsXG5cdCAgICBTd2l0Y2hTdGF0ZW1lbnQ6ICdTd2l0Y2hTdGF0ZW1lbnQnLFxuXHQgICAgVGFnZ2VkVGVtcGxhdGVFeHByZXNzaW9uOiAnVGFnZ2VkVGVtcGxhdGVFeHByZXNzaW9uJyxcblx0ICAgIFRlbXBsYXRlRWxlbWVudDogJ1RlbXBsYXRlRWxlbWVudCcsXG5cdCAgICBUZW1wbGF0ZUxpdGVyYWw6ICdUZW1wbGF0ZUxpdGVyYWwnLFxuXHQgICAgVGhpc0V4cHJlc3Npb246ICdUaGlzRXhwcmVzc2lvbicsXG5cdCAgICBUaHJvd1N0YXRlbWVudDogJ1Rocm93U3RhdGVtZW50Jyxcblx0ICAgIFRyeVN0YXRlbWVudDogJ1RyeVN0YXRlbWVudCcsXG5cdCAgICBVbmFyeUV4cHJlc3Npb246ICdVbmFyeUV4cHJlc3Npb24nLFxuXHQgICAgVXBkYXRlRXhwcmVzc2lvbjogJ1VwZGF0ZUV4cHJlc3Npb24nLFxuXHQgICAgVmFyaWFibGVEZWNsYXJhdGlvbjogJ1ZhcmlhYmxlRGVjbGFyYXRpb24nLFxuXHQgICAgVmFyaWFibGVEZWNsYXJhdG9yOiAnVmFyaWFibGVEZWNsYXJhdG9yJyxcblx0ICAgIFdoaWxlU3RhdGVtZW50OiAnV2hpbGVTdGF0ZW1lbnQnLFxuXHQgICAgV2l0aFN0YXRlbWVudDogJ1dpdGhTdGF0ZW1lbnQnLFxuXHQgICAgWWllbGRFeHByZXNzaW9uOiAnWWllbGRFeHByZXNzaW9uJ1xuXHR9O1xuXG5cbi8qKiovIH0sXG4vKiAzICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHRcInVzZSBzdHJpY3RcIjtcbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5cdHZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcblx0ICAgIHZhciBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG5cdCAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuXHQgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKGIuaGFzT3duUHJvcGVydHkocCkpIGRbcF0gPSBiW3BdOyB9O1xuXHQgICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG5cdCAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcblx0ICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cblx0ICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG5cdCAgICB9O1xuXHR9KSgpO1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdHZhciBjaGFyYWN0ZXJfMSA9IF9fd2VicGFja19yZXF1aXJlX18oNCk7XG5cdHZhciBKU1hOb2RlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KTtcblx0dmFyIGpzeF9zeW50YXhfMSA9IF9fd2VicGFja19yZXF1aXJlX18oNik7XG5cdHZhciBOb2RlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3KTtcblx0dmFyIHBhcnNlcl8xID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4KTtcblx0dmFyIHRva2VuXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzKTtcblx0dmFyIHhodG1sX2VudGl0aWVzXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0KTtcblx0dG9rZW5fMS5Ub2tlbk5hbWVbMTAwIC8qIElkZW50aWZpZXIgKi9dID0gJ0pTWElkZW50aWZpZXInO1xuXHR0b2tlbl8xLlRva2VuTmFtZVsxMDEgLyogVGV4dCAqL10gPSAnSlNYVGV4dCc7XG5cdC8vIEZ1bGx5IHF1YWxpZmllZCBlbGVtZW50IG5hbWUsIGUuZy4gPHN2ZzpwYXRoPiByZXR1cm5zIFwic3ZnOnBhdGhcIlxuXHRmdW5jdGlvbiBnZXRRdWFsaWZpZWRFbGVtZW50TmFtZShlbGVtZW50TmFtZSkge1xuXHQgICAgdmFyIHF1YWxpZmllZE5hbWU7XG5cdCAgICBzd2l0Y2ggKGVsZW1lbnROYW1lLnR5cGUpIHtcblx0ICAgICAgICBjYXNlIGpzeF9zeW50YXhfMS5KU1hTeW50YXguSlNYSWRlbnRpZmllcjpcblx0ICAgICAgICAgICAgdmFyIGlkID0gZWxlbWVudE5hbWU7XG5cdCAgICAgICAgICAgIHF1YWxpZmllZE5hbWUgPSBpZC5uYW1lO1xuXHQgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICBjYXNlIGpzeF9zeW50YXhfMS5KU1hTeW50YXguSlNYTmFtZXNwYWNlZE5hbWU6XG5cdCAgICAgICAgICAgIHZhciBucyA9IGVsZW1lbnROYW1lO1xuXHQgICAgICAgICAgICBxdWFsaWZpZWROYW1lID0gZ2V0UXVhbGlmaWVkRWxlbWVudE5hbWUobnMubmFtZXNwYWNlKSArICc6JyArXG5cdCAgICAgICAgICAgICAgICBnZXRRdWFsaWZpZWRFbGVtZW50TmFtZShucy5uYW1lKTtcblx0ICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgY2FzZSBqc3hfc3ludGF4XzEuSlNYU3ludGF4LkpTWE1lbWJlckV4cHJlc3Npb246XG5cdCAgICAgICAgICAgIHZhciBleHByID0gZWxlbWVudE5hbWU7XG5cdCAgICAgICAgICAgIHF1YWxpZmllZE5hbWUgPSBnZXRRdWFsaWZpZWRFbGVtZW50TmFtZShleHByLm9iamVjdCkgKyAnLicgK1xuXHQgICAgICAgICAgICAgICAgZ2V0UXVhbGlmaWVkRWxlbWVudE5hbWUoZXhwci5wcm9wZXJ0eSk7XG5cdCAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5cdCAgICAgICAgZGVmYXVsdDpcblx0ICAgICAgICAgICAgYnJlYWs7XG5cdCAgICB9XG5cdCAgICByZXR1cm4gcXVhbGlmaWVkTmFtZTtcblx0fVxuXHR2YXIgSlNYUGFyc2VyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcblx0ICAgIF9fZXh0ZW5kcyhKU1hQYXJzZXIsIF9zdXBlcik7XG5cdCAgICBmdW5jdGlvbiBKU1hQYXJzZXIoY29kZSwgb3B0aW9ucywgZGVsZWdhdGUpIHtcblx0ICAgICAgICByZXR1cm4gX3N1cGVyLmNhbGwodGhpcywgY29kZSwgb3B0aW9ucywgZGVsZWdhdGUpIHx8IHRoaXM7XG5cdCAgICB9XG5cdCAgICBKU1hQYXJzZXIucHJvdG90eXBlLnBhcnNlUHJpbWFyeUV4cHJlc3Npb24gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMubWF0Y2goJzwnKSA/IHRoaXMucGFyc2VKU1hSb290KCkgOiBfc3VwZXIucHJvdG90eXBlLnBhcnNlUHJpbWFyeUV4cHJlc3Npb24uY2FsbCh0aGlzKTtcblx0ICAgIH07XG5cdCAgICBKU1hQYXJzZXIucHJvdG90eXBlLnN0YXJ0SlNYID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIC8vIFVud2luZCB0aGUgc2Nhbm5lciBiZWZvcmUgdGhlIGxvb2thaGVhZCB0b2tlbi5cblx0ICAgICAgICB0aGlzLnNjYW5uZXIuaW5kZXggPSB0aGlzLnN0YXJ0TWFya2VyLmluZGV4O1xuXHQgICAgICAgIHRoaXMuc2Nhbm5lci5saW5lTnVtYmVyID0gdGhpcy5zdGFydE1hcmtlci5saW5lO1xuXHQgICAgICAgIHRoaXMuc2Nhbm5lci5saW5lU3RhcnQgPSB0aGlzLnN0YXJ0TWFya2VyLmluZGV4IC0gdGhpcy5zdGFydE1hcmtlci5jb2x1bW47XG5cdCAgICB9O1xuXHQgICAgSlNYUGFyc2VyLnByb3RvdHlwZS5maW5pc2hKU1ggPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgLy8gUHJpbWUgdGhlIG5leHQgbG9va2FoZWFkLlxuXHQgICAgICAgIHRoaXMubmV4dFRva2VuKCk7XG5cdCAgICB9O1xuXHQgICAgSlNYUGFyc2VyLnByb3RvdHlwZS5yZWVudGVySlNYID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuc3RhcnRKU1goKTtcblx0ICAgICAgICB0aGlzLmV4cGVjdEpTWCgnfScpO1xuXHQgICAgICAgIC8vIFBvcCB0aGUgY2xvc2luZyAnfScgYWRkZWQgZnJvbSB0aGUgbG9va2FoZWFkLlxuXHQgICAgICAgIGlmICh0aGlzLmNvbmZpZy50b2tlbnMpIHtcblx0ICAgICAgICAgICAgdGhpcy50b2tlbnMucG9wKCk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIEpTWFBhcnNlci5wcm90b3R5cGUuY3JlYXRlSlNYTm9kZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLmNvbGxlY3RDb21tZW50cygpO1xuXHQgICAgICAgIHJldHVybiB7XG5cdCAgICAgICAgICAgIGluZGV4OiB0aGlzLnNjYW5uZXIuaW5kZXgsXG5cdCAgICAgICAgICAgIGxpbmU6IHRoaXMuc2Nhbm5lci5saW5lTnVtYmVyLFxuXHQgICAgICAgICAgICBjb2x1bW46IHRoaXMuc2Nhbm5lci5pbmRleCAtIHRoaXMuc2Nhbm5lci5saW5lU3RhcnRcblx0ICAgICAgICB9O1xuXHQgICAgfTtcblx0ICAgIEpTWFBhcnNlci5wcm90b3R5cGUuY3JlYXRlSlNYQ2hpbGROb2RlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB7XG5cdCAgICAgICAgICAgIGluZGV4OiB0aGlzLnNjYW5uZXIuaW5kZXgsXG5cdCAgICAgICAgICAgIGxpbmU6IHRoaXMuc2Nhbm5lci5saW5lTnVtYmVyLFxuXHQgICAgICAgICAgICBjb2x1bW46IHRoaXMuc2Nhbm5lci5pbmRleCAtIHRoaXMuc2Nhbm5lci5saW5lU3RhcnRcblx0ICAgICAgICB9O1xuXHQgICAgfTtcblx0ICAgIEpTWFBhcnNlci5wcm90b3R5cGUuc2NhblhIVE1MRW50aXR5ID0gZnVuY3Rpb24gKHF1b3RlKSB7XG5cdCAgICAgICAgdmFyIHJlc3VsdCA9ICcmJztcblx0ICAgICAgICB2YXIgdmFsaWQgPSB0cnVlO1xuXHQgICAgICAgIHZhciB0ZXJtaW5hdGVkID0gZmFsc2U7XG5cdCAgICAgICAgdmFyIG51bWVyaWMgPSBmYWxzZTtcblx0ICAgICAgICB2YXIgaGV4ID0gZmFsc2U7XG5cdCAgICAgICAgd2hpbGUgKCF0aGlzLnNjYW5uZXIuZW9mKCkgJiYgdmFsaWQgJiYgIXRlcm1pbmF0ZWQpIHtcblx0ICAgICAgICAgICAgdmFyIGNoID0gdGhpcy5zY2FubmVyLnNvdXJjZVt0aGlzLnNjYW5uZXIuaW5kZXhdO1xuXHQgICAgICAgICAgICBpZiAoY2ggPT09IHF1b3RlKSB7XG5cdCAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0ZXJtaW5hdGVkID0gKGNoID09PSAnOycpO1xuXHQgICAgICAgICAgICByZXN1bHQgKz0gY2g7XG5cdCAgICAgICAgICAgICsrdGhpcy5zY2FubmVyLmluZGV4O1xuXHQgICAgICAgICAgICBpZiAoIXRlcm1pbmF0ZWQpIHtcblx0ICAgICAgICAgICAgICAgIHN3aXRjaCAocmVzdWx0Lmxlbmd0aCkge1xuXHQgICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcblx0ICAgICAgICAgICAgICAgICAgICAgICAgLy8gZS5nLiAnJiMxMjM7J1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBudW1lcmljID0gKGNoID09PSAnIycpO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIGlmIChudW1lcmljKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBlLmcuICcmI3g0MTsnXG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZXggPSAoY2ggPT09ICd4Jyk7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZCA9IGhleCB8fCBjaGFyYWN0ZXJfMS5DaGFyYWN0ZXIuaXNEZWNpbWFsRGlnaXQoY2guY2hhckNvZGVBdCgwKSk7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1lcmljID0gbnVtZXJpYyAmJiAhaGV4O1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkID0gdmFsaWQgJiYgIShudW1lcmljICYmICFjaGFyYWN0ZXJfMS5DaGFyYWN0ZXIuaXNEZWNpbWFsRGlnaXQoY2guY2hhckNvZGVBdCgwKSkpO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZCA9IHZhbGlkICYmICEoaGV4ICYmICFjaGFyYWN0ZXJfMS5DaGFyYWN0ZXIuaXNIZXhEaWdpdChjaC5jaGFyQ29kZUF0KDApKSk7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmICh2YWxpZCAmJiB0ZXJtaW5hdGVkICYmIHJlc3VsdC5sZW5ndGggPiAyKSB7XG5cdCAgICAgICAgICAgIC8vIGUuZy4gJyYjeDQxOycgYmVjb21lcyBqdXN0ICcjeDQxJ1xuXHQgICAgICAgICAgICB2YXIgc3RyID0gcmVzdWx0LnN1YnN0cigxLCByZXN1bHQubGVuZ3RoIC0gMik7XG5cdCAgICAgICAgICAgIGlmIChudW1lcmljICYmIHN0ci5sZW5ndGggPiAxKSB7XG5cdCAgICAgICAgICAgICAgICByZXN1bHQgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KHN0ci5zdWJzdHIoMSksIDEwKSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgZWxzZSBpZiAoaGV4ICYmIHN0ci5sZW5ndGggPiAyKSB7XG5cdCAgICAgICAgICAgICAgICByZXN1bHQgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KCcwJyArIHN0ci5zdWJzdHIoMSksIDE2KSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgZWxzZSBpZiAoIW51bWVyaWMgJiYgIWhleCAmJiB4aHRtbF9lbnRpdGllc18xLlhIVE1MRW50aXRpZXNbc3RyXSkge1xuXHQgICAgICAgICAgICAgICAgcmVzdWx0ID0geGh0bWxfZW50aXRpZXNfMS5YSFRNTEVudGl0aWVzW3N0cl07XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHJlc3VsdDtcblx0ICAgIH07XG5cdCAgICAvLyBTY2FuIHRoZSBuZXh0IEpTWCB0b2tlbi4gVGhpcyByZXBsYWNlcyBTY2FubmVyI2xleCB3aGVuIGluIEpTWCBtb2RlLlxuXHQgICAgSlNYUGFyc2VyLnByb3RvdHlwZS5sZXhKU1ggPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIGNwID0gdGhpcy5zY2FubmVyLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMuc2Nhbm5lci5pbmRleCk7XG5cdCAgICAgICAgLy8gPCA+IC8gOiA9IHsgfVxuXHQgICAgICAgIGlmIChjcCA9PT0gNjAgfHwgY3AgPT09IDYyIHx8IGNwID09PSA0NyB8fCBjcCA9PT0gNTggfHwgY3AgPT09IDYxIHx8IGNwID09PSAxMjMgfHwgY3AgPT09IDEyNSkge1xuXHQgICAgICAgICAgICB2YXIgdmFsdWUgPSB0aGlzLnNjYW5uZXIuc291cmNlW3RoaXMuc2Nhbm5lci5pbmRleCsrXTtcblx0ICAgICAgICAgICAgcmV0dXJuIHtcblx0ICAgICAgICAgICAgICAgIHR5cGU6IDcgLyogUHVuY3R1YXRvciAqLyxcblx0ICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcblx0ICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IHRoaXMuc2Nhbm5lci5saW5lTnVtYmVyLFxuXHQgICAgICAgICAgICAgICAgbGluZVN0YXJ0OiB0aGlzLnNjYW5uZXIubGluZVN0YXJ0LFxuXHQgICAgICAgICAgICAgICAgc3RhcnQ6IHRoaXMuc2Nhbm5lci5pbmRleCAtIDEsXG5cdCAgICAgICAgICAgICAgICBlbmQ6IHRoaXMuc2Nhbm5lci5pbmRleFxuXHQgICAgICAgICAgICB9O1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvLyBcIiAnXG5cdCAgICAgICAgaWYgKGNwID09PSAzNCB8fCBjcCA9PT0gMzkpIHtcblx0ICAgICAgICAgICAgdmFyIHN0YXJ0ID0gdGhpcy5zY2FubmVyLmluZGV4O1xuXHQgICAgICAgICAgICB2YXIgcXVvdGUgPSB0aGlzLnNjYW5uZXIuc291cmNlW3RoaXMuc2Nhbm5lci5pbmRleCsrXTtcblx0ICAgICAgICAgICAgdmFyIHN0ciA9ICcnO1xuXHQgICAgICAgICAgICB3aGlsZSAoIXRoaXMuc2Nhbm5lci5lb2YoKSkge1xuXHQgICAgICAgICAgICAgICAgdmFyIGNoID0gdGhpcy5zY2FubmVyLnNvdXJjZVt0aGlzLnNjYW5uZXIuaW5kZXgrK107XG5cdCAgICAgICAgICAgICAgICBpZiAoY2ggPT09IHF1b3RlKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICBlbHNlIGlmIChjaCA9PT0gJyYnKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgc3RyICs9IHRoaXMuc2NhblhIVE1MRW50aXR5KHF1b3RlKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIHN0ciArPSBjaDtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICByZXR1cm4ge1xuXHQgICAgICAgICAgICAgICAgdHlwZTogOCAvKiBTdHJpbmdMaXRlcmFsICovLFxuXHQgICAgICAgICAgICAgICAgdmFsdWU6IHN0cixcblx0ICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IHRoaXMuc2Nhbm5lci5saW5lTnVtYmVyLFxuXHQgICAgICAgICAgICAgICAgbGluZVN0YXJ0OiB0aGlzLnNjYW5uZXIubGluZVN0YXJ0LFxuXHQgICAgICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LFxuXHQgICAgICAgICAgICAgICAgZW5kOiB0aGlzLnNjYW5uZXIuaW5kZXhcblx0ICAgICAgICAgICAgfTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy8gLi4uIG9yIC5cblx0ICAgICAgICBpZiAoY3AgPT09IDQ2KSB7XG5cdCAgICAgICAgICAgIHZhciBuMSA9IHRoaXMuc2Nhbm5lci5zb3VyY2UuY2hhckNvZGVBdCh0aGlzLnNjYW5uZXIuaW5kZXggKyAxKTtcblx0ICAgICAgICAgICAgdmFyIG4yID0gdGhpcy5zY2FubmVyLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMuc2Nhbm5lci5pbmRleCArIDIpO1xuXHQgICAgICAgICAgICB2YXIgdmFsdWUgPSAobjEgPT09IDQ2ICYmIG4yID09PSA0NikgPyAnLi4uJyA6ICcuJztcblx0ICAgICAgICAgICAgdmFyIHN0YXJ0ID0gdGhpcy5zY2FubmVyLmluZGV4O1xuXHQgICAgICAgICAgICB0aGlzLnNjYW5uZXIuaW5kZXggKz0gdmFsdWUubGVuZ3RoO1xuXHQgICAgICAgICAgICByZXR1cm4ge1xuXHQgICAgICAgICAgICAgICAgdHlwZTogNyAvKiBQdW5jdHVhdG9yICovLFxuXHQgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuXHQgICAgICAgICAgICAgICAgbGluZU51bWJlcjogdGhpcy5zY2FubmVyLmxpbmVOdW1iZXIsXG5cdCAgICAgICAgICAgICAgICBsaW5lU3RhcnQ6IHRoaXMuc2Nhbm5lci5saW5lU3RhcnQsXG5cdCAgICAgICAgICAgICAgICBzdGFydDogc3RhcnQsXG5cdCAgICAgICAgICAgICAgICBlbmQ6IHRoaXMuc2Nhbm5lci5pbmRleFxuXHQgICAgICAgICAgICB9O1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvLyBgXG5cdCAgICAgICAgaWYgKGNwID09PSA5Nikge1xuXHQgICAgICAgICAgICAvLyBPbmx5IHBsYWNlaG9sZGVyLCBzaW5jZSBpdCB3aWxsIGJlIHJlc2Nhbm5lZCBhcyBhIHJlYWwgYXNzaWdubWVudCBleHByZXNzaW9uLlxuXHQgICAgICAgICAgICByZXR1cm4ge1xuXHQgICAgICAgICAgICAgICAgdHlwZTogMTAgLyogVGVtcGxhdGUgKi8sXG5cdCAgICAgICAgICAgICAgICB2YWx1ZTogJycsXG5cdCAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiB0aGlzLnNjYW5uZXIubGluZU51bWJlcixcblx0ICAgICAgICAgICAgICAgIGxpbmVTdGFydDogdGhpcy5zY2FubmVyLmxpbmVTdGFydCxcblx0ICAgICAgICAgICAgICAgIHN0YXJ0OiB0aGlzLnNjYW5uZXIuaW5kZXgsXG5cdCAgICAgICAgICAgICAgICBlbmQ6IHRoaXMuc2Nhbm5lci5pbmRleFxuXHQgICAgICAgICAgICB9O1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvLyBJZGVudGlmZXIgY2FuIG5vdCBjb250YWluIGJhY2tzbGFzaCAoY2hhciBjb2RlIDkyKS5cblx0ICAgICAgICBpZiAoY2hhcmFjdGVyXzEuQ2hhcmFjdGVyLmlzSWRlbnRpZmllclN0YXJ0KGNwKSAmJiAoY3AgIT09IDkyKSkge1xuXHQgICAgICAgICAgICB2YXIgc3RhcnQgPSB0aGlzLnNjYW5uZXIuaW5kZXg7XG5cdCAgICAgICAgICAgICsrdGhpcy5zY2FubmVyLmluZGV4O1xuXHQgICAgICAgICAgICB3aGlsZSAoIXRoaXMuc2Nhbm5lci5lb2YoKSkge1xuXHQgICAgICAgICAgICAgICAgdmFyIGNoID0gdGhpcy5zY2FubmVyLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMuc2Nhbm5lci5pbmRleCk7XG5cdCAgICAgICAgICAgICAgICBpZiAoY2hhcmFjdGVyXzEuQ2hhcmFjdGVyLmlzSWRlbnRpZmllclBhcnQoY2gpICYmIChjaCAhPT0gOTIpKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgKyt0aGlzLnNjYW5uZXIuaW5kZXg7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICBlbHNlIGlmIChjaCA9PT0gNDUpIHtcblx0ICAgICAgICAgICAgICAgICAgICAvLyBIeXBoZW4gKGNoYXIgY29kZSA0NSkgY2FuIGJlIHBhcnQgb2YgYW4gaWRlbnRpZmllci5cblx0ICAgICAgICAgICAgICAgICAgICArK3RoaXMuc2Nhbm5lci5pbmRleDtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHZhciBpZCA9IHRoaXMuc2Nhbm5lci5zb3VyY2Uuc2xpY2Uoc3RhcnQsIHRoaXMuc2Nhbm5lci5pbmRleCk7XG5cdCAgICAgICAgICAgIHJldHVybiB7XG5cdCAgICAgICAgICAgICAgICB0eXBlOiAxMDAgLyogSWRlbnRpZmllciAqLyxcblx0ICAgICAgICAgICAgICAgIHZhbHVlOiBpZCxcblx0ICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IHRoaXMuc2Nhbm5lci5saW5lTnVtYmVyLFxuXHQgICAgICAgICAgICAgICAgbGluZVN0YXJ0OiB0aGlzLnNjYW5uZXIubGluZVN0YXJ0LFxuXHQgICAgICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LFxuXHQgICAgICAgICAgICAgICAgZW5kOiB0aGlzLnNjYW5uZXIuaW5kZXhcblx0ICAgICAgICAgICAgfTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuc2Nhbm5lci5sZXgoKTtcblx0ICAgIH07XG5cdCAgICBKU1hQYXJzZXIucHJvdG90eXBlLm5leHRKU1hUb2tlbiA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLmNvbGxlY3RDb21tZW50cygpO1xuXHQgICAgICAgIHRoaXMuc3RhcnRNYXJrZXIuaW5kZXggPSB0aGlzLnNjYW5uZXIuaW5kZXg7XG5cdCAgICAgICAgdGhpcy5zdGFydE1hcmtlci5saW5lID0gdGhpcy5zY2FubmVyLmxpbmVOdW1iZXI7XG5cdCAgICAgICAgdGhpcy5zdGFydE1hcmtlci5jb2x1bW4gPSB0aGlzLnNjYW5uZXIuaW5kZXggLSB0aGlzLnNjYW5uZXIubGluZVN0YXJ0O1xuXHQgICAgICAgIHZhciB0b2tlbiA9IHRoaXMubGV4SlNYKCk7XG5cdCAgICAgICAgdGhpcy5sYXN0TWFya2VyLmluZGV4ID0gdGhpcy5zY2FubmVyLmluZGV4O1xuXHQgICAgICAgIHRoaXMubGFzdE1hcmtlci5saW5lID0gdGhpcy5zY2FubmVyLmxpbmVOdW1iZXI7XG5cdCAgICAgICAgdGhpcy5sYXN0TWFya2VyLmNvbHVtbiA9IHRoaXMuc2Nhbm5lci5pbmRleCAtIHRoaXMuc2Nhbm5lci5saW5lU3RhcnQ7XG5cdCAgICAgICAgaWYgKHRoaXMuY29uZmlnLnRva2Vucykge1xuXHQgICAgICAgICAgICB0aGlzLnRva2Vucy5wdXNoKHRoaXMuY29udmVydFRva2VuKHRva2VuKSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0b2tlbjtcblx0ICAgIH07XG5cdCAgICBKU1hQYXJzZXIucHJvdG90eXBlLm5leHRKU1hUZXh0ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuc3RhcnRNYXJrZXIuaW5kZXggPSB0aGlzLnNjYW5uZXIuaW5kZXg7XG5cdCAgICAgICAgdGhpcy5zdGFydE1hcmtlci5saW5lID0gdGhpcy5zY2FubmVyLmxpbmVOdW1iZXI7XG5cdCAgICAgICAgdGhpcy5zdGFydE1hcmtlci5jb2x1bW4gPSB0aGlzLnNjYW5uZXIuaW5kZXggLSB0aGlzLnNjYW5uZXIubGluZVN0YXJ0O1xuXHQgICAgICAgIHZhciBzdGFydCA9IHRoaXMuc2Nhbm5lci5pbmRleDtcblx0ICAgICAgICB2YXIgdGV4dCA9ICcnO1xuXHQgICAgICAgIHdoaWxlICghdGhpcy5zY2FubmVyLmVvZigpKSB7XG5cdCAgICAgICAgICAgIHZhciBjaCA9IHRoaXMuc2Nhbm5lci5zb3VyY2VbdGhpcy5zY2FubmVyLmluZGV4XTtcblx0ICAgICAgICAgICAgaWYgKGNoID09PSAneycgfHwgY2ggPT09ICc8Jykge1xuXHQgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgKyt0aGlzLnNjYW5uZXIuaW5kZXg7XG5cdCAgICAgICAgICAgIHRleHQgKz0gY2g7XG5cdCAgICAgICAgICAgIGlmIChjaGFyYWN0ZXJfMS5DaGFyYWN0ZXIuaXNMaW5lVGVybWluYXRvcihjaC5jaGFyQ29kZUF0KDApKSkge1xuXHQgICAgICAgICAgICAgICAgKyt0aGlzLnNjYW5uZXIubGluZU51bWJlcjtcblx0ICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gJ1xccicgJiYgdGhpcy5zY2FubmVyLnNvdXJjZVt0aGlzLnNjYW5uZXIuaW5kZXhdID09PSAnXFxuJykge1xuXHQgICAgICAgICAgICAgICAgICAgICsrdGhpcy5zY2FubmVyLmluZGV4O1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgdGhpcy5zY2FubmVyLmxpbmVTdGFydCA9IHRoaXMuc2Nhbm5lci5pbmRleDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLmxhc3RNYXJrZXIuaW5kZXggPSB0aGlzLnNjYW5uZXIuaW5kZXg7XG5cdCAgICAgICAgdGhpcy5sYXN0TWFya2VyLmxpbmUgPSB0aGlzLnNjYW5uZXIubGluZU51bWJlcjtcblx0ICAgICAgICB0aGlzLmxhc3RNYXJrZXIuY29sdW1uID0gdGhpcy5zY2FubmVyLmluZGV4IC0gdGhpcy5zY2FubmVyLmxpbmVTdGFydDtcblx0ICAgICAgICB2YXIgdG9rZW4gPSB7XG5cdCAgICAgICAgICAgIHR5cGU6IDEwMSAvKiBUZXh0ICovLFxuXHQgICAgICAgICAgICB2YWx1ZTogdGV4dCxcblx0ICAgICAgICAgICAgbGluZU51bWJlcjogdGhpcy5zY2FubmVyLmxpbmVOdW1iZXIsXG5cdCAgICAgICAgICAgIGxpbmVTdGFydDogdGhpcy5zY2FubmVyLmxpbmVTdGFydCxcblx0ICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LFxuXHQgICAgICAgICAgICBlbmQ6IHRoaXMuc2Nhbm5lci5pbmRleFxuXHQgICAgICAgIH07XG5cdCAgICAgICAgaWYgKCh0ZXh0Lmxlbmd0aCA+IDApICYmIHRoaXMuY29uZmlnLnRva2Vucykge1xuXHQgICAgICAgICAgICB0aGlzLnRva2Vucy5wdXNoKHRoaXMuY29udmVydFRva2VuKHRva2VuKSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0b2tlbjtcblx0ICAgIH07XG5cdCAgICBKU1hQYXJzZXIucHJvdG90eXBlLnBlZWtKU1hUb2tlbiA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgc3RhdGUgPSB0aGlzLnNjYW5uZXIuc2F2ZVN0YXRlKCk7XG5cdCAgICAgICAgdGhpcy5zY2FubmVyLnNjYW5Db21tZW50cygpO1xuXHQgICAgICAgIHZhciBuZXh0ID0gdGhpcy5sZXhKU1goKTtcblx0ICAgICAgICB0aGlzLnNjYW5uZXIucmVzdG9yZVN0YXRlKHN0YXRlKTtcblx0ICAgICAgICByZXR1cm4gbmV4dDtcblx0ICAgIH07XG5cdCAgICAvLyBFeHBlY3QgdGhlIG5leHQgSlNYIHRva2VuIHRvIG1hdGNoIHRoZSBzcGVjaWZpZWQgcHVuY3R1YXRvci5cblx0ICAgIC8vIElmIG5vdCwgYW4gZXhjZXB0aW9uIHdpbGwgYmUgdGhyb3duLlxuXHQgICAgSlNYUGFyc2VyLnByb3RvdHlwZS5leHBlY3RKU1ggPSBmdW5jdGlvbiAodmFsdWUpIHtcblx0ICAgICAgICB2YXIgdG9rZW4gPSB0aGlzLm5leHRKU1hUb2tlbigpO1xuXHQgICAgICAgIGlmICh0b2tlbi50eXBlICE9PSA3IC8qIFB1bmN0dWF0b3IgKi8gfHwgdG9rZW4udmFsdWUgIT09IHZhbHVlKSB7XG5cdCAgICAgICAgICAgIHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4odG9rZW4pO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvLyBSZXR1cm4gdHJ1ZSBpZiB0aGUgbmV4dCBKU1ggdG9rZW4gbWF0Y2hlcyB0aGUgc3BlY2lmaWVkIHB1bmN0dWF0b3IuXG5cdCAgICBKU1hQYXJzZXIucHJvdG90eXBlLm1hdGNoSlNYID0gZnVuY3Rpb24gKHZhbHVlKSB7XG5cdCAgICAgICAgdmFyIG5leHQgPSB0aGlzLnBlZWtKU1hUb2tlbigpO1xuXHQgICAgICAgIHJldHVybiBuZXh0LnR5cGUgPT09IDcgLyogUHVuY3R1YXRvciAqLyAmJiBuZXh0LnZhbHVlID09PSB2YWx1ZTtcblx0ICAgIH07XG5cdCAgICBKU1hQYXJzZXIucHJvdG90eXBlLnBhcnNlSlNYSWRlbnRpZmllciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlSlNYTm9kZSgpO1xuXHQgICAgICAgIHZhciB0b2tlbiA9IHRoaXMubmV4dEpTWFRva2VuKCk7XG5cdCAgICAgICAgaWYgKHRva2VuLnR5cGUgIT09IDEwMCAvKiBJZGVudGlmaWVyICovKSB7XG5cdCAgICAgICAgICAgIHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4odG9rZW4pO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgSlNYTm9kZS5KU1hJZGVudGlmaWVyKHRva2VuLnZhbHVlKSk7XG5cdCAgICB9O1xuXHQgICAgSlNYUGFyc2VyLnByb3RvdHlwZS5wYXJzZUpTWEVsZW1lbnROYW1lID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVKU1hOb2RlKCk7XG5cdCAgICAgICAgdmFyIGVsZW1lbnROYW1lID0gdGhpcy5wYXJzZUpTWElkZW50aWZpZXIoKTtcblx0ICAgICAgICBpZiAodGhpcy5tYXRjaEpTWCgnOicpKSB7XG5cdCAgICAgICAgICAgIHZhciBuYW1lc3BhY2UgPSBlbGVtZW50TmFtZTtcblx0ICAgICAgICAgICAgdGhpcy5leHBlY3RKU1goJzonKTtcblx0ICAgICAgICAgICAgdmFyIG5hbWVfMSA9IHRoaXMucGFyc2VKU1hJZGVudGlmaWVyKCk7XG5cdCAgICAgICAgICAgIGVsZW1lbnROYW1lID0gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgSlNYTm9kZS5KU1hOYW1lc3BhY2VkTmFtZShuYW1lc3BhY2UsIG5hbWVfMSkpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBlbHNlIGlmICh0aGlzLm1hdGNoSlNYKCcuJykpIHtcblx0ICAgICAgICAgICAgd2hpbGUgKHRoaXMubWF0Y2hKU1goJy4nKSkge1xuXHQgICAgICAgICAgICAgICAgdmFyIG9iamVjdCA9IGVsZW1lbnROYW1lO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5leHBlY3RKU1goJy4nKTtcblx0ICAgICAgICAgICAgICAgIHZhciBwcm9wZXJ0eSA9IHRoaXMucGFyc2VKU1hJZGVudGlmaWVyKCk7XG5cdCAgICAgICAgICAgICAgICBlbGVtZW50TmFtZSA9IHRoaXMuZmluYWxpemUobm9kZSwgbmV3IEpTWE5vZGUuSlNYTWVtYmVyRXhwcmVzc2lvbihvYmplY3QsIHByb3BlcnR5KSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIGVsZW1lbnROYW1lO1xuXHQgICAgfTtcblx0ICAgIEpTWFBhcnNlci5wcm90b3R5cGUucGFyc2VKU1hBdHRyaWJ1dGVOYW1lID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVKU1hOb2RlKCk7XG5cdCAgICAgICAgdmFyIGF0dHJpYnV0ZU5hbWU7XG5cdCAgICAgICAgdmFyIGlkZW50aWZpZXIgPSB0aGlzLnBhcnNlSlNYSWRlbnRpZmllcigpO1xuXHQgICAgICAgIGlmICh0aGlzLm1hdGNoSlNYKCc6JykpIHtcblx0ICAgICAgICAgICAgdmFyIG5hbWVzcGFjZSA9IGlkZW50aWZpZXI7XG5cdCAgICAgICAgICAgIHRoaXMuZXhwZWN0SlNYKCc6Jyk7XG5cdCAgICAgICAgICAgIHZhciBuYW1lXzIgPSB0aGlzLnBhcnNlSlNYSWRlbnRpZmllcigpO1xuXHQgICAgICAgICAgICBhdHRyaWJ1dGVOYW1lID0gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgSlNYTm9kZS5KU1hOYW1lc3BhY2VkTmFtZShuYW1lc3BhY2UsIG5hbWVfMikpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBlbHNlIHtcblx0ICAgICAgICAgICAgYXR0cmlidXRlTmFtZSA9IGlkZW50aWZpZXI7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiBhdHRyaWJ1dGVOYW1lO1xuXHQgICAgfTtcblx0ICAgIEpTWFBhcnNlci5wcm90b3R5cGUucGFyc2VKU1hTdHJpbmdMaXRlcmFsQXR0cmlidXRlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVKU1hOb2RlKCk7XG5cdCAgICAgICAgdmFyIHRva2VuID0gdGhpcy5uZXh0SlNYVG9rZW4oKTtcblx0ICAgICAgICBpZiAodG9rZW4udHlwZSAhPT0gOCAvKiBTdHJpbmdMaXRlcmFsICovKSB7XG5cdCAgICAgICAgICAgIHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4odG9rZW4pO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB2YXIgcmF3ID0gdGhpcy5nZXRUb2tlblJhdyh0b2tlbik7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuTGl0ZXJhbCh0b2tlbi52YWx1ZSwgcmF3KSk7XG5cdCAgICB9O1xuXHQgICAgSlNYUGFyc2VyLnByb3RvdHlwZS5wYXJzZUpTWEV4cHJlc3Npb25BdHRyaWJ1dGUgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZUpTWE5vZGUoKTtcblx0ICAgICAgICB0aGlzLmV4cGVjdEpTWCgneycpO1xuXHQgICAgICAgIHRoaXMuZmluaXNoSlNYKCk7XG5cdCAgICAgICAgaWYgKHRoaXMubWF0Y2goJ30nKSkge1xuXHQgICAgICAgICAgICB0aGlzLnRvbGVyYXRlRXJyb3IoJ0pTWCBhdHRyaWJ1dGVzIG11c3Qgb25seSBiZSBhc3NpZ25lZCBhIG5vbi1lbXB0eSBleHByZXNzaW9uJyk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHZhciBleHByZXNzaW9uID0gdGhpcy5wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7XG5cdCAgICAgICAgdGhpcy5yZWVudGVySlNYKCk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IEpTWE5vZGUuSlNYRXhwcmVzc2lvbkNvbnRhaW5lcihleHByZXNzaW9uKSk7XG5cdCAgICB9O1xuXHQgICAgSlNYUGFyc2VyLnByb3RvdHlwZS5wYXJzZUpTWEF0dHJpYnV0ZVZhbHVlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLm1hdGNoSlNYKCd7JykgPyB0aGlzLnBhcnNlSlNYRXhwcmVzc2lvbkF0dHJpYnV0ZSgpIDpcblx0ICAgICAgICAgICAgdGhpcy5tYXRjaEpTWCgnPCcpID8gdGhpcy5wYXJzZUpTWEVsZW1lbnQoKSA6IHRoaXMucGFyc2VKU1hTdHJpbmdMaXRlcmFsQXR0cmlidXRlKCk7XG5cdCAgICB9O1xuXHQgICAgSlNYUGFyc2VyLnByb3RvdHlwZS5wYXJzZUpTWE5hbWVWYWx1ZUF0dHJpYnV0ZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlSlNYTm9kZSgpO1xuXHQgICAgICAgIHZhciBuYW1lID0gdGhpcy5wYXJzZUpTWEF0dHJpYnV0ZU5hbWUoKTtcblx0ICAgICAgICB2YXIgdmFsdWUgPSBudWxsO1xuXHQgICAgICAgIGlmICh0aGlzLm1hdGNoSlNYKCc9JykpIHtcblx0ICAgICAgICAgICAgdGhpcy5leHBlY3RKU1goJz0nKTtcblx0ICAgICAgICAgICAgdmFsdWUgPSB0aGlzLnBhcnNlSlNYQXR0cmlidXRlVmFsdWUoKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IEpTWE5vZGUuSlNYQXR0cmlidXRlKG5hbWUsIHZhbHVlKSk7XG5cdCAgICB9O1xuXHQgICAgSlNYUGFyc2VyLnByb3RvdHlwZS5wYXJzZUpTWFNwcmVhZEF0dHJpYnV0ZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlSlNYTm9kZSgpO1xuXHQgICAgICAgIHRoaXMuZXhwZWN0SlNYKCd7Jyk7XG5cdCAgICAgICAgdGhpcy5leHBlY3RKU1goJy4uLicpO1xuXHQgICAgICAgIHRoaXMuZmluaXNoSlNYKCk7XG5cdCAgICAgICAgdmFyIGFyZ3VtZW50ID0gdGhpcy5wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7XG5cdCAgICAgICAgdGhpcy5yZWVudGVySlNYKCk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IEpTWE5vZGUuSlNYU3ByZWFkQXR0cmlidXRlKGFyZ3VtZW50KSk7XG5cdCAgICB9O1xuXHQgICAgSlNYUGFyc2VyLnByb3RvdHlwZS5wYXJzZUpTWEF0dHJpYnV0ZXMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIGF0dHJpYnV0ZXMgPSBbXTtcblx0ICAgICAgICB3aGlsZSAoIXRoaXMubWF0Y2hKU1goJy8nKSAmJiAhdGhpcy5tYXRjaEpTWCgnPicpKSB7XG5cdCAgICAgICAgICAgIHZhciBhdHRyaWJ1dGUgPSB0aGlzLm1hdGNoSlNYKCd7JykgPyB0aGlzLnBhcnNlSlNYU3ByZWFkQXR0cmlidXRlKCkgOlxuXHQgICAgICAgICAgICAgICAgdGhpcy5wYXJzZUpTWE5hbWVWYWx1ZUF0dHJpYnV0ZSgpO1xuXHQgICAgICAgICAgICBhdHRyaWJ1dGVzLnB1c2goYXR0cmlidXRlKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZXM7XG5cdCAgICB9O1xuXHQgICAgSlNYUGFyc2VyLnByb3RvdHlwZS5wYXJzZUpTWE9wZW5pbmdFbGVtZW50ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVKU1hOb2RlKCk7XG5cdCAgICAgICAgdGhpcy5leHBlY3RKU1goJzwnKTtcblx0ICAgICAgICB2YXIgbmFtZSA9IHRoaXMucGFyc2VKU1hFbGVtZW50TmFtZSgpO1xuXHQgICAgICAgIHZhciBhdHRyaWJ1dGVzID0gdGhpcy5wYXJzZUpTWEF0dHJpYnV0ZXMoKTtcblx0ICAgICAgICB2YXIgc2VsZkNsb3NpbmcgPSB0aGlzLm1hdGNoSlNYKCcvJyk7XG5cdCAgICAgICAgaWYgKHNlbGZDbG9zaW5nKSB7XG5cdCAgICAgICAgICAgIHRoaXMuZXhwZWN0SlNYKCcvJyk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuZXhwZWN0SlNYKCc+Jyk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IEpTWE5vZGUuSlNYT3BlbmluZ0VsZW1lbnQobmFtZSwgc2VsZkNsb3NpbmcsIGF0dHJpYnV0ZXMpKTtcblx0ICAgIH07XG5cdCAgICBKU1hQYXJzZXIucHJvdG90eXBlLnBhcnNlSlNYQm91bmRhcnlFbGVtZW50ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVKU1hOb2RlKCk7XG5cdCAgICAgICAgdGhpcy5leHBlY3RKU1goJzwnKTtcblx0ICAgICAgICBpZiAodGhpcy5tYXRjaEpTWCgnLycpKSB7XG5cdCAgICAgICAgICAgIHRoaXMuZXhwZWN0SlNYKCcvJyk7XG5cdCAgICAgICAgICAgIHZhciBuYW1lXzMgPSB0aGlzLnBhcnNlSlNYRWxlbWVudE5hbWUoKTtcblx0ICAgICAgICAgICAgdGhpcy5leHBlY3RKU1goJz4nKTtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IEpTWE5vZGUuSlNYQ2xvc2luZ0VsZW1lbnQobmFtZV8zKSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHZhciBuYW1lID0gdGhpcy5wYXJzZUpTWEVsZW1lbnROYW1lKCk7XG5cdCAgICAgICAgdmFyIGF0dHJpYnV0ZXMgPSB0aGlzLnBhcnNlSlNYQXR0cmlidXRlcygpO1xuXHQgICAgICAgIHZhciBzZWxmQ2xvc2luZyA9IHRoaXMubWF0Y2hKU1goJy8nKTtcblx0ICAgICAgICBpZiAoc2VsZkNsb3NpbmcpIHtcblx0ICAgICAgICAgICAgdGhpcy5leHBlY3RKU1goJy8nKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5leHBlY3RKU1goJz4nKTtcblx0ICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgSlNYTm9kZS5KU1hPcGVuaW5nRWxlbWVudChuYW1lLCBzZWxmQ2xvc2luZywgYXR0cmlidXRlcykpO1xuXHQgICAgfTtcblx0ICAgIEpTWFBhcnNlci5wcm90b3R5cGUucGFyc2VKU1hFbXB0eUV4cHJlc3Npb24gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZUpTWENoaWxkTm9kZSgpO1xuXHQgICAgICAgIHRoaXMuY29sbGVjdENvbW1lbnRzKCk7XG5cdCAgICAgICAgdGhpcy5sYXN0TWFya2VyLmluZGV4ID0gdGhpcy5zY2FubmVyLmluZGV4O1xuXHQgICAgICAgIHRoaXMubGFzdE1hcmtlci5saW5lID0gdGhpcy5zY2FubmVyLmxpbmVOdW1iZXI7XG5cdCAgICAgICAgdGhpcy5sYXN0TWFya2VyLmNvbHVtbiA9IHRoaXMuc2Nhbm5lci5pbmRleCAtIHRoaXMuc2Nhbm5lci5saW5lU3RhcnQ7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IEpTWE5vZGUuSlNYRW1wdHlFeHByZXNzaW9uKCkpO1xuXHQgICAgfTtcblx0ICAgIEpTWFBhcnNlci5wcm90b3R5cGUucGFyc2VKU1hFeHByZXNzaW9uQ29udGFpbmVyID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVKU1hOb2RlKCk7XG5cdCAgICAgICAgdGhpcy5leHBlY3RKU1goJ3snKTtcblx0ICAgICAgICB2YXIgZXhwcmVzc2lvbjtcblx0ICAgICAgICBpZiAodGhpcy5tYXRjaEpTWCgnfScpKSB7XG5cdCAgICAgICAgICAgIGV4cHJlc3Npb24gPSB0aGlzLnBhcnNlSlNYRW1wdHlFeHByZXNzaW9uKCk7XG5cdCAgICAgICAgICAgIHRoaXMuZXhwZWN0SlNYKCd9Jyk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGVsc2Uge1xuXHQgICAgICAgICAgICB0aGlzLmZpbmlzaEpTWCgpO1xuXHQgICAgICAgICAgICBleHByZXNzaW9uID0gdGhpcy5wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7XG5cdCAgICAgICAgICAgIHRoaXMucmVlbnRlckpTWCgpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgSlNYTm9kZS5KU1hFeHByZXNzaW9uQ29udGFpbmVyKGV4cHJlc3Npb24pKTtcblx0ICAgIH07XG5cdCAgICBKU1hQYXJzZXIucHJvdG90eXBlLnBhcnNlSlNYQ2hpbGRyZW4gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIGNoaWxkcmVuID0gW107XG5cdCAgICAgICAgd2hpbGUgKCF0aGlzLnNjYW5uZXIuZW9mKCkpIHtcblx0ICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZUpTWENoaWxkTm9kZSgpO1xuXHQgICAgICAgICAgICB2YXIgdG9rZW4gPSB0aGlzLm5leHRKU1hUZXh0KCk7XG5cdCAgICAgICAgICAgIGlmICh0b2tlbi5zdGFydCA8IHRva2VuLmVuZCkge1xuXHQgICAgICAgICAgICAgICAgdmFyIHJhdyA9IHRoaXMuZ2V0VG9rZW5SYXcodG9rZW4pO1xuXHQgICAgICAgICAgICAgICAgdmFyIGNoaWxkID0gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgSlNYTm9kZS5KU1hUZXh0KHRva2VuLnZhbHVlLCByYXcpKTtcblx0ICAgICAgICAgICAgICAgIGNoaWxkcmVuLnB1c2goY2hpbGQpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGlmICh0aGlzLnNjYW5uZXIuc291cmNlW3RoaXMuc2Nhbm5lci5pbmRleF0gPT09ICd7Jykge1xuXHQgICAgICAgICAgICAgICAgdmFyIGNvbnRhaW5lciA9IHRoaXMucGFyc2VKU1hFeHByZXNzaW9uQ29udGFpbmVyKCk7XG5cdCAgICAgICAgICAgICAgICBjaGlsZHJlbi5wdXNoKGNvbnRhaW5lcik7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgZWxzZSB7XG5cdCAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gY2hpbGRyZW47XG5cdCAgICB9O1xuXHQgICAgSlNYUGFyc2VyLnByb3RvdHlwZS5wYXJzZUNvbXBsZXhKU1hFbGVtZW50ID0gZnVuY3Rpb24gKGVsKSB7XG5cdCAgICAgICAgdmFyIHN0YWNrID0gW107XG5cdCAgICAgICAgd2hpbGUgKCF0aGlzLnNjYW5uZXIuZW9mKCkpIHtcblx0ICAgICAgICAgICAgZWwuY2hpbGRyZW4gPSBlbC5jaGlsZHJlbi5jb25jYXQodGhpcy5wYXJzZUpTWENoaWxkcmVuKCkpO1xuXHQgICAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlSlNYQ2hpbGROb2RlKCk7XG5cdCAgICAgICAgICAgIHZhciBlbGVtZW50ID0gdGhpcy5wYXJzZUpTWEJvdW5kYXJ5RWxlbWVudCgpO1xuXHQgICAgICAgICAgICBpZiAoZWxlbWVudC50eXBlID09PSBqc3hfc3ludGF4XzEuSlNYU3ludGF4LkpTWE9wZW5pbmdFbGVtZW50KSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgb3BlbmluZyA9IGVsZW1lbnQ7XG5cdCAgICAgICAgICAgICAgICBpZiAob3BlbmluZy5zZWxmQ2xvc2luZykge1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBjaGlsZCA9IHRoaXMuZmluYWxpemUobm9kZSwgbmV3IEpTWE5vZGUuSlNYRWxlbWVudChvcGVuaW5nLCBbXSwgbnVsbCkpO1xuXHQgICAgICAgICAgICAgICAgICAgIGVsLmNoaWxkcmVuLnB1c2goY2hpbGQpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgc3RhY2sucHVzaChlbCk7XG5cdCAgICAgICAgICAgICAgICAgICAgZWwgPSB7IG5vZGU6IG5vZGUsIG9wZW5pbmc6IG9wZW5pbmcsIGNsb3Npbmc6IG51bGwsIGNoaWxkcmVuOiBbXSB9O1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGlmIChlbGVtZW50LnR5cGUgPT09IGpzeF9zeW50YXhfMS5KU1hTeW50YXguSlNYQ2xvc2luZ0VsZW1lbnQpIHtcblx0ICAgICAgICAgICAgICAgIGVsLmNsb3NpbmcgPSBlbGVtZW50O1xuXHQgICAgICAgICAgICAgICAgdmFyIG9wZW5fMSA9IGdldFF1YWxpZmllZEVsZW1lbnROYW1lKGVsLm9wZW5pbmcubmFtZSk7XG5cdCAgICAgICAgICAgICAgICB2YXIgY2xvc2VfMSA9IGdldFF1YWxpZmllZEVsZW1lbnROYW1lKGVsLmNsb3NpbmcubmFtZSk7XG5cdCAgICAgICAgICAgICAgICBpZiAob3Blbl8xICE9PSBjbG9zZV8xKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy50b2xlcmF0ZUVycm9yKCdFeHBlY3RlZCBjb3JyZXNwb25kaW5nIEpTWCBjbG9zaW5nIHRhZyBmb3IgJTAnLCBvcGVuXzEpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgaWYgKHN0YWNrLmxlbmd0aCA+IDApIHtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgY2hpbGQgPSB0aGlzLmZpbmFsaXplKGVsLm5vZGUsIG5ldyBKU1hOb2RlLkpTWEVsZW1lbnQoZWwub3BlbmluZywgZWwuY2hpbGRyZW4sIGVsLmNsb3NpbmcpKTtcblx0ICAgICAgICAgICAgICAgICAgICBlbCA9IHN0YWNrW3N0YWNrLmxlbmd0aCAtIDFdO1xuXHQgICAgICAgICAgICAgICAgICAgIGVsLmNoaWxkcmVuLnB1c2goY2hpbGQpO1xuXHQgICAgICAgICAgICAgICAgICAgIHN0YWNrLnBvcCgpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIGVsO1xuXHQgICAgfTtcblx0ICAgIEpTWFBhcnNlci5wcm90b3R5cGUucGFyc2VKU1hFbGVtZW50ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVKU1hOb2RlKCk7XG5cdCAgICAgICAgdmFyIG9wZW5pbmcgPSB0aGlzLnBhcnNlSlNYT3BlbmluZ0VsZW1lbnQoKTtcblx0ICAgICAgICB2YXIgY2hpbGRyZW4gPSBbXTtcblx0ICAgICAgICB2YXIgY2xvc2luZyA9IG51bGw7XG5cdCAgICAgICAgaWYgKCFvcGVuaW5nLnNlbGZDbG9zaW5nKSB7XG5cdCAgICAgICAgICAgIHZhciBlbCA9IHRoaXMucGFyc2VDb21wbGV4SlNYRWxlbWVudCh7IG5vZGU6IG5vZGUsIG9wZW5pbmc6IG9wZW5pbmcsIGNsb3Npbmc6IGNsb3NpbmcsIGNoaWxkcmVuOiBjaGlsZHJlbiB9KTtcblx0ICAgICAgICAgICAgY2hpbGRyZW4gPSBlbC5jaGlsZHJlbjtcblx0ICAgICAgICAgICAgY2xvc2luZyA9IGVsLmNsb3Npbmc7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBKU1hOb2RlLkpTWEVsZW1lbnQob3BlbmluZywgY2hpbGRyZW4sIGNsb3NpbmcpKTtcblx0ICAgIH07XG5cdCAgICBKU1hQYXJzZXIucHJvdG90eXBlLnBhcnNlSlNYUm9vdCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAvLyBQb3AgdGhlIG9wZW5pbmcgJzwnIGFkZGVkIGZyb20gdGhlIGxvb2thaGVhZC5cblx0ICAgICAgICBpZiAodGhpcy5jb25maWcudG9rZW5zKSB7XG5cdCAgICAgICAgICAgIHRoaXMudG9rZW5zLnBvcCgpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLnN0YXJ0SlNYKCk7XG5cdCAgICAgICAgdmFyIGVsZW1lbnQgPSB0aGlzLnBhcnNlSlNYRWxlbWVudCgpO1xuXHQgICAgICAgIHRoaXMuZmluaXNoSlNYKCk7XG5cdCAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XG5cdCAgICB9O1xuXHQgICAgSlNYUGFyc2VyLnByb3RvdHlwZS5pc1N0YXJ0T2ZFeHByZXNzaW9uID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiBfc3VwZXIucHJvdG90eXBlLmlzU3RhcnRPZkV4cHJlc3Npb24uY2FsbCh0aGlzKSB8fCB0aGlzLm1hdGNoKCc8Jyk7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIEpTWFBhcnNlcjtcblx0fShwYXJzZXJfMS5QYXJzZXIpKTtcblx0ZXhwb3J0cy5KU1hQYXJzZXIgPSBKU1hQYXJzZXI7XG5cblxuLyoqKi8gfSxcbi8qIDQgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdFwidXNlIHN0cmljdFwiO1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdC8vIFNlZSBhbHNvIHRvb2xzL2dlbmVyYXRlLXVuaWNvZGUtcmVnZXguanMuXG5cdHZhciBSZWdleCA9IHtcblx0ICAgIC8vIFVuaWNvZGUgdjguMC4wIE5vbkFzY2lpSWRlbnRpZmllclN0YXJ0OlxuXHQgICAgTm9uQXNjaWlJZGVudGlmaWVyU3RhcnQ6IC9bXFx4QUFcXHhCNVxceEJBXFx4QzAtXFx4RDZcXHhEOC1cXHhGNlxceEY4LVxcdTAyQzFcXHUwMkM2LVxcdTAyRDFcXHUwMkUwLVxcdTAyRTRcXHUwMkVDXFx1MDJFRVxcdTAzNzAtXFx1MDM3NFxcdTAzNzZcXHUwMzc3XFx1MDM3QS1cXHUwMzdEXFx1MDM3RlxcdTAzODZcXHUwMzg4LVxcdTAzOEFcXHUwMzhDXFx1MDM4RS1cXHUwM0ExXFx1MDNBMy1cXHUwM0Y1XFx1MDNGNy1cXHUwNDgxXFx1MDQ4QS1cXHUwNTJGXFx1MDUzMS1cXHUwNTU2XFx1MDU1OVxcdTA1NjEtXFx1MDU4N1xcdTA1RDAtXFx1MDVFQVxcdTA1RjAtXFx1MDVGMlxcdTA2MjAtXFx1MDY0QVxcdTA2NkVcXHUwNjZGXFx1MDY3MS1cXHUwNkQzXFx1MDZENVxcdTA2RTVcXHUwNkU2XFx1MDZFRVxcdTA2RUZcXHUwNkZBLVxcdTA2RkNcXHUwNkZGXFx1MDcxMFxcdTA3MTItXFx1MDcyRlxcdTA3NEQtXFx1MDdBNVxcdTA3QjFcXHUwN0NBLVxcdTA3RUFcXHUwN0Y0XFx1MDdGNVxcdTA3RkFcXHUwODAwLVxcdTA4MTVcXHUwODFBXFx1MDgyNFxcdTA4MjhcXHUwODQwLVxcdTA4NThcXHUwOEEwLVxcdTA4QjRcXHUwOTA0LVxcdTA5MzlcXHUwOTNEXFx1MDk1MFxcdTA5NTgtXFx1MDk2MVxcdTA5NzEtXFx1MDk4MFxcdTA5ODUtXFx1MDk4Q1xcdTA5OEZcXHUwOTkwXFx1MDk5My1cXHUwOUE4XFx1MDlBQS1cXHUwOUIwXFx1MDlCMlxcdTA5QjYtXFx1MDlCOVxcdTA5QkRcXHUwOUNFXFx1MDlEQ1xcdTA5RERcXHUwOURGLVxcdTA5RTFcXHUwOUYwXFx1MDlGMVxcdTBBMDUtXFx1MEEwQVxcdTBBMEZcXHUwQTEwXFx1MEExMy1cXHUwQTI4XFx1MEEyQS1cXHUwQTMwXFx1MEEzMlxcdTBBMzNcXHUwQTM1XFx1MEEzNlxcdTBBMzhcXHUwQTM5XFx1MEE1OS1cXHUwQTVDXFx1MEE1RVxcdTBBNzItXFx1MEE3NFxcdTBBODUtXFx1MEE4RFxcdTBBOEYtXFx1MEE5MVxcdTBBOTMtXFx1MEFBOFxcdTBBQUEtXFx1MEFCMFxcdTBBQjJcXHUwQUIzXFx1MEFCNS1cXHUwQUI5XFx1MEFCRFxcdTBBRDBcXHUwQUUwXFx1MEFFMVxcdTBBRjlcXHUwQjA1LVxcdTBCMENcXHUwQjBGXFx1MEIxMFxcdTBCMTMtXFx1MEIyOFxcdTBCMkEtXFx1MEIzMFxcdTBCMzJcXHUwQjMzXFx1MEIzNS1cXHUwQjM5XFx1MEIzRFxcdTBCNUNcXHUwQjVEXFx1MEI1Ri1cXHUwQjYxXFx1MEI3MVxcdTBCODNcXHUwQjg1LVxcdTBCOEFcXHUwQjhFLVxcdTBCOTBcXHUwQjkyLVxcdTBCOTVcXHUwQjk5XFx1MEI5QVxcdTBCOUNcXHUwQjlFXFx1MEI5RlxcdTBCQTNcXHUwQkE0XFx1MEJBOC1cXHUwQkFBXFx1MEJBRS1cXHUwQkI5XFx1MEJEMFxcdTBDMDUtXFx1MEMwQ1xcdTBDMEUtXFx1MEMxMFxcdTBDMTItXFx1MEMyOFxcdTBDMkEtXFx1MEMzOVxcdTBDM0RcXHUwQzU4LVxcdTBDNUFcXHUwQzYwXFx1MEM2MVxcdTBDODUtXFx1MEM4Q1xcdTBDOEUtXFx1MEM5MFxcdTBDOTItXFx1MENBOFxcdTBDQUEtXFx1MENCM1xcdTBDQjUtXFx1MENCOVxcdTBDQkRcXHUwQ0RFXFx1MENFMFxcdTBDRTFcXHUwQ0YxXFx1MENGMlxcdTBEMDUtXFx1MEQwQ1xcdTBEMEUtXFx1MEQxMFxcdTBEMTItXFx1MEQzQVxcdTBEM0RcXHUwRDRFXFx1MEQ1Ri1cXHUwRDYxXFx1MEQ3QS1cXHUwRDdGXFx1MEQ4NS1cXHUwRDk2XFx1MEQ5QS1cXHUwREIxXFx1MERCMy1cXHUwREJCXFx1MERCRFxcdTBEQzAtXFx1MERDNlxcdTBFMDEtXFx1MEUzMFxcdTBFMzJcXHUwRTMzXFx1MEU0MC1cXHUwRTQ2XFx1MEU4MVxcdTBFODJcXHUwRTg0XFx1MEU4N1xcdTBFODhcXHUwRThBXFx1MEU4RFxcdTBFOTQtXFx1MEU5N1xcdTBFOTktXFx1MEU5RlxcdTBFQTEtXFx1MEVBM1xcdTBFQTVcXHUwRUE3XFx1MEVBQVxcdTBFQUJcXHUwRUFELVxcdTBFQjBcXHUwRUIyXFx1MEVCM1xcdTBFQkRcXHUwRUMwLVxcdTBFQzRcXHUwRUM2XFx1MEVEQy1cXHUwRURGXFx1MEYwMFxcdTBGNDAtXFx1MEY0N1xcdTBGNDktXFx1MEY2Q1xcdTBGODgtXFx1MEY4Q1xcdTEwMDAtXFx1MTAyQVxcdTEwM0ZcXHUxMDUwLVxcdTEwNTVcXHUxMDVBLVxcdTEwNURcXHUxMDYxXFx1MTA2NVxcdTEwNjZcXHUxMDZFLVxcdTEwNzBcXHUxMDc1LVxcdTEwODFcXHUxMDhFXFx1MTBBMC1cXHUxMEM1XFx1MTBDN1xcdTEwQ0RcXHUxMEQwLVxcdTEwRkFcXHUxMEZDLVxcdTEyNDhcXHUxMjRBLVxcdTEyNERcXHUxMjUwLVxcdTEyNTZcXHUxMjU4XFx1MTI1QS1cXHUxMjVEXFx1MTI2MC1cXHUxMjg4XFx1MTI4QS1cXHUxMjhEXFx1MTI5MC1cXHUxMkIwXFx1MTJCMi1cXHUxMkI1XFx1MTJCOC1cXHUxMkJFXFx1MTJDMFxcdTEyQzItXFx1MTJDNVxcdTEyQzgtXFx1MTJENlxcdTEyRDgtXFx1MTMxMFxcdTEzMTItXFx1MTMxNVxcdTEzMTgtXFx1MTM1QVxcdTEzODAtXFx1MTM4RlxcdTEzQTAtXFx1MTNGNVxcdTEzRjgtXFx1MTNGRFxcdTE0MDEtXFx1MTY2Q1xcdTE2NkYtXFx1MTY3RlxcdTE2ODEtXFx1MTY5QVxcdTE2QTAtXFx1MTZFQVxcdTE2RUUtXFx1MTZGOFxcdTE3MDAtXFx1MTcwQ1xcdTE3MEUtXFx1MTcxMVxcdTE3MjAtXFx1MTczMVxcdTE3NDAtXFx1MTc1MVxcdTE3NjAtXFx1MTc2Q1xcdTE3NkUtXFx1MTc3MFxcdTE3ODAtXFx1MTdCM1xcdTE3RDdcXHUxN0RDXFx1MTgyMC1cXHUxODc3XFx1MTg4MC1cXHUxOEE4XFx1MThBQVxcdTE4QjAtXFx1MThGNVxcdTE5MDAtXFx1MTkxRVxcdTE5NTAtXFx1MTk2RFxcdTE5NzAtXFx1MTk3NFxcdTE5ODAtXFx1MTlBQlxcdTE5QjAtXFx1MTlDOVxcdTFBMDAtXFx1MUExNlxcdTFBMjAtXFx1MUE1NFxcdTFBQTdcXHUxQjA1LVxcdTFCMzNcXHUxQjQ1LVxcdTFCNEJcXHUxQjgzLVxcdTFCQTBcXHUxQkFFXFx1MUJBRlxcdTFCQkEtXFx1MUJFNVxcdTFDMDAtXFx1MUMyM1xcdTFDNEQtXFx1MUM0RlxcdTFDNUEtXFx1MUM3RFxcdTFDRTktXFx1MUNFQ1xcdTFDRUUtXFx1MUNGMVxcdTFDRjVcXHUxQ0Y2XFx1MUQwMC1cXHUxREJGXFx1MUUwMC1cXHUxRjE1XFx1MUYxOC1cXHUxRjFEXFx1MUYyMC1cXHUxRjQ1XFx1MUY0OC1cXHUxRjREXFx1MUY1MC1cXHUxRjU3XFx1MUY1OVxcdTFGNUJcXHUxRjVEXFx1MUY1Ri1cXHUxRjdEXFx1MUY4MC1cXHUxRkI0XFx1MUZCNi1cXHUxRkJDXFx1MUZCRVxcdTFGQzItXFx1MUZDNFxcdTFGQzYtXFx1MUZDQ1xcdTFGRDAtXFx1MUZEM1xcdTFGRDYtXFx1MUZEQlxcdTFGRTAtXFx1MUZFQ1xcdTFGRjItXFx1MUZGNFxcdTFGRjYtXFx1MUZGQ1xcdTIwNzFcXHUyMDdGXFx1MjA5MC1cXHUyMDlDXFx1MjEwMlxcdTIxMDdcXHUyMTBBLVxcdTIxMTNcXHUyMTE1XFx1MjExOC1cXHUyMTFEXFx1MjEyNFxcdTIxMjZcXHUyMTI4XFx1MjEyQS1cXHUyMTM5XFx1MjEzQy1cXHUyMTNGXFx1MjE0NS1cXHUyMTQ5XFx1MjE0RVxcdTIxNjAtXFx1MjE4OFxcdTJDMDAtXFx1MkMyRVxcdTJDMzAtXFx1MkM1RVxcdTJDNjAtXFx1MkNFNFxcdTJDRUItXFx1MkNFRVxcdTJDRjJcXHUyQ0YzXFx1MkQwMC1cXHUyRDI1XFx1MkQyN1xcdTJEMkRcXHUyRDMwLVxcdTJENjdcXHUyRDZGXFx1MkQ4MC1cXHUyRDk2XFx1MkRBMC1cXHUyREE2XFx1MkRBOC1cXHUyREFFXFx1MkRCMC1cXHUyREI2XFx1MkRCOC1cXHUyREJFXFx1MkRDMC1cXHUyREM2XFx1MkRDOC1cXHUyRENFXFx1MkREMC1cXHUyREQ2XFx1MkREOC1cXHUyRERFXFx1MzAwNS1cXHUzMDA3XFx1MzAyMS1cXHUzMDI5XFx1MzAzMS1cXHUzMDM1XFx1MzAzOC1cXHUzMDNDXFx1MzA0MS1cXHUzMDk2XFx1MzA5Qi1cXHUzMDlGXFx1MzBBMS1cXHUzMEZBXFx1MzBGQy1cXHUzMEZGXFx1MzEwNS1cXHUzMTJEXFx1MzEzMS1cXHUzMThFXFx1MzFBMC1cXHUzMUJBXFx1MzFGMC1cXHUzMUZGXFx1MzQwMC1cXHU0REI1XFx1NEUwMC1cXHU5RkQ1XFx1QTAwMC1cXHVBNDhDXFx1QTREMC1cXHVBNEZEXFx1QTUwMC1cXHVBNjBDXFx1QTYxMC1cXHVBNjFGXFx1QTYyQVxcdUE2MkJcXHVBNjQwLVxcdUE2NkVcXHVBNjdGLVxcdUE2OURcXHVBNkEwLVxcdUE2RUZcXHVBNzE3LVxcdUE3MUZcXHVBNzIyLVxcdUE3ODhcXHVBNzhCLVxcdUE3QURcXHVBN0IwLVxcdUE3QjdcXHVBN0Y3LVxcdUE4MDFcXHVBODAzLVxcdUE4MDVcXHVBODA3LVxcdUE4MEFcXHVBODBDLVxcdUE4MjJcXHVBODQwLVxcdUE4NzNcXHVBODgyLVxcdUE4QjNcXHVBOEYyLVxcdUE4RjdcXHVBOEZCXFx1QThGRFxcdUE5MEEtXFx1QTkyNVxcdUE5MzAtXFx1QTk0NlxcdUE5NjAtXFx1QTk3Q1xcdUE5ODQtXFx1QTlCMlxcdUE5Q0ZcXHVBOUUwLVxcdUE5RTRcXHVBOUU2LVxcdUE5RUZcXHVBOUZBLVxcdUE5RkVcXHVBQTAwLVxcdUFBMjhcXHVBQTQwLVxcdUFBNDJcXHVBQTQ0LVxcdUFBNEJcXHVBQTYwLVxcdUFBNzZcXHVBQTdBXFx1QUE3RS1cXHVBQUFGXFx1QUFCMVxcdUFBQjVcXHVBQUI2XFx1QUFCOS1cXHVBQUJEXFx1QUFDMFxcdUFBQzJcXHVBQURCLVxcdUFBRERcXHVBQUUwLVxcdUFBRUFcXHVBQUYyLVxcdUFBRjRcXHVBQjAxLVxcdUFCMDZcXHVBQjA5LVxcdUFCMEVcXHVBQjExLVxcdUFCMTZcXHVBQjIwLVxcdUFCMjZcXHVBQjI4LVxcdUFCMkVcXHVBQjMwLVxcdUFCNUFcXHVBQjVDLVxcdUFCNjVcXHVBQjcwLVxcdUFCRTJcXHVBQzAwLVxcdUQ3QTNcXHVEN0IwLVxcdUQ3QzZcXHVEN0NCLVxcdUQ3RkJcXHVGOTAwLVxcdUZBNkRcXHVGQTcwLVxcdUZBRDlcXHVGQjAwLVxcdUZCMDZcXHVGQjEzLVxcdUZCMTdcXHVGQjFEXFx1RkIxRi1cXHVGQjI4XFx1RkIyQS1cXHVGQjM2XFx1RkIzOC1cXHVGQjNDXFx1RkIzRVxcdUZCNDBcXHVGQjQxXFx1RkI0M1xcdUZCNDRcXHVGQjQ2LVxcdUZCQjFcXHVGQkQzLVxcdUZEM0RcXHVGRDUwLVxcdUZEOEZcXHVGRDkyLVxcdUZEQzdcXHVGREYwLVxcdUZERkJcXHVGRTcwLVxcdUZFNzRcXHVGRTc2LVxcdUZFRkNcXHVGRjIxLVxcdUZGM0FcXHVGRjQxLVxcdUZGNUFcXHVGRjY2LVxcdUZGQkVcXHVGRkMyLVxcdUZGQzdcXHVGRkNBLVxcdUZGQ0ZcXHVGRkQyLVxcdUZGRDdcXHVGRkRBLVxcdUZGRENdfFxcdUQ4MDBbXFx1REMwMC1cXHVEQzBCXFx1REMwRC1cXHVEQzI2XFx1REMyOC1cXHVEQzNBXFx1REMzQ1xcdURDM0RcXHVEQzNGLVxcdURDNERcXHVEQzUwLVxcdURDNURcXHVEQzgwLVxcdURDRkFcXHVERDQwLVxcdURENzRcXHVERTgwLVxcdURFOUNcXHVERUEwLVxcdURFRDBcXHVERjAwLVxcdURGMUZcXHVERjMwLVxcdURGNEFcXHVERjUwLVxcdURGNzVcXHVERjgwLVxcdURGOURcXHVERkEwLVxcdURGQzNcXHVERkM4LVxcdURGQ0ZcXHVERkQxLVxcdURGRDVdfFxcdUQ4MDFbXFx1REMwMC1cXHVEQzlEXFx1REQwMC1cXHVERDI3XFx1REQzMC1cXHVERDYzXFx1REUwMC1cXHVERjM2XFx1REY0MC1cXHVERjU1XFx1REY2MC1cXHVERjY3XXxcXHVEODAyW1xcdURDMDAtXFx1REMwNVxcdURDMDhcXHVEQzBBLVxcdURDMzVcXHVEQzM3XFx1REMzOFxcdURDM0NcXHVEQzNGLVxcdURDNTVcXHVEQzYwLVxcdURDNzZcXHVEQzgwLVxcdURDOUVcXHVEQ0UwLVxcdURDRjJcXHVEQ0Y0XFx1RENGNVxcdUREMDAtXFx1REQxNVxcdUREMjAtXFx1REQzOVxcdUREODAtXFx1RERCN1xcdUREQkVcXHVEREJGXFx1REUwMFxcdURFMTAtXFx1REUxM1xcdURFMTUtXFx1REUxN1xcdURFMTktXFx1REUzM1xcdURFNjAtXFx1REU3Q1xcdURFODAtXFx1REU5Q1xcdURFQzAtXFx1REVDN1xcdURFQzktXFx1REVFNFxcdURGMDAtXFx1REYzNVxcdURGNDAtXFx1REY1NVxcdURGNjAtXFx1REY3MlxcdURGODAtXFx1REY5MV18XFx1RDgwM1tcXHVEQzAwLVxcdURDNDhcXHVEQzgwLVxcdURDQjJcXHVEQ0MwLVxcdURDRjJdfFxcdUQ4MDRbXFx1REMwMy1cXHVEQzM3XFx1REM4My1cXHVEQ0FGXFx1RENEMC1cXHVEQ0U4XFx1REQwMy1cXHVERDI2XFx1REQ1MC1cXHVERDcyXFx1REQ3NlxcdUREODMtXFx1RERCMlxcdUREQzEtXFx1RERDNFxcdUREREFcXHVERERDXFx1REUwMC1cXHVERTExXFx1REUxMy1cXHVERTJCXFx1REU4MC1cXHVERTg2XFx1REU4OFxcdURFOEEtXFx1REU4RFxcdURFOEYtXFx1REU5RFxcdURFOUYtXFx1REVBOFxcdURFQjAtXFx1REVERVxcdURGMDUtXFx1REYwQ1xcdURGMEZcXHVERjEwXFx1REYxMy1cXHVERjI4XFx1REYyQS1cXHVERjMwXFx1REYzMlxcdURGMzNcXHVERjM1LVxcdURGMzlcXHVERjNEXFx1REY1MFxcdURGNUQtXFx1REY2MV18XFx1RDgwNVtcXHVEQzgwLVxcdURDQUZcXHVEQ0M0XFx1RENDNVxcdURDQzdcXHVERDgwLVxcdUREQUVcXHVEREQ4LVxcdUREREJcXHVERTAwLVxcdURFMkZcXHVERTQ0XFx1REU4MC1cXHVERUFBXFx1REYwMC1cXHVERjE5XXxcXHVEODA2W1xcdURDQTAtXFx1RENERlxcdURDRkZcXHVERUMwLVxcdURFRjhdfFxcdUQ4MDhbXFx1REMwMC1cXHVERjk5XXxcXHVEODA5W1xcdURDMDAtXFx1REM2RVxcdURDODAtXFx1REQ0M118W1xcdUQ4MENcXHVEODQwLVxcdUQ4NjhcXHVEODZBLVxcdUQ4NkNcXHVEODZGLVxcdUQ4NzJdW1xcdURDMDAtXFx1REZGRl18XFx1RDgwRFtcXHVEQzAwLVxcdURDMkVdfFxcdUQ4MTFbXFx1REMwMC1cXHVERTQ2XXxcXHVEODFBW1xcdURDMDAtXFx1REUzOFxcdURFNDAtXFx1REU1RVxcdURFRDAtXFx1REVFRFxcdURGMDAtXFx1REYyRlxcdURGNDAtXFx1REY0M1xcdURGNjMtXFx1REY3N1xcdURGN0QtXFx1REY4Rl18XFx1RDgxQltcXHVERjAwLVxcdURGNDRcXHVERjUwXFx1REY5My1cXHVERjlGXXxcXHVEODJDW1xcdURDMDBcXHVEQzAxXXxcXHVEODJGW1xcdURDMDAtXFx1REM2QVxcdURDNzAtXFx1REM3Q1xcdURDODAtXFx1REM4OFxcdURDOTAtXFx1REM5OV18XFx1RDgzNVtcXHVEQzAwLVxcdURDNTRcXHVEQzU2LVxcdURDOUNcXHVEQzlFXFx1REM5RlxcdURDQTJcXHVEQ0E1XFx1RENBNlxcdURDQTktXFx1RENBQ1xcdURDQUUtXFx1RENCOVxcdURDQkJcXHVEQ0JELVxcdURDQzNcXHVEQ0M1LVxcdUREMDVcXHVERDA3LVxcdUREMEFcXHVERDBELVxcdUREMTRcXHVERDE2LVxcdUREMUNcXHVERDFFLVxcdUREMzlcXHVERDNCLVxcdUREM0VcXHVERDQwLVxcdURENDRcXHVERDQ2XFx1REQ0QS1cXHVERDUwXFx1REQ1Mi1cXHVERUE1XFx1REVBOC1cXHVERUMwXFx1REVDMi1cXHVERURBXFx1REVEQy1cXHVERUZBXFx1REVGQy1cXHVERjE0XFx1REYxNi1cXHVERjM0XFx1REYzNi1cXHVERjRFXFx1REY1MC1cXHVERjZFXFx1REY3MC1cXHVERjg4XFx1REY4QS1cXHVERkE4XFx1REZBQS1cXHVERkMyXFx1REZDNC1cXHVERkNCXXxcXHVEODNBW1xcdURDMDAtXFx1RENDNF18XFx1RDgzQltcXHVERTAwLVxcdURFMDNcXHVERTA1LVxcdURFMUZcXHVERTIxXFx1REUyMlxcdURFMjRcXHVERTI3XFx1REUyOS1cXHVERTMyXFx1REUzNC1cXHVERTM3XFx1REUzOVxcdURFM0JcXHVERTQyXFx1REU0N1xcdURFNDlcXHVERTRCXFx1REU0RC1cXHVERTRGXFx1REU1MVxcdURFNTJcXHVERTU0XFx1REU1N1xcdURFNTlcXHVERTVCXFx1REU1RFxcdURFNUZcXHVERTYxXFx1REU2MlxcdURFNjRcXHVERTY3LVxcdURFNkFcXHVERTZDLVxcdURFNzJcXHVERTc0LVxcdURFNzdcXHVERTc5LVxcdURFN0NcXHVERTdFXFx1REU4MC1cXHVERTg5XFx1REU4Qi1cXHVERTlCXFx1REVBMS1cXHVERUEzXFx1REVBNS1cXHVERUE5XFx1REVBQi1cXHVERUJCXXxcXHVEODY5W1xcdURDMDAtXFx1REVENlxcdURGMDAtXFx1REZGRl18XFx1RDg2RFtcXHVEQzAwLVxcdURGMzRcXHVERjQwLVxcdURGRkZdfFxcdUQ4NkVbXFx1REMwMC1cXHVEQzFEXFx1REMyMC1cXHVERkZGXXxcXHVEODczW1xcdURDMDAtXFx1REVBMV18XFx1RDg3RVtcXHVEQzAwLVxcdURFMURdLyxcblx0ICAgIC8vIFVuaWNvZGUgdjguMC4wIE5vbkFzY2lpSWRlbnRpZmllclBhcnQ6XG5cdCAgICBOb25Bc2NpaUlkZW50aWZpZXJQYXJ0OiAvW1xceEFBXFx4QjVcXHhCN1xceEJBXFx4QzAtXFx4RDZcXHhEOC1cXHhGNlxceEY4LVxcdTAyQzFcXHUwMkM2LVxcdTAyRDFcXHUwMkUwLVxcdTAyRTRcXHUwMkVDXFx1MDJFRVxcdTAzMDAtXFx1MDM3NFxcdTAzNzZcXHUwMzc3XFx1MDM3QS1cXHUwMzdEXFx1MDM3RlxcdTAzODYtXFx1MDM4QVxcdTAzOENcXHUwMzhFLVxcdTAzQTFcXHUwM0EzLVxcdTAzRjVcXHUwM0Y3LVxcdTA0ODFcXHUwNDgzLVxcdTA0ODdcXHUwNDhBLVxcdTA1MkZcXHUwNTMxLVxcdTA1NTZcXHUwNTU5XFx1MDU2MS1cXHUwNTg3XFx1MDU5MS1cXHUwNUJEXFx1MDVCRlxcdTA1QzFcXHUwNUMyXFx1MDVDNFxcdTA1QzVcXHUwNUM3XFx1MDVEMC1cXHUwNUVBXFx1MDVGMC1cXHUwNUYyXFx1MDYxMC1cXHUwNjFBXFx1MDYyMC1cXHUwNjY5XFx1MDY2RS1cXHUwNkQzXFx1MDZENS1cXHUwNkRDXFx1MDZERi1cXHUwNkU4XFx1MDZFQS1cXHUwNkZDXFx1MDZGRlxcdTA3MTAtXFx1MDc0QVxcdTA3NEQtXFx1MDdCMVxcdTA3QzAtXFx1MDdGNVxcdTA3RkFcXHUwODAwLVxcdTA4MkRcXHUwODQwLVxcdTA4NUJcXHUwOEEwLVxcdTA4QjRcXHUwOEUzLVxcdTA5NjNcXHUwOTY2LVxcdTA5NkZcXHUwOTcxLVxcdTA5ODNcXHUwOTg1LVxcdTA5OENcXHUwOThGXFx1MDk5MFxcdTA5OTMtXFx1MDlBOFxcdTA5QUEtXFx1MDlCMFxcdTA5QjJcXHUwOUI2LVxcdTA5QjlcXHUwOUJDLVxcdTA5QzRcXHUwOUM3XFx1MDlDOFxcdTA5Q0ItXFx1MDlDRVxcdTA5RDdcXHUwOURDXFx1MDlERFxcdTA5REYtXFx1MDlFM1xcdTA5RTYtXFx1MDlGMVxcdTBBMDEtXFx1MEEwM1xcdTBBMDUtXFx1MEEwQVxcdTBBMEZcXHUwQTEwXFx1MEExMy1cXHUwQTI4XFx1MEEyQS1cXHUwQTMwXFx1MEEzMlxcdTBBMzNcXHUwQTM1XFx1MEEzNlxcdTBBMzhcXHUwQTM5XFx1MEEzQ1xcdTBBM0UtXFx1MEE0MlxcdTBBNDdcXHUwQTQ4XFx1MEE0Qi1cXHUwQTREXFx1MEE1MVxcdTBBNTktXFx1MEE1Q1xcdTBBNUVcXHUwQTY2LVxcdTBBNzVcXHUwQTgxLVxcdTBBODNcXHUwQTg1LVxcdTBBOERcXHUwQThGLVxcdTBBOTFcXHUwQTkzLVxcdTBBQThcXHUwQUFBLVxcdTBBQjBcXHUwQUIyXFx1MEFCM1xcdTBBQjUtXFx1MEFCOVxcdTBBQkMtXFx1MEFDNVxcdTBBQzctXFx1MEFDOVxcdTBBQ0ItXFx1MEFDRFxcdTBBRDBcXHUwQUUwLVxcdTBBRTNcXHUwQUU2LVxcdTBBRUZcXHUwQUY5XFx1MEIwMS1cXHUwQjAzXFx1MEIwNS1cXHUwQjBDXFx1MEIwRlxcdTBCMTBcXHUwQjEzLVxcdTBCMjhcXHUwQjJBLVxcdTBCMzBcXHUwQjMyXFx1MEIzM1xcdTBCMzUtXFx1MEIzOVxcdTBCM0MtXFx1MEI0NFxcdTBCNDdcXHUwQjQ4XFx1MEI0Qi1cXHUwQjREXFx1MEI1NlxcdTBCNTdcXHUwQjVDXFx1MEI1RFxcdTBCNUYtXFx1MEI2M1xcdTBCNjYtXFx1MEI2RlxcdTBCNzFcXHUwQjgyXFx1MEI4M1xcdTBCODUtXFx1MEI4QVxcdTBCOEUtXFx1MEI5MFxcdTBCOTItXFx1MEI5NVxcdTBCOTlcXHUwQjlBXFx1MEI5Q1xcdTBCOUVcXHUwQjlGXFx1MEJBM1xcdTBCQTRcXHUwQkE4LVxcdTBCQUFcXHUwQkFFLVxcdTBCQjlcXHUwQkJFLVxcdTBCQzJcXHUwQkM2LVxcdTBCQzhcXHUwQkNBLVxcdTBCQ0RcXHUwQkQwXFx1MEJEN1xcdTBCRTYtXFx1MEJFRlxcdTBDMDAtXFx1MEMwM1xcdTBDMDUtXFx1MEMwQ1xcdTBDMEUtXFx1MEMxMFxcdTBDMTItXFx1MEMyOFxcdTBDMkEtXFx1MEMzOVxcdTBDM0QtXFx1MEM0NFxcdTBDNDYtXFx1MEM0OFxcdTBDNEEtXFx1MEM0RFxcdTBDNTVcXHUwQzU2XFx1MEM1OC1cXHUwQzVBXFx1MEM2MC1cXHUwQzYzXFx1MEM2Ni1cXHUwQzZGXFx1MEM4MS1cXHUwQzgzXFx1MEM4NS1cXHUwQzhDXFx1MEM4RS1cXHUwQzkwXFx1MEM5Mi1cXHUwQ0E4XFx1MENBQS1cXHUwQ0IzXFx1MENCNS1cXHUwQ0I5XFx1MENCQy1cXHUwQ0M0XFx1MENDNi1cXHUwQ0M4XFx1MENDQS1cXHUwQ0NEXFx1MENENVxcdTBDRDZcXHUwQ0RFXFx1MENFMC1cXHUwQ0UzXFx1MENFNi1cXHUwQ0VGXFx1MENGMVxcdTBDRjJcXHUwRDAxLVxcdTBEMDNcXHUwRDA1LVxcdTBEMENcXHUwRDBFLVxcdTBEMTBcXHUwRDEyLVxcdTBEM0FcXHUwRDNELVxcdTBENDRcXHUwRDQ2LVxcdTBENDhcXHUwRDRBLVxcdTBENEVcXHUwRDU3XFx1MEQ1Ri1cXHUwRDYzXFx1MEQ2Ni1cXHUwRDZGXFx1MEQ3QS1cXHUwRDdGXFx1MEQ4MlxcdTBEODNcXHUwRDg1LVxcdTBEOTZcXHUwRDlBLVxcdTBEQjFcXHUwREIzLVxcdTBEQkJcXHUwREJEXFx1MERDMC1cXHUwREM2XFx1MERDQVxcdTBEQ0YtXFx1MERENFxcdTBERDZcXHUwREQ4LVxcdTBEREZcXHUwREU2LVxcdTBERUZcXHUwREYyXFx1MERGM1xcdTBFMDEtXFx1MEUzQVxcdTBFNDAtXFx1MEU0RVxcdTBFNTAtXFx1MEU1OVxcdTBFODFcXHUwRTgyXFx1MEU4NFxcdTBFODdcXHUwRTg4XFx1MEU4QVxcdTBFOERcXHUwRTk0LVxcdTBFOTdcXHUwRTk5LVxcdTBFOUZcXHUwRUExLVxcdTBFQTNcXHUwRUE1XFx1MEVBN1xcdTBFQUFcXHUwRUFCXFx1MEVBRC1cXHUwRUI5XFx1MEVCQi1cXHUwRUJEXFx1MEVDMC1cXHUwRUM0XFx1MEVDNlxcdTBFQzgtXFx1MEVDRFxcdTBFRDAtXFx1MEVEOVxcdTBFREMtXFx1MEVERlxcdTBGMDBcXHUwRjE4XFx1MEYxOVxcdTBGMjAtXFx1MEYyOVxcdTBGMzVcXHUwRjM3XFx1MEYzOVxcdTBGM0UtXFx1MEY0N1xcdTBGNDktXFx1MEY2Q1xcdTBGNzEtXFx1MEY4NFxcdTBGODYtXFx1MEY5N1xcdTBGOTktXFx1MEZCQ1xcdTBGQzZcXHUxMDAwLVxcdTEwNDlcXHUxMDUwLVxcdTEwOURcXHUxMEEwLVxcdTEwQzVcXHUxMEM3XFx1MTBDRFxcdTEwRDAtXFx1MTBGQVxcdTEwRkMtXFx1MTI0OFxcdTEyNEEtXFx1MTI0RFxcdTEyNTAtXFx1MTI1NlxcdTEyNThcXHUxMjVBLVxcdTEyNURcXHUxMjYwLVxcdTEyODhcXHUxMjhBLVxcdTEyOERcXHUxMjkwLVxcdTEyQjBcXHUxMkIyLVxcdTEyQjVcXHUxMkI4LVxcdTEyQkVcXHUxMkMwXFx1MTJDMi1cXHUxMkM1XFx1MTJDOC1cXHUxMkQ2XFx1MTJEOC1cXHUxMzEwXFx1MTMxMi1cXHUxMzE1XFx1MTMxOC1cXHUxMzVBXFx1MTM1RC1cXHUxMzVGXFx1MTM2OS1cXHUxMzcxXFx1MTM4MC1cXHUxMzhGXFx1MTNBMC1cXHUxM0Y1XFx1MTNGOC1cXHUxM0ZEXFx1MTQwMS1cXHUxNjZDXFx1MTY2Ri1cXHUxNjdGXFx1MTY4MS1cXHUxNjlBXFx1MTZBMC1cXHUxNkVBXFx1MTZFRS1cXHUxNkY4XFx1MTcwMC1cXHUxNzBDXFx1MTcwRS1cXHUxNzE0XFx1MTcyMC1cXHUxNzM0XFx1MTc0MC1cXHUxNzUzXFx1MTc2MC1cXHUxNzZDXFx1MTc2RS1cXHUxNzcwXFx1MTc3MlxcdTE3NzNcXHUxNzgwLVxcdTE3RDNcXHUxN0Q3XFx1MTdEQ1xcdTE3RERcXHUxN0UwLVxcdTE3RTlcXHUxODBCLVxcdTE4MERcXHUxODEwLVxcdTE4MTlcXHUxODIwLVxcdTE4NzdcXHUxODgwLVxcdTE4QUFcXHUxOEIwLVxcdTE4RjVcXHUxOTAwLVxcdTE5MUVcXHUxOTIwLVxcdTE5MkJcXHUxOTMwLVxcdTE5M0JcXHUxOTQ2LVxcdTE5NkRcXHUxOTcwLVxcdTE5NzRcXHUxOTgwLVxcdTE5QUJcXHUxOUIwLVxcdTE5QzlcXHUxOUQwLVxcdTE5REFcXHUxQTAwLVxcdTFBMUJcXHUxQTIwLVxcdTFBNUVcXHUxQTYwLVxcdTFBN0NcXHUxQTdGLVxcdTFBODlcXHUxQTkwLVxcdTFBOTlcXHUxQUE3XFx1MUFCMC1cXHUxQUJEXFx1MUIwMC1cXHUxQjRCXFx1MUI1MC1cXHUxQjU5XFx1MUI2Qi1cXHUxQjczXFx1MUI4MC1cXHUxQkYzXFx1MUMwMC1cXHUxQzM3XFx1MUM0MC1cXHUxQzQ5XFx1MUM0RC1cXHUxQzdEXFx1MUNEMC1cXHUxQ0QyXFx1MUNENC1cXHUxQ0Y2XFx1MUNGOFxcdTFDRjlcXHUxRDAwLVxcdTFERjVcXHUxREZDLVxcdTFGMTVcXHUxRjE4LVxcdTFGMURcXHUxRjIwLVxcdTFGNDVcXHUxRjQ4LVxcdTFGNERcXHUxRjUwLVxcdTFGNTdcXHUxRjU5XFx1MUY1QlxcdTFGNURcXHUxRjVGLVxcdTFGN0RcXHUxRjgwLVxcdTFGQjRcXHUxRkI2LVxcdTFGQkNcXHUxRkJFXFx1MUZDMi1cXHUxRkM0XFx1MUZDNi1cXHUxRkNDXFx1MUZEMC1cXHUxRkQzXFx1MUZENi1cXHUxRkRCXFx1MUZFMC1cXHUxRkVDXFx1MUZGMi1cXHUxRkY0XFx1MUZGNi1cXHUxRkZDXFx1MjAwQ1xcdTIwMERcXHUyMDNGXFx1MjA0MFxcdTIwNTRcXHUyMDcxXFx1MjA3RlxcdTIwOTAtXFx1MjA5Q1xcdTIwRDAtXFx1MjBEQ1xcdTIwRTFcXHUyMEU1LVxcdTIwRjBcXHUyMTAyXFx1MjEwN1xcdTIxMEEtXFx1MjExM1xcdTIxMTVcXHUyMTE4LVxcdTIxMURcXHUyMTI0XFx1MjEyNlxcdTIxMjhcXHUyMTJBLVxcdTIxMzlcXHUyMTNDLVxcdTIxM0ZcXHUyMTQ1LVxcdTIxNDlcXHUyMTRFXFx1MjE2MC1cXHUyMTg4XFx1MkMwMC1cXHUyQzJFXFx1MkMzMC1cXHUyQzVFXFx1MkM2MC1cXHUyQ0U0XFx1MkNFQi1cXHUyQ0YzXFx1MkQwMC1cXHUyRDI1XFx1MkQyN1xcdTJEMkRcXHUyRDMwLVxcdTJENjdcXHUyRDZGXFx1MkQ3Ri1cXHUyRDk2XFx1MkRBMC1cXHUyREE2XFx1MkRBOC1cXHUyREFFXFx1MkRCMC1cXHUyREI2XFx1MkRCOC1cXHUyREJFXFx1MkRDMC1cXHUyREM2XFx1MkRDOC1cXHUyRENFXFx1MkREMC1cXHUyREQ2XFx1MkREOC1cXHUyRERFXFx1MkRFMC1cXHUyREZGXFx1MzAwNS1cXHUzMDA3XFx1MzAyMS1cXHUzMDJGXFx1MzAzMS1cXHUzMDM1XFx1MzAzOC1cXHUzMDNDXFx1MzA0MS1cXHUzMDk2XFx1MzA5OS1cXHUzMDlGXFx1MzBBMS1cXHUzMEZBXFx1MzBGQy1cXHUzMEZGXFx1MzEwNS1cXHUzMTJEXFx1MzEzMS1cXHUzMThFXFx1MzFBMC1cXHUzMUJBXFx1MzFGMC1cXHUzMUZGXFx1MzQwMC1cXHU0REI1XFx1NEUwMC1cXHU5RkQ1XFx1QTAwMC1cXHVBNDhDXFx1QTREMC1cXHVBNEZEXFx1QTUwMC1cXHVBNjBDXFx1QTYxMC1cXHVBNjJCXFx1QTY0MC1cXHVBNjZGXFx1QTY3NC1cXHVBNjdEXFx1QTY3Ri1cXHVBNkYxXFx1QTcxNy1cXHVBNzFGXFx1QTcyMi1cXHVBNzg4XFx1QTc4Qi1cXHVBN0FEXFx1QTdCMC1cXHVBN0I3XFx1QTdGNy1cXHVBODI3XFx1QTg0MC1cXHVBODczXFx1QTg4MC1cXHVBOEM0XFx1QThEMC1cXHVBOEQ5XFx1QThFMC1cXHVBOEY3XFx1QThGQlxcdUE4RkRcXHVBOTAwLVxcdUE5MkRcXHVBOTMwLVxcdUE5NTNcXHVBOTYwLVxcdUE5N0NcXHVBOTgwLVxcdUE5QzBcXHVBOUNGLVxcdUE5RDlcXHVBOUUwLVxcdUE5RkVcXHVBQTAwLVxcdUFBMzZcXHVBQTQwLVxcdUFBNERcXHVBQTUwLVxcdUFBNTlcXHVBQTYwLVxcdUFBNzZcXHVBQTdBLVxcdUFBQzJcXHVBQURCLVxcdUFBRERcXHVBQUUwLVxcdUFBRUZcXHVBQUYyLVxcdUFBRjZcXHVBQjAxLVxcdUFCMDZcXHVBQjA5LVxcdUFCMEVcXHVBQjExLVxcdUFCMTZcXHVBQjIwLVxcdUFCMjZcXHVBQjI4LVxcdUFCMkVcXHVBQjMwLVxcdUFCNUFcXHVBQjVDLVxcdUFCNjVcXHVBQjcwLVxcdUFCRUFcXHVBQkVDXFx1QUJFRFxcdUFCRjAtXFx1QUJGOVxcdUFDMDAtXFx1RDdBM1xcdUQ3QjAtXFx1RDdDNlxcdUQ3Q0ItXFx1RDdGQlxcdUY5MDAtXFx1RkE2RFxcdUZBNzAtXFx1RkFEOVxcdUZCMDAtXFx1RkIwNlxcdUZCMTMtXFx1RkIxN1xcdUZCMUQtXFx1RkIyOFxcdUZCMkEtXFx1RkIzNlxcdUZCMzgtXFx1RkIzQ1xcdUZCM0VcXHVGQjQwXFx1RkI0MVxcdUZCNDNcXHVGQjQ0XFx1RkI0Ni1cXHVGQkIxXFx1RkJEMy1cXHVGRDNEXFx1RkQ1MC1cXHVGRDhGXFx1RkQ5Mi1cXHVGREM3XFx1RkRGMC1cXHVGREZCXFx1RkUwMC1cXHVGRTBGXFx1RkUyMC1cXHVGRTJGXFx1RkUzM1xcdUZFMzRcXHVGRTRELVxcdUZFNEZcXHVGRTcwLVxcdUZFNzRcXHVGRTc2LVxcdUZFRkNcXHVGRjEwLVxcdUZGMTlcXHVGRjIxLVxcdUZGM0FcXHVGRjNGXFx1RkY0MS1cXHVGRjVBXFx1RkY2Ni1cXHVGRkJFXFx1RkZDMi1cXHVGRkM3XFx1RkZDQS1cXHVGRkNGXFx1RkZEMi1cXHVGRkQ3XFx1RkZEQS1cXHVGRkRDXXxcXHVEODAwW1xcdURDMDAtXFx1REMwQlxcdURDMEQtXFx1REMyNlxcdURDMjgtXFx1REMzQVxcdURDM0NcXHVEQzNEXFx1REMzRi1cXHVEQzREXFx1REM1MC1cXHVEQzVEXFx1REM4MC1cXHVEQ0ZBXFx1REQ0MC1cXHVERDc0XFx1RERGRFxcdURFODAtXFx1REU5Q1xcdURFQTAtXFx1REVEMFxcdURFRTBcXHVERjAwLVxcdURGMUZcXHVERjMwLVxcdURGNEFcXHVERjUwLVxcdURGN0FcXHVERjgwLVxcdURGOURcXHVERkEwLVxcdURGQzNcXHVERkM4LVxcdURGQ0ZcXHVERkQxLVxcdURGRDVdfFxcdUQ4MDFbXFx1REMwMC1cXHVEQzlEXFx1RENBMC1cXHVEQ0E5XFx1REQwMC1cXHVERDI3XFx1REQzMC1cXHVERDYzXFx1REUwMC1cXHVERjM2XFx1REY0MC1cXHVERjU1XFx1REY2MC1cXHVERjY3XXxcXHVEODAyW1xcdURDMDAtXFx1REMwNVxcdURDMDhcXHVEQzBBLVxcdURDMzVcXHVEQzM3XFx1REMzOFxcdURDM0NcXHVEQzNGLVxcdURDNTVcXHVEQzYwLVxcdURDNzZcXHVEQzgwLVxcdURDOUVcXHVEQ0UwLVxcdURDRjJcXHVEQ0Y0XFx1RENGNVxcdUREMDAtXFx1REQxNVxcdUREMjAtXFx1REQzOVxcdUREODAtXFx1RERCN1xcdUREQkVcXHVEREJGXFx1REUwMC1cXHVERTAzXFx1REUwNVxcdURFMDZcXHVERTBDLVxcdURFMTNcXHVERTE1LVxcdURFMTdcXHVERTE5LVxcdURFMzNcXHVERTM4LVxcdURFM0FcXHVERTNGXFx1REU2MC1cXHVERTdDXFx1REU4MC1cXHVERTlDXFx1REVDMC1cXHVERUM3XFx1REVDOS1cXHVERUU2XFx1REYwMC1cXHVERjM1XFx1REY0MC1cXHVERjU1XFx1REY2MC1cXHVERjcyXFx1REY4MC1cXHVERjkxXXxcXHVEODAzW1xcdURDMDAtXFx1REM0OFxcdURDODAtXFx1RENCMlxcdURDQzAtXFx1RENGMl18XFx1RDgwNFtcXHVEQzAwLVxcdURDNDZcXHVEQzY2LVxcdURDNkZcXHVEQzdGLVxcdURDQkFcXHVEQ0QwLVxcdURDRThcXHVEQ0YwLVxcdURDRjlcXHVERDAwLVxcdUREMzRcXHVERDM2LVxcdUREM0ZcXHVERDUwLVxcdURENzNcXHVERDc2XFx1REQ4MC1cXHVEREM0XFx1RERDQS1cXHVERENDXFx1REREMC1cXHVERERBXFx1REREQ1xcdURFMDAtXFx1REUxMVxcdURFMTMtXFx1REUzN1xcdURFODAtXFx1REU4NlxcdURFODhcXHVERThBLVxcdURFOERcXHVERThGLVxcdURFOURcXHVERTlGLVxcdURFQThcXHVERUIwLVxcdURFRUFcXHVERUYwLVxcdURFRjlcXHVERjAwLVxcdURGMDNcXHVERjA1LVxcdURGMENcXHVERjBGXFx1REYxMFxcdURGMTMtXFx1REYyOFxcdURGMkEtXFx1REYzMFxcdURGMzJcXHVERjMzXFx1REYzNS1cXHVERjM5XFx1REYzQy1cXHVERjQ0XFx1REY0N1xcdURGNDhcXHVERjRCLVxcdURGNERcXHVERjUwXFx1REY1N1xcdURGNUQtXFx1REY2M1xcdURGNjYtXFx1REY2Q1xcdURGNzAtXFx1REY3NF18XFx1RDgwNVtcXHVEQzgwLVxcdURDQzVcXHVEQ0M3XFx1RENEMC1cXHVEQ0Q5XFx1REQ4MC1cXHVEREI1XFx1RERCOC1cXHVEREMwXFx1REREOC1cXHVEREREXFx1REUwMC1cXHVERTQwXFx1REU0NFxcdURFNTAtXFx1REU1OVxcdURFODAtXFx1REVCN1xcdURFQzAtXFx1REVDOVxcdURGMDAtXFx1REYxOVxcdURGMUQtXFx1REYyQlxcdURGMzAtXFx1REYzOV18XFx1RDgwNltcXHVEQ0EwLVxcdURDRTlcXHVEQ0ZGXFx1REVDMC1cXHVERUY4XXxcXHVEODA4W1xcdURDMDAtXFx1REY5OV18XFx1RDgwOVtcXHVEQzAwLVxcdURDNkVcXHVEQzgwLVxcdURENDNdfFtcXHVEODBDXFx1RDg0MC1cXHVEODY4XFx1RDg2QS1cXHVEODZDXFx1RDg2Ri1cXHVEODcyXVtcXHVEQzAwLVxcdURGRkZdfFxcdUQ4MERbXFx1REMwMC1cXHVEQzJFXXxcXHVEODExW1xcdURDMDAtXFx1REU0Nl18XFx1RDgxQVtcXHVEQzAwLVxcdURFMzhcXHVERTQwLVxcdURFNUVcXHVERTYwLVxcdURFNjlcXHVERUQwLVxcdURFRURcXHVERUYwLVxcdURFRjRcXHVERjAwLVxcdURGMzZcXHVERjQwLVxcdURGNDNcXHVERjUwLVxcdURGNTlcXHVERjYzLVxcdURGNzdcXHVERjdELVxcdURGOEZdfFxcdUQ4MUJbXFx1REYwMC1cXHVERjQ0XFx1REY1MC1cXHVERjdFXFx1REY4Ri1cXHVERjlGXXxcXHVEODJDW1xcdURDMDBcXHVEQzAxXXxcXHVEODJGW1xcdURDMDAtXFx1REM2QVxcdURDNzAtXFx1REM3Q1xcdURDODAtXFx1REM4OFxcdURDOTAtXFx1REM5OVxcdURDOURcXHVEQzlFXXxcXHVEODM0W1xcdURENjUtXFx1REQ2OVxcdURENkQtXFx1REQ3MlxcdUREN0ItXFx1REQ4MlxcdUREODUtXFx1REQ4QlxcdUREQUEtXFx1RERBRFxcdURFNDItXFx1REU0NF18XFx1RDgzNVtcXHVEQzAwLVxcdURDNTRcXHVEQzU2LVxcdURDOUNcXHVEQzlFXFx1REM5RlxcdURDQTJcXHVEQ0E1XFx1RENBNlxcdURDQTktXFx1RENBQ1xcdURDQUUtXFx1RENCOVxcdURDQkJcXHVEQ0JELVxcdURDQzNcXHVEQ0M1LVxcdUREMDVcXHVERDA3LVxcdUREMEFcXHVERDBELVxcdUREMTRcXHVERDE2LVxcdUREMUNcXHVERDFFLVxcdUREMzlcXHVERDNCLVxcdUREM0VcXHVERDQwLVxcdURENDRcXHVERDQ2XFx1REQ0QS1cXHVERDUwXFx1REQ1Mi1cXHVERUE1XFx1REVBOC1cXHVERUMwXFx1REVDMi1cXHVERURBXFx1REVEQy1cXHVERUZBXFx1REVGQy1cXHVERjE0XFx1REYxNi1cXHVERjM0XFx1REYzNi1cXHVERjRFXFx1REY1MC1cXHVERjZFXFx1REY3MC1cXHVERjg4XFx1REY4QS1cXHVERkE4XFx1REZBQS1cXHVERkMyXFx1REZDNC1cXHVERkNCXFx1REZDRS1cXHVERkZGXXxcXHVEODM2W1xcdURFMDAtXFx1REUzNlxcdURFM0ItXFx1REU2Q1xcdURFNzVcXHVERTg0XFx1REU5Qi1cXHVERTlGXFx1REVBMS1cXHVERUFGXXxcXHVEODNBW1xcdURDMDAtXFx1RENDNFxcdURDRDAtXFx1RENENl18XFx1RDgzQltcXHVERTAwLVxcdURFMDNcXHVERTA1LVxcdURFMUZcXHVERTIxXFx1REUyMlxcdURFMjRcXHVERTI3XFx1REUyOS1cXHVERTMyXFx1REUzNC1cXHVERTM3XFx1REUzOVxcdURFM0JcXHVERTQyXFx1REU0N1xcdURFNDlcXHVERTRCXFx1REU0RC1cXHVERTRGXFx1REU1MVxcdURFNTJcXHVERTU0XFx1REU1N1xcdURFNTlcXHVERTVCXFx1REU1RFxcdURFNUZcXHVERTYxXFx1REU2MlxcdURFNjRcXHVERTY3LVxcdURFNkFcXHVERTZDLVxcdURFNzJcXHVERTc0LVxcdURFNzdcXHVERTc5LVxcdURFN0NcXHVERTdFXFx1REU4MC1cXHVERTg5XFx1REU4Qi1cXHVERTlCXFx1REVBMS1cXHVERUEzXFx1REVBNS1cXHVERUE5XFx1REVBQi1cXHVERUJCXXxcXHVEODY5W1xcdURDMDAtXFx1REVENlxcdURGMDAtXFx1REZGRl18XFx1RDg2RFtcXHVEQzAwLVxcdURGMzRcXHVERjQwLVxcdURGRkZdfFxcdUQ4NkVbXFx1REMwMC1cXHVEQzFEXFx1REMyMC1cXHVERkZGXXxcXHVEODczW1xcdURDMDAtXFx1REVBMV18XFx1RDg3RVtcXHVEQzAwLVxcdURFMURdfFxcdURCNDBbXFx1REQwMC1cXHVEREVGXS9cblx0fTtcblx0ZXhwb3J0cy5DaGFyYWN0ZXIgPSB7XG5cdCAgICAvKiB0c2xpbnQ6ZGlzYWJsZTpuby1iaXR3aXNlICovXG5cdCAgICBmcm9tQ29kZVBvaW50OiBmdW5jdGlvbiAoY3ApIHtcblx0ICAgICAgICByZXR1cm4gKGNwIDwgMHgxMDAwMCkgPyBTdHJpbmcuZnJvbUNoYXJDb2RlKGNwKSA6XG5cdCAgICAgICAgICAgIFN0cmluZy5mcm9tQ2hhckNvZGUoMHhEODAwICsgKChjcCAtIDB4MTAwMDApID4+IDEwKSkgK1xuXHQgICAgICAgICAgICAgICAgU3RyaW5nLmZyb21DaGFyQ29kZSgweERDMDAgKyAoKGNwIC0gMHgxMDAwMCkgJiAxMDIzKSk7XG5cdCAgICB9LFxuXHQgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtd2hpdGUtc3BhY2Vcblx0ICAgIGlzV2hpdGVTcGFjZTogZnVuY3Rpb24gKGNwKSB7XG5cdCAgICAgICAgcmV0dXJuIChjcCA9PT0gMHgyMCkgfHwgKGNwID09PSAweDA5KSB8fCAoY3AgPT09IDB4MEIpIHx8IChjcCA9PT0gMHgwQykgfHwgKGNwID09PSAweEEwKSB8fFxuXHQgICAgICAgICAgICAoY3AgPj0gMHgxNjgwICYmIFsweDE2ODAsIDB4MjAwMCwgMHgyMDAxLCAweDIwMDIsIDB4MjAwMywgMHgyMDA0LCAweDIwMDUsIDB4MjAwNiwgMHgyMDA3LCAweDIwMDgsIDB4MjAwOSwgMHgyMDBBLCAweDIwMkYsIDB4MjA1RiwgMHgzMDAwLCAweEZFRkZdLmluZGV4T2YoY3ApID49IDApO1xuXHQgICAgfSxcblx0ICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWxpbmUtdGVybWluYXRvcnNcblx0ICAgIGlzTGluZVRlcm1pbmF0b3I6IGZ1bmN0aW9uIChjcCkge1xuXHQgICAgICAgIHJldHVybiAoY3AgPT09IDB4MEEpIHx8IChjcCA9PT0gMHgwRCkgfHwgKGNwID09PSAweDIwMjgpIHx8IChjcCA9PT0gMHgyMDI5KTtcblx0ICAgIH0sXG5cdCAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1uYW1lcy1hbmQta2V5d29yZHNcblx0ICAgIGlzSWRlbnRpZmllclN0YXJ0OiBmdW5jdGlvbiAoY3ApIHtcblx0ICAgICAgICByZXR1cm4gKGNwID09PSAweDI0KSB8fCAoY3AgPT09IDB4NUYpIHx8XG5cdCAgICAgICAgICAgIChjcCA+PSAweDQxICYmIGNwIDw9IDB4NUEpIHx8XG5cdCAgICAgICAgICAgIChjcCA+PSAweDYxICYmIGNwIDw9IDB4N0EpIHx8XG5cdCAgICAgICAgICAgIChjcCA9PT0gMHg1QykgfHxcblx0ICAgICAgICAgICAgKChjcCA+PSAweDgwKSAmJiBSZWdleC5Ob25Bc2NpaUlkZW50aWZpZXJTdGFydC50ZXN0KGV4cG9ydHMuQ2hhcmFjdGVyLmZyb21Db2RlUG9pbnQoY3ApKSk7XG5cdCAgICB9LFxuXHQgICAgaXNJZGVudGlmaWVyUGFydDogZnVuY3Rpb24gKGNwKSB7XG5cdCAgICAgICAgcmV0dXJuIChjcCA9PT0gMHgyNCkgfHwgKGNwID09PSAweDVGKSB8fFxuXHQgICAgICAgICAgICAoY3AgPj0gMHg0MSAmJiBjcCA8PSAweDVBKSB8fFxuXHQgICAgICAgICAgICAoY3AgPj0gMHg2MSAmJiBjcCA8PSAweDdBKSB8fFxuXHQgICAgICAgICAgICAoY3AgPj0gMHgzMCAmJiBjcCA8PSAweDM5KSB8fFxuXHQgICAgICAgICAgICAoY3AgPT09IDB4NUMpIHx8XG5cdCAgICAgICAgICAgICgoY3AgPj0gMHg4MCkgJiYgUmVnZXguTm9uQXNjaWlJZGVudGlmaWVyUGFydC50ZXN0KGV4cG9ydHMuQ2hhcmFjdGVyLmZyb21Db2RlUG9pbnQoY3ApKSk7XG5cdCAgICB9LFxuXHQgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtbGl0ZXJhbHMtbnVtZXJpYy1saXRlcmFsc1xuXHQgICAgaXNEZWNpbWFsRGlnaXQ6IGZ1bmN0aW9uIChjcCkge1xuXHQgICAgICAgIHJldHVybiAoY3AgPj0gMHgzMCAmJiBjcCA8PSAweDM5KTsgLy8gMC4uOVxuXHQgICAgfSxcblx0ICAgIGlzSGV4RGlnaXQ6IGZ1bmN0aW9uIChjcCkge1xuXHQgICAgICAgIHJldHVybiAoY3AgPj0gMHgzMCAmJiBjcCA8PSAweDM5KSB8fFxuXHQgICAgICAgICAgICAoY3AgPj0gMHg0MSAmJiBjcCA8PSAweDQ2KSB8fFxuXHQgICAgICAgICAgICAoY3AgPj0gMHg2MSAmJiBjcCA8PSAweDY2KTsgLy8gYS4uZlxuXHQgICAgfSxcblx0ICAgIGlzT2N0YWxEaWdpdDogZnVuY3Rpb24gKGNwKSB7XG5cdCAgICAgICAgcmV0dXJuIChjcCA+PSAweDMwICYmIGNwIDw9IDB4MzcpOyAvLyAwLi43XG5cdCAgICB9XG5cdH07XG5cblxuLyoqKi8gfSxcbi8qIDUgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdFwidXNlIHN0cmljdFwiO1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdHZhciBqc3hfc3ludGF4XzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYpO1xuXHQvKiB0c2xpbnQ6ZGlzYWJsZTptYXgtY2xhc3Nlcy1wZXItZmlsZSAqL1xuXHR2YXIgSlNYQ2xvc2luZ0VsZW1lbnQgPSAoZnVuY3Rpb24gKCkge1xuXHQgICAgZnVuY3Rpb24gSlNYQ2xvc2luZ0VsZW1lbnQobmFtZSkge1xuXHQgICAgICAgIHRoaXMudHlwZSA9IGpzeF9zeW50YXhfMS5KU1hTeW50YXguSlNYQ2xvc2luZ0VsZW1lbnQ7XG5cdCAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcblx0ICAgIH1cblx0ICAgIHJldHVybiBKU1hDbG9zaW5nRWxlbWVudDtcblx0fSgpKTtcblx0ZXhwb3J0cy5KU1hDbG9zaW5nRWxlbWVudCA9IEpTWENsb3NpbmdFbGVtZW50O1xuXHR2YXIgSlNYRWxlbWVudCA9IChmdW5jdGlvbiAoKSB7XG5cdCAgICBmdW5jdGlvbiBKU1hFbGVtZW50KG9wZW5pbmdFbGVtZW50LCBjaGlsZHJlbiwgY2xvc2luZ0VsZW1lbnQpIHtcblx0ICAgICAgICB0aGlzLnR5cGUgPSBqc3hfc3ludGF4XzEuSlNYU3ludGF4LkpTWEVsZW1lbnQ7XG5cdCAgICAgICAgdGhpcy5vcGVuaW5nRWxlbWVudCA9IG9wZW5pbmdFbGVtZW50O1xuXHQgICAgICAgIHRoaXMuY2hpbGRyZW4gPSBjaGlsZHJlbjtcblx0ICAgICAgICB0aGlzLmNsb3NpbmdFbGVtZW50ID0gY2xvc2luZ0VsZW1lbnQ7XG5cdCAgICB9XG5cdCAgICByZXR1cm4gSlNYRWxlbWVudDtcblx0fSgpKTtcblx0ZXhwb3J0cy5KU1hFbGVtZW50ID0gSlNYRWxlbWVudDtcblx0dmFyIEpTWEVtcHR5RXhwcmVzc2lvbiA9IChmdW5jdGlvbiAoKSB7XG5cdCAgICBmdW5jdGlvbiBKU1hFbXB0eUV4cHJlc3Npb24oKSB7XG5cdCAgICAgICAgdGhpcy50eXBlID0ganN4X3N5bnRheF8xLkpTWFN5bnRheC5KU1hFbXB0eUV4cHJlc3Npb247XG5cdCAgICB9XG5cdCAgICByZXR1cm4gSlNYRW1wdHlFeHByZXNzaW9uO1xuXHR9KCkpO1xuXHRleHBvcnRzLkpTWEVtcHR5RXhwcmVzc2lvbiA9IEpTWEVtcHR5RXhwcmVzc2lvbjtcblx0dmFyIEpTWEV4cHJlc3Npb25Db250YWluZXIgPSAoZnVuY3Rpb24gKCkge1xuXHQgICAgZnVuY3Rpb24gSlNYRXhwcmVzc2lvbkNvbnRhaW5lcihleHByZXNzaW9uKSB7XG5cdCAgICAgICAgdGhpcy50eXBlID0ganN4X3N5bnRheF8xLkpTWFN5bnRheC5KU1hFeHByZXNzaW9uQ29udGFpbmVyO1xuXHQgICAgICAgIHRoaXMuZXhwcmVzc2lvbiA9IGV4cHJlc3Npb247XG5cdCAgICB9XG5cdCAgICByZXR1cm4gSlNYRXhwcmVzc2lvbkNvbnRhaW5lcjtcblx0fSgpKTtcblx0ZXhwb3J0cy5KU1hFeHByZXNzaW9uQ29udGFpbmVyID0gSlNYRXhwcmVzc2lvbkNvbnRhaW5lcjtcblx0dmFyIEpTWElkZW50aWZpZXIgPSAoZnVuY3Rpb24gKCkge1xuXHQgICAgZnVuY3Rpb24gSlNYSWRlbnRpZmllcihuYW1lKSB7XG5cdCAgICAgICAgdGhpcy50eXBlID0ganN4X3N5bnRheF8xLkpTWFN5bnRheC5KU1hJZGVudGlmaWVyO1xuXHQgICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG5cdCAgICB9XG5cdCAgICByZXR1cm4gSlNYSWRlbnRpZmllcjtcblx0fSgpKTtcblx0ZXhwb3J0cy5KU1hJZGVudGlmaWVyID0gSlNYSWRlbnRpZmllcjtcblx0dmFyIEpTWE1lbWJlckV4cHJlc3Npb24gPSAoZnVuY3Rpb24gKCkge1xuXHQgICAgZnVuY3Rpb24gSlNYTWVtYmVyRXhwcmVzc2lvbihvYmplY3QsIHByb3BlcnR5KSB7XG5cdCAgICAgICAgdGhpcy50eXBlID0ganN4X3N5bnRheF8xLkpTWFN5bnRheC5KU1hNZW1iZXJFeHByZXNzaW9uO1xuXHQgICAgICAgIHRoaXMub2JqZWN0ID0gb2JqZWN0O1xuXHQgICAgICAgIHRoaXMucHJvcGVydHkgPSBwcm9wZXJ0eTtcblx0ICAgIH1cblx0ICAgIHJldHVybiBKU1hNZW1iZXJFeHByZXNzaW9uO1xuXHR9KCkpO1xuXHRleHBvcnRzLkpTWE1lbWJlckV4cHJlc3Npb24gPSBKU1hNZW1iZXJFeHByZXNzaW9uO1xuXHR2YXIgSlNYQXR0cmlidXRlID0gKGZ1bmN0aW9uICgpIHtcblx0ICAgIGZ1bmN0aW9uIEpTWEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSkge1xuXHQgICAgICAgIHRoaXMudHlwZSA9IGpzeF9zeW50YXhfMS5KU1hTeW50YXguSlNYQXR0cmlidXRlO1xuXHQgICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG5cdCAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuXHQgICAgfVxuXHQgICAgcmV0dXJuIEpTWEF0dHJpYnV0ZTtcblx0fSgpKTtcblx0ZXhwb3J0cy5KU1hBdHRyaWJ1dGUgPSBKU1hBdHRyaWJ1dGU7XG5cdHZhciBKU1hOYW1lc3BhY2VkTmFtZSA9IChmdW5jdGlvbiAoKSB7XG5cdCAgICBmdW5jdGlvbiBKU1hOYW1lc3BhY2VkTmFtZShuYW1lc3BhY2UsIG5hbWUpIHtcblx0ICAgICAgICB0aGlzLnR5cGUgPSBqc3hfc3ludGF4XzEuSlNYU3ludGF4LkpTWE5hbWVzcGFjZWROYW1lO1xuXHQgICAgICAgIHRoaXMubmFtZXNwYWNlID0gbmFtZXNwYWNlO1xuXHQgICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG5cdCAgICB9XG5cdCAgICByZXR1cm4gSlNYTmFtZXNwYWNlZE5hbWU7XG5cdH0oKSk7XG5cdGV4cG9ydHMuSlNYTmFtZXNwYWNlZE5hbWUgPSBKU1hOYW1lc3BhY2VkTmFtZTtcblx0dmFyIEpTWE9wZW5pbmdFbGVtZW50ID0gKGZ1bmN0aW9uICgpIHtcblx0ICAgIGZ1bmN0aW9uIEpTWE9wZW5pbmdFbGVtZW50KG5hbWUsIHNlbGZDbG9zaW5nLCBhdHRyaWJ1dGVzKSB7XG5cdCAgICAgICAgdGhpcy50eXBlID0ganN4X3N5bnRheF8xLkpTWFN5bnRheC5KU1hPcGVuaW5nRWxlbWVudDtcblx0ICAgICAgICB0aGlzLm5hbWUgPSBuYW1lO1xuXHQgICAgICAgIHRoaXMuc2VsZkNsb3NpbmcgPSBzZWxmQ2xvc2luZztcblx0ICAgICAgICB0aGlzLmF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzO1xuXHQgICAgfVxuXHQgICAgcmV0dXJuIEpTWE9wZW5pbmdFbGVtZW50O1xuXHR9KCkpO1xuXHRleHBvcnRzLkpTWE9wZW5pbmdFbGVtZW50ID0gSlNYT3BlbmluZ0VsZW1lbnQ7XG5cdHZhciBKU1hTcHJlYWRBdHRyaWJ1dGUgPSAoZnVuY3Rpb24gKCkge1xuXHQgICAgZnVuY3Rpb24gSlNYU3ByZWFkQXR0cmlidXRlKGFyZ3VtZW50KSB7XG5cdCAgICAgICAgdGhpcy50eXBlID0ganN4X3N5bnRheF8xLkpTWFN5bnRheC5KU1hTcHJlYWRBdHRyaWJ1dGU7XG5cdCAgICAgICAgdGhpcy5hcmd1bWVudCA9IGFyZ3VtZW50O1xuXHQgICAgfVxuXHQgICAgcmV0dXJuIEpTWFNwcmVhZEF0dHJpYnV0ZTtcblx0fSgpKTtcblx0ZXhwb3J0cy5KU1hTcHJlYWRBdHRyaWJ1dGUgPSBKU1hTcHJlYWRBdHRyaWJ1dGU7XG5cdHZhciBKU1hUZXh0ID0gKGZ1bmN0aW9uICgpIHtcblx0ICAgIGZ1bmN0aW9uIEpTWFRleHQodmFsdWUsIHJhdykge1xuXHQgICAgICAgIHRoaXMudHlwZSA9IGpzeF9zeW50YXhfMS5KU1hTeW50YXguSlNYVGV4dDtcblx0ICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG5cdCAgICAgICAgdGhpcy5yYXcgPSByYXc7XG5cdCAgICB9XG5cdCAgICByZXR1cm4gSlNYVGV4dDtcblx0fSgpKTtcblx0ZXhwb3J0cy5KU1hUZXh0ID0gSlNYVGV4dDtcblxuXG4vKioqLyB9LFxuLyogNiAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0XCJ1c2Ugc3RyaWN0XCI7XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0ZXhwb3J0cy5KU1hTeW50YXggPSB7XG5cdCAgICBKU1hBdHRyaWJ1dGU6ICdKU1hBdHRyaWJ1dGUnLFxuXHQgICAgSlNYQ2xvc2luZ0VsZW1lbnQ6ICdKU1hDbG9zaW5nRWxlbWVudCcsXG5cdCAgICBKU1hFbGVtZW50OiAnSlNYRWxlbWVudCcsXG5cdCAgICBKU1hFbXB0eUV4cHJlc3Npb246ICdKU1hFbXB0eUV4cHJlc3Npb24nLFxuXHQgICAgSlNYRXhwcmVzc2lvbkNvbnRhaW5lcjogJ0pTWEV4cHJlc3Npb25Db250YWluZXInLFxuXHQgICAgSlNYSWRlbnRpZmllcjogJ0pTWElkZW50aWZpZXInLFxuXHQgICAgSlNYTWVtYmVyRXhwcmVzc2lvbjogJ0pTWE1lbWJlckV4cHJlc3Npb24nLFxuXHQgICAgSlNYTmFtZXNwYWNlZE5hbWU6ICdKU1hOYW1lc3BhY2VkTmFtZScsXG5cdCAgICBKU1hPcGVuaW5nRWxlbWVudDogJ0pTWE9wZW5pbmdFbGVtZW50Jyxcblx0ICAgIEpTWFNwcmVhZEF0dHJpYnV0ZTogJ0pTWFNwcmVhZEF0dHJpYnV0ZScsXG5cdCAgICBKU1hUZXh0OiAnSlNYVGV4dCdcblx0fTtcblxuXG4vKioqLyB9LFxuLyogNyAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0XCJ1c2Ugc3RyaWN0XCI7XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0dmFyIHN5bnRheF8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKTtcblx0LyogdHNsaW50OmRpc2FibGU6bWF4LWNsYXNzZXMtcGVyLWZpbGUgKi9cblx0dmFyIEFycmF5RXhwcmVzc2lvbiA9IChmdW5jdGlvbiAoKSB7XG5cdCAgICBmdW5jdGlvbiBBcnJheUV4cHJlc3Npb24oZWxlbWVudHMpIHtcblx0ICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhfMS5TeW50YXguQXJyYXlFeHByZXNzaW9uO1xuXHQgICAgICAgIHRoaXMuZWxlbWVudHMgPSBlbGVtZW50cztcblx0ICAgIH1cblx0ICAgIHJldHVybiBBcnJheUV4cHJlc3Npb247XG5cdH0oKSk7XG5cdGV4cG9ydHMuQXJyYXlFeHByZXNzaW9uID0gQXJyYXlFeHByZXNzaW9uO1xuXHR2YXIgQXJyYXlQYXR0ZXJuID0gKGZ1bmN0aW9uICgpIHtcblx0ICAgIGZ1bmN0aW9uIEFycmF5UGF0dGVybihlbGVtZW50cykge1xuXHQgICAgICAgIHRoaXMudHlwZSA9IHN5bnRheF8xLlN5bnRheC5BcnJheVBhdHRlcm47XG5cdCAgICAgICAgdGhpcy5lbGVtZW50cyA9IGVsZW1lbnRzO1xuXHQgICAgfVxuXHQgICAgcmV0dXJuIEFycmF5UGF0dGVybjtcblx0fSgpKTtcblx0ZXhwb3J0cy5BcnJheVBhdHRlcm4gPSBBcnJheVBhdHRlcm47XG5cdHZhciBBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbiA9IChmdW5jdGlvbiAoKSB7XG5cdCAgICBmdW5jdGlvbiBBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbihwYXJhbXMsIGJvZHksIGV4cHJlc3Npb24pIHtcblx0ICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhfMS5TeW50YXguQXJyb3dGdW5jdGlvbkV4cHJlc3Npb247XG5cdCAgICAgICAgdGhpcy5pZCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5wYXJhbXMgPSBwYXJhbXM7XG5cdCAgICAgICAgdGhpcy5ib2R5ID0gYm9keTtcblx0ICAgICAgICB0aGlzLmdlbmVyYXRvciA9IGZhbHNlO1xuXHQgICAgICAgIHRoaXMuZXhwcmVzc2lvbiA9IGV4cHJlc3Npb247XG5cdCAgICAgICAgdGhpcy5hc3luYyA9IGZhbHNlO1xuXHQgICAgfVxuXHQgICAgcmV0dXJuIEFycm93RnVuY3Rpb25FeHByZXNzaW9uO1xuXHR9KCkpO1xuXHRleHBvcnRzLkFycm93RnVuY3Rpb25FeHByZXNzaW9uID0gQXJyb3dGdW5jdGlvbkV4cHJlc3Npb247XG5cdHZhciBBc3NpZ25tZW50RXhwcmVzc2lvbiA9IChmdW5jdGlvbiAoKSB7XG5cdCAgICBmdW5jdGlvbiBBc3NpZ25tZW50RXhwcmVzc2lvbihvcGVyYXRvciwgbGVmdCwgcmlnaHQpIHtcblx0ICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhfMS5TeW50YXguQXNzaWdubWVudEV4cHJlc3Npb247XG5cdCAgICAgICAgdGhpcy5vcGVyYXRvciA9IG9wZXJhdG9yO1xuXHQgICAgICAgIHRoaXMubGVmdCA9IGxlZnQ7XG5cdCAgICAgICAgdGhpcy5yaWdodCA9IHJpZ2h0O1xuXHQgICAgfVxuXHQgICAgcmV0dXJuIEFzc2lnbm1lbnRFeHByZXNzaW9uO1xuXHR9KCkpO1xuXHRleHBvcnRzLkFzc2lnbm1lbnRFeHByZXNzaW9uID0gQXNzaWdubWVudEV4cHJlc3Npb247XG5cdHZhciBBc3NpZ25tZW50UGF0dGVybiA9IChmdW5jdGlvbiAoKSB7XG5cdCAgICBmdW5jdGlvbiBBc3NpZ25tZW50UGF0dGVybihsZWZ0LCByaWdodCkge1xuXHQgICAgICAgIHRoaXMudHlwZSA9IHN5bnRheF8xLlN5bnRheC5Bc3NpZ25tZW50UGF0dGVybjtcblx0ICAgICAgICB0aGlzLmxlZnQgPSBsZWZ0O1xuXHQgICAgICAgIHRoaXMucmlnaHQgPSByaWdodDtcblx0ICAgIH1cblx0ICAgIHJldHVybiBBc3NpZ25tZW50UGF0dGVybjtcblx0fSgpKTtcblx0ZXhwb3J0cy5Bc3NpZ25tZW50UGF0dGVybiA9IEFzc2lnbm1lbnRQYXR0ZXJuO1xuXHR2YXIgQXN5bmNBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbiA9IChmdW5jdGlvbiAoKSB7XG5cdCAgICBmdW5jdGlvbiBBc3luY0Fycm93RnVuY3Rpb25FeHByZXNzaW9uKHBhcmFtcywgYm9keSwgZXhwcmVzc2lvbikge1xuXHQgICAgICAgIHRoaXMudHlwZSA9IHN5bnRheF8xLlN5bnRheC5BcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbjtcblx0ICAgICAgICB0aGlzLmlkID0gbnVsbDtcblx0ICAgICAgICB0aGlzLnBhcmFtcyA9IHBhcmFtcztcblx0ICAgICAgICB0aGlzLmJvZHkgPSBib2R5O1xuXHQgICAgICAgIHRoaXMuZ2VuZXJhdG9yID0gZmFsc2U7XG5cdCAgICAgICAgdGhpcy5leHByZXNzaW9uID0gZXhwcmVzc2lvbjtcblx0ICAgICAgICB0aGlzLmFzeW5jID0gdHJ1ZTtcblx0ICAgIH1cblx0ICAgIHJldHVybiBBc3luY0Fycm93RnVuY3Rpb25FeHByZXNzaW9uO1xuXHR9KCkpO1xuXHRleHBvcnRzLkFzeW5jQXJyb3dGdW5jdGlvbkV4cHJlc3Npb24gPSBBc3luY0Fycm93RnVuY3Rpb25FeHByZXNzaW9uO1xuXHR2YXIgQXN5bmNGdW5jdGlvbkRlY2xhcmF0aW9uID0gKGZ1bmN0aW9uICgpIHtcblx0ICAgIGZ1bmN0aW9uIEFzeW5jRnVuY3Rpb25EZWNsYXJhdGlvbihpZCwgcGFyYW1zLCBib2R5KSB7XG5cdCAgICAgICAgdGhpcy50eXBlID0gc3ludGF4XzEuU3ludGF4LkZ1bmN0aW9uRGVjbGFyYXRpb247XG5cdCAgICAgICAgdGhpcy5pZCA9IGlkO1xuXHQgICAgICAgIHRoaXMucGFyYW1zID0gcGFyYW1zO1xuXHQgICAgICAgIHRoaXMuYm9keSA9IGJvZHk7XG5cdCAgICAgICAgdGhpcy5nZW5lcmF0b3IgPSBmYWxzZTtcblx0ICAgICAgICB0aGlzLmV4cHJlc3Npb24gPSBmYWxzZTtcblx0ICAgICAgICB0aGlzLmFzeW5jID0gdHJ1ZTtcblx0ICAgIH1cblx0ICAgIHJldHVybiBBc3luY0Z1bmN0aW9uRGVjbGFyYXRpb247XG5cdH0oKSk7XG5cdGV4cG9ydHMuQXN5bmNGdW5jdGlvbkRlY2xhcmF0aW9uID0gQXN5bmNGdW5jdGlvbkRlY2xhcmF0aW9uO1xuXHR2YXIgQXN5bmNGdW5jdGlvbkV4cHJlc3Npb24gPSAoZnVuY3Rpb24gKCkge1xuXHQgICAgZnVuY3Rpb24gQXN5bmNGdW5jdGlvbkV4cHJlc3Npb24oaWQsIHBhcmFtcywgYm9keSkge1xuXHQgICAgICAgIHRoaXMudHlwZSA9IHN5bnRheF8xLlN5bnRheC5GdW5jdGlvbkV4cHJlc3Npb247XG5cdCAgICAgICAgdGhpcy5pZCA9IGlkO1xuXHQgICAgICAgIHRoaXMucGFyYW1zID0gcGFyYW1zO1xuXHQgICAgICAgIHRoaXMuYm9keSA9IGJvZHk7XG5cdCAgICAgICAgdGhpcy5nZW5lcmF0b3IgPSBmYWxzZTtcblx0ICAgICAgICB0aGlzLmV4cHJlc3Npb24gPSBmYWxzZTtcblx0ICAgICAgICB0aGlzLmFzeW5jID0gdHJ1ZTtcblx0ICAgIH1cblx0ICAgIHJldHVybiBBc3luY0Z1bmN0aW9uRXhwcmVzc2lvbjtcblx0fSgpKTtcblx0ZXhwb3J0cy5Bc3luY0Z1bmN0aW9uRXhwcmVzc2lvbiA9IEFzeW5jRnVuY3Rpb25FeHByZXNzaW9uO1xuXHR2YXIgQXdhaXRFeHByZXNzaW9uID0gKGZ1bmN0aW9uICgpIHtcblx0ICAgIGZ1bmN0aW9uIEF3YWl0RXhwcmVzc2lvbihhcmd1bWVudCkge1xuXHQgICAgICAgIHRoaXMudHlwZSA9IHN5bnRheF8xLlN5bnRheC5Bd2FpdEV4cHJlc3Npb247XG5cdCAgICAgICAgdGhpcy5hcmd1bWVudCA9IGFyZ3VtZW50O1xuXHQgICAgfVxuXHQgICAgcmV0dXJuIEF3YWl0RXhwcmVzc2lvbjtcblx0fSgpKTtcblx0ZXhwb3J0cy5Bd2FpdEV4cHJlc3Npb24gPSBBd2FpdEV4cHJlc3Npb247XG5cdHZhciBCaW5hcnlFeHByZXNzaW9uID0gKGZ1bmN0aW9uICgpIHtcblx0ICAgIGZ1bmN0aW9uIEJpbmFyeUV4cHJlc3Npb24ob3BlcmF0b3IsIGxlZnQsIHJpZ2h0KSB7XG5cdCAgICAgICAgdmFyIGxvZ2ljYWwgPSAob3BlcmF0b3IgPT09ICd8fCcgfHwgb3BlcmF0b3IgPT09ICcmJicpO1xuXHQgICAgICAgIHRoaXMudHlwZSA9IGxvZ2ljYWwgPyBzeW50YXhfMS5TeW50YXguTG9naWNhbEV4cHJlc3Npb24gOiBzeW50YXhfMS5TeW50YXguQmluYXJ5RXhwcmVzc2lvbjtcblx0ICAgICAgICB0aGlzLm9wZXJhdG9yID0gb3BlcmF0b3I7XG5cdCAgICAgICAgdGhpcy5sZWZ0ID0gbGVmdDtcblx0ICAgICAgICB0aGlzLnJpZ2h0ID0gcmlnaHQ7XG5cdCAgICB9XG5cdCAgICByZXR1cm4gQmluYXJ5RXhwcmVzc2lvbjtcblx0fSgpKTtcblx0ZXhwb3J0cy5CaW5hcnlFeHByZXNzaW9uID0gQmluYXJ5RXhwcmVzc2lvbjtcblx0dmFyIEJsb2NrU3RhdGVtZW50ID0gKGZ1bmN0aW9uICgpIHtcblx0ICAgIGZ1bmN0aW9uIEJsb2NrU3RhdGVtZW50KGJvZHkpIHtcblx0ICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhfMS5TeW50YXguQmxvY2tTdGF0ZW1lbnQ7XG5cdCAgICAgICAgdGhpcy5ib2R5ID0gYm9keTtcblx0ICAgIH1cblx0ICAgIHJldHVybiBCbG9ja1N0YXRlbWVudDtcblx0fSgpKTtcblx0ZXhwb3J0cy5CbG9ja1N0YXRlbWVudCA9IEJsb2NrU3RhdGVtZW50O1xuXHR2YXIgQnJlYWtTdGF0ZW1lbnQgPSAoZnVuY3Rpb24gKCkge1xuXHQgICAgZnVuY3Rpb24gQnJlYWtTdGF0ZW1lbnQobGFiZWwpIHtcblx0ICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhfMS5TeW50YXguQnJlYWtTdGF0ZW1lbnQ7XG5cdCAgICAgICAgdGhpcy5sYWJlbCA9IGxhYmVsO1xuXHQgICAgfVxuXHQgICAgcmV0dXJuIEJyZWFrU3RhdGVtZW50O1xuXHR9KCkpO1xuXHRleHBvcnRzLkJyZWFrU3RhdGVtZW50ID0gQnJlYWtTdGF0ZW1lbnQ7XG5cdHZhciBDYWxsRXhwcmVzc2lvbiA9IChmdW5jdGlvbiAoKSB7XG5cdCAgICBmdW5jdGlvbiBDYWxsRXhwcmVzc2lvbihjYWxsZWUsIGFyZ3MpIHtcblx0ICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhfMS5TeW50YXguQ2FsbEV4cHJlc3Npb247XG5cdCAgICAgICAgdGhpcy5jYWxsZWUgPSBjYWxsZWU7XG5cdCAgICAgICAgdGhpcy5hcmd1bWVudHMgPSBhcmdzO1xuXHQgICAgfVxuXHQgICAgcmV0dXJuIENhbGxFeHByZXNzaW9uO1xuXHR9KCkpO1xuXHRleHBvcnRzLkNhbGxFeHByZXNzaW9uID0gQ2FsbEV4cHJlc3Npb247XG5cdHZhciBDYXRjaENsYXVzZSA9IChmdW5jdGlvbiAoKSB7XG5cdCAgICBmdW5jdGlvbiBDYXRjaENsYXVzZShwYXJhbSwgYm9keSkge1xuXHQgICAgICAgIHRoaXMudHlwZSA9IHN5bnRheF8xLlN5bnRheC5DYXRjaENsYXVzZTtcblx0ICAgICAgICB0aGlzLnBhcmFtID0gcGFyYW07XG5cdCAgICAgICAgdGhpcy5ib2R5ID0gYm9keTtcblx0ICAgIH1cblx0ICAgIHJldHVybiBDYXRjaENsYXVzZTtcblx0fSgpKTtcblx0ZXhwb3J0cy5DYXRjaENsYXVzZSA9IENhdGNoQ2xhdXNlO1xuXHR2YXIgQ2xhc3NCb2R5ID0gKGZ1bmN0aW9uICgpIHtcblx0ICAgIGZ1bmN0aW9uIENsYXNzQm9keShib2R5KSB7XG5cdCAgICAgICAgdGhpcy50eXBlID0gc3ludGF4XzEuU3ludGF4LkNsYXNzQm9keTtcblx0ICAgICAgICB0aGlzLmJvZHkgPSBib2R5O1xuXHQgICAgfVxuXHQgICAgcmV0dXJuIENsYXNzQm9keTtcblx0fSgpKTtcblx0ZXhwb3J0cy5DbGFzc0JvZHkgPSBDbGFzc0JvZHk7XG5cdHZhciBDbGFzc0RlY2xhcmF0aW9uID0gKGZ1bmN0aW9uICgpIHtcblx0ICAgIGZ1bmN0aW9uIENsYXNzRGVjbGFyYXRpb24oaWQsIHN1cGVyQ2xhc3MsIGJvZHkpIHtcblx0ICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhfMS5TeW50YXguQ2xhc3NEZWNsYXJhdGlvbjtcblx0ICAgICAgICB0aGlzLmlkID0gaWQ7XG5cdCAgICAgICAgdGhpcy5zdXBlckNsYXNzID0gc3VwZXJDbGFzcztcblx0ICAgICAgICB0aGlzLmJvZHkgPSBib2R5O1xuXHQgICAgfVxuXHQgICAgcmV0dXJuIENsYXNzRGVjbGFyYXRpb247XG5cdH0oKSk7XG5cdGV4cG9ydHMuQ2xhc3NEZWNsYXJhdGlvbiA9IENsYXNzRGVjbGFyYXRpb247XG5cdHZhciBDbGFzc0V4cHJlc3Npb24gPSAoZnVuY3Rpb24gKCkge1xuXHQgICAgZnVuY3Rpb24gQ2xhc3NFeHByZXNzaW9uKGlkLCBzdXBlckNsYXNzLCBib2R5KSB7XG5cdCAgICAgICAgdGhpcy50eXBlID0gc3ludGF4XzEuU3ludGF4LkNsYXNzRXhwcmVzc2lvbjtcblx0ICAgICAgICB0aGlzLmlkID0gaWQ7XG5cdCAgICAgICAgdGhpcy5zdXBlckNsYXNzID0gc3VwZXJDbGFzcztcblx0ICAgICAgICB0aGlzLmJvZHkgPSBib2R5O1xuXHQgICAgfVxuXHQgICAgcmV0dXJuIENsYXNzRXhwcmVzc2lvbjtcblx0fSgpKTtcblx0ZXhwb3J0cy5DbGFzc0V4cHJlc3Npb24gPSBDbGFzc0V4cHJlc3Npb247XG5cdHZhciBDb21wdXRlZE1lbWJlckV4cHJlc3Npb24gPSAoZnVuY3Rpb24gKCkge1xuXHQgICAgZnVuY3Rpb24gQ29tcHV0ZWRNZW1iZXJFeHByZXNzaW9uKG9iamVjdCwgcHJvcGVydHkpIHtcblx0ICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhfMS5TeW50YXguTWVtYmVyRXhwcmVzc2lvbjtcblx0ICAgICAgICB0aGlzLmNvbXB1dGVkID0gdHJ1ZTtcblx0ICAgICAgICB0aGlzLm9iamVjdCA9IG9iamVjdDtcblx0ICAgICAgICB0aGlzLnByb3BlcnR5ID0gcHJvcGVydHk7XG5cdCAgICB9XG5cdCAgICByZXR1cm4gQ29tcHV0ZWRNZW1iZXJFeHByZXNzaW9uO1xuXHR9KCkpO1xuXHRleHBvcnRzLkNvbXB1dGVkTWVtYmVyRXhwcmVzc2lvbiA9IENvbXB1dGVkTWVtYmVyRXhwcmVzc2lvbjtcblx0dmFyIENvbmRpdGlvbmFsRXhwcmVzc2lvbiA9IChmdW5jdGlvbiAoKSB7XG5cdCAgICBmdW5jdGlvbiBDb25kaXRpb25hbEV4cHJlc3Npb24odGVzdCwgY29uc2VxdWVudCwgYWx0ZXJuYXRlKSB7XG5cdCAgICAgICAgdGhpcy50eXBlID0gc3ludGF4XzEuU3ludGF4LkNvbmRpdGlvbmFsRXhwcmVzc2lvbjtcblx0ICAgICAgICB0aGlzLnRlc3QgPSB0ZXN0O1xuXHQgICAgICAgIHRoaXMuY29uc2VxdWVudCA9IGNvbnNlcXVlbnQ7XG5cdCAgICAgICAgdGhpcy5hbHRlcm5hdGUgPSBhbHRlcm5hdGU7XG5cdCAgICB9XG5cdCAgICByZXR1cm4gQ29uZGl0aW9uYWxFeHByZXNzaW9uO1xuXHR9KCkpO1xuXHRleHBvcnRzLkNvbmRpdGlvbmFsRXhwcmVzc2lvbiA9IENvbmRpdGlvbmFsRXhwcmVzc2lvbjtcblx0dmFyIENvbnRpbnVlU3RhdGVtZW50ID0gKGZ1bmN0aW9uICgpIHtcblx0ICAgIGZ1bmN0aW9uIENvbnRpbnVlU3RhdGVtZW50KGxhYmVsKSB7XG5cdCAgICAgICAgdGhpcy50eXBlID0gc3ludGF4XzEuU3ludGF4LkNvbnRpbnVlU3RhdGVtZW50O1xuXHQgICAgICAgIHRoaXMubGFiZWwgPSBsYWJlbDtcblx0ICAgIH1cblx0ICAgIHJldHVybiBDb250aW51ZVN0YXRlbWVudDtcblx0fSgpKTtcblx0ZXhwb3J0cy5Db250aW51ZVN0YXRlbWVudCA9IENvbnRpbnVlU3RhdGVtZW50O1xuXHR2YXIgRGVidWdnZXJTdGF0ZW1lbnQgPSAoZnVuY3Rpb24gKCkge1xuXHQgICAgZnVuY3Rpb24gRGVidWdnZXJTdGF0ZW1lbnQoKSB7XG5cdCAgICAgICAgdGhpcy50eXBlID0gc3ludGF4XzEuU3ludGF4LkRlYnVnZ2VyU3RhdGVtZW50O1xuXHQgICAgfVxuXHQgICAgcmV0dXJuIERlYnVnZ2VyU3RhdGVtZW50O1xuXHR9KCkpO1xuXHRleHBvcnRzLkRlYnVnZ2VyU3RhdGVtZW50ID0gRGVidWdnZXJTdGF0ZW1lbnQ7XG5cdHZhciBEaXJlY3RpdmUgPSAoZnVuY3Rpb24gKCkge1xuXHQgICAgZnVuY3Rpb24gRGlyZWN0aXZlKGV4cHJlc3Npb24sIGRpcmVjdGl2ZSkge1xuXHQgICAgICAgIHRoaXMudHlwZSA9IHN5bnRheF8xLlN5bnRheC5FeHByZXNzaW9uU3RhdGVtZW50O1xuXHQgICAgICAgIHRoaXMuZXhwcmVzc2lvbiA9IGV4cHJlc3Npb247XG5cdCAgICAgICAgdGhpcy5kaXJlY3RpdmUgPSBkaXJlY3RpdmU7XG5cdCAgICB9XG5cdCAgICByZXR1cm4gRGlyZWN0aXZlO1xuXHR9KCkpO1xuXHRleHBvcnRzLkRpcmVjdGl2ZSA9IERpcmVjdGl2ZTtcblx0dmFyIERvV2hpbGVTdGF0ZW1lbnQgPSAoZnVuY3Rpb24gKCkge1xuXHQgICAgZnVuY3Rpb24gRG9XaGlsZVN0YXRlbWVudChib2R5LCB0ZXN0KSB7XG5cdCAgICAgICAgdGhpcy50eXBlID0gc3ludGF4XzEuU3ludGF4LkRvV2hpbGVTdGF0ZW1lbnQ7XG5cdCAgICAgICAgdGhpcy5ib2R5ID0gYm9keTtcblx0ICAgICAgICB0aGlzLnRlc3QgPSB0ZXN0O1xuXHQgICAgfVxuXHQgICAgcmV0dXJuIERvV2hpbGVTdGF0ZW1lbnQ7XG5cdH0oKSk7XG5cdGV4cG9ydHMuRG9XaGlsZVN0YXRlbWVudCA9IERvV2hpbGVTdGF0ZW1lbnQ7XG5cdHZhciBFbXB0eVN0YXRlbWVudCA9IChmdW5jdGlvbiAoKSB7XG5cdCAgICBmdW5jdGlvbiBFbXB0eVN0YXRlbWVudCgpIHtcblx0ICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhfMS5TeW50YXguRW1wdHlTdGF0ZW1lbnQ7XG5cdCAgICB9XG5cdCAgICByZXR1cm4gRW1wdHlTdGF0ZW1lbnQ7XG5cdH0oKSk7XG5cdGV4cG9ydHMuRW1wdHlTdGF0ZW1lbnQgPSBFbXB0eVN0YXRlbWVudDtcblx0dmFyIEV4cG9ydEFsbERlY2xhcmF0aW9uID0gKGZ1bmN0aW9uICgpIHtcblx0ICAgIGZ1bmN0aW9uIEV4cG9ydEFsbERlY2xhcmF0aW9uKHNvdXJjZSkge1xuXHQgICAgICAgIHRoaXMudHlwZSA9IHN5bnRheF8xLlN5bnRheC5FeHBvcnRBbGxEZWNsYXJhdGlvbjtcblx0ICAgICAgICB0aGlzLnNvdXJjZSA9IHNvdXJjZTtcblx0ICAgIH1cblx0ICAgIHJldHVybiBFeHBvcnRBbGxEZWNsYXJhdGlvbjtcblx0fSgpKTtcblx0ZXhwb3J0cy5FeHBvcnRBbGxEZWNsYXJhdGlvbiA9IEV4cG9ydEFsbERlY2xhcmF0aW9uO1xuXHR2YXIgRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uID0gKGZ1bmN0aW9uICgpIHtcblx0ICAgIGZ1bmN0aW9uIEV4cG9ydERlZmF1bHREZWNsYXJhdGlvbihkZWNsYXJhdGlvbikge1xuXHQgICAgICAgIHRoaXMudHlwZSA9IHN5bnRheF8xLlN5bnRheC5FeHBvcnREZWZhdWx0RGVjbGFyYXRpb247XG5cdCAgICAgICAgdGhpcy5kZWNsYXJhdGlvbiA9IGRlY2xhcmF0aW9uO1xuXHQgICAgfVxuXHQgICAgcmV0dXJuIEV4cG9ydERlZmF1bHREZWNsYXJhdGlvbjtcblx0fSgpKTtcblx0ZXhwb3J0cy5FeHBvcnREZWZhdWx0RGVjbGFyYXRpb24gPSBFeHBvcnREZWZhdWx0RGVjbGFyYXRpb247XG5cdHZhciBFeHBvcnROYW1lZERlY2xhcmF0aW9uID0gKGZ1bmN0aW9uICgpIHtcblx0ICAgIGZ1bmN0aW9uIEV4cG9ydE5hbWVkRGVjbGFyYXRpb24oZGVjbGFyYXRpb24sIHNwZWNpZmllcnMsIHNvdXJjZSkge1xuXHQgICAgICAgIHRoaXMudHlwZSA9IHN5bnRheF8xLlN5bnRheC5FeHBvcnROYW1lZERlY2xhcmF0aW9uO1xuXHQgICAgICAgIHRoaXMuZGVjbGFyYXRpb24gPSBkZWNsYXJhdGlvbjtcblx0ICAgICAgICB0aGlzLnNwZWNpZmllcnMgPSBzcGVjaWZpZXJzO1xuXHQgICAgICAgIHRoaXMuc291cmNlID0gc291cmNlO1xuXHQgICAgfVxuXHQgICAgcmV0dXJuIEV4cG9ydE5hbWVkRGVjbGFyYXRpb247XG5cdH0oKSk7XG5cdGV4cG9ydHMuRXhwb3J0TmFtZWREZWNsYXJhdGlvbiA9IEV4cG9ydE5hbWVkRGVjbGFyYXRpb247XG5cdHZhciBFeHBvcnRTcGVjaWZpZXIgPSAoZnVuY3Rpb24gKCkge1xuXHQgICAgZnVuY3Rpb24gRXhwb3J0U3BlY2lmaWVyKGxvY2FsLCBleHBvcnRlZCkge1xuXHQgICAgICAgIHRoaXMudHlwZSA9IHN5bnRheF8xLlN5bnRheC5FeHBvcnRTcGVjaWZpZXI7XG5cdCAgICAgICAgdGhpcy5leHBvcnRlZCA9IGV4cG9ydGVkO1xuXHQgICAgICAgIHRoaXMubG9jYWwgPSBsb2NhbDtcblx0ICAgIH1cblx0ICAgIHJldHVybiBFeHBvcnRTcGVjaWZpZXI7XG5cdH0oKSk7XG5cdGV4cG9ydHMuRXhwb3J0U3BlY2lmaWVyID0gRXhwb3J0U3BlY2lmaWVyO1xuXHR2YXIgRXhwcmVzc2lvblN0YXRlbWVudCA9IChmdW5jdGlvbiAoKSB7XG5cdCAgICBmdW5jdGlvbiBFeHByZXNzaW9uU3RhdGVtZW50KGV4cHJlc3Npb24pIHtcblx0ICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhfMS5TeW50YXguRXhwcmVzc2lvblN0YXRlbWVudDtcblx0ICAgICAgICB0aGlzLmV4cHJlc3Npb24gPSBleHByZXNzaW9uO1xuXHQgICAgfVxuXHQgICAgcmV0dXJuIEV4cHJlc3Npb25TdGF0ZW1lbnQ7XG5cdH0oKSk7XG5cdGV4cG9ydHMuRXhwcmVzc2lvblN0YXRlbWVudCA9IEV4cHJlc3Npb25TdGF0ZW1lbnQ7XG5cdHZhciBGb3JJblN0YXRlbWVudCA9IChmdW5jdGlvbiAoKSB7XG5cdCAgICBmdW5jdGlvbiBGb3JJblN0YXRlbWVudChsZWZ0LCByaWdodCwgYm9keSkge1xuXHQgICAgICAgIHRoaXMudHlwZSA9IHN5bnRheF8xLlN5bnRheC5Gb3JJblN0YXRlbWVudDtcblx0ICAgICAgICB0aGlzLmxlZnQgPSBsZWZ0O1xuXHQgICAgICAgIHRoaXMucmlnaHQgPSByaWdodDtcblx0ICAgICAgICB0aGlzLmJvZHkgPSBib2R5O1xuXHQgICAgICAgIHRoaXMuZWFjaCA9IGZhbHNlO1xuXHQgICAgfVxuXHQgICAgcmV0dXJuIEZvckluU3RhdGVtZW50O1xuXHR9KCkpO1xuXHRleHBvcnRzLkZvckluU3RhdGVtZW50ID0gRm9ySW5TdGF0ZW1lbnQ7XG5cdHZhciBGb3JPZlN0YXRlbWVudCA9IChmdW5jdGlvbiAoKSB7XG5cdCAgICBmdW5jdGlvbiBGb3JPZlN0YXRlbWVudChsZWZ0LCByaWdodCwgYm9keSkge1xuXHQgICAgICAgIHRoaXMudHlwZSA9IHN5bnRheF8xLlN5bnRheC5Gb3JPZlN0YXRlbWVudDtcblx0ICAgICAgICB0aGlzLmxlZnQgPSBsZWZ0O1xuXHQgICAgICAgIHRoaXMucmlnaHQgPSByaWdodDtcblx0ICAgICAgICB0aGlzLmJvZHkgPSBib2R5O1xuXHQgICAgfVxuXHQgICAgcmV0dXJuIEZvck9mU3RhdGVtZW50O1xuXHR9KCkpO1xuXHRleHBvcnRzLkZvck9mU3RhdGVtZW50ID0gRm9yT2ZTdGF0ZW1lbnQ7XG5cdHZhciBGb3JTdGF0ZW1lbnQgPSAoZnVuY3Rpb24gKCkge1xuXHQgICAgZnVuY3Rpb24gRm9yU3RhdGVtZW50KGluaXQsIHRlc3QsIHVwZGF0ZSwgYm9keSkge1xuXHQgICAgICAgIHRoaXMudHlwZSA9IHN5bnRheF8xLlN5bnRheC5Gb3JTdGF0ZW1lbnQ7XG5cdCAgICAgICAgdGhpcy5pbml0ID0gaW5pdDtcblx0ICAgICAgICB0aGlzLnRlc3QgPSB0ZXN0O1xuXHQgICAgICAgIHRoaXMudXBkYXRlID0gdXBkYXRlO1xuXHQgICAgICAgIHRoaXMuYm9keSA9IGJvZHk7XG5cdCAgICB9XG5cdCAgICByZXR1cm4gRm9yU3RhdGVtZW50O1xuXHR9KCkpO1xuXHRleHBvcnRzLkZvclN0YXRlbWVudCA9IEZvclN0YXRlbWVudDtcblx0dmFyIEZ1bmN0aW9uRGVjbGFyYXRpb24gPSAoZnVuY3Rpb24gKCkge1xuXHQgICAgZnVuY3Rpb24gRnVuY3Rpb25EZWNsYXJhdGlvbihpZCwgcGFyYW1zLCBib2R5LCBnZW5lcmF0b3IpIHtcblx0ICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhfMS5TeW50YXguRnVuY3Rpb25EZWNsYXJhdGlvbjtcblx0ICAgICAgICB0aGlzLmlkID0gaWQ7XG5cdCAgICAgICAgdGhpcy5wYXJhbXMgPSBwYXJhbXM7XG5cdCAgICAgICAgdGhpcy5ib2R5ID0gYm9keTtcblx0ICAgICAgICB0aGlzLmdlbmVyYXRvciA9IGdlbmVyYXRvcjtcblx0ICAgICAgICB0aGlzLmV4cHJlc3Npb24gPSBmYWxzZTtcblx0ICAgICAgICB0aGlzLmFzeW5jID0gZmFsc2U7XG5cdCAgICB9XG5cdCAgICByZXR1cm4gRnVuY3Rpb25EZWNsYXJhdGlvbjtcblx0fSgpKTtcblx0ZXhwb3J0cy5GdW5jdGlvbkRlY2xhcmF0aW9uID0gRnVuY3Rpb25EZWNsYXJhdGlvbjtcblx0dmFyIEZ1bmN0aW9uRXhwcmVzc2lvbiA9IChmdW5jdGlvbiAoKSB7XG5cdCAgICBmdW5jdGlvbiBGdW5jdGlvbkV4cHJlc3Npb24oaWQsIHBhcmFtcywgYm9keSwgZ2VuZXJhdG9yKSB7XG5cdCAgICAgICAgdGhpcy50eXBlID0gc3ludGF4XzEuU3ludGF4LkZ1bmN0aW9uRXhwcmVzc2lvbjtcblx0ICAgICAgICB0aGlzLmlkID0gaWQ7XG5cdCAgICAgICAgdGhpcy5wYXJhbXMgPSBwYXJhbXM7XG5cdCAgICAgICAgdGhpcy5ib2R5ID0gYm9keTtcblx0ICAgICAgICB0aGlzLmdlbmVyYXRvciA9IGdlbmVyYXRvcjtcblx0ICAgICAgICB0aGlzLmV4cHJlc3Npb24gPSBmYWxzZTtcblx0ICAgICAgICB0aGlzLmFzeW5jID0gZmFsc2U7XG5cdCAgICB9XG5cdCAgICByZXR1cm4gRnVuY3Rpb25FeHByZXNzaW9uO1xuXHR9KCkpO1xuXHRleHBvcnRzLkZ1bmN0aW9uRXhwcmVzc2lvbiA9IEZ1bmN0aW9uRXhwcmVzc2lvbjtcblx0dmFyIElkZW50aWZpZXIgPSAoZnVuY3Rpb24gKCkge1xuXHQgICAgZnVuY3Rpb24gSWRlbnRpZmllcihuYW1lKSB7XG5cdCAgICAgICAgdGhpcy50eXBlID0gc3ludGF4XzEuU3ludGF4LklkZW50aWZpZXI7XG5cdCAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcblx0ICAgIH1cblx0ICAgIHJldHVybiBJZGVudGlmaWVyO1xuXHR9KCkpO1xuXHRleHBvcnRzLklkZW50aWZpZXIgPSBJZGVudGlmaWVyO1xuXHR2YXIgSWZTdGF0ZW1lbnQgPSAoZnVuY3Rpb24gKCkge1xuXHQgICAgZnVuY3Rpb24gSWZTdGF0ZW1lbnQodGVzdCwgY29uc2VxdWVudCwgYWx0ZXJuYXRlKSB7XG5cdCAgICAgICAgdGhpcy50eXBlID0gc3ludGF4XzEuU3ludGF4LklmU3RhdGVtZW50O1xuXHQgICAgICAgIHRoaXMudGVzdCA9IHRlc3Q7XG5cdCAgICAgICAgdGhpcy5jb25zZXF1ZW50ID0gY29uc2VxdWVudDtcblx0ICAgICAgICB0aGlzLmFsdGVybmF0ZSA9IGFsdGVybmF0ZTtcblx0ICAgIH1cblx0ICAgIHJldHVybiBJZlN0YXRlbWVudDtcblx0fSgpKTtcblx0ZXhwb3J0cy5JZlN0YXRlbWVudCA9IElmU3RhdGVtZW50O1xuXHR2YXIgSW1wb3J0RGVjbGFyYXRpb24gPSAoZnVuY3Rpb24gKCkge1xuXHQgICAgZnVuY3Rpb24gSW1wb3J0RGVjbGFyYXRpb24oc3BlY2lmaWVycywgc291cmNlKSB7XG5cdCAgICAgICAgdGhpcy50eXBlID0gc3ludGF4XzEuU3ludGF4LkltcG9ydERlY2xhcmF0aW9uO1xuXHQgICAgICAgIHRoaXMuc3BlY2lmaWVycyA9IHNwZWNpZmllcnM7XG5cdCAgICAgICAgdGhpcy5zb3VyY2UgPSBzb3VyY2U7XG5cdCAgICB9XG5cdCAgICByZXR1cm4gSW1wb3J0RGVjbGFyYXRpb247XG5cdH0oKSk7XG5cdGV4cG9ydHMuSW1wb3J0RGVjbGFyYXRpb24gPSBJbXBvcnREZWNsYXJhdGlvbjtcblx0dmFyIEltcG9ydERlZmF1bHRTcGVjaWZpZXIgPSAoZnVuY3Rpb24gKCkge1xuXHQgICAgZnVuY3Rpb24gSW1wb3J0RGVmYXVsdFNwZWNpZmllcihsb2NhbCkge1xuXHQgICAgICAgIHRoaXMudHlwZSA9IHN5bnRheF8xLlN5bnRheC5JbXBvcnREZWZhdWx0U3BlY2lmaWVyO1xuXHQgICAgICAgIHRoaXMubG9jYWwgPSBsb2NhbDtcblx0ICAgIH1cblx0ICAgIHJldHVybiBJbXBvcnREZWZhdWx0U3BlY2lmaWVyO1xuXHR9KCkpO1xuXHRleHBvcnRzLkltcG9ydERlZmF1bHRTcGVjaWZpZXIgPSBJbXBvcnREZWZhdWx0U3BlY2lmaWVyO1xuXHR2YXIgSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyID0gKGZ1bmN0aW9uICgpIHtcblx0ICAgIGZ1bmN0aW9uIEltcG9ydE5hbWVzcGFjZVNwZWNpZmllcihsb2NhbCkge1xuXHQgICAgICAgIHRoaXMudHlwZSA9IHN5bnRheF8xLlN5bnRheC5JbXBvcnROYW1lc3BhY2VTcGVjaWZpZXI7XG5cdCAgICAgICAgdGhpcy5sb2NhbCA9IGxvY2FsO1xuXHQgICAgfVxuXHQgICAgcmV0dXJuIEltcG9ydE5hbWVzcGFjZVNwZWNpZmllcjtcblx0fSgpKTtcblx0ZXhwb3J0cy5JbXBvcnROYW1lc3BhY2VTcGVjaWZpZXIgPSBJbXBvcnROYW1lc3BhY2VTcGVjaWZpZXI7XG5cdHZhciBJbXBvcnRTcGVjaWZpZXIgPSAoZnVuY3Rpb24gKCkge1xuXHQgICAgZnVuY3Rpb24gSW1wb3J0U3BlY2lmaWVyKGxvY2FsLCBpbXBvcnRlZCkge1xuXHQgICAgICAgIHRoaXMudHlwZSA9IHN5bnRheF8xLlN5bnRheC5JbXBvcnRTcGVjaWZpZXI7XG5cdCAgICAgICAgdGhpcy5sb2NhbCA9IGxvY2FsO1xuXHQgICAgICAgIHRoaXMuaW1wb3J0ZWQgPSBpbXBvcnRlZDtcblx0ICAgIH1cblx0ICAgIHJldHVybiBJbXBvcnRTcGVjaWZpZXI7XG5cdH0oKSk7XG5cdGV4cG9ydHMuSW1wb3J0U3BlY2lmaWVyID0gSW1wb3J0U3BlY2lmaWVyO1xuXHR2YXIgTGFiZWxlZFN0YXRlbWVudCA9IChmdW5jdGlvbiAoKSB7XG5cdCAgICBmdW5jdGlvbiBMYWJlbGVkU3RhdGVtZW50KGxhYmVsLCBib2R5KSB7XG5cdCAgICAgICAgdGhpcy50eXBlID0gc3ludGF4XzEuU3ludGF4LkxhYmVsZWRTdGF0ZW1lbnQ7XG5cdCAgICAgICAgdGhpcy5sYWJlbCA9IGxhYmVsO1xuXHQgICAgICAgIHRoaXMuYm9keSA9IGJvZHk7XG5cdCAgICB9XG5cdCAgICByZXR1cm4gTGFiZWxlZFN0YXRlbWVudDtcblx0fSgpKTtcblx0ZXhwb3J0cy5MYWJlbGVkU3RhdGVtZW50ID0gTGFiZWxlZFN0YXRlbWVudDtcblx0dmFyIExpdGVyYWwgPSAoZnVuY3Rpb24gKCkge1xuXHQgICAgZnVuY3Rpb24gTGl0ZXJhbCh2YWx1ZSwgcmF3KSB7XG5cdCAgICAgICAgdGhpcy50eXBlID0gc3ludGF4XzEuU3ludGF4LkxpdGVyYWw7XG5cdCAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuXHQgICAgICAgIHRoaXMucmF3ID0gcmF3O1xuXHQgICAgfVxuXHQgICAgcmV0dXJuIExpdGVyYWw7XG5cdH0oKSk7XG5cdGV4cG9ydHMuTGl0ZXJhbCA9IExpdGVyYWw7XG5cdHZhciBNZXRhUHJvcGVydHkgPSAoZnVuY3Rpb24gKCkge1xuXHQgICAgZnVuY3Rpb24gTWV0YVByb3BlcnR5KG1ldGEsIHByb3BlcnR5KSB7XG5cdCAgICAgICAgdGhpcy50eXBlID0gc3ludGF4XzEuU3ludGF4Lk1ldGFQcm9wZXJ0eTtcblx0ICAgICAgICB0aGlzLm1ldGEgPSBtZXRhO1xuXHQgICAgICAgIHRoaXMucHJvcGVydHkgPSBwcm9wZXJ0eTtcblx0ICAgIH1cblx0ICAgIHJldHVybiBNZXRhUHJvcGVydHk7XG5cdH0oKSk7XG5cdGV4cG9ydHMuTWV0YVByb3BlcnR5ID0gTWV0YVByb3BlcnR5O1xuXHR2YXIgTWV0aG9kRGVmaW5pdGlvbiA9IChmdW5jdGlvbiAoKSB7XG5cdCAgICBmdW5jdGlvbiBNZXRob2REZWZpbml0aW9uKGtleSwgY29tcHV0ZWQsIHZhbHVlLCBraW5kLCBpc1N0YXRpYykge1xuXHQgICAgICAgIHRoaXMudHlwZSA9IHN5bnRheF8xLlN5bnRheC5NZXRob2REZWZpbml0aW9uO1xuXHQgICAgICAgIHRoaXMua2V5ID0ga2V5O1xuXHQgICAgICAgIHRoaXMuY29tcHV0ZWQgPSBjb21wdXRlZDtcblx0ICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG5cdCAgICAgICAgdGhpcy5raW5kID0ga2luZDtcblx0ICAgICAgICB0aGlzLnN0YXRpYyA9IGlzU3RhdGljO1xuXHQgICAgfVxuXHQgICAgcmV0dXJuIE1ldGhvZERlZmluaXRpb247XG5cdH0oKSk7XG5cdGV4cG9ydHMuTWV0aG9kRGVmaW5pdGlvbiA9IE1ldGhvZERlZmluaXRpb247XG5cdHZhciBNb2R1bGUgPSAoZnVuY3Rpb24gKCkge1xuXHQgICAgZnVuY3Rpb24gTW9kdWxlKGJvZHkpIHtcblx0ICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhfMS5TeW50YXguUHJvZ3JhbTtcblx0ICAgICAgICB0aGlzLmJvZHkgPSBib2R5O1xuXHQgICAgICAgIHRoaXMuc291cmNlVHlwZSA9ICdtb2R1bGUnO1xuXHQgICAgfVxuXHQgICAgcmV0dXJuIE1vZHVsZTtcblx0fSgpKTtcblx0ZXhwb3J0cy5Nb2R1bGUgPSBNb2R1bGU7XG5cdHZhciBOZXdFeHByZXNzaW9uID0gKGZ1bmN0aW9uICgpIHtcblx0ICAgIGZ1bmN0aW9uIE5ld0V4cHJlc3Npb24oY2FsbGVlLCBhcmdzKSB7XG5cdCAgICAgICAgdGhpcy50eXBlID0gc3ludGF4XzEuU3ludGF4Lk5ld0V4cHJlc3Npb247XG5cdCAgICAgICAgdGhpcy5jYWxsZWUgPSBjYWxsZWU7XG5cdCAgICAgICAgdGhpcy5hcmd1bWVudHMgPSBhcmdzO1xuXHQgICAgfVxuXHQgICAgcmV0dXJuIE5ld0V4cHJlc3Npb247XG5cdH0oKSk7XG5cdGV4cG9ydHMuTmV3RXhwcmVzc2lvbiA9IE5ld0V4cHJlc3Npb247XG5cdHZhciBPYmplY3RFeHByZXNzaW9uID0gKGZ1bmN0aW9uICgpIHtcblx0ICAgIGZ1bmN0aW9uIE9iamVjdEV4cHJlc3Npb24ocHJvcGVydGllcykge1xuXHQgICAgICAgIHRoaXMudHlwZSA9IHN5bnRheF8xLlN5bnRheC5PYmplY3RFeHByZXNzaW9uO1xuXHQgICAgICAgIHRoaXMucHJvcGVydGllcyA9IHByb3BlcnRpZXM7XG5cdCAgICB9XG5cdCAgICByZXR1cm4gT2JqZWN0RXhwcmVzc2lvbjtcblx0fSgpKTtcblx0ZXhwb3J0cy5PYmplY3RFeHByZXNzaW9uID0gT2JqZWN0RXhwcmVzc2lvbjtcblx0dmFyIE9iamVjdFBhdHRlcm4gPSAoZnVuY3Rpb24gKCkge1xuXHQgICAgZnVuY3Rpb24gT2JqZWN0UGF0dGVybihwcm9wZXJ0aWVzKSB7XG5cdCAgICAgICAgdGhpcy50eXBlID0gc3ludGF4XzEuU3ludGF4Lk9iamVjdFBhdHRlcm47XG5cdCAgICAgICAgdGhpcy5wcm9wZXJ0aWVzID0gcHJvcGVydGllcztcblx0ICAgIH1cblx0ICAgIHJldHVybiBPYmplY3RQYXR0ZXJuO1xuXHR9KCkpO1xuXHRleHBvcnRzLk9iamVjdFBhdHRlcm4gPSBPYmplY3RQYXR0ZXJuO1xuXHR2YXIgUHJvcGVydHkgPSAoZnVuY3Rpb24gKCkge1xuXHQgICAgZnVuY3Rpb24gUHJvcGVydHkoa2luZCwga2V5LCBjb21wdXRlZCwgdmFsdWUsIG1ldGhvZCwgc2hvcnRoYW5kKSB7XG5cdCAgICAgICAgdGhpcy50eXBlID0gc3ludGF4XzEuU3ludGF4LlByb3BlcnR5O1xuXHQgICAgICAgIHRoaXMua2V5ID0ga2V5O1xuXHQgICAgICAgIHRoaXMuY29tcHV0ZWQgPSBjb21wdXRlZDtcblx0ICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG5cdCAgICAgICAgdGhpcy5raW5kID0ga2luZDtcblx0ICAgICAgICB0aGlzLm1ldGhvZCA9IG1ldGhvZDtcblx0ICAgICAgICB0aGlzLnNob3J0aGFuZCA9IHNob3J0aGFuZDtcblx0ICAgIH1cblx0ICAgIHJldHVybiBQcm9wZXJ0eTtcblx0fSgpKTtcblx0ZXhwb3J0cy5Qcm9wZXJ0eSA9IFByb3BlcnR5O1xuXHR2YXIgUmVnZXhMaXRlcmFsID0gKGZ1bmN0aW9uICgpIHtcblx0ICAgIGZ1bmN0aW9uIFJlZ2V4TGl0ZXJhbCh2YWx1ZSwgcmF3LCBwYXR0ZXJuLCBmbGFncykge1xuXHQgICAgICAgIHRoaXMudHlwZSA9IHN5bnRheF8xLlN5bnRheC5MaXRlcmFsO1xuXHQgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcblx0ICAgICAgICB0aGlzLnJhdyA9IHJhdztcblx0ICAgICAgICB0aGlzLnJlZ2V4ID0geyBwYXR0ZXJuOiBwYXR0ZXJuLCBmbGFnczogZmxhZ3MgfTtcblx0ICAgIH1cblx0ICAgIHJldHVybiBSZWdleExpdGVyYWw7XG5cdH0oKSk7XG5cdGV4cG9ydHMuUmVnZXhMaXRlcmFsID0gUmVnZXhMaXRlcmFsO1xuXHR2YXIgUmVzdEVsZW1lbnQgPSAoZnVuY3Rpb24gKCkge1xuXHQgICAgZnVuY3Rpb24gUmVzdEVsZW1lbnQoYXJndW1lbnQpIHtcblx0ICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhfMS5TeW50YXguUmVzdEVsZW1lbnQ7XG5cdCAgICAgICAgdGhpcy5hcmd1bWVudCA9IGFyZ3VtZW50O1xuXHQgICAgfVxuXHQgICAgcmV0dXJuIFJlc3RFbGVtZW50O1xuXHR9KCkpO1xuXHRleHBvcnRzLlJlc3RFbGVtZW50ID0gUmVzdEVsZW1lbnQ7XG5cdHZhciBSZXR1cm5TdGF0ZW1lbnQgPSAoZnVuY3Rpb24gKCkge1xuXHQgICAgZnVuY3Rpb24gUmV0dXJuU3RhdGVtZW50KGFyZ3VtZW50KSB7XG5cdCAgICAgICAgdGhpcy50eXBlID0gc3ludGF4XzEuU3ludGF4LlJldHVyblN0YXRlbWVudDtcblx0ICAgICAgICB0aGlzLmFyZ3VtZW50ID0gYXJndW1lbnQ7XG5cdCAgICB9XG5cdCAgICByZXR1cm4gUmV0dXJuU3RhdGVtZW50O1xuXHR9KCkpO1xuXHRleHBvcnRzLlJldHVyblN0YXRlbWVudCA9IFJldHVyblN0YXRlbWVudDtcblx0dmFyIFNjcmlwdCA9IChmdW5jdGlvbiAoKSB7XG5cdCAgICBmdW5jdGlvbiBTY3JpcHQoYm9keSkge1xuXHQgICAgICAgIHRoaXMudHlwZSA9IHN5bnRheF8xLlN5bnRheC5Qcm9ncmFtO1xuXHQgICAgICAgIHRoaXMuYm9keSA9IGJvZHk7XG5cdCAgICAgICAgdGhpcy5zb3VyY2VUeXBlID0gJ3NjcmlwdCc7XG5cdCAgICB9XG5cdCAgICByZXR1cm4gU2NyaXB0O1xuXHR9KCkpO1xuXHRleHBvcnRzLlNjcmlwdCA9IFNjcmlwdDtcblx0dmFyIFNlcXVlbmNlRXhwcmVzc2lvbiA9IChmdW5jdGlvbiAoKSB7XG5cdCAgICBmdW5jdGlvbiBTZXF1ZW5jZUV4cHJlc3Npb24oZXhwcmVzc2lvbnMpIHtcblx0ICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhfMS5TeW50YXguU2VxdWVuY2VFeHByZXNzaW9uO1xuXHQgICAgICAgIHRoaXMuZXhwcmVzc2lvbnMgPSBleHByZXNzaW9ucztcblx0ICAgIH1cblx0ICAgIHJldHVybiBTZXF1ZW5jZUV4cHJlc3Npb247XG5cdH0oKSk7XG5cdGV4cG9ydHMuU2VxdWVuY2VFeHByZXNzaW9uID0gU2VxdWVuY2VFeHByZXNzaW9uO1xuXHR2YXIgU3ByZWFkRWxlbWVudCA9IChmdW5jdGlvbiAoKSB7XG5cdCAgICBmdW5jdGlvbiBTcHJlYWRFbGVtZW50KGFyZ3VtZW50KSB7XG5cdCAgICAgICAgdGhpcy50eXBlID0gc3ludGF4XzEuU3ludGF4LlNwcmVhZEVsZW1lbnQ7XG5cdCAgICAgICAgdGhpcy5hcmd1bWVudCA9IGFyZ3VtZW50O1xuXHQgICAgfVxuXHQgICAgcmV0dXJuIFNwcmVhZEVsZW1lbnQ7XG5cdH0oKSk7XG5cdGV4cG9ydHMuU3ByZWFkRWxlbWVudCA9IFNwcmVhZEVsZW1lbnQ7XG5cdHZhciBTdGF0aWNNZW1iZXJFeHByZXNzaW9uID0gKGZ1bmN0aW9uICgpIHtcblx0ICAgIGZ1bmN0aW9uIFN0YXRpY01lbWJlckV4cHJlc3Npb24ob2JqZWN0LCBwcm9wZXJ0eSkge1xuXHQgICAgICAgIHRoaXMudHlwZSA9IHN5bnRheF8xLlN5bnRheC5NZW1iZXJFeHByZXNzaW9uO1xuXHQgICAgICAgIHRoaXMuY29tcHV0ZWQgPSBmYWxzZTtcblx0ICAgICAgICB0aGlzLm9iamVjdCA9IG9iamVjdDtcblx0ICAgICAgICB0aGlzLnByb3BlcnR5ID0gcHJvcGVydHk7XG5cdCAgICB9XG5cdCAgICByZXR1cm4gU3RhdGljTWVtYmVyRXhwcmVzc2lvbjtcblx0fSgpKTtcblx0ZXhwb3J0cy5TdGF0aWNNZW1iZXJFeHByZXNzaW9uID0gU3RhdGljTWVtYmVyRXhwcmVzc2lvbjtcblx0dmFyIFN1cGVyID0gKGZ1bmN0aW9uICgpIHtcblx0ICAgIGZ1bmN0aW9uIFN1cGVyKCkge1xuXHQgICAgICAgIHRoaXMudHlwZSA9IHN5bnRheF8xLlN5bnRheC5TdXBlcjtcblx0ICAgIH1cblx0ICAgIHJldHVybiBTdXBlcjtcblx0fSgpKTtcblx0ZXhwb3J0cy5TdXBlciA9IFN1cGVyO1xuXHR2YXIgU3dpdGNoQ2FzZSA9IChmdW5jdGlvbiAoKSB7XG5cdCAgICBmdW5jdGlvbiBTd2l0Y2hDYXNlKHRlc3QsIGNvbnNlcXVlbnQpIHtcblx0ICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhfMS5TeW50YXguU3dpdGNoQ2FzZTtcblx0ICAgICAgICB0aGlzLnRlc3QgPSB0ZXN0O1xuXHQgICAgICAgIHRoaXMuY29uc2VxdWVudCA9IGNvbnNlcXVlbnQ7XG5cdCAgICB9XG5cdCAgICByZXR1cm4gU3dpdGNoQ2FzZTtcblx0fSgpKTtcblx0ZXhwb3J0cy5Td2l0Y2hDYXNlID0gU3dpdGNoQ2FzZTtcblx0dmFyIFN3aXRjaFN0YXRlbWVudCA9IChmdW5jdGlvbiAoKSB7XG5cdCAgICBmdW5jdGlvbiBTd2l0Y2hTdGF0ZW1lbnQoZGlzY3JpbWluYW50LCBjYXNlcykge1xuXHQgICAgICAgIHRoaXMudHlwZSA9IHN5bnRheF8xLlN5bnRheC5Td2l0Y2hTdGF0ZW1lbnQ7XG5cdCAgICAgICAgdGhpcy5kaXNjcmltaW5hbnQgPSBkaXNjcmltaW5hbnQ7XG5cdCAgICAgICAgdGhpcy5jYXNlcyA9IGNhc2VzO1xuXHQgICAgfVxuXHQgICAgcmV0dXJuIFN3aXRjaFN0YXRlbWVudDtcblx0fSgpKTtcblx0ZXhwb3J0cy5Td2l0Y2hTdGF0ZW1lbnQgPSBTd2l0Y2hTdGF0ZW1lbnQ7XG5cdHZhciBUYWdnZWRUZW1wbGF0ZUV4cHJlc3Npb24gPSAoZnVuY3Rpb24gKCkge1xuXHQgICAgZnVuY3Rpb24gVGFnZ2VkVGVtcGxhdGVFeHByZXNzaW9uKHRhZywgcXVhc2kpIHtcblx0ICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhfMS5TeW50YXguVGFnZ2VkVGVtcGxhdGVFeHByZXNzaW9uO1xuXHQgICAgICAgIHRoaXMudGFnID0gdGFnO1xuXHQgICAgICAgIHRoaXMucXVhc2kgPSBxdWFzaTtcblx0ICAgIH1cblx0ICAgIHJldHVybiBUYWdnZWRUZW1wbGF0ZUV4cHJlc3Npb247XG5cdH0oKSk7XG5cdGV4cG9ydHMuVGFnZ2VkVGVtcGxhdGVFeHByZXNzaW9uID0gVGFnZ2VkVGVtcGxhdGVFeHByZXNzaW9uO1xuXHR2YXIgVGVtcGxhdGVFbGVtZW50ID0gKGZ1bmN0aW9uICgpIHtcblx0ICAgIGZ1bmN0aW9uIFRlbXBsYXRlRWxlbWVudCh2YWx1ZSwgdGFpbCkge1xuXHQgICAgICAgIHRoaXMudHlwZSA9IHN5bnRheF8xLlN5bnRheC5UZW1wbGF0ZUVsZW1lbnQ7XG5cdCAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuXHQgICAgICAgIHRoaXMudGFpbCA9IHRhaWw7XG5cdCAgICB9XG5cdCAgICByZXR1cm4gVGVtcGxhdGVFbGVtZW50O1xuXHR9KCkpO1xuXHRleHBvcnRzLlRlbXBsYXRlRWxlbWVudCA9IFRlbXBsYXRlRWxlbWVudDtcblx0dmFyIFRlbXBsYXRlTGl0ZXJhbCA9IChmdW5jdGlvbiAoKSB7XG5cdCAgICBmdW5jdGlvbiBUZW1wbGF0ZUxpdGVyYWwocXVhc2lzLCBleHByZXNzaW9ucykge1xuXHQgICAgICAgIHRoaXMudHlwZSA9IHN5bnRheF8xLlN5bnRheC5UZW1wbGF0ZUxpdGVyYWw7XG5cdCAgICAgICAgdGhpcy5xdWFzaXMgPSBxdWFzaXM7XG5cdCAgICAgICAgdGhpcy5leHByZXNzaW9ucyA9IGV4cHJlc3Npb25zO1xuXHQgICAgfVxuXHQgICAgcmV0dXJuIFRlbXBsYXRlTGl0ZXJhbDtcblx0fSgpKTtcblx0ZXhwb3J0cy5UZW1wbGF0ZUxpdGVyYWwgPSBUZW1wbGF0ZUxpdGVyYWw7XG5cdHZhciBUaGlzRXhwcmVzc2lvbiA9IChmdW5jdGlvbiAoKSB7XG5cdCAgICBmdW5jdGlvbiBUaGlzRXhwcmVzc2lvbigpIHtcblx0ICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhfMS5TeW50YXguVGhpc0V4cHJlc3Npb247XG5cdCAgICB9XG5cdCAgICByZXR1cm4gVGhpc0V4cHJlc3Npb247XG5cdH0oKSk7XG5cdGV4cG9ydHMuVGhpc0V4cHJlc3Npb24gPSBUaGlzRXhwcmVzc2lvbjtcblx0dmFyIFRocm93U3RhdGVtZW50ID0gKGZ1bmN0aW9uICgpIHtcblx0ICAgIGZ1bmN0aW9uIFRocm93U3RhdGVtZW50KGFyZ3VtZW50KSB7XG5cdCAgICAgICAgdGhpcy50eXBlID0gc3ludGF4XzEuU3ludGF4LlRocm93U3RhdGVtZW50O1xuXHQgICAgICAgIHRoaXMuYXJndW1lbnQgPSBhcmd1bWVudDtcblx0ICAgIH1cblx0ICAgIHJldHVybiBUaHJvd1N0YXRlbWVudDtcblx0fSgpKTtcblx0ZXhwb3J0cy5UaHJvd1N0YXRlbWVudCA9IFRocm93U3RhdGVtZW50O1xuXHR2YXIgVHJ5U3RhdGVtZW50ID0gKGZ1bmN0aW9uICgpIHtcblx0ICAgIGZ1bmN0aW9uIFRyeVN0YXRlbWVudChibG9jaywgaGFuZGxlciwgZmluYWxpemVyKSB7XG5cdCAgICAgICAgdGhpcy50eXBlID0gc3ludGF4XzEuU3ludGF4LlRyeVN0YXRlbWVudDtcblx0ICAgICAgICB0aGlzLmJsb2NrID0gYmxvY2s7XG5cdCAgICAgICAgdGhpcy5oYW5kbGVyID0gaGFuZGxlcjtcblx0ICAgICAgICB0aGlzLmZpbmFsaXplciA9IGZpbmFsaXplcjtcblx0ICAgIH1cblx0ICAgIHJldHVybiBUcnlTdGF0ZW1lbnQ7XG5cdH0oKSk7XG5cdGV4cG9ydHMuVHJ5U3RhdGVtZW50ID0gVHJ5U3RhdGVtZW50O1xuXHR2YXIgVW5hcnlFeHByZXNzaW9uID0gKGZ1bmN0aW9uICgpIHtcblx0ICAgIGZ1bmN0aW9uIFVuYXJ5RXhwcmVzc2lvbihvcGVyYXRvciwgYXJndW1lbnQpIHtcblx0ICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhfMS5TeW50YXguVW5hcnlFeHByZXNzaW9uO1xuXHQgICAgICAgIHRoaXMub3BlcmF0b3IgPSBvcGVyYXRvcjtcblx0ICAgICAgICB0aGlzLmFyZ3VtZW50ID0gYXJndW1lbnQ7XG5cdCAgICAgICAgdGhpcy5wcmVmaXggPSB0cnVlO1xuXHQgICAgfVxuXHQgICAgcmV0dXJuIFVuYXJ5RXhwcmVzc2lvbjtcblx0fSgpKTtcblx0ZXhwb3J0cy5VbmFyeUV4cHJlc3Npb24gPSBVbmFyeUV4cHJlc3Npb247XG5cdHZhciBVcGRhdGVFeHByZXNzaW9uID0gKGZ1bmN0aW9uICgpIHtcblx0ICAgIGZ1bmN0aW9uIFVwZGF0ZUV4cHJlc3Npb24ob3BlcmF0b3IsIGFyZ3VtZW50LCBwcmVmaXgpIHtcblx0ICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhfMS5TeW50YXguVXBkYXRlRXhwcmVzc2lvbjtcblx0ICAgICAgICB0aGlzLm9wZXJhdG9yID0gb3BlcmF0b3I7XG5cdCAgICAgICAgdGhpcy5hcmd1bWVudCA9IGFyZ3VtZW50O1xuXHQgICAgICAgIHRoaXMucHJlZml4ID0gcHJlZml4O1xuXHQgICAgfVxuXHQgICAgcmV0dXJuIFVwZGF0ZUV4cHJlc3Npb247XG5cdH0oKSk7XG5cdGV4cG9ydHMuVXBkYXRlRXhwcmVzc2lvbiA9IFVwZGF0ZUV4cHJlc3Npb247XG5cdHZhciBWYXJpYWJsZURlY2xhcmF0aW9uID0gKGZ1bmN0aW9uICgpIHtcblx0ICAgIGZ1bmN0aW9uIFZhcmlhYmxlRGVjbGFyYXRpb24oZGVjbGFyYXRpb25zLCBraW5kKSB7XG5cdCAgICAgICAgdGhpcy50eXBlID0gc3ludGF4XzEuU3ludGF4LlZhcmlhYmxlRGVjbGFyYXRpb247XG5cdCAgICAgICAgdGhpcy5kZWNsYXJhdGlvbnMgPSBkZWNsYXJhdGlvbnM7XG5cdCAgICAgICAgdGhpcy5raW5kID0ga2luZDtcblx0ICAgIH1cblx0ICAgIHJldHVybiBWYXJpYWJsZURlY2xhcmF0aW9uO1xuXHR9KCkpO1xuXHRleHBvcnRzLlZhcmlhYmxlRGVjbGFyYXRpb24gPSBWYXJpYWJsZURlY2xhcmF0aW9uO1xuXHR2YXIgVmFyaWFibGVEZWNsYXJhdG9yID0gKGZ1bmN0aW9uICgpIHtcblx0ICAgIGZ1bmN0aW9uIFZhcmlhYmxlRGVjbGFyYXRvcihpZCwgaW5pdCkge1xuXHQgICAgICAgIHRoaXMudHlwZSA9IHN5bnRheF8xLlN5bnRheC5WYXJpYWJsZURlY2xhcmF0b3I7XG5cdCAgICAgICAgdGhpcy5pZCA9IGlkO1xuXHQgICAgICAgIHRoaXMuaW5pdCA9IGluaXQ7XG5cdCAgICB9XG5cdCAgICByZXR1cm4gVmFyaWFibGVEZWNsYXJhdG9yO1xuXHR9KCkpO1xuXHRleHBvcnRzLlZhcmlhYmxlRGVjbGFyYXRvciA9IFZhcmlhYmxlRGVjbGFyYXRvcjtcblx0dmFyIFdoaWxlU3RhdGVtZW50ID0gKGZ1bmN0aW9uICgpIHtcblx0ICAgIGZ1bmN0aW9uIFdoaWxlU3RhdGVtZW50KHRlc3QsIGJvZHkpIHtcblx0ICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhfMS5TeW50YXguV2hpbGVTdGF0ZW1lbnQ7XG5cdCAgICAgICAgdGhpcy50ZXN0ID0gdGVzdDtcblx0ICAgICAgICB0aGlzLmJvZHkgPSBib2R5O1xuXHQgICAgfVxuXHQgICAgcmV0dXJuIFdoaWxlU3RhdGVtZW50O1xuXHR9KCkpO1xuXHRleHBvcnRzLldoaWxlU3RhdGVtZW50ID0gV2hpbGVTdGF0ZW1lbnQ7XG5cdHZhciBXaXRoU3RhdGVtZW50ID0gKGZ1bmN0aW9uICgpIHtcblx0ICAgIGZ1bmN0aW9uIFdpdGhTdGF0ZW1lbnQob2JqZWN0LCBib2R5KSB7XG5cdCAgICAgICAgdGhpcy50eXBlID0gc3ludGF4XzEuU3ludGF4LldpdGhTdGF0ZW1lbnQ7XG5cdCAgICAgICAgdGhpcy5vYmplY3QgPSBvYmplY3Q7XG5cdCAgICAgICAgdGhpcy5ib2R5ID0gYm9keTtcblx0ICAgIH1cblx0ICAgIHJldHVybiBXaXRoU3RhdGVtZW50O1xuXHR9KCkpO1xuXHRleHBvcnRzLldpdGhTdGF0ZW1lbnQgPSBXaXRoU3RhdGVtZW50O1xuXHR2YXIgWWllbGRFeHByZXNzaW9uID0gKGZ1bmN0aW9uICgpIHtcblx0ICAgIGZ1bmN0aW9uIFlpZWxkRXhwcmVzc2lvbihhcmd1bWVudCwgZGVsZWdhdGUpIHtcblx0ICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhfMS5TeW50YXguWWllbGRFeHByZXNzaW9uO1xuXHQgICAgICAgIHRoaXMuYXJndW1lbnQgPSBhcmd1bWVudDtcblx0ICAgICAgICB0aGlzLmRlbGVnYXRlID0gZGVsZWdhdGU7XG5cdCAgICB9XG5cdCAgICByZXR1cm4gWWllbGRFeHByZXNzaW9uO1xuXHR9KCkpO1xuXHRleHBvcnRzLllpZWxkRXhwcmVzc2lvbiA9IFlpZWxkRXhwcmVzc2lvbjtcblxuXG4vKioqLyB9LFxuLyogOCAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0XCJ1c2Ugc3RyaWN0XCI7XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0dmFyIGFzc2VydF8xID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5KTtcblx0dmFyIGVycm9yX2hhbmRsZXJfMSA9IF9fd2VicGFja19yZXF1aXJlX18oMTApO1xuXHR2YXIgbWVzc2FnZXNfMSA9IF9fd2VicGFja19yZXF1aXJlX18oMTEpO1xuXHR2YXIgTm9kZSA9IF9fd2VicGFja19yZXF1aXJlX18oNyk7XG5cdHZhciBzY2FubmVyXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyKTtcblx0dmFyIHN5bnRheF8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKTtcblx0dmFyIHRva2VuXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzKTtcblx0dmFyIEFycm93UGFyYW1ldGVyUGxhY2VIb2xkZXIgPSAnQXJyb3dQYXJhbWV0ZXJQbGFjZUhvbGRlcic7XG5cdHZhciBQYXJzZXIgPSAoZnVuY3Rpb24gKCkge1xuXHQgICAgZnVuY3Rpb24gUGFyc2VyKGNvZGUsIG9wdGlvbnMsIGRlbGVnYXRlKSB7XG5cdCAgICAgICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgeyBvcHRpb25zID0ge307IH1cblx0ICAgICAgICB0aGlzLmNvbmZpZyA9IHtcblx0ICAgICAgICAgICAgcmFuZ2U6ICh0eXBlb2Ygb3B0aW9ucy5yYW5nZSA9PT0gJ2Jvb2xlYW4nKSAmJiBvcHRpb25zLnJhbmdlLFxuXHQgICAgICAgICAgICBsb2M6ICh0eXBlb2Ygb3B0aW9ucy5sb2MgPT09ICdib29sZWFuJykgJiYgb3B0aW9ucy5sb2MsXG5cdCAgICAgICAgICAgIHNvdXJjZTogbnVsbCxcblx0ICAgICAgICAgICAgdG9rZW5zOiAodHlwZW9mIG9wdGlvbnMudG9rZW5zID09PSAnYm9vbGVhbicpICYmIG9wdGlvbnMudG9rZW5zLFxuXHQgICAgICAgICAgICBjb21tZW50OiAodHlwZW9mIG9wdGlvbnMuY29tbWVudCA9PT0gJ2Jvb2xlYW4nKSAmJiBvcHRpb25zLmNvbW1lbnQsXG5cdCAgICAgICAgICAgIHRvbGVyYW50OiAodHlwZW9mIG9wdGlvbnMudG9sZXJhbnQgPT09ICdib29sZWFuJykgJiYgb3B0aW9ucy50b2xlcmFudFxuXHQgICAgICAgIH07XG5cdCAgICAgICAgaWYgKHRoaXMuY29uZmlnLmxvYyAmJiBvcHRpb25zLnNvdXJjZSAmJiBvcHRpb25zLnNvdXJjZSAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICB0aGlzLmNvbmZpZy5zb3VyY2UgPSBTdHJpbmcob3B0aW9ucy5zb3VyY2UpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLmRlbGVnYXRlID0gZGVsZWdhdGU7XG5cdCAgICAgICAgdGhpcy5lcnJvckhhbmRsZXIgPSBuZXcgZXJyb3JfaGFuZGxlcl8xLkVycm9ySGFuZGxlcigpO1xuXHQgICAgICAgIHRoaXMuZXJyb3JIYW5kbGVyLnRvbGVyYW50ID0gdGhpcy5jb25maWcudG9sZXJhbnQ7XG5cdCAgICAgICAgdGhpcy5zY2FubmVyID0gbmV3IHNjYW5uZXJfMS5TY2FubmVyKGNvZGUsIHRoaXMuZXJyb3JIYW5kbGVyKTtcblx0ICAgICAgICB0aGlzLnNjYW5uZXIudHJhY2tDb21tZW50ID0gdGhpcy5jb25maWcuY29tbWVudDtcblx0ICAgICAgICB0aGlzLm9wZXJhdG9yUHJlY2VkZW5jZSA9IHtcblx0ICAgICAgICAgICAgJyknOiAwLFxuXHQgICAgICAgICAgICAnOyc6IDAsXG5cdCAgICAgICAgICAgICcsJzogMCxcblx0ICAgICAgICAgICAgJz0nOiAwLFxuXHQgICAgICAgICAgICAnXSc6IDAsXG5cdCAgICAgICAgICAgICd8fCc6IDEsXG5cdCAgICAgICAgICAgICcmJic6IDIsXG5cdCAgICAgICAgICAgICd8JzogMyxcblx0ICAgICAgICAgICAgJ14nOiA0LFxuXHQgICAgICAgICAgICAnJic6IDUsXG5cdCAgICAgICAgICAgICc9PSc6IDYsXG5cdCAgICAgICAgICAgICchPSc6IDYsXG5cdCAgICAgICAgICAgICc9PT0nOiA2LFxuXHQgICAgICAgICAgICAnIT09JzogNixcblx0ICAgICAgICAgICAgJzwnOiA3LFxuXHQgICAgICAgICAgICAnPic6IDcsXG5cdCAgICAgICAgICAgICc8PSc6IDcsXG5cdCAgICAgICAgICAgICc+PSc6IDcsXG5cdCAgICAgICAgICAgICc8PCc6IDgsXG5cdCAgICAgICAgICAgICc+Pic6IDgsXG5cdCAgICAgICAgICAgICc+Pj4nOiA4LFxuXHQgICAgICAgICAgICAnKyc6IDksXG5cdCAgICAgICAgICAgICctJzogOSxcblx0ICAgICAgICAgICAgJyonOiAxMSxcblx0ICAgICAgICAgICAgJy8nOiAxMSxcblx0ICAgICAgICAgICAgJyUnOiAxMVxuXHQgICAgICAgIH07XG5cdCAgICAgICAgdGhpcy5sb29rYWhlYWQgPSB7XG5cdCAgICAgICAgICAgIHR5cGU6IDIgLyogRU9GICovLFxuXHQgICAgICAgICAgICB2YWx1ZTogJycsXG5cdCAgICAgICAgICAgIGxpbmVOdW1iZXI6IHRoaXMuc2Nhbm5lci5saW5lTnVtYmVyLFxuXHQgICAgICAgICAgICBsaW5lU3RhcnQ6IDAsXG5cdCAgICAgICAgICAgIHN0YXJ0OiAwLFxuXHQgICAgICAgICAgICBlbmQ6IDBcblx0ICAgICAgICB9O1xuXHQgICAgICAgIHRoaXMuaGFzTGluZVRlcm1pbmF0b3IgPSBmYWxzZTtcblx0ICAgICAgICB0aGlzLmNvbnRleHQgPSB7XG5cdCAgICAgICAgICAgIGlzTW9kdWxlOiBmYWxzZSxcblx0ICAgICAgICAgICAgYXdhaXQ6IGZhbHNlLFxuXHQgICAgICAgICAgICBhbGxvd0luOiB0cnVlLFxuXHQgICAgICAgICAgICBhbGxvd1N0cmljdERpcmVjdGl2ZTogdHJ1ZSxcblx0ICAgICAgICAgICAgYWxsb3dZaWVsZDogdHJ1ZSxcblx0ICAgICAgICAgICAgZmlyc3RDb3ZlckluaXRpYWxpemVkTmFtZUVycm9yOiBudWxsLFxuXHQgICAgICAgICAgICBpc0Fzc2lnbm1lbnRUYXJnZXQ6IGZhbHNlLFxuXHQgICAgICAgICAgICBpc0JpbmRpbmdFbGVtZW50OiBmYWxzZSxcblx0ICAgICAgICAgICAgaW5GdW5jdGlvbkJvZHk6IGZhbHNlLFxuXHQgICAgICAgICAgICBpbkl0ZXJhdGlvbjogZmFsc2UsXG5cdCAgICAgICAgICAgIGluU3dpdGNoOiBmYWxzZSxcblx0ICAgICAgICAgICAgbGFiZWxTZXQ6IHt9LFxuXHQgICAgICAgICAgICBzdHJpY3Q6IGZhbHNlXG5cdCAgICAgICAgfTtcblx0ICAgICAgICB0aGlzLnRva2VucyA9IFtdO1xuXHQgICAgICAgIHRoaXMuc3RhcnRNYXJrZXIgPSB7XG5cdCAgICAgICAgICAgIGluZGV4OiAwLFxuXHQgICAgICAgICAgICBsaW5lOiB0aGlzLnNjYW5uZXIubGluZU51bWJlcixcblx0ICAgICAgICAgICAgY29sdW1uOiAwXG5cdCAgICAgICAgfTtcblx0ICAgICAgICB0aGlzLmxhc3RNYXJrZXIgPSB7XG5cdCAgICAgICAgICAgIGluZGV4OiAwLFxuXHQgICAgICAgICAgICBsaW5lOiB0aGlzLnNjYW5uZXIubGluZU51bWJlcixcblx0ICAgICAgICAgICAgY29sdW1uOiAwXG5cdCAgICAgICAgfTtcblx0ICAgICAgICB0aGlzLm5leHRUb2tlbigpO1xuXHQgICAgICAgIHRoaXMubGFzdE1hcmtlciA9IHtcblx0ICAgICAgICAgICAgaW5kZXg6IHRoaXMuc2Nhbm5lci5pbmRleCxcblx0ICAgICAgICAgICAgbGluZTogdGhpcy5zY2FubmVyLmxpbmVOdW1iZXIsXG5cdCAgICAgICAgICAgIGNvbHVtbjogdGhpcy5zY2FubmVyLmluZGV4IC0gdGhpcy5zY2FubmVyLmxpbmVTdGFydFxuXHQgICAgICAgIH07XG5cdCAgICB9XG5cdCAgICBQYXJzZXIucHJvdG90eXBlLnRocm93RXJyb3IgPSBmdW5jdGlvbiAobWVzc2FnZUZvcm1hdCkge1xuXHQgICAgICAgIHZhciB2YWx1ZXMgPSBbXTtcblx0ICAgICAgICBmb3IgKHZhciBfaSA9IDE7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuXHQgICAgICAgICAgICB2YWx1ZXNbX2kgLSAxXSA9IGFyZ3VtZW50c1tfaV07XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcblx0ICAgICAgICB2YXIgbXNnID0gbWVzc2FnZUZvcm1hdC5yZXBsYWNlKC8lKFxcZCkvZywgZnVuY3Rpb24gKHdob2xlLCBpZHgpIHtcblx0ICAgICAgICAgICAgYXNzZXJ0XzEuYXNzZXJ0KGlkeCA8IGFyZ3MubGVuZ3RoLCAnTWVzc2FnZSByZWZlcmVuY2UgbXVzdCBiZSBpbiByYW5nZScpO1xuXHQgICAgICAgICAgICByZXR1cm4gYXJnc1tpZHhdO1xuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHZhciBpbmRleCA9IHRoaXMubGFzdE1hcmtlci5pbmRleDtcblx0ICAgICAgICB2YXIgbGluZSA9IHRoaXMubGFzdE1hcmtlci5saW5lO1xuXHQgICAgICAgIHZhciBjb2x1bW4gPSB0aGlzLmxhc3RNYXJrZXIuY29sdW1uICsgMTtcblx0ICAgICAgICB0aHJvdyB0aGlzLmVycm9ySGFuZGxlci5jcmVhdGVFcnJvcihpbmRleCwgbGluZSwgY29sdW1uLCBtc2cpO1xuXHQgICAgfTtcblx0ICAgIFBhcnNlci5wcm90b3R5cGUudG9sZXJhdGVFcnJvciA9IGZ1bmN0aW9uIChtZXNzYWdlRm9ybWF0KSB7XG5cdCAgICAgICAgdmFyIHZhbHVlcyA9IFtdO1xuXHQgICAgICAgIGZvciAodmFyIF9pID0gMTsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG5cdCAgICAgICAgICAgIHZhbHVlc1tfaSAtIDFdID0gYXJndW1lbnRzW19pXTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuXHQgICAgICAgIHZhciBtc2cgPSBtZXNzYWdlRm9ybWF0LnJlcGxhY2UoLyUoXFxkKS9nLCBmdW5jdGlvbiAod2hvbGUsIGlkeCkge1xuXHQgICAgICAgICAgICBhc3NlcnRfMS5hc3NlcnQoaWR4IDwgYXJncy5sZW5ndGgsICdNZXNzYWdlIHJlZmVyZW5jZSBtdXN0IGJlIGluIHJhbmdlJyk7XG5cdCAgICAgICAgICAgIHJldHVybiBhcmdzW2lkeF07XG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5sYXN0TWFya2VyLmluZGV4O1xuXHQgICAgICAgIHZhciBsaW5lID0gdGhpcy5zY2FubmVyLmxpbmVOdW1iZXI7XG5cdCAgICAgICAgdmFyIGNvbHVtbiA9IHRoaXMubGFzdE1hcmtlci5jb2x1bW4gKyAxO1xuXHQgICAgICAgIHRoaXMuZXJyb3JIYW5kbGVyLnRvbGVyYXRlRXJyb3IoaW5kZXgsIGxpbmUsIGNvbHVtbiwgbXNnKTtcblx0ICAgIH07XG5cdCAgICAvLyBUaHJvdyBhbiBleGNlcHRpb24gYmVjYXVzZSBvZiB0aGUgdG9rZW4uXG5cdCAgICBQYXJzZXIucHJvdG90eXBlLnVuZXhwZWN0ZWRUb2tlbkVycm9yID0gZnVuY3Rpb24gKHRva2VuLCBtZXNzYWdlKSB7XG5cdCAgICAgICAgdmFyIG1zZyA9IG1lc3NhZ2UgfHwgbWVzc2FnZXNfMS5NZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW47XG5cdCAgICAgICAgdmFyIHZhbHVlO1xuXHQgICAgICAgIGlmICh0b2tlbikge1xuXHQgICAgICAgICAgICBpZiAoIW1lc3NhZ2UpIHtcblx0ICAgICAgICAgICAgICAgIG1zZyA9ICh0b2tlbi50eXBlID09PSAyIC8qIEVPRiAqLykgPyBtZXNzYWdlc18xLk1lc3NhZ2VzLlVuZXhwZWN0ZWRFT1MgOlxuXHQgICAgICAgICAgICAgICAgICAgICh0b2tlbi50eXBlID09PSAzIC8qIElkZW50aWZpZXIgKi8pID8gbWVzc2FnZXNfMS5NZXNzYWdlcy5VbmV4cGVjdGVkSWRlbnRpZmllciA6XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICh0b2tlbi50eXBlID09PSA2IC8qIE51bWVyaWNMaXRlcmFsICovKSA/IG1lc3NhZ2VzXzEuTWVzc2FnZXMuVW5leHBlY3RlZE51bWJlciA6XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAodG9rZW4udHlwZSA9PT0gOCAvKiBTdHJpbmdMaXRlcmFsICovKSA/IG1lc3NhZ2VzXzEuTWVzc2FnZXMuVW5leHBlY3RlZFN0cmluZyA6XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRva2VuLnR5cGUgPT09IDEwIC8qIFRlbXBsYXRlICovKSA/IG1lc3NhZ2VzXzEuTWVzc2FnZXMuVW5leHBlY3RlZFRlbXBsYXRlIDpcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZXNfMS5NZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW47XG5cdCAgICAgICAgICAgICAgICBpZiAodG9rZW4udHlwZSA9PT0gNCAvKiBLZXl3b3JkICovKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2Nhbm5lci5pc0Z1dHVyZVJlc2VydmVkV29yZCh0b2tlbi52YWx1ZSkpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgbXNnID0gbWVzc2FnZXNfMS5NZXNzYWdlcy5VbmV4cGVjdGVkUmVzZXJ2ZWQ7XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuY29udGV4dC5zdHJpY3QgJiYgdGhpcy5zY2FubmVyLmlzU3RyaWN0TW9kZVJlc2VydmVkV29yZCh0b2tlbi52YWx1ZSkpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgbXNnID0gbWVzc2FnZXNfMS5NZXNzYWdlcy5TdHJpY3RSZXNlcnZlZFdvcmQ7XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHZhbHVlID0gdG9rZW4udmFsdWU7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGVsc2Uge1xuXHQgICAgICAgICAgICB2YWx1ZSA9ICdJTExFR0FMJztcblx0ICAgICAgICB9XG5cdCAgICAgICAgbXNnID0gbXNnLnJlcGxhY2UoJyUwJywgdmFsdWUpO1xuXHQgICAgICAgIGlmICh0b2tlbiAmJiB0eXBlb2YgdG9rZW4ubGluZU51bWJlciA9PT0gJ251bWJlcicpIHtcblx0ICAgICAgICAgICAgdmFyIGluZGV4ID0gdG9rZW4uc3RhcnQ7XG5cdCAgICAgICAgICAgIHZhciBsaW5lID0gdG9rZW4ubGluZU51bWJlcjtcblx0ICAgICAgICAgICAgdmFyIGxhc3RNYXJrZXJMaW5lU3RhcnQgPSB0aGlzLmxhc3RNYXJrZXIuaW5kZXggLSB0aGlzLmxhc3RNYXJrZXIuY29sdW1uO1xuXHQgICAgICAgICAgICB2YXIgY29sdW1uID0gdG9rZW4uc3RhcnQgLSBsYXN0TWFya2VyTGluZVN0YXJ0ICsgMTtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXJyb3JIYW5kbGVyLmNyZWF0ZUVycm9yKGluZGV4LCBsaW5lLCBjb2x1bW4sIG1zZyk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGVsc2Uge1xuXHQgICAgICAgICAgICB2YXIgaW5kZXggPSB0aGlzLmxhc3RNYXJrZXIuaW5kZXg7XG5cdCAgICAgICAgICAgIHZhciBsaW5lID0gdGhpcy5sYXN0TWFya2VyLmxpbmU7XG5cdCAgICAgICAgICAgIHZhciBjb2x1bW4gPSB0aGlzLmxhc3RNYXJrZXIuY29sdW1uICsgMTtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXJyb3JIYW5kbGVyLmNyZWF0ZUVycm9yKGluZGV4LCBsaW5lLCBjb2x1bW4sIG1zZyk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIFBhcnNlci5wcm90b3R5cGUudGhyb3dVbmV4cGVjdGVkVG9rZW4gPSBmdW5jdGlvbiAodG9rZW4sIG1lc3NhZ2UpIHtcblx0ICAgICAgICB0aHJvdyB0aGlzLnVuZXhwZWN0ZWRUb2tlbkVycm9yKHRva2VuLCBtZXNzYWdlKTtcblx0ICAgIH07XG5cdCAgICBQYXJzZXIucHJvdG90eXBlLnRvbGVyYXRlVW5leHBlY3RlZFRva2VuID0gZnVuY3Rpb24gKHRva2VuLCBtZXNzYWdlKSB7XG5cdCAgICAgICAgdGhpcy5lcnJvckhhbmRsZXIudG9sZXJhdGUodGhpcy51bmV4cGVjdGVkVG9rZW5FcnJvcih0b2tlbiwgbWVzc2FnZSkpO1xuXHQgICAgfTtcblx0ICAgIFBhcnNlci5wcm90b3R5cGUuY29sbGVjdENvbW1lbnRzID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGlmICghdGhpcy5jb25maWcuY29tbWVudCkge1xuXHQgICAgICAgICAgICB0aGlzLnNjYW5uZXIuc2NhbkNvbW1lbnRzKCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGVsc2Uge1xuXHQgICAgICAgICAgICB2YXIgY29tbWVudHMgPSB0aGlzLnNjYW5uZXIuc2NhbkNvbW1lbnRzKCk7XG5cdCAgICAgICAgICAgIGlmIChjb21tZW50cy5sZW5ndGggPiAwICYmIHRoaXMuZGVsZWdhdGUpIHtcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29tbWVudHMubGVuZ3RoOyArK2kpIHtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgZSA9IGNvbW1lbnRzW2ldO1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBub2RlID0gdm9pZCAwO1xuXHQgICAgICAgICAgICAgICAgICAgIG5vZGUgPSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IGUubXVsdGlMaW5lID8gJ0Jsb2NrQ29tbWVudCcgOiAnTGluZUNvbW1lbnQnLFxuXHQgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy5zY2FubmVyLnNvdXJjZS5zbGljZShlLnNsaWNlWzBdLCBlLnNsaWNlWzFdKVxuXHQgICAgICAgICAgICAgICAgICAgIH07XG5cdCAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY29uZmlnLnJhbmdlKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUucmFuZ2UgPSBlLnJhbmdlO1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jb25maWcubG9jKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUubG9jID0gZS5sb2M7XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgICAgIHZhciBtZXRhZGF0YSA9IHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmU6IGUubG9jLnN0YXJ0LmxpbmUsXG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW46IGUubG9jLnN0YXJ0LmNvbHVtbixcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldDogZS5yYW5nZVswXVxuXHQgICAgICAgICAgICAgICAgICAgICAgICB9LFxuXHQgICAgICAgICAgICAgICAgICAgICAgICBlbmQ6IHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmU6IGUubG9jLmVuZC5saW5lLFxuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uOiBlLmxvYy5lbmQuY29sdW1uLFxuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0OiBlLnJhbmdlWzFdXG5cdCAgICAgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgICAgICB9O1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVsZWdhdGUobm9kZSwgbWV0YWRhdGEpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8vIEZyb20gaW50ZXJuYWwgcmVwcmVzZW50YXRpb24gdG8gYW4gZXh0ZXJuYWwgc3RydWN0dXJlXG5cdCAgICBQYXJzZXIucHJvdG90eXBlLmdldFRva2VuUmF3ID0gZnVuY3Rpb24gKHRva2VuKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuc2Nhbm5lci5zb3VyY2Uuc2xpY2UodG9rZW4uc3RhcnQsIHRva2VuLmVuZCk7XG5cdCAgICB9O1xuXHQgICAgUGFyc2VyLnByb3RvdHlwZS5jb252ZXJ0VG9rZW4gPSBmdW5jdGlvbiAodG9rZW4pIHtcblx0ICAgICAgICB2YXIgdCA9IHtcblx0ICAgICAgICAgICAgdHlwZTogdG9rZW5fMS5Ub2tlbk5hbWVbdG9rZW4udHlwZV0sXG5cdCAgICAgICAgICAgIHZhbHVlOiB0aGlzLmdldFRva2VuUmF3KHRva2VuKVxuXHQgICAgICAgIH07XG5cdCAgICAgICAgaWYgKHRoaXMuY29uZmlnLnJhbmdlKSB7XG5cdCAgICAgICAgICAgIHQucmFuZ2UgPSBbdG9rZW4uc3RhcnQsIHRva2VuLmVuZF07XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmICh0aGlzLmNvbmZpZy5sb2MpIHtcblx0ICAgICAgICAgICAgdC5sb2MgPSB7XG5cdCAgICAgICAgICAgICAgICBzdGFydDoge1xuXHQgICAgICAgICAgICAgICAgICAgIGxpbmU6IHRoaXMuc3RhcnRNYXJrZXIubGluZSxcblx0ICAgICAgICAgICAgICAgICAgICBjb2x1bW46IHRoaXMuc3RhcnRNYXJrZXIuY29sdW1uXG5cdCAgICAgICAgICAgICAgICB9LFxuXHQgICAgICAgICAgICAgICAgZW5kOiB7XG5cdCAgICAgICAgICAgICAgICAgICAgbGluZTogdGhpcy5zY2FubmVyLmxpbmVOdW1iZXIsXG5cdCAgICAgICAgICAgICAgICAgICAgY29sdW1uOiB0aGlzLnNjYW5uZXIuaW5kZXggLSB0aGlzLnNjYW5uZXIubGluZVN0YXJ0XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH07XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmICh0b2tlbi50eXBlID09PSA5IC8qIFJlZ3VsYXJFeHByZXNzaW9uICovKSB7XG5cdCAgICAgICAgICAgIHZhciBwYXR0ZXJuID0gdG9rZW4ucGF0dGVybjtcblx0ICAgICAgICAgICAgdmFyIGZsYWdzID0gdG9rZW4uZmxhZ3M7XG5cdCAgICAgICAgICAgIHQucmVnZXggPSB7IHBhdHRlcm46IHBhdHRlcm4sIGZsYWdzOiBmbGFncyB9O1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdDtcblx0ICAgIH07XG5cdCAgICBQYXJzZXIucHJvdG90eXBlLm5leHRUb2tlbiA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgdG9rZW4gPSB0aGlzLmxvb2thaGVhZDtcblx0ICAgICAgICB0aGlzLmxhc3RNYXJrZXIuaW5kZXggPSB0aGlzLnNjYW5uZXIuaW5kZXg7XG5cdCAgICAgICAgdGhpcy5sYXN0TWFya2VyLmxpbmUgPSB0aGlzLnNjYW5uZXIubGluZU51bWJlcjtcblx0ICAgICAgICB0aGlzLmxhc3RNYXJrZXIuY29sdW1uID0gdGhpcy5zY2FubmVyLmluZGV4IC0gdGhpcy5zY2FubmVyLmxpbmVTdGFydDtcblx0ICAgICAgICB0aGlzLmNvbGxlY3RDb21tZW50cygpO1xuXHQgICAgICAgIGlmICh0aGlzLnNjYW5uZXIuaW5kZXggIT09IHRoaXMuc3RhcnRNYXJrZXIuaW5kZXgpIHtcblx0ICAgICAgICAgICAgdGhpcy5zdGFydE1hcmtlci5pbmRleCA9IHRoaXMuc2Nhbm5lci5pbmRleDtcblx0ICAgICAgICAgICAgdGhpcy5zdGFydE1hcmtlci5saW5lID0gdGhpcy5zY2FubmVyLmxpbmVOdW1iZXI7XG5cdCAgICAgICAgICAgIHRoaXMuc3RhcnRNYXJrZXIuY29sdW1uID0gdGhpcy5zY2FubmVyLmluZGV4IC0gdGhpcy5zY2FubmVyLmxpbmVTdGFydDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdmFyIG5leHQgPSB0aGlzLnNjYW5uZXIubGV4KCk7XG5cdCAgICAgICAgdGhpcy5oYXNMaW5lVGVybWluYXRvciA9ICh0b2tlbi5saW5lTnVtYmVyICE9PSBuZXh0LmxpbmVOdW1iZXIpO1xuXHQgICAgICAgIGlmIChuZXh0ICYmIHRoaXMuY29udGV4dC5zdHJpY3QgJiYgbmV4dC50eXBlID09PSAzIC8qIElkZW50aWZpZXIgKi8pIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuc2Nhbm5lci5pc1N0cmljdE1vZGVSZXNlcnZlZFdvcmQobmV4dC52YWx1ZSkpIHtcblx0ICAgICAgICAgICAgICAgIG5leHQudHlwZSA9IDQgLyogS2V5d29yZCAqLztcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLmxvb2thaGVhZCA9IG5leHQ7XG5cdCAgICAgICAgaWYgKHRoaXMuY29uZmlnLnRva2VucyAmJiBuZXh0LnR5cGUgIT09IDIgLyogRU9GICovKSB7XG5cdCAgICAgICAgICAgIHRoaXMudG9rZW5zLnB1c2godGhpcy5jb252ZXJ0VG9rZW4obmV4dCkpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdG9rZW47XG5cdCAgICB9O1xuXHQgICAgUGFyc2VyLnByb3RvdHlwZS5uZXh0UmVnZXhUb2tlbiA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLmNvbGxlY3RDb21tZW50cygpO1xuXHQgICAgICAgIHZhciB0b2tlbiA9IHRoaXMuc2Nhbm5lci5zY2FuUmVnRXhwKCk7XG5cdCAgICAgICAgaWYgKHRoaXMuY29uZmlnLnRva2Vucykge1xuXHQgICAgICAgICAgICAvLyBQb3AgdGhlIHByZXZpb3VzIHRva2VuLCAnLycgb3IgJy89J1xuXHQgICAgICAgICAgICAvLyBUaGlzIGlzIGFkZGVkIGZyb20gdGhlIGxvb2thaGVhZCB0b2tlbi5cblx0ICAgICAgICAgICAgdGhpcy50b2tlbnMucG9wKCk7XG5cdCAgICAgICAgICAgIHRoaXMudG9rZW5zLnB1c2godGhpcy5jb252ZXJ0VG9rZW4odG9rZW4pKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy8gUHJpbWUgdGhlIG5leHQgbG9va2FoZWFkLlxuXHQgICAgICAgIHRoaXMubG9va2FoZWFkID0gdG9rZW47XG5cdCAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTtcblx0ICAgICAgICByZXR1cm4gdG9rZW47XG5cdCAgICB9O1xuXHQgICAgUGFyc2VyLnByb3RvdHlwZS5jcmVhdGVOb2RlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB7XG5cdCAgICAgICAgICAgIGluZGV4OiB0aGlzLnN0YXJ0TWFya2VyLmluZGV4LFxuXHQgICAgICAgICAgICBsaW5lOiB0aGlzLnN0YXJ0TWFya2VyLmxpbmUsXG5cdCAgICAgICAgICAgIGNvbHVtbjogdGhpcy5zdGFydE1hcmtlci5jb2x1bW5cblx0ICAgICAgICB9O1xuXHQgICAgfTtcblx0ICAgIFBhcnNlci5wcm90b3R5cGUuc3RhcnROb2RlID0gZnVuY3Rpb24gKHRva2VuLCBsYXN0TGluZVN0YXJ0KSB7XG5cdCAgICAgICAgaWYgKGxhc3RMaW5lU3RhcnQgPT09IHZvaWQgMCkgeyBsYXN0TGluZVN0YXJ0ID0gMDsgfVxuXHQgICAgICAgIHZhciBjb2x1bW4gPSB0b2tlbi5zdGFydCAtIHRva2VuLmxpbmVTdGFydDtcblx0ICAgICAgICB2YXIgbGluZSA9IHRva2VuLmxpbmVOdW1iZXI7XG5cdCAgICAgICAgaWYgKGNvbHVtbiA8IDApIHtcblx0ICAgICAgICAgICAgY29sdW1uICs9IGxhc3RMaW5lU3RhcnQ7XG5cdCAgICAgICAgICAgIGxpbmUtLTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHtcblx0ICAgICAgICAgICAgaW5kZXg6IHRva2VuLnN0YXJ0LFxuXHQgICAgICAgICAgICBsaW5lOiBsaW5lLFxuXHQgICAgICAgICAgICBjb2x1bW46IGNvbHVtblxuXHQgICAgICAgIH07XG5cdCAgICB9O1xuXHQgICAgUGFyc2VyLnByb3RvdHlwZS5maW5hbGl6ZSA9IGZ1bmN0aW9uIChtYXJrZXIsIG5vZGUpIHtcblx0ICAgICAgICBpZiAodGhpcy5jb25maWcucmFuZ2UpIHtcblx0ICAgICAgICAgICAgbm9kZS5yYW5nZSA9IFttYXJrZXIuaW5kZXgsIHRoaXMubGFzdE1hcmtlci5pbmRleF07XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmICh0aGlzLmNvbmZpZy5sb2MpIHtcblx0ICAgICAgICAgICAgbm9kZS5sb2MgPSB7XG5cdCAgICAgICAgICAgICAgICBzdGFydDoge1xuXHQgICAgICAgICAgICAgICAgICAgIGxpbmU6IG1hcmtlci5saW5lLFxuXHQgICAgICAgICAgICAgICAgICAgIGNvbHVtbjogbWFya2VyLmNvbHVtbixcblx0ICAgICAgICAgICAgICAgIH0sXG5cdCAgICAgICAgICAgICAgICBlbmQ6IHtcblx0ICAgICAgICAgICAgICAgICAgICBsaW5lOiB0aGlzLmxhc3RNYXJrZXIubGluZSxcblx0ICAgICAgICAgICAgICAgICAgICBjb2x1bW46IHRoaXMubGFzdE1hcmtlci5jb2x1bW5cblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfTtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuY29uZmlnLnNvdXJjZSkge1xuXHQgICAgICAgICAgICAgICAgbm9kZS5sb2Muc291cmNlID0gdGhpcy5jb25maWcuc291cmNlO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmICh0aGlzLmRlbGVnYXRlKSB7XG5cdCAgICAgICAgICAgIHZhciBtZXRhZGF0YSA9IHtcblx0ICAgICAgICAgICAgICAgIHN0YXJ0OiB7XG5cdCAgICAgICAgICAgICAgICAgICAgbGluZTogbWFya2VyLmxpbmUsXG5cdCAgICAgICAgICAgICAgICAgICAgY29sdW1uOiBtYXJrZXIuY29sdW1uLFxuXHQgICAgICAgICAgICAgICAgICAgIG9mZnNldDogbWFya2VyLmluZGV4XG5cdCAgICAgICAgICAgICAgICB9LFxuXHQgICAgICAgICAgICAgICAgZW5kOiB7XG5cdCAgICAgICAgICAgICAgICAgICAgbGluZTogdGhpcy5sYXN0TWFya2VyLmxpbmUsXG5cdCAgICAgICAgICAgICAgICAgICAgY29sdW1uOiB0aGlzLmxhc3RNYXJrZXIuY29sdW1uLFxuXHQgICAgICAgICAgICAgICAgICAgIG9mZnNldDogdGhpcy5sYXN0TWFya2VyLmluZGV4XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH07XG5cdCAgICAgICAgICAgIHRoaXMuZGVsZWdhdGUobm9kZSwgbWV0YWRhdGEpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gbm9kZTtcblx0ICAgIH07XG5cdCAgICAvLyBFeHBlY3QgdGhlIG5leHQgdG9rZW4gdG8gbWF0Y2ggdGhlIHNwZWNpZmllZCBwdW5jdHVhdG9yLlxuXHQgICAgLy8gSWYgbm90LCBhbiBleGNlcHRpb24gd2lsbCBiZSB0aHJvd24uXG5cdCAgICBQYXJzZXIucHJvdG90eXBlLmV4cGVjdCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHQgICAgICAgIHZhciB0b2tlbiA9IHRoaXMubmV4dFRva2VuKCk7XG5cdCAgICAgICAgaWYgKHRva2VuLnR5cGUgIT09IDcgLyogUHVuY3R1YXRvciAqLyB8fCB0b2tlbi52YWx1ZSAhPT0gdmFsdWUpIHtcblx0ICAgICAgICAgICAgdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbih0b2tlbik7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8vIFF1aWV0bHkgZXhwZWN0IGEgY29tbWEgd2hlbiBpbiB0b2xlcmFudCBtb2RlLCBvdGhlcndpc2UgZGVsZWdhdGVzIHRvIGV4cGVjdCgpLlxuXHQgICAgUGFyc2VyLnByb3RvdHlwZS5leHBlY3RDb21tYVNlcGFyYXRvciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBpZiAodGhpcy5jb25maWcudG9sZXJhbnQpIHtcblx0ICAgICAgICAgICAgdmFyIHRva2VuID0gdGhpcy5sb29rYWhlYWQ7XG5cdCAgICAgICAgICAgIGlmICh0b2tlbi50eXBlID09PSA3IC8qIFB1bmN0dWF0b3IgKi8gJiYgdG9rZW4udmFsdWUgPT09ICcsJykge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBlbHNlIGlmICh0b2tlbi50eXBlID09PSA3IC8qIFB1bmN0dWF0b3IgKi8gJiYgdG9rZW4udmFsdWUgPT09ICc7Jykge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTtcblx0ICAgICAgICAgICAgICAgIHRoaXMudG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4odG9rZW4pO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdGhpcy50b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbih0b2tlbiwgbWVzc2FnZXNfMS5NZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4pO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGVsc2Uge1xuXHQgICAgICAgICAgICB0aGlzLmV4cGVjdCgnLCcpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvLyBFeHBlY3QgdGhlIG5leHQgdG9rZW4gdG8gbWF0Y2ggdGhlIHNwZWNpZmllZCBrZXl3b3JkLlxuXHQgICAgLy8gSWYgbm90LCBhbiBleGNlcHRpb24gd2lsbCBiZSB0aHJvd24uXG5cdCAgICBQYXJzZXIucHJvdG90eXBlLmV4cGVjdEtleXdvcmQgPSBmdW5jdGlvbiAoa2V5d29yZCkge1xuXHQgICAgICAgIHZhciB0b2tlbiA9IHRoaXMubmV4dFRva2VuKCk7XG5cdCAgICAgICAgaWYgKHRva2VuLnR5cGUgIT09IDQgLyogS2V5d29yZCAqLyB8fCB0b2tlbi52YWx1ZSAhPT0ga2V5d29yZCkge1xuXHQgICAgICAgICAgICB0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKHRva2VuKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLy8gUmV0dXJuIHRydWUgaWYgdGhlIG5leHQgdG9rZW4gbWF0Y2hlcyB0aGUgc3BlY2lmaWVkIHB1bmN0dWF0b3IuXG5cdCAgICBQYXJzZXIucHJvdG90eXBlLm1hdGNoID0gZnVuY3Rpb24gKHZhbHVlKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMubG9va2FoZWFkLnR5cGUgPT09IDcgLyogUHVuY3R1YXRvciAqLyAmJiB0aGlzLmxvb2thaGVhZC52YWx1ZSA9PT0gdmFsdWU7XG5cdCAgICB9O1xuXHQgICAgLy8gUmV0dXJuIHRydWUgaWYgdGhlIG5leHQgdG9rZW4gbWF0Y2hlcyB0aGUgc3BlY2lmaWVkIGtleXdvcmRcblx0ICAgIFBhcnNlci5wcm90b3R5cGUubWF0Y2hLZXl3b3JkID0gZnVuY3Rpb24gKGtleXdvcmQpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5sb29rYWhlYWQudHlwZSA9PT0gNCAvKiBLZXl3b3JkICovICYmIHRoaXMubG9va2FoZWFkLnZhbHVlID09PSBrZXl3b3JkO1xuXHQgICAgfTtcblx0ICAgIC8vIFJldHVybiB0cnVlIGlmIHRoZSBuZXh0IHRva2VuIG1hdGNoZXMgdGhlIHNwZWNpZmllZCBjb250ZXh0dWFsIGtleXdvcmRcblx0ICAgIC8vICh3aGVyZSBhbiBpZGVudGlmaWVyIGlzIHNvbWV0aW1lcyBhIGtleXdvcmQgZGVwZW5kaW5nIG9uIHRoZSBjb250ZXh0KVxuXHQgICAgUGFyc2VyLnByb3RvdHlwZS5tYXRjaENvbnRleHR1YWxLZXl3b3JkID0gZnVuY3Rpb24gKGtleXdvcmQpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5sb29rYWhlYWQudHlwZSA9PT0gMyAvKiBJZGVudGlmaWVyICovICYmIHRoaXMubG9va2FoZWFkLnZhbHVlID09PSBrZXl3b3JkO1xuXHQgICAgfTtcblx0ICAgIC8vIFJldHVybiB0cnVlIGlmIHRoZSBuZXh0IHRva2VuIGlzIGFuIGFzc2lnbm1lbnQgb3BlcmF0b3Jcblx0ICAgIFBhcnNlci5wcm90b3R5cGUubWF0Y2hBc3NpZ24gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgaWYgKHRoaXMubG9va2FoZWFkLnR5cGUgIT09IDcgLyogUHVuY3R1YXRvciAqLykge1xuXHQgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHZhciBvcCA9IHRoaXMubG9va2FoZWFkLnZhbHVlO1xuXHQgICAgICAgIHJldHVybiBvcCA9PT0gJz0nIHx8XG5cdCAgICAgICAgICAgIG9wID09PSAnKj0nIHx8XG5cdCAgICAgICAgICAgIG9wID09PSAnKio9JyB8fFxuXHQgICAgICAgICAgICBvcCA9PT0gJy89JyB8fFxuXHQgICAgICAgICAgICBvcCA9PT0gJyU9JyB8fFxuXHQgICAgICAgICAgICBvcCA9PT0gJys9JyB8fFxuXHQgICAgICAgICAgICBvcCA9PT0gJy09JyB8fFxuXHQgICAgICAgICAgICBvcCA9PT0gJzw8PScgfHxcblx0ICAgICAgICAgICAgb3AgPT09ICc+Pj0nIHx8XG5cdCAgICAgICAgICAgIG9wID09PSAnPj4+PScgfHxcblx0ICAgICAgICAgICAgb3AgPT09ICcmPScgfHxcblx0ICAgICAgICAgICAgb3AgPT09ICdePScgfHxcblx0ICAgICAgICAgICAgb3AgPT09ICd8PSc7XG5cdCAgICB9O1xuXHQgICAgLy8gQ292ZXIgZ3JhbW1hciBzdXBwb3J0LlxuXHQgICAgLy9cblx0ICAgIC8vIFdoZW4gYW4gYXNzaWdubWVudCBleHByZXNzaW9uIHBvc2l0aW9uIHN0YXJ0cyB3aXRoIGFuIGxlZnQgcGFyZW50aGVzaXMsIHRoZSBkZXRlcm1pbmF0aW9uIG9mIHRoZSB0eXBlXG5cdCAgICAvLyBvZiB0aGUgc3ludGF4IGlzIHRvIGJlIGRlZmVycmVkIGFyYml0cmFyaWx5IGxvbmcgdW50aWwgdGhlIGVuZCBvZiB0aGUgcGFyZW50aGVzZXMgcGFpciAocGx1cyBhIGxvb2thaGVhZClcblx0ICAgIC8vIG9yIHRoZSBmaXJzdCBjb21tYS4gVGhpcyBzaXR1YXRpb24gYWxzbyBkZWZlcnMgdGhlIGRldGVybWluYXRpb24gb2YgYWxsIHRoZSBleHByZXNzaW9ucyBuZXN0ZWQgaW4gdGhlIHBhaXIuXG5cdCAgICAvL1xuXHQgICAgLy8gVGhlcmUgYXJlIHRocmVlIHByb2R1Y3Rpb25zIHRoYXQgY2FuIGJlIHBhcnNlZCBpbiBhIHBhcmVudGhlc2VzIHBhaXIgdGhhdCBuZWVkcyB0byBiZSBkZXRlcm1pbmVkXG5cdCAgICAvLyBhZnRlciB0aGUgb3V0ZXJtb3N0IHBhaXIgaXMgY2xvc2VkLiBUaGV5IGFyZTpcblx0ICAgIC8vXG5cdCAgICAvLyAgIDEuIEFzc2lnbm1lbnRFeHByZXNzaW9uXG5cdCAgICAvLyAgIDIuIEJpbmRpbmdFbGVtZW50c1xuXHQgICAgLy8gICAzLiBBc3NpZ25tZW50VGFyZ2V0c1xuXHQgICAgLy9cblx0ICAgIC8vIEluIG9yZGVyIHRvIGF2b2lkIGV4cG9uZW50aWFsIGJhY2t0cmFja2luZywgd2UgdXNlIHR3byBmbGFncyB0byBkZW5vdGUgaWYgdGhlIHByb2R1Y3Rpb24gY2FuIGJlXG5cdCAgICAvLyBiaW5kaW5nIGVsZW1lbnQgb3IgYXNzaWdubWVudCB0YXJnZXQuXG5cdCAgICAvL1xuXHQgICAgLy8gVGhlIHRocmVlIHByb2R1Y3Rpb25zIGhhdmUgdGhlIHJlbGF0aW9uc2hpcDpcblx0ICAgIC8vXG5cdCAgICAvLyAgIEJpbmRpbmdFbGVtZW50cyDiioYgQXNzaWdubWVudFRhcmdldHMg4oqGIEFzc2lnbm1lbnRFeHByZXNzaW9uXG5cdCAgICAvL1xuXHQgICAgLy8gd2l0aCBhIHNpbmdsZSBleGNlcHRpb24gdGhhdCBDb3ZlckluaXRpYWxpemVkTmFtZSB3aGVuIHVzZWQgZGlyZWN0bHkgaW4gYW4gRXhwcmVzc2lvbiwgZ2VuZXJhdGVzXG5cdCAgICAvLyBhbiBlYXJseSBlcnJvci4gVGhlcmVmb3JlLCB3ZSBuZWVkIHRoZSB0aGlyZCBzdGF0ZSwgZmlyc3RDb3ZlckluaXRpYWxpemVkTmFtZUVycm9yLCB0byB0cmFjayB0aGVcblx0ICAgIC8vIGZpcnN0IHVzYWdlIG9mIENvdmVySW5pdGlhbGl6ZWROYW1lIGFuZCByZXBvcnQgaXQgd2hlbiB3ZSByZWFjaGVkIHRoZSBlbmQgb2YgdGhlIHBhcmVudGhlc2VzIHBhaXIuXG5cdCAgICAvL1xuXHQgICAgLy8gaXNvbGF0ZUNvdmVyR3JhbW1hciBmdW5jdGlvbiBydW5zIHRoZSBnaXZlbiBwYXJzZXIgZnVuY3Rpb24gd2l0aCBhIG5ldyBjb3ZlciBncmFtbWFyIGNvbnRleHQsIGFuZCBpdCBkb2VzIG5vdFxuXHQgICAgLy8gZWZmZWN0IHRoZSBjdXJyZW50IGZsYWdzLiBUaGlzIG1lYW5zIHRoZSBwcm9kdWN0aW9uIHRoZSBwYXJzZXIgcGFyc2VzIGlzIG9ubHkgdXNlZCBhcyBhbiBleHByZXNzaW9uLiBUaGVyZWZvcmVcblx0ICAgIC8vIHRoZSBDb3ZlckluaXRpYWxpemVkTmFtZSBjaGVjayBpcyBjb25kdWN0ZWQuXG5cdCAgICAvL1xuXHQgICAgLy8gaW5oZXJpdENvdmVyR3JhbW1hciBmdW5jdGlvbiBydW5zIHRoZSBnaXZlbiBwYXJzZSBmdW5jdGlvbiB3aXRoIGEgbmV3IGNvdmVyIGdyYW1tYXIgY29udGV4dCwgYW5kIGl0IHByb3BhZ2F0ZXNcblx0ICAgIC8vIHRoZSBmbGFncyBvdXRzaWRlIG9mIHRoZSBwYXJzZXIuIFRoaXMgbWVhbnMgdGhlIHByb2R1Y3Rpb24gdGhlIHBhcnNlciBwYXJzZXMgaXMgdXNlZCBhcyBhIHBhcnQgb2YgYSBwb3RlbnRpYWxcblx0ICAgIC8vIHBhdHRlcm4uIFRoZSBDb3ZlckluaXRpYWxpemVkTmFtZSBjaGVjayBpcyBkZWZlcnJlZC5cblx0ICAgIFBhcnNlci5wcm90b3R5cGUuaXNvbGF0ZUNvdmVyR3JhbW1hciA9IGZ1bmN0aW9uIChwYXJzZUZ1bmN0aW9uKSB7XG5cdCAgICAgICAgdmFyIHByZXZpb3VzSXNCaW5kaW5nRWxlbWVudCA9IHRoaXMuY29udGV4dC5pc0JpbmRpbmdFbGVtZW50O1xuXHQgICAgICAgIHZhciBwcmV2aW91c0lzQXNzaWdubWVudFRhcmdldCA9IHRoaXMuY29udGV4dC5pc0Fzc2lnbm1lbnRUYXJnZXQ7XG5cdCAgICAgICAgdmFyIHByZXZpb3VzRmlyc3RDb3ZlckluaXRpYWxpemVkTmFtZUVycm9yID0gdGhpcy5jb250ZXh0LmZpcnN0Q292ZXJJbml0aWFsaXplZE5hbWVFcnJvcjtcblx0ICAgICAgICB0aGlzLmNvbnRleHQuaXNCaW5kaW5nRWxlbWVudCA9IHRydWU7XG5cdCAgICAgICAgdGhpcy5jb250ZXh0LmlzQXNzaWdubWVudFRhcmdldCA9IHRydWU7XG5cdCAgICAgICAgdGhpcy5jb250ZXh0LmZpcnN0Q292ZXJJbml0aWFsaXplZE5hbWVFcnJvciA9IG51bGw7XG5cdCAgICAgICAgdmFyIHJlc3VsdCA9IHBhcnNlRnVuY3Rpb24uY2FsbCh0aGlzKTtcblx0ICAgICAgICBpZiAodGhpcy5jb250ZXh0LmZpcnN0Q292ZXJJbml0aWFsaXplZE5hbWVFcnJvciAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICB0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKHRoaXMuY29udGV4dC5maXJzdENvdmVySW5pdGlhbGl6ZWROYW1lRXJyb3IpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLmNvbnRleHQuaXNCaW5kaW5nRWxlbWVudCA9IHByZXZpb3VzSXNCaW5kaW5nRWxlbWVudDtcblx0ICAgICAgICB0aGlzLmNvbnRleHQuaXNBc3NpZ25tZW50VGFyZ2V0ID0gcHJldmlvdXNJc0Fzc2lnbm1lbnRUYXJnZXQ7XG5cdCAgICAgICAgdGhpcy5jb250ZXh0LmZpcnN0Q292ZXJJbml0aWFsaXplZE5hbWVFcnJvciA9IHByZXZpb3VzRmlyc3RDb3ZlckluaXRpYWxpemVkTmFtZUVycm9yO1xuXHQgICAgICAgIHJldHVybiByZXN1bHQ7XG5cdCAgICB9O1xuXHQgICAgUGFyc2VyLnByb3RvdHlwZS5pbmhlcml0Q292ZXJHcmFtbWFyID0gZnVuY3Rpb24gKHBhcnNlRnVuY3Rpb24pIHtcblx0ICAgICAgICB2YXIgcHJldmlvdXNJc0JpbmRpbmdFbGVtZW50ID0gdGhpcy5jb250ZXh0LmlzQmluZGluZ0VsZW1lbnQ7XG5cdCAgICAgICAgdmFyIHByZXZpb3VzSXNBc3NpZ25tZW50VGFyZ2V0ID0gdGhpcy5jb250ZXh0LmlzQXNzaWdubWVudFRhcmdldDtcblx0ICAgICAgICB2YXIgcHJldmlvdXNGaXJzdENvdmVySW5pdGlhbGl6ZWROYW1lRXJyb3IgPSB0aGlzLmNvbnRleHQuZmlyc3RDb3ZlckluaXRpYWxpemVkTmFtZUVycm9yO1xuXHQgICAgICAgIHRoaXMuY29udGV4dC5pc0JpbmRpbmdFbGVtZW50ID0gdHJ1ZTtcblx0ICAgICAgICB0aGlzLmNvbnRleHQuaXNBc3NpZ25tZW50VGFyZ2V0ID0gdHJ1ZTtcblx0ICAgICAgICB0aGlzLmNvbnRleHQuZmlyc3RDb3ZlckluaXRpYWxpemVkTmFtZUVycm9yID0gbnVsbDtcblx0ICAgICAgICB2YXIgcmVzdWx0ID0gcGFyc2VGdW5jdGlvbi5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuY29udGV4dC5pc0JpbmRpbmdFbGVtZW50ID0gdGhpcy5jb250ZXh0LmlzQmluZGluZ0VsZW1lbnQgJiYgcHJldmlvdXNJc0JpbmRpbmdFbGVtZW50O1xuXHQgICAgICAgIHRoaXMuY29udGV4dC5pc0Fzc2lnbm1lbnRUYXJnZXQgPSB0aGlzLmNvbnRleHQuaXNBc3NpZ25tZW50VGFyZ2V0ICYmIHByZXZpb3VzSXNBc3NpZ25tZW50VGFyZ2V0O1xuXHQgICAgICAgIHRoaXMuY29udGV4dC5maXJzdENvdmVySW5pdGlhbGl6ZWROYW1lRXJyb3IgPSBwcmV2aW91c0ZpcnN0Q292ZXJJbml0aWFsaXplZE5hbWVFcnJvciB8fCB0aGlzLmNvbnRleHQuZmlyc3RDb3ZlckluaXRpYWxpemVkTmFtZUVycm9yO1xuXHQgICAgICAgIHJldHVybiByZXN1bHQ7XG5cdCAgICB9O1xuXHQgICAgUGFyc2VyLnByb3RvdHlwZS5jb25zdW1lU2VtaWNvbG9uID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGlmICh0aGlzLm1hdGNoKCc7JykpIHtcblx0ICAgICAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgZWxzZSBpZiAoIXRoaXMuaGFzTGluZVRlcm1pbmF0b3IpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMubG9va2FoZWFkLnR5cGUgIT09IDIgLyogRU9GICovICYmICF0aGlzLm1hdGNoKCd9JykpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4odGhpcy5sb29rYWhlYWQpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMubGFzdE1hcmtlci5pbmRleCA9IHRoaXMuc3RhcnRNYXJrZXIuaW5kZXg7XG5cdCAgICAgICAgICAgIHRoaXMubGFzdE1hcmtlci5saW5lID0gdGhpcy5zdGFydE1hcmtlci5saW5lO1xuXHQgICAgICAgICAgICB0aGlzLmxhc3RNYXJrZXIuY29sdW1uID0gdGhpcy5zdGFydE1hcmtlci5jb2x1bW47XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXByaW1hcnktZXhwcmVzc2lvblxuXHQgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZVByaW1hcnlFeHByZXNzaW9uID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7XG5cdCAgICAgICAgdmFyIGV4cHI7XG5cdCAgICAgICAgdmFyIHRva2VuLCByYXc7XG5cdCAgICAgICAgc3dpdGNoICh0aGlzLmxvb2thaGVhZC50eXBlKSB7XG5cdCAgICAgICAgICAgIGNhc2UgMyAvKiBJZGVudGlmaWVyICovOlxuXHQgICAgICAgICAgICAgICAgaWYgKCh0aGlzLmNvbnRleHQuaXNNb2R1bGUgfHwgdGhpcy5jb250ZXh0LmF3YWl0KSAmJiB0aGlzLmxvb2thaGVhZC52YWx1ZSA9PT0gJ2F3YWl0Jykge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMudG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4odGhpcy5sb29rYWhlYWQpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgZXhwciA9IHRoaXMubWF0Y2hBc3luY0Z1bmN0aW9uKCkgPyB0aGlzLnBhcnNlRnVuY3Rpb25FeHByZXNzaW9uKCkgOiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLklkZW50aWZpZXIodGhpcy5uZXh0VG9rZW4oKS52YWx1ZSkpO1xuXHQgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgIGNhc2UgNiAvKiBOdW1lcmljTGl0ZXJhbCAqLzpcblx0ICAgICAgICAgICAgY2FzZSA4IC8qIFN0cmluZ0xpdGVyYWwgKi86XG5cdCAgICAgICAgICAgICAgICBpZiAodGhpcy5jb250ZXh0LnN0cmljdCAmJiB0aGlzLmxvb2thaGVhZC5vY3RhbCkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMudG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4odGhpcy5sb29rYWhlYWQsIG1lc3NhZ2VzXzEuTWVzc2FnZXMuU3RyaWN0T2N0YWxMaXRlcmFsKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5pc0Fzc2lnbm1lbnRUYXJnZXQgPSBmYWxzZTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5pc0JpbmRpbmdFbGVtZW50ID0gZmFsc2U7XG5cdCAgICAgICAgICAgICAgICB0b2tlbiA9IHRoaXMubmV4dFRva2VuKCk7XG5cdCAgICAgICAgICAgICAgICByYXcgPSB0aGlzLmdldFRva2VuUmF3KHRva2VuKTtcblx0ICAgICAgICAgICAgICAgIGV4cHIgPSB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLkxpdGVyYWwodG9rZW4udmFsdWUsIHJhdykpO1xuXHQgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgIGNhc2UgMSAvKiBCb29sZWFuTGl0ZXJhbCAqLzpcblx0ICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5pc0Fzc2lnbm1lbnRUYXJnZXQgPSBmYWxzZTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5pc0JpbmRpbmdFbGVtZW50ID0gZmFsc2U7XG5cdCAgICAgICAgICAgICAgICB0b2tlbiA9IHRoaXMubmV4dFRva2VuKCk7XG5cdCAgICAgICAgICAgICAgICByYXcgPSB0aGlzLmdldFRva2VuUmF3KHRva2VuKTtcblx0ICAgICAgICAgICAgICAgIGV4cHIgPSB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLkxpdGVyYWwodG9rZW4udmFsdWUgPT09ICd0cnVlJywgcmF3KSk7XG5cdCAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgY2FzZSA1IC8qIE51bGxMaXRlcmFsICovOlxuXHQgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmlzQXNzaWdubWVudFRhcmdldCA9IGZhbHNlO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmlzQmluZGluZ0VsZW1lbnQgPSBmYWxzZTtcblx0ICAgICAgICAgICAgICAgIHRva2VuID0gdGhpcy5uZXh0VG9rZW4oKTtcblx0ICAgICAgICAgICAgICAgIHJhdyA9IHRoaXMuZ2V0VG9rZW5SYXcodG9rZW4pO1xuXHQgICAgICAgICAgICAgICAgZXhwciA9IHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuTGl0ZXJhbChudWxsLCByYXcpKTtcblx0ICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICBjYXNlIDEwIC8qIFRlbXBsYXRlICovOlxuXHQgICAgICAgICAgICAgICAgZXhwciA9IHRoaXMucGFyc2VUZW1wbGF0ZUxpdGVyYWwoKTtcblx0ICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICBjYXNlIDcgLyogUHVuY3R1YXRvciAqLzpcblx0ICAgICAgICAgICAgICAgIHN3aXRjaCAodGhpcy5sb29rYWhlYWQudmFsdWUpIHtcblx0ICAgICAgICAgICAgICAgICAgICBjYXNlICcoJzpcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmlzQmluZGluZ0VsZW1lbnQgPSBmYWxzZTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgZXhwciA9IHRoaXMuaW5oZXJpdENvdmVyR3JhbW1hcih0aGlzLnBhcnNlR3JvdXBFeHByZXNzaW9uKTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgICAgICAgICAgY2FzZSAnWyc6XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIGV4cHIgPSB0aGlzLmluaGVyaXRDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUFycmF5SW5pdGlhbGl6ZXIpO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgICAgICAgICBjYXNlICd7Jzpcblx0ICAgICAgICAgICAgICAgICAgICAgICAgZXhwciA9IHRoaXMuaW5oZXJpdENvdmVyR3JhbW1hcih0aGlzLnBhcnNlT2JqZWN0SW5pdGlhbGl6ZXIpO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgICAgICAgICBjYXNlICcvJzpcblx0ICAgICAgICAgICAgICAgICAgICBjYXNlICcvPSc6XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5pc0Fzc2lnbm1lbnRUYXJnZXQgPSBmYWxzZTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmlzQmluZGluZ0VsZW1lbnQgPSBmYWxzZTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zY2FubmVyLmluZGV4ID0gdGhpcy5zdGFydE1hcmtlci5pbmRleDtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSB0aGlzLm5leHRSZWdleFRva2VuKCk7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHJhdyA9IHRoaXMuZ2V0VG9rZW5SYXcodG9rZW4pO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBleHByID0gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5SZWdleExpdGVyYWwodG9rZW4ucmVnZXgsIHJhdywgdG9rZW4ucGF0dGVybiwgdG9rZW4uZmxhZ3MpKTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcblx0ICAgICAgICAgICAgICAgICAgICAgICAgZXhwciA9IHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4odGhpcy5uZXh0VG9rZW4oKSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgY2FzZSA0IC8qIEtleXdvcmQgKi86XG5cdCAgICAgICAgICAgICAgICBpZiAoIXRoaXMuY29udGV4dC5zdHJpY3QgJiYgdGhpcy5jb250ZXh0LmFsbG93WWllbGQgJiYgdGhpcy5tYXRjaEtleXdvcmQoJ3lpZWxkJykpIHtcblx0ICAgICAgICAgICAgICAgICAgICBleHByID0gdGhpcy5wYXJzZUlkZW50aWZpZXJOYW1lKCk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICBlbHNlIGlmICghdGhpcy5jb250ZXh0LnN0cmljdCAmJiB0aGlzLm1hdGNoS2V5d29yZCgnbGV0JykpIHtcblx0ICAgICAgICAgICAgICAgICAgICBleHByID0gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5JZGVudGlmaWVyKHRoaXMubmV4dFRva2VuKCkudmFsdWUpKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5pc0Fzc2lnbm1lbnRUYXJnZXQgPSBmYWxzZTtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuaXNCaW5kaW5nRWxlbWVudCA9IGZhbHNlO1xuXHQgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm1hdGNoS2V5d29yZCgnZnVuY3Rpb24nKSkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBleHByID0gdGhpcy5wYXJzZUZ1bmN0aW9uRXhwcmVzc2lvbigpO1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0aGlzLm1hdGNoS2V5d29yZCgndGhpcycpKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dFRva2VuKCk7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIGV4cHIgPSB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLlRoaXNFeHByZXNzaW9uKCkpO1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0aGlzLm1hdGNoS2V5d29yZCgnY2xhc3MnKSkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBleHByID0gdGhpcy5wYXJzZUNsYXNzRXhwcmVzc2lvbigpO1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgICAgICBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgZXhwciA9IHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4odGhpcy5uZXh0VG9rZW4oKSk7XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgIGRlZmF1bHQ6XG5cdCAgICAgICAgICAgICAgICBleHByID0gdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbih0aGlzLm5leHRUb2tlbigpKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIGV4cHI7XG5cdCAgICB9O1xuXHQgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtYXJyYXktaW5pdGlhbGl6ZXJcblx0ICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VTcHJlYWRFbGVtZW50ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7XG5cdCAgICAgICAgdGhpcy5leHBlY3QoJy4uLicpO1xuXHQgICAgICAgIHZhciBhcmcgPSB0aGlzLmluaGVyaXRDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKTtcblx0ICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5TcHJlYWRFbGVtZW50KGFyZykpO1xuXHQgICAgfTtcblx0ICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VBcnJheUluaXRpYWxpemVyID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7XG5cdCAgICAgICAgdmFyIGVsZW1lbnRzID0gW107XG5cdCAgICAgICAgdGhpcy5leHBlY3QoJ1snKTtcblx0ICAgICAgICB3aGlsZSAoIXRoaXMubWF0Y2goJ10nKSkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5tYXRjaCgnLCcpKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLm5leHRUb2tlbigpO1xuXHQgICAgICAgICAgICAgICAgZWxlbWVudHMucHVzaChudWxsKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBlbHNlIGlmICh0aGlzLm1hdGNoKCcuLi4nKSkge1xuXHQgICAgICAgICAgICAgICAgdmFyIGVsZW1lbnQgPSB0aGlzLnBhcnNlU3ByZWFkRWxlbWVudCgpO1xuXHQgICAgICAgICAgICAgICAgaWYgKCF0aGlzLm1hdGNoKCddJykpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuaXNBc3NpZ25tZW50VGFyZ2V0ID0gZmFsc2U7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmlzQmluZGluZ0VsZW1lbnQgPSBmYWxzZTtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLmV4cGVjdCgnLCcpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgZWxlbWVudHMucHVzaChlbGVtZW50KTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIGVsZW1lbnRzLnB1c2godGhpcy5pbmhlcml0Q292ZXJHcmFtbWFyKHRoaXMucGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbikpO1xuXHQgICAgICAgICAgICAgICAgaWYgKCF0aGlzLm1hdGNoKCddJykpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLmV4cGVjdCgnLCcpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuZXhwZWN0KCddJyk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuQXJyYXlFeHByZXNzaW9uKGVsZW1lbnRzKSk7XG5cdCAgICB9O1xuXHQgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtb2JqZWN0LWluaXRpYWxpemVyXG5cdCAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlUHJvcGVydHlNZXRob2QgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG5cdCAgICAgICAgdGhpcy5jb250ZXh0LmlzQXNzaWdubWVudFRhcmdldCA9IGZhbHNlO1xuXHQgICAgICAgIHRoaXMuY29udGV4dC5pc0JpbmRpbmdFbGVtZW50ID0gZmFsc2U7XG5cdCAgICAgICAgdmFyIHByZXZpb3VzU3RyaWN0ID0gdGhpcy5jb250ZXh0LnN0cmljdDtcblx0ICAgICAgICB2YXIgcHJldmlvdXNBbGxvd1N0cmljdERpcmVjdGl2ZSA9IHRoaXMuY29udGV4dC5hbGxvd1N0cmljdERpcmVjdGl2ZTtcblx0ICAgICAgICB0aGlzLmNvbnRleHQuYWxsb3dTdHJpY3REaXJlY3RpdmUgPSBwYXJhbXMuc2ltcGxlO1xuXHQgICAgICAgIHZhciBib2R5ID0gdGhpcy5pc29sYXRlQ292ZXJHcmFtbWFyKHRoaXMucGFyc2VGdW5jdGlvblNvdXJjZUVsZW1lbnRzKTtcblx0ICAgICAgICBpZiAodGhpcy5jb250ZXh0LnN0cmljdCAmJiBwYXJhbXMuZmlyc3RSZXN0cmljdGVkKSB7XG5cdCAgICAgICAgICAgIHRoaXMudG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4ocGFyYW1zLmZpcnN0UmVzdHJpY3RlZCwgcGFyYW1zLm1lc3NhZ2UpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAodGhpcy5jb250ZXh0LnN0cmljdCAmJiBwYXJhbXMuc3RyaWN0ZWQpIHtcblx0ICAgICAgICAgICAgdGhpcy50b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbihwYXJhbXMuc3RyaWN0ZWQsIHBhcmFtcy5tZXNzYWdlKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5jb250ZXh0LnN0cmljdCA9IHByZXZpb3VzU3RyaWN0O1xuXHQgICAgICAgIHRoaXMuY29udGV4dC5hbGxvd1N0cmljdERpcmVjdGl2ZSA9IHByZXZpb3VzQWxsb3dTdHJpY3REaXJlY3RpdmU7XG5cdCAgICAgICAgcmV0dXJuIGJvZHk7XG5cdCAgICB9O1xuXHQgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZVByb3BlcnR5TWV0aG9kRnVuY3Rpb24gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIGlzR2VuZXJhdG9yID0gZmFsc2U7XG5cdCAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTtcblx0ICAgICAgICB2YXIgcHJldmlvdXNBbGxvd1lpZWxkID0gdGhpcy5jb250ZXh0LmFsbG93WWllbGQ7XG5cdCAgICAgICAgdGhpcy5jb250ZXh0LmFsbG93WWllbGQgPSB0cnVlO1xuXHQgICAgICAgIHZhciBwYXJhbXMgPSB0aGlzLnBhcnNlRm9ybWFsUGFyYW1ldGVycygpO1xuXHQgICAgICAgIHZhciBtZXRob2QgPSB0aGlzLnBhcnNlUHJvcGVydHlNZXRob2QocGFyYW1zKTtcblx0ICAgICAgICB0aGlzLmNvbnRleHQuYWxsb3dZaWVsZCA9IHByZXZpb3VzQWxsb3dZaWVsZDtcblx0ICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5GdW5jdGlvbkV4cHJlc3Npb24obnVsbCwgcGFyYW1zLnBhcmFtcywgbWV0aG9kLCBpc0dlbmVyYXRvcikpO1xuXHQgICAgfTtcblx0ICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VQcm9wZXJ0eU1ldGhvZEFzeW5jRnVuY3Rpb24gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTtcblx0ICAgICAgICB2YXIgcHJldmlvdXNBbGxvd1lpZWxkID0gdGhpcy5jb250ZXh0LmFsbG93WWllbGQ7XG5cdCAgICAgICAgdmFyIHByZXZpb3VzQXdhaXQgPSB0aGlzLmNvbnRleHQuYXdhaXQ7XG5cdCAgICAgICAgdGhpcy5jb250ZXh0LmFsbG93WWllbGQgPSBmYWxzZTtcblx0ICAgICAgICB0aGlzLmNvbnRleHQuYXdhaXQgPSB0cnVlO1xuXHQgICAgICAgIHZhciBwYXJhbXMgPSB0aGlzLnBhcnNlRm9ybWFsUGFyYW1ldGVycygpO1xuXHQgICAgICAgIHZhciBtZXRob2QgPSB0aGlzLnBhcnNlUHJvcGVydHlNZXRob2QocGFyYW1zKTtcblx0ICAgICAgICB0aGlzLmNvbnRleHQuYWxsb3dZaWVsZCA9IHByZXZpb3VzQWxsb3dZaWVsZDtcblx0ICAgICAgICB0aGlzLmNvbnRleHQuYXdhaXQgPSBwcmV2aW91c0F3YWl0O1xuXHQgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLkFzeW5jRnVuY3Rpb25FeHByZXNzaW9uKG51bGwsIHBhcmFtcy5wYXJhbXMsIG1ldGhvZCkpO1xuXHQgICAgfTtcblx0ICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VPYmplY3RQcm9wZXJ0eUtleSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpO1xuXHQgICAgICAgIHZhciB0b2tlbiA9IHRoaXMubmV4dFRva2VuKCk7XG5cdCAgICAgICAgdmFyIGtleTtcblx0ICAgICAgICBzd2l0Y2ggKHRva2VuLnR5cGUpIHtcblx0ICAgICAgICAgICAgY2FzZSA4IC8qIFN0cmluZ0xpdGVyYWwgKi86XG5cdCAgICAgICAgICAgIGNhc2UgNiAvKiBOdW1lcmljTGl0ZXJhbCAqLzpcblx0ICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbnRleHQuc3RyaWN0ICYmIHRva2VuLm9jdGFsKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy50b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbih0b2tlbiwgbWVzc2FnZXNfMS5NZXNzYWdlcy5TdHJpY3RPY3RhbExpdGVyYWwpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgdmFyIHJhdyA9IHRoaXMuZ2V0VG9rZW5SYXcodG9rZW4pO1xuXHQgICAgICAgICAgICAgICAga2V5ID0gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5MaXRlcmFsKHRva2VuLnZhbHVlLCByYXcpKTtcblx0ICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICBjYXNlIDMgLyogSWRlbnRpZmllciAqLzpcblx0ICAgICAgICAgICAgY2FzZSAxIC8qIEJvb2xlYW5MaXRlcmFsICovOlxuXHQgICAgICAgICAgICBjYXNlIDUgLyogTnVsbExpdGVyYWwgKi86XG5cdCAgICAgICAgICAgIGNhc2UgNCAvKiBLZXl3b3JkICovOlxuXHQgICAgICAgICAgICAgICAga2V5ID0gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5JZGVudGlmaWVyKHRva2VuLnZhbHVlKSk7XG5cdCAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgY2FzZSA3IC8qIFB1bmN0dWF0b3IgKi86XG5cdCAgICAgICAgICAgICAgICBpZiAodG9rZW4udmFsdWUgPT09ICdbJykge1xuXHQgICAgICAgICAgICAgICAgICAgIGtleSA9IHRoaXMuaXNvbGF0ZUNvdmVyR3JhbW1hcih0aGlzLnBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24pO1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuZXhwZWN0KCddJyk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICBrZXkgPSB0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKHRva2VuKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICBkZWZhdWx0OlxuXHQgICAgICAgICAgICAgICAga2V5ID0gdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbih0b2tlbik7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiBrZXk7XG5cdCAgICB9O1xuXHQgICAgUGFyc2VyLnByb3RvdHlwZS5pc1Byb3BlcnR5S2V5ID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcblx0ICAgICAgICByZXR1cm4gKGtleS50eXBlID09PSBzeW50YXhfMS5TeW50YXguSWRlbnRpZmllciAmJiBrZXkubmFtZSA9PT0gdmFsdWUpIHx8XG5cdCAgICAgICAgICAgIChrZXkudHlwZSA9PT0gc3ludGF4XzEuU3ludGF4LkxpdGVyYWwgJiYga2V5LnZhbHVlID09PSB2YWx1ZSk7XG5cdCAgICB9O1xuXHQgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZU9iamVjdFByb3BlcnR5ID0gZnVuY3Rpb24gKGhhc1Byb3RvKSB7XG5cdCAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTtcblx0ICAgICAgICB2YXIgdG9rZW4gPSB0aGlzLmxvb2thaGVhZDtcblx0ICAgICAgICB2YXIga2luZDtcblx0ICAgICAgICB2YXIga2V5ID0gbnVsbDtcblx0ICAgICAgICB2YXIgdmFsdWUgPSBudWxsO1xuXHQgICAgICAgIHZhciBjb21wdXRlZCA9IGZhbHNlO1xuXHQgICAgICAgIHZhciBtZXRob2QgPSBmYWxzZTtcblx0ICAgICAgICB2YXIgc2hvcnRoYW5kID0gZmFsc2U7XG5cdCAgICAgICAgdmFyIGlzQXN5bmMgPSBmYWxzZTtcblx0ICAgICAgICBpZiAodG9rZW4udHlwZSA9PT0gMyAvKiBJZGVudGlmaWVyICovKSB7XG5cdCAgICAgICAgICAgIHZhciBpZCA9IHRva2VuLnZhbHVlO1xuXHQgICAgICAgICAgICB0aGlzLm5leHRUb2tlbigpO1xuXHQgICAgICAgICAgICBjb21wdXRlZCA9IHRoaXMubWF0Y2goJ1snKTtcblx0ICAgICAgICAgICAgaXNBc3luYyA9ICF0aGlzLmhhc0xpbmVUZXJtaW5hdG9yICYmIChpZCA9PT0gJ2FzeW5jJykgJiZcblx0ICAgICAgICAgICAgICAgICF0aGlzLm1hdGNoKCc6JykgJiYgIXRoaXMubWF0Y2goJygnKSAmJiAhdGhpcy5tYXRjaCgnKicpICYmICF0aGlzLm1hdGNoKCcsJyk7XG5cdCAgICAgICAgICAgIGtleSA9IGlzQXN5bmMgPyB0aGlzLnBhcnNlT2JqZWN0UHJvcGVydHlLZXkoKSA6IHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuSWRlbnRpZmllcihpZCkpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBlbHNlIGlmICh0aGlzLm1hdGNoKCcqJykpIHtcblx0ICAgICAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgZWxzZSB7XG5cdCAgICAgICAgICAgIGNvbXB1dGVkID0gdGhpcy5tYXRjaCgnWycpO1xuXHQgICAgICAgICAgICBrZXkgPSB0aGlzLnBhcnNlT2JqZWN0UHJvcGVydHlLZXkoKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdmFyIGxvb2thaGVhZFByb3BlcnR5S2V5ID0gdGhpcy5xdWFsaWZpZWRQcm9wZXJ0eU5hbWUodGhpcy5sb29rYWhlYWQpO1xuXHQgICAgICAgIGlmICh0b2tlbi50eXBlID09PSAzIC8qIElkZW50aWZpZXIgKi8gJiYgIWlzQXN5bmMgJiYgdG9rZW4udmFsdWUgPT09ICdnZXQnICYmIGxvb2thaGVhZFByb3BlcnR5S2V5KSB7XG5cdCAgICAgICAgICAgIGtpbmQgPSAnZ2V0Jztcblx0ICAgICAgICAgICAgY29tcHV0ZWQgPSB0aGlzLm1hdGNoKCdbJyk7XG5cdCAgICAgICAgICAgIGtleSA9IHRoaXMucGFyc2VPYmplY3RQcm9wZXJ0eUtleSgpO1xuXHQgICAgICAgICAgICB0aGlzLmNvbnRleHQuYWxsb3dZaWVsZCA9IGZhbHNlO1xuXHQgICAgICAgICAgICB2YWx1ZSA9IHRoaXMucGFyc2VHZXR0ZXJNZXRob2QoKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgZWxzZSBpZiAodG9rZW4udHlwZSA9PT0gMyAvKiBJZGVudGlmaWVyICovICYmICFpc0FzeW5jICYmIHRva2VuLnZhbHVlID09PSAnc2V0JyAmJiBsb29rYWhlYWRQcm9wZXJ0eUtleSkge1xuXHQgICAgICAgICAgICBraW5kID0gJ3NldCc7XG5cdCAgICAgICAgICAgIGNvbXB1dGVkID0gdGhpcy5tYXRjaCgnWycpO1xuXHQgICAgICAgICAgICBrZXkgPSB0aGlzLnBhcnNlT2JqZWN0UHJvcGVydHlLZXkoKTtcblx0ICAgICAgICAgICAgdmFsdWUgPSB0aGlzLnBhcnNlU2V0dGVyTWV0aG9kKCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGVsc2UgaWYgKHRva2VuLnR5cGUgPT09IDcgLyogUHVuY3R1YXRvciAqLyAmJiB0b2tlbi52YWx1ZSA9PT0gJyonICYmIGxvb2thaGVhZFByb3BlcnR5S2V5KSB7XG5cdCAgICAgICAgICAgIGtpbmQgPSAnaW5pdCc7XG5cdCAgICAgICAgICAgIGNvbXB1dGVkID0gdGhpcy5tYXRjaCgnWycpO1xuXHQgICAgICAgICAgICBrZXkgPSB0aGlzLnBhcnNlT2JqZWN0UHJvcGVydHlLZXkoKTtcblx0ICAgICAgICAgICAgdmFsdWUgPSB0aGlzLnBhcnNlR2VuZXJhdG9yTWV0aG9kKCk7XG5cdCAgICAgICAgICAgIG1ldGhvZCA9IHRydWU7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGVsc2Uge1xuXHQgICAgICAgICAgICBpZiAoIWtleSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbih0aGlzLmxvb2thaGVhZCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAga2luZCA9ICdpbml0Jztcblx0ICAgICAgICAgICAgaWYgKHRoaXMubWF0Y2goJzonKSAmJiAhaXNBc3luYykge1xuXHQgICAgICAgICAgICAgICAgaWYgKCFjb21wdXRlZCAmJiB0aGlzLmlzUHJvcGVydHlLZXkoa2V5LCAnX19wcm90b19fJykpIHtcblx0ICAgICAgICAgICAgICAgICAgICBpZiAoaGFzUHJvdG8udmFsdWUpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b2xlcmF0ZUVycm9yKG1lc3NhZ2VzXzEuTWVzc2FnZXMuRHVwbGljYXRlUHJvdG9Qcm9wZXJ0eSk7XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgICAgIGhhc1Byb3RvLnZhbHVlID0gdHJ1ZTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIHRoaXMubmV4dFRva2VuKCk7XG5cdCAgICAgICAgICAgICAgICB2YWx1ZSA9IHRoaXMuaW5oZXJpdENvdmVyR3JhbW1hcih0aGlzLnBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24pO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMubWF0Y2goJygnKSkge1xuXHQgICAgICAgICAgICAgICAgdmFsdWUgPSBpc0FzeW5jID8gdGhpcy5wYXJzZVByb3BlcnR5TWV0aG9kQXN5bmNGdW5jdGlvbigpIDogdGhpcy5wYXJzZVByb3BlcnR5TWV0aG9kRnVuY3Rpb24oKTtcblx0ICAgICAgICAgICAgICAgIG1ldGhvZCA9IHRydWU7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgZWxzZSBpZiAodG9rZW4udHlwZSA9PT0gMyAvKiBJZGVudGlmaWVyICovKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgaWQgPSB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLklkZW50aWZpZXIodG9rZW4udmFsdWUpKTtcblx0ICAgICAgICAgICAgICAgIGlmICh0aGlzLm1hdGNoKCc9JykpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuZmlyc3RDb3ZlckluaXRpYWxpemVkTmFtZUVycm9yID0gdGhpcy5sb29rYWhlYWQ7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTtcblx0ICAgICAgICAgICAgICAgICAgICBzaG9ydGhhbmQgPSB0cnVlO1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBpbml0ID0gdGhpcy5pc29sYXRlQ292ZXJHcmFtbWFyKHRoaXMucGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbik7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLkFzc2lnbm1lbnRQYXR0ZXJuKGlkLCBpbml0KSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICBzaG9ydGhhbmQgPSB0cnVlO1xuXHQgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gaWQ7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKHRoaXMubmV4dFRva2VuKCkpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLlByb3BlcnR5KGtpbmQsIGtleSwgY29tcHV0ZWQsIHZhbHVlLCBtZXRob2QsIHNob3J0aGFuZCkpO1xuXHQgICAgfTtcblx0ICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VPYmplY3RJbml0aWFsaXplciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpO1xuXHQgICAgICAgIHRoaXMuZXhwZWN0KCd7Jyk7XG5cdCAgICAgICAgdmFyIHByb3BlcnRpZXMgPSBbXTtcblx0ICAgICAgICB2YXIgaGFzUHJvdG8gPSB7IHZhbHVlOiBmYWxzZSB9O1xuXHQgICAgICAgIHdoaWxlICghdGhpcy5tYXRjaCgnfScpKSB7XG5cdCAgICAgICAgICAgIHByb3BlcnRpZXMucHVzaCh0aGlzLnBhcnNlT2JqZWN0UHJvcGVydHkoaGFzUHJvdG8pKTtcblx0ICAgICAgICAgICAgaWYgKCF0aGlzLm1hdGNoKCd9JykpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuZXhwZWN0Q29tbWFTZXBhcmF0b3IoKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLmV4cGVjdCgnfScpO1xuXHQgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLk9iamVjdEV4cHJlc3Npb24ocHJvcGVydGllcykpO1xuXHQgICAgfTtcblx0ICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXRlbXBsYXRlLWxpdGVyYWxzXG5cdCAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlVGVtcGxhdGVIZWFkID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGFzc2VydF8xLmFzc2VydCh0aGlzLmxvb2thaGVhZC5oZWFkLCAnVGVtcGxhdGUgbGl0ZXJhbCBtdXN0IHN0YXJ0IHdpdGggYSB0ZW1wbGF0ZSBoZWFkJyk7XG5cdCAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTtcblx0ICAgICAgICB2YXIgdG9rZW4gPSB0aGlzLm5leHRUb2tlbigpO1xuXHQgICAgICAgIHZhciByYXcgPSB0b2tlbi52YWx1ZTtcblx0ICAgICAgICB2YXIgY29va2VkID0gdG9rZW4uY29va2VkO1xuXHQgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLlRlbXBsYXRlRWxlbWVudCh7IHJhdzogcmF3LCBjb29rZWQ6IGNvb2tlZCB9LCB0b2tlbi50YWlsKSk7XG5cdCAgICB9O1xuXHQgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZVRlbXBsYXRlRWxlbWVudCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBpZiAodGhpcy5sb29rYWhlYWQudHlwZSAhPT0gMTAgLyogVGVtcGxhdGUgKi8pIHtcblx0ICAgICAgICAgICAgdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbigpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpO1xuXHQgICAgICAgIHZhciB0b2tlbiA9IHRoaXMubmV4dFRva2VuKCk7XG5cdCAgICAgICAgdmFyIHJhdyA9IHRva2VuLnZhbHVlO1xuXHQgICAgICAgIHZhciBjb29rZWQgPSB0b2tlbi5jb29rZWQ7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuVGVtcGxhdGVFbGVtZW50KHsgcmF3OiByYXcsIGNvb2tlZDogY29va2VkIH0sIHRva2VuLnRhaWwpKTtcblx0ICAgIH07XG5cdCAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlVGVtcGxhdGVMaXRlcmFsID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7XG5cdCAgICAgICAgdmFyIGV4cHJlc3Npb25zID0gW107XG5cdCAgICAgICAgdmFyIHF1YXNpcyA9IFtdO1xuXHQgICAgICAgIHZhciBxdWFzaSA9IHRoaXMucGFyc2VUZW1wbGF0ZUhlYWQoKTtcblx0ICAgICAgICBxdWFzaXMucHVzaChxdWFzaSk7XG5cdCAgICAgICAgd2hpbGUgKCFxdWFzaS50YWlsKSB7XG5cdCAgICAgICAgICAgIGV4cHJlc3Npb25zLnB1c2godGhpcy5wYXJzZUV4cHJlc3Npb24oKSk7XG5cdCAgICAgICAgICAgIHF1YXNpID0gdGhpcy5wYXJzZVRlbXBsYXRlRWxlbWVudCgpO1xuXHQgICAgICAgICAgICBxdWFzaXMucHVzaChxdWFzaSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLlRlbXBsYXRlTGl0ZXJhbChxdWFzaXMsIGV4cHJlc3Npb25zKSk7XG5cdCAgICB9O1xuXHQgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtZ3JvdXBpbmctb3BlcmF0b3Jcblx0ICAgIFBhcnNlci5wcm90b3R5cGUucmVpbnRlcnByZXRFeHByZXNzaW9uQXNQYXR0ZXJuID0gZnVuY3Rpb24gKGV4cHIpIHtcblx0ICAgICAgICBzd2l0Y2ggKGV4cHIudHlwZSkge1xuXHQgICAgICAgICAgICBjYXNlIHN5bnRheF8xLlN5bnRheC5JZGVudGlmaWVyOlxuXHQgICAgICAgICAgICBjYXNlIHN5bnRheF8xLlN5bnRheC5NZW1iZXJFeHByZXNzaW9uOlxuXHQgICAgICAgICAgICBjYXNlIHN5bnRheF8xLlN5bnRheC5SZXN0RWxlbWVudDpcblx0ICAgICAgICAgICAgY2FzZSBzeW50YXhfMS5TeW50YXguQXNzaWdubWVudFBhdHRlcm46XG5cdCAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgY2FzZSBzeW50YXhfMS5TeW50YXguU3ByZWFkRWxlbWVudDpcblx0ICAgICAgICAgICAgICAgIGV4cHIudHlwZSA9IHN5bnRheF8xLlN5bnRheC5SZXN0RWxlbWVudDtcblx0ICAgICAgICAgICAgICAgIHRoaXMucmVpbnRlcnByZXRFeHByZXNzaW9uQXNQYXR0ZXJuKGV4cHIuYXJndW1lbnQpO1xuXHQgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgIGNhc2Ugc3ludGF4XzEuU3ludGF4LkFycmF5RXhwcmVzc2lvbjpcblx0ICAgICAgICAgICAgICAgIGV4cHIudHlwZSA9IHN5bnRheF8xLlN5bnRheC5BcnJheVBhdHRlcm47XG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV4cHIuZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgICAgICBpZiAoZXhwci5lbGVtZW50c1tpXSAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlaW50ZXJwcmV0RXhwcmVzc2lvbkFzUGF0dGVybihleHByLmVsZW1lbnRzW2ldKTtcblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgY2FzZSBzeW50YXhfMS5TeW50YXguT2JqZWN0RXhwcmVzc2lvbjpcblx0ICAgICAgICAgICAgICAgIGV4cHIudHlwZSA9IHN5bnRheF8xLlN5bnRheC5PYmplY3RQYXR0ZXJuO1xuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBleHByLnByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLnJlaW50ZXJwcmV0RXhwcmVzc2lvbkFzUGF0dGVybihleHByLnByb3BlcnRpZXNbaV0udmFsdWUpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgIGNhc2Ugc3ludGF4XzEuU3ludGF4LkFzc2lnbm1lbnRFeHByZXNzaW9uOlxuXHQgICAgICAgICAgICAgICAgZXhwci50eXBlID0gc3ludGF4XzEuU3ludGF4LkFzc2lnbm1lbnRQYXR0ZXJuO1xuXHQgICAgICAgICAgICAgICAgZGVsZXRlIGV4cHIub3BlcmF0b3I7XG5cdCAgICAgICAgICAgICAgICB0aGlzLnJlaW50ZXJwcmV0RXhwcmVzc2lvbkFzUGF0dGVybihleHByLmxlZnQpO1xuXHQgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgIGRlZmF1bHQ6XG5cdCAgICAgICAgICAgICAgICAvLyBBbGxvdyBvdGhlciBub2RlIHR5cGUgZm9yIHRvbGVyYW50IHBhcnNpbmcuXG5cdCAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZUdyb3VwRXhwcmVzc2lvbiA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgZXhwcjtcblx0ICAgICAgICB0aGlzLmV4cGVjdCgnKCcpO1xuXHQgICAgICAgIGlmICh0aGlzLm1hdGNoKCcpJykpIHtcblx0ICAgICAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTtcblx0ICAgICAgICAgICAgaWYgKCF0aGlzLm1hdGNoKCc9PicpKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmV4cGVjdCgnPT4nKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBleHByID0ge1xuXHQgICAgICAgICAgICAgICAgdHlwZTogQXJyb3dQYXJhbWV0ZXJQbGFjZUhvbGRlcixcblx0ICAgICAgICAgICAgICAgIHBhcmFtczogW10sXG5cdCAgICAgICAgICAgICAgICBhc3luYzogZmFsc2Vcblx0ICAgICAgICAgICAgfTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgZWxzZSB7XG5cdCAgICAgICAgICAgIHZhciBzdGFydFRva2VuID0gdGhpcy5sb29rYWhlYWQ7XG5cdCAgICAgICAgICAgIHZhciBwYXJhbXMgPSBbXTtcblx0ICAgICAgICAgICAgaWYgKHRoaXMubWF0Y2goJy4uLicpKSB7XG5cdCAgICAgICAgICAgICAgICBleHByID0gdGhpcy5wYXJzZVJlc3RFbGVtZW50KHBhcmFtcyk7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmV4cGVjdCgnKScpO1xuXHQgICAgICAgICAgICAgICAgaWYgKCF0aGlzLm1hdGNoKCc9PicpKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5leHBlY3QoJz0+Jyk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICBleHByID0ge1xuXHQgICAgICAgICAgICAgICAgICAgIHR5cGU6IEFycm93UGFyYW1ldGVyUGxhY2VIb2xkZXIsXG5cdCAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiBbZXhwcl0sXG5cdCAgICAgICAgICAgICAgICAgICAgYXN5bmM6IGZhbHNlXG5cdCAgICAgICAgICAgICAgICB9O1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdmFyIGFycm93ID0gZmFsc2U7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuaXNCaW5kaW5nRWxlbWVudCA9IHRydWU7XG5cdCAgICAgICAgICAgICAgICBleHByID0gdGhpcy5pbmhlcml0Q292ZXJHcmFtbWFyKHRoaXMucGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbik7XG5cdCAgICAgICAgICAgICAgICBpZiAodGhpcy5tYXRjaCgnLCcpKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIGV4cHJlc3Npb25zID0gW107XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmlzQXNzaWdubWVudFRhcmdldCA9IGZhbHNlO1xuXHQgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb25zLnB1c2goZXhwcik7XG5cdCAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHRoaXMubG9va2FoZWFkLnR5cGUgIT09IDIgLyogRU9GICovKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5tYXRjaCgnLCcpKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHRUb2tlbigpO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5tYXRjaCgnKScpKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHRUb2tlbigpO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBleHByZXNzaW9ucy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVpbnRlcnByZXRFeHByZXNzaW9uQXNQYXR0ZXJuKGV4cHJlc3Npb25zW2ldKTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycm93ID0gdHJ1ZTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cHIgPSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogQXJyb3dQYXJhbWV0ZXJQbGFjZUhvbGRlcixcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IGV4cHJlc3Npb25zLFxuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzeW5jOiBmYWxzZVxuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0aGlzLm1hdGNoKCcuLi4nKSkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmNvbnRleHQuaXNCaW5kaW5nRWxlbWVudCkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4odGhpcy5sb29rYWhlYWQpO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbnMucHVzaCh0aGlzLnBhcnNlUmVzdEVsZW1lbnQocGFyYW1zKSk7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmV4cGVjdCgnKScpO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLm1hdGNoKCc9PicpKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5leHBlY3QoJz0+Jyk7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuaXNCaW5kaW5nRWxlbWVudCA9IGZhbHNlO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBleHByZXNzaW9ucy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVpbnRlcnByZXRFeHByZXNzaW9uQXNQYXR0ZXJuKGV4cHJlc3Npb25zW2ldKTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycm93ID0gdHJ1ZTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cHIgPSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogQXJyb3dQYXJhbWV0ZXJQbGFjZUhvbGRlcixcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IGV4cHJlc3Npb25zLFxuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzeW5jOiBmYWxzZVxuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb25zLnB1c2godGhpcy5pbmhlcml0Q292ZXJHcmFtbWFyKHRoaXMucGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbikpO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcnJvdykge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAgICAgaWYgKCFhcnJvdykge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBleHByID0gdGhpcy5maW5hbGl6ZSh0aGlzLnN0YXJ0Tm9kZShzdGFydFRva2VuKSwgbmV3IE5vZGUuU2VxdWVuY2VFeHByZXNzaW9uKGV4cHJlc3Npb25zKSk7XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgaWYgKCFhcnJvdykge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuZXhwZWN0KCcpJyk7XG5cdCAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubWF0Y2goJz0+JykpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4cHIudHlwZSA9PT0gc3ludGF4XzEuU3ludGF4LklkZW50aWZpZXIgJiYgZXhwci5uYW1lID09PSAneWllbGQnKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJvdyA9IHRydWU7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHByID0ge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IEFycm93UGFyYW1ldGVyUGxhY2VIb2xkZXIsXG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiBbZXhwcl0sXG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXN5bmM6IGZhbHNlXG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYXJyb3cpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5jb250ZXh0LmlzQmluZGluZ0VsZW1lbnQpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKHRoaXMubG9va2FoZWFkKTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChleHByLnR5cGUgPT09IHN5bnRheF8xLlN5bnRheC5TZXF1ZW5jZUV4cHJlc3Npb24pIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV4cHIuZXhwcmVzc2lvbnMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWludGVycHJldEV4cHJlc3Npb25Bc1BhdHRlcm4oZXhwci5leHByZXNzaW9uc1tpXSk7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWludGVycHJldEV4cHJlc3Npb25Bc1BhdHRlcm4oZXhwcik7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGFyYW1ldGVycyA9IChleHByLnR5cGUgPT09IHN5bnRheF8xLlN5bnRheC5TZXF1ZW5jZUV4cHJlc3Npb24gPyBleHByLmV4cHJlc3Npb25zIDogW2V4cHJdKTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cHIgPSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogQXJyb3dQYXJhbWV0ZXJQbGFjZUhvbGRlcixcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IHBhcmFtZXRlcnMsXG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXN5bmM6IGZhbHNlXG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5pc0JpbmRpbmdFbGVtZW50ID0gZmFsc2U7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIGV4cHI7XG5cdCAgICB9O1xuXHQgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtbGVmdC1oYW5kLXNpZGUtZXhwcmVzc2lvbnNcblx0ICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VBcmd1bWVudHMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5leHBlY3QoJygnKTtcblx0ICAgICAgICB2YXIgYXJncyA9IFtdO1xuXHQgICAgICAgIGlmICghdGhpcy5tYXRjaCgnKScpKSB7XG5cdCAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgZXhwciA9IHRoaXMubWF0Y2goJy4uLicpID8gdGhpcy5wYXJzZVNwcmVhZEVsZW1lbnQoKSA6XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5pc29sYXRlQ292ZXJHcmFtbWFyKHRoaXMucGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbik7XG5cdCAgICAgICAgICAgICAgICBhcmdzLnB1c2goZXhwcik7XG5cdCAgICAgICAgICAgICAgICBpZiAodGhpcy5tYXRjaCgnKScpKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICB0aGlzLmV4cGVjdENvbW1hU2VwYXJhdG9yKCk7XG5cdCAgICAgICAgICAgICAgICBpZiAodGhpcy5tYXRjaCgnKScpKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5leHBlY3QoJyknKTtcblx0ICAgICAgICByZXR1cm4gYXJncztcblx0ICAgIH07XG5cdCAgICBQYXJzZXIucHJvdG90eXBlLmlzSWRlbnRpZmllck5hbWUgPSBmdW5jdGlvbiAodG9rZW4pIHtcblx0ICAgICAgICByZXR1cm4gdG9rZW4udHlwZSA9PT0gMyAvKiBJZGVudGlmaWVyICovIHx8XG5cdCAgICAgICAgICAgIHRva2VuLnR5cGUgPT09IDQgLyogS2V5d29yZCAqLyB8fFxuXHQgICAgICAgICAgICB0b2tlbi50eXBlID09PSAxIC8qIEJvb2xlYW5MaXRlcmFsICovIHx8XG5cdCAgICAgICAgICAgIHRva2VuLnR5cGUgPT09IDUgLyogTnVsbExpdGVyYWwgKi87XG5cdCAgICB9O1xuXHQgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZUlkZW50aWZpZXJOYW1lID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7XG5cdCAgICAgICAgdmFyIHRva2VuID0gdGhpcy5uZXh0VG9rZW4oKTtcblx0ICAgICAgICBpZiAoIXRoaXMuaXNJZGVudGlmaWVyTmFtZSh0b2tlbikpIHtcblx0ICAgICAgICAgICAgdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbih0b2tlbik7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLklkZW50aWZpZXIodG9rZW4udmFsdWUpKTtcblx0ICAgIH07XG5cdCAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlTmV3RXhwcmVzc2lvbiA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpO1xuXHQgICAgICAgIHZhciBpZCA9IHRoaXMucGFyc2VJZGVudGlmaWVyTmFtZSgpO1xuXHQgICAgICAgIGFzc2VydF8xLmFzc2VydChpZC5uYW1lID09PSAnbmV3JywgJ05ldyBleHByZXNzaW9uIG11c3Qgc3RhcnQgd2l0aCBgbmV3YCcpO1xuXHQgICAgICAgIHZhciBleHByO1xuXHQgICAgICAgIGlmICh0aGlzLm1hdGNoKCcuJykpIHtcblx0ICAgICAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTtcblx0ICAgICAgICAgICAgaWYgKHRoaXMubG9va2FoZWFkLnR5cGUgPT09IDMgLyogSWRlbnRpZmllciAqLyAmJiB0aGlzLmNvbnRleHQuaW5GdW5jdGlvbkJvZHkgJiYgdGhpcy5sb29rYWhlYWQudmFsdWUgPT09ICd0YXJnZXQnKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgcHJvcGVydHkgPSB0aGlzLnBhcnNlSWRlbnRpZmllck5hbWUoKTtcblx0ICAgICAgICAgICAgICAgIGV4cHIgPSBuZXcgTm9kZS5NZXRhUHJvcGVydHkoaWQsIHByb3BlcnR5KTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4odGhpcy5sb29rYWhlYWQpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGVsc2Uge1xuXHQgICAgICAgICAgICB2YXIgY2FsbGVlID0gdGhpcy5pc29sYXRlQ292ZXJHcmFtbWFyKHRoaXMucGFyc2VMZWZ0SGFuZFNpZGVFeHByZXNzaW9uKTtcblx0ICAgICAgICAgICAgdmFyIGFyZ3MgPSB0aGlzLm1hdGNoKCcoJykgPyB0aGlzLnBhcnNlQXJndW1lbnRzKCkgOiBbXTtcblx0ICAgICAgICAgICAgZXhwciA9IG5ldyBOb2RlLk5ld0V4cHJlc3Npb24oY2FsbGVlLCBhcmdzKTtcblx0ICAgICAgICAgICAgdGhpcy5jb250ZXh0LmlzQXNzaWdubWVudFRhcmdldCA9IGZhbHNlO1xuXHQgICAgICAgICAgICB0aGlzLmNvbnRleHQuaXNCaW5kaW5nRWxlbWVudCA9IGZhbHNlO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBleHByKTtcblx0ICAgIH07XG5cdCAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlQXN5bmNBcmd1bWVudCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgYXJnID0gdGhpcy5wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7XG5cdCAgICAgICAgdGhpcy5jb250ZXh0LmZpcnN0Q292ZXJJbml0aWFsaXplZE5hbWVFcnJvciA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIGFyZztcblx0ICAgIH07XG5cdCAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlQXN5bmNBcmd1bWVudHMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5leHBlY3QoJygnKTtcblx0ICAgICAgICB2YXIgYXJncyA9IFtdO1xuXHQgICAgICAgIGlmICghdGhpcy5tYXRjaCgnKScpKSB7XG5cdCAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgZXhwciA9IHRoaXMubWF0Y2goJy4uLicpID8gdGhpcy5wYXJzZVNwcmVhZEVsZW1lbnQoKSA6XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5pc29sYXRlQ292ZXJHcmFtbWFyKHRoaXMucGFyc2VBc3luY0FyZ3VtZW50KTtcblx0ICAgICAgICAgICAgICAgIGFyZ3MucHVzaChleHByKTtcblx0ICAgICAgICAgICAgICAgIGlmICh0aGlzLm1hdGNoKCcpJykpIHtcblx0ICAgICAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIHRoaXMuZXhwZWN0Q29tbWFTZXBhcmF0b3IoKTtcblx0ICAgICAgICAgICAgICAgIGlmICh0aGlzLm1hdGNoKCcpJykpIHtcblx0ICAgICAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLmV4cGVjdCgnKScpO1xuXHQgICAgICAgIHJldHVybiBhcmdzO1xuXHQgICAgfTtcblx0ICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VMZWZ0SGFuZFNpZGVFeHByZXNzaW9uQWxsb3dDYWxsID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBzdGFydFRva2VuID0gdGhpcy5sb29rYWhlYWQ7XG5cdCAgICAgICAgdmFyIG1heWJlQXN5bmMgPSB0aGlzLm1hdGNoQ29udGV4dHVhbEtleXdvcmQoJ2FzeW5jJyk7XG5cdCAgICAgICAgdmFyIHByZXZpb3VzQWxsb3dJbiA9IHRoaXMuY29udGV4dC5hbGxvd0luO1xuXHQgICAgICAgIHRoaXMuY29udGV4dC5hbGxvd0luID0gdHJ1ZTtcblx0ICAgICAgICB2YXIgZXhwcjtcblx0ICAgICAgICBpZiAodGhpcy5tYXRjaEtleXdvcmQoJ3N1cGVyJykgJiYgdGhpcy5jb250ZXh0LmluRnVuY3Rpb25Cb2R5KSB7XG5cdCAgICAgICAgICAgIGV4cHIgPSB0aGlzLmNyZWF0ZU5vZGUoKTtcblx0ICAgICAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTtcblx0ICAgICAgICAgICAgZXhwciA9IHRoaXMuZmluYWxpemUoZXhwciwgbmV3IE5vZGUuU3VwZXIoKSk7XG5cdCAgICAgICAgICAgIGlmICghdGhpcy5tYXRjaCgnKCcpICYmICF0aGlzLm1hdGNoKCcuJykgJiYgIXRoaXMubWF0Y2goJ1snKSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbih0aGlzLmxvb2thaGVhZCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgZWxzZSB7XG5cdCAgICAgICAgICAgIGV4cHIgPSB0aGlzLmluaGVyaXRDb3ZlckdyYW1tYXIodGhpcy5tYXRjaEtleXdvcmQoJ25ldycpID8gdGhpcy5wYXJzZU5ld0V4cHJlc3Npb24gOiB0aGlzLnBhcnNlUHJpbWFyeUV4cHJlc3Npb24pO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB3aGlsZSAodHJ1ZSkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5tYXRjaCgnLicpKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuaXNCaW5kaW5nRWxlbWVudCA9IGZhbHNlO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmlzQXNzaWdubWVudFRhcmdldCA9IHRydWU7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmV4cGVjdCgnLicpO1xuXHQgICAgICAgICAgICAgICAgdmFyIHByb3BlcnR5ID0gdGhpcy5wYXJzZUlkZW50aWZpZXJOYW1lKCk7XG5cdCAgICAgICAgICAgICAgICBleHByID0gdGhpcy5maW5hbGl6ZSh0aGlzLnN0YXJ0Tm9kZShzdGFydFRva2VuKSwgbmV3IE5vZGUuU3RhdGljTWVtYmVyRXhwcmVzc2lvbihleHByLCBwcm9wZXJ0eSkpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMubWF0Y2goJygnKSkge1xuXHQgICAgICAgICAgICAgICAgdmFyIGFzeW5jQXJyb3cgPSBtYXliZUFzeW5jICYmIChzdGFydFRva2VuLmxpbmVOdW1iZXIgPT09IHRoaXMubG9va2FoZWFkLmxpbmVOdW1iZXIpO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmlzQmluZGluZ0VsZW1lbnQgPSBmYWxzZTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5pc0Fzc2lnbm1lbnRUYXJnZXQgPSBmYWxzZTtcblx0ICAgICAgICAgICAgICAgIHZhciBhcmdzID0gYXN5bmNBcnJvdyA/IHRoaXMucGFyc2VBc3luY0FyZ3VtZW50cygpIDogdGhpcy5wYXJzZUFyZ3VtZW50cygpO1xuXHQgICAgICAgICAgICAgICAgZXhwciA9IHRoaXMuZmluYWxpemUodGhpcy5zdGFydE5vZGUoc3RhcnRUb2tlbiksIG5ldyBOb2RlLkNhbGxFeHByZXNzaW9uKGV4cHIsIGFyZ3MpKTtcblx0ICAgICAgICAgICAgICAgIGlmIChhc3luY0Fycm93ICYmIHRoaXMubWF0Y2goJz0+JykpIHtcblx0ICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyArK2kpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWludGVycHJldEV4cHJlc3Npb25Bc1BhdHRlcm4oYXJnc1tpXSk7XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgICAgIGV4cHIgPSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IEFycm93UGFyYW1ldGVyUGxhY2VIb2xkZXIsXG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtczogYXJncyxcblx0ICAgICAgICAgICAgICAgICAgICAgICAgYXN5bmM6IHRydWVcblx0ICAgICAgICAgICAgICAgICAgICB9O1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMubWF0Y2goJ1snKSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmlzQmluZGluZ0VsZW1lbnQgPSBmYWxzZTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5pc0Fzc2lnbm1lbnRUYXJnZXQgPSB0cnVlO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5leHBlY3QoJ1snKTtcblx0ICAgICAgICAgICAgICAgIHZhciBwcm9wZXJ0eSA9IHRoaXMuaXNvbGF0ZUNvdmVyR3JhbW1hcih0aGlzLnBhcnNlRXhwcmVzc2lvbik7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmV4cGVjdCgnXScpO1xuXHQgICAgICAgICAgICAgICAgZXhwciA9IHRoaXMuZmluYWxpemUodGhpcy5zdGFydE5vZGUoc3RhcnRUb2tlbiksIG5ldyBOb2RlLkNvbXB1dGVkTWVtYmVyRXhwcmVzc2lvbihleHByLCBwcm9wZXJ0eSkpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMubG9va2FoZWFkLnR5cGUgPT09IDEwIC8qIFRlbXBsYXRlICovICYmIHRoaXMubG9va2FoZWFkLmhlYWQpIHtcblx0ICAgICAgICAgICAgICAgIHZhciBxdWFzaSA9IHRoaXMucGFyc2VUZW1wbGF0ZUxpdGVyYWwoKTtcblx0ICAgICAgICAgICAgICAgIGV4cHIgPSB0aGlzLmZpbmFsaXplKHRoaXMuc3RhcnROb2RlKHN0YXJ0VG9rZW4pLCBuZXcgTm9kZS5UYWdnZWRUZW1wbGF0ZUV4cHJlc3Npb24oZXhwciwgcXVhc2kpKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuY29udGV4dC5hbGxvd0luID0gcHJldmlvdXNBbGxvd0luO1xuXHQgICAgICAgIHJldHVybiBleHByO1xuXHQgICAgfTtcblx0ICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VTdXBlciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpO1xuXHQgICAgICAgIHRoaXMuZXhwZWN0S2V5d29yZCgnc3VwZXInKTtcblx0ICAgICAgICBpZiAoIXRoaXMubWF0Y2goJ1snKSAmJiAhdGhpcy5tYXRjaCgnLicpKSB7XG5cdCAgICAgICAgICAgIHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4odGhpcy5sb29rYWhlYWQpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5TdXBlcigpKTtcblx0ICAgIH07XG5cdCAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlTGVmdEhhbmRTaWRlRXhwcmVzc2lvbiA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBhc3NlcnRfMS5hc3NlcnQodGhpcy5jb250ZXh0LmFsbG93SW4sICdjYWxsZWUgb2YgbmV3IGV4cHJlc3Npb24gYWx3YXlzIGFsbG93IGluIGtleXdvcmQuJyk7XG5cdCAgICAgICAgdmFyIG5vZGUgPSB0aGlzLnN0YXJ0Tm9kZSh0aGlzLmxvb2thaGVhZCk7XG5cdCAgICAgICAgdmFyIGV4cHIgPSAodGhpcy5tYXRjaEtleXdvcmQoJ3N1cGVyJykgJiYgdGhpcy5jb250ZXh0LmluRnVuY3Rpb25Cb2R5KSA/IHRoaXMucGFyc2VTdXBlcigpIDpcblx0ICAgICAgICAgICAgdGhpcy5pbmhlcml0Q292ZXJHcmFtbWFyKHRoaXMubWF0Y2hLZXl3b3JkKCduZXcnKSA/IHRoaXMucGFyc2VOZXdFeHByZXNzaW9uIDogdGhpcy5wYXJzZVByaW1hcnlFeHByZXNzaW9uKTtcblx0ICAgICAgICB3aGlsZSAodHJ1ZSkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5tYXRjaCgnWycpKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuaXNCaW5kaW5nRWxlbWVudCA9IGZhbHNlO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmlzQXNzaWdubWVudFRhcmdldCA9IHRydWU7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmV4cGVjdCgnWycpO1xuXHQgICAgICAgICAgICAgICAgdmFyIHByb3BlcnR5ID0gdGhpcy5pc29sYXRlQ292ZXJHcmFtbWFyKHRoaXMucGFyc2VFeHByZXNzaW9uKTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuZXhwZWN0KCddJyk7XG5cdCAgICAgICAgICAgICAgICBleHByID0gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5Db21wdXRlZE1lbWJlckV4cHJlc3Npb24oZXhwciwgcHJvcGVydHkpKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBlbHNlIGlmICh0aGlzLm1hdGNoKCcuJykpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5pc0JpbmRpbmdFbGVtZW50ID0gZmFsc2U7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuaXNBc3NpZ25tZW50VGFyZ2V0ID0gdHJ1ZTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuZXhwZWN0KCcuJyk7XG5cdCAgICAgICAgICAgICAgICB2YXIgcHJvcGVydHkgPSB0aGlzLnBhcnNlSWRlbnRpZmllck5hbWUoKTtcblx0ICAgICAgICAgICAgICAgIGV4cHIgPSB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLlN0YXRpY01lbWJlckV4cHJlc3Npb24oZXhwciwgcHJvcGVydHkpKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBlbHNlIGlmICh0aGlzLmxvb2thaGVhZC50eXBlID09PSAxMCAvKiBUZW1wbGF0ZSAqLyAmJiB0aGlzLmxvb2thaGVhZC5oZWFkKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgcXVhc2kgPSB0aGlzLnBhcnNlVGVtcGxhdGVMaXRlcmFsKCk7XG5cdCAgICAgICAgICAgICAgICBleHByID0gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5UYWdnZWRUZW1wbGF0ZUV4cHJlc3Npb24oZXhwciwgcXVhc2kpKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiBleHByO1xuXHQgICAgfTtcblx0ICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXVwZGF0ZS1leHByZXNzaW9uc1xuXHQgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZVVwZGF0ZUV4cHJlc3Npb24gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIGV4cHI7XG5cdCAgICAgICAgdmFyIHN0YXJ0VG9rZW4gPSB0aGlzLmxvb2thaGVhZDtcblx0ICAgICAgICBpZiAodGhpcy5tYXRjaCgnKysnKSB8fCB0aGlzLm1hdGNoKCctLScpKSB7XG5cdCAgICAgICAgICAgIHZhciBub2RlID0gdGhpcy5zdGFydE5vZGUoc3RhcnRUb2tlbik7XG5cdCAgICAgICAgICAgIHZhciB0b2tlbiA9IHRoaXMubmV4dFRva2VuKCk7XG5cdCAgICAgICAgICAgIGV4cHIgPSB0aGlzLmluaGVyaXRDb3ZlckdyYW1tYXIodGhpcy5wYXJzZVVuYXJ5RXhwcmVzc2lvbik7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLmNvbnRleHQuc3RyaWN0ICYmIGV4cHIudHlwZSA9PT0gc3ludGF4XzEuU3ludGF4LklkZW50aWZpZXIgJiYgdGhpcy5zY2FubmVyLmlzUmVzdHJpY3RlZFdvcmQoZXhwci5uYW1lKSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy50b2xlcmF0ZUVycm9yKG1lc3NhZ2VzXzEuTWVzc2FnZXMuU3RyaWN0TEhTUHJlZml4KTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBpZiAoIXRoaXMuY29udGV4dC5pc0Fzc2lnbm1lbnRUYXJnZXQpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMudG9sZXJhdGVFcnJvcihtZXNzYWdlc18xLk1lc3NhZ2VzLkludmFsaWRMSFNJbkFzc2lnbm1lbnQpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHZhciBwcmVmaXggPSB0cnVlO1xuXHQgICAgICAgICAgICBleHByID0gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5VcGRhdGVFeHByZXNzaW9uKHRva2VuLnZhbHVlLCBleHByLCBwcmVmaXgpKTtcblx0ICAgICAgICAgICAgdGhpcy5jb250ZXh0LmlzQXNzaWdubWVudFRhcmdldCA9IGZhbHNlO1xuXHQgICAgICAgICAgICB0aGlzLmNvbnRleHQuaXNCaW5kaW5nRWxlbWVudCA9IGZhbHNlO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBlbHNlIHtcblx0ICAgICAgICAgICAgZXhwciA9IHRoaXMuaW5oZXJpdENvdmVyR3JhbW1hcih0aGlzLnBhcnNlTGVmdEhhbmRTaWRlRXhwcmVzc2lvbkFsbG93Q2FsbCk7XG5cdCAgICAgICAgICAgIGlmICghdGhpcy5oYXNMaW5lVGVybWluYXRvciAmJiB0aGlzLmxvb2thaGVhZC50eXBlID09PSA3IC8qIFB1bmN0dWF0b3IgKi8pIHtcblx0ICAgICAgICAgICAgICAgIGlmICh0aGlzLm1hdGNoKCcrKycpIHx8IHRoaXMubWF0Y2goJy0tJykpIHtcblx0ICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jb250ZXh0LnN0cmljdCAmJiBleHByLnR5cGUgPT09IHN5bnRheF8xLlN5bnRheC5JZGVudGlmaWVyICYmIHRoaXMuc2Nhbm5lci5pc1Jlc3RyaWN0ZWRXb3JkKGV4cHIubmFtZSkpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b2xlcmF0ZUVycm9yKG1lc3NhZ2VzXzEuTWVzc2FnZXMuU3RyaWN0TEhTUG9zdGZpeCk7XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5jb250ZXh0LmlzQXNzaWdubWVudFRhcmdldCkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvbGVyYXRlRXJyb3IobWVzc2FnZXNfMS5NZXNzYWdlcy5JbnZhbGlkTEhTSW5Bc3NpZ25tZW50KTtcblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmlzQXNzaWdubWVudFRhcmdldCA9IGZhbHNlO1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5pc0JpbmRpbmdFbGVtZW50ID0gZmFsc2U7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIG9wZXJhdG9yID0gdGhpcy5uZXh0VG9rZW4oKS52YWx1ZTtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgcHJlZml4ID0gZmFsc2U7XG5cdCAgICAgICAgICAgICAgICAgICAgZXhwciA9IHRoaXMuZmluYWxpemUodGhpcy5zdGFydE5vZGUoc3RhcnRUb2tlbiksIG5ldyBOb2RlLlVwZGF0ZUV4cHJlc3Npb24ob3BlcmF0b3IsIGV4cHIsIHByZWZpeCkpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiBleHByO1xuXHQgICAgfTtcblx0ICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXVuYXJ5LW9wZXJhdG9yc1xuXHQgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZUF3YWl0RXhwcmVzc2lvbiA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpO1xuXHQgICAgICAgIHRoaXMubmV4dFRva2VuKCk7XG5cdCAgICAgICAgdmFyIGFyZ3VtZW50ID0gdGhpcy5wYXJzZVVuYXJ5RXhwcmVzc2lvbigpO1xuXHQgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLkF3YWl0RXhwcmVzc2lvbihhcmd1bWVudCkpO1xuXHQgICAgfTtcblx0ICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VVbmFyeUV4cHJlc3Npb24gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIGV4cHI7XG5cdCAgICAgICAgaWYgKHRoaXMubWF0Y2goJysnKSB8fCB0aGlzLm1hdGNoKCctJykgfHwgdGhpcy5tYXRjaCgnficpIHx8IHRoaXMubWF0Y2goJyEnKSB8fFxuXHQgICAgICAgICAgICB0aGlzLm1hdGNoS2V5d29yZCgnZGVsZXRlJykgfHwgdGhpcy5tYXRjaEtleXdvcmQoJ3ZvaWQnKSB8fCB0aGlzLm1hdGNoS2V5d29yZCgndHlwZW9mJykpIHtcblx0ICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLnN0YXJ0Tm9kZSh0aGlzLmxvb2thaGVhZCk7XG5cdCAgICAgICAgICAgIHZhciB0b2tlbiA9IHRoaXMubmV4dFRva2VuKCk7XG5cdCAgICAgICAgICAgIGV4cHIgPSB0aGlzLmluaGVyaXRDb3ZlckdyYW1tYXIodGhpcy5wYXJzZVVuYXJ5RXhwcmVzc2lvbik7XG5cdCAgICAgICAgICAgIGV4cHIgPSB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLlVuYXJ5RXhwcmVzc2lvbih0b2tlbi52YWx1ZSwgZXhwcikpO1xuXHQgICAgICAgICAgICBpZiAodGhpcy5jb250ZXh0LnN0cmljdCAmJiBleHByLm9wZXJhdG9yID09PSAnZGVsZXRlJyAmJiBleHByLmFyZ3VtZW50LnR5cGUgPT09IHN5bnRheF8xLlN5bnRheC5JZGVudGlmaWVyKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLnRvbGVyYXRlRXJyb3IobWVzc2FnZXNfMS5NZXNzYWdlcy5TdHJpY3REZWxldGUpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMuY29udGV4dC5pc0Fzc2lnbm1lbnRUYXJnZXQgPSBmYWxzZTtcblx0ICAgICAgICAgICAgdGhpcy5jb250ZXh0LmlzQmluZGluZ0VsZW1lbnQgPSBmYWxzZTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgZWxzZSBpZiAodGhpcy5jb250ZXh0LmF3YWl0ICYmIHRoaXMubWF0Y2hDb250ZXh0dWFsS2V5d29yZCgnYXdhaXQnKSkge1xuXHQgICAgICAgICAgICBleHByID0gdGhpcy5wYXJzZUF3YWl0RXhwcmVzc2lvbigpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBlbHNlIHtcblx0ICAgICAgICAgICAgZXhwciA9IHRoaXMucGFyc2VVcGRhdGVFeHByZXNzaW9uKCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiBleHByO1xuXHQgICAgfTtcblx0ICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VFeHBvbmVudGlhdGlvbkV4cHJlc3Npb24gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIHN0YXJ0VG9rZW4gPSB0aGlzLmxvb2thaGVhZDtcblx0ICAgICAgICB2YXIgZXhwciA9IHRoaXMuaW5oZXJpdENvdmVyR3JhbW1hcih0aGlzLnBhcnNlVW5hcnlFeHByZXNzaW9uKTtcblx0ICAgICAgICBpZiAoZXhwci50eXBlICE9PSBzeW50YXhfMS5TeW50YXguVW5hcnlFeHByZXNzaW9uICYmIHRoaXMubWF0Y2goJyoqJykpIHtcblx0ICAgICAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTtcblx0ICAgICAgICAgICAgdGhpcy5jb250ZXh0LmlzQXNzaWdubWVudFRhcmdldCA9IGZhbHNlO1xuXHQgICAgICAgICAgICB0aGlzLmNvbnRleHQuaXNCaW5kaW5nRWxlbWVudCA9IGZhbHNlO1xuXHQgICAgICAgICAgICB2YXIgbGVmdCA9IGV4cHI7XG5cdCAgICAgICAgICAgIHZhciByaWdodCA9IHRoaXMuaXNvbGF0ZUNvdmVyR3JhbW1hcih0aGlzLnBhcnNlRXhwb25lbnRpYXRpb25FeHByZXNzaW9uKTtcblx0ICAgICAgICAgICAgZXhwciA9IHRoaXMuZmluYWxpemUodGhpcy5zdGFydE5vZGUoc3RhcnRUb2tlbiksIG5ldyBOb2RlLkJpbmFyeUV4cHJlc3Npb24oJyoqJywgbGVmdCwgcmlnaHQpKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIGV4cHI7XG5cdCAgICB9O1xuXHQgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtZXhwLW9wZXJhdG9yXG5cdCAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1tdWx0aXBsaWNhdGl2ZS1vcGVyYXRvcnNcblx0ICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFkZGl0aXZlLW9wZXJhdG9yc1xuXHQgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtYml0d2lzZS1zaGlmdC1vcGVyYXRvcnNcblx0ICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlbGF0aW9uYWwtb3BlcmF0b3JzXG5cdCAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1lcXVhbGl0eS1vcGVyYXRvcnNcblx0ICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWJpbmFyeS1iaXR3aXNlLW9wZXJhdG9yc1xuXHQgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtYmluYXJ5LWxvZ2ljYWwtb3BlcmF0b3JzXG5cdCAgICBQYXJzZXIucHJvdG90eXBlLmJpbmFyeVByZWNlZGVuY2UgPSBmdW5jdGlvbiAodG9rZW4pIHtcblx0ICAgICAgICB2YXIgb3AgPSB0b2tlbi52YWx1ZTtcblx0ICAgICAgICB2YXIgcHJlY2VkZW5jZTtcblx0ICAgICAgICBpZiAodG9rZW4udHlwZSA9PT0gNyAvKiBQdW5jdHVhdG9yICovKSB7XG5cdCAgICAgICAgICAgIHByZWNlZGVuY2UgPSB0aGlzLm9wZXJhdG9yUHJlY2VkZW5jZVtvcF0gfHwgMDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgZWxzZSBpZiAodG9rZW4udHlwZSA9PT0gNCAvKiBLZXl3b3JkICovKSB7XG5cdCAgICAgICAgICAgIHByZWNlZGVuY2UgPSAob3AgPT09ICdpbnN0YW5jZW9mJyB8fCAodGhpcy5jb250ZXh0LmFsbG93SW4gJiYgb3AgPT09ICdpbicpKSA/IDcgOiAwO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBlbHNlIHtcblx0ICAgICAgICAgICAgcHJlY2VkZW5jZSA9IDA7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiBwcmVjZWRlbmNlO1xuXHQgICAgfTtcblx0ICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VCaW5hcnlFeHByZXNzaW9uID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBzdGFydFRva2VuID0gdGhpcy5sb29rYWhlYWQ7XG5cdCAgICAgICAgdmFyIGV4cHIgPSB0aGlzLmluaGVyaXRDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUV4cG9uZW50aWF0aW9uRXhwcmVzc2lvbik7XG5cdCAgICAgICAgdmFyIHRva2VuID0gdGhpcy5sb29rYWhlYWQ7XG5cdCAgICAgICAgdmFyIHByZWMgPSB0aGlzLmJpbmFyeVByZWNlZGVuY2UodG9rZW4pO1xuXHQgICAgICAgIGlmIChwcmVjID4gMCkge1xuXHQgICAgICAgICAgICB0aGlzLm5leHRUb2tlbigpO1xuXHQgICAgICAgICAgICB0aGlzLmNvbnRleHQuaXNBc3NpZ25tZW50VGFyZ2V0ID0gZmFsc2U7XG5cdCAgICAgICAgICAgIHRoaXMuY29udGV4dC5pc0JpbmRpbmdFbGVtZW50ID0gZmFsc2U7XG5cdCAgICAgICAgICAgIHZhciBtYXJrZXJzID0gW3N0YXJ0VG9rZW4sIHRoaXMubG9va2FoZWFkXTtcblx0ICAgICAgICAgICAgdmFyIGxlZnQgPSBleHByO1xuXHQgICAgICAgICAgICB2YXIgcmlnaHQgPSB0aGlzLmlzb2xhdGVDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUV4cG9uZW50aWF0aW9uRXhwcmVzc2lvbik7XG5cdCAgICAgICAgICAgIHZhciBzdGFjayA9IFtsZWZ0LCB0b2tlbi52YWx1ZSwgcmlnaHRdO1xuXHQgICAgICAgICAgICB2YXIgcHJlY2VkZW5jZXMgPSBbcHJlY107XG5cdCAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7XG5cdCAgICAgICAgICAgICAgICBwcmVjID0gdGhpcy5iaW5hcnlQcmVjZWRlbmNlKHRoaXMubG9va2FoZWFkKTtcblx0ICAgICAgICAgICAgICAgIGlmIChwcmVjIDw9IDApIHtcblx0ICAgICAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIC8vIFJlZHVjZTogbWFrZSBhIGJpbmFyeSBleHByZXNzaW9uIGZyb20gdGhlIHRocmVlIHRvcG1vc3QgZW50cmllcy5cblx0ICAgICAgICAgICAgICAgIHdoaWxlICgoc3RhY2subGVuZ3RoID4gMikgJiYgKHByZWMgPD0gcHJlY2VkZW5jZXNbcHJlY2VkZW5jZXMubGVuZ3RoIC0gMV0pKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmlnaHQgPSBzdGFjay5wb3AoKTtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgb3BlcmF0b3IgPSBzdGFjay5wb3AoKTtcblx0ICAgICAgICAgICAgICAgICAgICBwcmVjZWRlbmNlcy5wb3AoKTtcblx0ICAgICAgICAgICAgICAgICAgICBsZWZ0ID0gc3RhY2sucG9wKCk7XG5cdCAgICAgICAgICAgICAgICAgICAgbWFya2Vycy5wb3AoKTtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMuc3RhcnROb2RlKG1hcmtlcnNbbWFya2Vycy5sZW5ndGggLSAxXSk7XG5cdCAgICAgICAgICAgICAgICAgICAgc3RhY2sucHVzaCh0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLkJpbmFyeUV4cHJlc3Npb24ob3BlcmF0b3IsIGxlZnQsIHJpZ2h0KSkpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgLy8gU2hpZnQuXG5cdCAgICAgICAgICAgICAgICBzdGFjay5wdXNoKHRoaXMubmV4dFRva2VuKCkudmFsdWUpO1xuXHQgICAgICAgICAgICAgICAgcHJlY2VkZW5jZXMucHVzaChwcmVjKTtcblx0ICAgICAgICAgICAgICAgIG1hcmtlcnMucHVzaCh0aGlzLmxvb2thaGVhZCk7XG5cdCAgICAgICAgICAgICAgICBzdGFjay5wdXNoKHRoaXMuaXNvbGF0ZUNvdmVyR3JhbW1hcih0aGlzLnBhcnNlRXhwb25lbnRpYXRpb25FeHByZXNzaW9uKSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgLy8gRmluYWwgcmVkdWNlIHRvIGNsZWFuLXVwIHRoZSBzdGFjay5cblx0ICAgICAgICAgICAgdmFyIGkgPSBzdGFjay5sZW5ndGggLSAxO1xuXHQgICAgICAgICAgICBleHByID0gc3RhY2tbaV07XG5cdCAgICAgICAgICAgIHZhciBsYXN0TWFya2VyID0gbWFya2Vycy5wb3AoKTtcblx0ICAgICAgICAgICAgd2hpbGUgKGkgPiAxKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgbWFya2VyID0gbWFya2Vycy5wb3AoKTtcblx0ICAgICAgICAgICAgICAgIHZhciBsYXN0TGluZVN0YXJ0ID0gbGFzdE1hcmtlciAmJiBsYXN0TWFya2VyLmxpbmVTdGFydDtcblx0ICAgICAgICAgICAgICAgIHZhciBub2RlID0gdGhpcy5zdGFydE5vZGUobWFya2VyLCBsYXN0TGluZVN0YXJ0KTtcblx0ICAgICAgICAgICAgICAgIHZhciBvcGVyYXRvciA9IHN0YWNrW2kgLSAxXTtcblx0ICAgICAgICAgICAgICAgIGV4cHIgPSB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLkJpbmFyeUV4cHJlc3Npb24ob3BlcmF0b3IsIHN0YWNrW2kgLSAyXSwgZXhwcikpO1xuXHQgICAgICAgICAgICAgICAgaSAtPSAyO1xuXHQgICAgICAgICAgICAgICAgbGFzdE1hcmtlciA9IG1hcmtlcjtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gZXhwcjtcblx0ICAgIH07XG5cdCAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1jb25kaXRpb25hbC1vcGVyYXRvclxuXHQgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZUNvbmRpdGlvbmFsRXhwcmVzc2lvbiA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgc3RhcnRUb2tlbiA9IHRoaXMubG9va2FoZWFkO1xuXHQgICAgICAgIHZhciBleHByID0gdGhpcy5pbmhlcml0Q292ZXJHcmFtbWFyKHRoaXMucGFyc2VCaW5hcnlFeHByZXNzaW9uKTtcblx0ICAgICAgICBpZiAodGhpcy5tYXRjaCgnPycpKSB7XG5cdCAgICAgICAgICAgIHRoaXMubmV4dFRva2VuKCk7XG5cdCAgICAgICAgICAgIHZhciBwcmV2aW91c0FsbG93SW4gPSB0aGlzLmNvbnRleHQuYWxsb3dJbjtcblx0ICAgICAgICAgICAgdGhpcy5jb250ZXh0LmFsbG93SW4gPSB0cnVlO1xuXHQgICAgICAgICAgICB2YXIgY29uc2VxdWVudCA9IHRoaXMuaXNvbGF0ZUNvdmVyR3JhbW1hcih0aGlzLnBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24pO1xuXHQgICAgICAgICAgICB0aGlzLmNvbnRleHQuYWxsb3dJbiA9IHByZXZpb3VzQWxsb3dJbjtcblx0ICAgICAgICAgICAgdGhpcy5leHBlY3QoJzonKTtcblx0ICAgICAgICAgICAgdmFyIGFsdGVybmF0ZSA9IHRoaXMuaXNvbGF0ZUNvdmVyR3JhbW1hcih0aGlzLnBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24pO1xuXHQgICAgICAgICAgICBleHByID0gdGhpcy5maW5hbGl6ZSh0aGlzLnN0YXJ0Tm9kZShzdGFydFRva2VuKSwgbmV3IE5vZGUuQ29uZGl0aW9uYWxFeHByZXNzaW9uKGV4cHIsIGNvbnNlcXVlbnQsIGFsdGVybmF0ZSkpO1xuXHQgICAgICAgICAgICB0aGlzLmNvbnRleHQuaXNBc3NpZ25tZW50VGFyZ2V0ID0gZmFsc2U7XG5cdCAgICAgICAgICAgIHRoaXMuY29udGV4dC5pc0JpbmRpbmdFbGVtZW50ID0gZmFsc2U7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiBleHByO1xuXHQgICAgfTtcblx0ICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFzc2lnbm1lbnQtb3BlcmF0b3JzXG5cdCAgICBQYXJzZXIucHJvdG90eXBlLmNoZWNrUGF0dGVyblBhcmFtID0gZnVuY3Rpb24gKG9wdGlvbnMsIHBhcmFtKSB7XG5cdCAgICAgICAgc3dpdGNoIChwYXJhbS50eXBlKSB7XG5cdCAgICAgICAgICAgIGNhc2Ugc3ludGF4XzEuU3ludGF4LklkZW50aWZpZXI6XG5cdCAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRlUGFyYW0ob3B0aW9ucywgcGFyYW0sIHBhcmFtLm5hbWUpO1xuXHQgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgIGNhc2Ugc3ludGF4XzEuU3ludGF4LlJlc3RFbGVtZW50OlxuXHQgICAgICAgICAgICAgICAgdGhpcy5jaGVja1BhdHRlcm5QYXJhbShvcHRpb25zLCBwYXJhbS5hcmd1bWVudCk7XG5cdCAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgY2FzZSBzeW50YXhfMS5TeW50YXguQXNzaWdubWVudFBhdHRlcm46XG5cdCAgICAgICAgICAgICAgICB0aGlzLmNoZWNrUGF0dGVyblBhcmFtKG9wdGlvbnMsIHBhcmFtLmxlZnQpO1xuXHQgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgIGNhc2Ugc3ludGF4XzEuU3ludGF4LkFycmF5UGF0dGVybjpcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFyYW0uZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgICAgICBpZiAocGFyYW0uZWxlbWVudHNbaV0gIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGVja1BhdHRlcm5QYXJhbShvcHRpb25zLCBwYXJhbS5lbGVtZW50c1tpXSk7XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgIGNhc2Ugc3ludGF4XzEuU3ludGF4Lk9iamVjdFBhdHRlcm46XG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcmFtLnByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLmNoZWNrUGF0dGVyblBhcmFtKG9wdGlvbnMsIHBhcmFtLnByb3BlcnRpZXNbaV0udmFsdWUpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgIGRlZmF1bHQ6XG5cdCAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICB9XG5cdCAgICAgICAgb3B0aW9ucy5zaW1wbGUgPSBvcHRpb25zLnNpbXBsZSAmJiAocGFyYW0gaW5zdGFuY2VvZiBOb2RlLklkZW50aWZpZXIpO1xuXHQgICAgfTtcblx0ICAgIFBhcnNlci5wcm90b3R5cGUucmVpbnRlcnByZXRBc0NvdmVyRm9ybWFsc0xpc3QgPSBmdW5jdGlvbiAoZXhwcikge1xuXHQgICAgICAgIHZhciBwYXJhbXMgPSBbZXhwcl07XG5cdCAgICAgICAgdmFyIG9wdGlvbnM7XG5cdCAgICAgICAgdmFyIGFzeW5jQXJyb3cgPSBmYWxzZTtcblx0ICAgICAgICBzd2l0Y2ggKGV4cHIudHlwZSkge1xuXHQgICAgICAgICAgICBjYXNlIHN5bnRheF8xLlN5bnRheC5JZGVudGlmaWVyOlxuXHQgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgIGNhc2UgQXJyb3dQYXJhbWV0ZXJQbGFjZUhvbGRlcjpcblx0ICAgICAgICAgICAgICAgIHBhcmFtcyA9IGV4cHIucGFyYW1zO1xuXHQgICAgICAgICAgICAgICAgYXN5bmNBcnJvdyA9IGV4cHIuYXN5bmM7XG5cdCAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgZGVmYXVsdDpcblx0ICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBvcHRpb25zID0ge1xuXHQgICAgICAgICAgICBzaW1wbGU6IHRydWUsXG5cdCAgICAgICAgICAgIHBhcmFtU2V0OiB7fVxuXHQgICAgICAgIH07XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXJhbXMubGVuZ3RoOyArK2kpIHtcblx0ICAgICAgICAgICAgdmFyIHBhcmFtID0gcGFyYW1zW2ldO1xuXHQgICAgICAgICAgICBpZiAocGFyYW0udHlwZSA9PT0gc3ludGF4XzEuU3ludGF4LkFzc2lnbm1lbnRQYXR0ZXJuKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAocGFyYW0ucmlnaHQudHlwZSA9PT0gc3ludGF4XzEuU3ludGF4LllpZWxkRXhwcmVzc2lvbikge1xuXHQgICAgICAgICAgICAgICAgICAgIGlmIChwYXJhbS5yaWdodC5hcmd1bWVudCkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKHRoaXMubG9va2FoZWFkKTtcblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAgICAgcGFyYW0ucmlnaHQudHlwZSA9IHN5bnRheF8xLlN5bnRheC5JZGVudGlmaWVyO1xuXHQgICAgICAgICAgICAgICAgICAgIHBhcmFtLnJpZ2h0Lm5hbWUgPSAneWllbGQnO1xuXHQgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBwYXJhbS5yaWdodC5hcmd1bWVudDtcblx0ICAgICAgICAgICAgICAgICAgICBkZWxldGUgcGFyYW0ucmlnaHQuZGVsZWdhdGU7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgZWxzZSBpZiAoYXN5bmNBcnJvdyAmJiBwYXJhbS50eXBlID09PSBzeW50YXhfMS5TeW50YXguSWRlbnRpZmllciAmJiBwYXJhbS5uYW1lID09PSAnYXdhaXQnKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKHRoaXMubG9va2FoZWFkKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLmNoZWNrUGF0dGVyblBhcmFtKG9wdGlvbnMsIHBhcmFtKTtcblx0ICAgICAgICAgICAgcGFyYW1zW2ldID0gcGFyYW07XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmICh0aGlzLmNvbnRleHQuc3RyaWN0IHx8ICF0aGlzLmNvbnRleHQuYWxsb3dZaWVsZCkge1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcmFtcy5sZW5ndGg7ICsraSkge1xuXHQgICAgICAgICAgICAgICAgdmFyIHBhcmFtID0gcGFyYW1zW2ldO1xuXHQgICAgICAgICAgICAgICAgaWYgKHBhcmFtLnR5cGUgPT09IHN5bnRheF8xLlN5bnRheC5ZaWVsZEV4cHJlc3Npb24pIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKHRoaXMubG9va2FoZWFkKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAob3B0aW9ucy5tZXNzYWdlID09PSBtZXNzYWdlc18xLk1lc3NhZ2VzLlN0cmljdFBhcmFtRHVwZSkge1xuXHQgICAgICAgICAgICB2YXIgdG9rZW4gPSB0aGlzLmNvbnRleHQuc3RyaWN0ID8gb3B0aW9ucy5zdHJpY3RlZCA6IG9wdGlvbnMuZmlyc3RSZXN0cmljdGVkO1xuXHQgICAgICAgICAgICB0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKHRva2VuLCBvcHRpb25zLm1lc3NhZ2UpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4ge1xuXHQgICAgICAgICAgICBzaW1wbGU6IG9wdGlvbnMuc2ltcGxlLFxuXHQgICAgICAgICAgICBwYXJhbXM6IHBhcmFtcyxcblx0ICAgICAgICAgICAgc3RyaWN0ZWQ6IG9wdGlvbnMuc3RyaWN0ZWQsXG5cdCAgICAgICAgICAgIGZpcnN0UmVzdHJpY3RlZDogb3B0aW9ucy5maXJzdFJlc3RyaWN0ZWQsXG5cdCAgICAgICAgICAgIG1lc3NhZ2U6IG9wdGlvbnMubWVzc2FnZVxuXHQgICAgICAgIH07XG5cdCAgICB9O1xuXHQgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBleHByO1xuXHQgICAgICAgIGlmICghdGhpcy5jb250ZXh0LmFsbG93WWllbGQgJiYgdGhpcy5tYXRjaEtleXdvcmQoJ3lpZWxkJykpIHtcblx0ICAgICAgICAgICAgZXhwciA9IHRoaXMucGFyc2VZaWVsZEV4cHJlc3Npb24oKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgZWxzZSB7XG5cdCAgICAgICAgICAgIHZhciBzdGFydFRva2VuID0gdGhpcy5sb29rYWhlYWQ7XG5cdCAgICAgICAgICAgIHZhciB0b2tlbiA9IHN0YXJ0VG9rZW47XG5cdCAgICAgICAgICAgIGV4cHIgPSB0aGlzLnBhcnNlQ29uZGl0aW9uYWxFeHByZXNzaW9uKCk7XG5cdCAgICAgICAgICAgIGlmICh0b2tlbi50eXBlID09PSAzIC8qIElkZW50aWZpZXIgKi8gJiYgKHRva2VuLmxpbmVOdW1iZXIgPT09IHRoaXMubG9va2FoZWFkLmxpbmVOdW1iZXIpICYmIHRva2VuLnZhbHVlID09PSAnYXN5bmMnKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAodGhpcy5sb29rYWhlYWQudHlwZSA9PT0gMyAvKiBJZGVudGlmaWVyICovIHx8IHRoaXMubWF0Y2hLZXl3b3JkKCd5aWVsZCcpKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIGFyZyA9IHRoaXMucGFyc2VQcmltYXJ5RXhwcmVzc2lvbigpO1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMucmVpbnRlcnByZXRFeHByZXNzaW9uQXNQYXR0ZXJuKGFyZyk7XG5cdCAgICAgICAgICAgICAgICAgICAgZXhwciA9IHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogQXJyb3dQYXJhbWV0ZXJQbGFjZUhvbGRlcixcblx0ICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiBbYXJnXSxcblx0ICAgICAgICAgICAgICAgICAgICAgICAgYXN5bmM6IHRydWVcblx0ICAgICAgICAgICAgICAgICAgICB9O1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGlmIChleHByLnR5cGUgPT09IEFycm93UGFyYW1ldGVyUGxhY2VIb2xkZXIgfHwgdGhpcy5tYXRjaCgnPT4nKSkge1xuXHQgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtYXJyb3ctZnVuY3Rpb24tZGVmaW5pdGlvbnNcblx0ICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5pc0Fzc2lnbm1lbnRUYXJnZXQgPSBmYWxzZTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5pc0JpbmRpbmdFbGVtZW50ID0gZmFsc2U7XG5cdCAgICAgICAgICAgICAgICB2YXIgaXNBc3luYyA9IGV4cHIuYXN5bmM7XG5cdCAgICAgICAgICAgICAgICB2YXIgbGlzdCA9IHRoaXMucmVpbnRlcnByZXRBc0NvdmVyRm9ybWFsc0xpc3QoZXhwcik7XG5cdCAgICAgICAgICAgICAgICBpZiAobGlzdCkge1xuXHQgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmhhc0xpbmVUZXJtaW5hdG9yKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4odGhpcy5sb29rYWhlYWQpO1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuZmlyc3RDb3ZlckluaXRpYWxpemVkTmFtZUVycm9yID0gbnVsbDtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgcHJldmlvdXNTdHJpY3QgPSB0aGlzLmNvbnRleHQuc3RyaWN0O1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBwcmV2aW91c0FsbG93U3RyaWN0RGlyZWN0aXZlID0gdGhpcy5jb250ZXh0LmFsbG93U3RyaWN0RGlyZWN0aXZlO1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5hbGxvd1N0cmljdERpcmVjdGl2ZSA9IGxpc3Quc2ltcGxlO1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBwcmV2aW91c0FsbG93WWllbGQgPSB0aGlzLmNvbnRleHQuYWxsb3dZaWVsZDtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgcHJldmlvdXNBd2FpdCA9IHRoaXMuY29udGV4dC5hd2FpdDtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuYWxsb3dZaWVsZCA9IHRydWU7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmF3YWl0ID0gaXNBc3luYztcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMuc3RhcnROb2RlKHN0YXJ0VG9rZW4pO1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuZXhwZWN0KCc9PicpO1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBib2R5ID0gdm9pZCAwO1xuXHQgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm1hdGNoKCd7JykpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByZXZpb3VzQWxsb3dJbiA9IHRoaXMuY29udGV4dC5hbGxvd0luO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuYWxsb3dJbiA9IHRydWU7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIGJvZHkgPSB0aGlzLnBhcnNlRnVuY3Rpb25Tb3VyY2VFbGVtZW50cygpO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuYWxsb3dJbiA9IHByZXZpb3VzQWxsb3dJbjtcblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIGJvZHkgPSB0aGlzLmlzb2xhdGVDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKTtcblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIGV4cHJlc3Npb24gPSBib2R5LnR5cGUgIT09IHN5bnRheF8xLlN5bnRheC5CbG9ja1N0YXRlbWVudDtcblx0ICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jb250ZXh0LnN0cmljdCAmJiBsaXN0LmZpcnN0UmVzdHJpY3RlZCkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKGxpc3QuZmlyc3RSZXN0cmljdGVkLCBsaXN0Lm1lc3NhZ2UpO1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jb250ZXh0LnN0cmljdCAmJiBsaXN0LnN0cmljdGVkKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4obGlzdC5zdHJpY3RlZCwgbGlzdC5tZXNzYWdlKTtcblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAgICAgZXhwciA9IGlzQXN5bmMgPyB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLkFzeW5jQXJyb3dGdW5jdGlvbkV4cHJlc3Npb24obGlzdC5wYXJhbXMsIGJvZHksIGV4cHJlc3Npb24pKSA6XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuQXJyb3dGdW5jdGlvbkV4cHJlc3Npb24obGlzdC5wYXJhbXMsIGJvZHksIGV4cHJlc3Npb24pKTtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuc3RyaWN0ID0gcHJldmlvdXNTdHJpY3Q7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmFsbG93U3RyaWN0RGlyZWN0aXZlID0gcHJldmlvdXNBbGxvd1N0cmljdERpcmVjdGl2ZTtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuYWxsb3dZaWVsZCA9IHByZXZpb3VzQWxsb3dZaWVsZDtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuYXdhaXQgPSBwcmV2aW91c0F3YWl0O1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgaWYgKHRoaXMubWF0Y2hBc3NpZ24oKSkge1xuXHQgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5jb250ZXh0LmlzQXNzaWdubWVudFRhcmdldCkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvbGVyYXRlRXJyb3IobWVzc2FnZXNfMS5NZXNzYWdlcy5JbnZhbGlkTEhTSW5Bc3NpZ25tZW50KTtcblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY29udGV4dC5zdHJpY3QgJiYgZXhwci50eXBlID09PSBzeW50YXhfMS5TeW50YXguSWRlbnRpZmllcikge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaWQgPSBleHByO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zY2FubmVyLmlzUmVzdHJpY3RlZFdvcmQoaWQubmFtZSkpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4odG9rZW4sIG1lc3NhZ2VzXzEuTWVzc2FnZXMuU3RyaWN0TEhTQXNzaWdubWVudCk7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2Nhbm5lci5pc1N0cmljdE1vZGVSZXNlcnZlZFdvcmQoaWQubmFtZSkpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4odG9rZW4sIG1lc3NhZ2VzXzEuTWVzc2FnZXMuU3RyaWN0UmVzZXJ2ZWRXb3JkKTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMubWF0Y2goJz0nKSkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuaXNBc3NpZ25tZW50VGFyZ2V0ID0gZmFsc2U7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5pc0JpbmRpbmdFbGVtZW50ID0gZmFsc2U7XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlaW50ZXJwcmV0RXhwcmVzc2lvbkFzUGF0dGVybihleHByKTtcblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSB0aGlzLm5leHRUb2tlbigpO1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBvcGVyYXRvciA9IHRva2VuLnZhbHVlO1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciByaWdodCA9IHRoaXMuaXNvbGF0ZUNvdmVyR3JhbW1hcih0aGlzLnBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24pO1xuXHQgICAgICAgICAgICAgICAgICAgIGV4cHIgPSB0aGlzLmZpbmFsaXplKHRoaXMuc3RhcnROb2RlKHN0YXJ0VG9rZW4pLCBuZXcgTm9kZS5Bc3NpZ25tZW50RXhwcmVzc2lvbihvcGVyYXRvciwgZXhwciwgcmlnaHQpKTtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuZmlyc3RDb3ZlckluaXRpYWxpemVkTmFtZUVycm9yID0gbnVsbDtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gZXhwcjtcblx0ICAgIH07XG5cdCAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1jb21tYS1vcGVyYXRvclxuXHQgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZUV4cHJlc3Npb24gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIHN0YXJ0VG9rZW4gPSB0aGlzLmxvb2thaGVhZDtcblx0ICAgICAgICB2YXIgZXhwciA9IHRoaXMuaXNvbGF0ZUNvdmVyR3JhbW1hcih0aGlzLnBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24pO1xuXHQgICAgICAgIGlmICh0aGlzLm1hdGNoKCcsJykpIHtcblx0ICAgICAgICAgICAgdmFyIGV4cHJlc3Npb25zID0gW107XG5cdCAgICAgICAgICAgIGV4cHJlc3Npb25zLnB1c2goZXhwcik7XG5cdCAgICAgICAgICAgIHdoaWxlICh0aGlzLmxvb2thaGVhZC50eXBlICE9PSAyIC8qIEVPRiAqLykge1xuXHQgICAgICAgICAgICAgICAgaWYgKCF0aGlzLm1hdGNoKCcsJykpIHtcblx0ICAgICAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIHRoaXMubmV4dFRva2VuKCk7XG5cdCAgICAgICAgICAgICAgICBleHByZXNzaW9ucy5wdXNoKHRoaXMuaXNvbGF0ZUNvdmVyR3JhbW1hcih0aGlzLnBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24pKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBleHByID0gdGhpcy5maW5hbGl6ZSh0aGlzLnN0YXJ0Tm9kZShzdGFydFRva2VuKSwgbmV3IE5vZGUuU2VxdWVuY2VFeHByZXNzaW9uKGV4cHJlc3Npb25zKSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiBleHByO1xuXHQgICAgfTtcblx0ICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWJsb2NrXG5cdCAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlU3RhdGVtZW50TGlzdEl0ZW0gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIHN0YXRlbWVudDtcblx0ICAgICAgICB0aGlzLmNvbnRleHQuaXNBc3NpZ25tZW50VGFyZ2V0ID0gdHJ1ZTtcblx0ICAgICAgICB0aGlzLmNvbnRleHQuaXNCaW5kaW5nRWxlbWVudCA9IHRydWU7XG5cdCAgICAgICAgaWYgKHRoaXMubG9va2FoZWFkLnR5cGUgPT09IDQgLyogS2V5d29yZCAqLykge1xuXHQgICAgICAgICAgICBzd2l0Y2ggKHRoaXMubG9va2FoZWFkLnZhbHVlKSB7XG5cdCAgICAgICAgICAgICAgICBjYXNlICdleHBvcnQnOlxuXHQgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5jb250ZXh0LmlzTW9kdWxlKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4odGhpcy5sb29rYWhlYWQsIG1lc3NhZ2VzXzEuTWVzc2FnZXMuSWxsZWdhbEV4cG9ydERlY2xhcmF0aW9uKTtcblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50ID0gdGhpcy5wYXJzZUV4cG9ydERlY2xhcmF0aW9uKCk7XG5cdCAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgICAgICBjYXNlICdpbXBvcnQnOlxuXHQgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5jb250ZXh0LmlzTW9kdWxlKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4odGhpcy5sb29rYWhlYWQsIG1lc3NhZ2VzXzEuTWVzc2FnZXMuSWxsZWdhbEltcG9ydERlY2xhcmF0aW9uKTtcblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50ID0gdGhpcy5wYXJzZUltcG9ydERlY2xhcmF0aW9uKCk7XG5cdCAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgICAgICBjYXNlICdjb25zdCc6XG5cdCAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50ID0gdGhpcy5wYXJzZUxleGljYWxEZWNsYXJhdGlvbih7IGluRm9yOiBmYWxzZSB9KTtcblx0ICAgICAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgICAgIGNhc2UgJ2Z1bmN0aW9uJzpcblx0ICAgICAgICAgICAgICAgICAgICBzdGF0ZW1lbnQgPSB0aGlzLnBhcnNlRnVuY3Rpb25EZWNsYXJhdGlvbigpO1xuXHQgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICAgICAgY2FzZSAnY2xhc3MnOlxuXHQgICAgICAgICAgICAgICAgICAgIHN0YXRlbWVudCA9IHRoaXMucGFyc2VDbGFzc0RlY2xhcmF0aW9uKCk7XG5cdCAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgICAgICBjYXNlICdsZXQnOlxuXHQgICAgICAgICAgICAgICAgICAgIHN0YXRlbWVudCA9IHRoaXMuaXNMZXhpY2FsRGVjbGFyYXRpb24oKSA/IHRoaXMucGFyc2VMZXhpY2FsRGVjbGFyYXRpb24oeyBpbkZvcjogZmFsc2UgfSkgOiB0aGlzLnBhcnNlU3RhdGVtZW50KCk7XG5cdCAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgICAgICBkZWZhdWx0OlxuXHQgICAgICAgICAgICAgICAgICAgIHN0YXRlbWVudCA9IHRoaXMucGFyc2VTdGF0ZW1lbnQoKTtcblx0ICAgICAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICBlbHNlIHtcblx0ICAgICAgICAgICAgc3RhdGVtZW50ID0gdGhpcy5wYXJzZVN0YXRlbWVudCgpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gc3RhdGVtZW50O1xuXHQgICAgfTtcblx0ICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VCbG9jayA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpO1xuXHQgICAgICAgIHRoaXMuZXhwZWN0KCd7Jyk7XG5cdCAgICAgICAgdmFyIGJsb2NrID0gW107XG5cdCAgICAgICAgd2hpbGUgKHRydWUpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMubWF0Y2goJ30nKSkge1xuXHQgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgYmxvY2sucHVzaCh0aGlzLnBhcnNlU3RhdGVtZW50TGlzdEl0ZW0oKSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuZXhwZWN0KCd9Jyk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuQmxvY2tTdGF0ZW1lbnQoYmxvY2spKTtcblx0ICAgIH07XG5cdCAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1sZXQtYW5kLWNvbnN0LWRlY2xhcmF0aW9uc1xuXHQgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZUxleGljYWxCaW5kaW5nID0gZnVuY3Rpb24gKGtpbmQsIG9wdGlvbnMpIHtcblx0ICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpO1xuXHQgICAgICAgIHZhciBwYXJhbXMgPSBbXTtcblx0ICAgICAgICB2YXIgaWQgPSB0aGlzLnBhcnNlUGF0dGVybihwYXJhbXMsIGtpbmQpO1xuXHQgICAgICAgIGlmICh0aGlzLmNvbnRleHQuc3RyaWN0ICYmIGlkLnR5cGUgPT09IHN5bnRheF8xLlN5bnRheC5JZGVudGlmaWVyKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLnNjYW5uZXIuaXNSZXN0cmljdGVkV29yZChpZC5uYW1lKSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy50b2xlcmF0ZUVycm9yKG1lc3NhZ2VzXzEuTWVzc2FnZXMuU3RyaWN0VmFyTmFtZSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgdmFyIGluaXQgPSBudWxsO1xuXHQgICAgICAgIGlmIChraW5kID09PSAnY29uc3QnKSB7XG5cdCAgICAgICAgICAgIGlmICghdGhpcy5tYXRjaEtleXdvcmQoJ2luJykgJiYgIXRoaXMubWF0Y2hDb250ZXh0dWFsS2V5d29yZCgnb2YnKSkge1xuXHQgICAgICAgICAgICAgICAgaWYgKHRoaXMubWF0Y2goJz0nKSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dFRva2VuKCk7XG5cdCAgICAgICAgICAgICAgICAgICAgaW5pdCA9IHRoaXMuaXNvbGF0ZUNvdmVyR3JhbW1hcih0aGlzLnBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24pO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy50aHJvd0Vycm9yKG1lc3NhZ2VzXzEuTWVzc2FnZXMuRGVjbGFyYXRpb25NaXNzaW5nSW5pdGlhbGl6ZXIsICdjb25zdCcpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGVsc2UgaWYgKCghb3B0aW9ucy5pbkZvciAmJiBpZC50eXBlICE9PSBzeW50YXhfMS5TeW50YXguSWRlbnRpZmllcikgfHwgdGhpcy5tYXRjaCgnPScpKSB7XG5cdCAgICAgICAgICAgIHRoaXMuZXhwZWN0KCc9Jyk7XG5cdCAgICAgICAgICAgIGluaXQgPSB0aGlzLmlzb2xhdGVDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuVmFyaWFibGVEZWNsYXJhdG9yKGlkLCBpbml0KSk7XG5cdCAgICB9O1xuXHQgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZUJpbmRpbmdMaXN0ID0gZnVuY3Rpb24gKGtpbmQsIG9wdGlvbnMpIHtcblx0ICAgICAgICB2YXIgbGlzdCA9IFt0aGlzLnBhcnNlTGV4aWNhbEJpbmRpbmcoa2luZCwgb3B0aW9ucyldO1xuXHQgICAgICAgIHdoaWxlICh0aGlzLm1hdGNoKCcsJykpIHtcblx0ICAgICAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTtcblx0ICAgICAgICAgICAgbGlzdC5wdXNoKHRoaXMucGFyc2VMZXhpY2FsQmluZGluZyhraW5kLCBvcHRpb25zKSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiBsaXN0O1xuXHQgICAgfTtcblx0ICAgIFBhcnNlci5wcm90b3R5cGUuaXNMZXhpY2FsRGVjbGFyYXRpb24gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIHN0YXRlID0gdGhpcy5zY2FubmVyLnNhdmVTdGF0ZSgpO1xuXHQgICAgICAgIHRoaXMuc2Nhbm5lci5zY2FuQ29tbWVudHMoKTtcblx0ICAgICAgICB2YXIgbmV4dCA9IHRoaXMuc2Nhbm5lci5sZXgoKTtcblx0ICAgICAgICB0aGlzLnNjYW5uZXIucmVzdG9yZVN0YXRlKHN0YXRlKTtcblx0ICAgICAgICByZXR1cm4gKG5leHQudHlwZSA9PT0gMyAvKiBJZGVudGlmaWVyICovKSB8fFxuXHQgICAgICAgICAgICAobmV4dC50eXBlID09PSA3IC8qIFB1bmN0dWF0b3IgKi8gJiYgbmV4dC52YWx1ZSA9PT0gJ1snKSB8fFxuXHQgICAgICAgICAgICAobmV4dC50eXBlID09PSA3IC8qIFB1bmN0dWF0b3IgKi8gJiYgbmV4dC52YWx1ZSA9PT0gJ3snKSB8fFxuXHQgICAgICAgICAgICAobmV4dC50eXBlID09PSA0IC8qIEtleXdvcmQgKi8gJiYgbmV4dC52YWx1ZSA9PT0gJ2xldCcpIHx8XG5cdCAgICAgICAgICAgIChuZXh0LnR5cGUgPT09IDQgLyogS2V5d29yZCAqLyAmJiBuZXh0LnZhbHVlID09PSAneWllbGQnKTtcblx0ICAgIH07XG5cdCAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlTGV4aWNhbERlY2xhcmF0aW9uID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcblx0ICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpO1xuXHQgICAgICAgIHZhciBraW5kID0gdGhpcy5uZXh0VG9rZW4oKS52YWx1ZTtcblx0ICAgICAgICBhc3NlcnRfMS5hc3NlcnQoa2luZCA9PT0gJ2xldCcgfHwga2luZCA9PT0gJ2NvbnN0JywgJ0xleGljYWwgZGVjbGFyYXRpb24gbXVzdCBiZSBlaXRoZXIgbGV0IG9yIGNvbnN0Jyk7XG5cdCAgICAgICAgdmFyIGRlY2xhcmF0aW9ucyA9IHRoaXMucGFyc2VCaW5kaW5nTGlzdChraW5kLCBvcHRpb25zKTtcblx0ICAgICAgICB0aGlzLmNvbnN1bWVTZW1pY29sb24oKTtcblx0ICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5WYXJpYWJsZURlY2xhcmF0aW9uKGRlY2xhcmF0aW9ucywga2luZCkpO1xuXHQgICAgfTtcblx0ICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWRlc3RydWN0dXJpbmctYmluZGluZy1wYXR0ZXJuc1xuXHQgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZUJpbmRpbmdSZXN0RWxlbWVudCA9IGZ1bmN0aW9uIChwYXJhbXMsIGtpbmQpIHtcblx0ICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpO1xuXHQgICAgICAgIHRoaXMuZXhwZWN0KCcuLi4nKTtcblx0ICAgICAgICB2YXIgYXJnID0gdGhpcy5wYXJzZVBhdHRlcm4ocGFyYW1zLCBraW5kKTtcblx0ICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5SZXN0RWxlbWVudChhcmcpKTtcblx0ICAgIH07XG5cdCAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlQXJyYXlQYXR0ZXJuID0gZnVuY3Rpb24gKHBhcmFtcywga2luZCkge1xuXHQgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7XG5cdCAgICAgICAgdGhpcy5leHBlY3QoJ1snKTtcblx0ICAgICAgICB2YXIgZWxlbWVudHMgPSBbXTtcblx0ICAgICAgICB3aGlsZSAoIXRoaXMubWF0Y2goJ10nKSkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5tYXRjaCgnLCcpKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLm5leHRUb2tlbigpO1xuXHQgICAgICAgICAgICAgICAgZWxlbWVudHMucHVzaChudWxsKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIGlmICh0aGlzLm1hdGNoKCcuLi4nKSkge1xuXHQgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzLnB1c2godGhpcy5wYXJzZUJpbmRpbmdSZXN0RWxlbWVudChwYXJhbXMsIGtpbmQpKTtcblx0ICAgICAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzLnB1c2godGhpcy5wYXJzZVBhdHRlcm5XaXRoRGVmYXVsdChwYXJhbXMsIGtpbmQpKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIGlmICghdGhpcy5tYXRjaCgnXScpKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5leHBlY3QoJywnKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLmV4cGVjdCgnXScpO1xuXHQgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLkFycmF5UGF0dGVybihlbGVtZW50cykpO1xuXHQgICAgfTtcblx0ICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VQcm9wZXJ0eVBhdHRlcm4gPSBmdW5jdGlvbiAocGFyYW1zLCBraW5kKSB7XG5cdCAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTtcblx0ICAgICAgICB2YXIgY29tcHV0ZWQgPSBmYWxzZTtcblx0ICAgICAgICB2YXIgc2hvcnRoYW5kID0gZmFsc2U7XG5cdCAgICAgICAgdmFyIG1ldGhvZCA9IGZhbHNlO1xuXHQgICAgICAgIHZhciBrZXk7XG5cdCAgICAgICAgdmFyIHZhbHVlO1xuXHQgICAgICAgIGlmICh0aGlzLmxvb2thaGVhZC50eXBlID09PSAzIC8qIElkZW50aWZpZXIgKi8pIHtcblx0ICAgICAgICAgICAgdmFyIGtleVRva2VuID0gdGhpcy5sb29rYWhlYWQ7XG5cdCAgICAgICAgICAgIGtleSA9IHRoaXMucGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoKTtcblx0ICAgICAgICAgICAgdmFyIGluaXQgPSB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLklkZW50aWZpZXIoa2V5VG9rZW4udmFsdWUpKTtcblx0ICAgICAgICAgICAgaWYgKHRoaXMubWF0Y2goJz0nKSkge1xuXHQgICAgICAgICAgICAgICAgcGFyYW1zLnB1c2goa2V5VG9rZW4pO1xuXHQgICAgICAgICAgICAgICAgc2hvcnRoYW5kID0gdHJ1ZTtcblx0ICAgICAgICAgICAgICAgIHRoaXMubmV4dFRva2VuKCk7XG5cdCAgICAgICAgICAgICAgICB2YXIgZXhwciA9IHRoaXMucGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpO1xuXHQgICAgICAgICAgICAgICAgdmFsdWUgPSB0aGlzLmZpbmFsaXplKHRoaXMuc3RhcnROb2RlKGtleVRva2VuKSwgbmV3IE5vZGUuQXNzaWdubWVudFBhdHRlcm4oaW5pdCwgZXhwcikpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGVsc2UgaWYgKCF0aGlzLm1hdGNoKCc6JykpIHtcblx0ICAgICAgICAgICAgICAgIHBhcmFtcy5wdXNoKGtleVRva2VuKTtcblx0ICAgICAgICAgICAgICAgIHNob3J0aGFuZCA9IHRydWU7XG5cdCAgICAgICAgICAgICAgICB2YWx1ZSA9IGluaXQ7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmV4cGVjdCgnOicpO1xuXHQgICAgICAgICAgICAgICAgdmFsdWUgPSB0aGlzLnBhcnNlUGF0dGVybldpdGhEZWZhdWx0KHBhcmFtcywga2luZCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgZWxzZSB7XG5cdCAgICAgICAgICAgIGNvbXB1dGVkID0gdGhpcy5tYXRjaCgnWycpO1xuXHQgICAgICAgICAgICBrZXkgPSB0aGlzLnBhcnNlT2JqZWN0UHJvcGVydHlLZXkoKTtcblx0ICAgICAgICAgICAgdGhpcy5leHBlY3QoJzonKTtcblx0ICAgICAgICAgICAgdmFsdWUgPSB0aGlzLnBhcnNlUGF0dGVybldpdGhEZWZhdWx0KHBhcmFtcywga2luZCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLlByb3BlcnR5KCdpbml0Jywga2V5LCBjb21wdXRlZCwgdmFsdWUsIG1ldGhvZCwgc2hvcnRoYW5kKSk7XG5cdCAgICB9O1xuXHQgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZU9iamVjdFBhdHRlcm4gPSBmdW5jdGlvbiAocGFyYW1zLCBraW5kKSB7XG5cdCAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTtcblx0ICAgICAgICB2YXIgcHJvcGVydGllcyA9IFtdO1xuXHQgICAgICAgIHRoaXMuZXhwZWN0KCd7Jyk7XG5cdCAgICAgICAgd2hpbGUgKCF0aGlzLm1hdGNoKCd9JykpIHtcblx0ICAgICAgICAgICAgcHJvcGVydGllcy5wdXNoKHRoaXMucGFyc2VQcm9wZXJ0eVBhdHRlcm4ocGFyYW1zLCBraW5kKSk7XG5cdCAgICAgICAgICAgIGlmICghdGhpcy5tYXRjaCgnfScpKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmV4cGVjdCgnLCcpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuZXhwZWN0KCd9Jyk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuT2JqZWN0UGF0dGVybihwcm9wZXJ0aWVzKSk7XG5cdCAgICB9O1xuXHQgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZVBhdHRlcm4gPSBmdW5jdGlvbiAocGFyYW1zLCBraW5kKSB7XG5cdCAgICAgICAgdmFyIHBhdHRlcm47XG5cdCAgICAgICAgaWYgKHRoaXMubWF0Y2goJ1snKSkge1xuXHQgICAgICAgICAgICBwYXR0ZXJuID0gdGhpcy5wYXJzZUFycmF5UGF0dGVybihwYXJhbXMsIGtpbmQpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBlbHNlIGlmICh0aGlzLm1hdGNoKCd7JykpIHtcblx0ICAgICAgICAgICAgcGF0dGVybiA9IHRoaXMucGFyc2VPYmplY3RQYXR0ZXJuKHBhcmFtcywga2luZCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGVsc2Uge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5tYXRjaEtleXdvcmQoJ2xldCcpICYmIChraW5kID09PSAnY29uc3QnIHx8IGtpbmQgPT09ICdsZXQnKSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy50b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbih0aGlzLmxvb2thaGVhZCwgbWVzc2FnZXNfMS5NZXNzYWdlcy5MZXRJbkxleGljYWxCaW5kaW5nKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBwYXJhbXMucHVzaCh0aGlzLmxvb2thaGVhZCk7XG5cdCAgICAgICAgICAgIHBhdHRlcm4gPSB0aGlzLnBhcnNlVmFyaWFibGVJZGVudGlmaWVyKGtpbmQpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gcGF0dGVybjtcblx0ICAgIH07XG5cdCAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlUGF0dGVybldpdGhEZWZhdWx0ID0gZnVuY3Rpb24gKHBhcmFtcywga2luZCkge1xuXHQgICAgICAgIHZhciBzdGFydFRva2VuID0gdGhpcy5sb29rYWhlYWQ7XG5cdCAgICAgICAgdmFyIHBhdHRlcm4gPSB0aGlzLnBhcnNlUGF0dGVybihwYXJhbXMsIGtpbmQpO1xuXHQgICAgICAgIGlmICh0aGlzLm1hdGNoKCc9JykpIHtcblx0ICAgICAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTtcblx0ICAgICAgICAgICAgdmFyIHByZXZpb3VzQWxsb3dZaWVsZCA9IHRoaXMuY29udGV4dC5hbGxvd1lpZWxkO1xuXHQgICAgICAgICAgICB0aGlzLmNvbnRleHQuYWxsb3dZaWVsZCA9IHRydWU7XG5cdCAgICAgICAgICAgIHZhciByaWdodCA9IHRoaXMuaXNvbGF0ZUNvdmVyR3JhbW1hcih0aGlzLnBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24pO1xuXHQgICAgICAgICAgICB0aGlzLmNvbnRleHQuYWxsb3dZaWVsZCA9IHByZXZpb3VzQWxsb3dZaWVsZDtcblx0ICAgICAgICAgICAgcGF0dGVybiA9IHRoaXMuZmluYWxpemUodGhpcy5zdGFydE5vZGUoc3RhcnRUb2tlbiksIG5ldyBOb2RlLkFzc2lnbm1lbnRQYXR0ZXJuKHBhdHRlcm4sIHJpZ2h0KSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiBwYXR0ZXJuO1xuXHQgICAgfTtcblx0ICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXZhcmlhYmxlLXN0YXRlbWVudFxuXHQgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZVZhcmlhYmxlSWRlbnRpZmllciA9IGZ1bmN0aW9uIChraW5kKSB7XG5cdCAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTtcblx0ICAgICAgICB2YXIgdG9rZW4gPSB0aGlzLm5leHRUb2tlbigpO1xuXHQgICAgICAgIGlmICh0b2tlbi50eXBlID09PSA0IC8qIEtleXdvcmQgKi8gJiYgdG9rZW4udmFsdWUgPT09ICd5aWVsZCcpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuY29udGV4dC5zdHJpY3QpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMudG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4odG9rZW4sIG1lc3NhZ2VzXzEuTWVzc2FnZXMuU3RyaWN0UmVzZXJ2ZWRXb3JkKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBlbHNlIGlmICghdGhpcy5jb250ZXh0LmFsbG93WWllbGQpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4odG9rZW4pO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGVsc2UgaWYgKHRva2VuLnR5cGUgIT09IDMgLyogSWRlbnRpZmllciAqLykge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5jb250ZXh0LnN0cmljdCAmJiB0b2tlbi50eXBlID09PSA0IC8qIEtleXdvcmQgKi8gJiYgdGhpcy5zY2FubmVyLmlzU3RyaWN0TW9kZVJlc2VydmVkV29yZCh0b2tlbi52YWx1ZSkpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMudG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4odG9rZW4sIG1lc3NhZ2VzXzEuTWVzc2FnZXMuU3RyaWN0UmVzZXJ2ZWRXb3JkKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbnRleHQuc3RyaWN0IHx8IHRva2VuLnZhbHVlICE9PSAnbGV0JyB8fCBraW5kICE9PSAndmFyJykge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4odG9rZW4pO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGVsc2UgaWYgKCh0aGlzLmNvbnRleHQuaXNNb2R1bGUgfHwgdGhpcy5jb250ZXh0LmF3YWl0KSAmJiB0b2tlbi50eXBlID09PSAzIC8qIElkZW50aWZpZXIgKi8gJiYgdG9rZW4udmFsdWUgPT09ICdhd2FpdCcpIHtcblx0ICAgICAgICAgICAgdGhpcy50b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbih0b2tlbik7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLklkZW50aWZpZXIodG9rZW4udmFsdWUpKTtcblx0ICAgIH07XG5cdCAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbiA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG5cdCAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTtcblx0ICAgICAgICB2YXIgcGFyYW1zID0gW107XG5cdCAgICAgICAgdmFyIGlkID0gdGhpcy5wYXJzZVBhdHRlcm4ocGFyYW1zLCAndmFyJyk7XG5cdCAgICAgICAgaWYgKHRoaXMuY29udGV4dC5zdHJpY3QgJiYgaWQudHlwZSA9PT0gc3ludGF4XzEuU3ludGF4LklkZW50aWZpZXIpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuc2Nhbm5lci5pc1Jlc3RyaWN0ZWRXb3JkKGlkLm5hbWUpKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLnRvbGVyYXRlRXJyb3IobWVzc2FnZXNfMS5NZXNzYWdlcy5TdHJpY3RWYXJOYW1lKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICB2YXIgaW5pdCA9IG51bGw7XG5cdCAgICAgICAgaWYgKHRoaXMubWF0Y2goJz0nKSkge1xuXHQgICAgICAgICAgICB0aGlzLm5leHRUb2tlbigpO1xuXHQgICAgICAgICAgICBpbml0ID0gdGhpcy5pc29sYXRlQ292ZXJHcmFtbWFyKHRoaXMucGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbik7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGVsc2UgaWYgKGlkLnR5cGUgIT09IHN5bnRheF8xLlN5bnRheC5JZGVudGlmaWVyICYmICFvcHRpb25zLmluRm9yKSB7XG5cdCAgICAgICAgICAgIHRoaXMuZXhwZWN0KCc9Jyk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLlZhcmlhYmxlRGVjbGFyYXRvcihpZCwgaW5pdCkpO1xuXHQgICAgfTtcblx0ICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uTGlzdCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG5cdCAgICAgICAgdmFyIG9wdCA9IHsgaW5Gb3I6IG9wdGlvbnMuaW5Gb3IgfTtcblx0ICAgICAgICB2YXIgbGlzdCA9IFtdO1xuXHQgICAgICAgIGxpc3QucHVzaCh0aGlzLnBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbihvcHQpKTtcblx0ICAgICAgICB3aGlsZSAodGhpcy5tYXRjaCgnLCcpKSB7XG5cdCAgICAgICAgICAgIHRoaXMubmV4dFRva2VuKCk7XG5cdCAgICAgICAgICAgIGxpc3QucHVzaCh0aGlzLnBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbihvcHQpKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIGxpc3Q7XG5cdCAgICB9O1xuXHQgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZVZhcmlhYmxlU3RhdGVtZW50ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7XG5cdCAgICAgICAgdGhpcy5leHBlY3RLZXl3b3JkKCd2YXInKTtcblx0ICAgICAgICB2YXIgZGVjbGFyYXRpb25zID0gdGhpcy5wYXJzZVZhcmlhYmxlRGVjbGFyYXRpb25MaXN0KHsgaW5Gb3I6IGZhbHNlIH0pO1xuXHQgICAgICAgIHRoaXMuY29uc3VtZVNlbWljb2xvbigpO1xuXHQgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLlZhcmlhYmxlRGVjbGFyYXRpb24oZGVjbGFyYXRpb25zLCAndmFyJykpO1xuXHQgICAgfTtcblx0ICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWVtcHR5LXN0YXRlbWVudFxuXHQgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZUVtcHR5U3RhdGVtZW50ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7XG5cdCAgICAgICAgdGhpcy5leHBlY3QoJzsnKTtcblx0ICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5FbXB0eVN0YXRlbWVudCgpKTtcblx0ICAgIH07XG5cdCAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1leHByZXNzaW9uLXN0YXRlbWVudFxuXHQgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZUV4cHJlc3Npb25TdGF0ZW1lbnQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTtcblx0ICAgICAgICB2YXIgZXhwciA9IHRoaXMucGFyc2VFeHByZXNzaW9uKCk7XG5cdCAgICAgICAgdGhpcy5jb25zdW1lU2VtaWNvbG9uKCk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuRXhwcmVzc2lvblN0YXRlbWVudChleHByKSk7XG5cdCAgICB9O1xuXHQgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtaWYtc3RhdGVtZW50XG5cdCAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlSWZDbGF1c2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuY29udGV4dC5zdHJpY3QgJiYgdGhpcy5tYXRjaEtleXdvcmQoJ2Z1bmN0aW9uJykpIHtcblx0ICAgICAgICAgICAgdGhpcy50b2xlcmF0ZUVycm9yKG1lc3NhZ2VzXzEuTWVzc2FnZXMuU3RyaWN0RnVuY3Rpb24pO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcy5wYXJzZVN0YXRlbWVudCgpO1xuXHQgICAgfTtcblx0ICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VJZlN0YXRlbWVudCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpO1xuXHQgICAgICAgIHZhciBjb25zZXF1ZW50O1xuXHQgICAgICAgIHZhciBhbHRlcm5hdGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZXhwZWN0S2V5d29yZCgnaWYnKTtcblx0ICAgICAgICB0aGlzLmV4cGVjdCgnKCcpO1xuXHQgICAgICAgIHZhciB0ZXN0ID0gdGhpcy5wYXJzZUV4cHJlc3Npb24oKTtcblx0ICAgICAgICBpZiAoIXRoaXMubWF0Y2goJyknKSAmJiB0aGlzLmNvbmZpZy50b2xlcmFudCkge1xuXHQgICAgICAgICAgICB0aGlzLnRvbGVyYXRlVW5leHBlY3RlZFRva2VuKHRoaXMubmV4dFRva2VuKCkpO1xuXHQgICAgICAgICAgICBjb25zZXF1ZW50ID0gdGhpcy5maW5hbGl6ZSh0aGlzLmNyZWF0ZU5vZGUoKSwgbmV3IE5vZGUuRW1wdHlTdGF0ZW1lbnQoKSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGVsc2Uge1xuXHQgICAgICAgICAgICB0aGlzLmV4cGVjdCgnKScpO1xuXHQgICAgICAgICAgICBjb25zZXF1ZW50ID0gdGhpcy5wYXJzZUlmQ2xhdXNlKCk7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLm1hdGNoS2V5d29yZCgnZWxzZScpKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLm5leHRUb2tlbigpO1xuXHQgICAgICAgICAgICAgICAgYWx0ZXJuYXRlID0gdGhpcy5wYXJzZUlmQ2xhdXNlKCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuSWZTdGF0ZW1lbnQodGVzdCwgY29uc2VxdWVudCwgYWx0ZXJuYXRlKSk7XG5cdCAgICB9O1xuXHQgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtZG8td2hpbGUtc3RhdGVtZW50XG5cdCAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlRG9XaGlsZVN0YXRlbWVudCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpO1xuXHQgICAgICAgIHRoaXMuZXhwZWN0S2V5d29yZCgnZG8nKTtcblx0ICAgICAgICB2YXIgcHJldmlvdXNJbkl0ZXJhdGlvbiA9IHRoaXMuY29udGV4dC5pbkl0ZXJhdGlvbjtcblx0ICAgICAgICB0aGlzLmNvbnRleHQuaW5JdGVyYXRpb24gPSB0cnVlO1xuXHQgICAgICAgIHZhciBib2R5ID0gdGhpcy5wYXJzZVN0YXRlbWVudCgpO1xuXHQgICAgICAgIHRoaXMuY29udGV4dC5pbkl0ZXJhdGlvbiA9IHByZXZpb3VzSW5JdGVyYXRpb247XG5cdCAgICAgICAgdGhpcy5leHBlY3RLZXl3b3JkKCd3aGlsZScpO1xuXHQgICAgICAgIHRoaXMuZXhwZWN0KCcoJyk7XG5cdCAgICAgICAgdmFyIHRlc3QgPSB0aGlzLnBhcnNlRXhwcmVzc2lvbigpO1xuXHQgICAgICAgIGlmICghdGhpcy5tYXRjaCgnKScpICYmIHRoaXMuY29uZmlnLnRvbGVyYW50KSB7XG5cdCAgICAgICAgICAgIHRoaXMudG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4odGhpcy5uZXh0VG9rZW4oKSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGVsc2Uge1xuXHQgICAgICAgICAgICB0aGlzLmV4cGVjdCgnKScpO1xuXHQgICAgICAgICAgICBpZiAodGhpcy5tYXRjaCgnOycpKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLm5leHRUb2tlbigpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLkRvV2hpbGVTdGF0ZW1lbnQoYm9keSwgdGVzdCkpO1xuXHQgICAgfTtcblx0ICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXdoaWxlLXN0YXRlbWVudFxuXHQgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZVdoaWxlU3RhdGVtZW50ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7XG5cdCAgICAgICAgdmFyIGJvZHk7XG5cdCAgICAgICAgdGhpcy5leHBlY3RLZXl3b3JkKCd3aGlsZScpO1xuXHQgICAgICAgIHRoaXMuZXhwZWN0KCcoJyk7XG5cdCAgICAgICAgdmFyIHRlc3QgPSB0aGlzLnBhcnNlRXhwcmVzc2lvbigpO1xuXHQgICAgICAgIGlmICghdGhpcy5tYXRjaCgnKScpICYmIHRoaXMuY29uZmlnLnRvbGVyYW50KSB7XG5cdCAgICAgICAgICAgIHRoaXMudG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4odGhpcy5uZXh0VG9rZW4oKSk7XG5cdCAgICAgICAgICAgIGJvZHkgPSB0aGlzLmZpbmFsaXplKHRoaXMuY3JlYXRlTm9kZSgpLCBuZXcgTm9kZS5FbXB0eVN0YXRlbWVudCgpKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgZWxzZSB7XG5cdCAgICAgICAgICAgIHRoaXMuZXhwZWN0KCcpJyk7XG5cdCAgICAgICAgICAgIHZhciBwcmV2aW91c0luSXRlcmF0aW9uID0gdGhpcy5jb250ZXh0LmluSXRlcmF0aW9uO1xuXHQgICAgICAgICAgICB0aGlzLmNvbnRleHQuaW5JdGVyYXRpb24gPSB0cnVlO1xuXHQgICAgICAgICAgICBib2R5ID0gdGhpcy5wYXJzZVN0YXRlbWVudCgpO1xuXHQgICAgICAgICAgICB0aGlzLmNvbnRleHQuaW5JdGVyYXRpb24gPSBwcmV2aW91c0luSXRlcmF0aW9uO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5XaGlsZVN0YXRlbWVudCh0ZXN0LCBib2R5KSk7XG5cdCAgICB9O1xuXHQgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtZm9yLXN0YXRlbWVudFxuXHQgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtZm9yLWluLWFuZC1mb3Itb2Ytc3RhdGVtZW50c1xuXHQgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZUZvclN0YXRlbWVudCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgaW5pdCA9IG51bGw7XG5cdCAgICAgICAgdmFyIHRlc3QgPSBudWxsO1xuXHQgICAgICAgIHZhciB1cGRhdGUgPSBudWxsO1xuXHQgICAgICAgIHZhciBmb3JJbiA9IHRydWU7XG5cdCAgICAgICAgdmFyIGxlZnQsIHJpZ2h0O1xuXHQgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7XG5cdCAgICAgICAgdGhpcy5leHBlY3RLZXl3b3JkKCdmb3InKTtcblx0ICAgICAgICB0aGlzLmV4cGVjdCgnKCcpO1xuXHQgICAgICAgIGlmICh0aGlzLm1hdGNoKCc7JykpIHtcblx0ICAgICAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgZWxzZSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLm1hdGNoS2V5d29yZCgndmFyJykpIHtcblx0ICAgICAgICAgICAgICAgIGluaXQgPSB0aGlzLmNyZWF0ZU5vZGUoKTtcblx0ICAgICAgICAgICAgICAgIHRoaXMubmV4dFRva2VuKCk7XG5cdCAgICAgICAgICAgICAgICB2YXIgcHJldmlvdXNBbGxvd0luID0gdGhpcy5jb250ZXh0LmFsbG93SW47XG5cdCAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuYWxsb3dJbiA9IGZhbHNlO1xuXHQgICAgICAgICAgICAgICAgdmFyIGRlY2xhcmF0aW9ucyA9IHRoaXMucGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uTGlzdCh7IGluRm9yOiB0cnVlIH0pO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmFsbG93SW4gPSBwcmV2aW91c0FsbG93SW47XG5cdCAgICAgICAgICAgICAgICBpZiAoZGVjbGFyYXRpb25zLmxlbmd0aCA9PT0gMSAmJiB0aGlzLm1hdGNoS2V5d29yZCgnaW4nKSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBkZWNsID0gZGVjbGFyYXRpb25zWzBdO1xuXHQgICAgICAgICAgICAgICAgICAgIGlmIChkZWNsLmluaXQgJiYgKGRlY2wuaWQudHlwZSA9PT0gc3ludGF4XzEuU3ludGF4LkFycmF5UGF0dGVybiB8fCBkZWNsLmlkLnR5cGUgPT09IHN5bnRheF8xLlN5bnRheC5PYmplY3RQYXR0ZXJuIHx8IHRoaXMuY29udGV4dC5zdHJpY3QpKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9sZXJhdGVFcnJvcihtZXNzYWdlc18xLk1lc3NhZ2VzLkZvckluT2ZMb29wSW5pdGlhbGl6ZXIsICdmb3ItaW4nKTtcblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAgICAgaW5pdCA9IHRoaXMuZmluYWxpemUoaW5pdCwgbmV3IE5vZGUuVmFyaWFibGVEZWNsYXJhdGlvbihkZWNsYXJhdGlvbnMsICd2YXInKSk7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTtcblx0ICAgICAgICAgICAgICAgICAgICBsZWZ0ID0gaW5pdDtcblx0ICAgICAgICAgICAgICAgICAgICByaWdodCA9IHRoaXMucGFyc2VFeHByZXNzaW9uKCk7XG5cdCAgICAgICAgICAgICAgICAgICAgaW5pdCA9IG51bGw7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICBlbHNlIGlmIChkZWNsYXJhdGlvbnMubGVuZ3RoID09PSAxICYmIGRlY2xhcmF0aW9uc1swXS5pbml0ID09PSBudWxsICYmIHRoaXMubWF0Y2hDb250ZXh0dWFsS2V5d29yZCgnb2YnKSkge1xuXHQgICAgICAgICAgICAgICAgICAgIGluaXQgPSB0aGlzLmZpbmFsaXplKGluaXQsIG5ldyBOb2RlLlZhcmlhYmxlRGVjbGFyYXRpb24oZGVjbGFyYXRpb25zLCAndmFyJykpO1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dFRva2VuKCk7XG5cdCAgICAgICAgICAgICAgICAgICAgbGVmdCA9IGluaXQ7XG5cdCAgICAgICAgICAgICAgICAgICAgcmlnaHQgPSB0aGlzLnBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oKTtcblx0ICAgICAgICAgICAgICAgICAgICBpbml0ID0gbnVsbDtcblx0ICAgICAgICAgICAgICAgICAgICBmb3JJbiA9IGZhbHNlO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgaW5pdCA9IHRoaXMuZmluYWxpemUoaW5pdCwgbmV3IE5vZGUuVmFyaWFibGVEZWNsYXJhdGlvbihkZWNsYXJhdGlvbnMsICd2YXInKSk7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5leHBlY3QoJzsnKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBlbHNlIGlmICh0aGlzLm1hdGNoS2V5d29yZCgnY29uc3QnKSB8fCB0aGlzLm1hdGNoS2V5d29yZCgnbGV0JykpIHtcblx0ICAgICAgICAgICAgICAgIGluaXQgPSB0aGlzLmNyZWF0ZU5vZGUoKTtcblx0ICAgICAgICAgICAgICAgIHZhciBraW5kID0gdGhpcy5uZXh0VG9rZW4oKS52YWx1ZTtcblx0ICAgICAgICAgICAgICAgIGlmICghdGhpcy5jb250ZXh0LnN0cmljdCAmJiB0aGlzLmxvb2thaGVhZC52YWx1ZSA9PT0gJ2luJykge1xuXHQgICAgICAgICAgICAgICAgICAgIGluaXQgPSB0aGlzLmZpbmFsaXplKGluaXQsIG5ldyBOb2RlLklkZW50aWZpZXIoa2luZCkpO1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dFRva2VuKCk7XG5cdCAgICAgICAgICAgICAgICAgICAgbGVmdCA9IGluaXQ7XG5cdCAgICAgICAgICAgICAgICAgICAgcmlnaHQgPSB0aGlzLnBhcnNlRXhwcmVzc2lvbigpO1xuXHQgICAgICAgICAgICAgICAgICAgIGluaXQgPSBudWxsO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIHByZXZpb3VzQWxsb3dJbiA9IHRoaXMuY29udGV4dC5hbGxvd0luO1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5hbGxvd0luID0gZmFsc2U7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIGRlY2xhcmF0aW9ucyA9IHRoaXMucGFyc2VCaW5kaW5nTGlzdChraW5kLCB7IGluRm9yOiB0cnVlIH0pO1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5hbGxvd0luID0gcHJldmlvdXNBbGxvd0luO1xuXHQgICAgICAgICAgICAgICAgICAgIGlmIChkZWNsYXJhdGlvbnMubGVuZ3RoID09PSAxICYmIGRlY2xhcmF0aW9uc1swXS5pbml0ID09PSBudWxsICYmIHRoaXMubWF0Y2hLZXl3b3JkKCdpbicpKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIGluaXQgPSB0aGlzLmZpbmFsaXplKGluaXQsIG5ldyBOb2RlLlZhcmlhYmxlRGVjbGFyYXRpb24oZGVjbGFyYXRpb25zLCBraW5kKSk7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dFRva2VuKCk7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQgPSBpbml0O1xuXHQgICAgICAgICAgICAgICAgICAgICAgICByaWdodCA9IHRoaXMucGFyc2VFeHByZXNzaW9uKCk7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIGluaXQgPSBudWxsO1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChkZWNsYXJhdGlvbnMubGVuZ3RoID09PSAxICYmIGRlY2xhcmF0aW9uc1swXS5pbml0ID09PSBudWxsICYmIHRoaXMubWF0Y2hDb250ZXh0dWFsS2V5d29yZCgnb2YnKSkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBpbml0ID0gdGhpcy5maW5hbGl6ZShpbml0LCBuZXcgTm9kZS5WYXJpYWJsZURlY2xhcmF0aW9uKGRlY2xhcmF0aW9ucywga2luZCkpO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHRUb2tlbigpO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0ID0gaW5pdDtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgcmlnaHQgPSB0aGlzLnBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oKTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgaW5pdCA9IG51bGw7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIGZvckluID0gZmFsc2U7XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnN1bWVTZW1pY29sb24oKTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgaW5pdCA9IHRoaXMuZmluYWxpemUoaW5pdCwgbmV3IE5vZGUuVmFyaWFibGVEZWNsYXJhdGlvbihkZWNsYXJhdGlvbnMsIGtpbmQpKTtcblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgaW5pdFN0YXJ0VG9rZW4gPSB0aGlzLmxvb2thaGVhZDtcblx0ICAgICAgICAgICAgICAgIHZhciBwcmV2aW91c0FsbG93SW4gPSB0aGlzLmNvbnRleHQuYWxsb3dJbjtcblx0ICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5hbGxvd0luID0gZmFsc2U7XG5cdCAgICAgICAgICAgICAgICBpbml0ID0gdGhpcy5pbmhlcml0Q292ZXJHcmFtbWFyKHRoaXMucGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbik7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuYWxsb3dJbiA9IHByZXZpb3VzQWxsb3dJbjtcblx0ICAgICAgICAgICAgICAgIGlmICh0aGlzLm1hdGNoS2V5d29yZCgnaW4nKSkge1xuXHQgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5jb250ZXh0LmlzQXNzaWdubWVudFRhcmdldCB8fCBpbml0LnR5cGUgPT09IHN5bnRheF8xLlN5bnRheC5Bc3NpZ25tZW50RXhwcmVzc2lvbikge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvbGVyYXRlRXJyb3IobWVzc2FnZXNfMS5NZXNzYWdlcy5JbnZhbGlkTEhTSW5Gb3JJbik7XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dFRva2VuKCk7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWludGVycHJldEV4cHJlc3Npb25Bc1BhdHRlcm4oaW5pdCk7XG5cdCAgICAgICAgICAgICAgICAgICAgbGVmdCA9IGluaXQ7XG5cdCAgICAgICAgICAgICAgICAgICAgcmlnaHQgPSB0aGlzLnBhcnNlRXhwcmVzc2lvbigpO1xuXHQgICAgICAgICAgICAgICAgICAgIGluaXQgPSBudWxsO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5tYXRjaENvbnRleHR1YWxLZXl3b3JkKCdvZicpKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmNvbnRleHQuaXNBc3NpZ25tZW50VGFyZ2V0IHx8IGluaXQudHlwZSA9PT0gc3ludGF4XzEuU3ludGF4LkFzc2lnbm1lbnRFeHByZXNzaW9uKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9sZXJhdGVFcnJvcihtZXNzYWdlc18xLk1lc3NhZ2VzLkludmFsaWRMSFNJbkZvckxvb3ApO1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHRUb2tlbigpO1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMucmVpbnRlcnByZXRFeHByZXNzaW9uQXNQYXR0ZXJuKGluaXQpO1xuXHQgICAgICAgICAgICAgICAgICAgIGxlZnQgPSBpbml0O1xuXHQgICAgICAgICAgICAgICAgICAgIHJpZ2h0ID0gdGhpcy5wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7XG5cdCAgICAgICAgICAgICAgICAgICAgaW5pdCA9IG51bGw7XG5cdCAgICAgICAgICAgICAgICAgICAgZm9ySW4gPSBmYWxzZTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm1hdGNoKCcsJykpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGluaXRTZXEgPSBbaW5pdF07XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICh0aGlzLm1hdGNoKCcsJykpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dFRva2VuKCk7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0U2VxLnB1c2godGhpcy5pc29sYXRlQ292ZXJHcmFtbWFyKHRoaXMucGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbikpO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIGluaXQgPSB0aGlzLmZpbmFsaXplKHRoaXMuc3RhcnROb2RlKGluaXRTdGFydFRva2VuKSwgbmV3IE5vZGUuU2VxdWVuY2VFeHByZXNzaW9uKGluaXRTZXEpKTtcblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5leHBlY3QoJzsnKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAodHlwZW9mIGxlZnQgPT09ICd1bmRlZmluZWQnKSB7XG5cdCAgICAgICAgICAgIGlmICghdGhpcy5tYXRjaCgnOycpKSB7XG5cdCAgICAgICAgICAgICAgICB0ZXN0ID0gdGhpcy5wYXJzZUV4cHJlc3Npb24oKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLmV4cGVjdCgnOycpO1xuXHQgICAgICAgICAgICBpZiAoIXRoaXMubWF0Y2goJyknKSkge1xuXHQgICAgICAgICAgICAgICAgdXBkYXRlID0gdGhpcy5wYXJzZUV4cHJlc3Npb24oKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICB2YXIgYm9keTtcblx0ICAgICAgICBpZiAoIXRoaXMubWF0Y2goJyknKSAmJiB0aGlzLmNvbmZpZy50b2xlcmFudCkge1xuXHQgICAgICAgICAgICB0aGlzLnRvbGVyYXRlVW5leHBlY3RlZFRva2VuKHRoaXMubmV4dFRva2VuKCkpO1xuXHQgICAgICAgICAgICBib2R5ID0gdGhpcy5maW5hbGl6ZSh0aGlzLmNyZWF0ZU5vZGUoKSwgbmV3IE5vZGUuRW1wdHlTdGF0ZW1lbnQoKSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGVsc2Uge1xuXHQgICAgICAgICAgICB0aGlzLmV4cGVjdCgnKScpO1xuXHQgICAgICAgICAgICB2YXIgcHJldmlvdXNJbkl0ZXJhdGlvbiA9IHRoaXMuY29udGV4dC5pbkl0ZXJhdGlvbjtcblx0ICAgICAgICAgICAgdGhpcy5jb250ZXh0LmluSXRlcmF0aW9uID0gdHJ1ZTtcblx0ICAgICAgICAgICAgYm9keSA9IHRoaXMuaXNvbGF0ZUNvdmVyR3JhbW1hcih0aGlzLnBhcnNlU3RhdGVtZW50KTtcblx0ICAgICAgICAgICAgdGhpcy5jb250ZXh0LmluSXRlcmF0aW9uID0gcHJldmlvdXNJbkl0ZXJhdGlvbjtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuICh0eXBlb2YgbGVmdCA9PT0gJ3VuZGVmaW5lZCcpID9cblx0ICAgICAgICAgICAgdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5Gb3JTdGF0ZW1lbnQoaW5pdCwgdGVzdCwgdXBkYXRlLCBib2R5KSkgOlxuXHQgICAgICAgICAgICBmb3JJbiA/IHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuRm9ySW5TdGF0ZW1lbnQobGVmdCwgcmlnaHQsIGJvZHkpKSA6XG5cdCAgICAgICAgICAgICAgICB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLkZvck9mU3RhdGVtZW50KGxlZnQsIHJpZ2h0LCBib2R5KSk7XG5cdCAgICB9O1xuXHQgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtY29udGludWUtc3RhdGVtZW50XG5cdCAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlQ29udGludWVTdGF0ZW1lbnQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTtcblx0ICAgICAgICB0aGlzLmV4cGVjdEtleXdvcmQoJ2NvbnRpbnVlJyk7XG5cdCAgICAgICAgdmFyIGxhYmVsID0gbnVsbDtcblx0ICAgICAgICBpZiAodGhpcy5sb29rYWhlYWQudHlwZSA9PT0gMyAvKiBJZGVudGlmaWVyICovICYmICF0aGlzLmhhc0xpbmVUZXJtaW5hdG9yKSB7XG5cdCAgICAgICAgICAgIHZhciBpZCA9IHRoaXMucGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoKTtcblx0ICAgICAgICAgICAgbGFiZWwgPSBpZDtcblx0ICAgICAgICAgICAgdmFyIGtleSA9ICckJyArIGlkLm5hbWU7XG5cdCAgICAgICAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuY29udGV4dC5sYWJlbFNldCwga2V5KSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy50aHJvd0Vycm9yKG1lc3NhZ2VzXzEuTWVzc2FnZXMuVW5rbm93bkxhYmVsLCBpZC5uYW1lKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLmNvbnN1bWVTZW1pY29sb24oKTtcblx0ICAgICAgICBpZiAobGFiZWwgPT09IG51bGwgJiYgIXRoaXMuY29udGV4dC5pbkl0ZXJhdGlvbikge1xuXHQgICAgICAgICAgICB0aGlzLnRocm93RXJyb3IobWVzc2FnZXNfMS5NZXNzYWdlcy5JbGxlZ2FsQ29udGludWUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5Db250aW51ZVN0YXRlbWVudChsYWJlbCkpO1xuXHQgICAgfTtcblx0ICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWJyZWFrLXN0YXRlbWVudFxuXHQgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZUJyZWFrU3RhdGVtZW50ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7XG5cdCAgICAgICAgdGhpcy5leHBlY3RLZXl3b3JkKCdicmVhaycpO1xuXHQgICAgICAgIHZhciBsYWJlbCA9IG51bGw7XG5cdCAgICAgICAgaWYgKHRoaXMubG9va2FoZWFkLnR5cGUgPT09IDMgLyogSWRlbnRpZmllciAqLyAmJiAhdGhpcy5oYXNMaW5lVGVybWluYXRvcikge1xuXHQgICAgICAgICAgICB2YXIgaWQgPSB0aGlzLnBhcnNlVmFyaWFibGVJZGVudGlmaWVyKCk7XG5cdCAgICAgICAgICAgIHZhciBrZXkgPSAnJCcgKyBpZC5uYW1lO1xuXHQgICAgICAgICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLmNvbnRleHQubGFiZWxTZXQsIGtleSkpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMudGhyb3dFcnJvcihtZXNzYWdlc18xLk1lc3NhZ2VzLlVua25vd25MYWJlbCwgaWQubmFtZSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgbGFiZWwgPSBpZDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5jb25zdW1lU2VtaWNvbG9uKCk7XG5cdCAgICAgICAgaWYgKGxhYmVsID09PSBudWxsICYmICF0aGlzLmNvbnRleHQuaW5JdGVyYXRpb24gJiYgIXRoaXMuY29udGV4dC5pblN3aXRjaCkge1xuXHQgICAgICAgICAgICB0aGlzLnRocm93RXJyb3IobWVzc2FnZXNfMS5NZXNzYWdlcy5JbGxlZ2FsQnJlYWspO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5CcmVha1N0YXRlbWVudChsYWJlbCkpO1xuXHQgICAgfTtcblx0ICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJldHVybi1zdGF0ZW1lbnRcblx0ICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VSZXR1cm5TdGF0ZW1lbnQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgaWYgKCF0aGlzLmNvbnRleHQuaW5GdW5jdGlvbkJvZHkpIHtcblx0ICAgICAgICAgICAgdGhpcy50b2xlcmF0ZUVycm9yKG1lc3NhZ2VzXzEuTWVzc2FnZXMuSWxsZWdhbFJldHVybik7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7XG5cdCAgICAgICAgdGhpcy5leHBlY3RLZXl3b3JkKCdyZXR1cm4nKTtcblx0ICAgICAgICB2YXIgaGFzQXJndW1lbnQgPSAoIXRoaXMubWF0Y2goJzsnKSAmJiAhdGhpcy5tYXRjaCgnfScpICYmXG5cdCAgICAgICAgICAgICF0aGlzLmhhc0xpbmVUZXJtaW5hdG9yICYmIHRoaXMubG9va2FoZWFkLnR5cGUgIT09IDIgLyogRU9GICovKSB8fFxuXHQgICAgICAgICAgICB0aGlzLmxvb2thaGVhZC50eXBlID09PSA4IC8qIFN0cmluZ0xpdGVyYWwgKi8gfHxcblx0ICAgICAgICAgICAgdGhpcy5sb29rYWhlYWQudHlwZSA9PT0gMTAgLyogVGVtcGxhdGUgKi87XG5cdCAgICAgICAgdmFyIGFyZ3VtZW50ID0gaGFzQXJndW1lbnQgPyB0aGlzLnBhcnNlRXhwcmVzc2lvbigpIDogbnVsbDtcblx0ICAgICAgICB0aGlzLmNvbnN1bWVTZW1pY29sb24oKTtcblx0ICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5SZXR1cm5TdGF0ZW1lbnQoYXJndW1lbnQpKTtcblx0ICAgIH07XG5cdCAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy13aXRoLXN0YXRlbWVudFxuXHQgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZVdpdGhTdGF0ZW1lbnQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuY29udGV4dC5zdHJpY3QpIHtcblx0ICAgICAgICAgICAgdGhpcy50b2xlcmF0ZUVycm9yKG1lc3NhZ2VzXzEuTWVzc2FnZXMuU3RyaWN0TW9kZVdpdGgpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpO1xuXHQgICAgICAgIHZhciBib2R5O1xuXHQgICAgICAgIHRoaXMuZXhwZWN0S2V5d29yZCgnd2l0aCcpO1xuXHQgICAgICAgIHRoaXMuZXhwZWN0KCcoJyk7XG5cdCAgICAgICAgdmFyIG9iamVjdCA9IHRoaXMucGFyc2VFeHByZXNzaW9uKCk7XG5cdCAgICAgICAgaWYgKCF0aGlzLm1hdGNoKCcpJykgJiYgdGhpcy5jb25maWcudG9sZXJhbnQpIHtcblx0ICAgICAgICAgICAgdGhpcy50b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbih0aGlzLm5leHRUb2tlbigpKTtcblx0ICAgICAgICAgICAgYm9keSA9IHRoaXMuZmluYWxpemUodGhpcy5jcmVhdGVOb2RlKCksIG5ldyBOb2RlLkVtcHR5U3RhdGVtZW50KCkpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBlbHNlIHtcblx0ICAgICAgICAgICAgdGhpcy5leHBlY3QoJyknKTtcblx0ICAgICAgICAgICAgYm9keSA9IHRoaXMucGFyc2VTdGF0ZW1lbnQoKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuV2l0aFN0YXRlbWVudChvYmplY3QsIGJvZHkpKTtcblx0ICAgIH07XG5cdCAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1zd2l0Y2gtc3RhdGVtZW50XG5cdCAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlU3dpdGNoQ2FzZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpO1xuXHQgICAgICAgIHZhciB0ZXN0O1xuXHQgICAgICAgIGlmICh0aGlzLm1hdGNoS2V5d29yZCgnZGVmYXVsdCcpKSB7XG5cdCAgICAgICAgICAgIHRoaXMubmV4dFRva2VuKCk7XG5cdCAgICAgICAgICAgIHRlc3QgPSBudWxsO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBlbHNlIHtcblx0ICAgICAgICAgICAgdGhpcy5leHBlY3RLZXl3b3JkKCdjYXNlJyk7XG5cdCAgICAgICAgICAgIHRlc3QgPSB0aGlzLnBhcnNlRXhwcmVzc2lvbigpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLmV4cGVjdCgnOicpO1xuXHQgICAgICAgIHZhciBjb25zZXF1ZW50ID0gW107XG5cdCAgICAgICAgd2hpbGUgKHRydWUpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMubWF0Y2goJ30nKSB8fCB0aGlzLm1hdGNoS2V5d29yZCgnZGVmYXVsdCcpIHx8IHRoaXMubWF0Y2hLZXl3b3JkKCdjYXNlJykpIHtcblx0ICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGNvbnNlcXVlbnQucHVzaCh0aGlzLnBhcnNlU3RhdGVtZW50TGlzdEl0ZW0oKSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLlN3aXRjaENhc2UodGVzdCwgY29uc2VxdWVudCkpO1xuXHQgICAgfTtcblx0ICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VTd2l0Y2hTdGF0ZW1lbnQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTtcblx0ICAgICAgICB0aGlzLmV4cGVjdEtleXdvcmQoJ3N3aXRjaCcpO1xuXHQgICAgICAgIHRoaXMuZXhwZWN0KCcoJyk7XG5cdCAgICAgICAgdmFyIGRpc2NyaW1pbmFudCA9IHRoaXMucGFyc2VFeHByZXNzaW9uKCk7XG5cdCAgICAgICAgdGhpcy5leHBlY3QoJyknKTtcblx0ICAgICAgICB2YXIgcHJldmlvdXNJblN3aXRjaCA9IHRoaXMuY29udGV4dC5pblN3aXRjaDtcblx0ICAgICAgICB0aGlzLmNvbnRleHQuaW5Td2l0Y2ggPSB0cnVlO1xuXHQgICAgICAgIHZhciBjYXNlcyA9IFtdO1xuXHQgICAgICAgIHZhciBkZWZhdWx0Rm91bmQgPSBmYWxzZTtcblx0ICAgICAgICB0aGlzLmV4cGVjdCgneycpO1xuXHQgICAgICAgIHdoaWxlICh0cnVlKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLm1hdGNoKCd9JykpIHtcblx0ICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHZhciBjbGF1c2UgPSB0aGlzLnBhcnNlU3dpdGNoQ2FzZSgpO1xuXHQgICAgICAgICAgICBpZiAoY2xhdXNlLnRlc3QgPT09IG51bGwpIHtcblx0ICAgICAgICAgICAgICAgIGlmIChkZWZhdWx0Rm91bmQpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLnRocm93RXJyb3IobWVzc2FnZXNfMS5NZXNzYWdlcy5NdWx0aXBsZURlZmF1bHRzSW5Td2l0Y2gpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgZGVmYXVsdEZvdW5kID0gdHJ1ZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBjYXNlcy5wdXNoKGNsYXVzZSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuZXhwZWN0KCd9Jyk7XG5cdCAgICAgICAgdGhpcy5jb250ZXh0LmluU3dpdGNoID0gcHJldmlvdXNJblN3aXRjaDtcblx0ICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5Td2l0Y2hTdGF0ZW1lbnQoZGlzY3JpbWluYW50LCBjYXNlcykpO1xuXHQgICAgfTtcblx0ICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWxhYmVsbGVkLXN0YXRlbWVudHNcblx0ICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VMYWJlbGxlZFN0YXRlbWVudCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpO1xuXHQgICAgICAgIHZhciBleHByID0gdGhpcy5wYXJzZUV4cHJlc3Npb24oKTtcblx0ICAgICAgICB2YXIgc3RhdGVtZW50O1xuXHQgICAgICAgIGlmICgoZXhwci50eXBlID09PSBzeW50YXhfMS5TeW50YXguSWRlbnRpZmllcikgJiYgdGhpcy5tYXRjaCgnOicpKSB7XG5cdCAgICAgICAgICAgIHRoaXMubmV4dFRva2VuKCk7XG5cdCAgICAgICAgICAgIHZhciBpZCA9IGV4cHI7XG5cdCAgICAgICAgICAgIHZhciBrZXkgPSAnJCcgKyBpZC5uYW1lO1xuXHQgICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuY29udGV4dC5sYWJlbFNldCwga2V5KSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy50aHJvd0Vycm9yKG1lc3NhZ2VzXzEuTWVzc2FnZXMuUmVkZWNsYXJhdGlvbiwgJ0xhYmVsJywgaWQubmFtZSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5jb250ZXh0LmxhYmVsU2V0W2tleV0gPSB0cnVlO1xuXHQgICAgICAgICAgICB2YXIgYm9keSA9IHZvaWQgMDtcblx0ICAgICAgICAgICAgaWYgKHRoaXMubWF0Y2hLZXl3b3JkKCdjbGFzcycpKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLnRvbGVyYXRlVW5leHBlY3RlZFRva2VuKHRoaXMubG9va2FoZWFkKTtcblx0ICAgICAgICAgICAgICAgIGJvZHkgPSB0aGlzLnBhcnNlQ2xhc3NEZWNsYXJhdGlvbigpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMubWF0Y2hLZXl3b3JkKCdmdW5jdGlvbicpKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgdG9rZW4gPSB0aGlzLmxvb2thaGVhZDtcblx0ICAgICAgICAgICAgICAgIHZhciBkZWNsYXJhdGlvbiA9IHRoaXMucGFyc2VGdW5jdGlvbkRlY2xhcmF0aW9uKCk7XG5cdCAgICAgICAgICAgICAgICBpZiAodGhpcy5jb250ZXh0LnN0cmljdCkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMudG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4odG9rZW4sIG1lc3NhZ2VzXzEuTWVzc2FnZXMuU3RyaWN0RnVuY3Rpb24pO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgZWxzZSBpZiAoZGVjbGFyYXRpb24uZ2VuZXJhdG9yKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy50b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbih0b2tlbiwgbWVzc2FnZXNfMS5NZXNzYWdlcy5HZW5lcmF0b3JJbkxlZ2FjeUNvbnRleHQpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgYm9keSA9IGRlY2xhcmF0aW9uO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgYm9keSA9IHRoaXMucGFyc2VTdGF0ZW1lbnQoKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBkZWxldGUgdGhpcy5jb250ZXh0LmxhYmVsU2V0W2tleV07XG5cdCAgICAgICAgICAgIHN0YXRlbWVudCA9IG5ldyBOb2RlLkxhYmVsZWRTdGF0ZW1lbnQoaWQsIGJvZHkpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBlbHNlIHtcblx0ICAgICAgICAgICAgdGhpcy5jb25zdW1lU2VtaWNvbG9uKCk7XG5cdCAgICAgICAgICAgIHN0YXRlbWVudCA9IG5ldyBOb2RlLkV4cHJlc3Npb25TdGF0ZW1lbnQoZXhwcik7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIHN0YXRlbWVudCk7XG5cdCAgICB9O1xuXHQgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtdGhyb3ctc3RhdGVtZW50XG5cdCAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlVGhyb3dTdGF0ZW1lbnQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTtcblx0ICAgICAgICB0aGlzLmV4cGVjdEtleXdvcmQoJ3Rocm93Jyk7XG5cdCAgICAgICAgaWYgKHRoaXMuaGFzTGluZVRlcm1pbmF0b3IpIHtcblx0ICAgICAgICAgICAgdGhpcy50aHJvd0Vycm9yKG1lc3NhZ2VzXzEuTWVzc2FnZXMuTmV3bGluZUFmdGVyVGhyb3cpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB2YXIgYXJndW1lbnQgPSB0aGlzLnBhcnNlRXhwcmVzc2lvbigpO1xuXHQgICAgICAgIHRoaXMuY29uc3VtZVNlbWljb2xvbigpO1xuXHQgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLlRocm93U3RhdGVtZW50KGFyZ3VtZW50KSk7XG5cdCAgICB9O1xuXHQgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtdHJ5LXN0YXRlbWVudFxuXHQgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZUNhdGNoQ2xhdXNlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7XG5cdCAgICAgICAgdGhpcy5leHBlY3RLZXl3b3JkKCdjYXRjaCcpO1xuXHQgICAgICAgIHRoaXMuZXhwZWN0KCcoJyk7XG5cdCAgICAgICAgaWYgKHRoaXMubWF0Y2goJyknKSkge1xuXHQgICAgICAgICAgICB0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKHRoaXMubG9va2FoZWFkKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdmFyIHBhcmFtcyA9IFtdO1xuXHQgICAgICAgIHZhciBwYXJhbSA9IHRoaXMucGFyc2VQYXR0ZXJuKHBhcmFtcyk7XG5cdCAgICAgICAgdmFyIHBhcmFtTWFwID0ge307XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXJhbXMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgdmFyIGtleSA9ICckJyArIHBhcmFtc1tpXS52YWx1ZTtcblx0ICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwYXJhbU1hcCwga2V5KSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy50b2xlcmF0ZUVycm9yKG1lc3NhZ2VzXzEuTWVzc2FnZXMuRHVwbGljYXRlQmluZGluZywgcGFyYW1zW2ldLnZhbHVlKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBwYXJhbU1hcFtrZXldID0gdHJ1ZTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgaWYgKHRoaXMuY29udGV4dC5zdHJpY3QgJiYgcGFyYW0udHlwZSA9PT0gc3ludGF4XzEuU3ludGF4LklkZW50aWZpZXIpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuc2Nhbm5lci5pc1Jlc3RyaWN0ZWRXb3JkKHBhcmFtLm5hbWUpKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLnRvbGVyYXRlRXJyb3IobWVzc2FnZXNfMS5NZXNzYWdlcy5TdHJpY3RDYXRjaFZhcmlhYmxlKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLmV4cGVjdCgnKScpO1xuXHQgICAgICAgIHZhciBib2R5ID0gdGhpcy5wYXJzZUJsb2NrKCk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuQ2F0Y2hDbGF1c2UocGFyYW0sIGJvZHkpKTtcblx0ICAgIH07XG5cdCAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlRmluYWxseUNsYXVzZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLmV4cGVjdEtleXdvcmQoJ2ZpbmFsbHknKTtcblx0ICAgICAgICByZXR1cm4gdGhpcy5wYXJzZUJsb2NrKCk7XG5cdCAgICB9O1xuXHQgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZVRyeVN0YXRlbWVudCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpO1xuXHQgICAgICAgIHRoaXMuZXhwZWN0S2V5d29yZCgndHJ5Jyk7XG5cdCAgICAgICAgdmFyIGJsb2NrID0gdGhpcy5wYXJzZUJsb2NrKCk7XG5cdCAgICAgICAgdmFyIGhhbmRsZXIgPSB0aGlzLm1hdGNoS2V5d29yZCgnY2F0Y2gnKSA/IHRoaXMucGFyc2VDYXRjaENsYXVzZSgpIDogbnVsbDtcblx0ICAgICAgICB2YXIgZmluYWxpemVyID0gdGhpcy5tYXRjaEtleXdvcmQoJ2ZpbmFsbHknKSA/IHRoaXMucGFyc2VGaW5hbGx5Q2xhdXNlKCkgOiBudWxsO1xuXHQgICAgICAgIGlmICghaGFuZGxlciAmJiAhZmluYWxpemVyKSB7XG5cdCAgICAgICAgICAgIHRoaXMudGhyb3dFcnJvcihtZXNzYWdlc18xLk1lc3NhZ2VzLk5vQ2F0Y2hPckZpbmFsbHkpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5UcnlTdGF0ZW1lbnQoYmxvY2ssIGhhbmRsZXIsIGZpbmFsaXplcikpO1xuXHQgICAgfTtcblx0ICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWRlYnVnZ2VyLXN0YXRlbWVudFxuXHQgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZURlYnVnZ2VyU3RhdGVtZW50ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7XG5cdCAgICAgICAgdGhpcy5leHBlY3RLZXl3b3JkKCdkZWJ1Z2dlcicpO1xuXHQgICAgICAgIHRoaXMuY29uc3VtZVNlbWljb2xvbigpO1xuXHQgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLkRlYnVnZ2VyU3RhdGVtZW50KCkpO1xuXHQgICAgfTtcblx0ICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWVjbWFzY3JpcHQtbGFuZ3VhZ2Utc3RhdGVtZW50cy1hbmQtZGVjbGFyYXRpb25zXG5cdCAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlU3RhdGVtZW50ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBzdGF0ZW1lbnQ7XG5cdCAgICAgICAgc3dpdGNoICh0aGlzLmxvb2thaGVhZC50eXBlKSB7XG5cdCAgICAgICAgICAgIGNhc2UgMSAvKiBCb29sZWFuTGl0ZXJhbCAqLzpcblx0ICAgICAgICAgICAgY2FzZSA1IC8qIE51bGxMaXRlcmFsICovOlxuXHQgICAgICAgICAgICBjYXNlIDYgLyogTnVtZXJpY0xpdGVyYWwgKi86XG5cdCAgICAgICAgICAgIGNhc2UgOCAvKiBTdHJpbmdMaXRlcmFsICovOlxuXHQgICAgICAgICAgICBjYXNlIDEwIC8qIFRlbXBsYXRlICovOlxuXHQgICAgICAgICAgICBjYXNlIDkgLyogUmVndWxhckV4cHJlc3Npb24gKi86XG5cdCAgICAgICAgICAgICAgICBzdGF0ZW1lbnQgPSB0aGlzLnBhcnNlRXhwcmVzc2lvblN0YXRlbWVudCgpO1xuXHQgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgIGNhc2UgNyAvKiBQdW5jdHVhdG9yICovOlxuXHQgICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gdGhpcy5sb29rYWhlYWQudmFsdWU7XG5cdCAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09ICd7Jykge1xuXHQgICAgICAgICAgICAgICAgICAgIHN0YXRlbWVudCA9IHRoaXMucGFyc2VCbG9jaygpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgZWxzZSBpZiAodmFsdWUgPT09ICcoJykge1xuXHQgICAgICAgICAgICAgICAgICAgIHN0YXRlbWVudCA9IHRoaXMucGFyc2VFeHByZXNzaW9uU3RhdGVtZW50KCk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICBlbHNlIGlmICh2YWx1ZSA9PT0gJzsnKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50ID0gdGhpcy5wYXJzZUVtcHR5U3RhdGVtZW50KCk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICBzdGF0ZW1lbnQgPSB0aGlzLnBhcnNlRXhwcmVzc2lvblN0YXRlbWVudCgpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgIGNhc2UgMyAvKiBJZGVudGlmaWVyICovOlxuXHQgICAgICAgICAgICAgICAgc3RhdGVtZW50ID0gdGhpcy5tYXRjaEFzeW5jRnVuY3Rpb24oKSA/IHRoaXMucGFyc2VGdW5jdGlvbkRlY2xhcmF0aW9uKCkgOiB0aGlzLnBhcnNlTGFiZWxsZWRTdGF0ZW1lbnQoKTtcblx0ICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICBjYXNlIDQgLyogS2V5d29yZCAqLzpcblx0ICAgICAgICAgICAgICAgIHN3aXRjaCAodGhpcy5sb29rYWhlYWQudmFsdWUpIHtcblx0ICAgICAgICAgICAgICAgICAgICBjYXNlICdicmVhayc6XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlbWVudCA9IHRoaXMucGFyc2VCcmVha1N0YXRlbWVudCgpO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgICAgICAgICBjYXNlICdjb250aW51ZSc6XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlbWVudCA9IHRoaXMucGFyc2VDb250aW51ZVN0YXRlbWVudCgpO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgICAgICAgICBjYXNlICdkZWJ1Z2dlcic6XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlbWVudCA9IHRoaXMucGFyc2VEZWJ1Z2dlclN0YXRlbWVudCgpO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgICAgICAgICBjYXNlICdkbyc6XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlbWVudCA9IHRoaXMucGFyc2VEb1doaWxlU3RhdGVtZW50KCk7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2Zvcic6XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlbWVudCA9IHRoaXMucGFyc2VGb3JTdGF0ZW1lbnQoKTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgICAgICAgICAgY2FzZSAnZnVuY3Rpb24nOlxuXHQgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZW1lbnQgPSB0aGlzLnBhcnNlRnVuY3Rpb25EZWNsYXJhdGlvbigpO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgICAgICAgICBjYXNlICdpZic6XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlbWVudCA9IHRoaXMucGFyc2VJZlN0YXRlbWVudCgpO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgICAgICAgICBjYXNlICdyZXR1cm4nOlxuXHQgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZW1lbnQgPSB0aGlzLnBhcnNlUmV0dXJuU3RhdGVtZW50KCk7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3N3aXRjaCc6XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlbWVudCA9IHRoaXMucGFyc2VTd2l0Y2hTdGF0ZW1lbnQoKTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgICAgICAgICAgY2FzZSAndGhyb3cnOlxuXHQgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZW1lbnQgPSB0aGlzLnBhcnNlVGhyb3dTdGF0ZW1lbnQoKTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgICAgICAgICAgY2FzZSAndHJ5Jzpcblx0ICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50ID0gdGhpcy5wYXJzZVRyeVN0YXRlbWVudCgpO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgICAgICAgICBjYXNlICd2YXInOlxuXHQgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZW1lbnQgPSB0aGlzLnBhcnNlVmFyaWFibGVTdGF0ZW1lbnQoKTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgICAgICAgICAgY2FzZSAnd2hpbGUnOlxuXHQgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZW1lbnQgPSB0aGlzLnBhcnNlV2hpbGVTdGF0ZW1lbnQoKTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgICAgICAgICAgY2FzZSAnd2l0aCc6XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlbWVudCA9IHRoaXMucGFyc2VXaXRoU3RhdGVtZW50KCk7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlbWVudCA9IHRoaXMucGFyc2VFeHByZXNzaW9uU3RhdGVtZW50KCk7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgIGRlZmF1bHQ6XG5cdCAgICAgICAgICAgICAgICBzdGF0ZW1lbnQgPSB0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKHRoaXMubG9va2FoZWFkKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHN0YXRlbWVudDtcblx0ICAgIH07XG5cdCAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1mdW5jdGlvbi1kZWZpbml0aW9uc1xuXHQgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZUZ1bmN0aW9uU291cmNlRWxlbWVudHMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTtcblx0ICAgICAgICB0aGlzLmV4cGVjdCgneycpO1xuXHQgICAgICAgIHZhciBib2R5ID0gdGhpcy5wYXJzZURpcmVjdGl2ZVByb2xvZ3VlcygpO1xuXHQgICAgICAgIHZhciBwcmV2aW91c0xhYmVsU2V0ID0gdGhpcy5jb250ZXh0LmxhYmVsU2V0O1xuXHQgICAgICAgIHZhciBwcmV2aW91c0luSXRlcmF0aW9uID0gdGhpcy5jb250ZXh0LmluSXRlcmF0aW9uO1xuXHQgICAgICAgIHZhciBwcmV2aW91c0luU3dpdGNoID0gdGhpcy5jb250ZXh0LmluU3dpdGNoO1xuXHQgICAgICAgIHZhciBwcmV2aW91c0luRnVuY3Rpb25Cb2R5ID0gdGhpcy5jb250ZXh0LmluRnVuY3Rpb25Cb2R5O1xuXHQgICAgICAgIHRoaXMuY29udGV4dC5sYWJlbFNldCA9IHt9O1xuXHQgICAgICAgIHRoaXMuY29udGV4dC5pbkl0ZXJhdGlvbiA9IGZhbHNlO1xuXHQgICAgICAgIHRoaXMuY29udGV4dC5pblN3aXRjaCA9IGZhbHNlO1xuXHQgICAgICAgIHRoaXMuY29udGV4dC5pbkZ1bmN0aW9uQm9keSA9IHRydWU7XG5cdCAgICAgICAgd2hpbGUgKHRoaXMubG9va2FoZWFkLnR5cGUgIT09IDIgLyogRU9GICovKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLm1hdGNoKCd9JykpIHtcblx0ICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGJvZHkucHVzaCh0aGlzLnBhcnNlU3RhdGVtZW50TGlzdEl0ZW0oKSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuZXhwZWN0KCd9Jyk7XG5cdCAgICAgICAgdGhpcy5jb250ZXh0LmxhYmVsU2V0ID0gcHJldmlvdXNMYWJlbFNldDtcblx0ICAgICAgICB0aGlzLmNvbnRleHQuaW5JdGVyYXRpb24gPSBwcmV2aW91c0luSXRlcmF0aW9uO1xuXHQgICAgICAgIHRoaXMuY29udGV4dC5pblN3aXRjaCA9IHByZXZpb3VzSW5Td2l0Y2g7XG5cdCAgICAgICAgdGhpcy5jb250ZXh0LmluRnVuY3Rpb25Cb2R5ID0gcHJldmlvdXNJbkZ1bmN0aW9uQm9keTtcblx0ICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5CbG9ja1N0YXRlbWVudChib2R5KSk7XG5cdCAgICB9O1xuXHQgICAgUGFyc2VyLnByb3RvdHlwZS52YWxpZGF0ZVBhcmFtID0gZnVuY3Rpb24gKG9wdGlvbnMsIHBhcmFtLCBuYW1lKSB7XG5cdCAgICAgICAgdmFyIGtleSA9ICckJyArIG5hbWU7XG5cdCAgICAgICAgaWYgKHRoaXMuY29udGV4dC5zdHJpY3QpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuc2Nhbm5lci5pc1Jlc3RyaWN0ZWRXb3JkKG5hbWUpKSB7XG5cdCAgICAgICAgICAgICAgICBvcHRpb25zLnN0cmljdGVkID0gcGFyYW07XG5cdCAgICAgICAgICAgICAgICBvcHRpb25zLm1lc3NhZ2UgPSBtZXNzYWdlc18xLk1lc3NhZ2VzLlN0cmljdFBhcmFtTmFtZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9wdGlvbnMucGFyYW1TZXQsIGtleSkpIHtcblx0ICAgICAgICAgICAgICAgIG9wdGlvbnMuc3RyaWN0ZWQgPSBwYXJhbTtcblx0ICAgICAgICAgICAgICAgIG9wdGlvbnMubWVzc2FnZSA9IG1lc3NhZ2VzXzEuTWVzc2FnZXMuU3RyaWN0UGFyYW1EdXBlO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGVsc2UgaWYgKCFvcHRpb25zLmZpcnN0UmVzdHJpY3RlZCkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5zY2FubmVyLmlzUmVzdHJpY3RlZFdvcmQobmFtZSkpIHtcblx0ICAgICAgICAgICAgICAgIG9wdGlvbnMuZmlyc3RSZXN0cmljdGVkID0gcGFyYW07XG5cdCAgICAgICAgICAgICAgICBvcHRpb25zLm1lc3NhZ2UgPSBtZXNzYWdlc18xLk1lc3NhZ2VzLlN0cmljdFBhcmFtTmFtZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBlbHNlIGlmICh0aGlzLnNjYW5uZXIuaXNTdHJpY3RNb2RlUmVzZXJ2ZWRXb3JkKG5hbWUpKSB7XG5cdCAgICAgICAgICAgICAgICBvcHRpb25zLmZpcnN0UmVzdHJpY3RlZCA9IHBhcmFtO1xuXHQgICAgICAgICAgICAgICAgb3B0aW9ucy5tZXNzYWdlID0gbWVzc2FnZXNfMS5NZXNzYWdlcy5TdHJpY3RSZXNlcnZlZFdvcmQ7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgZWxzZSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9wdGlvbnMucGFyYW1TZXQsIGtleSkpIHtcblx0ICAgICAgICAgICAgICAgIG9wdGlvbnMuc3RyaWN0ZWQgPSBwYXJhbTtcblx0ICAgICAgICAgICAgICAgIG9wdGlvbnMubWVzc2FnZSA9IG1lc3NhZ2VzXzEuTWVzc2FnZXMuU3RyaWN0UGFyYW1EdXBlO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5cdCAgICAgICAgaWYgKHR5cGVvZiBPYmplY3QuZGVmaW5lUHJvcGVydHkgPT09ICdmdW5jdGlvbicpIHtcblx0ICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9wdGlvbnMucGFyYW1TZXQsIGtleSwgeyB2YWx1ZTogdHJ1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9KTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgZWxzZSB7XG5cdCAgICAgICAgICAgIG9wdGlvbnMucGFyYW1TZXRba2V5XSA9IHRydWU7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VSZXN0RWxlbWVudCA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcblx0ICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpO1xuXHQgICAgICAgIHRoaXMuZXhwZWN0KCcuLi4nKTtcblx0ICAgICAgICB2YXIgYXJnID0gdGhpcy5wYXJzZVBhdHRlcm4ocGFyYW1zKTtcblx0ICAgICAgICBpZiAodGhpcy5tYXRjaCgnPScpKSB7XG5cdCAgICAgICAgICAgIHRoaXMudGhyb3dFcnJvcihtZXNzYWdlc18xLk1lc3NhZ2VzLkRlZmF1bHRSZXN0UGFyYW1ldGVyKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgaWYgKCF0aGlzLm1hdGNoKCcpJykpIHtcblx0ICAgICAgICAgICAgdGhpcy50aHJvd0Vycm9yKG1lc3NhZ2VzXzEuTWVzc2FnZXMuUGFyYW1ldGVyQWZ0ZXJSZXN0UGFyYW1ldGVyKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuUmVzdEVsZW1lbnQoYXJnKSk7XG5cdCAgICB9O1xuXHQgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZUZvcm1hbFBhcmFtZXRlciA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG5cdCAgICAgICAgdmFyIHBhcmFtcyA9IFtdO1xuXHQgICAgICAgIHZhciBwYXJhbSA9IHRoaXMubWF0Y2goJy4uLicpID8gdGhpcy5wYXJzZVJlc3RFbGVtZW50KHBhcmFtcykgOiB0aGlzLnBhcnNlUGF0dGVybldpdGhEZWZhdWx0KHBhcmFtcyk7XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXJhbXMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgdGhpcy52YWxpZGF0ZVBhcmFtKG9wdGlvbnMsIHBhcmFtc1tpXSwgcGFyYW1zW2ldLnZhbHVlKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgb3B0aW9ucy5zaW1wbGUgPSBvcHRpb25zLnNpbXBsZSAmJiAocGFyYW0gaW5zdGFuY2VvZiBOb2RlLklkZW50aWZpZXIpO1xuXHQgICAgICAgIG9wdGlvbnMucGFyYW1zLnB1c2gocGFyYW0pO1xuXHQgICAgfTtcblx0ICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VGb3JtYWxQYXJhbWV0ZXJzID0gZnVuY3Rpb24gKGZpcnN0UmVzdHJpY3RlZCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zO1xuXHQgICAgICAgIG9wdGlvbnMgPSB7XG5cdCAgICAgICAgICAgIHNpbXBsZTogdHJ1ZSxcblx0ICAgICAgICAgICAgcGFyYW1zOiBbXSxcblx0ICAgICAgICAgICAgZmlyc3RSZXN0cmljdGVkOiBmaXJzdFJlc3RyaWN0ZWRcblx0ICAgICAgICB9O1xuXHQgICAgICAgIHRoaXMuZXhwZWN0KCcoJyk7XG5cdCAgICAgICAgaWYgKCF0aGlzLm1hdGNoKCcpJykpIHtcblx0ICAgICAgICAgICAgb3B0aW9ucy5wYXJhbVNldCA9IHt9O1xuXHQgICAgICAgICAgICB3aGlsZSAodGhpcy5sb29rYWhlYWQudHlwZSAhPT0gMiAvKiBFT0YgKi8pIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMucGFyc2VGb3JtYWxQYXJhbWV0ZXIob3B0aW9ucyk7XG5cdCAgICAgICAgICAgICAgICBpZiAodGhpcy5tYXRjaCgnKScpKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICB0aGlzLmV4cGVjdCgnLCcpO1xuXHQgICAgICAgICAgICAgICAgaWYgKHRoaXMubWF0Y2goJyknKSkge1xuXHQgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuZXhwZWN0KCcpJyk7XG5cdCAgICAgICAgcmV0dXJuIHtcblx0ICAgICAgICAgICAgc2ltcGxlOiBvcHRpb25zLnNpbXBsZSxcblx0ICAgICAgICAgICAgcGFyYW1zOiBvcHRpb25zLnBhcmFtcyxcblx0ICAgICAgICAgICAgc3RyaWN0ZWQ6IG9wdGlvbnMuc3RyaWN0ZWQsXG5cdCAgICAgICAgICAgIGZpcnN0UmVzdHJpY3RlZDogb3B0aW9ucy5maXJzdFJlc3RyaWN0ZWQsXG5cdCAgICAgICAgICAgIG1lc3NhZ2U6IG9wdGlvbnMubWVzc2FnZVxuXHQgICAgICAgIH07XG5cdCAgICB9O1xuXHQgICAgUGFyc2VyLnByb3RvdHlwZS5tYXRjaEFzeW5jRnVuY3Rpb24gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG1hdGNoID0gdGhpcy5tYXRjaENvbnRleHR1YWxLZXl3b3JkKCdhc3luYycpO1xuXHQgICAgICAgIGlmIChtYXRjaCkge1xuXHQgICAgICAgICAgICB2YXIgc3RhdGUgPSB0aGlzLnNjYW5uZXIuc2F2ZVN0YXRlKCk7XG5cdCAgICAgICAgICAgIHRoaXMuc2Nhbm5lci5zY2FuQ29tbWVudHMoKTtcblx0ICAgICAgICAgICAgdmFyIG5leHQgPSB0aGlzLnNjYW5uZXIubGV4KCk7XG5cdCAgICAgICAgICAgIHRoaXMuc2Nhbm5lci5yZXN0b3JlU3RhdGUoc3RhdGUpO1xuXHQgICAgICAgICAgICBtYXRjaCA9IChzdGF0ZS5saW5lTnVtYmVyID09PSBuZXh0LmxpbmVOdW1iZXIpICYmIChuZXh0LnR5cGUgPT09IDQgLyogS2V5d29yZCAqLykgJiYgKG5leHQudmFsdWUgPT09ICdmdW5jdGlvbicpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gbWF0Y2g7XG5cdCAgICB9O1xuXHQgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZUZ1bmN0aW9uRGVjbGFyYXRpb24gPSBmdW5jdGlvbiAoaWRlbnRpZmllcklzT3B0aW9uYWwpIHtcblx0ICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpO1xuXHQgICAgICAgIHZhciBpc0FzeW5jID0gdGhpcy5tYXRjaENvbnRleHR1YWxLZXl3b3JkKCdhc3luYycpO1xuXHQgICAgICAgIGlmIChpc0FzeW5jKSB7XG5cdCAgICAgICAgICAgIHRoaXMubmV4dFRva2VuKCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuZXhwZWN0S2V5d29yZCgnZnVuY3Rpb24nKTtcblx0ICAgICAgICB2YXIgaXNHZW5lcmF0b3IgPSBpc0FzeW5jID8gZmFsc2UgOiB0aGlzLm1hdGNoKCcqJyk7XG5cdCAgICAgICAgaWYgKGlzR2VuZXJhdG9yKSB7XG5cdCAgICAgICAgICAgIHRoaXMubmV4dFRva2VuKCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHZhciBtZXNzYWdlO1xuXHQgICAgICAgIHZhciBpZCA9IG51bGw7XG5cdCAgICAgICAgdmFyIGZpcnN0UmVzdHJpY3RlZCA9IG51bGw7XG5cdCAgICAgICAgaWYgKCFpZGVudGlmaWVySXNPcHRpb25hbCB8fCAhdGhpcy5tYXRjaCgnKCcpKSB7XG5cdCAgICAgICAgICAgIHZhciB0b2tlbiA9IHRoaXMubG9va2FoZWFkO1xuXHQgICAgICAgICAgICBpZCA9IHRoaXMucGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoKTtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuY29udGV4dC5zdHJpY3QpIHtcblx0ICAgICAgICAgICAgICAgIGlmICh0aGlzLnNjYW5uZXIuaXNSZXN0cmljdGVkV29yZCh0b2tlbi52YWx1ZSkpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLnRvbGVyYXRlVW5leHBlY3RlZFRva2VuKHRva2VuLCBtZXNzYWdlc18xLk1lc3NhZ2VzLlN0cmljdEZ1bmN0aW9uTmFtZSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgZWxzZSB7XG5cdCAgICAgICAgICAgICAgICBpZiAodGhpcy5zY2FubmVyLmlzUmVzdHJpY3RlZFdvcmQodG9rZW4udmFsdWUpKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgZmlyc3RSZXN0cmljdGVkID0gdG9rZW47XG5cdCAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA9IG1lc3NhZ2VzXzEuTWVzc2FnZXMuU3RyaWN0RnVuY3Rpb25OYW1lO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5zY2FubmVyLmlzU3RyaWN0TW9kZVJlc2VydmVkV29yZCh0b2tlbi52YWx1ZSkpIHtcblx0ICAgICAgICAgICAgICAgICAgICBmaXJzdFJlc3RyaWN0ZWQgPSB0b2tlbjtcblx0ICAgICAgICAgICAgICAgICAgICBtZXNzYWdlID0gbWVzc2FnZXNfMS5NZXNzYWdlcy5TdHJpY3RSZXNlcnZlZFdvcmQ7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgdmFyIHByZXZpb3VzQWxsb3dBd2FpdCA9IHRoaXMuY29udGV4dC5hd2FpdDtcblx0ICAgICAgICB2YXIgcHJldmlvdXNBbGxvd1lpZWxkID0gdGhpcy5jb250ZXh0LmFsbG93WWllbGQ7XG5cdCAgICAgICAgdGhpcy5jb250ZXh0LmF3YWl0ID0gaXNBc3luYztcblx0ICAgICAgICB0aGlzLmNvbnRleHQuYWxsb3dZaWVsZCA9ICFpc0dlbmVyYXRvcjtcblx0ICAgICAgICB2YXIgZm9ybWFsUGFyYW1ldGVycyA9IHRoaXMucGFyc2VGb3JtYWxQYXJhbWV0ZXJzKGZpcnN0UmVzdHJpY3RlZCk7XG5cdCAgICAgICAgdmFyIHBhcmFtcyA9IGZvcm1hbFBhcmFtZXRlcnMucGFyYW1zO1xuXHQgICAgICAgIHZhciBzdHJpY3RlZCA9IGZvcm1hbFBhcmFtZXRlcnMuc3RyaWN0ZWQ7XG5cdCAgICAgICAgZmlyc3RSZXN0cmljdGVkID0gZm9ybWFsUGFyYW1ldGVycy5maXJzdFJlc3RyaWN0ZWQ7XG5cdCAgICAgICAgaWYgKGZvcm1hbFBhcmFtZXRlcnMubWVzc2FnZSkge1xuXHQgICAgICAgICAgICBtZXNzYWdlID0gZm9ybWFsUGFyYW1ldGVycy5tZXNzYWdlO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB2YXIgcHJldmlvdXNTdHJpY3QgPSB0aGlzLmNvbnRleHQuc3RyaWN0O1xuXHQgICAgICAgIHZhciBwcmV2aW91c0FsbG93U3RyaWN0RGlyZWN0aXZlID0gdGhpcy5jb250ZXh0LmFsbG93U3RyaWN0RGlyZWN0aXZlO1xuXHQgICAgICAgIHRoaXMuY29udGV4dC5hbGxvd1N0cmljdERpcmVjdGl2ZSA9IGZvcm1hbFBhcmFtZXRlcnMuc2ltcGxlO1xuXHQgICAgICAgIHZhciBib2R5ID0gdGhpcy5wYXJzZUZ1bmN0aW9uU291cmNlRWxlbWVudHMoKTtcblx0ICAgICAgICBpZiAodGhpcy5jb250ZXh0LnN0cmljdCAmJiBmaXJzdFJlc3RyaWN0ZWQpIHtcblx0ICAgICAgICAgICAgdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbihmaXJzdFJlc3RyaWN0ZWQsIG1lc3NhZ2UpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAodGhpcy5jb250ZXh0LnN0cmljdCAmJiBzdHJpY3RlZCkge1xuXHQgICAgICAgICAgICB0aGlzLnRvbGVyYXRlVW5leHBlY3RlZFRva2VuKHN0cmljdGVkLCBtZXNzYWdlKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5jb250ZXh0LnN0cmljdCA9IHByZXZpb3VzU3RyaWN0O1xuXHQgICAgICAgIHRoaXMuY29udGV4dC5hbGxvd1N0cmljdERpcmVjdGl2ZSA9IHByZXZpb3VzQWxsb3dTdHJpY3REaXJlY3RpdmU7XG5cdCAgICAgICAgdGhpcy5jb250ZXh0LmF3YWl0ID0gcHJldmlvdXNBbGxvd0F3YWl0O1xuXHQgICAgICAgIHRoaXMuY29udGV4dC5hbGxvd1lpZWxkID0gcHJldmlvdXNBbGxvd1lpZWxkO1xuXHQgICAgICAgIHJldHVybiBpc0FzeW5jID8gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5Bc3luY0Z1bmN0aW9uRGVjbGFyYXRpb24oaWQsIHBhcmFtcywgYm9keSkpIDpcblx0ICAgICAgICAgICAgdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5GdW5jdGlvbkRlY2xhcmF0aW9uKGlkLCBwYXJhbXMsIGJvZHksIGlzR2VuZXJhdG9yKSk7XG5cdCAgICB9O1xuXHQgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZUZ1bmN0aW9uRXhwcmVzc2lvbiA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpO1xuXHQgICAgICAgIHZhciBpc0FzeW5jID0gdGhpcy5tYXRjaENvbnRleHR1YWxLZXl3b3JkKCdhc3luYycpO1xuXHQgICAgICAgIGlmIChpc0FzeW5jKSB7XG5cdCAgICAgICAgICAgIHRoaXMubmV4dFRva2VuKCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuZXhwZWN0S2V5d29yZCgnZnVuY3Rpb24nKTtcblx0ICAgICAgICB2YXIgaXNHZW5lcmF0b3IgPSBpc0FzeW5jID8gZmFsc2UgOiB0aGlzLm1hdGNoKCcqJyk7XG5cdCAgICAgICAgaWYgKGlzR2VuZXJhdG9yKSB7XG5cdCAgICAgICAgICAgIHRoaXMubmV4dFRva2VuKCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHZhciBtZXNzYWdlO1xuXHQgICAgICAgIHZhciBpZCA9IG51bGw7XG5cdCAgICAgICAgdmFyIGZpcnN0UmVzdHJpY3RlZDtcblx0ICAgICAgICB2YXIgcHJldmlvdXNBbGxvd0F3YWl0ID0gdGhpcy5jb250ZXh0LmF3YWl0O1xuXHQgICAgICAgIHZhciBwcmV2aW91c0FsbG93WWllbGQgPSB0aGlzLmNvbnRleHQuYWxsb3dZaWVsZDtcblx0ICAgICAgICB0aGlzLmNvbnRleHQuYXdhaXQgPSBpc0FzeW5jO1xuXHQgICAgICAgIHRoaXMuY29udGV4dC5hbGxvd1lpZWxkID0gIWlzR2VuZXJhdG9yO1xuXHQgICAgICAgIGlmICghdGhpcy5tYXRjaCgnKCcpKSB7XG5cdCAgICAgICAgICAgIHZhciB0b2tlbiA9IHRoaXMubG9va2FoZWFkO1xuXHQgICAgICAgICAgICBpZCA9ICghdGhpcy5jb250ZXh0LnN0cmljdCAmJiAhaXNHZW5lcmF0b3IgJiYgdGhpcy5tYXRjaEtleXdvcmQoJ3lpZWxkJykpID8gdGhpcy5wYXJzZUlkZW50aWZpZXJOYW1lKCkgOiB0aGlzLnBhcnNlVmFyaWFibGVJZGVudGlmaWVyKCk7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLmNvbnRleHQuc3RyaWN0KSB7XG5cdCAgICAgICAgICAgICAgICBpZiAodGhpcy5zY2FubmVyLmlzUmVzdHJpY3RlZFdvcmQodG9rZW4udmFsdWUpKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy50b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbih0b2tlbiwgbWVzc2FnZXNfMS5NZXNzYWdlcy5TdHJpY3RGdW5jdGlvbk5hbWUpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2Nhbm5lci5pc1Jlc3RyaWN0ZWRXb3JkKHRva2VuLnZhbHVlKSkge1xuXHQgICAgICAgICAgICAgICAgICAgIGZpcnN0UmVzdHJpY3RlZCA9IHRva2VuO1xuXHQgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBtZXNzYWdlc18xLk1lc3NhZ2VzLlN0cmljdEZ1bmN0aW9uTmFtZTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuc2Nhbm5lci5pc1N0cmljdE1vZGVSZXNlcnZlZFdvcmQodG9rZW4udmFsdWUpKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgZmlyc3RSZXN0cmljdGVkID0gdG9rZW47XG5cdCAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA9IG1lc3NhZ2VzXzEuTWVzc2FnZXMuU3RyaWN0UmVzZXJ2ZWRXb3JkO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHZhciBmb3JtYWxQYXJhbWV0ZXJzID0gdGhpcy5wYXJzZUZvcm1hbFBhcmFtZXRlcnMoZmlyc3RSZXN0cmljdGVkKTtcblx0ICAgICAgICB2YXIgcGFyYW1zID0gZm9ybWFsUGFyYW1ldGVycy5wYXJhbXM7XG5cdCAgICAgICAgdmFyIHN0cmljdGVkID0gZm9ybWFsUGFyYW1ldGVycy5zdHJpY3RlZDtcblx0ICAgICAgICBmaXJzdFJlc3RyaWN0ZWQgPSBmb3JtYWxQYXJhbWV0ZXJzLmZpcnN0UmVzdHJpY3RlZDtcblx0ICAgICAgICBpZiAoZm9ybWFsUGFyYW1ldGVycy5tZXNzYWdlKSB7XG5cdCAgICAgICAgICAgIG1lc3NhZ2UgPSBmb3JtYWxQYXJhbWV0ZXJzLm1lc3NhZ2U7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHZhciBwcmV2aW91c1N0cmljdCA9IHRoaXMuY29udGV4dC5zdHJpY3Q7XG5cdCAgICAgICAgdmFyIHByZXZpb3VzQWxsb3dTdHJpY3REaXJlY3RpdmUgPSB0aGlzLmNvbnRleHQuYWxsb3dTdHJpY3REaXJlY3RpdmU7XG5cdCAgICAgICAgdGhpcy5jb250ZXh0LmFsbG93U3RyaWN0RGlyZWN0aXZlID0gZm9ybWFsUGFyYW1ldGVycy5zaW1wbGU7XG5cdCAgICAgICAgdmFyIGJvZHkgPSB0aGlzLnBhcnNlRnVuY3Rpb25Tb3VyY2VFbGVtZW50cygpO1xuXHQgICAgICAgIGlmICh0aGlzLmNvbnRleHQuc3RyaWN0ICYmIGZpcnN0UmVzdHJpY3RlZCkge1xuXHQgICAgICAgICAgICB0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKGZpcnN0UmVzdHJpY3RlZCwgbWVzc2FnZSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmICh0aGlzLmNvbnRleHQuc3RyaWN0ICYmIHN0cmljdGVkKSB7XG5cdCAgICAgICAgICAgIHRoaXMudG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4oc3RyaWN0ZWQsIG1lc3NhZ2UpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLmNvbnRleHQuc3RyaWN0ID0gcHJldmlvdXNTdHJpY3Q7XG5cdCAgICAgICAgdGhpcy5jb250ZXh0LmFsbG93U3RyaWN0RGlyZWN0aXZlID0gcHJldmlvdXNBbGxvd1N0cmljdERpcmVjdGl2ZTtcblx0ICAgICAgICB0aGlzLmNvbnRleHQuYXdhaXQgPSBwcmV2aW91c0FsbG93QXdhaXQ7XG5cdCAgICAgICAgdGhpcy5jb250ZXh0LmFsbG93WWllbGQgPSBwcmV2aW91c0FsbG93WWllbGQ7XG5cdCAgICAgICAgcmV0dXJuIGlzQXN5bmMgPyB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLkFzeW5jRnVuY3Rpb25FeHByZXNzaW9uKGlkLCBwYXJhbXMsIGJvZHkpKSA6XG5cdCAgICAgICAgICAgIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuRnVuY3Rpb25FeHByZXNzaW9uKGlkLCBwYXJhbXMsIGJvZHksIGlzR2VuZXJhdG9yKSk7XG5cdCAgICB9O1xuXHQgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtZGlyZWN0aXZlLXByb2xvZ3Vlcy1hbmQtdGhlLXVzZS1zdHJpY3QtZGlyZWN0aXZlXG5cdCAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlRGlyZWN0aXZlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciB0b2tlbiA9IHRoaXMubG9va2FoZWFkO1xuXHQgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7XG5cdCAgICAgICAgdmFyIGV4cHIgPSB0aGlzLnBhcnNlRXhwcmVzc2lvbigpO1xuXHQgICAgICAgIHZhciBkaXJlY3RpdmUgPSAoZXhwci50eXBlID09PSBzeW50YXhfMS5TeW50YXguTGl0ZXJhbCkgPyB0aGlzLmdldFRva2VuUmF3KHRva2VuKS5zbGljZSgxLCAtMSkgOiBudWxsO1xuXHQgICAgICAgIHRoaXMuY29uc3VtZVNlbWljb2xvbigpO1xuXHQgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIGRpcmVjdGl2ZSA/IG5ldyBOb2RlLkRpcmVjdGl2ZShleHByLCBkaXJlY3RpdmUpIDogbmV3IE5vZGUuRXhwcmVzc2lvblN0YXRlbWVudChleHByKSk7XG5cdCAgICB9O1xuXHQgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZURpcmVjdGl2ZVByb2xvZ3VlcyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgZmlyc3RSZXN0cmljdGVkID0gbnVsbDtcblx0ICAgICAgICB2YXIgYm9keSA9IFtdO1xuXHQgICAgICAgIHdoaWxlICh0cnVlKSB7XG5cdCAgICAgICAgICAgIHZhciB0b2tlbiA9IHRoaXMubG9va2FoZWFkO1xuXHQgICAgICAgICAgICBpZiAodG9rZW4udHlwZSAhPT0gOCAvKiBTdHJpbmdMaXRlcmFsICovKSB7XG5cdCAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB2YXIgc3RhdGVtZW50ID0gdGhpcy5wYXJzZURpcmVjdGl2ZSgpO1xuXHQgICAgICAgICAgICBib2R5LnB1c2goc3RhdGVtZW50KTtcblx0ICAgICAgICAgICAgdmFyIGRpcmVjdGl2ZSA9IHN0YXRlbWVudC5kaXJlY3RpdmU7XG5cdCAgICAgICAgICAgIGlmICh0eXBlb2YgZGlyZWN0aXZlICE9PSAnc3RyaW5nJykge1xuXHQgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgaWYgKGRpcmVjdGl2ZSA9PT0gJ3VzZSBzdHJpY3QnKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuc3RyaWN0ID0gdHJ1ZTtcblx0ICAgICAgICAgICAgICAgIGlmIChmaXJzdFJlc3RyaWN0ZWQpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLnRvbGVyYXRlVW5leHBlY3RlZFRva2VuKGZpcnN0UmVzdHJpY3RlZCwgbWVzc2FnZXNfMS5NZXNzYWdlcy5TdHJpY3RPY3RhbExpdGVyYWwpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmNvbnRleHQuYWxsb3dTdHJpY3REaXJlY3RpdmUpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLnRvbGVyYXRlVW5leHBlY3RlZFRva2VuKHRva2VuLCBtZXNzYWdlc18xLk1lc3NhZ2VzLklsbGVnYWxMYW5ndWFnZU1vZGVEaXJlY3RpdmUpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgaWYgKCFmaXJzdFJlc3RyaWN0ZWQgJiYgdG9rZW4ub2N0YWwpIHtcblx0ICAgICAgICAgICAgICAgICAgICBmaXJzdFJlc3RyaWN0ZWQgPSB0b2tlbjtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gYm9keTtcblx0ICAgIH07XG5cdCAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1tZXRob2QtZGVmaW5pdGlvbnNcblx0ICAgIFBhcnNlci5wcm90b3R5cGUucXVhbGlmaWVkUHJvcGVydHlOYW1lID0gZnVuY3Rpb24gKHRva2VuKSB7XG5cdCAgICAgICAgc3dpdGNoICh0b2tlbi50eXBlKSB7XG5cdCAgICAgICAgICAgIGNhc2UgMyAvKiBJZGVudGlmaWVyICovOlxuXHQgICAgICAgICAgICBjYXNlIDggLyogU3RyaW5nTGl0ZXJhbCAqLzpcblx0ICAgICAgICAgICAgY2FzZSAxIC8qIEJvb2xlYW5MaXRlcmFsICovOlxuXHQgICAgICAgICAgICBjYXNlIDUgLyogTnVsbExpdGVyYWwgKi86XG5cdCAgICAgICAgICAgIGNhc2UgNiAvKiBOdW1lcmljTGl0ZXJhbCAqLzpcblx0ICAgICAgICAgICAgY2FzZSA0IC8qIEtleXdvcmQgKi86XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcblx0ICAgICAgICAgICAgY2FzZSA3IC8qIFB1bmN0dWF0b3IgKi86XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW4udmFsdWUgPT09ICdbJztcblx0ICAgICAgICAgICAgZGVmYXVsdDpcblx0ICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gZmFsc2U7XG5cdCAgICB9O1xuXHQgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZUdldHRlck1ldGhvZCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpO1xuXHQgICAgICAgIHZhciBpc0dlbmVyYXRvciA9IGZhbHNlO1xuXHQgICAgICAgIHZhciBwcmV2aW91c0FsbG93WWllbGQgPSB0aGlzLmNvbnRleHQuYWxsb3dZaWVsZDtcblx0ICAgICAgICB0aGlzLmNvbnRleHQuYWxsb3dZaWVsZCA9ICFpc0dlbmVyYXRvcjtcblx0ICAgICAgICB2YXIgZm9ybWFsUGFyYW1ldGVycyA9IHRoaXMucGFyc2VGb3JtYWxQYXJhbWV0ZXJzKCk7XG5cdCAgICAgICAgaWYgKGZvcm1hbFBhcmFtZXRlcnMucGFyYW1zLmxlbmd0aCA+IDApIHtcblx0ICAgICAgICAgICAgdGhpcy50b2xlcmF0ZUVycm9yKG1lc3NhZ2VzXzEuTWVzc2FnZXMuQmFkR2V0dGVyQXJpdHkpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB2YXIgbWV0aG9kID0gdGhpcy5wYXJzZVByb3BlcnR5TWV0aG9kKGZvcm1hbFBhcmFtZXRlcnMpO1xuXHQgICAgICAgIHRoaXMuY29udGV4dC5hbGxvd1lpZWxkID0gcHJldmlvdXNBbGxvd1lpZWxkO1xuXHQgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLkZ1bmN0aW9uRXhwcmVzc2lvbihudWxsLCBmb3JtYWxQYXJhbWV0ZXJzLnBhcmFtcywgbWV0aG9kLCBpc0dlbmVyYXRvcikpO1xuXHQgICAgfTtcblx0ICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VTZXR0ZXJNZXRob2QgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTtcblx0ICAgICAgICB2YXIgaXNHZW5lcmF0b3IgPSBmYWxzZTtcblx0ICAgICAgICB2YXIgcHJldmlvdXNBbGxvd1lpZWxkID0gdGhpcy5jb250ZXh0LmFsbG93WWllbGQ7XG5cdCAgICAgICAgdGhpcy5jb250ZXh0LmFsbG93WWllbGQgPSAhaXNHZW5lcmF0b3I7XG5cdCAgICAgICAgdmFyIGZvcm1hbFBhcmFtZXRlcnMgPSB0aGlzLnBhcnNlRm9ybWFsUGFyYW1ldGVycygpO1xuXHQgICAgICAgIGlmIChmb3JtYWxQYXJhbWV0ZXJzLnBhcmFtcy5sZW5ndGggIT09IDEpIHtcblx0ICAgICAgICAgICAgdGhpcy50b2xlcmF0ZUVycm9yKG1lc3NhZ2VzXzEuTWVzc2FnZXMuQmFkU2V0dGVyQXJpdHkpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBlbHNlIGlmIChmb3JtYWxQYXJhbWV0ZXJzLnBhcmFtc1swXSBpbnN0YW5jZW9mIE5vZGUuUmVzdEVsZW1lbnQpIHtcblx0ICAgICAgICAgICAgdGhpcy50b2xlcmF0ZUVycm9yKG1lc3NhZ2VzXzEuTWVzc2FnZXMuQmFkU2V0dGVyUmVzdFBhcmFtZXRlcik7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHZhciBtZXRob2QgPSB0aGlzLnBhcnNlUHJvcGVydHlNZXRob2QoZm9ybWFsUGFyYW1ldGVycyk7XG5cdCAgICAgICAgdGhpcy5jb250ZXh0LmFsbG93WWllbGQgPSBwcmV2aW91c0FsbG93WWllbGQ7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuRnVuY3Rpb25FeHByZXNzaW9uKG51bGwsIGZvcm1hbFBhcmFtZXRlcnMucGFyYW1zLCBtZXRob2QsIGlzR2VuZXJhdG9yKSk7XG5cdCAgICB9O1xuXHQgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZUdlbmVyYXRvck1ldGhvZCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpO1xuXHQgICAgICAgIHZhciBpc0dlbmVyYXRvciA9IHRydWU7XG5cdCAgICAgICAgdmFyIHByZXZpb3VzQWxsb3dZaWVsZCA9IHRoaXMuY29udGV4dC5hbGxvd1lpZWxkO1xuXHQgICAgICAgIHRoaXMuY29udGV4dC5hbGxvd1lpZWxkID0gdHJ1ZTtcblx0ICAgICAgICB2YXIgcGFyYW1zID0gdGhpcy5wYXJzZUZvcm1hbFBhcmFtZXRlcnMoKTtcblx0ICAgICAgICB0aGlzLmNvbnRleHQuYWxsb3dZaWVsZCA9IGZhbHNlO1xuXHQgICAgICAgIHZhciBtZXRob2QgPSB0aGlzLnBhcnNlUHJvcGVydHlNZXRob2QocGFyYW1zKTtcblx0ICAgICAgICB0aGlzLmNvbnRleHQuYWxsb3dZaWVsZCA9IHByZXZpb3VzQWxsb3dZaWVsZDtcblx0ICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5GdW5jdGlvbkV4cHJlc3Npb24obnVsbCwgcGFyYW1zLnBhcmFtcywgbWV0aG9kLCBpc0dlbmVyYXRvcikpO1xuXHQgICAgfTtcblx0ICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWdlbmVyYXRvci1mdW5jdGlvbi1kZWZpbml0aW9uc1xuXHQgICAgUGFyc2VyLnByb3RvdHlwZS5pc1N0YXJ0T2ZFeHByZXNzaW9uID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBzdGFydCA9IHRydWU7XG5cdCAgICAgICAgdmFyIHZhbHVlID0gdGhpcy5sb29rYWhlYWQudmFsdWU7XG5cdCAgICAgICAgc3dpdGNoICh0aGlzLmxvb2thaGVhZC50eXBlKSB7XG5cdCAgICAgICAgICAgIGNhc2UgNyAvKiBQdW5jdHVhdG9yICovOlxuXHQgICAgICAgICAgICAgICAgc3RhcnQgPSAodmFsdWUgPT09ICdbJykgfHwgKHZhbHVlID09PSAnKCcpIHx8ICh2YWx1ZSA9PT0gJ3snKSB8fFxuXHQgICAgICAgICAgICAgICAgICAgICh2YWx1ZSA9PT0gJysnKSB8fCAodmFsdWUgPT09ICctJykgfHxcblx0ICAgICAgICAgICAgICAgICAgICAodmFsdWUgPT09ICchJykgfHwgKHZhbHVlID09PSAnficpIHx8XG5cdCAgICAgICAgICAgICAgICAgICAgKHZhbHVlID09PSAnKysnKSB8fCAodmFsdWUgPT09ICctLScpIHx8XG5cdCAgICAgICAgICAgICAgICAgICAgKHZhbHVlID09PSAnLycpIHx8ICh2YWx1ZSA9PT0gJy89Jyk7IC8vIHJlZ3VsYXIgZXhwcmVzc2lvbiBsaXRlcmFsXG5cdCAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgY2FzZSA0IC8qIEtleXdvcmQgKi86XG5cdCAgICAgICAgICAgICAgICBzdGFydCA9ICh2YWx1ZSA9PT0gJ2NsYXNzJykgfHwgKHZhbHVlID09PSAnZGVsZXRlJykgfHxcblx0ICAgICAgICAgICAgICAgICAgICAodmFsdWUgPT09ICdmdW5jdGlvbicpIHx8ICh2YWx1ZSA9PT0gJ2xldCcpIHx8ICh2YWx1ZSA9PT0gJ25ldycpIHx8XG5cdCAgICAgICAgICAgICAgICAgICAgKHZhbHVlID09PSAnc3VwZXInKSB8fCAodmFsdWUgPT09ICd0aGlzJykgfHwgKHZhbHVlID09PSAndHlwZW9mJykgfHxcblx0ICAgICAgICAgICAgICAgICAgICAodmFsdWUgPT09ICd2b2lkJykgfHwgKHZhbHVlID09PSAneWllbGQnKTtcblx0ICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICBkZWZhdWx0OlxuXHQgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiBzdGFydDtcblx0ICAgIH07XG5cdCAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlWWllbGRFeHByZXNzaW9uID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7XG5cdCAgICAgICAgdGhpcy5leHBlY3RLZXl3b3JkKCd5aWVsZCcpO1xuXHQgICAgICAgIHZhciBhcmd1bWVudCA9IG51bGw7XG5cdCAgICAgICAgdmFyIGRlbGVnYXRlID0gZmFsc2U7XG5cdCAgICAgICAgaWYgKCF0aGlzLmhhc0xpbmVUZXJtaW5hdG9yKSB7XG5cdCAgICAgICAgICAgIHZhciBwcmV2aW91c0FsbG93WWllbGQgPSB0aGlzLmNvbnRleHQuYWxsb3dZaWVsZDtcblx0ICAgICAgICAgICAgdGhpcy5jb250ZXh0LmFsbG93WWllbGQgPSBmYWxzZTtcblx0ICAgICAgICAgICAgZGVsZWdhdGUgPSB0aGlzLm1hdGNoKCcqJyk7XG5cdCAgICAgICAgICAgIGlmIChkZWxlZ2F0ZSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTtcblx0ICAgICAgICAgICAgICAgIGFyZ3VtZW50ID0gdGhpcy5wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5pc1N0YXJ0T2ZFeHByZXNzaW9uKCkpIHtcblx0ICAgICAgICAgICAgICAgIGFyZ3VtZW50ID0gdGhpcy5wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5jb250ZXh0LmFsbG93WWllbGQgPSBwcmV2aW91c0FsbG93WWllbGQ7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLllpZWxkRXhwcmVzc2lvbihhcmd1bWVudCwgZGVsZWdhdGUpKTtcblx0ICAgIH07XG5cdCAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1jbGFzcy1kZWZpbml0aW9uc1xuXHQgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZUNsYXNzRWxlbWVudCA9IGZ1bmN0aW9uIChoYXNDb25zdHJ1Y3Rvcikge1xuXHQgICAgICAgIHZhciB0b2tlbiA9IHRoaXMubG9va2FoZWFkO1xuXHQgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7XG5cdCAgICAgICAgdmFyIGtpbmQgPSAnJztcblx0ICAgICAgICB2YXIga2V5ID0gbnVsbDtcblx0ICAgICAgICB2YXIgdmFsdWUgPSBudWxsO1xuXHQgICAgICAgIHZhciBjb21wdXRlZCA9IGZhbHNlO1xuXHQgICAgICAgIHZhciBtZXRob2QgPSBmYWxzZTtcblx0ICAgICAgICB2YXIgaXNTdGF0aWMgPSBmYWxzZTtcblx0ICAgICAgICB2YXIgaXNBc3luYyA9IGZhbHNlO1xuXHQgICAgICAgIGlmICh0aGlzLm1hdGNoKCcqJykpIHtcblx0ICAgICAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgZWxzZSB7XG5cdCAgICAgICAgICAgIGNvbXB1dGVkID0gdGhpcy5tYXRjaCgnWycpO1xuXHQgICAgICAgICAgICBrZXkgPSB0aGlzLnBhcnNlT2JqZWN0UHJvcGVydHlLZXkoKTtcblx0ICAgICAgICAgICAgdmFyIGlkID0ga2V5O1xuXHQgICAgICAgICAgICBpZiAoaWQubmFtZSA9PT0gJ3N0YXRpYycgJiYgKHRoaXMucXVhbGlmaWVkUHJvcGVydHlOYW1lKHRoaXMubG9va2FoZWFkKSB8fCB0aGlzLm1hdGNoKCcqJykpKSB7XG5cdCAgICAgICAgICAgICAgICB0b2tlbiA9IHRoaXMubG9va2FoZWFkO1xuXHQgICAgICAgICAgICAgICAgaXNTdGF0aWMgPSB0cnVlO1xuXHQgICAgICAgICAgICAgICAgY29tcHV0ZWQgPSB0aGlzLm1hdGNoKCdbJyk7XG5cdCAgICAgICAgICAgICAgICBpZiAodGhpcy5tYXRjaCgnKicpKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIGtleSA9IHRoaXMucGFyc2VPYmplY3RQcm9wZXJ0eUtleSgpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGlmICgodG9rZW4udHlwZSA9PT0gMyAvKiBJZGVudGlmaWVyICovKSAmJiAhdGhpcy5oYXNMaW5lVGVybWluYXRvciAmJiAodG9rZW4udmFsdWUgPT09ICdhc3luYycpKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgcHVuY3R1YXRvciA9IHRoaXMubG9va2FoZWFkLnZhbHVlO1xuXHQgICAgICAgICAgICAgICAgaWYgKHB1bmN0dWF0b3IgIT09ICc6JyAmJiBwdW5jdHVhdG9yICE9PSAnKCcgJiYgcHVuY3R1YXRvciAhPT0gJyonKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgaXNBc3luYyA9IHRydWU7XG5cdCAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSB0aGlzLmxvb2thaGVhZDtcblx0ICAgICAgICAgICAgICAgICAgICBrZXkgPSB0aGlzLnBhcnNlT2JqZWN0UHJvcGVydHlLZXkoKTtcblx0ICAgICAgICAgICAgICAgICAgICBpZiAodG9rZW4udHlwZSA9PT0gMyAvKiBJZGVudGlmaWVyICovICYmIHRva2VuLnZhbHVlID09PSAnY29uc3RydWN0b3InKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4odG9rZW4sIG1lc3NhZ2VzXzEuTWVzc2FnZXMuQ29uc3RydWN0b3JJc0FzeW5jKTtcblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgdmFyIGxvb2thaGVhZFByb3BlcnR5S2V5ID0gdGhpcy5xdWFsaWZpZWRQcm9wZXJ0eU5hbWUodGhpcy5sb29rYWhlYWQpO1xuXHQgICAgICAgIGlmICh0b2tlbi50eXBlID09PSAzIC8qIElkZW50aWZpZXIgKi8pIHtcblx0ICAgICAgICAgICAgaWYgKHRva2VuLnZhbHVlID09PSAnZ2V0JyAmJiBsb29rYWhlYWRQcm9wZXJ0eUtleSkge1xuXHQgICAgICAgICAgICAgICAga2luZCA9ICdnZXQnO1xuXHQgICAgICAgICAgICAgICAgY29tcHV0ZWQgPSB0aGlzLm1hdGNoKCdbJyk7XG5cdCAgICAgICAgICAgICAgICBrZXkgPSB0aGlzLnBhcnNlT2JqZWN0UHJvcGVydHlLZXkoKTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5hbGxvd1lpZWxkID0gZmFsc2U7XG5cdCAgICAgICAgICAgICAgICB2YWx1ZSA9IHRoaXMucGFyc2VHZXR0ZXJNZXRob2QoKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBlbHNlIGlmICh0b2tlbi52YWx1ZSA9PT0gJ3NldCcgJiYgbG9va2FoZWFkUHJvcGVydHlLZXkpIHtcblx0ICAgICAgICAgICAgICAgIGtpbmQgPSAnc2V0Jztcblx0ICAgICAgICAgICAgICAgIGNvbXB1dGVkID0gdGhpcy5tYXRjaCgnWycpO1xuXHQgICAgICAgICAgICAgICAga2V5ID0gdGhpcy5wYXJzZU9iamVjdFByb3BlcnR5S2V5KCk7XG5cdCAgICAgICAgICAgICAgICB2YWx1ZSA9IHRoaXMucGFyc2VTZXR0ZXJNZXRob2QoKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICBlbHNlIGlmICh0b2tlbi50eXBlID09PSA3IC8qIFB1bmN0dWF0b3IgKi8gJiYgdG9rZW4udmFsdWUgPT09ICcqJyAmJiBsb29rYWhlYWRQcm9wZXJ0eUtleSkge1xuXHQgICAgICAgICAgICBraW5kID0gJ2luaXQnO1xuXHQgICAgICAgICAgICBjb21wdXRlZCA9IHRoaXMubWF0Y2goJ1snKTtcblx0ICAgICAgICAgICAga2V5ID0gdGhpcy5wYXJzZU9iamVjdFByb3BlcnR5S2V5KCk7XG5cdCAgICAgICAgICAgIHZhbHVlID0gdGhpcy5wYXJzZUdlbmVyYXRvck1ldGhvZCgpO1xuXHQgICAgICAgICAgICBtZXRob2QgPSB0cnVlO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAoIWtpbmQgJiYga2V5ICYmIHRoaXMubWF0Y2goJygnKSkge1xuXHQgICAgICAgICAgICBraW5kID0gJ2luaXQnO1xuXHQgICAgICAgICAgICB2YWx1ZSA9IGlzQXN5bmMgPyB0aGlzLnBhcnNlUHJvcGVydHlNZXRob2RBc3luY0Z1bmN0aW9uKCkgOiB0aGlzLnBhcnNlUHJvcGVydHlNZXRob2RGdW5jdGlvbigpO1xuXHQgICAgICAgICAgICBtZXRob2QgPSB0cnVlO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAoIWtpbmQpIHtcblx0ICAgICAgICAgICAgdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbih0aGlzLmxvb2thaGVhZCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmIChraW5kID09PSAnaW5pdCcpIHtcblx0ICAgICAgICAgICAga2luZCA9ICdtZXRob2QnO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAoIWNvbXB1dGVkKSB7XG5cdCAgICAgICAgICAgIGlmIChpc1N0YXRpYyAmJiB0aGlzLmlzUHJvcGVydHlLZXkoa2V5LCAncHJvdG90eXBlJykpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4odG9rZW4sIG1lc3NhZ2VzXzEuTWVzc2FnZXMuU3RhdGljUHJvdG90eXBlKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBpZiAoIWlzU3RhdGljICYmIHRoaXMuaXNQcm9wZXJ0eUtleShrZXksICdjb25zdHJ1Y3RvcicpKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAoa2luZCAhPT0gJ21ldGhvZCcgfHwgIW1ldGhvZCB8fCAodmFsdWUgJiYgdmFsdWUuZ2VuZXJhdG9yKSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4odG9rZW4sIG1lc3NhZ2VzXzEuTWVzc2FnZXMuQ29uc3RydWN0b3JTcGVjaWFsTWV0aG9kKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIGlmIChoYXNDb25zdHJ1Y3Rvci52YWx1ZSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4odG9rZW4sIG1lc3NhZ2VzXzEuTWVzc2FnZXMuRHVwbGljYXRlQ29uc3RydWN0b3IpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgaGFzQ29uc3RydWN0b3IudmFsdWUgPSB0cnVlO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAga2luZCA9ICdjb25zdHJ1Y3Rvcic7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuTWV0aG9kRGVmaW5pdGlvbihrZXksIGNvbXB1dGVkLCB2YWx1ZSwga2luZCwgaXNTdGF0aWMpKTtcblx0ICAgIH07XG5cdCAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlQ2xhc3NFbGVtZW50TGlzdCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgYm9keSA9IFtdO1xuXHQgICAgICAgIHZhciBoYXNDb25zdHJ1Y3RvciA9IHsgdmFsdWU6IGZhbHNlIH07XG5cdCAgICAgICAgdGhpcy5leHBlY3QoJ3snKTtcblx0ICAgICAgICB3aGlsZSAoIXRoaXMubWF0Y2goJ30nKSkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5tYXRjaCgnOycpKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLm5leHRUb2tlbigpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgYm9keS5wdXNoKHRoaXMucGFyc2VDbGFzc0VsZW1lbnQoaGFzQ29uc3RydWN0b3IpKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLmV4cGVjdCgnfScpO1xuXHQgICAgICAgIHJldHVybiBib2R5O1xuXHQgICAgfTtcblx0ICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VDbGFzc0JvZHkgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTtcblx0ICAgICAgICB2YXIgZWxlbWVudExpc3QgPSB0aGlzLnBhcnNlQ2xhc3NFbGVtZW50TGlzdCgpO1xuXHQgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLkNsYXNzQm9keShlbGVtZW50TGlzdCkpO1xuXHQgICAgfTtcblx0ICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VDbGFzc0RlY2xhcmF0aW9uID0gZnVuY3Rpb24gKGlkZW50aWZpZXJJc09wdGlvbmFsKSB7XG5cdCAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTtcblx0ICAgICAgICB2YXIgcHJldmlvdXNTdHJpY3QgPSB0aGlzLmNvbnRleHQuc3RyaWN0O1xuXHQgICAgICAgIHRoaXMuY29udGV4dC5zdHJpY3QgPSB0cnVlO1xuXHQgICAgICAgIHRoaXMuZXhwZWN0S2V5d29yZCgnY2xhc3MnKTtcblx0ICAgICAgICB2YXIgaWQgPSAoaWRlbnRpZmllcklzT3B0aW9uYWwgJiYgKHRoaXMubG9va2FoZWFkLnR5cGUgIT09IDMgLyogSWRlbnRpZmllciAqLykpID8gbnVsbCA6IHRoaXMucGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoKTtcblx0ICAgICAgICB2YXIgc3VwZXJDbGFzcyA9IG51bGw7XG5cdCAgICAgICAgaWYgKHRoaXMubWF0Y2hLZXl3b3JkKCdleHRlbmRzJykpIHtcblx0ICAgICAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTtcblx0ICAgICAgICAgICAgc3VwZXJDbGFzcyA9IHRoaXMuaXNvbGF0ZUNvdmVyR3JhbW1hcih0aGlzLnBhcnNlTGVmdEhhbmRTaWRlRXhwcmVzc2lvbkFsbG93Q2FsbCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHZhciBjbGFzc0JvZHkgPSB0aGlzLnBhcnNlQ2xhc3NCb2R5KCk7XG5cdCAgICAgICAgdGhpcy5jb250ZXh0LnN0cmljdCA9IHByZXZpb3VzU3RyaWN0O1xuXHQgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLkNsYXNzRGVjbGFyYXRpb24oaWQsIHN1cGVyQ2xhc3MsIGNsYXNzQm9keSkpO1xuXHQgICAgfTtcblx0ICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VDbGFzc0V4cHJlc3Npb24gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTtcblx0ICAgICAgICB2YXIgcHJldmlvdXNTdHJpY3QgPSB0aGlzLmNvbnRleHQuc3RyaWN0O1xuXHQgICAgICAgIHRoaXMuY29udGV4dC5zdHJpY3QgPSB0cnVlO1xuXHQgICAgICAgIHRoaXMuZXhwZWN0S2V5d29yZCgnY2xhc3MnKTtcblx0ICAgICAgICB2YXIgaWQgPSAodGhpcy5sb29rYWhlYWQudHlwZSA9PT0gMyAvKiBJZGVudGlmaWVyICovKSA/IHRoaXMucGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoKSA6IG51bGw7XG5cdCAgICAgICAgdmFyIHN1cGVyQ2xhc3MgPSBudWxsO1xuXHQgICAgICAgIGlmICh0aGlzLm1hdGNoS2V5d29yZCgnZXh0ZW5kcycpKSB7XG5cdCAgICAgICAgICAgIHRoaXMubmV4dFRva2VuKCk7XG5cdCAgICAgICAgICAgIHN1cGVyQ2xhc3MgPSB0aGlzLmlzb2xhdGVDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUxlZnRIYW5kU2lkZUV4cHJlc3Npb25BbGxvd0NhbGwpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB2YXIgY2xhc3NCb2R5ID0gdGhpcy5wYXJzZUNsYXNzQm9keSgpO1xuXHQgICAgICAgIHRoaXMuY29udGV4dC5zdHJpY3QgPSBwcmV2aW91c1N0cmljdDtcblx0ICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5DbGFzc0V4cHJlc3Npb24oaWQsIHN1cGVyQ2xhc3MsIGNsYXNzQm9keSkpO1xuXHQgICAgfTtcblx0ICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXNjcmlwdHNcblx0ICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLW1vZHVsZXNcblx0ICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VNb2R1bGUgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5jb250ZXh0LnN0cmljdCA9IHRydWU7XG5cdCAgICAgICAgdGhpcy5jb250ZXh0LmlzTW9kdWxlID0gdHJ1ZTtcblx0ICAgICAgICB0aGlzLnNjYW5uZXIuaXNNb2R1bGUgPSB0cnVlO1xuXHQgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7XG5cdCAgICAgICAgdmFyIGJvZHkgPSB0aGlzLnBhcnNlRGlyZWN0aXZlUHJvbG9ndWVzKCk7XG5cdCAgICAgICAgd2hpbGUgKHRoaXMubG9va2FoZWFkLnR5cGUgIT09IDIgLyogRU9GICovKSB7XG5cdCAgICAgICAgICAgIGJvZHkucHVzaCh0aGlzLnBhcnNlU3RhdGVtZW50TGlzdEl0ZW0oKSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLk1vZHVsZShib2R5KSk7XG5cdCAgICB9O1xuXHQgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZVNjcmlwdCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpO1xuXHQgICAgICAgIHZhciBib2R5ID0gdGhpcy5wYXJzZURpcmVjdGl2ZVByb2xvZ3VlcygpO1xuXHQgICAgICAgIHdoaWxlICh0aGlzLmxvb2thaGVhZC50eXBlICE9PSAyIC8qIEVPRiAqLykge1xuXHQgICAgICAgICAgICBib2R5LnB1c2godGhpcy5wYXJzZVN0YXRlbWVudExpc3RJdGVtKCkpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5TY3JpcHQoYm9keSkpO1xuXHQgICAgfTtcblx0ICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWltcG9ydHNcblx0ICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VNb2R1bGVTcGVjaWZpZXIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTtcblx0ICAgICAgICBpZiAodGhpcy5sb29rYWhlYWQudHlwZSAhPT0gOCAvKiBTdHJpbmdMaXRlcmFsICovKSB7XG5cdCAgICAgICAgICAgIHRoaXMudGhyb3dFcnJvcihtZXNzYWdlc18xLk1lc3NhZ2VzLkludmFsaWRNb2R1bGVTcGVjaWZpZXIpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB2YXIgdG9rZW4gPSB0aGlzLm5leHRUb2tlbigpO1xuXHQgICAgICAgIHZhciByYXcgPSB0aGlzLmdldFRva2VuUmF3KHRva2VuKTtcblx0ICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5MaXRlcmFsKHRva2VuLnZhbHVlLCByYXcpKTtcblx0ICAgIH07XG5cdCAgICAvLyBpbXBvcnQgezxmb28gYXMgYmFyPn0gLi4uO1xuXHQgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZUltcG9ydFNwZWNpZmllciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpO1xuXHQgICAgICAgIHZhciBpbXBvcnRlZDtcblx0ICAgICAgICB2YXIgbG9jYWw7XG5cdCAgICAgICAgaWYgKHRoaXMubG9va2FoZWFkLnR5cGUgPT09IDMgLyogSWRlbnRpZmllciAqLykge1xuXHQgICAgICAgICAgICBpbXBvcnRlZCA9IHRoaXMucGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoKTtcblx0ICAgICAgICAgICAgbG9jYWwgPSBpbXBvcnRlZDtcblx0ICAgICAgICAgICAgaWYgKHRoaXMubWF0Y2hDb250ZXh0dWFsS2V5d29yZCgnYXMnKSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTtcblx0ICAgICAgICAgICAgICAgIGxvY2FsID0gdGhpcy5wYXJzZVZhcmlhYmxlSWRlbnRpZmllcigpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGVsc2Uge1xuXHQgICAgICAgICAgICBpbXBvcnRlZCA9IHRoaXMucGFyc2VJZGVudGlmaWVyTmFtZSgpO1xuXHQgICAgICAgICAgICBsb2NhbCA9IGltcG9ydGVkO1xuXHQgICAgICAgICAgICBpZiAodGhpcy5tYXRjaENvbnRleHR1YWxLZXl3b3JkKCdhcycpKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLm5leHRUb2tlbigpO1xuXHQgICAgICAgICAgICAgICAgbG9jYWwgPSB0aGlzLnBhcnNlVmFyaWFibGVJZGVudGlmaWVyKCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKHRoaXMubmV4dFRva2VuKCkpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLkltcG9ydFNwZWNpZmllcihsb2NhbCwgaW1wb3J0ZWQpKTtcblx0ICAgIH07XG5cdCAgICAvLyB7Zm9vLCBiYXIgYXMgYmFzfVxuXHQgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZU5hbWVkSW1wb3J0cyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLmV4cGVjdCgneycpO1xuXHQgICAgICAgIHZhciBzcGVjaWZpZXJzID0gW107XG5cdCAgICAgICAgd2hpbGUgKCF0aGlzLm1hdGNoKCd9JykpIHtcblx0ICAgICAgICAgICAgc3BlY2lmaWVycy5wdXNoKHRoaXMucGFyc2VJbXBvcnRTcGVjaWZpZXIoKSk7XG5cdCAgICAgICAgICAgIGlmICghdGhpcy5tYXRjaCgnfScpKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmV4cGVjdCgnLCcpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuZXhwZWN0KCd9Jyk7XG5cdCAgICAgICAgcmV0dXJuIHNwZWNpZmllcnM7XG5cdCAgICB9O1xuXHQgICAgLy8gaW1wb3J0IDxmb28+IC4uLjtcblx0ICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VJbXBvcnREZWZhdWx0U3BlY2lmaWVyID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7XG5cdCAgICAgICAgdmFyIGxvY2FsID0gdGhpcy5wYXJzZUlkZW50aWZpZXJOYW1lKCk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuSW1wb3J0RGVmYXVsdFNwZWNpZmllcihsb2NhbCkpO1xuXHQgICAgfTtcblx0ICAgIC8vIGltcG9ydCA8KiBhcyBmb28+IC4uLjtcblx0ICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VJbXBvcnROYW1lc3BhY2VTcGVjaWZpZXIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTtcblx0ICAgICAgICB0aGlzLmV4cGVjdCgnKicpO1xuXHQgICAgICAgIGlmICghdGhpcy5tYXRjaENvbnRleHR1YWxLZXl3b3JkKCdhcycpKSB7XG5cdCAgICAgICAgICAgIHRoaXMudGhyb3dFcnJvcihtZXNzYWdlc18xLk1lc3NhZ2VzLk5vQXNBZnRlckltcG9ydE5hbWVzcGFjZSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMubmV4dFRva2VuKCk7XG5cdCAgICAgICAgdmFyIGxvY2FsID0gdGhpcy5wYXJzZUlkZW50aWZpZXJOYW1lKCk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyKGxvY2FsKSk7XG5cdCAgICB9O1xuXHQgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZUltcG9ydERlY2xhcmF0aW9uID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGlmICh0aGlzLmNvbnRleHQuaW5GdW5jdGlvbkJvZHkpIHtcblx0ICAgICAgICAgICAgdGhpcy50aHJvd0Vycm9yKG1lc3NhZ2VzXzEuTWVzc2FnZXMuSWxsZWdhbEltcG9ydERlY2xhcmF0aW9uKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTtcblx0ICAgICAgICB0aGlzLmV4cGVjdEtleXdvcmQoJ2ltcG9ydCcpO1xuXHQgICAgICAgIHZhciBzcmM7XG5cdCAgICAgICAgdmFyIHNwZWNpZmllcnMgPSBbXTtcblx0ICAgICAgICBpZiAodGhpcy5sb29rYWhlYWQudHlwZSA9PT0gOCAvKiBTdHJpbmdMaXRlcmFsICovKSB7XG5cdCAgICAgICAgICAgIC8vIGltcG9ydCAnZm9vJztcblx0ICAgICAgICAgICAgc3JjID0gdGhpcy5wYXJzZU1vZHVsZVNwZWNpZmllcigpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBlbHNlIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMubWF0Y2goJ3snKSkge1xuXHQgICAgICAgICAgICAgICAgLy8gaW1wb3J0IHtiYXJ9XG5cdCAgICAgICAgICAgICAgICBzcGVjaWZpZXJzID0gc3BlY2lmaWVycy5jb25jYXQodGhpcy5wYXJzZU5hbWVkSW1wb3J0cygpKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBlbHNlIGlmICh0aGlzLm1hdGNoKCcqJykpIHtcblx0ICAgICAgICAgICAgICAgIC8vIGltcG9ydCAqIGFzIGZvb1xuXHQgICAgICAgICAgICAgICAgc3BlY2lmaWVycy5wdXNoKHRoaXMucGFyc2VJbXBvcnROYW1lc3BhY2VTcGVjaWZpZXIoKSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5pc0lkZW50aWZpZXJOYW1lKHRoaXMubG9va2FoZWFkKSAmJiAhdGhpcy5tYXRjaEtleXdvcmQoJ2RlZmF1bHQnKSkge1xuXHQgICAgICAgICAgICAgICAgLy8gaW1wb3J0IGZvb1xuXHQgICAgICAgICAgICAgICAgc3BlY2lmaWVycy5wdXNoKHRoaXMucGFyc2VJbXBvcnREZWZhdWx0U3BlY2lmaWVyKCkpO1xuXHQgICAgICAgICAgICAgICAgaWYgKHRoaXMubWF0Y2goJywnKSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dFRva2VuKCk7XG5cdCAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubWF0Y2goJyonKSkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAvLyBpbXBvcnQgZm9vLCAqIGFzIGZvb1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZXJzLnB1c2godGhpcy5wYXJzZUltcG9ydE5hbWVzcGFjZVNwZWNpZmllcigpKTtcblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5tYXRjaCgneycpKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIC8vIGltcG9ydCBmb28sIHtiYXJ9XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmllcnMgPSBzcGVjaWZpZXJzLmNvbmNhdCh0aGlzLnBhcnNlTmFtZWRJbXBvcnRzKCkpO1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgICAgICBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbih0aGlzLmxvb2thaGVhZCk7XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbih0aGlzLm5leHRUb2tlbigpKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBpZiAoIXRoaXMubWF0Y2hDb250ZXh0dWFsS2V5d29yZCgnZnJvbScpKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgbWVzc2FnZSA9IHRoaXMubG9va2FoZWFkLnZhbHVlID8gbWVzc2FnZXNfMS5NZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4gOiBtZXNzYWdlc18xLk1lc3NhZ2VzLk1pc3NpbmdGcm9tQ2xhdXNlO1xuXHQgICAgICAgICAgICAgICAgdGhpcy50aHJvd0Vycm9yKG1lc3NhZ2UsIHRoaXMubG9va2FoZWFkLnZhbHVlKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLm5leHRUb2tlbigpO1xuXHQgICAgICAgICAgICBzcmMgPSB0aGlzLnBhcnNlTW9kdWxlU3BlY2lmaWVyKCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuY29uc3VtZVNlbWljb2xvbigpO1xuXHQgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLkltcG9ydERlY2xhcmF0aW9uKHNwZWNpZmllcnMsIHNyYykpO1xuXHQgICAgfTtcblx0ICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWV4cG9ydHNcblx0ICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VFeHBvcnRTcGVjaWZpZXIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTtcblx0ICAgICAgICB2YXIgbG9jYWwgPSB0aGlzLnBhcnNlSWRlbnRpZmllck5hbWUoKTtcblx0ICAgICAgICB2YXIgZXhwb3J0ZWQgPSBsb2NhbDtcblx0ICAgICAgICBpZiAodGhpcy5tYXRjaENvbnRleHR1YWxLZXl3b3JkKCdhcycpKSB7XG5cdCAgICAgICAgICAgIHRoaXMubmV4dFRva2VuKCk7XG5cdCAgICAgICAgICAgIGV4cG9ydGVkID0gdGhpcy5wYXJzZUlkZW50aWZpZXJOYW1lKCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLkV4cG9ydFNwZWNpZmllcihsb2NhbCwgZXhwb3J0ZWQpKTtcblx0ICAgIH07XG5cdCAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlRXhwb3J0RGVjbGFyYXRpb24gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuY29udGV4dC5pbkZ1bmN0aW9uQm9keSkge1xuXHQgICAgICAgICAgICB0aGlzLnRocm93RXJyb3IobWVzc2FnZXNfMS5NZXNzYWdlcy5JbGxlZ2FsRXhwb3J0RGVjbGFyYXRpb24pO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpO1xuXHQgICAgICAgIHRoaXMuZXhwZWN0S2V5d29yZCgnZXhwb3J0Jyk7XG5cdCAgICAgICAgdmFyIGV4cG9ydERlY2xhcmF0aW9uO1xuXHQgICAgICAgIGlmICh0aGlzLm1hdGNoS2V5d29yZCgnZGVmYXVsdCcpKSB7XG5cdCAgICAgICAgICAgIC8vIGV4cG9ydCBkZWZhdWx0IC4uLlxuXHQgICAgICAgICAgICB0aGlzLm5leHRUb2tlbigpO1xuXHQgICAgICAgICAgICBpZiAodGhpcy5tYXRjaEtleXdvcmQoJ2Z1bmN0aW9uJykpIHtcblx0ICAgICAgICAgICAgICAgIC8vIGV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGZvbyAoKSB7fVxuXHQgICAgICAgICAgICAgICAgLy8gZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKCkge31cblx0ICAgICAgICAgICAgICAgIHZhciBkZWNsYXJhdGlvbiA9IHRoaXMucGFyc2VGdW5jdGlvbkRlY2xhcmF0aW9uKHRydWUpO1xuXHQgICAgICAgICAgICAgICAgZXhwb3J0RGVjbGFyYXRpb24gPSB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLkV4cG9ydERlZmF1bHREZWNsYXJhdGlvbihkZWNsYXJhdGlvbikpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMubWF0Y2hLZXl3b3JkKCdjbGFzcycpKSB7XG5cdCAgICAgICAgICAgICAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBmb28ge31cblx0ICAgICAgICAgICAgICAgIHZhciBkZWNsYXJhdGlvbiA9IHRoaXMucGFyc2VDbGFzc0RlY2xhcmF0aW9uKHRydWUpO1xuXHQgICAgICAgICAgICAgICAgZXhwb3J0RGVjbGFyYXRpb24gPSB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLkV4cG9ydERlZmF1bHREZWNsYXJhdGlvbihkZWNsYXJhdGlvbikpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMubWF0Y2hDb250ZXh0dWFsS2V5d29yZCgnYXN5bmMnKSkge1xuXHQgICAgICAgICAgICAgICAgLy8gZXhwb3J0IGRlZmF1bHQgYXN5bmMgZnVuY3Rpb24gZiAoKSB7fVxuXHQgICAgICAgICAgICAgICAgLy8gZXhwb3J0IGRlZmF1bHQgYXN5bmMgZnVuY3Rpb24gKCkge31cblx0ICAgICAgICAgICAgICAgIC8vIGV4cG9ydCBkZWZhdWx0IGFzeW5jIHggPT4geFxuXHQgICAgICAgICAgICAgICAgdmFyIGRlY2xhcmF0aW9uID0gdGhpcy5tYXRjaEFzeW5jRnVuY3Rpb24oKSA/IHRoaXMucGFyc2VGdW5jdGlvbkRlY2xhcmF0aW9uKHRydWUpIDogdGhpcy5wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7XG5cdCAgICAgICAgICAgICAgICBleHBvcnREZWNsYXJhdGlvbiA9IHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uKGRlY2xhcmF0aW9uKSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgZWxzZSB7XG5cdCAgICAgICAgICAgICAgICBpZiAodGhpcy5tYXRjaENvbnRleHR1YWxLZXl3b3JkKCdmcm9tJykpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLnRocm93RXJyb3IobWVzc2FnZXNfMS5NZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sIHRoaXMubG9va2FoZWFkLnZhbHVlKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIC8vIGV4cG9ydCBkZWZhdWx0IHt9O1xuXHQgICAgICAgICAgICAgICAgLy8gZXhwb3J0IGRlZmF1bHQgW107XG5cdCAgICAgICAgICAgICAgICAvLyBleHBvcnQgZGVmYXVsdCAoMSArIDIpO1xuXHQgICAgICAgICAgICAgICAgdmFyIGRlY2xhcmF0aW9uID0gdGhpcy5tYXRjaCgneycpID8gdGhpcy5wYXJzZU9iamVjdEluaXRpYWxpemVyKCkgOlxuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMubWF0Y2goJ1snKSA/IHRoaXMucGFyc2VBcnJheUluaXRpYWxpemVyKCkgOiB0aGlzLnBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oKTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuY29uc3VtZVNlbWljb2xvbigpO1xuXHQgICAgICAgICAgICAgICAgZXhwb3J0RGVjbGFyYXRpb24gPSB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLkV4cG9ydERlZmF1bHREZWNsYXJhdGlvbihkZWNsYXJhdGlvbikpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGVsc2UgaWYgKHRoaXMubWF0Y2goJyonKSkge1xuXHQgICAgICAgICAgICAvLyBleHBvcnQgKiBmcm9tICdmb28nO1xuXHQgICAgICAgICAgICB0aGlzLm5leHRUb2tlbigpO1xuXHQgICAgICAgICAgICBpZiAoIXRoaXMubWF0Y2hDb250ZXh0dWFsS2V5d29yZCgnZnJvbScpKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgbWVzc2FnZSA9IHRoaXMubG9va2FoZWFkLnZhbHVlID8gbWVzc2FnZXNfMS5NZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4gOiBtZXNzYWdlc18xLk1lc3NhZ2VzLk1pc3NpbmdGcm9tQ2xhdXNlO1xuXHQgICAgICAgICAgICAgICAgdGhpcy50aHJvd0Vycm9yKG1lc3NhZ2UsIHRoaXMubG9va2FoZWFkLnZhbHVlKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLm5leHRUb2tlbigpO1xuXHQgICAgICAgICAgICB2YXIgc3JjID0gdGhpcy5wYXJzZU1vZHVsZVNwZWNpZmllcigpO1xuXHQgICAgICAgICAgICB0aGlzLmNvbnN1bWVTZW1pY29sb24oKTtcblx0ICAgICAgICAgICAgZXhwb3J0RGVjbGFyYXRpb24gPSB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLkV4cG9ydEFsbERlY2xhcmF0aW9uKHNyYykpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBlbHNlIGlmICh0aGlzLmxvb2thaGVhZC50eXBlID09PSA0IC8qIEtleXdvcmQgKi8pIHtcblx0ICAgICAgICAgICAgLy8gZXhwb3J0IHZhciBmID0gMTtcblx0ICAgICAgICAgICAgdmFyIGRlY2xhcmF0aW9uID0gdm9pZCAwO1xuXHQgICAgICAgICAgICBzd2l0Y2ggKHRoaXMubG9va2FoZWFkLnZhbHVlKSB7XG5cdCAgICAgICAgICAgICAgICBjYXNlICdsZXQnOlxuXHQgICAgICAgICAgICAgICAgY2FzZSAnY29uc3QnOlxuXHQgICAgICAgICAgICAgICAgICAgIGRlY2xhcmF0aW9uID0gdGhpcy5wYXJzZUxleGljYWxEZWNsYXJhdGlvbih7IGluRm9yOiBmYWxzZSB9KTtcblx0ICAgICAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgICAgIGNhc2UgJ3Zhcic6XG5cdCAgICAgICAgICAgICAgICBjYXNlICdjbGFzcyc6XG5cdCAgICAgICAgICAgICAgICBjYXNlICdmdW5jdGlvbic6XG5cdCAgICAgICAgICAgICAgICAgICAgZGVjbGFyYXRpb24gPSB0aGlzLnBhcnNlU3RhdGVtZW50TGlzdEl0ZW0oKTtcblx0ICAgICAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbih0aGlzLmxvb2thaGVhZCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgZXhwb3J0RGVjbGFyYXRpb24gPSB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLkV4cG9ydE5hbWVkRGVjbGFyYXRpb24oZGVjbGFyYXRpb24sIFtdLCBudWxsKSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGVsc2UgaWYgKHRoaXMubWF0Y2hBc3luY0Z1bmN0aW9uKCkpIHtcblx0ICAgICAgICAgICAgdmFyIGRlY2xhcmF0aW9uID0gdGhpcy5wYXJzZUZ1bmN0aW9uRGVjbGFyYXRpb24oKTtcblx0ICAgICAgICAgICAgZXhwb3J0RGVjbGFyYXRpb24gPSB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLkV4cG9ydE5hbWVkRGVjbGFyYXRpb24oZGVjbGFyYXRpb24sIFtdLCBudWxsKSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGVsc2Uge1xuXHQgICAgICAgICAgICB2YXIgc3BlY2lmaWVycyA9IFtdO1xuXHQgICAgICAgICAgICB2YXIgc291cmNlID0gbnVsbDtcblx0ICAgICAgICAgICAgdmFyIGlzRXhwb3J0RnJvbUlkZW50aWZpZXIgPSBmYWxzZTtcblx0ICAgICAgICAgICAgdGhpcy5leHBlY3QoJ3snKTtcblx0ICAgICAgICAgICAgd2hpbGUgKCF0aGlzLm1hdGNoKCd9JykpIHtcblx0ICAgICAgICAgICAgICAgIGlzRXhwb3J0RnJvbUlkZW50aWZpZXIgPSBpc0V4cG9ydEZyb21JZGVudGlmaWVyIHx8IHRoaXMubWF0Y2hLZXl3b3JkKCdkZWZhdWx0Jyk7XG5cdCAgICAgICAgICAgICAgICBzcGVjaWZpZXJzLnB1c2godGhpcy5wYXJzZUV4cG9ydFNwZWNpZmllcigpKTtcblx0ICAgICAgICAgICAgICAgIGlmICghdGhpcy5tYXRjaCgnfScpKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5leHBlY3QoJywnKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLmV4cGVjdCgnfScpO1xuXHQgICAgICAgICAgICBpZiAodGhpcy5tYXRjaENvbnRleHR1YWxLZXl3b3JkKCdmcm9tJykpIHtcblx0ICAgICAgICAgICAgICAgIC8vIGV4cG9ydCB7ZGVmYXVsdH0gZnJvbSAnZm9vJztcblx0ICAgICAgICAgICAgICAgIC8vIGV4cG9ydCB7Zm9vfSBmcm9tICdmb28nO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTtcblx0ICAgICAgICAgICAgICAgIHNvdXJjZSA9IHRoaXMucGFyc2VNb2R1bGVTcGVjaWZpZXIoKTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuY29uc3VtZVNlbWljb2xvbigpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGVsc2UgaWYgKGlzRXhwb3J0RnJvbUlkZW50aWZpZXIpIHtcblx0ICAgICAgICAgICAgICAgIC8vIGV4cG9ydCB7ZGVmYXVsdH07IC8vIG1pc3NpbmcgZnJvbUNsYXVzZVxuXHQgICAgICAgICAgICAgICAgdmFyIG1lc3NhZ2UgPSB0aGlzLmxvb2thaGVhZC52YWx1ZSA/IG1lc3NhZ2VzXzEuTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuIDogbWVzc2FnZXNfMS5NZXNzYWdlcy5NaXNzaW5nRnJvbUNsYXVzZTtcblx0ICAgICAgICAgICAgICAgIHRoaXMudGhyb3dFcnJvcihtZXNzYWdlLCB0aGlzLmxvb2thaGVhZC52YWx1ZSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAvLyBleHBvcnQge2Zvb307XG5cdCAgICAgICAgICAgICAgICB0aGlzLmNvbnN1bWVTZW1pY29sb24oKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBleHBvcnREZWNsYXJhdGlvbiA9IHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuRXhwb3J0TmFtZWREZWNsYXJhdGlvbihudWxsLCBzcGVjaWZpZXJzLCBzb3VyY2UpKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIGV4cG9ydERlY2xhcmF0aW9uO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBQYXJzZXI7XG5cdH0oKSk7XG5cdGV4cG9ydHMuUGFyc2VyID0gUGFyc2VyO1xuXG5cbi8qKiovIH0sXG4vKiA5ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHRcInVzZSBzdHJpY3RcIjtcblx0Ly8gRW5zdXJlIHRoZSBjb25kaXRpb24gaXMgdHJ1ZSwgb3RoZXJ3aXNlIHRocm93IGFuIGVycm9yLlxuXHQvLyBUaGlzIGlzIG9ubHkgdG8gaGF2ZSBhIGJldHRlciBjb250cmFjdCBzZW1hbnRpYywgaS5lLiBhbm90aGVyIHNhZmV0eSBuZXRcblx0Ly8gdG8gY2F0Y2ggYSBsb2dpYyBlcnJvci4gVGhlIGNvbmRpdGlvbiBzaGFsbCBiZSBmdWxmaWxsZWQgaW4gbm9ybWFsIGNhc2UuXG5cdC8vIERvIE5PVCB1c2UgdGhpcyB0byBlbmZvcmNlIGEgY2VydGFpbiBjb25kaXRpb24gb24gYW55IHVzZXIgaW5wdXQuXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0ZnVuY3Rpb24gYXNzZXJ0KGNvbmRpdGlvbiwgbWVzc2FnZSkge1xuXHQgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG5cdCAgICBpZiAoIWNvbmRpdGlvbikge1xuXHQgICAgICAgIHRocm93IG5ldyBFcnJvcignQVNTRVJUOiAnICsgbWVzc2FnZSk7XG5cdCAgICB9XG5cdH1cblx0ZXhwb3J0cy5hc3NlcnQgPSBhc3NlcnQ7XG5cblxuLyoqKi8gfSxcbi8qIDEwICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHRcInVzZSBzdHJpY3RcIjtcblx0LyogdHNsaW50OmRpc2FibGU6bWF4LWNsYXNzZXMtcGVyLWZpbGUgKi9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHR2YXIgRXJyb3JIYW5kbGVyID0gKGZ1bmN0aW9uICgpIHtcblx0ICAgIGZ1bmN0aW9uIEVycm9ySGFuZGxlcigpIHtcblx0ICAgICAgICB0aGlzLmVycm9ycyA9IFtdO1xuXHQgICAgICAgIHRoaXMudG9sZXJhbnQgPSBmYWxzZTtcblx0ICAgIH1cblx0ICAgIEVycm9ySGFuZGxlci5wcm90b3R5cGUucmVjb3JkRXJyb3IgPSBmdW5jdGlvbiAoZXJyb3IpIHtcblx0ICAgICAgICB0aGlzLmVycm9ycy5wdXNoKGVycm9yKTtcblx0ICAgIH07XG5cdCAgICBFcnJvckhhbmRsZXIucHJvdG90eXBlLnRvbGVyYXRlID0gZnVuY3Rpb24gKGVycm9yKSB7XG5cdCAgICAgICAgaWYgKHRoaXMudG9sZXJhbnQpIHtcblx0ICAgICAgICAgICAgdGhpcy5yZWNvcmRFcnJvcihlcnJvcik7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGVsc2Uge1xuXHQgICAgICAgICAgICB0aHJvdyBlcnJvcjtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgRXJyb3JIYW5kbGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RFcnJvciA9IGZ1bmN0aW9uIChtc2csIGNvbHVtbikge1xuXHQgICAgICAgIHZhciBlcnJvciA9IG5ldyBFcnJvcihtc2cpO1xuXHQgICAgICAgIHRyeSB7XG5cdCAgICAgICAgICAgIHRocm93IGVycm9yO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBjYXRjaCAoYmFzZSkge1xuXHQgICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuXHQgICAgICAgICAgICBpZiAoT2JqZWN0LmNyZWF0ZSAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkpIHtcblx0ICAgICAgICAgICAgICAgIGVycm9yID0gT2JqZWN0LmNyZWF0ZShiYXNlKTtcblx0ICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlcnJvciwgJ2NvbHVtbicsIHsgdmFsdWU6IGNvbHVtbiB9KTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuXHQgICAgICAgIHJldHVybiBlcnJvcjtcblx0ICAgIH07XG5cdCAgICBFcnJvckhhbmRsZXIucHJvdG90eXBlLmNyZWF0ZUVycm9yID0gZnVuY3Rpb24gKGluZGV4LCBsaW5lLCBjb2wsIGRlc2NyaXB0aW9uKSB7XG5cdCAgICAgICAgdmFyIG1zZyA9ICdMaW5lICcgKyBsaW5lICsgJzogJyArIGRlc2NyaXB0aW9uO1xuXHQgICAgICAgIHZhciBlcnJvciA9IHRoaXMuY29uc3RydWN0RXJyb3IobXNnLCBjb2wpO1xuXHQgICAgICAgIGVycm9yLmluZGV4ID0gaW5kZXg7XG5cdCAgICAgICAgZXJyb3IubGluZU51bWJlciA9IGxpbmU7XG5cdCAgICAgICAgZXJyb3IuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjtcblx0ICAgICAgICByZXR1cm4gZXJyb3I7XG5cdCAgICB9O1xuXHQgICAgRXJyb3JIYW5kbGVyLnByb3RvdHlwZS50aHJvd0Vycm9yID0gZnVuY3Rpb24gKGluZGV4LCBsaW5lLCBjb2wsIGRlc2NyaXB0aW9uKSB7XG5cdCAgICAgICAgdGhyb3cgdGhpcy5jcmVhdGVFcnJvcihpbmRleCwgbGluZSwgY29sLCBkZXNjcmlwdGlvbik7XG5cdCAgICB9O1xuXHQgICAgRXJyb3JIYW5kbGVyLnByb3RvdHlwZS50b2xlcmF0ZUVycm9yID0gZnVuY3Rpb24gKGluZGV4LCBsaW5lLCBjb2wsIGRlc2NyaXB0aW9uKSB7XG5cdCAgICAgICAgdmFyIGVycm9yID0gdGhpcy5jcmVhdGVFcnJvcihpbmRleCwgbGluZSwgY29sLCBkZXNjcmlwdGlvbik7XG5cdCAgICAgICAgaWYgKHRoaXMudG9sZXJhbnQpIHtcblx0ICAgICAgICAgICAgdGhpcy5yZWNvcmRFcnJvcihlcnJvcik7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGVsc2Uge1xuXHQgICAgICAgICAgICB0aHJvdyBlcnJvcjtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIEVycm9ySGFuZGxlcjtcblx0fSgpKTtcblx0ZXhwb3J0cy5FcnJvckhhbmRsZXIgPSBFcnJvckhhbmRsZXI7XG5cblxuLyoqKi8gfSxcbi8qIDExICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHRcInVzZSBzdHJpY3RcIjtcblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHQvLyBFcnJvciBtZXNzYWdlcyBzaG91bGQgYmUgaWRlbnRpY2FsIHRvIFY4LlxuXHRleHBvcnRzLk1lc3NhZ2VzID0ge1xuXHQgICAgQmFkR2V0dGVyQXJpdHk6ICdHZXR0ZXIgbXVzdCBub3QgaGF2ZSBhbnkgZm9ybWFsIHBhcmFtZXRlcnMnLFxuXHQgICAgQmFkU2V0dGVyQXJpdHk6ICdTZXR0ZXIgbXVzdCBoYXZlIGV4YWN0bHkgb25lIGZvcm1hbCBwYXJhbWV0ZXInLFxuXHQgICAgQmFkU2V0dGVyUmVzdFBhcmFtZXRlcjogJ1NldHRlciBmdW5jdGlvbiBhcmd1bWVudCBtdXN0IG5vdCBiZSBhIHJlc3QgcGFyYW1ldGVyJyxcblx0ICAgIENvbnN0cnVjdG9ySXNBc3luYzogJ0NsYXNzIGNvbnN0cnVjdG9yIG1heSBub3QgYmUgYW4gYXN5bmMgbWV0aG9kJyxcblx0ICAgIENvbnN0cnVjdG9yU3BlY2lhbE1ldGhvZDogJ0NsYXNzIGNvbnN0cnVjdG9yIG1heSBub3QgYmUgYW4gYWNjZXNzb3InLFxuXHQgICAgRGVjbGFyYXRpb25NaXNzaW5nSW5pdGlhbGl6ZXI6ICdNaXNzaW5nIGluaXRpYWxpemVyIGluICUwIGRlY2xhcmF0aW9uJyxcblx0ICAgIERlZmF1bHRSZXN0UGFyYW1ldGVyOiAnVW5leHBlY3RlZCB0b2tlbiA9Jyxcblx0ICAgIER1cGxpY2F0ZUJpbmRpbmc6ICdEdXBsaWNhdGUgYmluZGluZyAlMCcsXG5cdCAgICBEdXBsaWNhdGVDb25zdHJ1Y3RvcjogJ0EgY2xhc3MgbWF5IG9ubHkgaGF2ZSBvbmUgY29uc3RydWN0b3InLFxuXHQgICAgRHVwbGljYXRlUHJvdG9Qcm9wZXJ0eTogJ0R1cGxpY2F0ZSBfX3Byb3RvX18gZmllbGRzIGFyZSBub3QgYWxsb3dlZCBpbiBvYmplY3QgbGl0ZXJhbHMnLFxuXHQgICAgRm9ySW5PZkxvb3BJbml0aWFsaXplcjogJyUwIGxvb3AgdmFyaWFibGUgZGVjbGFyYXRpb24gbWF5IG5vdCBoYXZlIGFuIGluaXRpYWxpemVyJyxcblx0ICAgIEdlbmVyYXRvckluTGVnYWN5Q29udGV4dDogJ0dlbmVyYXRvciBkZWNsYXJhdGlvbnMgYXJlIG5vdCBhbGxvd2VkIGluIGxlZ2FjeSBjb250ZXh0cycsXG5cdCAgICBJbGxlZ2FsQnJlYWs6ICdJbGxlZ2FsIGJyZWFrIHN0YXRlbWVudCcsXG5cdCAgICBJbGxlZ2FsQ29udGludWU6ICdJbGxlZ2FsIGNvbnRpbnVlIHN0YXRlbWVudCcsXG5cdCAgICBJbGxlZ2FsRXhwb3J0RGVjbGFyYXRpb246ICdVbmV4cGVjdGVkIHRva2VuJyxcblx0ICAgIElsbGVnYWxJbXBvcnREZWNsYXJhdGlvbjogJ1VuZXhwZWN0ZWQgdG9rZW4nLFxuXHQgICAgSWxsZWdhbExhbmd1YWdlTW9kZURpcmVjdGl2ZTogJ0lsbGVnYWwgXFwndXNlIHN0cmljdFxcJyBkaXJlY3RpdmUgaW4gZnVuY3Rpb24gd2l0aCBub24tc2ltcGxlIHBhcmFtZXRlciBsaXN0Jyxcblx0ICAgIElsbGVnYWxSZXR1cm46ICdJbGxlZ2FsIHJldHVybiBzdGF0ZW1lbnQnLFxuXHQgICAgSW52YWxpZEVzY2FwZWRSZXNlcnZlZFdvcmQ6ICdLZXl3b3JkIG11c3Qgbm90IGNvbnRhaW4gZXNjYXBlZCBjaGFyYWN0ZXJzJyxcblx0ICAgIEludmFsaWRIZXhFc2NhcGVTZXF1ZW5jZTogJ0ludmFsaWQgaGV4YWRlY2ltYWwgZXNjYXBlIHNlcXVlbmNlJyxcblx0ICAgIEludmFsaWRMSFNJbkFzc2lnbm1lbnQ6ICdJbnZhbGlkIGxlZnQtaGFuZCBzaWRlIGluIGFzc2lnbm1lbnQnLFxuXHQgICAgSW52YWxpZExIU0luRm9ySW46ICdJbnZhbGlkIGxlZnQtaGFuZCBzaWRlIGluIGZvci1pbicsXG5cdCAgICBJbnZhbGlkTEhTSW5Gb3JMb29wOiAnSW52YWxpZCBsZWZ0LWhhbmQgc2lkZSBpbiBmb3ItbG9vcCcsXG5cdCAgICBJbnZhbGlkTW9kdWxlU3BlY2lmaWVyOiAnVW5leHBlY3RlZCB0b2tlbicsXG5cdCAgICBJbnZhbGlkUmVnRXhwOiAnSW52YWxpZCByZWd1bGFyIGV4cHJlc3Npb24nLFxuXHQgICAgTGV0SW5MZXhpY2FsQmluZGluZzogJ2xldCBpcyBkaXNhbGxvd2VkIGFzIGEgbGV4aWNhbGx5IGJvdW5kIG5hbWUnLFxuXHQgICAgTWlzc2luZ0Zyb21DbGF1c2U6ICdVbmV4cGVjdGVkIHRva2VuJyxcblx0ICAgIE11bHRpcGxlRGVmYXVsdHNJblN3aXRjaDogJ01vcmUgdGhhbiBvbmUgZGVmYXVsdCBjbGF1c2UgaW4gc3dpdGNoIHN0YXRlbWVudCcsXG5cdCAgICBOZXdsaW5lQWZ0ZXJUaHJvdzogJ0lsbGVnYWwgbmV3bGluZSBhZnRlciB0aHJvdycsXG5cdCAgICBOb0FzQWZ0ZXJJbXBvcnROYW1lc3BhY2U6ICdVbmV4cGVjdGVkIHRva2VuJyxcblx0ICAgIE5vQ2F0Y2hPckZpbmFsbHk6ICdNaXNzaW5nIGNhdGNoIG9yIGZpbmFsbHkgYWZ0ZXIgdHJ5Jyxcblx0ICAgIFBhcmFtZXRlckFmdGVyUmVzdFBhcmFtZXRlcjogJ1Jlc3QgcGFyYW1ldGVyIG11c3QgYmUgbGFzdCBmb3JtYWwgcGFyYW1ldGVyJyxcblx0ICAgIFJlZGVjbGFyYXRpb246ICclMCBcXCclMVxcJyBoYXMgYWxyZWFkeSBiZWVuIGRlY2xhcmVkJyxcblx0ICAgIFN0YXRpY1Byb3RvdHlwZTogJ0NsYXNzZXMgbWF5IG5vdCBoYXZlIHN0YXRpYyBwcm9wZXJ0eSBuYW1lZCBwcm90b3R5cGUnLFxuXHQgICAgU3RyaWN0Q2F0Y2hWYXJpYWJsZTogJ0NhdGNoIHZhcmlhYmxlIG1heSBub3QgYmUgZXZhbCBvciBhcmd1bWVudHMgaW4gc3RyaWN0IG1vZGUnLFxuXHQgICAgU3RyaWN0RGVsZXRlOiAnRGVsZXRlIG9mIGFuIHVucXVhbGlmaWVkIGlkZW50aWZpZXIgaW4gc3RyaWN0IG1vZGUuJyxcblx0ICAgIFN0cmljdEZ1bmN0aW9uOiAnSW4gc3RyaWN0IG1vZGUgY29kZSwgZnVuY3Rpb25zIGNhbiBvbmx5IGJlIGRlY2xhcmVkIGF0IHRvcCBsZXZlbCBvciBpbnNpZGUgYSBibG9jaycsXG5cdCAgICBTdHJpY3RGdW5jdGlvbk5hbWU6ICdGdW5jdGlvbiBuYW1lIG1heSBub3QgYmUgZXZhbCBvciBhcmd1bWVudHMgaW4gc3RyaWN0IG1vZGUnLFxuXHQgICAgU3RyaWN0TEhTQXNzaWdubWVudDogJ0Fzc2lnbm1lbnQgdG8gZXZhbCBvciBhcmd1bWVudHMgaXMgbm90IGFsbG93ZWQgaW4gc3RyaWN0IG1vZGUnLFxuXHQgICAgU3RyaWN0TEhTUG9zdGZpeDogJ1Bvc3RmaXggaW5jcmVtZW50L2RlY3JlbWVudCBtYXkgbm90IGhhdmUgZXZhbCBvciBhcmd1bWVudHMgb3BlcmFuZCBpbiBzdHJpY3QgbW9kZScsXG5cdCAgICBTdHJpY3RMSFNQcmVmaXg6ICdQcmVmaXggaW5jcmVtZW50L2RlY3JlbWVudCBtYXkgbm90IGhhdmUgZXZhbCBvciBhcmd1bWVudHMgb3BlcmFuZCBpbiBzdHJpY3QgbW9kZScsXG5cdCAgICBTdHJpY3RNb2RlV2l0aDogJ1N0cmljdCBtb2RlIGNvZGUgbWF5IG5vdCBpbmNsdWRlIGEgd2l0aCBzdGF0ZW1lbnQnLFxuXHQgICAgU3RyaWN0T2N0YWxMaXRlcmFsOiAnT2N0YWwgbGl0ZXJhbHMgYXJlIG5vdCBhbGxvd2VkIGluIHN0cmljdCBtb2RlLicsXG5cdCAgICBTdHJpY3RQYXJhbUR1cGU6ICdTdHJpY3QgbW9kZSBmdW5jdGlvbiBtYXkgbm90IGhhdmUgZHVwbGljYXRlIHBhcmFtZXRlciBuYW1lcycsXG5cdCAgICBTdHJpY3RQYXJhbU5hbWU6ICdQYXJhbWV0ZXIgbmFtZSBldmFsIG9yIGFyZ3VtZW50cyBpcyBub3QgYWxsb3dlZCBpbiBzdHJpY3QgbW9kZScsXG5cdCAgICBTdHJpY3RSZXNlcnZlZFdvcmQ6ICdVc2Ugb2YgZnV0dXJlIHJlc2VydmVkIHdvcmQgaW4gc3RyaWN0IG1vZGUnLFxuXHQgICAgU3RyaWN0VmFyTmFtZTogJ1ZhcmlhYmxlIG5hbWUgbWF5IG5vdCBiZSBldmFsIG9yIGFyZ3VtZW50cyBpbiBzdHJpY3QgbW9kZScsXG5cdCAgICBUZW1wbGF0ZU9jdGFsTGl0ZXJhbDogJ09jdGFsIGxpdGVyYWxzIGFyZSBub3QgYWxsb3dlZCBpbiB0ZW1wbGF0ZSBzdHJpbmdzLicsXG5cdCAgICBVbmV4cGVjdGVkRU9TOiAnVW5leHBlY3RlZCBlbmQgb2YgaW5wdXQnLFxuXHQgICAgVW5leHBlY3RlZElkZW50aWZpZXI6ICdVbmV4cGVjdGVkIGlkZW50aWZpZXInLFxuXHQgICAgVW5leHBlY3RlZE51bWJlcjogJ1VuZXhwZWN0ZWQgbnVtYmVyJyxcblx0ICAgIFVuZXhwZWN0ZWRSZXNlcnZlZDogJ1VuZXhwZWN0ZWQgcmVzZXJ2ZWQgd29yZCcsXG5cdCAgICBVbmV4cGVjdGVkU3RyaW5nOiAnVW5leHBlY3RlZCBzdHJpbmcnLFxuXHQgICAgVW5leHBlY3RlZFRlbXBsYXRlOiAnVW5leHBlY3RlZCBxdWFzaSAlMCcsXG5cdCAgICBVbmV4cGVjdGVkVG9rZW46ICdVbmV4cGVjdGVkIHRva2VuICUwJyxcblx0ICAgIFVuZXhwZWN0ZWRUb2tlbklsbGVnYWw6ICdVbmV4cGVjdGVkIHRva2VuIElMTEVHQUwnLFxuXHQgICAgVW5rbm93bkxhYmVsOiAnVW5kZWZpbmVkIGxhYmVsIFxcJyUwXFwnJyxcblx0ICAgIFVudGVybWluYXRlZFJlZ0V4cDogJ0ludmFsaWQgcmVndWxhciBleHByZXNzaW9uOiBtaXNzaW5nIC8nXG5cdH07XG5cblxuLyoqKi8gfSxcbi8qIDEyICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHRcInVzZSBzdHJpY3RcIjtcblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHR2YXIgYXNzZXJ0XzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkpO1xuXHR2YXIgY2hhcmFjdGVyXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xuXHR2YXIgbWVzc2FnZXNfMSA9IF9fd2VicGFja19yZXF1aXJlX18oMTEpO1xuXHRmdW5jdGlvbiBoZXhWYWx1ZShjaCkge1xuXHQgICAgcmV0dXJuICcwMTIzNDU2Nzg5YWJjZGVmJy5pbmRleE9mKGNoLnRvTG93ZXJDYXNlKCkpO1xuXHR9XG5cdGZ1bmN0aW9uIG9jdGFsVmFsdWUoY2gpIHtcblx0ICAgIHJldHVybiAnMDEyMzQ1NjcnLmluZGV4T2YoY2gpO1xuXHR9XG5cdHZhciBTY2FubmVyID0gKGZ1bmN0aW9uICgpIHtcblx0ICAgIGZ1bmN0aW9uIFNjYW5uZXIoY29kZSwgaGFuZGxlcikge1xuXHQgICAgICAgIHRoaXMuc291cmNlID0gY29kZTtcblx0ICAgICAgICB0aGlzLmVycm9ySGFuZGxlciA9IGhhbmRsZXI7XG5cdCAgICAgICAgdGhpcy50cmFja0NvbW1lbnQgPSBmYWxzZTtcblx0ICAgICAgICB0aGlzLmlzTW9kdWxlID0gZmFsc2U7XG5cdCAgICAgICAgdGhpcy5sZW5ndGggPSBjb2RlLmxlbmd0aDtcblx0ICAgICAgICB0aGlzLmluZGV4ID0gMDtcblx0ICAgICAgICB0aGlzLmxpbmVOdW1iZXIgPSAoY29kZS5sZW5ndGggPiAwKSA/IDEgOiAwO1xuXHQgICAgICAgIHRoaXMubGluZVN0YXJ0ID0gMDtcblx0ICAgICAgICB0aGlzLmN1cmx5U3RhY2sgPSBbXTtcblx0ICAgIH1cblx0ICAgIFNjYW5uZXIucHJvdG90eXBlLnNhdmVTdGF0ZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4ge1xuXHQgICAgICAgICAgICBpbmRleDogdGhpcy5pbmRleCxcblx0ICAgICAgICAgICAgbGluZU51bWJlcjogdGhpcy5saW5lTnVtYmVyLFxuXHQgICAgICAgICAgICBsaW5lU3RhcnQ6IHRoaXMubGluZVN0YXJ0XG5cdCAgICAgICAgfTtcblx0ICAgIH07XG5cdCAgICBTY2FubmVyLnByb3RvdHlwZS5yZXN0b3JlU3RhdGUgPSBmdW5jdGlvbiAoc3RhdGUpIHtcblx0ICAgICAgICB0aGlzLmluZGV4ID0gc3RhdGUuaW5kZXg7XG5cdCAgICAgICAgdGhpcy5saW5lTnVtYmVyID0gc3RhdGUubGluZU51bWJlcjtcblx0ICAgICAgICB0aGlzLmxpbmVTdGFydCA9IHN0YXRlLmxpbmVTdGFydDtcblx0ICAgIH07XG5cdCAgICBTY2FubmVyLnByb3RvdHlwZS5lb2YgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuaW5kZXggPj0gdGhpcy5sZW5ndGg7XG5cdCAgICB9O1xuXHQgICAgU2Nhbm5lci5wcm90b3R5cGUudGhyb3dVbmV4cGVjdGVkVG9rZW4gPSBmdW5jdGlvbiAobWVzc2FnZSkge1xuXHQgICAgICAgIGlmIChtZXNzYWdlID09PSB2b2lkIDApIHsgbWVzc2FnZSA9IG1lc3NhZ2VzXzEuTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuSWxsZWdhbDsgfVxuXHQgICAgICAgIHJldHVybiB0aGlzLmVycm9ySGFuZGxlci50aHJvd0Vycm9yKHRoaXMuaW5kZXgsIHRoaXMubGluZU51bWJlciwgdGhpcy5pbmRleCAtIHRoaXMubGluZVN0YXJ0ICsgMSwgbWVzc2FnZSk7XG5cdCAgICB9O1xuXHQgICAgU2Nhbm5lci5wcm90b3R5cGUudG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4gPSBmdW5jdGlvbiAobWVzc2FnZSkge1xuXHQgICAgICAgIGlmIChtZXNzYWdlID09PSB2b2lkIDApIHsgbWVzc2FnZSA9IG1lc3NhZ2VzXzEuTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuSWxsZWdhbDsgfVxuXHQgICAgICAgIHRoaXMuZXJyb3JIYW5kbGVyLnRvbGVyYXRlRXJyb3IodGhpcy5pbmRleCwgdGhpcy5saW5lTnVtYmVyLCB0aGlzLmluZGV4IC0gdGhpcy5saW5lU3RhcnQgKyAxLCBtZXNzYWdlKTtcblx0ICAgIH07XG5cdCAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1jb21tZW50c1xuXHQgICAgU2Nhbm5lci5wcm90b3R5cGUuc2tpcFNpbmdsZUxpbmVDb21tZW50ID0gZnVuY3Rpb24gKG9mZnNldCkge1xuXHQgICAgICAgIHZhciBjb21tZW50cyA9IFtdO1xuXHQgICAgICAgIHZhciBzdGFydCwgbG9jO1xuXHQgICAgICAgIGlmICh0aGlzLnRyYWNrQ29tbWVudCkge1xuXHQgICAgICAgICAgICBjb21tZW50cyA9IFtdO1xuXHQgICAgICAgICAgICBzdGFydCA9IHRoaXMuaW5kZXggLSBvZmZzZXQ7XG5cdCAgICAgICAgICAgIGxvYyA9IHtcblx0ICAgICAgICAgICAgICAgIHN0YXJ0OiB7XG5cdCAgICAgICAgICAgICAgICAgICAgbGluZTogdGhpcy5saW5lTnVtYmVyLFxuXHQgICAgICAgICAgICAgICAgICAgIGNvbHVtbjogdGhpcy5pbmRleCAtIHRoaXMubGluZVN0YXJ0IC0gb2Zmc2V0XG5cdCAgICAgICAgICAgICAgICB9LFxuXHQgICAgICAgICAgICAgICAgZW5kOiB7fVxuXHQgICAgICAgICAgICB9O1xuXHQgICAgICAgIH1cblx0ICAgICAgICB3aGlsZSAoIXRoaXMuZW9mKCkpIHtcblx0ICAgICAgICAgICAgdmFyIGNoID0gdGhpcy5zb3VyY2UuY2hhckNvZGVBdCh0aGlzLmluZGV4KTtcblx0ICAgICAgICAgICAgKyt0aGlzLmluZGV4O1xuXHQgICAgICAgICAgICBpZiAoY2hhcmFjdGVyXzEuQ2hhcmFjdGVyLmlzTGluZVRlcm1pbmF0b3IoY2gpKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAodGhpcy50cmFja0NvbW1lbnQpIHtcblx0ICAgICAgICAgICAgICAgICAgICBsb2MuZW5kID0ge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBsaW5lOiB0aGlzLmxpbmVOdW1iZXIsXG5cdCAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbjogdGhpcy5pbmRleCAtIHRoaXMubGluZVN0YXJ0IC0gMVxuXHQgICAgICAgICAgICAgICAgICAgIH07XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIGVudHJ5ID0ge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBtdWx0aUxpbmU6IGZhbHNlLFxuXHQgICAgICAgICAgICAgICAgICAgICAgICBzbGljZTogW3N0YXJ0ICsgb2Zmc2V0LCB0aGlzLmluZGV4IC0gMV0sXG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlOiBbc3RhcnQsIHRoaXMuaW5kZXggLSAxXSxcblx0ICAgICAgICAgICAgICAgICAgICAgICAgbG9jOiBsb2Ncblx0ICAgICAgICAgICAgICAgICAgICB9O1xuXHQgICAgICAgICAgICAgICAgICAgIGNvbW1lbnRzLnB1c2goZW50cnkpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgaWYgKGNoID09PSAxMyAmJiB0aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMuaW5kZXgpID09PSAxMCkge1xuXHQgICAgICAgICAgICAgICAgICAgICsrdGhpcy5pbmRleDtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgICsrdGhpcy5saW5lTnVtYmVyO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5saW5lU3RhcnQgPSB0aGlzLmluZGV4O1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIGNvbW1lbnRzO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmICh0aGlzLnRyYWNrQ29tbWVudCkge1xuXHQgICAgICAgICAgICBsb2MuZW5kID0ge1xuXHQgICAgICAgICAgICAgICAgbGluZTogdGhpcy5saW5lTnVtYmVyLFxuXHQgICAgICAgICAgICAgICAgY29sdW1uOiB0aGlzLmluZGV4IC0gdGhpcy5saW5lU3RhcnRcblx0ICAgICAgICAgICAgfTtcblx0ICAgICAgICAgICAgdmFyIGVudHJ5ID0ge1xuXHQgICAgICAgICAgICAgICAgbXVsdGlMaW5lOiBmYWxzZSxcblx0ICAgICAgICAgICAgICAgIHNsaWNlOiBbc3RhcnQgKyBvZmZzZXQsIHRoaXMuaW5kZXhdLFxuXHQgICAgICAgICAgICAgICAgcmFuZ2U6IFtzdGFydCwgdGhpcy5pbmRleF0sXG5cdCAgICAgICAgICAgICAgICBsb2M6IGxvY1xuXHQgICAgICAgICAgICB9O1xuXHQgICAgICAgICAgICBjb21tZW50cy5wdXNoKGVudHJ5KTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIGNvbW1lbnRzO1xuXHQgICAgfTtcblx0ICAgIFNjYW5uZXIucHJvdG90eXBlLnNraXBNdWx0aUxpbmVDb21tZW50ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBjb21tZW50cyA9IFtdO1xuXHQgICAgICAgIHZhciBzdGFydCwgbG9jO1xuXHQgICAgICAgIGlmICh0aGlzLnRyYWNrQ29tbWVudCkge1xuXHQgICAgICAgICAgICBjb21tZW50cyA9IFtdO1xuXHQgICAgICAgICAgICBzdGFydCA9IHRoaXMuaW5kZXggLSAyO1xuXHQgICAgICAgICAgICBsb2MgPSB7XG5cdCAgICAgICAgICAgICAgICBzdGFydDoge1xuXHQgICAgICAgICAgICAgICAgICAgIGxpbmU6IHRoaXMubGluZU51bWJlcixcblx0ICAgICAgICAgICAgICAgICAgICBjb2x1bW46IHRoaXMuaW5kZXggLSB0aGlzLmxpbmVTdGFydCAtIDJcblx0ICAgICAgICAgICAgICAgIH0sXG5cdCAgICAgICAgICAgICAgICBlbmQ6IHt9XG5cdCAgICAgICAgICAgIH07XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHdoaWxlICghdGhpcy5lb2YoKSkge1xuXHQgICAgICAgICAgICB2YXIgY2ggPSB0aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMuaW5kZXgpO1xuXHQgICAgICAgICAgICBpZiAoY2hhcmFjdGVyXzEuQ2hhcmFjdGVyLmlzTGluZVRlcm1pbmF0b3IoY2gpKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAoY2ggPT09IDB4MEQgJiYgdGhpcy5zb3VyY2UuY2hhckNvZGVBdCh0aGlzLmluZGV4ICsgMSkgPT09IDB4MEEpIHtcblx0ICAgICAgICAgICAgICAgICAgICArK3RoaXMuaW5kZXg7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICArK3RoaXMubGluZU51bWJlcjtcblx0ICAgICAgICAgICAgICAgICsrdGhpcy5pbmRleDtcblx0ICAgICAgICAgICAgICAgIHRoaXMubGluZVN0YXJ0ID0gdGhpcy5pbmRleDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBlbHNlIGlmIChjaCA9PT0gMHgyQSkge1xuXHQgICAgICAgICAgICAgICAgLy8gQmxvY2sgY29tbWVudCBlbmRzIHdpdGggJyovJy5cblx0ICAgICAgICAgICAgICAgIGlmICh0aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMuaW5kZXggKyAxKSA9PT0gMHgyRikge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5kZXggKz0gMjtcblx0ICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy50cmFja0NvbW1lbnQpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgbG9jLmVuZCA9IHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmU6IHRoaXMubGluZU51bWJlcixcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbjogdGhpcy5pbmRleCAtIHRoaXMubGluZVN0YXJ0XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbnRyeSA9IHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11bHRpTGluZTogdHJ1ZSxcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsaWNlOiBbc3RhcnQgKyAyLCB0aGlzLmluZGV4IC0gMl0sXG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5nZTogW3N0YXJ0LCB0aGlzLmluZGV4XSxcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYzogbG9jXG5cdCAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1lbnRzLnB1c2goZW50cnkpO1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29tbWVudHM7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICArK3RoaXMuaW5kZXg7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgZWxzZSB7XG5cdCAgICAgICAgICAgICAgICArK3RoaXMuaW5kZXg7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgLy8gUmFuIG9mZiB0aGUgZW5kIG9mIHRoZSBmaWxlIC0gdGhlIHdob2xlIHRoaW5nIGlzIGEgY29tbWVudFxuXHQgICAgICAgIGlmICh0aGlzLnRyYWNrQ29tbWVudCkge1xuXHQgICAgICAgICAgICBsb2MuZW5kID0ge1xuXHQgICAgICAgICAgICAgICAgbGluZTogdGhpcy5saW5lTnVtYmVyLFxuXHQgICAgICAgICAgICAgICAgY29sdW1uOiB0aGlzLmluZGV4IC0gdGhpcy5saW5lU3RhcnRcblx0ICAgICAgICAgICAgfTtcblx0ICAgICAgICAgICAgdmFyIGVudHJ5ID0ge1xuXHQgICAgICAgICAgICAgICAgbXVsdGlMaW5lOiB0cnVlLFxuXHQgICAgICAgICAgICAgICAgc2xpY2U6IFtzdGFydCArIDIsIHRoaXMuaW5kZXhdLFxuXHQgICAgICAgICAgICAgICAgcmFuZ2U6IFtzdGFydCwgdGhpcy5pbmRleF0sXG5cdCAgICAgICAgICAgICAgICBsb2M6IGxvY1xuXHQgICAgICAgICAgICB9O1xuXHQgICAgICAgICAgICBjb21tZW50cy5wdXNoKGVudHJ5KTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy50b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbigpO1xuXHQgICAgICAgIHJldHVybiBjb21tZW50cztcblx0ICAgIH07XG5cdCAgICBTY2FubmVyLnByb3RvdHlwZS5zY2FuQ29tbWVudHMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIGNvbW1lbnRzO1xuXHQgICAgICAgIGlmICh0aGlzLnRyYWNrQ29tbWVudCkge1xuXHQgICAgICAgICAgICBjb21tZW50cyA9IFtdO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB2YXIgc3RhcnQgPSAodGhpcy5pbmRleCA9PT0gMCk7XG5cdCAgICAgICAgd2hpbGUgKCF0aGlzLmVvZigpKSB7XG5cdCAgICAgICAgICAgIHZhciBjaCA9IHRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRleCk7XG5cdCAgICAgICAgICAgIGlmIChjaGFyYWN0ZXJfMS5DaGFyYWN0ZXIuaXNXaGl0ZVNwYWNlKGNoKSkge1xuXHQgICAgICAgICAgICAgICAgKyt0aGlzLmluZGV4O1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGVsc2UgaWYgKGNoYXJhY3Rlcl8xLkNoYXJhY3Rlci5pc0xpbmVUZXJtaW5hdG9yKGNoKSkge1xuXHQgICAgICAgICAgICAgICAgKyt0aGlzLmluZGV4O1xuXHQgICAgICAgICAgICAgICAgaWYgKGNoID09PSAweDBEICYmIHRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRleCkgPT09IDB4MEEpIHtcblx0ICAgICAgICAgICAgICAgICAgICArK3RoaXMuaW5kZXg7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICArK3RoaXMubGluZU51bWJlcjtcblx0ICAgICAgICAgICAgICAgIHRoaXMubGluZVN0YXJ0ID0gdGhpcy5pbmRleDtcblx0ICAgICAgICAgICAgICAgIHN0YXJ0ID0gdHJ1ZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBlbHNlIGlmIChjaCA9PT0gMHgyRikge1xuXHQgICAgICAgICAgICAgICAgY2ggPSB0aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMuaW5kZXggKyAxKTtcblx0ICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gMHgyRikge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5kZXggKz0gMjtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgY29tbWVudCA9IHRoaXMuc2tpcFNpbmdsZUxpbmVDb21tZW50KDIpO1xuXHQgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnRyYWNrQ29tbWVudCkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBjb21tZW50cyA9IGNvbW1lbnRzLmNvbmNhdChjb21tZW50KTtcblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSB0cnVlO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgZWxzZSBpZiAoY2ggPT09IDB4MkEpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLmluZGV4ICs9IDI7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIGNvbW1lbnQgPSB0aGlzLnNraXBNdWx0aUxpbmVDb21tZW50KCk7XG5cdCAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudHJhY2tDb21tZW50KSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1lbnRzID0gY29tbWVudHMuY29uY2F0KGNvbW1lbnQpO1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGVsc2UgaWYgKHN0YXJ0ICYmIGNoID09PSAweDJEKSB7XG5cdCAgICAgICAgICAgICAgICAvLyBVKzAwM0UgaXMgJz4nXG5cdCAgICAgICAgICAgICAgICBpZiAoKHRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRleCArIDEpID09PSAweDJEKSAmJiAodGhpcy5zb3VyY2UuY2hhckNvZGVBdCh0aGlzLmluZGV4ICsgMikgPT09IDB4M0UpKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgLy8gJy0tPicgaXMgYSBzaW5nbGUtbGluZSBjb21tZW50XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5pbmRleCArPSAzO1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBjb21tZW50ID0gdGhpcy5za2lwU2luZ2xlTGluZUNvbW1lbnQoMyk7XG5cdCAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudHJhY2tDb21tZW50KSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1lbnRzID0gY29tbWVudHMuY29uY2F0KGNvbW1lbnQpO1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGVsc2UgaWYgKGNoID09PSAweDNDICYmICF0aGlzLmlzTW9kdWxlKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAodGhpcy5zb3VyY2Uuc2xpY2UodGhpcy5pbmRleCArIDEsIHRoaXMuaW5kZXggKyA0KSA9PT0gJyEtLScpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLmluZGV4ICs9IDQ7IC8vIGA8IS0tYFxuXHQgICAgICAgICAgICAgICAgICAgIHZhciBjb21tZW50ID0gdGhpcy5za2lwU2luZ2xlTGluZUNvbW1lbnQoNCk7XG5cdCAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudHJhY2tDb21tZW50KSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1lbnRzID0gY29tbWVudHMuY29uY2F0KGNvbW1lbnQpO1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIGNvbW1lbnRzO1xuXHQgICAgfTtcblx0ICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWZ1dHVyZS1yZXNlcnZlZC13b3Jkc1xuXHQgICAgU2Nhbm5lci5wcm90b3R5cGUuaXNGdXR1cmVSZXNlcnZlZFdvcmQgPSBmdW5jdGlvbiAoaWQpIHtcblx0ICAgICAgICBzd2l0Y2ggKGlkKSB7XG5cdCAgICAgICAgICAgIGNhc2UgJ2VudW0nOlxuXHQgICAgICAgICAgICBjYXNlICdleHBvcnQnOlxuXHQgICAgICAgICAgICBjYXNlICdpbXBvcnQnOlxuXHQgICAgICAgICAgICBjYXNlICdzdXBlcic6XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcblx0ICAgICAgICAgICAgZGVmYXVsdDpcblx0ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgU2Nhbm5lci5wcm90b3R5cGUuaXNTdHJpY3RNb2RlUmVzZXJ2ZWRXb3JkID0gZnVuY3Rpb24gKGlkKSB7XG5cdCAgICAgICAgc3dpdGNoIChpZCkge1xuXHQgICAgICAgICAgICBjYXNlICdpbXBsZW1lbnRzJzpcblx0ICAgICAgICAgICAgY2FzZSAnaW50ZXJmYWNlJzpcblx0ICAgICAgICAgICAgY2FzZSAncGFja2FnZSc6XG5cdCAgICAgICAgICAgIGNhc2UgJ3ByaXZhdGUnOlxuXHQgICAgICAgICAgICBjYXNlICdwcm90ZWN0ZWQnOlxuXHQgICAgICAgICAgICBjYXNlICdwdWJsaWMnOlxuXHQgICAgICAgICAgICBjYXNlICdzdGF0aWMnOlxuXHQgICAgICAgICAgICBjYXNlICd5aWVsZCc6XG5cdCAgICAgICAgICAgIGNhc2UgJ2xldCc6XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcblx0ICAgICAgICAgICAgZGVmYXVsdDpcblx0ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgU2Nhbm5lci5wcm90b3R5cGUuaXNSZXN0cmljdGVkV29yZCA9IGZ1bmN0aW9uIChpZCkge1xuXHQgICAgICAgIHJldHVybiBpZCA9PT0gJ2V2YWwnIHx8IGlkID09PSAnYXJndW1lbnRzJztcblx0ICAgIH07XG5cdCAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1rZXl3b3Jkc1xuXHQgICAgU2Nhbm5lci5wcm90b3R5cGUuaXNLZXl3b3JkID0gZnVuY3Rpb24gKGlkKSB7XG5cdCAgICAgICAgc3dpdGNoIChpZC5sZW5ndGgpIHtcblx0ICAgICAgICAgICAgY2FzZSAyOlxuXHQgICAgICAgICAgICAgICAgcmV0dXJuIChpZCA9PT0gJ2lmJykgfHwgKGlkID09PSAnaW4nKSB8fCAoaWQgPT09ICdkbycpO1xuXHQgICAgICAgICAgICBjYXNlIDM6XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gKGlkID09PSAndmFyJykgfHwgKGlkID09PSAnZm9yJykgfHwgKGlkID09PSAnbmV3JykgfHxcblx0ICAgICAgICAgICAgICAgICAgICAoaWQgPT09ICd0cnknKSB8fCAoaWQgPT09ICdsZXQnKTtcblx0ICAgICAgICAgICAgY2FzZSA0OlxuXHQgICAgICAgICAgICAgICAgcmV0dXJuIChpZCA9PT0gJ3RoaXMnKSB8fCAoaWQgPT09ICdlbHNlJykgfHwgKGlkID09PSAnY2FzZScpIHx8XG5cdCAgICAgICAgICAgICAgICAgICAgKGlkID09PSAndm9pZCcpIHx8IChpZCA9PT0gJ3dpdGgnKSB8fCAoaWQgPT09ICdlbnVtJyk7XG5cdCAgICAgICAgICAgIGNhc2UgNTpcblx0ICAgICAgICAgICAgICAgIHJldHVybiAoaWQgPT09ICd3aGlsZScpIHx8IChpZCA9PT0gJ2JyZWFrJykgfHwgKGlkID09PSAnY2F0Y2gnKSB8fFxuXHQgICAgICAgICAgICAgICAgICAgIChpZCA9PT0gJ3Rocm93JykgfHwgKGlkID09PSAnY29uc3QnKSB8fCAoaWQgPT09ICd5aWVsZCcpIHx8XG5cdCAgICAgICAgICAgICAgICAgICAgKGlkID09PSAnY2xhc3MnKSB8fCAoaWQgPT09ICdzdXBlcicpO1xuXHQgICAgICAgICAgICBjYXNlIDY6XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gKGlkID09PSAncmV0dXJuJykgfHwgKGlkID09PSAndHlwZW9mJykgfHwgKGlkID09PSAnZGVsZXRlJykgfHxcblx0ICAgICAgICAgICAgICAgICAgICAoaWQgPT09ICdzd2l0Y2gnKSB8fCAoaWQgPT09ICdleHBvcnQnKSB8fCAoaWQgPT09ICdpbXBvcnQnKTtcblx0ICAgICAgICAgICAgY2FzZSA3OlxuXHQgICAgICAgICAgICAgICAgcmV0dXJuIChpZCA9PT0gJ2RlZmF1bHQnKSB8fCAoaWQgPT09ICdmaW5hbGx5JykgfHwgKGlkID09PSAnZXh0ZW5kcycpO1xuXHQgICAgICAgICAgICBjYXNlIDg6XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gKGlkID09PSAnZnVuY3Rpb24nKSB8fCAoaWQgPT09ICdjb250aW51ZScpIHx8IChpZCA9PT0gJ2RlYnVnZ2VyJyk7XG5cdCAgICAgICAgICAgIGNhc2UgMTA6XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gKGlkID09PSAnaW5zdGFuY2VvZicpO1xuXHQgICAgICAgICAgICBkZWZhdWx0OlxuXHQgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICBTY2FubmVyLnByb3RvdHlwZS5jb2RlUG9pbnRBdCA9IGZ1bmN0aW9uIChpKSB7XG5cdCAgICAgICAgdmFyIGNwID0gdGhpcy5zb3VyY2UuY2hhckNvZGVBdChpKTtcblx0ICAgICAgICBpZiAoY3AgPj0gMHhEODAwICYmIGNwIDw9IDB4REJGRikge1xuXHQgICAgICAgICAgICB2YXIgc2Vjb25kID0gdGhpcy5zb3VyY2UuY2hhckNvZGVBdChpICsgMSk7XG5cdCAgICAgICAgICAgIGlmIChzZWNvbmQgPj0gMHhEQzAwICYmIHNlY29uZCA8PSAweERGRkYpIHtcblx0ICAgICAgICAgICAgICAgIHZhciBmaXJzdCA9IGNwO1xuXHQgICAgICAgICAgICAgICAgY3AgPSAoZmlyc3QgLSAweEQ4MDApICogMHg0MDAgKyBzZWNvbmQgLSAweERDMDAgKyAweDEwMDAwO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiBjcDtcblx0ICAgIH07XG5cdCAgICBTY2FubmVyLnByb3RvdHlwZS5zY2FuSGV4RXNjYXBlID0gZnVuY3Rpb24gKHByZWZpeCkge1xuXHQgICAgICAgIHZhciBsZW4gPSAocHJlZml4ID09PSAndScpID8gNCA6IDI7XG5cdCAgICAgICAgdmFyIGNvZGUgPSAwO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpIHtcblx0ICAgICAgICAgICAgaWYgKCF0aGlzLmVvZigpICYmIGNoYXJhY3Rlcl8xLkNoYXJhY3Rlci5pc0hleERpZ2l0KHRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRleCkpKSB7XG5cdCAgICAgICAgICAgICAgICBjb2RlID0gY29kZSAqIDE2ICsgaGV4VmFsdWUodGhpcy5zb3VyY2VbdGhpcy5pbmRleCsrXSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgZWxzZSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlKTtcblx0ICAgIH07XG5cdCAgICBTY2FubmVyLnByb3RvdHlwZS5zY2FuVW5pY29kZUNvZGVQb2ludEVzY2FwZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgY2ggPSB0aGlzLnNvdXJjZVt0aGlzLmluZGV4XTtcblx0ICAgICAgICB2YXIgY29kZSA9IDA7XG5cdCAgICAgICAgLy8gQXQgbGVhc3QsIG9uZSBoZXggZGlnaXQgaXMgcmVxdWlyZWQuXG5cdCAgICAgICAgaWYgKGNoID09PSAnfScpIHtcblx0ICAgICAgICAgICAgdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbigpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB3aGlsZSAoIXRoaXMuZW9mKCkpIHtcblx0ICAgICAgICAgICAgY2ggPSB0aGlzLnNvdXJjZVt0aGlzLmluZGV4KytdO1xuXHQgICAgICAgICAgICBpZiAoIWNoYXJhY3Rlcl8xLkNoYXJhY3Rlci5pc0hleERpZ2l0KGNoLmNoYXJDb2RlQXQoMCkpKSB7XG5cdCAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBjb2RlID0gY29kZSAqIDE2ICsgaGV4VmFsdWUoY2gpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAoY29kZSA+IDB4MTBGRkZGIHx8IGNoICE9PSAnfScpIHtcblx0ICAgICAgICAgICAgdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbigpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gY2hhcmFjdGVyXzEuQ2hhcmFjdGVyLmZyb21Db2RlUG9pbnQoY29kZSk7XG5cdCAgICB9O1xuXHQgICAgU2Nhbm5lci5wcm90b3R5cGUuZ2V0SWRlbnRpZmllciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgc3RhcnQgPSB0aGlzLmluZGV4Kys7XG5cdCAgICAgICAgd2hpbGUgKCF0aGlzLmVvZigpKSB7XG5cdCAgICAgICAgICAgIHZhciBjaCA9IHRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRleCk7XG5cdCAgICAgICAgICAgIGlmIChjaCA9PT0gMHg1Qykge1xuXHQgICAgICAgICAgICAgICAgLy8gQmxhY2tzbGFzaCAoVSswMDVDKSBtYXJrcyBVbmljb2RlIGVzY2FwZSBzZXF1ZW5jZS5cblx0ICAgICAgICAgICAgICAgIHRoaXMuaW5kZXggPSBzdGFydDtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldENvbXBsZXhJZGVudGlmaWVyKCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgZWxzZSBpZiAoY2ggPj0gMHhEODAwICYmIGNoIDwgMHhERkZGKSB7XG5cdCAgICAgICAgICAgICAgICAvLyBOZWVkIHRvIGhhbmRsZSBzdXJyb2dhdGUgcGFpcnMuXG5cdCAgICAgICAgICAgICAgICB0aGlzLmluZGV4ID0gc3RhcnQ7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRDb21wbGV4SWRlbnRpZmllcigpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGlmIChjaGFyYWN0ZXJfMS5DaGFyYWN0ZXIuaXNJZGVudGlmaWVyUGFydChjaCkpIHtcblx0ICAgICAgICAgICAgICAgICsrdGhpcy5pbmRleDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzLnNvdXJjZS5zbGljZShzdGFydCwgdGhpcy5pbmRleCk7XG5cdCAgICB9O1xuXHQgICAgU2Nhbm5lci5wcm90b3R5cGUuZ2V0Q29tcGxleElkZW50aWZpZXIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIGNwID0gdGhpcy5jb2RlUG9pbnRBdCh0aGlzLmluZGV4KTtcblx0ICAgICAgICB2YXIgaWQgPSBjaGFyYWN0ZXJfMS5DaGFyYWN0ZXIuZnJvbUNvZGVQb2ludChjcCk7XG5cdCAgICAgICAgdGhpcy5pbmRleCArPSBpZC5sZW5ndGg7XG5cdCAgICAgICAgLy8gJ1xcdScgKFUrMDA1QywgVSswMDc1KSBkZW5vdGVzIGFuIGVzY2FwZWQgY2hhcmFjdGVyLlxuXHQgICAgICAgIHZhciBjaDtcblx0ICAgICAgICBpZiAoY3AgPT09IDB4NUMpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRleCkgIT09IDB4NzUpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4oKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICArK3RoaXMuaW5kZXg7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLnNvdXJjZVt0aGlzLmluZGV4XSA9PT0gJ3snKSB7XG5cdCAgICAgICAgICAgICAgICArK3RoaXMuaW5kZXg7XG5cdCAgICAgICAgICAgICAgICBjaCA9IHRoaXMuc2NhblVuaWNvZGVDb2RlUG9pbnRFc2NhcGUoKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIGNoID0gdGhpcy5zY2FuSGV4RXNjYXBlKCd1Jyk7XG5cdCAgICAgICAgICAgICAgICBpZiAoY2ggPT09IG51bGwgfHwgY2ggPT09ICdcXFxcJyB8fCAhY2hhcmFjdGVyXzEuQ2hhcmFjdGVyLmlzSWRlbnRpZmllclN0YXJ0KGNoLmNoYXJDb2RlQXQoMCkpKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbigpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGlkID0gY2g7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHdoaWxlICghdGhpcy5lb2YoKSkge1xuXHQgICAgICAgICAgICBjcCA9IHRoaXMuY29kZVBvaW50QXQodGhpcy5pbmRleCk7XG5cdCAgICAgICAgICAgIGlmICghY2hhcmFjdGVyXzEuQ2hhcmFjdGVyLmlzSWRlbnRpZmllclBhcnQoY3ApKSB7XG5cdCAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBjaCA9IGNoYXJhY3Rlcl8xLkNoYXJhY3Rlci5mcm9tQ29kZVBvaW50KGNwKTtcblx0ICAgICAgICAgICAgaWQgKz0gY2g7XG5cdCAgICAgICAgICAgIHRoaXMuaW5kZXggKz0gY2gubGVuZ3RoO1xuXHQgICAgICAgICAgICAvLyAnXFx1JyAoVSswMDVDLCBVKzAwNzUpIGRlbm90ZXMgYW4gZXNjYXBlZCBjaGFyYWN0ZXIuXG5cdCAgICAgICAgICAgIGlmIChjcCA9PT0gMHg1Qykge1xuXHQgICAgICAgICAgICAgICAgaWQgPSBpZC5zdWJzdHIoMCwgaWQubGVuZ3RoIC0gMSk7XG5cdCAgICAgICAgICAgICAgICBpZiAodGhpcy5zb3VyY2UuY2hhckNvZGVBdCh0aGlzLmluZGV4KSAhPT0gMHg3NSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4oKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgICsrdGhpcy5pbmRleDtcblx0ICAgICAgICAgICAgICAgIGlmICh0aGlzLnNvdXJjZVt0aGlzLmluZGV4XSA9PT0gJ3snKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgKyt0aGlzLmluZGV4O1xuXHQgICAgICAgICAgICAgICAgICAgIGNoID0gdGhpcy5zY2FuVW5pY29kZUNvZGVQb2ludEVzY2FwZSgpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgY2ggPSB0aGlzLnNjYW5IZXhFc2NhcGUoJ3UnKTtcblx0ICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPT09IG51bGwgfHwgY2ggPT09ICdcXFxcJyB8fCAhY2hhcmFjdGVyXzEuQ2hhcmFjdGVyLmlzSWRlbnRpZmllclBhcnQoY2guY2hhckNvZGVBdCgwKSkpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbigpO1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIGlkICs9IGNoO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiBpZDtcblx0ICAgIH07XG5cdCAgICBTY2FubmVyLnByb3RvdHlwZS5vY3RhbFRvRGVjaW1hbCA9IGZ1bmN0aW9uIChjaCkge1xuXHQgICAgICAgIC8vIFxcMCBpcyBub3Qgb2N0YWwgZXNjYXBlIHNlcXVlbmNlXG5cdCAgICAgICAgdmFyIG9jdGFsID0gKGNoICE9PSAnMCcpO1xuXHQgICAgICAgIHZhciBjb2RlID0gb2N0YWxWYWx1ZShjaCk7XG5cdCAgICAgICAgaWYgKCF0aGlzLmVvZigpICYmIGNoYXJhY3Rlcl8xLkNoYXJhY3Rlci5pc09jdGFsRGlnaXQodGhpcy5zb3VyY2UuY2hhckNvZGVBdCh0aGlzLmluZGV4KSkpIHtcblx0ICAgICAgICAgICAgb2N0YWwgPSB0cnVlO1xuXHQgICAgICAgICAgICBjb2RlID0gY29kZSAqIDggKyBvY3RhbFZhbHVlKHRoaXMuc291cmNlW3RoaXMuaW5kZXgrK10pO1xuXHQgICAgICAgICAgICAvLyAzIGRpZ2l0cyBhcmUgb25seSBhbGxvd2VkIHdoZW4gc3RyaW5nIHN0YXJ0c1xuXHQgICAgICAgICAgICAvLyB3aXRoIDAsIDEsIDIsIDNcblx0ICAgICAgICAgICAgaWYgKCcwMTIzJy5pbmRleE9mKGNoKSA+PSAwICYmICF0aGlzLmVvZigpICYmIGNoYXJhY3Rlcl8xLkNoYXJhY3Rlci5pc09jdGFsRGlnaXQodGhpcy5zb3VyY2UuY2hhckNvZGVBdCh0aGlzLmluZGV4KSkpIHtcblx0ICAgICAgICAgICAgICAgIGNvZGUgPSBjb2RlICogOCArIG9jdGFsVmFsdWUodGhpcy5zb3VyY2VbdGhpcy5pbmRleCsrXSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHtcblx0ICAgICAgICAgICAgY29kZTogY29kZSxcblx0ICAgICAgICAgICAgb2N0YWw6IG9jdGFsXG5cdCAgICAgICAgfTtcblx0ICAgIH07XG5cdCAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1uYW1lcy1hbmQta2V5d29yZHNcblx0ICAgIFNjYW5uZXIucHJvdG90eXBlLnNjYW5JZGVudGlmaWVyID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciB0eXBlO1xuXHQgICAgICAgIHZhciBzdGFydCA9IHRoaXMuaW5kZXg7XG5cdCAgICAgICAgLy8gQmFja3NsYXNoIChVKzAwNUMpIHN0YXJ0cyBhbiBlc2NhcGVkIGNoYXJhY3Rlci5cblx0ICAgICAgICB2YXIgaWQgPSAodGhpcy5zb3VyY2UuY2hhckNvZGVBdChzdGFydCkgPT09IDB4NUMpID8gdGhpcy5nZXRDb21wbGV4SWRlbnRpZmllcigpIDogdGhpcy5nZXRJZGVudGlmaWVyKCk7XG5cdCAgICAgICAgLy8gVGhlcmUgaXMgbm8ga2V5d29yZCBvciBsaXRlcmFsIHdpdGggb25seSBvbmUgY2hhcmFjdGVyLlxuXHQgICAgICAgIC8vIFRodXMsIGl0IG11c3QgYmUgYW4gaWRlbnRpZmllci5cblx0ICAgICAgICBpZiAoaWQubGVuZ3RoID09PSAxKSB7XG5cdCAgICAgICAgICAgIHR5cGUgPSAzIC8qIElkZW50aWZpZXIgKi87XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGVsc2UgaWYgKHRoaXMuaXNLZXl3b3JkKGlkKSkge1xuXHQgICAgICAgICAgICB0eXBlID0gNCAvKiBLZXl3b3JkICovO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBlbHNlIGlmIChpZCA9PT0gJ251bGwnKSB7XG5cdCAgICAgICAgICAgIHR5cGUgPSA1IC8qIE51bGxMaXRlcmFsICovO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBlbHNlIGlmIChpZCA9PT0gJ3RydWUnIHx8IGlkID09PSAnZmFsc2UnKSB7XG5cdCAgICAgICAgICAgIHR5cGUgPSAxIC8qIEJvb2xlYW5MaXRlcmFsICovO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBlbHNlIHtcblx0ICAgICAgICAgICAgdHlwZSA9IDMgLyogSWRlbnRpZmllciAqLztcblx0ICAgICAgICB9XG5cdCAgICAgICAgaWYgKHR5cGUgIT09IDMgLyogSWRlbnRpZmllciAqLyAmJiAoc3RhcnQgKyBpZC5sZW5ndGggIT09IHRoaXMuaW5kZXgpKSB7XG5cdCAgICAgICAgICAgIHZhciByZXN0b3JlID0gdGhpcy5pbmRleDtcblx0ICAgICAgICAgICAgdGhpcy5pbmRleCA9IHN0YXJ0O1xuXHQgICAgICAgICAgICB0aGlzLnRvbGVyYXRlVW5leHBlY3RlZFRva2VuKG1lc3NhZ2VzXzEuTWVzc2FnZXMuSW52YWxpZEVzY2FwZWRSZXNlcnZlZFdvcmQpO1xuXHQgICAgICAgICAgICB0aGlzLmluZGV4ID0gcmVzdG9yZTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHtcblx0ICAgICAgICAgICAgdHlwZTogdHlwZSxcblx0ICAgICAgICAgICAgdmFsdWU6IGlkLFxuXHQgICAgICAgICAgICBsaW5lTnVtYmVyOiB0aGlzLmxpbmVOdW1iZXIsXG5cdCAgICAgICAgICAgIGxpbmVTdGFydDogdGhpcy5saW5lU3RhcnQsXG5cdCAgICAgICAgICAgIHN0YXJ0OiBzdGFydCxcblx0ICAgICAgICAgICAgZW5kOiB0aGlzLmluZGV4XG5cdCAgICAgICAgfTtcblx0ICAgIH07XG5cdCAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1wdW5jdHVhdG9yc1xuXHQgICAgU2Nhbm5lci5wcm90b3R5cGUuc2NhblB1bmN0dWF0b3IgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIHN0YXJ0ID0gdGhpcy5pbmRleDtcblx0ICAgICAgICAvLyBDaGVjayBmb3IgbW9zdCBjb21tb24gc2luZ2xlLWNoYXJhY3RlciBwdW5jdHVhdG9ycy5cblx0ICAgICAgICB2YXIgc3RyID0gdGhpcy5zb3VyY2VbdGhpcy5pbmRleF07XG5cdCAgICAgICAgc3dpdGNoIChzdHIpIHtcblx0ICAgICAgICAgICAgY2FzZSAnKCc6XG5cdCAgICAgICAgICAgIGNhc2UgJ3snOlxuXHQgICAgICAgICAgICAgICAgaWYgKHN0ciA9PT0gJ3snKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJseVN0YWNrLnB1c2goJ3snKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgICsrdGhpcy5pbmRleDtcblx0ICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICBjYXNlICcuJzpcblx0ICAgICAgICAgICAgICAgICsrdGhpcy5pbmRleDtcblx0ICAgICAgICAgICAgICAgIGlmICh0aGlzLnNvdXJjZVt0aGlzLmluZGV4XSA9PT0gJy4nICYmIHRoaXMuc291cmNlW3RoaXMuaW5kZXggKyAxXSA9PT0gJy4nKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgLy8gU3ByZWFkIG9wZXJhdG9yOiAuLi5cblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLmluZGV4ICs9IDI7XG5cdCAgICAgICAgICAgICAgICAgICAgc3RyID0gJy4uLic7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgY2FzZSAnfSc6XG5cdCAgICAgICAgICAgICAgICArK3RoaXMuaW5kZXg7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmN1cmx5U3RhY2sucG9wKCk7XG5cdCAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgY2FzZSAnKSc6XG5cdCAgICAgICAgICAgIGNhc2UgJzsnOlxuXHQgICAgICAgICAgICBjYXNlICcsJzpcblx0ICAgICAgICAgICAgY2FzZSAnWyc6XG5cdCAgICAgICAgICAgIGNhc2UgJ10nOlxuXHQgICAgICAgICAgICBjYXNlICc6Jzpcblx0ICAgICAgICAgICAgY2FzZSAnPyc6XG5cdCAgICAgICAgICAgIGNhc2UgJ34nOlxuXHQgICAgICAgICAgICAgICAgKyt0aGlzLmluZGV4O1xuXHQgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgIGRlZmF1bHQ6XG5cdCAgICAgICAgICAgICAgICAvLyA0LWNoYXJhY3RlciBwdW5jdHVhdG9yLlxuXHQgICAgICAgICAgICAgICAgc3RyID0gdGhpcy5zb3VyY2Uuc3Vic3RyKHRoaXMuaW5kZXgsIDQpO1xuXHQgICAgICAgICAgICAgICAgaWYgKHN0ciA9PT0gJz4+Pj0nKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5pbmRleCArPSA0O1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgLy8gMy1jaGFyYWN0ZXIgcHVuY3R1YXRvcnMuXG5cdCAgICAgICAgICAgICAgICAgICAgc3RyID0gc3RyLnN1YnN0cigwLCAzKTtcblx0ICAgICAgICAgICAgICAgICAgICBpZiAoc3RyID09PSAnPT09JyB8fCBzdHIgPT09ICchPT0nIHx8IHN0ciA9PT0gJz4+PicgfHxcblx0ICAgICAgICAgICAgICAgICAgICAgICAgc3RyID09PSAnPDw9JyB8fCBzdHIgPT09ICc+Pj0nIHx8IHN0ciA9PT0gJyoqPScpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbmRleCArPSAzO1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgICAgICBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgLy8gMi1jaGFyYWN0ZXIgcHVuY3R1YXRvcnMuXG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9IHN0ci5zdWJzdHIoMCwgMik7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHIgPT09ICcmJicgfHwgc3RyID09PSAnfHwnIHx8IHN0ciA9PT0gJz09JyB8fCBzdHIgPT09ICchPScgfHxcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9PT0gJys9JyB8fCBzdHIgPT09ICctPScgfHwgc3RyID09PSAnKj0nIHx8IHN0ciA9PT0gJy89JyB8fFxuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyID09PSAnKysnIHx8IHN0ciA9PT0gJy0tJyB8fCBzdHIgPT09ICc8PCcgfHwgc3RyID09PSAnPj4nIHx8XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgPT09ICcmPScgfHwgc3RyID09PSAnfD0nIHx8IHN0ciA9PT0gJ149JyB8fCBzdHIgPT09ICclPScgfHxcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9PT0gJzw9JyB8fCBzdHIgPT09ICc+PScgfHwgc3RyID09PSAnPT4nIHx8IHN0ciA9PT0gJyoqJykge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbmRleCArPSAyO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMS1jaGFyYWN0ZXIgcHVuY3R1YXRvcnMuXG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgPSB0aGlzLnNvdXJjZVt0aGlzLmluZGV4XTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgnPD49ISstKiUmfF4vJy5pbmRleE9mKHN0cikgPj0gMCkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrdGhpcy5pbmRleDtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgaWYgKHRoaXMuaW5kZXggPT09IHN0YXJ0KSB7XG5cdCAgICAgICAgICAgIHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4oKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHtcblx0ICAgICAgICAgICAgdHlwZTogNyAvKiBQdW5jdHVhdG9yICovLFxuXHQgICAgICAgICAgICB2YWx1ZTogc3RyLFxuXHQgICAgICAgICAgICBsaW5lTnVtYmVyOiB0aGlzLmxpbmVOdW1iZXIsXG5cdCAgICAgICAgICAgIGxpbmVTdGFydDogdGhpcy5saW5lU3RhcnQsXG5cdCAgICAgICAgICAgIHN0YXJ0OiBzdGFydCxcblx0ICAgICAgICAgICAgZW5kOiB0aGlzLmluZGV4XG5cdCAgICAgICAgfTtcblx0ICAgIH07XG5cdCAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1saXRlcmFscy1udW1lcmljLWxpdGVyYWxzXG5cdCAgICBTY2FubmVyLnByb3RvdHlwZS5zY2FuSGV4TGl0ZXJhbCA9IGZ1bmN0aW9uIChzdGFydCkge1xuXHQgICAgICAgIHZhciBudW0gPSAnJztcblx0ICAgICAgICB3aGlsZSAoIXRoaXMuZW9mKCkpIHtcblx0ICAgICAgICAgICAgaWYgKCFjaGFyYWN0ZXJfMS5DaGFyYWN0ZXIuaXNIZXhEaWdpdCh0aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMuaW5kZXgpKSkge1xuXHQgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgbnVtICs9IHRoaXMuc291cmNlW3RoaXMuaW5kZXgrK107XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmIChudW0ubGVuZ3RoID09PSAwKSB7XG5cdCAgICAgICAgICAgIHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4oKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgaWYgKGNoYXJhY3Rlcl8xLkNoYXJhY3Rlci5pc0lkZW50aWZpZXJTdGFydCh0aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMuaW5kZXgpKSkge1xuXHQgICAgICAgICAgICB0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB7XG5cdCAgICAgICAgICAgIHR5cGU6IDYgLyogTnVtZXJpY0xpdGVyYWwgKi8sXG5cdCAgICAgICAgICAgIHZhbHVlOiBwYXJzZUludCgnMHgnICsgbnVtLCAxNiksXG5cdCAgICAgICAgICAgIGxpbmVOdW1iZXI6IHRoaXMubGluZU51bWJlcixcblx0ICAgICAgICAgICAgbGluZVN0YXJ0OiB0aGlzLmxpbmVTdGFydCxcblx0ICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LFxuXHQgICAgICAgICAgICBlbmQ6IHRoaXMuaW5kZXhcblx0ICAgICAgICB9O1xuXHQgICAgfTtcblx0ICAgIFNjYW5uZXIucHJvdG90eXBlLnNjYW5CaW5hcnlMaXRlcmFsID0gZnVuY3Rpb24gKHN0YXJ0KSB7XG5cdCAgICAgICAgdmFyIG51bSA9ICcnO1xuXHQgICAgICAgIHZhciBjaDtcblx0ICAgICAgICB3aGlsZSAoIXRoaXMuZW9mKCkpIHtcblx0ICAgICAgICAgICAgY2ggPSB0aGlzLnNvdXJjZVt0aGlzLmluZGV4XTtcblx0ICAgICAgICAgICAgaWYgKGNoICE9PSAnMCcgJiYgY2ggIT09ICcxJykge1xuXHQgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgbnVtICs9IHRoaXMuc291cmNlW3RoaXMuaW5kZXgrK107XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmIChudW0ubGVuZ3RoID09PSAwKSB7XG5cdCAgICAgICAgICAgIC8vIG9ubHkgMGIgb3IgMEJcblx0ICAgICAgICAgICAgdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbigpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAoIXRoaXMuZW9mKCkpIHtcblx0ICAgICAgICAgICAgY2ggPSB0aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMuaW5kZXgpO1xuXHQgICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuXHQgICAgICAgICAgICBpZiAoY2hhcmFjdGVyXzEuQ2hhcmFjdGVyLmlzSWRlbnRpZmllclN0YXJ0KGNoKSB8fCBjaGFyYWN0ZXJfMS5DaGFyYWN0ZXIuaXNEZWNpbWFsRGlnaXQoY2gpKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHtcblx0ICAgICAgICAgICAgdHlwZTogNiAvKiBOdW1lcmljTGl0ZXJhbCAqLyxcblx0ICAgICAgICAgICAgdmFsdWU6IHBhcnNlSW50KG51bSwgMiksXG5cdCAgICAgICAgICAgIGxpbmVOdW1iZXI6IHRoaXMubGluZU51bWJlcixcblx0ICAgICAgICAgICAgbGluZVN0YXJ0OiB0aGlzLmxpbmVTdGFydCxcblx0ICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LFxuXHQgICAgICAgICAgICBlbmQ6IHRoaXMuaW5kZXhcblx0ICAgICAgICB9O1xuXHQgICAgfTtcblx0ICAgIFNjYW5uZXIucHJvdG90eXBlLnNjYW5PY3RhbExpdGVyYWwgPSBmdW5jdGlvbiAocHJlZml4LCBzdGFydCkge1xuXHQgICAgICAgIHZhciBudW0gPSAnJztcblx0ICAgICAgICB2YXIgb2N0YWwgPSBmYWxzZTtcblx0ICAgICAgICBpZiAoY2hhcmFjdGVyXzEuQ2hhcmFjdGVyLmlzT2N0YWxEaWdpdChwcmVmaXguY2hhckNvZGVBdCgwKSkpIHtcblx0ICAgICAgICAgICAgb2N0YWwgPSB0cnVlO1xuXHQgICAgICAgICAgICBudW0gPSAnMCcgKyB0aGlzLnNvdXJjZVt0aGlzLmluZGV4KytdO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBlbHNlIHtcblx0ICAgICAgICAgICAgKyt0aGlzLmluZGV4O1xuXHQgICAgICAgIH1cblx0ICAgICAgICB3aGlsZSAoIXRoaXMuZW9mKCkpIHtcblx0ICAgICAgICAgICAgaWYgKCFjaGFyYWN0ZXJfMS5DaGFyYWN0ZXIuaXNPY3RhbERpZ2l0KHRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRleCkpKSB7XG5cdCAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBudW0gKz0gdGhpcy5zb3VyY2VbdGhpcy5pbmRleCsrXTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgaWYgKCFvY3RhbCAmJiBudW0ubGVuZ3RoID09PSAwKSB7XG5cdCAgICAgICAgICAgIC8vIG9ubHkgMG8gb3IgME9cblx0ICAgICAgICAgICAgdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbigpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAoY2hhcmFjdGVyXzEuQ2hhcmFjdGVyLmlzSWRlbnRpZmllclN0YXJ0KHRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRleCkpIHx8IGNoYXJhY3Rlcl8xLkNoYXJhY3Rlci5pc0RlY2ltYWxEaWdpdCh0aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMuaW5kZXgpKSkge1xuXHQgICAgICAgICAgICB0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB7XG5cdCAgICAgICAgICAgIHR5cGU6IDYgLyogTnVtZXJpY0xpdGVyYWwgKi8sXG5cdCAgICAgICAgICAgIHZhbHVlOiBwYXJzZUludChudW0sIDgpLFxuXHQgICAgICAgICAgICBvY3RhbDogb2N0YWwsXG5cdCAgICAgICAgICAgIGxpbmVOdW1iZXI6IHRoaXMubGluZU51bWJlcixcblx0ICAgICAgICAgICAgbGluZVN0YXJ0OiB0aGlzLmxpbmVTdGFydCxcblx0ICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LFxuXHQgICAgICAgICAgICBlbmQ6IHRoaXMuaW5kZXhcblx0ICAgICAgICB9O1xuXHQgICAgfTtcblx0ICAgIFNjYW5uZXIucHJvdG90eXBlLmlzSW1wbGljaXRPY3RhbExpdGVyYWwgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgLy8gSW1wbGljaXQgb2N0YWwsIHVubGVzcyB0aGVyZSBpcyBhIG5vbi1vY3RhbCBkaWdpdC5cblx0ICAgICAgICAvLyAoQW5uZXggQi4xLjEgb24gTnVtZXJpYyBMaXRlcmFscylcblx0ICAgICAgICBmb3IgKHZhciBpID0gdGhpcy5pbmRleCArIDE7IGkgPCB0aGlzLmxlbmd0aDsgKytpKSB7XG5cdCAgICAgICAgICAgIHZhciBjaCA9IHRoaXMuc291cmNlW2ldO1xuXHQgICAgICAgICAgICBpZiAoY2ggPT09ICc4JyB8fCBjaCA9PT0gJzknKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgaWYgKCFjaGFyYWN0ZXJfMS5DaGFyYWN0ZXIuaXNPY3RhbERpZ2l0KGNoLmNoYXJDb2RlQXQoMCkpKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdHJ1ZTtcblx0ICAgIH07XG5cdCAgICBTY2FubmVyLnByb3RvdHlwZS5zY2FuTnVtZXJpY0xpdGVyYWwgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIHN0YXJ0ID0gdGhpcy5pbmRleDtcblx0ICAgICAgICB2YXIgY2ggPSB0aGlzLnNvdXJjZVtzdGFydF07XG5cdCAgICAgICAgYXNzZXJ0XzEuYXNzZXJ0KGNoYXJhY3Rlcl8xLkNoYXJhY3Rlci5pc0RlY2ltYWxEaWdpdChjaC5jaGFyQ29kZUF0KDApKSB8fCAoY2ggPT09ICcuJyksICdOdW1lcmljIGxpdGVyYWwgbXVzdCBzdGFydCB3aXRoIGEgZGVjaW1hbCBkaWdpdCBvciBhIGRlY2ltYWwgcG9pbnQnKTtcblx0ICAgICAgICB2YXIgbnVtID0gJyc7XG5cdCAgICAgICAgaWYgKGNoICE9PSAnLicpIHtcblx0ICAgICAgICAgICAgbnVtID0gdGhpcy5zb3VyY2VbdGhpcy5pbmRleCsrXTtcblx0ICAgICAgICAgICAgY2ggPSB0aGlzLnNvdXJjZVt0aGlzLmluZGV4XTtcblx0ICAgICAgICAgICAgLy8gSGV4IG51bWJlciBzdGFydHMgd2l0aCAnMHgnLlxuXHQgICAgICAgICAgICAvLyBPY3RhbCBudW1iZXIgc3RhcnRzIHdpdGggJzAnLlxuXHQgICAgICAgICAgICAvLyBPY3RhbCBudW1iZXIgaW4gRVM2IHN0YXJ0cyB3aXRoICcwbycuXG5cdCAgICAgICAgICAgIC8vIEJpbmFyeSBudW1iZXIgaW4gRVM2IHN0YXJ0cyB3aXRoICcwYicuXG5cdCAgICAgICAgICAgIGlmIChudW0gPT09ICcwJykge1xuXHQgICAgICAgICAgICAgICAgaWYgKGNoID09PSAneCcgfHwgY2ggPT09ICdYJykge1xuXHQgICAgICAgICAgICAgICAgICAgICsrdGhpcy5pbmRleDtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FuSGV4TGl0ZXJhbChzdGFydCk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICBpZiAoY2ggPT09ICdiJyB8fCBjaCA9PT0gJ0InKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgKyt0aGlzLmluZGV4O1xuXHQgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNjYW5CaW5hcnlMaXRlcmFsKHN0YXJ0KTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gJ28nIHx8IGNoID09PSAnTycpIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FuT2N0YWxMaXRlcmFsKGNoLCBzdGFydCk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICBpZiAoY2ggJiYgY2hhcmFjdGVyXzEuQ2hhcmFjdGVyLmlzT2N0YWxEaWdpdChjaC5jaGFyQ29kZUF0KDApKSkge1xuXHQgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzSW1wbGljaXRPY3RhbExpdGVyYWwoKSkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FuT2N0YWxMaXRlcmFsKGNoLCBzdGFydCk7XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHdoaWxlIChjaGFyYWN0ZXJfMS5DaGFyYWN0ZXIuaXNEZWNpbWFsRGlnaXQodGhpcy5zb3VyY2UuY2hhckNvZGVBdCh0aGlzLmluZGV4KSkpIHtcblx0ICAgICAgICAgICAgICAgIG51bSArPSB0aGlzLnNvdXJjZVt0aGlzLmluZGV4KytdO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGNoID0gdGhpcy5zb3VyY2VbdGhpcy5pbmRleF07XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmIChjaCA9PT0gJy4nKSB7XG5cdCAgICAgICAgICAgIG51bSArPSB0aGlzLnNvdXJjZVt0aGlzLmluZGV4KytdO1xuXHQgICAgICAgICAgICB3aGlsZSAoY2hhcmFjdGVyXzEuQ2hhcmFjdGVyLmlzRGVjaW1hbERpZ2l0KHRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRleCkpKSB7XG5cdCAgICAgICAgICAgICAgICBudW0gKz0gdGhpcy5zb3VyY2VbdGhpcy5pbmRleCsrXTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBjaCA9IHRoaXMuc291cmNlW3RoaXMuaW5kZXhdO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAoY2ggPT09ICdlJyB8fCBjaCA9PT0gJ0UnKSB7XG5cdCAgICAgICAgICAgIG51bSArPSB0aGlzLnNvdXJjZVt0aGlzLmluZGV4KytdO1xuXHQgICAgICAgICAgICBjaCA9IHRoaXMuc291cmNlW3RoaXMuaW5kZXhdO1xuXHQgICAgICAgICAgICBpZiAoY2ggPT09ICcrJyB8fCBjaCA9PT0gJy0nKSB7XG5cdCAgICAgICAgICAgICAgICBudW0gKz0gdGhpcy5zb3VyY2VbdGhpcy5pbmRleCsrXTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBpZiAoY2hhcmFjdGVyXzEuQ2hhcmFjdGVyLmlzRGVjaW1hbERpZ2l0KHRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRleCkpKSB7XG5cdCAgICAgICAgICAgICAgICB3aGlsZSAoY2hhcmFjdGVyXzEuQ2hhcmFjdGVyLmlzRGVjaW1hbERpZ2l0KHRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRleCkpKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgbnVtICs9IHRoaXMuc291cmNlW3RoaXMuaW5kZXgrK107XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgaWYgKGNoYXJhY3Rlcl8xLkNoYXJhY3Rlci5pc0lkZW50aWZpZXJTdGFydCh0aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMuaW5kZXgpKSkge1xuXHQgICAgICAgICAgICB0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB7XG5cdCAgICAgICAgICAgIHR5cGU6IDYgLyogTnVtZXJpY0xpdGVyYWwgKi8sXG5cdCAgICAgICAgICAgIHZhbHVlOiBwYXJzZUZsb2F0KG51bSksXG5cdCAgICAgICAgICAgIGxpbmVOdW1iZXI6IHRoaXMubGluZU51bWJlcixcblx0ICAgICAgICAgICAgbGluZVN0YXJ0OiB0aGlzLmxpbmVTdGFydCxcblx0ICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LFxuXHQgICAgICAgICAgICBlbmQ6IHRoaXMuaW5kZXhcblx0ICAgICAgICB9O1xuXHQgICAgfTtcblx0ICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWxpdGVyYWxzLXN0cmluZy1saXRlcmFsc1xuXHQgICAgU2Nhbm5lci5wcm90b3R5cGUuc2NhblN0cmluZ0xpdGVyYWwgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIHN0YXJ0ID0gdGhpcy5pbmRleDtcblx0ICAgICAgICB2YXIgcXVvdGUgPSB0aGlzLnNvdXJjZVtzdGFydF07XG5cdCAgICAgICAgYXNzZXJ0XzEuYXNzZXJ0KChxdW90ZSA9PT0gJ1xcJycgfHwgcXVvdGUgPT09ICdcIicpLCAnU3RyaW5nIGxpdGVyYWwgbXVzdCBzdGFydHMgd2l0aCBhIHF1b3RlJyk7XG5cdCAgICAgICAgKyt0aGlzLmluZGV4O1xuXHQgICAgICAgIHZhciBvY3RhbCA9IGZhbHNlO1xuXHQgICAgICAgIHZhciBzdHIgPSAnJztcblx0ICAgICAgICB3aGlsZSAoIXRoaXMuZW9mKCkpIHtcblx0ICAgICAgICAgICAgdmFyIGNoID0gdGhpcy5zb3VyY2VbdGhpcy5pbmRleCsrXTtcblx0ICAgICAgICAgICAgaWYgKGNoID09PSBxdW90ZSkge1xuXHQgICAgICAgICAgICAgICAgcXVvdGUgPSAnJztcblx0ICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGVsc2UgaWYgKGNoID09PSAnXFxcXCcpIHtcblx0ICAgICAgICAgICAgICAgIGNoID0gdGhpcy5zb3VyY2VbdGhpcy5pbmRleCsrXTtcblx0ICAgICAgICAgICAgICAgIGlmICghY2ggfHwgIWNoYXJhY3Rlcl8xLkNoYXJhY3Rlci5pc0xpbmVUZXJtaW5hdG9yKGNoLmNoYXJDb2RlQXQoMCkpKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChjaCkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICd1Jzpcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNvdXJjZVt0aGlzLmluZGV4XSA9PT0gJ3snKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyt0aGlzLmluZGV4O1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSB0aGlzLnNjYW5Vbmljb2RlQ29kZVBvaW50RXNjYXBlKCk7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdW5lc2NhcGVkXzEgPSB0aGlzLnNjYW5IZXhFc2NhcGUoY2gpO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1bmVzY2FwZWRfMSA9PT0gbnVsbCkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKCk7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSB1bmVzY2FwZWRfMTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICd4Jzpcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB1bmVzY2FwZWQgPSB0aGlzLnNjYW5IZXhFc2NhcGUoY2gpO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVuZXNjYXBlZCA9PT0gbnVsbCkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4obWVzc2FnZXNfMS5NZXNzYWdlcy5JbnZhbGlkSGV4RXNjYXBlU2VxdWVuY2UpO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9IHVuZXNjYXBlZDtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICduJzpcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSAnXFxuJztcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdyJzpcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSAnXFxyJztcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICd0Jzpcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSAnXFx0Jztcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdiJzpcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSAnXFxiJztcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdmJzpcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSAnXFxmJztcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICd2Jzpcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSAnXFx4MEInO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJzgnOlxuXHQgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICc5Jzpcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSBjaDtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4oKTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoICYmIGNoYXJhY3Rlcl8xLkNoYXJhY3Rlci5pc09jdGFsRGlnaXQoY2guY2hhckNvZGVBdCgwKSkpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2N0VG9EZWMgPSB0aGlzLm9jdGFsVG9EZWNpbWFsKGNoKTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvY3RhbCA9IG9jdFRvRGVjLm9jdGFsIHx8IG9jdGFsO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKG9jdFRvRGVjLmNvZGUpO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9IGNoO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgKyt0aGlzLmxpbmVOdW1iZXI7XG5cdCAgICAgICAgICAgICAgICAgICAgaWYgKGNoID09PSAnXFxyJyAmJiB0aGlzLnNvdXJjZVt0aGlzLmluZGV4XSA9PT0gJ1xcbicpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgKyt0aGlzLmluZGV4O1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLmxpbmVTdGFydCA9IHRoaXMuaW5kZXg7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgZWxzZSBpZiAoY2hhcmFjdGVyXzEuQ2hhcmFjdGVyLmlzTGluZVRlcm1pbmF0b3IoY2guY2hhckNvZGVBdCgwKSkpIHtcblx0ICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgc3RyICs9IGNoO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmIChxdW90ZSAhPT0gJycpIHtcblx0ICAgICAgICAgICAgdGhpcy5pbmRleCA9IHN0YXJ0O1xuXHQgICAgICAgICAgICB0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB7XG5cdCAgICAgICAgICAgIHR5cGU6IDggLyogU3RyaW5nTGl0ZXJhbCAqLyxcblx0ICAgICAgICAgICAgdmFsdWU6IHN0cixcblx0ICAgICAgICAgICAgb2N0YWw6IG9jdGFsLFxuXHQgICAgICAgICAgICBsaW5lTnVtYmVyOiB0aGlzLmxpbmVOdW1iZXIsXG5cdCAgICAgICAgICAgIGxpbmVTdGFydDogdGhpcy5saW5lU3RhcnQsXG5cdCAgICAgICAgICAgIHN0YXJ0OiBzdGFydCxcblx0ICAgICAgICAgICAgZW5kOiB0aGlzLmluZGV4XG5cdCAgICAgICAgfTtcblx0ICAgIH07XG5cdCAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy10ZW1wbGF0ZS1saXRlcmFsLWxleGljYWwtY29tcG9uZW50c1xuXHQgICAgU2Nhbm5lci5wcm90b3R5cGUuc2NhblRlbXBsYXRlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBjb29rZWQgPSAnJztcblx0ICAgICAgICB2YXIgdGVybWluYXRlZCA9IGZhbHNlO1xuXHQgICAgICAgIHZhciBzdGFydCA9IHRoaXMuaW5kZXg7XG5cdCAgICAgICAgdmFyIGhlYWQgPSAodGhpcy5zb3VyY2Vbc3RhcnRdID09PSAnYCcpO1xuXHQgICAgICAgIHZhciB0YWlsID0gZmFsc2U7XG5cdCAgICAgICAgdmFyIHJhd09mZnNldCA9IDI7XG5cdCAgICAgICAgKyt0aGlzLmluZGV4O1xuXHQgICAgICAgIHdoaWxlICghdGhpcy5lb2YoKSkge1xuXHQgICAgICAgICAgICB2YXIgY2ggPSB0aGlzLnNvdXJjZVt0aGlzLmluZGV4KytdO1xuXHQgICAgICAgICAgICBpZiAoY2ggPT09ICdgJykge1xuXHQgICAgICAgICAgICAgICAgcmF3T2Zmc2V0ID0gMTtcblx0ICAgICAgICAgICAgICAgIHRhaWwgPSB0cnVlO1xuXHQgICAgICAgICAgICAgICAgdGVybWluYXRlZCA9IHRydWU7XG5cdCAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBlbHNlIGlmIChjaCA9PT0gJyQnKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAodGhpcy5zb3VyY2VbdGhpcy5pbmRleF0gPT09ICd7Jykge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VybHlTdGFjay5wdXNoKCckeycpO1xuXHQgICAgICAgICAgICAgICAgICAgICsrdGhpcy5pbmRleDtcblx0ICAgICAgICAgICAgICAgICAgICB0ZXJtaW5hdGVkID0gdHJ1ZTtcblx0ICAgICAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIGNvb2tlZCArPSBjaDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBlbHNlIGlmIChjaCA9PT0gJ1xcXFwnKSB7XG5cdCAgICAgICAgICAgICAgICBjaCA9IHRoaXMuc291cmNlW3RoaXMuaW5kZXgrK107XG5cdCAgICAgICAgICAgICAgICBpZiAoIWNoYXJhY3Rlcl8xLkNoYXJhY3Rlci5pc0xpbmVUZXJtaW5hdG9yKGNoLmNoYXJDb2RlQXQoMCkpKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChjaCkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICduJzpcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvb2tlZCArPSAnXFxuJztcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdyJzpcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvb2tlZCArPSAnXFxyJztcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICd0Jzpcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvb2tlZCArPSAnXFx0Jztcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICd1Jzpcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNvdXJjZVt0aGlzLmluZGV4XSA9PT0gJ3snKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyt0aGlzLmluZGV4O1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvb2tlZCArPSB0aGlzLnNjYW5Vbmljb2RlQ29kZVBvaW50RXNjYXBlKCk7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdG9yZSA9IHRoaXMuaW5kZXg7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHVuZXNjYXBlZF8yID0gdGhpcy5zY2FuSGV4RXNjYXBlKGNoKTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodW5lc2NhcGVkXzIgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29va2VkICs9IHVuZXNjYXBlZF8yO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbmRleCA9IHJlc3RvcmU7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvb2tlZCArPSBjaDtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAneCc6XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdW5lc2NhcGVkID0gdGhpcy5zY2FuSGV4RXNjYXBlKGNoKTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1bmVzY2FwZWQgPT09IG51bGwpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKG1lc3NhZ2VzXzEuTWVzc2FnZXMuSW52YWxpZEhleEVzY2FwZVNlcXVlbmNlKTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvb2tlZCArPSB1bmVzY2FwZWQ7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnYic6XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb29rZWQgKz0gJ1xcYic7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnZic6XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb29rZWQgKz0gJ1xcZic7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAndic6XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb29rZWQgKz0gJ1xcdic7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gJzAnKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoYXJhY3Rlcl8xLkNoYXJhY3Rlci5pc0RlY2ltYWxEaWdpdCh0aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMuaW5kZXgpKSkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJbGxlZ2FsOiBcXDAxIFxcMDIgYW5kIHNvIG9uXG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4obWVzc2FnZXNfMS5NZXNzYWdlcy5UZW1wbGF0ZU9jdGFsTGl0ZXJhbCk7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvb2tlZCArPSAnXFwwJztcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNoYXJhY3Rlcl8xLkNoYXJhY3Rlci5pc09jdGFsRGlnaXQoY2guY2hhckNvZGVBdCgwKSkpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJbGxlZ2FsOiBcXDEgXFwyXG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbihtZXNzYWdlc18xLk1lc3NhZ2VzLlRlbXBsYXRlT2N0YWxMaXRlcmFsKTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvb2tlZCArPSBjaDtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgICsrdGhpcy5saW5lTnVtYmVyO1xuXHQgICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gJ1xccicgJiYgdGhpcy5zb3VyY2VbdGhpcy5pbmRleF0gPT09ICdcXG4nKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICsrdGhpcy5pbmRleDtcblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5saW5lU3RhcnQgPSB0aGlzLmluZGV4O1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGVsc2UgaWYgKGNoYXJhY3Rlcl8xLkNoYXJhY3Rlci5pc0xpbmVUZXJtaW5hdG9yKGNoLmNoYXJDb2RlQXQoMCkpKSB7XG5cdCAgICAgICAgICAgICAgICArK3RoaXMubGluZU51bWJlcjtcblx0ICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gJ1xccicgJiYgdGhpcy5zb3VyY2VbdGhpcy5pbmRleF0gPT09ICdcXG4nKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgKyt0aGlzLmluZGV4O1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgdGhpcy5saW5lU3RhcnQgPSB0aGlzLmluZGV4O1xuXHQgICAgICAgICAgICAgICAgY29va2VkICs9ICdcXG4nO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgY29va2VkICs9IGNoO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmICghdGVybWluYXRlZCkge1xuXHQgICAgICAgICAgICB0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmICghaGVhZCkge1xuXHQgICAgICAgICAgICB0aGlzLmN1cmx5U3RhY2sucG9wKCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB7XG5cdCAgICAgICAgICAgIHR5cGU6IDEwIC8qIFRlbXBsYXRlICovLFxuXHQgICAgICAgICAgICB2YWx1ZTogdGhpcy5zb3VyY2Uuc2xpY2Uoc3RhcnQgKyAxLCB0aGlzLmluZGV4IC0gcmF3T2Zmc2V0KSxcblx0ICAgICAgICAgICAgY29va2VkOiBjb29rZWQsXG5cdCAgICAgICAgICAgIGhlYWQ6IGhlYWQsXG5cdCAgICAgICAgICAgIHRhaWw6IHRhaWwsXG5cdCAgICAgICAgICAgIGxpbmVOdW1iZXI6IHRoaXMubGluZU51bWJlcixcblx0ICAgICAgICAgICAgbGluZVN0YXJ0OiB0aGlzLmxpbmVTdGFydCxcblx0ICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LFxuXHQgICAgICAgICAgICBlbmQ6IHRoaXMuaW5kZXhcblx0ICAgICAgICB9O1xuXHQgICAgfTtcblx0ICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWxpdGVyYWxzLXJlZ3VsYXItZXhwcmVzc2lvbi1saXRlcmFsc1xuXHQgICAgU2Nhbm5lci5wcm90b3R5cGUudGVzdFJlZ0V4cCA9IGZ1bmN0aW9uIChwYXR0ZXJuLCBmbGFncykge1xuXHQgICAgICAgIC8vIFRoZSBCTVAgY2hhcmFjdGVyIHRvIHVzZSBhcyBhIHJlcGxhY2VtZW50IGZvciBhc3RyYWwgc3ltYm9scyB3aGVuXG5cdCAgICAgICAgLy8gdHJhbnNsYXRpbmcgYW4gRVM2IFwidVwiLWZsYWdnZWQgcGF0dGVybiB0byBhbiBFUzUtY29tcGF0aWJsZVxuXHQgICAgICAgIC8vIGFwcHJveGltYXRpb24uXG5cdCAgICAgICAgLy8gTm90ZTogcmVwbGFjaW5nIHdpdGggJ1xcdUZGRkYnIGVuYWJsZXMgZmFsc2UgcG9zaXRpdmVzIGluIHVubGlrZWx5XG5cdCAgICAgICAgLy8gc2NlbmFyaW9zLiBGb3IgZXhhbXBsZSwgYFtcXHV7MTA0NGZ9LVxcdXsxMDQ0MH1dYCBpcyBhbiBpbnZhbGlkXG5cdCAgICAgICAgLy8gcGF0dGVybiB0aGF0IHdvdWxkIG5vdCBiZSBkZXRlY3RlZCBieSB0aGlzIHN1YnN0aXR1dGlvbi5cblx0ICAgICAgICB2YXIgYXN0cmFsU3Vic3RpdHV0ZSA9ICdcXHVGRkZGJztcblx0ICAgICAgICB2YXIgdG1wID0gcGF0dGVybjtcblx0ICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XG5cdCAgICAgICAgaWYgKGZsYWdzLmluZGV4T2YoJ3UnKSA+PSAwKSB7XG5cdCAgICAgICAgICAgIHRtcCA9IHRtcFxuXHQgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcXFx1XFx7KFswLTlhLWZBLUZdKylcXH18XFxcXHUoW2EtZkEtRjAtOV17NH0pL2csIGZ1bmN0aW9uICgkMCwgJDEsICQyKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgY29kZVBvaW50ID0gcGFyc2VJbnQoJDEgfHwgJDIsIDE2KTtcblx0ICAgICAgICAgICAgICAgIGlmIChjb2RlUG9pbnQgPiAweDEwRkZGRikge1xuXHQgICAgICAgICAgICAgICAgICAgIHNlbGYudGhyb3dVbmV4cGVjdGVkVG9rZW4obWVzc2FnZXNfMS5NZXNzYWdlcy5JbnZhbGlkUmVnRXhwKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIGlmIChjb2RlUG9pbnQgPD0gMHhGRkZGKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZVBvaW50KTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIHJldHVybiBhc3RyYWxTdWJzdGl0dXRlO1xuXHQgICAgICAgICAgICB9KVxuXHQgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1tcXHVEODAwLVxcdURCRkZdW1xcdURDMDAtXFx1REZGRl0vZywgYXN0cmFsU3Vic3RpdHV0ZSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vIEZpcnN0LCBkZXRlY3QgaW52YWxpZCByZWd1bGFyIGV4cHJlc3Npb25zLlxuXHQgICAgICAgIHRyeSB7XG5cdCAgICAgICAgICAgIFJlZ0V4cCh0bXApO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBjYXRjaCAoZSkge1xuXHQgICAgICAgICAgICB0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKG1lc3NhZ2VzXzEuTWVzc2FnZXMuSW52YWxpZFJlZ0V4cCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vIFJldHVybiBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBvYmplY3QgZm9yIHRoaXMgcGF0dGVybi1mbGFnIHBhaXIsIG9yXG5cdCAgICAgICAgLy8gYG51bGxgIGluIGNhc2UgdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQgZG9lc24ndCBzdXBwb3J0IHRoZSBmbGFncyBpdFxuXHQgICAgICAgIC8vIHVzZXMuXG5cdCAgICAgICAgdHJ5IHtcblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAocGF0dGVybiwgZmxhZ3MpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBjYXRjaCAoZXhjZXB0aW9uKSB7XG5cdCAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5cdCAgICAgICAgICAgIHJldHVybiBudWxsO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICBTY2FubmVyLnByb3RvdHlwZS5zY2FuUmVnRXhwQm9keSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgY2ggPSB0aGlzLnNvdXJjZVt0aGlzLmluZGV4XTtcblx0ICAgICAgICBhc3NlcnRfMS5hc3NlcnQoY2ggPT09ICcvJywgJ1JlZ3VsYXIgZXhwcmVzc2lvbiBsaXRlcmFsIG11c3Qgc3RhcnQgd2l0aCBhIHNsYXNoJyk7XG5cdCAgICAgICAgdmFyIHN0ciA9IHRoaXMuc291cmNlW3RoaXMuaW5kZXgrK107XG5cdCAgICAgICAgdmFyIGNsYXNzTWFya2VyID0gZmFsc2U7XG5cdCAgICAgICAgdmFyIHRlcm1pbmF0ZWQgPSBmYWxzZTtcblx0ICAgICAgICB3aGlsZSAoIXRoaXMuZW9mKCkpIHtcblx0ICAgICAgICAgICAgY2ggPSB0aGlzLnNvdXJjZVt0aGlzLmluZGV4KytdO1xuXHQgICAgICAgICAgICBzdHIgKz0gY2g7XG5cdCAgICAgICAgICAgIGlmIChjaCA9PT0gJ1xcXFwnKSB7XG5cdCAgICAgICAgICAgICAgICBjaCA9IHRoaXMuc291cmNlW3RoaXMuaW5kZXgrK107XG5cdCAgICAgICAgICAgICAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1saXRlcmFscy1yZWd1bGFyLWV4cHJlc3Npb24tbGl0ZXJhbHNcblx0ICAgICAgICAgICAgICAgIGlmIChjaGFyYWN0ZXJfMS5DaGFyYWN0ZXIuaXNMaW5lVGVybWluYXRvcihjaC5jaGFyQ29kZUF0KDApKSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4obWVzc2FnZXNfMS5NZXNzYWdlcy5VbnRlcm1pbmF0ZWRSZWdFeHApO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgc3RyICs9IGNoO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGVsc2UgaWYgKGNoYXJhY3Rlcl8xLkNoYXJhY3Rlci5pc0xpbmVUZXJtaW5hdG9yKGNoLmNoYXJDb2RlQXQoMCkpKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKG1lc3NhZ2VzXzEuTWVzc2FnZXMuVW50ZXJtaW5hdGVkUmVnRXhwKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBlbHNlIGlmIChjbGFzc01hcmtlcikge1xuXHQgICAgICAgICAgICAgICAgaWYgKGNoID09PSAnXScpIHtcblx0ICAgICAgICAgICAgICAgICAgICBjbGFzc01hcmtlciA9IGZhbHNlO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgaWYgKGNoID09PSAnLycpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0ZXJtaW5hdGVkID0gdHJ1ZTtcblx0ICAgICAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNoID09PSAnWycpIHtcblx0ICAgICAgICAgICAgICAgICAgICBjbGFzc01hcmtlciA9IHRydWU7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgaWYgKCF0ZXJtaW5hdGVkKSB7XG5cdCAgICAgICAgICAgIHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4obWVzc2FnZXNfMS5NZXNzYWdlcy5VbnRlcm1pbmF0ZWRSZWdFeHApO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvLyBFeGNsdWRlIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHNsYXNoLlxuXHQgICAgICAgIHJldHVybiBzdHIuc3Vic3RyKDEsIHN0ci5sZW5ndGggLSAyKTtcblx0ICAgIH07XG5cdCAgICBTY2FubmVyLnByb3RvdHlwZS5zY2FuUmVnRXhwRmxhZ3MgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIHN0ciA9ICcnO1xuXHQgICAgICAgIHZhciBmbGFncyA9ICcnO1xuXHQgICAgICAgIHdoaWxlICghdGhpcy5lb2YoKSkge1xuXHQgICAgICAgICAgICB2YXIgY2ggPSB0aGlzLnNvdXJjZVt0aGlzLmluZGV4XTtcblx0ICAgICAgICAgICAgaWYgKCFjaGFyYWN0ZXJfMS5DaGFyYWN0ZXIuaXNJZGVudGlmaWVyUGFydChjaC5jaGFyQ29kZUF0KDApKSkge1xuXHQgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgKyt0aGlzLmluZGV4O1xuXHQgICAgICAgICAgICBpZiAoY2ggPT09ICdcXFxcJyAmJiAhdGhpcy5lb2YoKSkge1xuXHQgICAgICAgICAgICAgICAgY2ggPSB0aGlzLnNvdXJjZVt0aGlzLmluZGV4XTtcblx0ICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gJ3UnKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgKyt0aGlzLmluZGV4O1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciByZXN0b3JlID0gdGhpcy5pbmRleDtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgY2hhciA9IHRoaXMuc2NhbkhleEVzY2FwZSgndScpO1xuXHQgICAgICAgICAgICAgICAgICAgIGlmIChjaGFyICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzICs9IGNoYXI7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoc3RyICs9ICdcXFxcdSc7IHJlc3RvcmUgPCB0aGlzLmluZGV4OyArK3Jlc3RvcmUpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSB0aGlzLnNvdXJjZVtyZXN0b3JlXTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgICAgICBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbmRleCA9IHJlc3RvcmU7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzICs9ICd1Jztcblx0ICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9ICdcXFxcdSc7XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMudG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4oKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIHN0ciArPSAnXFxcXCc7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy50b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbigpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgZmxhZ3MgKz0gY2g7XG5cdCAgICAgICAgICAgICAgICBzdHIgKz0gY2g7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIGZsYWdzO1xuXHQgICAgfTtcblx0ICAgIFNjYW5uZXIucHJvdG90eXBlLnNjYW5SZWdFeHAgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIHN0YXJ0ID0gdGhpcy5pbmRleDtcblx0ICAgICAgICB2YXIgcGF0dGVybiA9IHRoaXMuc2NhblJlZ0V4cEJvZHkoKTtcblx0ICAgICAgICB2YXIgZmxhZ3MgPSB0aGlzLnNjYW5SZWdFeHBGbGFncygpO1xuXHQgICAgICAgIHZhciB2YWx1ZSA9IHRoaXMudGVzdFJlZ0V4cChwYXR0ZXJuLCBmbGFncyk7XG5cdCAgICAgICAgcmV0dXJuIHtcblx0ICAgICAgICAgICAgdHlwZTogOSAvKiBSZWd1bGFyRXhwcmVzc2lvbiAqLyxcblx0ICAgICAgICAgICAgdmFsdWU6ICcnLFxuXHQgICAgICAgICAgICBwYXR0ZXJuOiBwYXR0ZXJuLFxuXHQgICAgICAgICAgICBmbGFnczogZmxhZ3MsXG5cdCAgICAgICAgICAgIHJlZ2V4OiB2YWx1ZSxcblx0ICAgICAgICAgICAgbGluZU51bWJlcjogdGhpcy5saW5lTnVtYmVyLFxuXHQgICAgICAgICAgICBsaW5lU3RhcnQ6IHRoaXMubGluZVN0YXJ0LFxuXHQgICAgICAgICAgICBzdGFydDogc3RhcnQsXG5cdCAgICAgICAgICAgIGVuZDogdGhpcy5pbmRleFxuXHQgICAgICAgIH07XG5cdCAgICB9O1xuXHQgICAgU2Nhbm5lci5wcm90b3R5cGUubGV4ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGlmICh0aGlzLmVvZigpKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB7XG5cdCAgICAgICAgICAgICAgICB0eXBlOiAyIC8qIEVPRiAqLyxcblx0ICAgICAgICAgICAgICAgIHZhbHVlOiAnJyxcblx0ICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IHRoaXMubGluZU51bWJlcixcblx0ICAgICAgICAgICAgICAgIGxpbmVTdGFydDogdGhpcy5saW5lU3RhcnQsXG5cdCAgICAgICAgICAgICAgICBzdGFydDogdGhpcy5pbmRleCxcblx0ICAgICAgICAgICAgICAgIGVuZDogdGhpcy5pbmRleFxuXHQgICAgICAgICAgICB9O1xuXHQgICAgICAgIH1cblx0ICAgICAgICB2YXIgY3AgPSB0aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMuaW5kZXgpO1xuXHQgICAgICAgIGlmIChjaGFyYWN0ZXJfMS5DaGFyYWN0ZXIuaXNJZGVudGlmaWVyU3RhcnQoY3ApKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLnNjYW5JZGVudGlmaWVyKCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vIFZlcnkgY29tbW9uOiAoIGFuZCApIGFuZCA7XG5cdCAgICAgICAgaWYgKGNwID09PSAweDI4IHx8IGNwID09PSAweDI5IHx8IGNwID09PSAweDNCKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLnNjYW5QdW5jdHVhdG9yKCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vIFN0cmluZyBsaXRlcmFsIHN0YXJ0cyB3aXRoIHNpbmdsZSBxdW90ZSAoVSswMDI3KSBvciBkb3VibGUgcXVvdGUgKFUrMDAyMikuXG5cdCAgICAgICAgaWYgKGNwID09PSAweDI3IHx8IGNwID09PSAweDIyKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLnNjYW5TdHJpbmdMaXRlcmFsKCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vIERvdCAoLikgVSswMDJFIGNhbiBhbHNvIHN0YXJ0IGEgZmxvYXRpbmctcG9pbnQgbnVtYmVyLCBoZW5jZSB0aGUgbmVlZFxuXHQgICAgICAgIC8vIHRvIGNoZWNrIHRoZSBuZXh0IGNoYXJhY3Rlci5cblx0ICAgICAgICBpZiAoY3AgPT09IDB4MkUpIHtcblx0ICAgICAgICAgICAgaWYgKGNoYXJhY3Rlcl8xLkNoYXJhY3Rlci5pc0RlY2ltYWxEaWdpdCh0aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMuaW5kZXggKyAxKSkpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNjYW5OdW1lcmljTGl0ZXJhbCgpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLnNjYW5QdW5jdHVhdG9yKCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmIChjaGFyYWN0ZXJfMS5DaGFyYWN0ZXIuaXNEZWNpbWFsRGlnaXQoY3ApKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLnNjYW5OdW1lcmljTGl0ZXJhbCgpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvLyBUZW1wbGF0ZSBsaXRlcmFscyBzdGFydCB3aXRoIGAgKFUrMDA2MCkgZm9yIHRlbXBsYXRlIGhlYWRcblx0ICAgICAgICAvLyBvciB9IChVKzAwN0QpIGZvciB0ZW1wbGF0ZSBtaWRkbGUgb3IgdGVtcGxhdGUgdGFpbC5cblx0ICAgICAgICBpZiAoY3AgPT09IDB4NjAgfHwgKGNwID09PSAweDdEICYmIHRoaXMuY3VybHlTdGFja1t0aGlzLmN1cmx5U3RhY2subGVuZ3RoIC0gMV0gPT09ICckeycpKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLnNjYW5UZW1wbGF0ZSgpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvLyBQb3NzaWJsZSBpZGVudGlmaWVyIHN0YXJ0IGluIGEgc3Vycm9nYXRlIHBhaXIuXG5cdCAgICAgICAgaWYgKGNwID49IDB4RDgwMCAmJiBjcCA8IDB4REZGRikge1xuXHQgICAgICAgICAgICBpZiAoY2hhcmFjdGVyXzEuQ2hhcmFjdGVyLmlzSWRlbnRpZmllclN0YXJ0KHRoaXMuY29kZVBvaW50QXQodGhpcy5pbmRleCkpKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FuSWRlbnRpZmllcigpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzLnNjYW5QdW5jdHVhdG9yKCk7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFNjYW5uZXI7XG5cdH0oKSk7XG5cdGV4cG9ydHMuU2Nhbm5lciA9IFNjYW5uZXI7XG5cblxuLyoqKi8gfSxcbi8qIDEzICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHRcInVzZSBzdHJpY3RcIjtcblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLlRva2VuTmFtZSA9IHt9O1xuXHRleHBvcnRzLlRva2VuTmFtZVsxIC8qIEJvb2xlYW5MaXRlcmFsICovXSA9ICdCb29sZWFuJztcblx0ZXhwb3J0cy5Ub2tlbk5hbWVbMiAvKiBFT0YgKi9dID0gJzxlbmQ+Jztcblx0ZXhwb3J0cy5Ub2tlbk5hbWVbMyAvKiBJZGVudGlmaWVyICovXSA9ICdJZGVudGlmaWVyJztcblx0ZXhwb3J0cy5Ub2tlbk5hbWVbNCAvKiBLZXl3b3JkICovXSA9ICdLZXl3b3JkJztcblx0ZXhwb3J0cy5Ub2tlbk5hbWVbNSAvKiBOdWxsTGl0ZXJhbCAqL10gPSAnTnVsbCc7XG5cdGV4cG9ydHMuVG9rZW5OYW1lWzYgLyogTnVtZXJpY0xpdGVyYWwgKi9dID0gJ051bWVyaWMnO1xuXHRleHBvcnRzLlRva2VuTmFtZVs3IC8qIFB1bmN0dWF0b3IgKi9dID0gJ1B1bmN0dWF0b3InO1xuXHRleHBvcnRzLlRva2VuTmFtZVs4IC8qIFN0cmluZ0xpdGVyYWwgKi9dID0gJ1N0cmluZyc7XG5cdGV4cG9ydHMuVG9rZW5OYW1lWzkgLyogUmVndWxhckV4cHJlc3Npb24gKi9dID0gJ1JlZ3VsYXJFeHByZXNzaW9uJztcblx0ZXhwb3J0cy5Ub2tlbk5hbWVbMTAgLyogVGVtcGxhdGUgKi9dID0gJ1RlbXBsYXRlJztcblxuXG4vKioqLyB9LFxuLyogMTQgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdFwidXNlIHN0cmljdFwiO1xuXHQvLyBHZW5lcmF0ZWQgYnkgZ2VuZXJhdGUteGh0bWwtZW50aXRpZXMuanMuIERPIE5PVCBNT0RJRlkhXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0ZXhwb3J0cy5YSFRNTEVudGl0aWVzID0ge1xuXHQgICAgcXVvdDogJ1xcdTAwMjInLFxuXHQgICAgYW1wOiAnXFx1MDAyNicsXG5cdCAgICBhcG9zOiAnXFx1MDAyNycsXG5cdCAgICBndDogJ1xcdTAwM0UnLFxuXHQgICAgbmJzcDogJ1xcdTAwQTAnLFxuXHQgICAgaWV4Y2w6ICdcXHUwMEExJyxcblx0ICAgIGNlbnQ6ICdcXHUwMEEyJyxcblx0ICAgIHBvdW5kOiAnXFx1MDBBMycsXG5cdCAgICBjdXJyZW46ICdcXHUwMEE0Jyxcblx0ICAgIHllbjogJ1xcdTAwQTUnLFxuXHQgICAgYnJ2YmFyOiAnXFx1MDBBNicsXG5cdCAgICBzZWN0OiAnXFx1MDBBNycsXG5cdCAgICB1bWw6ICdcXHUwMEE4Jyxcblx0ICAgIGNvcHk6ICdcXHUwMEE5Jyxcblx0ICAgIG9yZGY6ICdcXHUwMEFBJyxcblx0ICAgIGxhcXVvOiAnXFx1MDBBQicsXG5cdCAgICBub3Q6ICdcXHUwMEFDJyxcblx0ICAgIHNoeTogJ1xcdTAwQUQnLFxuXHQgICAgcmVnOiAnXFx1MDBBRScsXG5cdCAgICBtYWNyOiAnXFx1MDBBRicsXG5cdCAgICBkZWc6ICdcXHUwMEIwJyxcblx0ICAgIHBsdXNtbjogJ1xcdTAwQjEnLFxuXHQgICAgc3VwMjogJ1xcdTAwQjInLFxuXHQgICAgc3VwMzogJ1xcdTAwQjMnLFxuXHQgICAgYWN1dGU6ICdcXHUwMEI0Jyxcblx0ICAgIG1pY3JvOiAnXFx1MDBCNScsXG5cdCAgICBwYXJhOiAnXFx1MDBCNicsXG5cdCAgICBtaWRkb3Q6ICdcXHUwMEI3Jyxcblx0ICAgIGNlZGlsOiAnXFx1MDBCOCcsXG5cdCAgICBzdXAxOiAnXFx1MDBCOScsXG5cdCAgICBvcmRtOiAnXFx1MDBCQScsXG5cdCAgICByYXF1bzogJ1xcdTAwQkInLFxuXHQgICAgZnJhYzE0OiAnXFx1MDBCQycsXG5cdCAgICBmcmFjMTI6ICdcXHUwMEJEJyxcblx0ICAgIGZyYWMzNDogJ1xcdTAwQkUnLFxuXHQgICAgaXF1ZXN0OiAnXFx1MDBCRicsXG5cdCAgICBBZ3JhdmU6ICdcXHUwMEMwJyxcblx0ICAgIEFhY3V0ZTogJ1xcdTAwQzEnLFxuXHQgICAgQWNpcmM6ICdcXHUwMEMyJyxcblx0ICAgIEF0aWxkZTogJ1xcdTAwQzMnLFxuXHQgICAgQXVtbDogJ1xcdTAwQzQnLFxuXHQgICAgQXJpbmc6ICdcXHUwMEM1Jyxcblx0ICAgIEFFbGlnOiAnXFx1MDBDNicsXG5cdCAgICBDY2VkaWw6ICdcXHUwMEM3Jyxcblx0ICAgIEVncmF2ZTogJ1xcdTAwQzgnLFxuXHQgICAgRWFjdXRlOiAnXFx1MDBDOScsXG5cdCAgICBFY2lyYzogJ1xcdTAwQ0EnLFxuXHQgICAgRXVtbDogJ1xcdTAwQ0InLFxuXHQgICAgSWdyYXZlOiAnXFx1MDBDQycsXG5cdCAgICBJYWN1dGU6ICdcXHUwMENEJyxcblx0ICAgIEljaXJjOiAnXFx1MDBDRScsXG5cdCAgICBJdW1sOiAnXFx1MDBDRicsXG5cdCAgICBFVEg6ICdcXHUwMEQwJyxcblx0ICAgIE50aWxkZTogJ1xcdTAwRDEnLFxuXHQgICAgT2dyYXZlOiAnXFx1MDBEMicsXG5cdCAgICBPYWN1dGU6ICdcXHUwMEQzJyxcblx0ICAgIE9jaXJjOiAnXFx1MDBENCcsXG5cdCAgICBPdGlsZGU6ICdcXHUwMEQ1Jyxcblx0ICAgIE91bWw6ICdcXHUwMEQ2Jyxcblx0ICAgIHRpbWVzOiAnXFx1MDBENycsXG5cdCAgICBPc2xhc2g6ICdcXHUwMEQ4Jyxcblx0ICAgIFVncmF2ZTogJ1xcdTAwRDknLFxuXHQgICAgVWFjdXRlOiAnXFx1MDBEQScsXG5cdCAgICBVY2lyYzogJ1xcdTAwREInLFxuXHQgICAgVXVtbDogJ1xcdTAwREMnLFxuXHQgICAgWWFjdXRlOiAnXFx1MDBERCcsXG5cdCAgICBUSE9STjogJ1xcdTAwREUnLFxuXHQgICAgc3psaWc6ICdcXHUwMERGJyxcblx0ICAgIGFncmF2ZTogJ1xcdTAwRTAnLFxuXHQgICAgYWFjdXRlOiAnXFx1MDBFMScsXG5cdCAgICBhY2lyYzogJ1xcdTAwRTInLFxuXHQgICAgYXRpbGRlOiAnXFx1MDBFMycsXG5cdCAgICBhdW1sOiAnXFx1MDBFNCcsXG5cdCAgICBhcmluZzogJ1xcdTAwRTUnLFxuXHQgICAgYWVsaWc6ICdcXHUwMEU2Jyxcblx0ICAgIGNjZWRpbDogJ1xcdTAwRTcnLFxuXHQgICAgZWdyYXZlOiAnXFx1MDBFOCcsXG5cdCAgICBlYWN1dGU6ICdcXHUwMEU5Jyxcblx0ICAgIGVjaXJjOiAnXFx1MDBFQScsXG5cdCAgICBldW1sOiAnXFx1MDBFQicsXG5cdCAgICBpZ3JhdmU6ICdcXHUwMEVDJyxcblx0ICAgIGlhY3V0ZTogJ1xcdTAwRUQnLFxuXHQgICAgaWNpcmM6ICdcXHUwMEVFJyxcblx0ICAgIGl1bWw6ICdcXHUwMEVGJyxcblx0ICAgIGV0aDogJ1xcdTAwRjAnLFxuXHQgICAgbnRpbGRlOiAnXFx1MDBGMScsXG5cdCAgICBvZ3JhdmU6ICdcXHUwMEYyJyxcblx0ICAgIG9hY3V0ZTogJ1xcdTAwRjMnLFxuXHQgICAgb2NpcmM6ICdcXHUwMEY0Jyxcblx0ICAgIG90aWxkZTogJ1xcdTAwRjUnLFxuXHQgICAgb3VtbDogJ1xcdTAwRjYnLFxuXHQgICAgZGl2aWRlOiAnXFx1MDBGNycsXG5cdCAgICBvc2xhc2g6ICdcXHUwMEY4Jyxcblx0ICAgIHVncmF2ZTogJ1xcdTAwRjknLFxuXHQgICAgdWFjdXRlOiAnXFx1MDBGQScsXG5cdCAgICB1Y2lyYzogJ1xcdTAwRkInLFxuXHQgICAgdXVtbDogJ1xcdTAwRkMnLFxuXHQgICAgeWFjdXRlOiAnXFx1MDBGRCcsXG5cdCAgICB0aG9ybjogJ1xcdTAwRkUnLFxuXHQgICAgeXVtbDogJ1xcdTAwRkYnLFxuXHQgICAgT0VsaWc6ICdcXHUwMTUyJyxcblx0ICAgIG9lbGlnOiAnXFx1MDE1MycsXG5cdCAgICBTY2Fyb246ICdcXHUwMTYwJyxcblx0ICAgIHNjYXJvbjogJ1xcdTAxNjEnLFxuXHQgICAgWXVtbDogJ1xcdTAxNzgnLFxuXHQgICAgZm5vZjogJ1xcdTAxOTInLFxuXHQgICAgY2lyYzogJ1xcdTAyQzYnLFxuXHQgICAgdGlsZGU6ICdcXHUwMkRDJyxcblx0ICAgIEFscGhhOiAnXFx1MDM5MScsXG5cdCAgICBCZXRhOiAnXFx1MDM5MicsXG5cdCAgICBHYW1tYTogJ1xcdTAzOTMnLFxuXHQgICAgRGVsdGE6ICdcXHUwMzk0Jyxcblx0ICAgIEVwc2lsb246ICdcXHUwMzk1Jyxcblx0ICAgIFpldGE6ICdcXHUwMzk2Jyxcblx0ICAgIEV0YTogJ1xcdTAzOTcnLFxuXHQgICAgVGhldGE6ICdcXHUwMzk4Jyxcblx0ICAgIElvdGE6ICdcXHUwMzk5Jyxcblx0ICAgIEthcHBhOiAnXFx1MDM5QScsXG5cdCAgICBMYW1iZGE6ICdcXHUwMzlCJyxcblx0ICAgIE11OiAnXFx1MDM5QycsXG5cdCAgICBOdTogJ1xcdTAzOUQnLFxuXHQgICAgWGk6ICdcXHUwMzlFJyxcblx0ICAgIE9taWNyb246ICdcXHUwMzlGJyxcblx0ICAgIFBpOiAnXFx1MDNBMCcsXG5cdCAgICBSaG86ICdcXHUwM0ExJyxcblx0ICAgIFNpZ21hOiAnXFx1MDNBMycsXG5cdCAgICBUYXU6ICdcXHUwM0E0Jyxcblx0ICAgIFVwc2lsb246ICdcXHUwM0E1Jyxcblx0ICAgIFBoaTogJ1xcdTAzQTYnLFxuXHQgICAgQ2hpOiAnXFx1MDNBNycsXG5cdCAgICBQc2k6ICdcXHUwM0E4Jyxcblx0ICAgIE9tZWdhOiAnXFx1MDNBOScsXG5cdCAgICBhbHBoYTogJ1xcdTAzQjEnLFxuXHQgICAgYmV0YTogJ1xcdTAzQjInLFxuXHQgICAgZ2FtbWE6ICdcXHUwM0IzJyxcblx0ICAgIGRlbHRhOiAnXFx1MDNCNCcsXG5cdCAgICBlcHNpbG9uOiAnXFx1MDNCNScsXG5cdCAgICB6ZXRhOiAnXFx1MDNCNicsXG5cdCAgICBldGE6ICdcXHUwM0I3Jyxcblx0ICAgIHRoZXRhOiAnXFx1MDNCOCcsXG5cdCAgICBpb3RhOiAnXFx1MDNCOScsXG5cdCAgICBrYXBwYTogJ1xcdTAzQkEnLFxuXHQgICAgbGFtYmRhOiAnXFx1MDNCQicsXG5cdCAgICBtdTogJ1xcdTAzQkMnLFxuXHQgICAgbnU6ICdcXHUwM0JEJyxcblx0ICAgIHhpOiAnXFx1MDNCRScsXG5cdCAgICBvbWljcm9uOiAnXFx1MDNCRicsXG5cdCAgICBwaTogJ1xcdTAzQzAnLFxuXHQgICAgcmhvOiAnXFx1MDNDMScsXG5cdCAgICBzaWdtYWY6ICdcXHUwM0MyJyxcblx0ICAgIHNpZ21hOiAnXFx1MDNDMycsXG5cdCAgICB0YXU6ICdcXHUwM0M0Jyxcblx0ICAgIHVwc2lsb246ICdcXHUwM0M1Jyxcblx0ICAgIHBoaTogJ1xcdTAzQzYnLFxuXHQgICAgY2hpOiAnXFx1MDNDNycsXG5cdCAgICBwc2k6ICdcXHUwM0M4Jyxcblx0ICAgIG9tZWdhOiAnXFx1MDNDOScsXG5cdCAgICB0aGV0YXN5bTogJ1xcdTAzRDEnLFxuXHQgICAgdXBzaWg6ICdcXHUwM0QyJyxcblx0ICAgIHBpdjogJ1xcdTAzRDYnLFxuXHQgICAgZW5zcDogJ1xcdTIwMDInLFxuXHQgICAgZW1zcDogJ1xcdTIwMDMnLFxuXHQgICAgdGhpbnNwOiAnXFx1MjAwOScsXG5cdCAgICB6d25qOiAnXFx1MjAwQycsXG5cdCAgICB6d2o6ICdcXHUyMDBEJyxcblx0ICAgIGxybTogJ1xcdTIwMEUnLFxuXHQgICAgcmxtOiAnXFx1MjAwRicsXG5cdCAgICBuZGFzaDogJ1xcdTIwMTMnLFxuXHQgICAgbWRhc2g6ICdcXHUyMDE0Jyxcblx0ICAgIGxzcXVvOiAnXFx1MjAxOCcsXG5cdCAgICByc3F1bzogJ1xcdTIwMTknLFxuXHQgICAgc2JxdW86ICdcXHUyMDFBJyxcblx0ICAgIGxkcXVvOiAnXFx1MjAxQycsXG5cdCAgICByZHF1bzogJ1xcdTIwMUQnLFxuXHQgICAgYmRxdW86ICdcXHUyMDFFJyxcblx0ICAgIGRhZ2dlcjogJ1xcdTIwMjAnLFxuXHQgICAgRGFnZ2VyOiAnXFx1MjAyMScsXG5cdCAgICBidWxsOiAnXFx1MjAyMicsXG5cdCAgICBoZWxsaXA6ICdcXHUyMDI2Jyxcblx0ICAgIHBlcm1pbDogJ1xcdTIwMzAnLFxuXHQgICAgcHJpbWU6ICdcXHUyMDMyJyxcblx0ICAgIFByaW1lOiAnXFx1MjAzMycsXG5cdCAgICBsc2FxdW86ICdcXHUyMDM5Jyxcblx0ICAgIHJzYXF1bzogJ1xcdTIwM0EnLFxuXHQgICAgb2xpbmU6ICdcXHUyMDNFJyxcblx0ICAgIGZyYXNsOiAnXFx1MjA0NCcsXG5cdCAgICBldXJvOiAnXFx1MjBBQycsXG5cdCAgICBpbWFnZTogJ1xcdTIxMTEnLFxuXHQgICAgd2VpZXJwOiAnXFx1MjExOCcsXG5cdCAgICByZWFsOiAnXFx1MjExQycsXG5cdCAgICB0cmFkZTogJ1xcdTIxMjInLFxuXHQgICAgYWxlZnN5bTogJ1xcdTIxMzUnLFxuXHQgICAgbGFycjogJ1xcdTIxOTAnLFxuXHQgICAgdWFycjogJ1xcdTIxOTEnLFxuXHQgICAgcmFycjogJ1xcdTIxOTInLFxuXHQgICAgZGFycjogJ1xcdTIxOTMnLFxuXHQgICAgaGFycjogJ1xcdTIxOTQnLFxuXHQgICAgY3JhcnI6ICdcXHUyMUI1Jyxcblx0ICAgIGxBcnI6ICdcXHUyMUQwJyxcblx0ICAgIHVBcnI6ICdcXHUyMUQxJyxcblx0ICAgIHJBcnI6ICdcXHUyMUQyJyxcblx0ICAgIGRBcnI6ICdcXHUyMUQzJyxcblx0ICAgIGhBcnI6ICdcXHUyMUQ0Jyxcblx0ICAgIGZvcmFsbDogJ1xcdTIyMDAnLFxuXHQgICAgcGFydDogJ1xcdTIyMDInLFxuXHQgICAgZXhpc3Q6ICdcXHUyMjAzJyxcblx0ICAgIGVtcHR5OiAnXFx1MjIwNScsXG5cdCAgICBuYWJsYTogJ1xcdTIyMDcnLFxuXHQgICAgaXNpbjogJ1xcdTIyMDgnLFxuXHQgICAgbm90aW46ICdcXHUyMjA5Jyxcblx0ICAgIG5pOiAnXFx1MjIwQicsXG5cdCAgICBwcm9kOiAnXFx1MjIwRicsXG5cdCAgICBzdW06ICdcXHUyMjExJyxcblx0ICAgIG1pbnVzOiAnXFx1MjIxMicsXG5cdCAgICBsb3dhc3Q6ICdcXHUyMjE3Jyxcblx0ICAgIHJhZGljOiAnXFx1MjIxQScsXG5cdCAgICBwcm9wOiAnXFx1MjIxRCcsXG5cdCAgICBpbmZpbjogJ1xcdTIyMUUnLFxuXHQgICAgYW5nOiAnXFx1MjIyMCcsXG5cdCAgICBhbmQ6ICdcXHUyMjI3Jyxcblx0ICAgIG9yOiAnXFx1MjIyOCcsXG5cdCAgICBjYXA6ICdcXHUyMjI5Jyxcblx0ICAgIGN1cDogJ1xcdTIyMkEnLFxuXHQgICAgaW50OiAnXFx1MjIyQicsXG5cdCAgICB0aGVyZTQ6ICdcXHUyMjM0Jyxcblx0ICAgIHNpbTogJ1xcdTIyM0MnLFxuXHQgICAgY29uZzogJ1xcdTIyNDUnLFxuXHQgICAgYXN5bXA6ICdcXHUyMjQ4Jyxcblx0ICAgIG5lOiAnXFx1MjI2MCcsXG5cdCAgICBlcXVpdjogJ1xcdTIyNjEnLFxuXHQgICAgbGU6ICdcXHUyMjY0Jyxcblx0ICAgIGdlOiAnXFx1MjI2NScsXG5cdCAgICBzdWI6ICdcXHUyMjgyJyxcblx0ICAgIHN1cDogJ1xcdTIyODMnLFxuXHQgICAgbnN1YjogJ1xcdTIyODQnLFxuXHQgICAgc3ViZTogJ1xcdTIyODYnLFxuXHQgICAgc3VwZTogJ1xcdTIyODcnLFxuXHQgICAgb3BsdXM6ICdcXHUyMjk1Jyxcblx0ICAgIG90aW1lczogJ1xcdTIyOTcnLFxuXHQgICAgcGVycDogJ1xcdTIyQTUnLFxuXHQgICAgc2RvdDogJ1xcdTIyQzUnLFxuXHQgICAgbGNlaWw6ICdcXHUyMzA4Jyxcblx0ICAgIHJjZWlsOiAnXFx1MjMwOScsXG5cdCAgICBsZmxvb3I6ICdcXHUyMzBBJyxcblx0ICAgIHJmbG9vcjogJ1xcdTIzMEInLFxuXHQgICAgbG96OiAnXFx1MjVDQScsXG5cdCAgICBzcGFkZXM6ICdcXHUyNjYwJyxcblx0ICAgIGNsdWJzOiAnXFx1MjY2MycsXG5cdCAgICBoZWFydHM6ICdcXHUyNjY1Jyxcblx0ICAgIGRpYW1zOiAnXFx1MjY2NicsXG5cdCAgICBsYW5nOiAnXFx1MjdFOCcsXG5cdCAgICByYW5nOiAnXFx1MjdFOSdcblx0fTtcblxuXG4vKioqLyB9LFxuLyogMTUgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdFwidXNlIHN0cmljdFwiO1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdHZhciBlcnJvcl9oYW5kbGVyXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwKTtcblx0dmFyIHNjYW5uZXJfMSA9IF9fd2VicGFja19yZXF1aXJlX18oMTIpO1xuXHR2YXIgdG9rZW5fMSA9IF9fd2VicGFja19yZXF1aXJlX18oMTMpO1xuXHR2YXIgUmVhZGVyID0gKGZ1bmN0aW9uICgpIHtcblx0ICAgIGZ1bmN0aW9uIFJlYWRlcigpIHtcblx0ICAgICAgICB0aGlzLnZhbHVlcyA9IFtdO1xuXHQgICAgICAgIHRoaXMuY3VybHkgPSB0aGlzLnBhcmVuID0gLTE7XG5cdCAgICB9XG5cdCAgICAvLyBBIGZ1bmN0aW9uIGZvbGxvd2luZyBvbmUgb2YgdGhvc2UgdG9rZW5zIGlzIGFuIGV4cHJlc3Npb24uXG5cdCAgICBSZWFkZXIucHJvdG90eXBlLmJlZm9yZUZ1bmN0aW9uRXhwcmVzc2lvbiA9IGZ1bmN0aW9uICh0KSB7XG5cdCAgICAgICAgcmV0dXJuIFsnKCcsICd7JywgJ1snLCAnaW4nLCAndHlwZW9mJywgJ2luc3RhbmNlb2YnLCAnbmV3Jyxcblx0ICAgICAgICAgICAgJ3JldHVybicsICdjYXNlJywgJ2RlbGV0ZScsICd0aHJvdycsICd2b2lkJyxcblx0ICAgICAgICAgICAgLy8gYXNzaWdubWVudCBvcGVyYXRvcnNcblx0ICAgICAgICAgICAgJz0nLCAnKz0nLCAnLT0nLCAnKj0nLCAnKio9JywgJy89JywgJyU9JywgJzw8PScsICc+Pj0nLCAnPj4+PScsXG5cdCAgICAgICAgICAgICcmPScsICd8PScsICdePScsICcsJyxcblx0ICAgICAgICAgICAgLy8gYmluYXJ5L3VuYXJ5IG9wZXJhdG9yc1xuXHQgICAgICAgICAgICAnKycsICctJywgJyonLCAnKionLCAnLycsICclJywgJysrJywgJy0tJywgJzw8JywgJz4+JywgJz4+PicsICcmJyxcblx0ICAgICAgICAgICAgJ3wnLCAnXicsICchJywgJ34nLCAnJiYnLCAnfHwnLCAnPycsICc6JywgJz09PScsICc9PScsICc+PScsXG5cdCAgICAgICAgICAgICc8PScsICc8JywgJz4nLCAnIT0nLCAnIT09J10uaW5kZXhPZih0KSA+PSAwO1xuXHQgICAgfTtcblx0ICAgIC8vIERldGVybWluZSBpZiBmb3J3YXJkIHNsYXNoICgvKSBpcyBhbiBvcGVyYXRvciBvciBwYXJ0IG9mIGEgcmVndWxhciBleHByZXNzaW9uXG5cdCAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9zd2VldC5qcy93aWtpL2Rlc2lnblxuXHQgICAgUmVhZGVyLnByb3RvdHlwZS5pc1JlZ2V4U3RhcnQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIHByZXZpb3VzID0gdGhpcy52YWx1ZXNbdGhpcy52YWx1ZXMubGVuZ3RoIC0gMV07XG5cdCAgICAgICAgdmFyIHJlZ2V4ID0gKHByZXZpb3VzICE9PSBudWxsKTtcblx0ICAgICAgICBzd2l0Y2ggKHByZXZpb3VzKSB7XG5cdCAgICAgICAgICAgIGNhc2UgJ3RoaXMnOlxuXHQgICAgICAgICAgICBjYXNlICddJzpcblx0ICAgICAgICAgICAgICAgIHJlZ2V4ID0gZmFsc2U7XG5cdCAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgY2FzZSAnKSc6XG5cdCAgICAgICAgICAgICAgICB2YXIga2V5d29yZCA9IHRoaXMudmFsdWVzW3RoaXMucGFyZW4gLSAxXTtcblx0ICAgICAgICAgICAgICAgIHJlZ2V4ID0gKGtleXdvcmQgPT09ICdpZicgfHwga2V5d29yZCA9PT0gJ3doaWxlJyB8fCBrZXl3b3JkID09PSAnZm9yJyB8fCBrZXl3b3JkID09PSAnd2l0aCcpO1xuXHQgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgIGNhc2UgJ30nOlxuXHQgICAgICAgICAgICAgICAgLy8gRGl2aWRpbmcgYSBmdW5jdGlvbiBieSBhbnl0aGluZyBtYWtlcyBsaXR0bGUgc2Vuc2UsXG5cdCAgICAgICAgICAgICAgICAvLyBidXQgd2UgaGF2ZSB0byBjaGVjayBmb3IgdGhhdC5cblx0ICAgICAgICAgICAgICAgIHJlZ2V4ID0gZmFsc2U7XG5cdCAgICAgICAgICAgICAgICBpZiAodGhpcy52YWx1ZXNbdGhpcy5jdXJseSAtIDNdID09PSAnZnVuY3Rpb24nKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgLy8gQW5vbnltb3VzIGZ1bmN0aW9uLCBlLmcuIGZ1bmN0aW9uKCl7fSAvNDJcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgY2hlY2sgPSB0aGlzLnZhbHVlc1t0aGlzLmN1cmx5IC0gNF07XG5cdCAgICAgICAgICAgICAgICAgICAgcmVnZXggPSBjaGVjayA/ICF0aGlzLmJlZm9yZUZ1bmN0aW9uRXhwcmVzc2lvbihjaGVjaykgOiBmYWxzZTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMudmFsdWVzW3RoaXMuY3VybHkgLSA0XSA9PT0gJ2Z1bmN0aW9uJykge1xuXHQgICAgICAgICAgICAgICAgICAgIC8vIE5hbWVkIGZ1bmN0aW9uLCBlLmcuIGZ1bmN0aW9uIGYoKXt9IC80Mi9cblx0ICAgICAgICAgICAgICAgICAgICB2YXIgY2hlY2sgPSB0aGlzLnZhbHVlc1t0aGlzLmN1cmx5IC0gNV07XG5cdCAgICAgICAgICAgICAgICAgICAgcmVnZXggPSBjaGVjayA/ICF0aGlzLmJlZm9yZUZ1bmN0aW9uRXhwcmVzc2lvbihjaGVjaykgOiB0cnVlO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgIGRlZmF1bHQ6XG5cdCAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHJlZ2V4O1xuXHQgICAgfTtcblx0ICAgIFJlYWRlci5wcm90b3R5cGUucHVzaCA9IGZ1bmN0aW9uICh0b2tlbikge1xuXHQgICAgICAgIGlmICh0b2tlbi50eXBlID09PSA3IC8qIFB1bmN0dWF0b3IgKi8gfHwgdG9rZW4udHlwZSA9PT0gNCAvKiBLZXl3b3JkICovKSB7XG5cdCAgICAgICAgICAgIGlmICh0b2tlbi52YWx1ZSA9PT0gJ3snKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmN1cmx5ID0gdGhpcy52YWx1ZXMubGVuZ3RoO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGVsc2UgaWYgKHRva2VuLnZhbHVlID09PSAnKCcpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMucGFyZW4gPSB0aGlzLnZhbHVlcy5sZW5ndGg7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy52YWx1ZXMucHVzaCh0b2tlbi52YWx1ZSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGVsc2Uge1xuXHQgICAgICAgICAgICB0aGlzLnZhbHVlcy5wdXNoKG51bGwpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICByZXR1cm4gUmVhZGVyO1xuXHR9KCkpO1xuXHR2YXIgVG9rZW5pemVyID0gKGZ1bmN0aW9uICgpIHtcblx0ICAgIGZ1bmN0aW9uIFRva2VuaXplcihjb2RlLCBjb25maWcpIHtcblx0ICAgICAgICB0aGlzLmVycm9ySGFuZGxlciA9IG5ldyBlcnJvcl9oYW5kbGVyXzEuRXJyb3JIYW5kbGVyKCk7XG5cdCAgICAgICAgdGhpcy5lcnJvckhhbmRsZXIudG9sZXJhbnQgPSBjb25maWcgPyAodHlwZW9mIGNvbmZpZy50b2xlcmFudCA9PT0gJ2Jvb2xlYW4nICYmIGNvbmZpZy50b2xlcmFudCkgOiBmYWxzZTtcblx0ICAgICAgICB0aGlzLnNjYW5uZXIgPSBuZXcgc2Nhbm5lcl8xLlNjYW5uZXIoY29kZSwgdGhpcy5lcnJvckhhbmRsZXIpO1xuXHQgICAgICAgIHRoaXMuc2Nhbm5lci50cmFja0NvbW1lbnQgPSBjb25maWcgPyAodHlwZW9mIGNvbmZpZy5jb21tZW50ID09PSAnYm9vbGVhbicgJiYgY29uZmlnLmNvbW1lbnQpIDogZmFsc2U7XG5cdCAgICAgICAgdGhpcy50cmFja1JhbmdlID0gY29uZmlnID8gKHR5cGVvZiBjb25maWcucmFuZ2UgPT09ICdib29sZWFuJyAmJiBjb25maWcucmFuZ2UpIDogZmFsc2U7XG5cdCAgICAgICAgdGhpcy50cmFja0xvYyA9IGNvbmZpZyA/ICh0eXBlb2YgY29uZmlnLmxvYyA9PT0gJ2Jvb2xlYW4nICYmIGNvbmZpZy5sb2MpIDogZmFsc2U7XG5cdCAgICAgICAgdGhpcy5idWZmZXIgPSBbXTtcblx0ICAgICAgICB0aGlzLnJlYWRlciA9IG5ldyBSZWFkZXIoKTtcblx0ICAgIH1cblx0ICAgIFRva2VuaXplci5wcm90b3R5cGUuZXJyb3JzID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLmVycm9ySGFuZGxlci5lcnJvcnM7XG5cdCAgICB9O1xuXHQgICAgVG9rZW5pemVyLnByb3RvdHlwZS5nZXROZXh0VG9rZW4gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuYnVmZmVyLmxlbmd0aCA9PT0gMCkge1xuXHQgICAgICAgICAgICB2YXIgY29tbWVudHMgPSB0aGlzLnNjYW5uZXIuc2NhbkNvbW1lbnRzKCk7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLnNjYW5uZXIudHJhY2tDb21tZW50KSB7XG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbW1lbnRzLmxlbmd0aDsgKytpKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIGUgPSBjb21tZW50c1tpXTtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSB0aGlzLnNjYW5uZXIuc291cmNlLnNsaWNlKGUuc2xpY2VbMF0sIGUuc2xpY2VbMV0pO1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBjb21tZW50ID0ge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBlLm11bHRpTGluZSA/ICdCbG9ja0NvbW1lbnQnIDogJ0xpbmVDb21tZW50Jyxcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlXG5cdCAgICAgICAgICAgICAgICAgICAgfTtcblx0ICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy50cmFja1JhbmdlKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1lbnQucmFuZ2UgPSBlLnJhbmdlO1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy50cmFja0xvYykge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBjb21tZW50LmxvYyA9IGUubG9jO1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1ZmZlci5wdXNoKGNvbW1lbnQpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGlmICghdGhpcy5zY2FubmVyLmVvZigpKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgbG9jID0gdm9pZCAwO1xuXHQgICAgICAgICAgICAgICAgaWYgKHRoaXMudHJhY2tMb2MpIHtcblx0ICAgICAgICAgICAgICAgICAgICBsb2MgPSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0OiB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lOiB0aGlzLnNjYW5uZXIubGluZU51bWJlcixcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbjogdGhpcy5zY2FubmVyLmluZGV4IC0gdGhpcy5zY2FubmVyLmxpbmVTdGFydFxuXHQgICAgICAgICAgICAgICAgICAgICAgICB9LFxuXHQgICAgICAgICAgICAgICAgICAgICAgICBlbmQ6IHt9XG5cdCAgICAgICAgICAgICAgICAgICAgfTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIHZhciBzdGFydFJlZ2V4ID0gKHRoaXMuc2Nhbm5lci5zb3VyY2VbdGhpcy5zY2FubmVyLmluZGV4XSA9PT0gJy8nKSAmJiB0aGlzLnJlYWRlci5pc1JlZ2V4U3RhcnQoKTtcblx0ICAgICAgICAgICAgICAgIHZhciB0b2tlbiA9IHN0YXJ0UmVnZXggPyB0aGlzLnNjYW5uZXIuc2NhblJlZ0V4cCgpIDogdGhpcy5zY2FubmVyLmxleCgpO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5yZWFkZXIucHVzaCh0b2tlbik7XG5cdCAgICAgICAgICAgICAgICB2YXIgZW50cnkgPSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdHlwZTogdG9rZW5fMS5Ub2tlbk5hbWVbdG9rZW4udHlwZV0sXG5cdCAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuc2Nhbm5lci5zb3VyY2Uuc2xpY2UodG9rZW4uc3RhcnQsIHRva2VuLmVuZClcblx0ICAgICAgICAgICAgICAgIH07XG5cdCAgICAgICAgICAgICAgICBpZiAodGhpcy50cmFja1JhbmdlKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgZW50cnkucmFuZ2UgPSBbdG9rZW4uc3RhcnQsIHRva2VuLmVuZF07XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICBpZiAodGhpcy50cmFja0xvYykge1xuXHQgICAgICAgICAgICAgICAgICAgIGxvYy5lbmQgPSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIGxpbmU6IHRoaXMuc2Nhbm5lci5saW5lTnVtYmVyLFxuXHQgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW46IHRoaXMuc2Nhbm5lci5pbmRleCAtIHRoaXMuc2Nhbm5lci5saW5lU3RhcnRcblx0ICAgICAgICAgICAgICAgICAgICB9O1xuXHQgICAgICAgICAgICAgICAgICAgIGVudHJ5LmxvYyA9IGxvYztcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIGlmICh0b2tlbi50eXBlID09PSA5IC8qIFJlZ3VsYXJFeHByZXNzaW9uICovKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIHBhdHRlcm4gPSB0b2tlbi5wYXR0ZXJuO1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBmbGFncyA9IHRva2VuLmZsYWdzO1xuXHQgICAgICAgICAgICAgICAgICAgIGVudHJ5LnJlZ2V4ID0geyBwYXR0ZXJuOiBwYXR0ZXJuLCBmbGFnczogZmxhZ3MgfTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIHRoaXMuYnVmZmVyLnB1c2goZW50cnkpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzLmJ1ZmZlci5zaGlmdCgpO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb2tlbml6ZXI7XG5cdH0oKSk7XG5cdGV4cG9ydHMuVG9rZW5pemVyID0gVG9rZW5pemVyO1xuXG5cbi8qKiovIH1cbi8qKioqKiovIF0pXG59KTtcbjsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///1356\n")},1361:module=>{eval('/*\nLanguage: WebAssembly\nWebsite: https://webassembly.org\nDescription: Wasm is designed as a portable compilation target for programming languages, enabling deployment on the web for client and server applications.\nCategory: web, common\nAudit: 2020\n*/\n\n/** @type LanguageFn */\nfunction wasm(hljs) {\n hljs.regex;\n const BLOCK_COMMENT = hljs.COMMENT(/\\(;/, /;\\)/);\n BLOCK_COMMENT.contains.push("self");\n const LINE_COMMENT = hljs.COMMENT(/;;/, /$/);\n\n const KWS = [\n "anyfunc",\n "block",\n "br",\n "br_if",\n "br_table",\n "call",\n "call_indirect",\n "data",\n "drop",\n "elem",\n "else",\n "end",\n "export",\n "func",\n "global.get",\n "global.set",\n "local.get",\n "local.set",\n "local.tee",\n "get_global",\n "get_local",\n "global",\n "if",\n "import",\n "local",\n "loop",\n "memory",\n "memory.grow",\n "memory.size",\n "module",\n "mut",\n "nop",\n "offset",\n "param",\n "result",\n "return",\n "select",\n "set_global",\n "set_local",\n "start",\n "table",\n "tee_local",\n "then",\n "type",\n "unreachable"\n ];\n\n const FUNCTION_REFERENCE = {\n begin: [\n /(?:func|call|call_indirect)/,\n /\\s+/,\n /\\$[^\\s)]+/\n ],\n className: {\n 1: "keyword",\n 3: "title.function"\n }\n };\n\n const ARGUMENT = {\n className: "variable",\n begin: /\\$[\\w_]+/\n };\n\n const PARENS = {\n match: /(\\((?!;)|\\))+/,\n className: "punctuation",\n relevance: 0\n };\n\n const NUMBER = {\n className: "number",\n relevance: 0,\n // borrowed from Prism, TODO: split out into variants\n match: /[+-]?\\b(?:\\d(?:_?\\d)*(?:\\.\\d(?:_?\\d)*)?(?:[eE][+-]?\\d(?:_?\\d)*)?|0x[\\da-fA-F](?:_?[\\da-fA-F])*(?:\\.[\\da-fA-F](?:_?[\\da-fA-D])*)?(?:[pP][+-]?\\d(?:_?\\d)*)?)\\b|\\binf\\b|\\bnan(?::0x[\\da-fA-F](?:_?[\\da-fA-D])*)?\\b/\n };\n\n const TYPE = {\n // look-ahead prevents us from gobbling up opcodes\n match: /(i32|i64|f32|f64)(?!\\.)/,\n className: "type"\n };\n\n const MATH_OPERATIONS = {\n className: "keyword",\n // borrowed from Prism, TODO: split out into variants\n match: /\\b(f32|f64|i32|i64)(?:\\.(?:abs|add|and|ceil|clz|const|convert_[su]\\/i(?:32|64)|copysign|ctz|demote\\/f64|div(?:_[su])?|eqz?|extend_[su]\\/i32|floor|ge(?:_[su])?|gt(?:_[su])?|le(?:_[su])?|load(?:(?:8|16|32)_[su])?|lt(?:_[su])?|max|min|mul|nearest|neg?|or|popcnt|promote\\/f32|reinterpret\\/[fi](?:32|64)|rem_[su]|rot[lr]|shl|shr_[su]|store(?:8|16|32)?|sqrt|sub|trunc(?:_[su]\\/f(?:32|64))?|wrap\\/i64|xor))\\b/\n };\n\n const OFFSET_ALIGN = {\n match: [\n /(?:offset|align)/,\n /\\s*/,\n /=/\n ],\n className: {\n 1: "keyword",\n 3: "operator"\n }\n };\n\n return {\n name: \'WebAssembly\',\n keywords: {\n $pattern: /[\\w.]+/,\n keyword: KWS\n },\n contains: [\n LINE_COMMENT,\n BLOCK_COMMENT,\n OFFSET_ALIGN,\n ARGUMENT,\n PARENS,\n FUNCTION_REFERENCE,\n hljs.QUOTE_STRING_MODE,\n TYPE,\n MATH_OPERATIONS,\n NUMBER\n ]\n };\n}\n\nmodule.exports = wasm;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTM2MS5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUMsS0FBSztBQUM5QztBQUNBLHVDQUF1Qzs7QUFFdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsbUJBQW1CO0FBQ25CO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vb2JzaWRpYW4tbWluZG1hcC1uZXh0Z2VuLy4vbm9kZV9tb2R1bGVzLy5wbnBtL2hpZ2hsaWdodC5qc0AxMS4xMS4xL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy93YXNtLmpzP2IyMzAiXSwic291cmNlc0NvbnRlbnQiOlsiLypcbkxhbmd1YWdlOiBXZWJBc3NlbWJseVxuV2Vic2l0ZTogaHR0cHM6Ly93ZWJhc3NlbWJseS5vcmdcbkRlc2NyaXB0aW9uOiAgV2FzbSBpcyBkZXNpZ25lZCBhcyBhIHBvcnRhYmxlIGNvbXBpbGF0aW9uIHRhcmdldCBmb3IgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2VzLCBlbmFibGluZyBkZXBsb3ltZW50IG9uIHRoZSB3ZWIgZm9yIGNsaWVudCBhbmQgc2VydmVyIGFwcGxpY2F0aW9ucy5cbkNhdGVnb3J5OiB3ZWIsIGNvbW1vblxuQXVkaXQ6IDIwMjBcbiovXG5cbi8qKiBAdHlwZSBMYW5ndWFnZUZuICovXG5mdW5jdGlvbiB3YXNtKGhsanMpIHtcbiAgaGxqcy5yZWdleDtcbiAgY29uc3QgQkxPQ0tfQ09NTUVOVCA9IGhsanMuQ09NTUVOVCgvXFwoOy8sIC87XFwpLyk7XG4gIEJMT0NLX0NPTU1FTlQuY29udGFpbnMucHVzaChcInNlbGZcIik7XG4gIGNvbnN0IExJTkVfQ09NTUVOVCA9IGhsanMuQ09NTUVOVCgvOzsvLCAvJC8pO1xuXG4gIGNvbnN0IEtXUyA9IFtcbiAgICBcImFueWZ1bmNcIixcbiAgICBcImJsb2NrXCIsXG4gICAgXCJiclwiLFxuICAgIFwiYnJfaWZcIixcbiAgICBcImJyX3RhYmxlXCIsXG4gICAgXCJjYWxsXCIsXG4gICAgXCJjYWxsX2luZGlyZWN0XCIsXG4gICAgXCJkYXRhXCIsXG4gICAgXCJkcm9wXCIsXG4gICAgXCJlbGVtXCIsXG4gICAgXCJlbHNlXCIsXG4gICAgXCJlbmRcIixcbiAgICBcImV4cG9ydFwiLFxuICAgIFwiZnVuY1wiLFxuICAgIFwiZ2xvYmFsLmdldFwiLFxuICAgIFwiZ2xvYmFsLnNldFwiLFxuICAgIFwibG9jYWwuZ2V0XCIsXG4gICAgXCJsb2NhbC5zZXRcIixcbiAgICBcImxvY2FsLnRlZVwiLFxuICAgIFwiZ2V0X2dsb2JhbFwiLFxuICAgIFwiZ2V0X2xvY2FsXCIsXG4gICAgXCJnbG9iYWxcIixcbiAgICBcImlmXCIsXG4gICAgXCJpbXBvcnRcIixcbiAgICBcImxvY2FsXCIsXG4gICAgXCJsb29wXCIsXG4gICAgXCJtZW1vcnlcIixcbiAgICBcIm1lbW9yeS5ncm93XCIsXG4gICAgXCJtZW1vcnkuc2l6ZVwiLFxuICAgIFwibW9kdWxlXCIsXG4gICAgXCJtdXRcIixcbiAgICBcIm5vcFwiLFxuICAgIFwib2Zmc2V0XCIsXG4gICAgXCJwYXJhbVwiLFxuICAgIFwicmVzdWx0XCIsXG4gICAgXCJyZXR1cm5cIixcbiAgICBcInNlbGVjdFwiLFxuICAgIFwic2V0X2dsb2JhbFwiLFxuICAgIFwic2V0X2xvY2FsXCIsXG4gICAgXCJzdGFydFwiLFxuICAgIFwidGFibGVcIixcbiAgICBcInRlZV9sb2NhbFwiLFxuICAgIFwidGhlblwiLFxuICAgIFwidHlwZVwiLFxuICAgIFwidW5yZWFjaGFibGVcIlxuICBdO1xuXG4gIGNvbnN0IEZVTkNUSU9OX1JFRkVSRU5DRSA9IHtcbiAgICBiZWdpbjogW1xuICAgICAgLyg/OmZ1bmN8Y2FsbHxjYWxsX2luZGlyZWN0KS8sXG4gICAgICAvXFxzKy8sXG4gICAgICAvXFwkW15cXHMpXSsvXG4gICAgXSxcbiAgICBjbGFzc05hbWU6IHtcbiAgICAgIDE6IFwia2V5d29yZFwiLFxuICAgICAgMzogXCJ0aXRsZS5mdW5jdGlvblwiXG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IEFSR1VNRU5UID0ge1xuICAgIGNsYXNzTmFtZTogXCJ2YXJpYWJsZVwiLFxuICAgIGJlZ2luOiAvXFwkW1xcd19dKy9cbiAgfTtcblxuICBjb25zdCBQQVJFTlMgPSB7XG4gICAgbWF0Y2g6IC8oXFwoKD8hOyl8XFwpKSsvLFxuICAgIGNsYXNzTmFtZTogXCJwdW5jdHVhdGlvblwiLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuXG4gIGNvbnN0IE5VTUJFUiA9IHtcbiAgICBjbGFzc05hbWU6IFwibnVtYmVyXCIsXG4gICAgcmVsZXZhbmNlOiAwLFxuICAgIC8vIGJvcnJvd2VkIGZyb20gUHJpc20sIFRPRE86IHNwbGl0IG91dCBpbnRvIHZhcmlhbnRzXG4gICAgbWF0Y2g6IC9bKy1dP1xcYig/OlxcZCg/Ol8/XFxkKSooPzpcXC5cXGQoPzpfP1xcZCkqKT8oPzpbZUVdWystXT9cXGQoPzpfP1xcZCkqKT98MHhbXFxkYS1mQS1GXSg/Ol8/W1xcZGEtZkEtRl0pKig/OlxcLltcXGRhLWZBLUZdKD86Xz9bXFxkYS1mQS1EXSkqKT8oPzpbcFBdWystXT9cXGQoPzpfP1xcZCkqKT8pXFxifFxcYmluZlxcYnxcXGJuYW4oPzo6MHhbXFxkYS1mQS1GXSg/Ol8/W1xcZGEtZkEtRF0pKik/XFxiL1xuICB9O1xuXG4gIGNvbnN0IFRZUEUgPSB7XG4gICAgLy8gbG9vay1haGVhZCBwcmV2ZW50cyB1cyBmcm9tIGdvYmJsaW5nIHVwIG9wY29kZXNcbiAgICBtYXRjaDogLyhpMzJ8aTY0fGYzMnxmNjQpKD8hXFwuKS8sXG4gICAgY2xhc3NOYW1lOiBcInR5cGVcIlxuICB9O1xuXG4gIGNvbnN0IE1BVEhfT1BFUkFUSU9OUyA9IHtcbiAgICBjbGFzc05hbWU6IFwia2V5d29yZFwiLFxuICAgIC8vIGJvcnJvd2VkIGZyb20gUHJpc20sIFRPRE86IHNwbGl0IG91dCBpbnRvIHZhcmlhbnRzXG4gICAgbWF0Y2g6IC9cXGIoZjMyfGY2NHxpMzJ8aTY0KSg/OlxcLig/OmFic3xhZGR8YW5kfGNlaWx8Y2x6fGNvbnN0fGNvbnZlcnRfW3N1XVxcL2koPzozMnw2NCl8Y29weXNpZ258Y3R6fGRlbW90ZVxcL2Y2NHxkaXYoPzpfW3N1XSk/fGVxej98ZXh0ZW5kX1tzdV1cXC9pMzJ8Zmxvb3J8Z2UoPzpfW3N1XSk/fGd0KD86X1tzdV0pP3xsZSg/Ol9bc3VdKT98bG9hZCg/Oig/Ojh8MTZ8MzIpX1tzdV0pP3xsdCg/Ol9bc3VdKT98bWF4fG1pbnxtdWx8bmVhcmVzdHxuZWc/fG9yfHBvcGNudHxwcm9tb3RlXFwvZjMyfHJlaW50ZXJwcmV0XFwvW2ZpXSg/OjMyfDY0KXxyZW1fW3N1XXxyb3RbbHJdfHNobHxzaHJfW3N1XXxzdG9yZSg/Ojh8MTZ8MzIpP3xzcXJ0fHN1Ynx0cnVuYyg/Ol9bc3VdXFwvZig/OjMyfDY0KSk/fHdyYXBcXC9pNjR8eG9yKSlcXGIvXG4gIH07XG5cbiAgY29uc3QgT0ZGU0VUX0FMSUdOID0ge1xuICAgIG1hdGNoOiBbXG4gICAgICAvKD86b2Zmc2V0fGFsaWduKS8sXG4gICAgICAvXFxzKi8sXG4gICAgICAvPS9cbiAgICBdLFxuICAgIGNsYXNzTmFtZToge1xuICAgICAgMTogXCJrZXl3b3JkXCIsXG4gICAgICAzOiBcIm9wZXJhdG9yXCJcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnV2ViQXNzZW1ibHknLFxuICAgIGtleXdvcmRzOiB7XG4gICAgICAkcGF0dGVybjogL1tcXHcuXSsvLFxuICAgICAga2V5d29yZDogS1dTXG4gICAgfSxcbiAgICBjb250YWluczogW1xuICAgICAgTElORV9DT01NRU5ULFxuICAgICAgQkxPQ0tfQ09NTUVOVCxcbiAgICAgIE9GRlNFVF9BTElHTixcbiAgICAgIEFSR1VNRU5ULFxuICAgICAgUEFSRU5TLFxuICAgICAgRlVOQ1RJT05fUkVGRVJFTkNFLFxuICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgIFRZUEUsXG4gICAgICBNQVRIX09QRVJBVElPTlMsXG4gICAgICBOVU1CRVJcbiAgICBdXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gd2FzbTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1361\n')},1366:module=>{eval("/*\nLanguage: Elixir\nAuthor: Josh Adams \nDescription: language definition for Elixir source code files (.ex and .exs). Based on ruby language support.\nCategory: functional\nWebsite: https://elixir-lang.org\n*/\n\n/** @type LanguageFn */\nfunction elixir(hljs) {\n const regex = hljs.regex;\n const ELIXIR_IDENT_RE = '[a-zA-Z_][a-zA-Z0-9_.]*(!|\\\\?)?';\n const ELIXIR_METHOD_RE = '[a-zA-Z_]\\\\w*[!?=]?|[-+~]@|<<|>>|=~|===?|<=>|[<>]=?|\\\\*\\\\*|[-/+%^&*~`|]|\\\\[\\\\]=?';\n const KEYWORDS = [\n \"after\",\n \"alias\",\n \"and\",\n \"case\",\n \"catch\",\n \"cond\",\n \"defstruct\",\n \"defguard\",\n \"do\",\n \"else\",\n \"end\",\n \"fn\",\n \"for\",\n \"if\",\n \"import\",\n \"in\",\n \"not\",\n \"or\",\n \"quote\",\n \"raise\",\n \"receive\",\n \"require\",\n \"reraise\",\n \"rescue\",\n \"try\",\n \"unless\",\n \"unquote\",\n \"unquote_splicing\",\n \"use\",\n \"when\",\n \"with|0\"\n ];\n const LITERALS = [\n \"false\",\n \"nil\",\n \"true\"\n ];\n const KWS = {\n $pattern: ELIXIR_IDENT_RE,\n keyword: KEYWORDS,\n literal: LITERALS\n };\n const SUBST = {\n className: 'subst',\n begin: /#\\{/,\n end: /\\}/,\n keywords: KWS\n };\n const NUMBER = {\n className: 'number',\n begin: '(\\\\b0o[0-7_]+)|(\\\\b0b[01_]+)|(\\\\b0x[0-9a-fA-F_]+)|(-?\\\\b[0-9][0-9_]*(\\\\.[0-9_]+([eE][-+]?[0-9]+)?)?)',\n relevance: 0\n };\n // TODO: could be tightened\n // https://elixir-lang.readthedocs.io/en/latest/intro/18.html\n // but you also need to include closing delemeters in the escape list per\n // individual sigil mode from what I can tell,\n // ie: \\} might or might not be an escape depending on the sigil used\n const ESCAPES_RE = /\\\\[\\s\\S]/;\n // const ESCAPES_RE = /\\\\[\"'\\\\abdefnrstv0]/;\n const BACKSLASH_ESCAPE = {\n match: ESCAPES_RE,\n scope: \"char.escape\",\n relevance: 0\n };\n const SIGIL_DELIMITERS = '[/|([{<\"\\']';\n const SIGIL_DELIMITER_MODES = [\n {\n begin: /\"/,\n end: /\"/\n },\n {\n begin: /'/,\n end: /'/\n },\n {\n begin: /\\//,\n end: /\\//\n },\n {\n begin: /\\|/,\n end: /\\|/\n },\n {\n begin: /\\(/,\n end: /\\)/\n },\n {\n begin: /\\[/,\n end: /\\]/\n },\n {\n begin: /\\{/,\n end: /\\}/\n },\n {\n begin: //\n }\n ];\n const escapeSigilEnd = (end) => {\n return {\n scope: \"char.escape\",\n begin: regex.concat(/\\\\/, end),\n relevance: 0\n };\n };\n const LOWERCASE_SIGIL = {\n className: 'string',\n begin: '~[a-z]' + '(?=' + SIGIL_DELIMITERS + ')',\n contains: SIGIL_DELIMITER_MODES.map(x => hljs.inherit(x,\n { contains: [\n escapeSigilEnd(x.end),\n BACKSLASH_ESCAPE,\n SUBST\n ] }\n ))\n };\n\n const UPCASE_SIGIL = {\n className: 'string',\n begin: '~[A-Z]' + '(?=' + SIGIL_DELIMITERS + ')',\n contains: SIGIL_DELIMITER_MODES.map(x => hljs.inherit(x,\n { contains: [ escapeSigilEnd(x.end) ] }\n ))\n };\n\n const REGEX_SIGIL = {\n className: 'regex',\n variants: [\n {\n begin: '~r' + '(?=' + SIGIL_DELIMITERS + ')',\n contains: SIGIL_DELIMITER_MODES.map(x => hljs.inherit(x,\n {\n end: regex.concat(x.end, /[uismxfU]{0,7}/),\n contains: [\n escapeSigilEnd(x.end),\n BACKSLASH_ESCAPE,\n SUBST\n ]\n }\n ))\n },\n {\n begin: '~R' + '(?=' + SIGIL_DELIMITERS + ')',\n contains: SIGIL_DELIMITER_MODES.map(x => hljs.inherit(x,\n {\n end: regex.concat(x.end, /[uismxfU]{0,7}/),\n contains: [ escapeSigilEnd(x.end) ]\n })\n )\n }\n ]\n };\n\n const STRING = {\n className: 'string',\n contains: [\n hljs.BACKSLASH_ESCAPE,\n SUBST\n ],\n variants: [\n {\n begin: /\"\"\"/,\n end: /\"\"\"/\n },\n {\n begin: /'''/,\n end: /'''/\n },\n {\n begin: /~S\"\"\"/,\n end: /\"\"\"/,\n contains: [] // override default\n },\n {\n begin: /~S\"/,\n end: /\"/,\n contains: [] // override default\n },\n {\n begin: /~S'''/,\n end: /'''/,\n contains: [] // override default\n },\n {\n begin: /~S'/,\n end: /'/,\n contains: [] // override default\n },\n {\n begin: /'/,\n end: /'/\n },\n {\n begin: /\"/,\n end: /\"/\n }\n ]\n };\n const FUNCTION = {\n className: 'function',\n beginKeywords: 'def defp defmacro defmacrop',\n end: /\\B\\b/, // the mode is ended by the title\n contains: [\n hljs.inherit(hljs.TITLE_MODE, {\n begin: ELIXIR_IDENT_RE,\n endsParent: true\n })\n ]\n };\n const CLASS = hljs.inherit(FUNCTION, {\n className: 'class',\n beginKeywords: 'defimpl defmodule defprotocol defrecord',\n end: /\\bdo\\b|$|;/\n });\n const ELIXIR_DEFAULT_CONTAINS = [\n STRING,\n REGEX_SIGIL,\n UPCASE_SIGIL,\n LOWERCASE_SIGIL,\n hljs.HASH_COMMENT_MODE,\n CLASS,\n FUNCTION,\n { begin: '::' },\n {\n className: 'symbol',\n begin: ':(?![\\\\s:])',\n contains: [\n STRING,\n { begin: ELIXIR_METHOD_RE }\n ],\n relevance: 0\n },\n {\n className: 'symbol',\n begin: ELIXIR_IDENT_RE + ':(?!:)',\n relevance: 0\n },\n { // Usage of a module, struct, etc.\n className: 'title.class',\n begin: /(\\b[A-Z][a-zA-Z0-9_]+)/,\n relevance: 0\n },\n NUMBER,\n {\n className: 'variable',\n begin: '(\\\\$\\\\W)|((\\\\$|@@?)(\\\\w+))'\n }\n // -> has been removed, capnproto always uses this grammar construct\n ];\n SUBST.contains = ELIXIR_DEFAULT_CONTAINS;\n\n return {\n name: 'Elixir',\n aliases: [\n 'ex',\n 'exs'\n ],\n keywords: KWS,\n contains: ELIXIR_DEFAULT_CONTAINS\n };\n}\n\nmodule.exports = elixir;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTM2Ni5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxnQkFBZ0I7QUFDaEIsY0FBYztBQUNkLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdEQUFnRCxJQUFJO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0RBQWdELElBQUk7QUFDcEQ7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0I7QUFDcEIsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLGFBQWE7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL29ic2lkaWFuLW1pbmRtYXAtbmV4dGdlbi8uL25vZGVfbW9kdWxlcy8ucG5wbS9oaWdobGlnaHQuanNAMTEuMTEuMS9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvZWxpeGlyLmpzPzZkYTQiXSwic291cmNlc0NvbnRlbnQiOlsiLypcbkxhbmd1YWdlOiBFbGl4aXJcbkF1dGhvcjogSm9zaCBBZGFtcyA8am9zaEBpc290b3BlMTEuY29tPlxuRGVzY3JpcHRpb246IGxhbmd1YWdlIGRlZmluaXRpb24gZm9yIEVsaXhpciBzb3VyY2UgY29kZSBmaWxlcyAoLmV4IGFuZCAuZXhzKS4gIEJhc2VkIG9uIHJ1YnkgbGFuZ3VhZ2Ugc3VwcG9ydC5cbkNhdGVnb3J5OiBmdW5jdGlvbmFsXG5XZWJzaXRlOiBodHRwczovL2VsaXhpci1sYW5nLm9yZ1xuKi9cblxuLyoqIEB0eXBlIExhbmd1YWdlRm4gKi9cbmZ1bmN0aW9uIGVsaXhpcihobGpzKSB7XG4gIGNvbnN0IHJlZ2V4ID0gaGxqcy5yZWdleDtcbiAgY29uc3QgRUxJWElSX0lERU5UX1JFID0gJ1thLXpBLVpfXVthLXpBLVowLTlfLl0qKCF8XFxcXD8pPyc7XG4gIGNvbnN0IEVMSVhJUl9NRVRIT0RfUkUgPSAnW2EtekEtWl9dXFxcXHcqWyE/PV0/fFstK35dQHw8PHw+Pnw9fnw9PT0/fDw9PnxbPD5dPT98XFxcXCpcXFxcKnxbLS8rJV4mKn5gfF18XFxcXFtcXFxcXT0/JztcbiAgY29uc3QgS0VZV09SRFMgPSBbXG4gICAgXCJhZnRlclwiLFxuICAgIFwiYWxpYXNcIixcbiAgICBcImFuZFwiLFxuICAgIFwiY2FzZVwiLFxuICAgIFwiY2F0Y2hcIixcbiAgICBcImNvbmRcIixcbiAgICBcImRlZnN0cnVjdFwiLFxuICAgIFwiZGVmZ3VhcmRcIixcbiAgICBcImRvXCIsXG4gICAgXCJlbHNlXCIsXG4gICAgXCJlbmRcIixcbiAgICBcImZuXCIsXG4gICAgXCJmb3JcIixcbiAgICBcImlmXCIsXG4gICAgXCJpbXBvcnRcIixcbiAgICBcImluXCIsXG4gICAgXCJub3RcIixcbiAgICBcIm9yXCIsXG4gICAgXCJxdW90ZVwiLFxuICAgIFwicmFpc2VcIixcbiAgICBcInJlY2VpdmVcIixcbiAgICBcInJlcXVpcmVcIixcbiAgICBcInJlcmFpc2VcIixcbiAgICBcInJlc2N1ZVwiLFxuICAgIFwidHJ5XCIsXG4gICAgXCJ1bmxlc3NcIixcbiAgICBcInVucXVvdGVcIixcbiAgICBcInVucXVvdGVfc3BsaWNpbmdcIixcbiAgICBcInVzZVwiLFxuICAgIFwid2hlblwiLFxuICAgIFwid2l0aHwwXCJcbiAgXTtcbiAgY29uc3QgTElURVJBTFMgPSBbXG4gICAgXCJmYWxzZVwiLFxuICAgIFwibmlsXCIsXG4gICAgXCJ0cnVlXCJcbiAgXTtcbiAgY29uc3QgS1dTID0ge1xuICAgICRwYXR0ZXJuOiBFTElYSVJfSURFTlRfUkUsXG4gICAga2V5d29yZDogS0VZV09SRFMsXG4gICAgbGl0ZXJhbDogTElURVJBTFNcbiAgfTtcbiAgY29uc3QgU1VCU1QgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3Vic3QnLFxuICAgIGJlZ2luOiAvI1xcey8sXG4gICAgZW5kOiAvXFx9LyxcbiAgICBrZXl3b3JkczogS1dTXG4gIH07XG4gIGNvbnN0IE5VTUJFUiA9IHtcbiAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgIGJlZ2luOiAnKFxcXFxiMG9bMC03X10rKXwoXFxcXGIwYlswMV9dKyl8KFxcXFxiMHhbMC05YS1mQS1GX10rKXwoLT9cXFxcYlswLTldWzAtOV9dKihcXFxcLlswLTlfXSsoW2VFXVstK10/WzAtOV0rKT8pPyknLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuICAvLyBUT0RPOiBjb3VsZCBiZSB0aWdodGVuZWRcbiAgLy8gaHR0cHM6Ly9lbGl4aXItbGFuZy5yZWFkdGhlZG9jcy5pby9lbi9sYXRlc3QvaW50cm8vMTguaHRtbFxuICAvLyBidXQgeW91IGFsc28gbmVlZCB0byBpbmNsdWRlIGNsb3NpbmcgZGVsZW1ldGVycyBpbiB0aGUgZXNjYXBlIGxpc3QgcGVyXG4gIC8vIGluZGl2aWR1YWwgc2lnaWwgbW9kZSBmcm9tIHdoYXQgSSBjYW4gdGVsbCxcbiAgLy8gaWU6IFxcfSBtaWdodCBvciBtaWdodCBub3QgYmUgYW4gZXNjYXBlIGRlcGVuZGluZyBvbiB0aGUgc2lnaWwgdXNlZFxuICBjb25zdCBFU0NBUEVTX1JFID0gL1xcXFxbXFxzXFxTXS87XG4gIC8vIGNvbnN0IEVTQ0FQRVNfUkUgPSAvXFxcXFtcIidcXFxcYWJkZWZucnN0djBdLztcbiAgY29uc3QgQkFDS1NMQVNIX0VTQ0FQRSA9IHtcbiAgICBtYXRjaDogRVNDQVBFU19SRSxcbiAgICBzY29wZTogXCJjaGFyLmVzY2FwZVwiLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuICBjb25zdCBTSUdJTF9ERUxJTUlURVJTID0gJ1svfChbezxcIlxcJ10nO1xuICBjb25zdCBTSUdJTF9ERUxJTUlURVJfTU9ERVMgPSBbXG4gICAge1xuICAgICAgYmVnaW46IC9cIi8sXG4gICAgICBlbmQ6IC9cIi9cbiAgICB9LFxuICAgIHtcbiAgICAgIGJlZ2luOiAvJy8sXG4gICAgICBlbmQ6IC8nL1xuICAgIH0sXG4gICAge1xuICAgICAgYmVnaW46IC9cXC8vLFxuICAgICAgZW5kOiAvXFwvL1xuICAgIH0sXG4gICAge1xuICAgICAgYmVnaW46IC9cXHwvLFxuICAgICAgZW5kOiAvXFx8L1xuICAgIH0sXG4gICAge1xuICAgICAgYmVnaW46IC9cXCgvLFxuICAgICAgZW5kOiAvXFwpL1xuICAgIH0sXG4gICAge1xuICAgICAgYmVnaW46IC9cXFsvLFxuICAgICAgZW5kOiAvXFxdL1xuICAgIH0sXG4gICAge1xuICAgICAgYmVnaW46IC9cXHsvLFxuICAgICAgZW5kOiAvXFx9L1xuICAgIH0sXG4gICAge1xuICAgICAgYmVnaW46IC88LyxcbiAgICAgIGVuZDogLz4vXG4gICAgfVxuICBdO1xuICBjb25zdCBlc2NhcGVTaWdpbEVuZCA9IChlbmQpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgc2NvcGU6IFwiY2hhci5lc2NhcGVcIixcbiAgICAgIGJlZ2luOiByZWdleC5jb25jYXQoL1xcXFwvLCBlbmQpLFxuICAgICAgcmVsZXZhbmNlOiAwXG4gICAgfTtcbiAgfTtcbiAgY29uc3QgTE9XRVJDQVNFX1NJR0lMID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgYmVnaW46ICd+W2Etel0nICsgJyg/PScgKyBTSUdJTF9ERUxJTUlURVJTICsgJyknLFxuICAgIGNvbnRhaW5zOiBTSUdJTF9ERUxJTUlURVJfTU9ERVMubWFwKHggPT4gaGxqcy5pbmhlcml0KHgsXG4gICAgICB7IGNvbnRhaW5zOiBbXG4gICAgICAgIGVzY2FwZVNpZ2lsRW5kKHguZW5kKSxcbiAgICAgICAgQkFDS1NMQVNIX0VTQ0FQRSxcbiAgICAgICAgU1VCU1RcbiAgICAgIF0gfVxuICAgICkpXG4gIH07XG5cbiAgY29uc3QgVVBDQVNFX1NJR0lMID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgYmVnaW46ICd+W0EtWl0nICsgJyg/PScgKyBTSUdJTF9ERUxJTUlURVJTICsgJyknLFxuICAgIGNvbnRhaW5zOiBTSUdJTF9ERUxJTUlURVJfTU9ERVMubWFwKHggPT4gaGxqcy5pbmhlcml0KHgsXG4gICAgICB7IGNvbnRhaW5zOiBbIGVzY2FwZVNpZ2lsRW5kKHguZW5kKSBdIH1cbiAgICApKVxuICB9O1xuXG4gIGNvbnN0IFJFR0VYX1NJR0lMID0ge1xuICAgIGNsYXNzTmFtZTogJ3JlZ2V4JyxcbiAgICB2YXJpYW50czogW1xuICAgICAge1xuICAgICAgICBiZWdpbjogJ35yJyArICcoPz0nICsgU0lHSUxfREVMSU1JVEVSUyArICcpJyxcbiAgICAgICAgY29udGFpbnM6IFNJR0lMX0RFTElNSVRFUl9NT0RFUy5tYXAoeCA9PiBobGpzLmluaGVyaXQoeCxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBlbmQ6IHJlZ2V4LmNvbmNhdCh4LmVuZCwgL1t1aXNteGZVXXswLDd9LyksXG4gICAgICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICAgICBlc2NhcGVTaWdpbEVuZCh4LmVuZCksXG4gICAgICAgICAgICAgIEJBQ0tTTEFTSF9FU0NBUEUsXG4gICAgICAgICAgICAgIFNVQlNUXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICApKVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICd+UicgKyAnKD89JyArIFNJR0lMX0RFTElNSVRFUlMgKyAnKScsXG4gICAgICAgIGNvbnRhaW5zOiBTSUdJTF9ERUxJTUlURVJfTU9ERVMubWFwKHggPT4gaGxqcy5pbmhlcml0KHgsXG4gICAgICAgICAge1xuICAgICAgICAgICAgZW5kOiByZWdleC5jb25jYXQoeC5lbmQsIC9bdWlzbXhmVV17MCw3fS8pLFxuICAgICAgICAgICAgY29udGFpbnM6IFsgZXNjYXBlU2lnaWxFbmQoeC5lbmQpIF1cbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICB9XG4gICAgXVxuICB9O1xuXG4gIGNvbnN0IFNUUklORyA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkJBQ0tTTEFTSF9FU0NBUEUsXG4gICAgICBTVUJTVFxuICAgIF0sXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC9cIlwiXCIvLFxuICAgICAgICBlbmQ6IC9cIlwiXCIvXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogLycnJy8sXG4gICAgICAgIGVuZDogLycnJy9cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvflNcIlwiXCIvLFxuICAgICAgICBlbmQ6IC9cIlwiXCIvLFxuICAgICAgICBjb250YWluczogW10gLy8gb3ZlcnJpZGUgZGVmYXVsdFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC9+U1wiLyxcbiAgICAgICAgZW5kOiAvXCIvLFxuICAgICAgICBjb250YWluczogW10gLy8gb3ZlcnJpZGUgZGVmYXVsdFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC9+UycnJy8sXG4gICAgICAgIGVuZDogLycnJy8sXG4gICAgICAgIGNvbnRhaW5zOiBbXSAvLyBvdmVycmlkZSBkZWZhdWx0XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogL35TJy8sXG4gICAgICAgIGVuZDogLycvLFxuICAgICAgICBjb250YWluczogW10gLy8gb3ZlcnJpZGUgZGVmYXVsdFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC8nLyxcbiAgICAgICAgZW5kOiAvJy9cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvXCIvLFxuICAgICAgICBlbmQ6IC9cIi9cbiAgICAgIH1cbiAgICBdXG4gIH07XG4gIGNvbnN0IEZVTkNUSU9OID0ge1xuICAgIGNsYXNzTmFtZTogJ2Z1bmN0aW9uJyxcbiAgICBiZWdpbktleXdvcmRzOiAnZGVmIGRlZnAgZGVmbWFjcm8gZGVmbWFjcm9wJyxcbiAgICBlbmQ6IC9cXEJcXGIvLCAvLyB0aGUgbW9kZSBpcyBlbmRlZCBieSB0aGUgdGl0bGVcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5pbmhlcml0KGhsanMuVElUTEVfTU9ERSwge1xuICAgICAgICBiZWdpbjogRUxJWElSX0lERU5UX1JFLFxuICAgICAgICBlbmRzUGFyZW50OiB0cnVlXG4gICAgICB9KVxuICAgIF1cbiAgfTtcbiAgY29uc3QgQ0xBU1MgPSBobGpzLmluaGVyaXQoRlVOQ1RJT04sIHtcbiAgICBjbGFzc05hbWU6ICdjbGFzcycsXG4gICAgYmVnaW5LZXl3b3JkczogJ2RlZmltcGwgZGVmbW9kdWxlIGRlZnByb3RvY29sIGRlZnJlY29yZCcsXG4gICAgZW5kOiAvXFxiZG9cXGJ8JHw7L1xuICB9KTtcbiAgY29uc3QgRUxJWElSX0RFRkFVTFRfQ09OVEFJTlMgPSBbXG4gICAgU1RSSU5HLFxuICAgIFJFR0VYX1NJR0lMLFxuICAgIFVQQ0FTRV9TSUdJTCxcbiAgICBMT1dFUkNBU0VfU0lHSUwsXG4gICAgaGxqcy5IQVNIX0NPTU1FTlRfTU9ERSxcbiAgICBDTEFTUyxcbiAgICBGVU5DVElPTixcbiAgICB7IGJlZ2luOiAnOjonIH0sXG4gICAge1xuICAgICAgY2xhc3NOYW1lOiAnc3ltYm9sJyxcbiAgICAgIGJlZ2luOiAnOig/IVtcXFxcczpdKScsXG4gICAgICBjb250YWluczogW1xuICAgICAgICBTVFJJTkcsXG4gICAgICAgIHsgYmVnaW46IEVMSVhJUl9NRVRIT0RfUkUgfVxuICAgICAgXSxcbiAgICAgIHJlbGV2YW5jZTogMFxuICAgIH0sXG4gICAge1xuICAgICAgY2xhc3NOYW1lOiAnc3ltYm9sJyxcbiAgICAgIGJlZ2luOiBFTElYSVJfSURFTlRfUkUgKyAnOig/ITopJyxcbiAgICAgIHJlbGV2YW5jZTogMFxuICAgIH0sXG4gICAgeyAvLyBVc2FnZSBvZiBhIG1vZHVsZSwgc3RydWN0LCBldGMuXG4gICAgICBjbGFzc05hbWU6ICd0aXRsZS5jbGFzcycsXG4gICAgICBiZWdpbjogLyhcXGJbQS1aXVthLXpBLVowLTlfXSspLyxcbiAgICAgIHJlbGV2YW5jZTogMFxuICAgIH0sXG4gICAgTlVNQkVSLFxuICAgIHtcbiAgICAgIGNsYXNzTmFtZTogJ3ZhcmlhYmxlJyxcbiAgICAgIGJlZ2luOiAnKFxcXFwkXFxcXFcpfCgoXFxcXCR8QEA/KShcXFxcdyspKSdcbiAgICB9XG4gICAgLy8gLT4gaGFzIGJlZW4gcmVtb3ZlZCwgY2FwbnByb3RvIGFsd2F5cyB1c2VzIHRoaXMgZ3JhbW1hciBjb25zdHJ1Y3RcbiAgXTtcbiAgU1VCU1QuY29udGFpbnMgPSBFTElYSVJfREVGQVVMVF9DT05UQUlOUztcblxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdFbGl4aXInLFxuICAgIGFsaWFzZXM6IFtcbiAgICAgICdleCcsXG4gICAgICAnZXhzJ1xuICAgIF0sXG4gICAga2V5d29yZHM6IEtXUyxcbiAgICBjb250YWluczogRUxJWElSX0RFRkFVTFRfQ09OVEFJTlNcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBlbGl4aXI7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///1366\n")},1377:module=>{eval("/*\nLanguage: Clojure\nDescription: Clojure syntax (based on lisp.js)\nAuthor: mfornos\nWebsite: https://clojure.org\nCategory: lisp\n*/\n\n/** @type LanguageFn */\nfunction clojure(hljs) {\n const SYMBOLSTART = 'a-zA-Z_\\\\-!.?+*=<>&\\'';\n const SYMBOL_RE = '[#]?[' + SYMBOLSTART + '][' + SYMBOLSTART + '0-9/;:$#]*';\n const globals = 'def defonce defprotocol defstruct defmulti defmethod defn- defn defmacro deftype defrecord';\n const keywords = {\n $pattern: SYMBOL_RE,\n built_in:\n // Clojure keywords\n globals + ' '\n + 'cond apply if-not if-let if not not= =|0 <|0 >|0 <=|0 >=|0 ==|0 +|0 /|0 *|0 -|0 rem '\n + 'quot neg? pos? delay? symbol? keyword? true? false? integer? empty? coll? list? '\n + 'set? ifn? fn? associative? sequential? sorted? counted? reversible? number? decimal? '\n + 'class? distinct? isa? float? rational? reduced? ratio? odd? even? char? seq? vector? '\n + 'string? map? nil? contains? zero? instance? not-every? not-any? libspec? -> ->> .. . '\n + 'inc compare do dotimes mapcat take remove take-while drop letfn drop-last take-last '\n + 'drop-while while intern condp case reduced cycle split-at split-with repeat replicate '\n + 'iterate range merge zipmap declare line-seq sort comparator sort-by dorun doall nthnext '\n + 'nthrest partition eval doseq await await-for let agent atom send send-off release-pending-sends '\n + 'add-watch mapv filterv remove-watch agent-error restart-agent set-error-handler error-handler '\n + 'set-error-mode! error-mode shutdown-agents quote var fn loop recur throw try monitor-enter '\n + 'monitor-exit macroexpand macroexpand-1 for dosync and or '\n + 'when when-not when-let comp juxt partial sequence memoize constantly complement identity assert '\n + 'peek pop doto proxy first rest cons cast coll last butlast '\n + 'sigs reify second ffirst fnext nfirst nnext meta with-meta ns in-ns create-ns import '\n + 'refer keys select-keys vals key val rseq name namespace promise into transient persistent! conj! '\n + 'assoc! dissoc! pop! disj! use class type num float double short byte boolean bigint biginteger '\n + 'bigdec print-method print-dup throw-if printf format load compile get-in update-in pr pr-on newline '\n + 'flush read slurp read-line subvec with-open memfn time re-find re-groups rand-int rand mod locking '\n + 'assert-valid-fdecl alias resolve ref deref refset swap! reset! set-validator! compare-and-set! alter-meta! '\n + 'reset-meta! commute get-validator alter ref-set ref-history-count ref-min-history ref-max-history ensure sync io! '\n + 'new next conj set! to-array future future-call into-array aset gen-class reduce map filter find empty '\n + 'hash-map hash-set sorted-map sorted-map-by sorted-set sorted-set-by vec vector seq flatten reverse assoc dissoc list '\n + 'disj get union difference intersection extend extend-type extend-protocol int nth delay count concat chunk chunk-buffer '\n + 'chunk-append chunk-first chunk-rest max min dec unchecked-inc-int unchecked-inc unchecked-dec-inc unchecked-dec unchecked-negate '\n + 'unchecked-add-int unchecked-add unchecked-subtract-int unchecked-subtract chunk-next chunk-cons chunked-seq? prn vary-meta '\n + 'lazy-seq spread list* str find-keyword keyword symbol gensym force rationalize'\n };\n\n const SYMBOL = {\n begin: SYMBOL_RE,\n relevance: 0\n };\n const NUMBER = {\n scope: 'number',\n relevance: 0,\n variants: [\n { match: /[-+]?0[xX][0-9a-fA-F]+N?/ }, // hexadecimal // 0x2a\n { match: /[-+]?0[0-7]+N?/ }, // octal // 052\n { match: /[-+]?[1-9][0-9]?[rR][0-9a-zA-Z]+N?/ }, // variable radix from 2 to 36 // 2r101010, 8r52, 36r16\n { match: /[-+]?[0-9]+\\/[0-9]+N?/ }, // ratio // 1/2\n { match: /[-+]?[0-9]+((\\.[0-9]*([eE][+-]?[0-9]+)?M?)|([eE][+-]?[0-9]+M?|M))/ }, // float // 0.42 4.2E-1M 42E1 42M\n { match: /[-+]?([1-9][0-9]*|0)N?/ }, // int (don't match leading 0) // 42 42N\n ]\n };\n const CHARACTER = {\n scope: 'character',\n variants: [\n { match: /\\\\o[0-3]?[0-7]{1,2}/ }, // Unicode Octal 0 - 377\n { match: /\\\\u[0-9a-fA-F]{4}/ }, // Unicode Hex 0000 - FFFF\n { match: /\\\\(newline|space|tab|formfeed|backspace|return)/ }, // special characters\n {\n match: /\\\\\\S/,\n relevance: 0\n } // any non-whitespace char\n ]\n };\n const REGEX = {\n scope: 'regex',\n begin: /#\"/,\n end: /\"/,\n contains: [ hljs.BACKSLASH_ESCAPE ]\n };\n const STRING = hljs.inherit(hljs.QUOTE_STRING_MODE, { illegal: null });\n const COMMA = {\n scope: 'punctuation',\n match: /,/,\n relevance: 0\n };\n const COMMENT = hljs.COMMENT(\n ';',\n '$',\n { relevance: 0 }\n );\n const LITERAL = {\n className: 'literal',\n begin: /\\b(true|false|nil)\\b/\n };\n const COLLECTION = {\n begin: \"\\\\[|(#::?\" + SYMBOL_RE + \")?\\\\{\",\n end: '[\\\\]\\\\}]',\n relevance: 0\n };\n const KEY = {\n className: 'symbol',\n begin: '[:]{1,2}' + SYMBOL_RE\n };\n const LIST = {\n begin: '\\\\(',\n end: '\\\\)'\n };\n const BODY = {\n endsWithParent: true,\n relevance: 0\n };\n const NAME = {\n keywords: keywords,\n className: 'name',\n begin: SYMBOL_RE,\n relevance: 0,\n starts: BODY\n };\n const DEFAULT_CONTAINS = [\n COMMA,\n LIST,\n CHARACTER,\n REGEX,\n STRING,\n COMMENT,\n KEY,\n COLLECTION,\n NUMBER,\n LITERAL,\n SYMBOL\n ];\n\n const GLOBAL = {\n beginKeywords: globals,\n keywords: {\n $pattern: SYMBOL_RE,\n keyword: globals\n },\n end: '(\\\\[|#|\\\\d|\"|:|\\\\{|\\\\)|\\\\(|$)',\n contains: [\n {\n className: 'title',\n begin: SYMBOL_RE,\n relevance: 0,\n excludeEnd: true,\n // we can only have a single title\n endsParent: true\n }\n ].concat(DEFAULT_CONTAINS)\n };\n\n LIST.contains = [\n GLOBAL,\n NAME,\n BODY\n ];\n BODY.contains = DEFAULT_CONTAINS;\n COLLECTION.contains = DEFAULT_CONTAINS;\n\n return {\n name: 'Clojure',\n aliases: [\n 'clj',\n 'edn'\n ],\n illegal: /\\S/,\n contains: [\n COMMA,\n LIST,\n CHARACTER,\n REGEX,\n STRING,\n COMMENT,\n KEY,\n COLLECTION,\n NUMBER,\n LITERAL\n ]\n };\n}\n\nmodule.exports = clojure;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTM3Ny5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx1RUFBdUU7QUFDdkU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsbUNBQW1DO0FBQzNDLFFBQVEseUJBQXlCO0FBQ2pDLFFBQVEsNkNBQTZDO0FBQ3JELFFBQVEsZ0NBQWdDO0FBQ3hDLFFBQVEsNEVBQTRFO0FBQ3BGLFFBQVEsaUNBQWlDO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLHVCQUF1QixJQUFJLEdBQUc7QUFDdEMsUUFBUSx1QkFBdUIsRUFBRSxHQUFHO0FBQ3BDLFFBQVEsMERBQTBEO0FBQ2xFO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0RBQXdELGVBQWU7QUFDdkU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJDQUEyQztBQUMzQyxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsSUFBSTtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsNEJBQTRCO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vb2JzaWRpYW4tbWluZG1hcC1uZXh0Z2VuLy4vbm9kZV9tb2R1bGVzLy5wbnBtL2hpZ2hsaWdodC5qc0AxMS4xMS4xL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9jbG9qdXJlLmpzPzY2ZmUiXSwic291cmNlc0NvbnRlbnQiOlsiLypcbkxhbmd1YWdlOiBDbG9qdXJlXG5EZXNjcmlwdGlvbjogQ2xvanVyZSBzeW50YXggKGJhc2VkIG9uIGxpc3AuanMpXG5BdXRob3I6IG1mb3Jub3NcbldlYnNpdGU6IGh0dHBzOi8vY2xvanVyZS5vcmdcbkNhdGVnb3J5OiBsaXNwXG4qL1xuXG4vKiogQHR5cGUgTGFuZ3VhZ2VGbiAqL1xuZnVuY3Rpb24gY2xvanVyZShobGpzKSB7XG4gIGNvbnN0IFNZTUJPTFNUQVJUID0gJ2EtekEtWl9cXFxcLSEuPysqPTw+JlxcJyc7XG4gIGNvbnN0IFNZTUJPTF9SRSA9ICdbI10/WycgKyBTWU1CT0xTVEFSVCArICddWycgKyBTWU1CT0xTVEFSVCArICcwLTkvOzokI10qJztcbiAgY29uc3QgZ2xvYmFscyA9ICdkZWYgZGVmb25jZSBkZWZwcm90b2NvbCBkZWZzdHJ1Y3QgZGVmbXVsdGkgZGVmbWV0aG9kIGRlZm4tIGRlZm4gZGVmbWFjcm8gZGVmdHlwZSBkZWZyZWNvcmQnO1xuICBjb25zdCBrZXl3b3JkcyA9IHtcbiAgICAkcGF0dGVybjogU1lNQk9MX1JFLFxuICAgIGJ1aWx0X2luOlxuICAgICAgLy8gQ2xvanVyZSBrZXl3b3Jkc1xuICAgICAgZ2xvYmFscyArICcgJ1xuICAgICAgKyAnY29uZCBhcHBseSBpZi1ub3QgaWYtbGV0IGlmIG5vdCBub3Q9ID18MCA8fDAgPnwwIDw9fDAgPj18MCA9PXwwICt8MCAvfDAgKnwwIC18MCByZW0gJ1xuICAgICAgKyAncXVvdCBuZWc/IHBvcz8gZGVsYXk/IHN5bWJvbD8ga2V5d29yZD8gdHJ1ZT8gZmFsc2U/IGludGVnZXI/IGVtcHR5PyBjb2xsPyBsaXN0PyAnXG4gICAgICArICdzZXQ/IGlmbj8gZm4/IGFzc29jaWF0aXZlPyBzZXF1ZW50aWFsPyBzb3J0ZWQ/IGNvdW50ZWQ/IHJldmVyc2libGU/IG51bWJlcj8gZGVjaW1hbD8gJ1xuICAgICAgKyAnY2xhc3M/IGRpc3RpbmN0PyBpc2E/IGZsb2F0PyByYXRpb25hbD8gcmVkdWNlZD8gcmF0aW8/IG9kZD8gZXZlbj8gY2hhcj8gc2VxPyB2ZWN0b3I/ICdcbiAgICAgICsgJ3N0cmluZz8gbWFwPyBuaWw/IGNvbnRhaW5zPyB6ZXJvPyBpbnN0YW5jZT8gbm90LWV2ZXJ5PyBub3QtYW55PyBsaWJzcGVjPyAtPiAtPj4gLi4gLiAnXG4gICAgICArICdpbmMgY29tcGFyZSBkbyBkb3RpbWVzIG1hcGNhdCB0YWtlIHJlbW92ZSB0YWtlLXdoaWxlIGRyb3AgbGV0Zm4gZHJvcC1sYXN0IHRha2UtbGFzdCAnXG4gICAgICArICdkcm9wLXdoaWxlIHdoaWxlIGludGVybiBjb25kcCBjYXNlIHJlZHVjZWQgY3ljbGUgc3BsaXQtYXQgc3BsaXQtd2l0aCByZXBlYXQgcmVwbGljYXRlICdcbiAgICAgICsgJ2l0ZXJhdGUgcmFuZ2UgbWVyZ2UgemlwbWFwIGRlY2xhcmUgbGluZS1zZXEgc29ydCBjb21wYXJhdG9yIHNvcnQtYnkgZG9ydW4gZG9hbGwgbnRobmV4dCAnXG4gICAgICArICdudGhyZXN0IHBhcnRpdGlvbiBldmFsIGRvc2VxIGF3YWl0IGF3YWl0LWZvciBsZXQgYWdlbnQgYXRvbSBzZW5kIHNlbmQtb2ZmIHJlbGVhc2UtcGVuZGluZy1zZW5kcyAnXG4gICAgICArICdhZGQtd2F0Y2ggbWFwdiBmaWx0ZXJ2IHJlbW92ZS13YXRjaCBhZ2VudC1lcnJvciByZXN0YXJ0LWFnZW50IHNldC1lcnJvci1oYW5kbGVyIGVycm9yLWhhbmRsZXIgJ1xuICAgICAgKyAnc2V0LWVycm9yLW1vZGUhIGVycm9yLW1vZGUgc2h1dGRvd24tYWdlbnRzIHF1b3RlIHZhciBmbiBsb29wIHJlY3VyIHRocm93IHRyeSBtb25pdG9yLWVudGVyICdcbiAgICAgICsgJ21vbml0b3ItZXhpdCBtYWNyb2V4cGFuZCBtYWNyb2V4cGFuZC0xIGZvciBkb3N5bmMgYW5kIG9yICdcbiAgICAgICsgJ3doZW4gd2hlbi1ub3Qgd2hlbi1sZXQgY29tcCBqdXh0IHBhcnRpYWwgc2VxdWVuY2UgbWVtb2l6ZSBjb25zdGFudGx5IGNvbXBsZW1lbnQgaWRlbnRpdHkgYXNzZXJ0ICdcbiAgICAgICsgJ3BlZWsgcG9wIGRvdG8gcHJveHkgZmlyc3QgcmVzdCBjb25zIGNhc3QgY29sbCBsYXN0IGJ1dGxhc3QgJ1xuICAgICAgKyAnc2lncyByZWlmeSBzZWNvbmQgZmZpcnN0IGZuZXh0IG5maXJzdCBubmV4dCBtZXRhIHdpdGgtbWV0YSBucyBpbi1ucyBjcmVhdGUtbnMgaW1wb3J0ICdcbiAgICAgICsgJ3JlZmVyIGtleXMgc2VsZWN0LWtleXMgdmFscyBrZXkgdmFsIHJzZXEgbmFtZSBuYW1lc3BhY2UgcHJvbWlzZSBpbnRvIHRyYW5zaWVudCBwZXJzaXN0ZW50ISBjb25qISAnXG4gICAgICArICdhc3NvYyEgZGlzc29jISBwb3AhIGRpc2ohIHVzZSBjbGFzcyB0eXBlIG51bSBmbG9hdCBkb3VibGUgc2hvcnQgYnl0ZSBib29sZWFuIGJpZ2ludCBiaWdpbnRlZ2VyICdcbiAgICAgICsgJ2JpZ2RlYyBwcmludC1tZXRob2QgcHJpbnQtZHVwIHRocm93LWlmIHByaW50ZiBmb3JtYXQgbG9hZCBjb21waWxlIGdldC1pbiB1cGRhdGUtaW4gcHIgcHItb24gbmV3bGluZSAnXG4gICAgICArICdmbHVzaCByZWFkIHNsdXJwIHJlYWQtbGluZSBzdWJ2ZWMgd2l0aC1vcGVuIG1lbWZuIHRpbWUgcmUtZmluZCByZS1ncm91cHMgcmFuZC1pbnQgcmFuZCBtb2QgbG9ja2luZyAnXG4gICAgICArICdhc3NlcnQtdmFsaWQtZmRlY2wgYWxpYXMgcmVzb2x2ZSByZWYgZGVyZWYgcmVmc2V0IHN3YXAhIHJlc2V0ISBzZXQtdmFsaWRhdG9yISBjb21wYXJlLWFuZC1zZXQhIGFsdGVyLW1ldGEhICdcbiAgICAgICsgJ3Jlc2V0LW1ldGEhIGNvbW11dGUgZ2V0LXZhbGlkYXRvciBhbHRlciByZWYtc2V0IHJlZi1oaXN0b3J5LWNvdW50IHJlZi1taW4taGlzdG9yeSByZWYtbWF4LWhpc3RvcnkgZW5zdXJlIHN5bmMgaW8hICdcbiAgICAgICsgJ25ldyBuZXh0IGNvbmogc2V0ISB0by1hcnJheSBmdXR1cmUgZnV0dXJlLWNhbGwgaW50by1hcnJheSBhc2V0IGdlbi1jbGFzcyByZWR1Y2UgbWFwIGZpbHRlciBmaW5kIGVtcHR5ICdcbiAgICAgICsgJ2hhc2gtbWFwIGhhc2gtc2V0IHNvcnRlZC1tYXAgc29ydGVkLW1hcC1ieSBzb3J0ZWQtc2V0IHNvcnRlZC1zZXQtYnkgdmVjIHZlY3RvciBzZXEgZmxhdHRlbiByZXZlcnNlIGFzc29jIGRpc3NvYyBsaXN0ICdcbiAgICAgICsgJ2Rpc2ogZ2V0IHVuaW9uIGRpZmZlcmVuY2UgaW50ZXJzZWN0aW9uIGV4dGVuZCBleHRlbmQtdHlwZSBleHRlbmQtcHJvdG9jb2wgaW50IG50aCBkZWxheSBjb3VudCBjb25jYXQgY2h1bmsgY2h1bmstYnVmZmVyICdcbiAgICAgICsgJ2NodW5rLWFwcGVuZCBjaHVuay1maXJzdCBjaHVuay1yZXN0IG1heCBtaW4gZGVjIHVuY2hlY2tlZC1pbmMtaW50IHVuY2hlY2tlZC1pbmMgdW5jaGVja2VkLWRlYy1pbmMgdW5jaGVja2VkLWRlYyB1bmNoZWNrZWQtbmVnYXRlICdcbiAgICAgICsgJ3VuY2hlY2tlZC1hZGQtaW50IHVuY2hlY2tlZC1hZGQgdW5jaGVja2VkLXN1YnRyYWN0LWludCB1bmNoZWNrZWQtc3VidHJhY3QgY2h1bmstbmV4dCBjaHVuay1jb25zIGNodW5rZWQtc2VxPyBwcm4gdmFyeS1tZXRhICdcbiAgICAgICsgJ2xhenktc2VxIHNwcmVhZCBsaXN0KiBzdHIgZmluZC1rZXl3b3JkIGtleXdvcmQgc3ltYm9sIGdlbnN5bSBmb3JjZSByYXRpb25hbGl6ZSdcbiAgfTtcblxuICBjb25zdCBTWU1CT0wgPSB7XG4gICAgYmVnaW46IFNZTUJPTF9SRSxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcbiAgY29uc3QgTlVNQkVSID0ge1xuICAgIHNjb3BlOiAnbnVtYmVyJyxcbiAgICByZWxldmFuY2U6IDAsXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHsgbWF0Y2g6IC9bLStdPzBbeFhdWzAtOWEtZkEtRl0rTj8vIH0sIC8vIGhleGFkZWNpbWFsICAgICAgICAgICAgICAgICAvLyAweDJhXG4gICAgICB7IG1hdGNoOiAvWy0rXT8wWzAtN10rTj8vIH0sIC8vIG9jdGFsICAgICAgICAgICAgICAgICAgICAgICAvLyAwNTJcbiAgICAgIHsgbWF0Y2g6IC9bLStdP1sxLTldWzAtOV0/W3JSXVswLTlhLXpBLVpdK04/LyB9LCAvLyB2YXJpYWJsZSByYWRpeCBmcm9tIDIgdG8gMzYgLy8gMnIxMDEwMTAsIDhyNTIsIDM2cjE2XG4gICAgICB7IG1hdGNoOiAvWy0rXT9bMC05XStcXC9bMC05XStOPy8gfSwgLy8gcmF0aW8gICAgICAgICAgICAgICAgICAgICAgIC8vIDEvMlxuICAgICAgeyBtYXRjaDogL1stK10/WzAtOV0rKChcXC5bMC05XSooW2VFXVsrLV0/WzAtOV0rKT9NPyl8KFtlRV1bKy1dP1swLTldK00/fE0pKS8gfSwgLy8gZmxvYXQgICAgICAgIC8vIDAuNDIgNC4yRS0xTSA0MkUxIDQyTVxuICAgICAgeyBtYXRjaDogL1stK10/KFsxLTldWzAtOV0qfDApTj8vIH0sIC8vIGludCAoZG9uJ3QgbWF0Y2ggbGVhZGluZyAwKSAvLyA0MiA0Mk5cbiAgICBdXG4gIH07XG4gIGNvbnN0IENIQVJBQ1RFUiA9IHtcbiAgICBzY29wZTogJ2NoYXJhY3RlcicsXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHsgbWF0Y2g6IC9cXFxcb1swLTNdP1swLTddezEsMn0vIH0sIC8vIFVuaWNvZGUgT2N0YWwgMCAtIDM3N1xuICAgICAgeyBtYXRjaDogL1xcXFx1WzAtOWEtZkEtRl17NH0vIH0sIC8vIFVuaWNvZGUgSGV4IDAwMDAgLSBGRkZGXG4gICAgICB7IG1hdGNoOiAvXFxcXChuZXdsaW5lfHNwYWNlfHRhYnxmb3JtZmVlZHxiYWNrc3BhY2V8cmV0dXJuKS8gfSwgLy8gc3BlY2lhbCBjaGFyYWN0ZXJzXG4gICAgICB7XG4gICAgICAgIG1hdGNoOiAvXFxcXFxcUy8sXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSAvLyBhbnkgbm9uLXdoaXRlc3BhY2UgY2hhclxuICAgIF1cbiAgfTtcbiAgY29uc3QgUkVHRVggPSB7XG4gICAgc2NvcGU6ICdyZWdleCcsXG4gICAgYmVnaW46IC8jXCIvLFxuICAgIGVuZDogL1wiLyxcbiAgICBjb250YWluczogWyBobGpzLkJBQ0tTTEFTSF9FU0NBUEUgXVxuICB9O1xuICBjb25zdCBTVFJJTkcgPSBobGpzLmluaGVyaXQoaGxqcy5RVU9URV9TVFJJTkdfTU9ERSwgeyBpbGxlZ2FsOiBudWxsIH0pO1xuICBjb25zdCBDT01NQSA9IHtcbiAgICBzY29wZTogJ3B1bmN0dWF0aW9uJyxcbiAgICBtYXRjaDogLywvLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuICBjb25zdCBDT01NRU5UID0gaGxqcy5DT01NRU5UKFxuICAgICc7JyxcbiAgICAnJCcsXG4gICAgeyByZWxldmFuY2U6IDAgfVxuICApO1xuICBjb25zdCBMSVRFUkFMID0ge1xuICAgIGNsYXNzTmFtZTogJ2xpdGVyYWwnLFxuICAgIGJlZ2luOiAvXFxiKHRydWV8ZmFsc2V8bmlsKVxcYi9cbiAgfTtcbiAgY29uc3QgQ09MTEVDVElPTiA9IHtcbiAgICBiZWdpbjogXCJcXFxcW3woIzo6P1wiICsgU1lNQk9MX1JFICsgXCIpP1xcXFx7XCIsXG4gICAgZW5kOiAnW1xcXFxdXFxcXH1dJyxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcbiAgY29uc3QgS0VZID0ge1xuICAgIGNsYXNzTmFtZTogJ3N5bWJvbCcsXG4gICAgYmVnaW46ICdbOl17MSwyfScgKyBTWU1CT0xfUkVcbiAgfTtcbiAgY29uc3QgTElTVCA9IHtcbiAgICBiZWdpbjogJ1xcXFwoJyxcbiAgICBlbmQ6ICdcXFxcKSdcbiAgfTtcbiAgY29uc3QgQk9EWSA9IHtcbiAgICBlbmRzV2l0aFBhcmVudDogdHJ1ZSxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcbiAgY29uc3QgTkFNRSA9IHtcbiAgICBrZXl3b3Jkczoga2V5d29yZHMsXG4gICAgY2xhc3NOYW1lOiAnbmFtZScsXG4gICAgYmVnaW46IFNZTUJPTF9SRSxcbiAgICByZWxldmFuY2U6IDAsXG4gICAgc3RhcnRzOiBCT0RZXG4gIH07XG4gIGNvbnN0IERFRkFVTFRfQ09OVEFJTlMgPSBbXG4gICAgQ09NTUEsXG4gICAgTElTVCxcbiAgICBDSEFSQUNURVIsXG4gICAgUkVHRVgsXG4gICAgU1RSSU5HLFxuICAgIENPTU1FTlQsXG4gICAgS0VZLFxuICAgIENPTExFQ1RJT04sXG4gICAgTlVNQkVSLFxuICAgIExJVEVSQUwsXG4gICAgU1lNQk9MXG4gIF07XG5cbiAgY29uc3QgR0xPQkFMID0ge1xuICAgIGJlZ2luS2V5d29yZHM6IGdsb2JhbHMsXG4gICAga2V5d29yZHM6IHtcbiAgICAgICRwYXR0ZXJuOiBTWU1CT0xfUkUsXG4gICAgICBrZXl3b3JkOiBnbG9iYWxzXG4gICAgfSxcbiAgICBlbmQ6ICcoXFxcXFt8I3xcXFxcZHxcInw6fFxcXFx7fFxcXFwpfFxcXFwofCQpJyxcbiAgICBjb250YWluczogW1xuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICd0aXRsZScsXG4gICAgICAgIGJlZ2luOiBTWU1CT0xfUkUsXG4gICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAgLy8gd2UgY2FuIG9ubHkgaGF2ZSBhIHNpbmdsZSB0aXRsZVxuICAgICAgICBlbmRzUGFyZW50OiB0cnVlXG4gICAgICB9XG4gICAgXS5jb25jYXQoREVGQVVMVF9DT05UQUlOUylcbiAgfTtcblxuICBMSVNULmNvbnRhaW5zID0gW1xuICAgIEdMT0JBTCxcbiAgICBOQU1FLFxuICAgIEJPRFlcbiAgXTtcbiAgQk9EWS5jb250YWlucyA9IERFRkFVTFRfQ09OVEFJTlM7XG4gIENPTExFQ1RJT04uY29udGFpbnMgPSBERUZBVUxUX0NPTlRBSU5TO1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogJ0Nsb2p1cmUnLFxuICAgIGFsaWFzZXM6IFtcbiAgICAgICdjbGonLFxuICAgICAgJ2VkbidcbiAgICBdLFxuICAgIGlsbGVnYWw6IC9cXFMvLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBDT01NQSxcbiAgICAgIExJU1QsXG4gICAgICBDSEFSQUNURVIsXG4gICAgICBSRUdFWCxcbiAgICAgIFNUUklORyxcbiAgICAgIENPTU1FTlQsXG4gICAgICBLRVksXG4gICAgICBDT0xMRUNUSU9OLFxuICAgICAgTlVNQkVSLFxuICAgICAgTElURVJBTFxuICAgIF1cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjbG9qdXJlO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1377\n")},1400:module=>{eval('/*\nLanguage: SAS\nAuthor: Mauricio Caceres \nDescription: Syntax Highlighting for SAS\nCategory: scientific\n*/\n\n/** @type LanguageFn */\nfunction sas(hljs) {\n const regex = hljs.regex;\n // Data step and PROC SQL statements\n const SAS_KEYWORDS = [\n "do",\n "if",\n "then",\n "else",\n "end",\n "until",\n "while",\n "abort",\n "array",\n "attrib",\n "by",\n "call",\n "cards",\n "cards4",\n "catname",\n "continue",\n "datalines",\n "datalines4",\n "delete",\n "delim",\n "delimiter",\n "display",\n "dm",\n "drop",\n "endsas",\n "error",\n "file",\n "filename",\n "footnote",\n "format",\n "goto",\n "in",\n "infile",\n "informat",\n "input",\n "keep",\n "label",\n "leave",\n "length",\n "libname",\n "link",\n "list",\n "lostcard",\n "merge",\n "missing",\n "modify",\n "options",\n "output",\n "out",\n "page",\n "put",\n "redirect",\n "remove",\n "rename",\n "replace",\n "retain",\n "return",\n "select",\n "set",\n "skip",\n "startsas",\n "stop",\n "title",\n "update",\n "waitsas",\n "where",\n "window",\n "x|0",\n "systask",\n "add",\n "and",\n "alter",\n "as",\n "cascade",\n "check",\n "create",\n "delete",\n "describe",\n "distinct",\n "drop",\n "foreign",\n "from",\n "group",\n "having",\n "index",\n "insert",\n "into",\n "in",\n "key",\n "like",\n "message",\n "modify",\n "msgtype",\n "not",\n "null",\n "on",\n "or",\n "order",\n "primary",\n "references",\n "reset",\n "restrict",\n "select",\n "set",\n "table",\n "unique",\n "update",\n "validate",\n "view",\n "where"\n ];\n\n // Built-in SAS functions\n const FUNCTIONS = [\n "abs",\n "addr",\n "airy",\n "arcos",\n "arsin",\n "atan",\n "attrc",\n "attrn",\n "band",\n "betainv",\n "blshift",\n "bnot",\n "bor",\n "brshift",\n "bxor",\n "byte",\n "cdf",\n "ceil",\n "cexist",\n "cinv",\n "close",\n "cnonct",\n "collate",\n "compbl",\n "compound",\n "compress",\n "cos",\n "cosh",\n "css",\n "curobs",\n "cv",\n "daccdb",\n "daccdbsl",\n "daccsl",\n "daccsyd",\n "dacctab",\n "dairy",\n "date",\n "datejul",\n "datepart",\n "datetime",\n "day",\n "dclose",\n "depdb",\n "depdbsl",\n "depdbsl",\n "depsl",\n "depsl",\n "depsyd",\n "depsyd",\n "deptab",\n "deptab",\n "dequote",\n "dhms",\n "dif",\n "digamma",\n "dim",\n "dinfo",\n "dnum",\n "dopen",\n "doptname",\n "doptnum",\n "dread",\n "dropnote",\n "dsname",\n "erf",\n "erfc",\n "exist",\n "exp",\n "fappend",\n "fclose",\n "fcol",\n "fdelete",\n "fetch",\n "fetchobs",\n "fexist",\n "fget",\n "fileexist",\n "filename",\n "fileref",\n "finfo",\n "finv",\n "fipname",\n "fipnamel",\n "fipstate",\n "floor",\n "fnonct",\n "fnote",\n "fopen",\n "foptname",\n "foptnum",\n "fpoint",\n "fpos",\n "fput",\n "fread",\n "frewind",\n "frlen",\n "fsep",\n "fuzz",\n "fwrite",\n "gaminv",\n "gamma",\n "getoption",\n "getvarc",\n "getvarn",\n "hbound",\n "hms",\n "hosthelp",\n "hour",\n "ibessel",\n "index",\n "indexc",\n "indexw",\n "input",\n "inputc",\n "inputn",\n "int",\n "intck",\n "intnx",\n "intrr",\n "irr",\n "jbessel",\n "juldate",\n "kurtosis",\n "lag",\n "lbound",\n "left",\n "length",\n "lgamma",\n "libname",\n "libref",\n "log",\n "log10",\n "log2",\n "logpdf",\n "logpmf",\n "logsdf",\n "lowcase",\n "max",\n "mdy",\n "mean",\n "min",\n "minute",\n "mod",\n "month",\n "mopen",\n "mort",\n "n",\n "netpv",\n "nmiss",\n "normal",\n "note",\n "npv",\n "open",\n "ordinal",\n "pathname",\n "pdf",\n "peek",\n "peekc",\n "pmf",\n "point",\n "poisson",\n "poke",\n "probbeta",\n "probbnml",\n "probchi",\n "probf",\n "probgam",\n "probhypr",\n "probit",\n "probnegb",\n "probnorm",\n "probt",\n "put",\n "putc",\n "putn",\n "qtr",\n "quote",\n "ranbin",\n "rancau",\n "ranexp",\n "rangam",\n "range",\n "rank",\n "rannor",\n "ranpoi",\n "rantbl",\n "rantri",\n "ranuni",\n "repeat",\n "resolve",\n "reverse",\n "rewind",\n "right",\n "round",\n "saving",\n "scan",\n "sdf",\n "second",\n "sign",\n "sin",\n "sinh",\n "skewness",\n "soundex",\n "spedis",\n "sqrt",\n "std",\n "stderr",\n "stfips",\n "stname",\n "stnamel",\n "substr",\n "sum",\n "symget",\n "sysget",\n "sysmsg",\n "sysprod",\n "sysrc",\n "system",\n "tan",\n "tanh",\n "time",\n "timepart",\n "tinv",\n "tnonct",\n "today",\n "translate",\n "tranwrd",\n "trigamma",\n "trim",\n "trimn",\n "trunc",\n "uniform",\n "upcase",\n "uss",\n "var",\n "varfmt",\n "varinfmt",\n "varlabel",\n "varlen",\n "varname",\n "varnum",\n "varray",\n "varrayx",\n "vartype",\n "verify",\n "vformat",\n "vformatd",\n "vformatdx",\n "vformatn",\n "vformatnx",\n "vformatw",\n "vformatwx",\n "vformatx",\n "vinarray",\n "vinarrayx",\n "vinformat",\n "vinformatd",\n "vinformatdx",\n "vinformatn",\n "vinformatnx",\n "vinformatw",\n "vinformatwx",\n "vinformatx",\n "vlabel",\n "vlabelx",\n "vlength",\n "vlengthx",\n "vname",\n "vnamex",\n "vtype",\n "vtypex",\n "weekday",\n "year",\n "yyq",\n "zipfips",\n "zipname",\n "zipnamel",\n "zipstate"\n ];\n\n // Built-in macro functions\n const MACRO_FUNCTIONS = [\n "bquote",\n "nrbquote",\n "cmpres",\n "qcmpres",\n "compstor",\n "datatyp",\n "display",\n "do",\n "else",\n "end",\n "eval",\n "global",\n "goto",\n "if",\n "index",\n "input",\n "keydef",\n "label",\n "left",\n "length",\n "let",\n "local",\n "lowcase",\n "macro",\n "mend",\n "nrbquote",\n "nrquote",\n "nrstr",\n "put",\n "qcmpres",\n "qleft",\n "qlowcase",\n "qscan",\n "qsubstr",\n "qsysfunc",\n "qtrim",\n "quote",\n "qupcase",\n "scan",\n "str",\n "substr",\n "superq",\n "syscall",\n "sysevalf",\n "sysexec",\n "sysfunc",\n "sysget",\n "syslput",\n "sysprod",\n "sysrc",\n "sysrput",\n "then",\n "to",\n "trim",\n "unquote",\n "until",\n "upcase",\n "verify",\n "while",\n "window"\n ];\n\n const LITERALS = [\n "null",\n "missing",\n "_all_",\n "_automatic_",\n "_character_",\n "_infile_",\n "_n_",\n "_name_",\n "_null_",\n "_numeric_",\n "_user_",\n "_webout_"\n ];\n\n return {\n name: \'SAS\',\n case_insensitive: true,\n keywords: {\n literal: LITERALS,\n keyword: SAS_KEYWORDS\n },\n contains: [\n {\n // Distinct highlight for proc , data, run, quit\n className: \'keyword\',\n begin: /^\\s*(proc [\\w\\d_]+|data|run|quit)[\\s;]/\n },\n {\n // Macro variables\n className: \'variable\',\n begin: /&[a-zA-Z_&][a-zA-Z0-9_]*\\.?/\n },\n {\n begin: [\n /^\\s*/,\n /datalines;|cards;/,\n /(?:.*\\n)+/,\n /^\\s*;\\s*$/\n ],\n className: {\n 2: "keyword",\n 3: "string"\n }\n },\n {\n begin: [\n /%mend|%macro/,\n /\\s+/,\n /[a-zA-Z_&][a-zA-Z0-9_]*/\n ],\n className: {\n 1: "built_in",\n 3: "title.function"\n }\n },\n { // Built-in macro variables\n className: \'built_in\',\n begin: \'%\' + regex.either(...MACRO_FUNCTIONS)\n },\n {\n // User-defined macro functions\n className: \'title.function\',\n begin: /%[a-zA-Z_][a-zA-Z_0-9]*/\n },\n {\n // TODO: this is most likely an incorrect classification\n // built_in may need more nuance\n // https://github.com/highlightjs/highlight.js/issues/2521\n className: \'meta\',\n begin: regex.either(...FUNCTIONS) + \'(?=\\\\()\'\n },\n {\n className: \'string\',\n variants: [\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE\n ]\n },\n hljs.COMMENT(\'\\\\*\', \';\'),\n hljs.C_BLOCK_COMMENT_MODE\n ]\n };\n}\n\nmodule.exports = sas;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTQwMC5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscURBQXFEO0FBQ3JELE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsT0FBTztBQUM1QjtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLFFBQVE7QUFDUjtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsNEJBQTRCO0FBQzVCO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vb2JzaWRpYW4tbWluZG1hcC1uZXh0Z2VuLy4vbm9kZV9tb2R1bGVzLy5wbnBtL2hpZ2hsaWdodC5qc0AxMS4xMS4xL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9zYXMuanM/MjdkNCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuTGFuZ3VhZ2U6IFNBU1xuQXV0aG9yOiBNYXVyaWNpbyBDYWNlcmVzIDxtYXVyaWNpby5jYWNlcmVzLmJyYXZvQGdtYWlsLmNvbT5cbkRlc2NyaXB0aW9uOiBTeW50YXggSGlnaGxpZ2h0aW5nIGZvciBTQVNcbkNhdGVnb3J5OiBzY2llbnRpZmljXG4qL1xuXG4vKiogQHR5cGUgTGFuZ3VhZ2VGbiAqL1xuZnVuY3Rpb24gc2FzKGhsanMpIHtcbiAgY29uc3QgcmVnZXggPSBobGpzLnJlZ2V4O1xuICAvLyBEYXRhIHN0ZXAgYW5kIFBST0MgU1FMIHN0YXRlbWVudHNcbiAgY29uc3QgU0FTX0tFWVdPUkRTID0gW1xuICAgIFwiZG9cIixcbiAgICBcImlmXCIsXG4gICAgXCJ0aGVuXCIsXG4gICAgXCJlbHNlXCIsXG4gICAgXCJlbmRcIixcbiAgICBcInVudGlsXCIsXG4gICAgXCJ3aGlsZVwiLFxuICAgIFwiYWJvcnRcIixcbiAgICBcImFycmF5XCIsXG4gICAgXCJhdHRyaWJcIixcbiAgICBcImJ5XCIsXG4gICAgXCJjYWxsXCIsXG4gICAgXCJjYXJkc1wiLFxuICAgIFwiY2FyZHM0XCIsXG4gICAgXCJjYXRuYW1lXCIsXG4gICAgXCJjb250aW51ZVwiLFxuICAgIFwiZGF0YWxpbmVzXCIsXG4gICAgXCJkYXRhbGluZXM0XCIsXG4gICAgXCJkZWxldGVcIixcbiAgICBcImRlbGltXCIsXG4gICAgXCJkZWxpbWl0ZXJcIixcbiAgICBcImRpc3BsYXlcIixcbiAgICBcImRtXCIsXG4gICAgXCJkcm9wXCIsXG4gICAgXCJlbmRzYXNcIixcbiAgICBcImVycm9yXCIsXG4gICAgXCJmaWxlXCIsXG4gICAgXCJmaWxlbmFtZVwiLFxuICAgIFwiZm9vdG5vdGVcIixcbiAgICBcImZvcm1hdFwiLFxuICAgIFwiZ290b1wiLFxuICAgIFwiaW5cIixcbiAgICBcImluZmlsZVwiLFxuICAgIFwiaW5mb3JtYXRcIixcbiAgICBcImlucHV0XCIsXG4gICAgXCJrZWVwXCIsXG4gICAgXCJsYWJlbFwiLFxuICAgIFwibGVhdmVcIixcbiAgICBcImxlbmd0aFwiLFxuICAgIFwibGlibmFtZVwiLFxuICAgIFwibGlua1wiLFxuICAgIFwibGlzdFwiLFxuICAgIFwibG9zdGNhcmRcIixcbiAgICBcIm1lcmdlXCIsXG4gICAgXCJtaXNzaW5nXCIsXG4gICAgXCJtb2RpZnlcIixcbiAgICBcIm9wdGlvbnNcIixcbiAgICBcIm91dHB1dFwiLFxuICAgIFwib3V0XCIsXG4gICAgXCJwYWdlXCIsXG4gICAgXCJwdXRcIixcbiAgICBcInJlZGlyZWN0XCIsXG4gICAgXCJyZW1vdmVcIixcbiAgICBcInJlbmFtZVwiLFxuICAgIFwicmVwbGFjZVwiLFxuICAgIFwicmV0YWluXCIsXG4gICAgXCJyZXR1cm5cIixcbiAgICBcInNlbGVjdFwiLFxuICAgIFwic2V0XCIsXG4gICAgXCJza2lwXCIsXG4gICAgXCJzdGFydHNhc1wiLFxuICAgIFwic3RvcFwiLFxuICAgIFwidGl0bGVcIixcbiAgICBcInVwZGF0ZVwiLFxuICAgIFwid2FpdHNhc1wiLFxuICAgIFwid2hlcmVcIixcbiAgICBcIndpbmRvd1wiLFxuICAgIFwieHwwXCIsXG4gICAgXCJzeXN0YXNrXCIsXG4gICAgXCJhZGRcIixcbiAgICBcImFuZFwiLFxuICAgIFwiYWx0ZXJcIixcbiAgICBcImFzXCIsXG4gICAgXCJjYXNjYWRlXCIsXG4gICAgXCJjaGVja1wiLFxuICAgIFwiY3JlYXRlXCIsXG4gICAgXCJkZWxldGVcIixcbiAgICBcImRlc2NyaWJlXCIsXG4gICAgXCJkaXN0aW5jdFwiLFxuICAgIFwiZHJvcFwiLFxuICAgIFwiZm9yZWlnblwiLFxuICAgIFwiZnJvbVwiLFxuICAgIFwiZ3JvdXBcIixcbiAgICBcImhhdmluZ1wiLFxuICAgIFwiaW5kZXhcIixcbiAgICBcImluc2VydFwiLFxuICAgIFwiaW50b1wiLFxuICAgIFwiaW5cIixcbiAgICBcImtleVwiLFxuICAgIFwibGlrZVwiLFxuICAgIFwibWVzc2FnZVwiLFxuICAgIFwibW9kaWZ5XCIsXG4gICAgXCJtc2d0eXBlXCIsXG4gICAgXCJub3RcIixcbiAgICBcIm51bGxcIixcbiAgICBcIm9uXCIsXG4gICAgXCJvclwiLFxuICAgIFwib3JkZXJcIixcbiAgICBcInByaW1hcnlcIixcbiAgICBcInJlZmVyZW5jZXNcIixcbiAgICBcInJlc2V0XCIsXG4gICAgXCJyZXN0cmljdFwiLFxuICAgIFwic2VsZWN0XCIsXG4gICAgXCJzZXRcIixcbiAgICBcInRhYmxlXCIsXG4gICAgXCJ1bmlxdWVcIixcbiAgICBcInVwZGF0ZVwiLFxuICAgIFwidmFsaWRhdGVcIixcbiAgICBcInZpZXdcIixcbiAgICBcIndoZXJlXCJcbiAgXTtcblxuICAvLyBCdWlsdC1pbiBTQVMgZnVuY3Rpb25zXG4gIGNvbnN0IEZVTkNUSU9OUyA9IFtcbiAgICBcImFic1wiLFxuICAgIFwiYWRkclwiLFxuICAgIFwiYWlyeVwiLFxuICAgIFwiYXJjb3NcIixcbiAgICBcImFyc2luXCIsXG4gICAgXCJhdGFuXCIsXG4gICAgXCJhdHRyY1wiLFxuICAgIFwiYXR0cm5cIixcbiAgICBcImJhbmRcIixcbiAgICBcImJldGFpbnZcIixcbiAgICBcImJsc2hpZnRcIixcbiAgICBcImJub3RcIixcbiAgICBcImJvclwiLFxuICAgIFwiYnJzaGlmdFwiLFxuICAgIFwiYnhvclwiLFxuICAgIFwiYnl0ZVwiLFxuICAgIFwiY2RmXCIsXG4gICAgXCJjZWlsXCIsXG4gICAgXCJjZXhpc3RcIixcbiAgICBcImNpbnZcIixcbiAgICBcImNsb3NlXCIsXG4gICAgXCJjbm9uY3RcIixcbiAgICBcImNvbGxhdGVcIixcbiAgICBcImNvbXBibFwiLFxuICAgIFwiY29tcG91bmRcIixcbiAgICBcImNvbXByZXNzXCIsXG4gICAgXCJjb3NcIixcbiAgICBcImNvc2hcIixcbiAgICBcImNzc1wiLFxuICAgIFwiY3Vyb2JzXCIsXG4gICAgXCJjdlwiLFxuICAgIFwiZGFjY2RiXCIsXG4gICAgXCJkYWNjZGJzbFwiLFxuICAgIFwiZGFjY3NsXCIsXG4gICAgXCJkYWNjc3lkXCIsXG4gICAgXCJkYWNjdGFiXCIsXG4gICAgXCJkYWlyeVwiLFxuICAgIFwiZGF0ZVwiLFxuICAgIFwiZGF0ZWp1bFwiLFxuICAgIFwiZGF0ZXBhcnRcIixcbiAgICBcImRhdGV0aW1lXCIsXG4gICAgXCJkYXlcIixcbiAgICBcImRjbG9zZVwiLFxuICAgIFwiZGVwZGJcIixcbiAgICBcImRlcGRic2xcIixcbiAgICBcImRlcGRic2xcIixcbiAgICBcImRlcHNsXCIsXG4gICAgXCJkZXBzbFwiLFxuICAgIFwiZGVwc3lkXCIsXG4gICAgXCJkZXBzeWRcIixcbiAgICBcImRlcHRhYlwiLFxuICAgIFwiZGVwdGFiXCIsXG4gICAgXCJkZXF1b3RlXCIsXG4gICAgXCJkaG1zXCIsXG4gICAgXCJkaWZcIixcbiAgICBcImRpZ2FtbWFcIixcbiAgICBcImRpbVwiLFxuICAgIFwiZGluZm9cIixcbiAgICBcImRudW1cIixcbiAgICBcImRvcGVuXCIsXG4gICAgXCJkb3B0bmFtZVwiLFxuICAgIFwiZG9wdG51bVwiLFxuICAgIFwiZHJlYWRcIixcbiAgICBcImRyb3Bub3RlXCIsXG4gICAgXCJkc25hbWVcIixcbiAgICBcImVyZlwiLFxuICAgIFwiZXJmY1wiLFxuICAgIFwiZXhpc3RcIixcbiAgICBcImV4cFwiLFxuICAgIFwiZmFwcGVuZFwiLFxuICAgIFwiZmNsb3NlXCIsXG4gICAgXCJmY29sXCIsXG4gICAgXCJmZGVsZXRlXCIsXG4gICAgXCJmZXRjaFwiLFxuICAgIFwiZmV0Y2hvYnNcIixcbiAgICBcImZleGlzdFwiLFxuICAgIFwiZmdldFwiLFxuICAgIFwiZmlsZWV4aXN0XCIsXG4gICAgXCJmaWxlbmFtZVwiLFxuICAgIFwiZmlsZXJlZlwiLFxuICAgIFwiZmluZm9cIixcbiAgICBcImZpbnZcIixcbiAgICBcImZpcG5hbWVcIixcbiAgICBcImZpcG5hbWVsXCIsXG4gICAgXCJmaXBzdGF0ZVwiLFxuICAgIFwiZmxvb3JcIixcbiAgICBcImZub25jdFwiLFxuICAgIFwiZm5vdGVcIixcbiAgICBcImZvcGVuXCIsXG4gICAgXCJmb3B0bmFtZVwiLFxuICAgIFwiZm9wdG51bVwiLFxuICAgIFwiZnBvaW50XCIsXG4gICAgXCJmcG9zXCIsXG4gICAgXCJmcHV0XCIsXG4gICAgXCJmcmVhZFwiLFxuICAgIFwiZnJld2luZFwiLFxuICAgIFwiZnJsZW5cIixcbiAgICBcImZzZXBcIixcbiAgICBcImZ1enpcIixcbiAgICBcImZ3cml0ZVwiLFxuICAgIFwiZ2FtaW52XCIsXG4gICAgXCJnYW1tYVwiLFxuICAgIFwiZ2V0b3B0aW9uXCIsXG4gICAgXCJnZXR2YXJjXCIsXG4gICAgXCJnZXR2YXJuXCIsXG4gICAgXCJoYm91bmRcIixcbiAgICBcImhtc1wiLFxuICAgIFwiaG9zdGhlbHBcIixcbiAgICBcImhvdXJcIixcbiAgICBcImliZXNzZWxcIixcbiAgICBcImluZGV4XCIsXG4gICAgXCJpbmRleGNcIixcbiAgICBcImluZGV4d1wiLFxuICAgIFwiaW5wdXRcIixcbiAgICBcImlucHV0Y1wiLFxuICAgIFwiaW5wdXRuXCIsXG4gICAgXCJpbnRcIixcbiAgICBcImludGNrXCIsXG4gICAgXCJpbnRueFwiLFxuICAgIFwiaW50cnJcIixcbiAgICBcImlyclwiLFxuICAgIFwiamJlc3NlbFwiLFxuICAgIFwianVsZGF0ZVwiLFxuICAgIFwia3VydG9zaXNcIixcbiAgICBcImxhZ1wiLFxuICAgIFwibGJvdW5kXCIsXG4gICAgXCJsZWZ0XCIsXG4gICAgXCJsZW5ndGhcIixcbiAgICBcImxnYW1tYVwiLFxuICAgIFwibGlibmFtZVwiLFxuICAgIFwibGlicmVmXCIsXG4gICAgXCJsb2dcIixcbiAgICBcImxvZzEwXCIsXG4gICAgXCJsb2cyXCIsXG4gICAgXCJsb2dwZGZcIixcbiAgICBcImxvZ3BtZlwiLFxuICAgIFwibG9nc2RmXCIsXG4gICAgXCJsb3djYXNlXCIsXG4gICAgXCJtYXhcIixcbiAgICBcIm1keVwiLFxuICAgIFwibWVhblwiLFxuICAgIFwibWluXCIsXG4gICAgXCJtaW51dGVcIixcbiAgICBcIm1vZFwiLFxuICAgIFwibW9udGhcIixcbiAgICBcIm1vcGVuXCIsXG4gICAgXCJtb3J0XCIsXG4gICAgXCJuXCIsXG4gICAgXCJuZXRwdlwiLFxuICAgIFwibm1pc3NcIixcbiAgICBcIm5vcm1hbFwiLFxuICAgIFwibm90ZVwiLFxuICAgIFwibnB2XCIsXG4gICAgXCJvcGVuXCIsXG4gICAgXCJvcmRpbmFsXCIsXG4gICAgXCJwYXRobmFtZVwiLFxuICAgIFwicGRmXCIsXG4gICAgXCJwZWVrXCIsXG4gICAgXCJwZWVrY1wiLFxuICAgIFwicG1mXCIsXG4gICAgXCJwb2ludFwiLFxuICAgIFwicG9pc3NvblwiLFxuICAgIFwicG9rZVwiLFxuICAgIFwicHJvYmJldGFcIixcbiAgICBcInByb2Jibm1sXCIsXG4gICAgXCJwcm9iY2hpXCIsXG4gICAgXCJwcm9iZlwiLFxuICAgIFwicHJvYmdhbVwiLFxuICAgIFwicHJvYmh5cHJcIixcbiAgICBcInByb2JpdFwiLFxuICAgIFwicHJvYm5lZ2JcIixcbiAgICBcInByb2Jub3JtXCIsXG4gICAgXCJwcm9idFwiLFxuICAgIFwicHV0XCIsXG4gICAgXCJwdXRjXCIsXG4gICAgXCJwdXRuXCIsXG4gICAgXCJxdHJcIixcbiAgICBcInF1b3RlXCIsXG4gICAgXCJyYW5iaW5cIixcbiAgICBcInJhbmNhdVwiLFxuICAgIFwicmFuZXhwXCIsXG4gICAgXCJyYW5nYW1cIixcbiAgICBcInJhbmdlXCIsXG4gICAgXCJyYW5rXCIsXG4gICAgXCJyYW5ub3JcIixcbiAgICBcInJhbnBvaVwiLFxuICAgIFwicmFudGJsXCIsXG4gICAgXCJyYW50cmlcIixcbiAgICBcInJhbnVuaVwiLFxuICAgIFwicmVwZWF0XCIsXG4gICAgXCJyZXNvbHZlXCIsXG4gICAgXCJyZXZlcnNlXCIsXG4gICAgXCJyZXdpbmRcIixcbiAgICBcInJpZ2h0XCIsXG4gICAgXCJyb3VuZFwiLFxuICAgIFwic2F2aW5nXCIsXG4gICAgXCJzY2FuXCIsXG4gICAgXCJzZGZcIixcbiAgICBcInNlY29uZFwiLFxuICAgIFwic2lnblwiLFxuICAgIFwic2luXCIsXG4gICAgXCJzaW5oXCIsXG4gICAgXCJza2V3bmVzc1wiLFxuICAgIFwic291bmRleFwiLFxuICAgIFwic3BlZGlzXCIsXG4gICAgXCJzcXJ0XCIsXG4gICAgXCJzdGRcIixcbiAgICBcInN0ZGVyclwiLFxuICAgIFwic3RmaXBzXCIsXG4gICAgXCJzdG5hbWVcIixcbiAgICBcInN0bmFtZWxcIixcbiAgICBcInN1YnN0clwiLFxuICAgIFwic3VtXCIsXG4gICAgXCJzeW1nZXRcIixcbiAgICBcInN5c2dldFwiLFxuICAgIFwic3lzbXNnXCIsXG4gICAgXCJzeXNwcm9kXCIsXG4gICAgXCJzeXNyY1wiLFxuICAgIFwic3lzdGVtXCIsXG4gICAgXCJ0YW5cIixcbiAgICBcInRhbmhcIixcbiAgICBcInRpbWVcIixcbiAgICBcInRpbWVwYXJ0XCIsXG4gICAgXCJ0aW52XCIsXG4gICAgXCJ0bm9uY3RcIixcbiAgICBcInRvZGF5XCIsXG4gICAgXCJ0cmFuc2xhdGVcIixcbiAgICBcInRyYW53cmRcIixcbiAgICBcInRyaWdhbW1hXCIsXG4gICAgXCJ0cmltXCIsXG4gICAgXCJ0cmltblwiLFxuICAgIFwidHJ1bmNcIixcbiAgICBcInVuaWZvcm1cIixcbiAgICBcInVwY2FzZVwiLFxuICAgIFwidXNzXCIsXG4gICAgXCJ2YXJcIixcbiAgICBcInZhcmZtdFwiLFxuICAgIFwidmFyaW5mbXRcIixcbiAgICBcInZhcmxhYmVsXCIsXG4gICAgXCJ2YXJsZW5cIixcbiAgICBcInZhcm5hbWVcIixcbiAgICBcInZhcm51bVwiLFxuICAgIFwidmFycmF5XCIsXG4gICAgXCJ2YXJyYXl4XCIsXG4gICAgXCJ2YXJ0eXBlXCIsXG4gICAgXCJ2ZXJpZnlcIixcbiAgICBcInZmb3JtYXRcIixcbiAgICBcInZmb3JtYXRkXCIsXG4gICAgXCJ2Zm9ybWF0ZHhcIixcbiAgICBcInZmb3JtYXRuXCIsXG4gICAgXCJ2Zm9ybWF0bnhcIixcbiAgICBcInZmb3JtYXR3XCIsXG4gICAgXCJ2Zm9ybWF0d3hcIixcbiAgICBcInZmb3JtYXR4XCIsXG4gICAgXCJ2aW5hcnJheVwiLFxuICAgIFwidmluYXJyYXl4XCIsXG4gICAgXCJ2aW5mb3JtYXRcIixcbiAgICBcInZpbmZvcm1hdGRcIixcbiAgICBcInZpbmZvcm1hdGR4XCIsXG4gICAgXCJ2aW5mb3JtYXRuXCIsXG4gICAgXCJ2aW5mb3JtYXRueFwiLFxuICAgIFwidmluZm9ybWF0d1wiLFxuICAgIFwidmluZm9ybWF0d3hcIixcbiAgICBcInZpbmZvcm1hdHhcIixcbiAgICBcInZsYWJlbFwiLFxuICAgIFwidmxhYmVseFwiLFxuICAgIFwidmxlbmd0aFwiLFxuICAgIFwidmxlbmd0aHhcIixcbiAgICBcInZuYW1lXCIsXG4gICAgXCJ2bmFtZXhcIixcbiAgICBcInZ0eXBlXCIsXG4gICAgXCJ2dHlwZXhcIixcbiAgICBcIndlZWtkYXlcIixcbiAgICBcInllYXJcIixcbiAgICBcInl5cVwiLFxuICAgIFwiemlwZmlwc1wiLFxuICAgIFwiemlwbmFtZVwiLFxuICAgIFwiemlwbmFtZWxcIixcbiAgICBcInppcHN0YXRlXCJcbiAgXTtcblxuICAvLyBCdWlsdC1pbiBtYWNybyBmdW5jdGlvbnNcbiAgY29uc3QgTUFDUk9fRlVOQ1RJT05TID0gW1xuICAgIFwiYnF1b3RlXCIsXG4gICAgXCJucmJxdW90ZVwiLFxuICAgIFwiY21wcmVzXCIsXG4gICAgXCJxY21wcmVzXCIsXG4gICAgXCJjb21wc3RvclwiLFxuICAgIFwiZGF0YXR5cFwiLFxuICAgIFwiZGlzcGxheVwiLFxuICAgIFwiZG9cIixcbiAgICBcImVsc2VcIixcbiAgICBcImVuZFwiLFxuICAgIFwiZXZhbFwiLFxuICAgIFwiZ2xvYmFsXCIsXG4gICAgXCJnb3RvXCIsXG4gICAgXCJpZlwiLFxuICAgIFwiaW5kZXhcIixcbiAgICBcImlucHV0XCIsXG4gICAgXCJrZXlkZWZcIixcbiAgICBcImxhYmVsXCIsXG4gICAgXCJsZWZ0XCIsXG4gICAgXCJsZW5ndGhcIixcbiAgICBcImxldFwiLFxuICAgIFwibG9jYWxcIixcbiAgICBcImxvd2Nhc2VcIixcbiAgICBcIm1hY3JvXCIsXG4gICAgXCJtZW5kXCIsXG4gICAgXCJucmJxdW90ZVwiLFxuICAgIFwibnJxdW90ZVwiLFxuICAgIFwibnJzdHJcIixcbiAgICBcInB1dFwiLFxuICAgIFwicWNtcHJlc1wiLFxuICAgIFwicWxlZnRcIixcbiAgICBcInFsb3djYXNlXCIsXG4gICAgXCJxc2NhblwiLFxuICAgIFwicXN1YnN0clwiLFxuICAgIFwicXN5c2Z1bmNcIixcbiAgICBcInF0cmltXCIsXG4gICAgXCJxdW90ZVwiLFxuICAgIFwicXVwY2FzZVwiLFxuICAgIFwic2NhblwiLFxuICAgIFwic3RyXCIsXG4gICAgXCJzdWJzdHJcIixcbiAgICBcInN1cGVycVwiLFxuICAgIFwic3lzY2FsbFwiLFxuICAgIFwic3lzZXZhbGZcIixcbiAgICBcInN5c2V4ZWNcIixcbiAgICBcInN5c2Z1bmNcIixcbiAgICBcInN5c2dldFwiLFxuICAgIFwic3lzbHB1dFwiLFxuICAgIFwic3lzcHJvZFwiLFxuICAgIFwic3lzcmNcIixcbiAgICBcInN5c3JwdXRcIixcbiAgICBcInRoZW5cIixcbiAgICBcInRvXCIsXG4gICAgXCJ0cmltXCIsXG4gICAgXCJ1bnF1b3RlXCIsXG4gICAgXCJ1bnRpbFwiLFxuICAgIFwidXBjYXNlXCIsXG4gICAgXCJ2ZXJpZnlcIixcbiAgICBcIndoaWxlXCIsXG4gICAgXCJ3aW5kb3dcIlxuICBdO1xuXG4gIGNvbnN0IExJVEVSQUxTID0gW1xuICAgIFwibnVsbFwiLFxuICAgIFwibWlzc2luZ1wiLFxuICAgIFwiX2FsbF9cIixcbiAgICBcIl9hdXRvbWF0aWNfXCIsXG4gICAgXCJfY2hhcmFjdGVyX1wiLFxuICAgIFwiX2luZmlsZV9cIixcbiAgICBcIl9uX1wiLFxuICAgIFwiX25hbWVfXCIsXG4gICAgXCJfbnVsbF9cIixcbiAgICBcIl9udW1lcmljX1wiLFxuICAgIFwiX3VzZXJfXCIsXG4gICAgXCJfd2Vib3V0X1wiXG4gIF07XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnU0FTJyxcbiAgICBjYXNlX2luc2Vuc2l0aXZlOiB0cnVlLFxuICAgIGtleXdvcmRzOiB7XG4gICAgICBsaXRlcmFsOiBMSVRFUkFMUyxcbiAgICAgIGtleXdvcmQ6IFNBU19LRVlXT1JEU1xuICAgIH0sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgLy8gRGlzdGluY3QgaGlnaGxpZ2h0IGZvciBwcm9jIDxwcm9jPiwgZGF0YSwgcnVuLCBxdWl0XG4gICAgICAgIGNsYXNzTmFtZTogJ2tleXdvcmQnLFxuICAgICAgICBiZWdpbjogL15cXHMqKHByb2MgW1xcd1xcZF9dK3xkYXRhfHJ1bnxxdWl0KVtcXHM7XS9cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIC8vIE1hY3JvIHZhcmlhYmxlc1xuICAgICAgICBjbGFzc05hbWU6ICd2YXJpYWJsZScsXG4gICAgICAgIGJlZ2luOiAvJlthLXpBLVpfJl1bYS16QS1aMC05X10qXFwuPy9cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiBbXG4gICAgICAgICAgL15cXHMqLyxcbiAgICAgICAgICAvZGF0YWxpbmVzO3xjYXJkczsvLFxuICAgICAgICAgIC8oPzouKlxcbikrLyxcbiAgICAgICAgICAvXlxccyo7XFxzKiQvXG4gICAgICAgIF0sXG4gICAgICAgIGNsYXNzTmFtZToge1xuICAgICAgICAgIDI6IFwia2V5d29yZFwiLFxuICAgICAgICAgIDM6IFwic3RyaW5nXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IFtcbiAgICAgICAgICAvJW1lbmR8JW1hY3JvLyxcbiAgICAgICAgICAvXFxzKy8sXG4gICAgICAgICAgL1thLXpBLVpfJl1bYS16QS1aMC05X10qL1xuICAgICAgICBdLFxuICAgICAgICBjbGFzc05hbWU6IHtcbiAgICAgICAgICAxOiBcImJ1aWx0X2luXCIsXG4gICAgICAgICAgMzogXCJ0aXRsZS5mdW5jdGlvblwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7IC8vIEJ1aWx0LWluIG1hY3JvIHZhcmlhYmxlc1xuICAgICAgICBjbGFzc05hbWU6ICdidWlsdF9pbicsXG4gICAgICAgIGJlZ2luOiAnJScgKyByZWdleC5laXRoZXIoLi4uTUFDUk9fRlVOQ1RJT05TKVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgLy8gVXNlci1kZWZpbmVkIG1hY3JvIGZ1bmN0aW9uc1xuICAgICAgICBjbGFzc05hbWU6ICd0aXRsZS5mdW5jdGlvbicsXG4gICAgICAgIGJlZ2luOiAvJVthLXpBLVpfXVthLXpBLVpfMC05XSovXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAvLyBUT0RPOiB0aGlzIGlzIG1vc3QgbGlrZWx5IGFuIGluY29ycmVjdCBjbGFzc2lmaWNhdGlvblxuICAgICAgICAvLyBidWlsdF9pbiBtYXkgbmVlZCBtb3JlIG51YW5jZVxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vaGlnaGxpZ2h0anMvaGlnaGxpZ2h0LmpzL2lzc3Vlcy8yNTIxXG4gICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgICBiZWdpbjogcmVnZXguZWl0aGVyKC4uLkZVTkNUSU9OUykgKyAnKD89XFxcXCgpJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICBobGpzLkFQT1NfU1RSSU5HX01PREUsXG4gICAgICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgaGxqcy5DT01NRU5UKCdcXFxcKicsICc7JyksXG4gICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFXG4gICAgXVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNhcztcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1400\n')},1431:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('// ESM COMPAT FLAG\n__webpack_require__.r(__webpack_exports__);\n\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n loadStyleFeatures: () => (/* binding */ loadStyleFeatures),\n renderCodeblocks$: () => (/* binding */ renderCodeblocks$),\n renderTabs$: () => (/* binding */ renderTabs$)\n});\n\n// EXTERNAL MODULE: ./src/settings/filesystem.ts\nvar filesystem = __webpack_require__(8079);\n// EXTERNAL MODULE: ./src/utilities/callbag.ts + 17 modules\nvar callbag = __webpack_require__(200);\n// EXTERNAL MODULE: ./src/core/entry.ts\nvar entry = __webpack_require__(2392);\n;// ./src/rendering/style-tools.ts\n\n\nconst settingTriggers = new Proxy({}, {\n get: (_, key) => filesystem.settingChanges.listen(key)\n});\nconst globalStyle = (() => {\n const styleEl = document.head.createEl("style");\n return { add, registerStyleElement };\n function add(trigger_s, getStyleText, after) {\n const section = new Text(getStyleText());\n styleEl.append(section);\n const updateSection = () => {\n section.textContent = getStyleText();\n after == null ? void 0 : after();\n };\n Array.isArray(trigger_s) ? trigger_s.forEach((trigger) => trigger(updateSection)) : trigger_s(updateSection);\n }\n function registerStyleElement() {\n entry.plugin.register(() => styleEl.remove());\n }\n})();\n\n;// ./src/rendering/style-features.ts\nvar __async = (__this, __arguments, generator) => {\n return new Promise((resolve, reject) => {\n var fulfilled = (value) => {\n try {\n step(generator.next(value));\n } catch (e) {\n reject(e);\n }\n };\n var rejected = (value) => {\n try {\n step(generator.throw(value));\n } catch (e) {\n reject(e);\n }\n };\n var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);\n step((generator = generator.apply(__this, __arguments)).next());\n });\n};\n\n\n\nconst { source: renderCodeblocks$, push: renderCodeblocks } = callbag/* default.subject */.Ay.subject();\nconst { source: renderTabs$, push: renderTabs } = callbag/* default.subject */.Ay.subject();\n\nconst renderAll = () => {\n renderTabs();\n renderCodeblocks();\n};\nfunction loadStyleFeatures() {\n globalStyle.registerStyleElement();\n lineThickness();\n lineHeight();\n}\nfunction lineThickness() {\n return __async(this, null, function* () {\n globalStyle.add(settingTriggers.defaultThickness, () => `\n .markmap path.markmap-link,\n .markmap g.markmap-node line {\n stroke-width: ${filesystem.globalSettings.defaultThickness} }`);\n globalStyle.add(settingTriggers.depth1Thickness, () => `\n .markmap g[data-depth="0"].markmap-node line {\n stroke-width: ${filesystem.globalSettings.depth1Thickness} }`);\n globalStyle.add(settingTriggers.depth2Thickness, () => `\n .markmap path.markmap-link[data-depth="1"],\n .markmap g.markmap-node[data-depth="1"] line {\n stroke-width: ${filesystem.globalSettings.depth2Thickness} }`);\n globalStyle.add(settingTriggers.depth3Thickness, () => `\n .markmap path.markmap-link[data-depth="2"],\n .markmap g.markmap-node[data-depth="2"] line {\n stroke-width: ${filesystem.globalSettings.depth3Thickness} }`);\n });\n}\nfunction lineHeight() {\n return __async(this, null, function* () {\n globalStyle.add(settingTriggers.lineHeight, () => `:root { --mm-line-height: ${filesystem.globalSettings.lineHeight} }`);\n });\n}\nfilesystem.settingChanges.listen("coloring", renderAll);\nfilesystem.settingChanges.listen("defaultColor", renderAll);\nfilesystem.settingChanges.listen("depth1Color", renderAll);\nfilesystem.settingChanges.listen("depth2Color", renderAll);\nfilesystem.settingChanges.listen("depth3Color", renderAll);\nfilesystem.settingChanges.listen("colorFreezeLevel", renderAll);\nfilesystem.settingChanges.listen("animationDuration", renderAll);\nfilesystem.settingChanges.listen("initialExpandLevel", renderAll);\nfilesystem.settingChanges.listen("maxWidth", renderAll);\nfilesystem.settingChanges.listen("nodeMinHeight", renderAll);\nfilesystem.settingChanges.listen("paddingX", renderAll);\nfilesystem.settingChanges.listen("spacingHorizontal", renderAll);\nfilesystem.settingChanges.listen("spacingVertical", renderAll);\nfilesystem.settingChanges.listen("titleAsRootNode", renderTabs);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTQzMS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUErQztBQUN4QjtBQUloQixNQUFNLGtCQUFrQixJQUFJLE1BQTZDLENBQUMsR0FBRztBQUFBLEVBQ2xGLEtBQUssQ0FBQyxHQUFHLFFBQThCLHlCQUFjLENBQUMsT0FBTyxHQUFHO0FBQ2xFLENBQUM7QUFFTSxNQUFNLGVBQWUsTUFBTTtBQUNoQyxRQUFNLFVBQVUsU0FBUyxLQUFLLFNBQVMsT0FBTztBQUU5QyxTQUFPLEVBQUUsS0FBSyxxQkFBcUI7QUFDbkMsV0FBUyxJQUFJLFdBQWdDLGNBQTRCLE9BQW9CO0FBQzNGLFVBQU0sVUFBVSxJQUFJLEtBQUssYUFBYSxDQUFDO0FBQ3ZDLFlBQVEsT0FBTyxPQUFPO0FBQ3RCLFVBQU0sZ0JBQWdCLE1BQU07QUFDMUIsY0FBUSxjQUFjLGFBQWE7QUFDbkM7QUFBQSxJQUNGO0FBQ0EsVUFBTSxRQUFRLFNBQVMsSUFDbkIsVUFBVSxRQUFRLGFBQVcsUUFBUSxhQUFhLENBQUMsSUFDbkQsVUFBVSxhQUFhO0FBQUEsRUFDN0I7QUFFQSxXQUFTLHVCQUF1QjtBQUM5QixnQkFBTSxDQUFDLFNBQVMsTUFBTSxRQUFRLE9BQU8sQ0FBQztBQUFBLEVBQ3hDO0FBQ0YsR0FBRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUM1QjRDO0FBQzNCO0FBQzhCO0FBR2xELE1BQU0sRUFBRSxRQUFRLG1CQUFtQixNQUFNLGlCQUFpQixJQUFJLHVDQUFlLENBQU87QUFDcEYsTUFBTSxFQUFFLFFBQVEsYUFBYSxNQUFNLFdBQVcsSUFBSSx1Q0FBZSxDQUFPO0FBQzVDO0FBQzVCLE1BQU0sWUFBWSxNQUFNO0FBQUUsYUFBVztBQUFHLG1CQUFpQjtBQUFFO0FBRXBELFNBQVMsb0JBQW9CO0FBQ2xDLGFBQVcsQ0FBQyxxQkFBcUI7QUFDakMsZ0JBQWM7QUFDZCxhQUFXO0FBQ2I7QUFFQSxTQUFlLGdCQUFnQjtBQUFBO0FBQzdCLGVBQVcsQ0FBQyxJQUFJLGVBQUMsQ0FBQyxrQkFBa0IsTUFBTTtBQUFBO0FBQUE7QUFBQSxzQkFHdEIseUJBQWMsQ0FBQyxnQkFBZ0IsSUFBSTtBQUV2RCxlQUFXLENBQUMsSUFBSSxlQUFDLENBQUMsaUJBQWlCLE1BQU07QUFBQTtBQUFBLHNCQUVyQix5QkFBYyxDQUFDLGVBQWUsSUFBSTtBQUV0RCxlQUFXLENBQUMsSUFBSSxlQUFDLENBQUMsaUJBQWlCLE1BQU07QUFBQTtBQUFBO0FBQUEsc0JBR3JCLHlCQUFjLENBQUMsZUFBZSxJQUFJO0FBRXRELGVBQVcsQ0FBQyxJQUFJLGVBQUMsQ0FBQyxpQkFBaUIsTUFBTTtBQUFBO0FBQUE7QUFBQSxzQkFHckIseUJBQWMsQ0FBQyxlQUFlLElBQUk7QUFBQSxFQUN4RDtBQUFBO0FBRUEsU0FBZSxhQUFhO0FBQUE7QUFDMUIsZUFBVyxDQUFDLElBQUksZUFBQyxDQUFDLFlBQVksTUFBTSw2QkFBNkIseUJBQWMsQ0FBQyxVQUFVLElBQUk7QUFBQSxFQUNoRztBQUFBO0FBSUEseUJBQWMsQ0FBQyxPQUFPLFlBQVksU0FBUztBQUMzQyx5QkFBYyxDQUFDLE9BQU8sZ0JBQWdCLFNBQVM7QUFDL0MseUJBQWMsQ0FBQyxPQUFPLGVBQWUsU0FBUztBQUM5Qyx5QkFBYyxDQUFDLE9BQU8sZUFBZSxTQUFTO0FBQzlDLHlCQUFjLENBQUMsT0FBTyxlQUFlLFNBQVM7QUFDOUMseUJBQWMsQ0FBQyxPQUFPLG9CQUFvQixTQUFTO0FBR25ELHlCQUFjLENBQUMsT0FBTyxxQkFBcUIsU0FBUztBQUNwRCx5QkFBYyxDQUFDLE9BQU8sc0JBQXNCLFNBQVM7QUFDckQseUJBQWMsQ0FBQyxPQUFPLFlBQVksU0FBUztBQUMzQyx5QkFBYyxDQUFDLE9BQU8saUJBQWlCLFNBQVM7QUFDaEQseUJBQWMsQ0FBQyxPQUFPLFlBQVksU0FBUztBQUMzQyx5QkFBYyxDQUFDLE9BQU8scUJBQXFCLFNBQVM7QUFDcEQseUJBQWMsQ0FBQyxPQUFPLG1CQUFtQixTQUFTO0FBQ2xELHlCQUFjLENBQUMsT0FBTyxtQkFBbUIsVUFBVSIsInNvdXJjZXMiOlsid2VicGFjazovL29ic2lkaWFuLW1pbmRtYXAtbmV4dGdlbi8uL3NyYy9yZW5kZXJpbmcvc3R5bGUtdG9vbHMudHM/NjAzYSIsIndlYnBhY2s6Ly9vYnNpZGlhbi1taW5kbWFwLW5leHRnZW4vLi9zcmMvcmVuZGVyaW5nL3N0eWxlLWZlYXR1cmVzLnRzP2NhNmIiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgR2xvYmFsU2V0dGluZ3MsIHNldHRpbmdDaGFuZ2VzIH0gZnJvbSAnc3JjL3NldHRpbmdzL2ZpbGVzeXN0ZW0nXG5pbXBvcnQgeyBwbHVnaW4gfSBmcm9tICdzcmMvY29yZS9lbnRyeSdcblxuXG5leHBvcnQgdHlwZSBUcmlnZ2VyID0gKG5leHQ6ICgpID0+IHZvaWQpID0+IHZvaWRcbmV4cG9ydCBjb25zdCBzZXR0aW5nVHJpZ2dlcnMgPSBuZXcgUHJveHkoPFJlY29yZDxrZXlvZiBHbG9iYWxTZXR0aW5ncywgVHJpZ2dlcj4+e30sIHtcbiAgZ2V0OiAoXywga2V5OiBrZXlvZiBHbG9iYWxTZXR0aW5ncykgPT4gc2V0dGluZ0NoYW5nZXMubGlzdGVuKGtleSlcbn0pXG5cbmV4cG9ydCBjb25zdCBnbG9iYWxTdHlsZSA9ICgoKSA9PiB7XG4gIGNvbnN0IHN0eWxlRWwgPSBkb2N1bWVudC5oZWFkLmNyZWF0ZUVsKCdzdHlsZScpXG5cbiAgcmV0dXJuIHsgYWRkLCByZWdpc3RlclN0eWxlRWxlbWVudCB9XG4gIGZ1bmN0aW9uIGFkZCh0cmlnZ2VyX3M6IFRyaWdnZXIgfCBUcmlnZ2VyW10sIGdldFN0eWxlVGV4dDogKCkgPT4gc3RyaW5nLCBhZnRlcj86ICgpID0+IHZvaWQpIHtcbiAgICBjb25zdCBzZWN0aW9uID0gbmV3IFRleHQoZ2V0U3R5bGVUZXh0KCkpXG4gICAgc3R5bGVFbC5hcHBlbmQoc2VjdGlvbilcbiAgICBjb25zdCB1cGRhdGVTZWN0aW9uID0gKCkgPT4ge1xuICAgICAgc2VjdGlvbi50ZXh0Q29udGVudCA9IGdldFN0eWxlVGV4dCgpXG4gICAgICBhZnRlcj8uKClcbiAgICB9XG4gICAgQXJyYXkuaXNBcnJheSh0cmlnZ2VyX3MpXG4gICAgICA/IHRyaWdnZXJfcy5mb3JFYWNoKHRyaWdnZXIgPT4gdHJpZ2dlcih1cGRhdGVTZWN0aW9uKSlcbiAgICAgIDogdHJpZ2dlcl9zKHVwZGF0ZVNlY3Rpb24pXG4gIH1cblxuICBmdW5jdGlvbiByZWdpc3RlclN0eWxlRWxlbWVudCgpIHtcbiAgICBwbHVnaW4ucmVnaXN0ZXIoKCkgPT4gc3R5bGVFbC5yZW1vdmUoKSlcbiAgfVxufSkoKVxuIiwiaW1wb3J0IHsgZ2xvYmFsU2V0dGluZ3MsIHNldHRpbmdDaGFuZ2VzIH0gZnJvbSAnc3JjL3NldHRpbmdzL2ZpbGVzeXN0ZW0nXG5pbXBvcnQgQ2FsbGJhZyBmcm9tICdzcmMvdXRpbGl0aWVzL2NhbGxiYWcnXG5pbXBvcnQgeyBnbG9iYWxTdHlsZSwgc2V0dGluZ1RyaWdnZXJzIGFzIHQgfSBmcm9tICcuL3N0eWxlLXRvb2xzJ1xuXG5cbmNvbnN0IHsgc291cmNlOiByZW5kZXJDb2RlYmxvY2tzJCwgcHVzaDogcmVuZGVyQ29kZWJsb2NrcyB9ID0gQ2FsbGJhZy5zdWJqZWN0PHZvaWQ+KClcbmNvbnN0IHsgc291cmNlOiByZW5kZXJUYWJzJCwgcHVzaDogcmVuZGVyVGFicyB9ID0gQ2FsbGJhZy5zdWJqZWN0PHZvaWQ+KClcbmV4cG9ydCB7IHJlbmRlckNvZGVibG9ja3MkLCByZW5kZXJUYWJzJCB9XG5jb25zdCByZW5kZXJBbGwgPSAoKSA9PiB7IHJlbmRlclRhYnMoKTsgcmVuZGVyQ29kZWJsb2NrcygpIH1cblxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRTdHlsZUZlYXR1cmVzKCkge1xuICBnbG9iYWxTdHlsZS5yZWdpc3RlclN0eWxlRWxlbWVudCgpXG4gIGxpbmVUaGlja25lc3MoKVxuICBsaW5lSGVpZ2h0KClcbn1cblxuYXN5bmMgZnVuY3Rpb24gbGluZVRoaWNrbmVzcygpIHtcbiAgZ2xvYmFsU3R5bGUuYWRkKHQuZGVmYXVsdFRoaWNrbmVzcywgKCkgPT4gYFxuICAgIC5tYXJrbWFwIHBhdGgubWFya21hcC1saW5rLFxuICAgIC5tYXJrbWFwIGcubWFya21hcC1ub2RlIGxpbmUge1xuICAgICAgc3Ryb2tlLXdpZHRoOiAke2dsb2JhbFNldHRpbmdzLmRlZmF1bHRUaGlja25lc3N9IH1gKVxuXG4gIGdsb2JhbFN0eWxlLmFkZCh0LmRlcHRoMVRoaWNrbmVzcywgKCkgPT4gYFxuICAgIC5tYXJrbWFwIGdbZGF0YS1kZXB0aD1cIjBcIl0ubWFya21hcC1ub2RlIGxpbmUge1xuICAgICAgc3Ryb2tlLXdpZHRoOiAke2dsb2JhbFNldHRpbmdzLmRlcHRoMVRoaWNrbmVzc30gfWApXG5cbiAgZ2xvYmFsU3R5bGUuYWRkKHQuZGVwdGgyVGhpY2tuZXNzLCAoKSA9PiBgXG4gICAgLm1hcmttYXAgcGF0aC5tYXJrbWFwLWxpbmtbZGF0YS1kZXB0aD1cIjFcIl0sXG4gICAgLm1hcmttYXAgICAgZy5tYXJrbWFwLW5vZGVbZGF0YS1kZXB0aD1cIjFcIl0gbGluZSB7XG4gICAgICBzdHJva2Utd2lkdGg6ICR7Z2xvYmFsU2V0dGluZ3MuZGVwdGgyVGhpY2tuZXNzfSB9YClcblxuICBnbG9iYWxTdHlsZS5hZGQodC5kZXB0aDNUaGlja25lc3MsICgpID0+IGBcbiAgICAubWFya21hcCBwYXRoLm1hcmttYXAtbGlua1tkYXRhLWRlcHRoPVwiMlwiXSxcbiAgICAubWFya21hcCAgICBnLm1hcmttYXAtbm9kZVtkYXRhLWRlcHRoPVwiMlwiXSBsaW5lIHtcbiAgICAgIHN0cm9rZS13aWR0aDogJHtnbG9iYWxTZXR0aW5ncy5kZXB0aDNUaGlja25lc3N9IH1gKVxufVxuXG5hc3luYyBmdW5jdGlvbiBsaW5lSGVpZ2h0KCkge1xuICBnbG9iYWxTdHlsZS5hZGQodC5saW5lSGVpZ2h0LCAoKSA9PiBgOnJvb3QgeyAtLW1tLWxpbmUtaGVpZ2h0OiAke2dsb2JhbFNldHRpbmdzLmxpbmVIZWlnaHR9IH1gKVxufVxuXG5cbi8vIENvbG9yIHNldHRpbmcgdXBkYXRlc1xuc2V0dGluZ0NoYW5nZXMubGlzdGVuKCdjb2xvcmluZycsIHJlbmRlckFsbClcbnNldHRpbmdDaGFuZ2VzLmxpc3RlbignZGVmYXVsdENvbG9yJywgcmVuZGVyQWxsKVxuc2V0dGluZ0NoYW5nZXMubGlzdGVuKCdkZXB0aDFDb2xvcicsIHJlbmRlckFsbClcbnNldHRpbmdDaGFuZ2VzLmxpc3RlbignZGVwdGgyQ29sb3InLCByZW5kZXJBbGwpXG5zZXR0aW5nQ2hhbmdlcy5saXN0ZW4oJ2RlcHRoM0NvbG9yJywgcmVuZGVyQWxsKVxuc2V0dGluZ0NoYW5nZXMubGlzdGVuKCdjb2xvckZyZWV6ZUxldmVsJywgcmVuZGVyQWxsKVxuLy9cblxuc2V0dGluZ0NoYW5nZXMubGlzdGVuKCdhbmltYXRpb25EdXJhdGlvbicsIHJlbmRlckFsbClcbnNldHRpbmdDaGFuZ2VzLmxpc3RlbignaW5pdGlhbEV4cGFuZExldmVsJywgcmVuZGVyQWxsKVxuc2V0dGluZ0NoYW5nZXMubGlzdGVuKCdtYXhXaWR0aCcsIHJlbmRlckFsbClcbnNldHRpbmdDaGFuZ2VzLmxpc3Rlbignbm9kZU1pbkhlaWdodCcsIHJlbmRlckFsbClcbnNldHRpbmdDaGFuZ2VzLmxpc3RlbigncGFkZGluZ1gnLCByZW5kZXJBbGwpXG5zZXR0aW5nQ2hhbmdlcy5saXN0ZW4oJ3NwYWNpbmdIb3Jpem9udGFsJywgcmVuZGVyQWxsKVxuc2V0dGluZ0NoYW5nZXMubGlzdGVuKCdzcGFjaW5nVmVydGljYWwnLCByZW5kZXJBbGwpXG5zZXR0aW5nQ2hhbmdlcy5saXN0ZW4oJ3RpdGxlQXNSb290Tm9kZScsIHJlbmRlclRhYnMpXG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///1431\n')},1518:module=>{eval('/*\nLanguage: Processing\nDescription: Processing is a flexible software sketchbook and a language for learning how to code within the context of the visual arts.\nAuthor: Erik Paluka \nWebsite: https://processing.org\nCategory: graphics\n*/\n\nfunction processing(hljs) {\n const regex = hljs.regex;\n const BUILT_INS = [\n "displayHeight",\n "displayWidth",\n "mouseY",\n "mouseX",\n "mousePressed",\n "pmouseX",\n "pmouseY",\n "key",\n "keyCode",\n "pixels",\n "focused",\n "frameCount",\n "frameRate",\n "height",\n "width",\n "size",\n "createGraphics",\n "beginDraw",\n "createShape",\n "loadShape",\n "PShape",\n "arc",\n "ellipse",\n "line",\n "point",\n "quad",\n "rect",\n "triangle",\n "bezier",\n "bezierDetail",\n "bezierPoint",\n "bezierTangent",\n "curve",\n "curveDetail",\n "curvePoint",\n "curveTangent",\n "curveTightness",\n "shape",\n "shapeMode",\n "beginContour",\n "beginShape",\n "bezierVertex",\n "curveVertex",\n "endContour",\n "endShape",\n "quadraticVertex",\n "vertex",\n "ellipseMode",\n "noSmooth",\n "rectMode",\n "smooth",\n "strokeCap",\n "strokeJoin",\n "strokeWeight",\n "mouseClicked",\n "mouseDragged",\n "mouseMoved",\n "mousePressed",\n "mouseReleased",\n "mouseWheel",\n "keyPressed",\n "keyPressedkeyReleased",\n "keyTyped",\n "print",\n "println",\n "save",\n "saveFrame",\n "day",\n "hour",\n "millis",\n "minute",\n "month",\n "second",\n "year",\n "background",\n "clear",\n "colorMode",\n "fill",\n "noFill",\n "noStroke",\n "stroke",\n "alpha",\n "blue",\n "brightness",\n "color",\n "green",\n "hue",\n "lerpColor",\n "red",\n "saturation",\n "modelX",\n "modelY",\n "modelZ",\n "screenX",\n "screenY",\n "screenZ",\n "ambient",\n "emissive",\n "shininess",\n "specular",\n "add",\n "createImage",\n "beginCamera",\n "camera",\n "endCamera",\n "frustum",\n "ortho",\n "perspective",\n "printCamera",\n "printProjection",\n "cursor",\n "frameRate",\n "noCursor",\n "exit",\n "loop",\n "noLoop",\n "popStyle",\n "pushStyle",\n "redraw",\n "binary",\n "boolean",\n "byte",\n "char",\n "float",\n "hex",\n "int",\n "str",\n "unbinary",\n "unhex",\n "join",\n "match",\n "matchAll",\n "nf",\n "nfc",\n "nfp",\n "nfs",\n "split",\n "splitTokens",\n "trim",\n "append",\n "arrayCopy",\n "concat",\n "expand",\n "reverse",\n "shorten",\n "sort",\n "splice",\n "subset",\n "box",\n "sphere",\n "sphereDetail",\n "createInput",\n "createReader",\n "loadBytes",\n "loadJSONArray",\n "loadJSONObject",\n "loadStrings",\n "loadTable",\n "loadXML",\n "open",\n "parseXML",\n "saveTable",\n "selectFolder",\n "selectInput",\n "beginRaw",\n "beginRecord",\n "createOutput",\n "createWriter",\n "endRaw",\n "endRecord",\n "PrintWritersaveBytes",\n "saveJSONArray",\n "saveJSONObject",\n "saveStream",\n "saveStrings",\n "saveXML",\n "selectOutput",\n "popMatrix",\n "printMatrix",\n "pushMatrix",\n "resetMatrix",\n "rotate",\n "rotateX",\n "rotateY",\n "rotateZ",\n "scale",\n "shearX",\n "shearY",\n "translate",\n "ambientLight",\n "directionalLight",\n "lightFalloff",\n "lights",\n "lightSpecular",\n "noLights",\n "normal",\n "pointLight",\n "spotLight",\n "image",\n "imageMode",\n "loadImage",\n "noTint",\n "requestImage",\n "tint",\n "texture",\n "textureMode",\n "textureWrap",\n "blend",\n "copy",\n "filter",\n "get",\n "loadPixels",\n "set",\n "updatePixels",\n "blendMode",\n "loadShader",\n "PShaderresetShader",\n "shader",\n "createFont",\n "loadFont",\n "text",\n "textFont",\n "textAlign",\n "textLeading",\n "textMode",\n "textSize",\n "textWidth",\n "textAscent",\n "textDescent",\n "abs",\n "ceil",\n "constrain",\n "dist",\n "exp",\n "floor",\n "lerp",\n "log",\n "mag",\n "map",\n "max",\n "min",\n "norm",\n "pow",\n "round",\n "sq",\n "sqrt",\n "acos",\n "asin",\n "atan",\n "atan2",\n "cos",\n "degrees",\n "radians",\n "sin",\n "tan",\n "noise",\n "noiseDetail",\n "noiseSeed",\n "random",\n "randomGaussian",\n "randomSeed"\n ];\n const IDENT = hljs.IDENT_RE;\n const FUNC_NAME = { variants: [\n {\n match: regex.concat(regex.either(...BUILT_INS), regex.lookahead(/\\s*\\(/)),\n className: "built_in"\n },\n {\n relevance: 0,\n match: regex.concat(\n /\\b(?!for|if|while)/,\n IDENT, regex.lookahead(/\\s*\\(/)),\n className: "title.function"\n }\n ] };\n const NEW_CLASS = {\n match: [\n /new\\s+/,\n IDENT\n ],\n className: {\n 1: "keyword",\n 2: "class.title"\n }\n };\n const PROPERTY = {\n relevance: 0,\n match: [\n /\\./,\n IDENT\n ],\n className: { 2: "property" }\n };\n const CLASS = {\n variants: [\n { match: [\n /class/,\n /\\s+/,\n IDENT,\n /\\s+/,\n /extends/,\n /\\s+/,\n IDENT\n ] },\n { match: [\n /class/,\n /\\s+/,\n IDENT\n ] }\n ],\n className: {\n 1: "keyword",\n 3: "title.class",\n 5: "keyword",\n 7: "title.class.inherited"\n }\n };\n\n const TYPES = [\n "boolean",\n "byte",\n "char",\n "color",\n "double",\n "float",\n "int",\n "long",\n "short",\n ];\n const CLASSES = [\n "BufferedReader",\n "PVector",\n "PFont",\n "PImage",\n "PGraphics",\n "HashMap",\n "String",\n "Array",\n "FloatDict",\n "ArrayList",\n "FloatList",\n "IntDict",\n "IntList",\n "JSONArray",\n "JSONObject",\n "Object",\n "StringDict",\n "StringList",\n "Table",\n "TableRow",\n "XML"\n ];\n const JAVA_KEYWORDS = [\n "abstract",\n "assert",\n "break",\n "case",\n "catch",\n "const",\n "continue",\n "default",\n "else",\n "enum",\n "final",\n "finally",\n "for",\n "if",\n "import",\n "instanceof",\n "long",\n "native",\n "new",\n "package",\n "private",\n "private",\n "protected",\n "protected",\n "public",\n "public",\n "return",\n "static",\n "strictfp",\n "switch",\n "synchronized",\n "throw",\n "throws",\n "transient",\n "try",\n "void",\n "volatile",\n "while"\n ];\n\n return {\n name: \'Processing\',\n aliases: [ \'pde\' ],\n keywords: {\n keyword: [ ...JAVA_KEYWORDS ],\n literal: \'P2D P3D HALF_PI PI QUARTER_PI TAU TWO_PI null true false\',\n title: \'setup draw\',\n variable: "super this",\n built_in: [\n ...BUILT_INS,\n ...CLASSES\n ],\n type: TYPES\n },\n contains: [\n CLASS,\n NEW_CLASS,\n FUNC_NAME,\n PROPERTY,\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE,\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE,\n hljs.C_NUMBER_MODE\n ]\n };\n}\n\nmodule.exports = processing;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTUxOC5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL29ic2lkaWFuLW1pbmRtYXAtbmV4dGdlbi8uL25vZGVfbW9kdWxlcy8ucG5wbS9oaWdobGlnaHQuanNAMTEuMTEuMS9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvcHJvY2Vzc2luZy5qcz9kYTU4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qXG5MYW5ndWFnZTogUHJvY2Vzc2luZ1xuRGVzY3JpcHRpb246IFByb2Nlc3NpbmcgaXMgYSBmbGV4aWJsZSBzb2Z0d2FyZSBza2V0Y2hib29rIGFuZCBhIGxhbmd1YWdlIGZvciBsZWFybmluZyBob3cgdG8gY29kZSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdGhlIHZpc3VhbCBhcnRzLlxuQXV0aG9yOiBFcmlrIFBhbHVrYSA8ZXJpay5wYWx1a2FAZ21haWwuY29tPlxuV2Vic2l0ZTogaHR0cHM6Ly9wcm9jZXNzaW5nLm9yZ1xuQ2F0ZWdvcnk6IGdyYXBoaWNzXG4qL1xuXG5mdW5jdGlvbiBwcm9jZXNzaW5nKGhsanMpIHtcbiAgY29uc3QgcmVnZXggPSBobGpzLnJlZ2V4O1xuICBjb25zdCBCVUlMVF9JTlMgPSBbXG4gICAgXCJkaXNwbGF5SGVpZ2h0XCIsXG4gICAgXCJkaXNwbGF5V2lkdGhcIixcbiAgICBcIm1vdXNlWVwiLFxuICAgIFwibW91c2VYXCIsXG4gICAgXCJtb3VzZVByZXNzZWRcIixcbiAgICBcInBtb3VzZVhcIixcbiAgICBcInBtb3VzZVlcIixcbiAgICBcImtleVwiLFxuICAgIFwia2V5Q29kZVwiLFxuICAgIFwicGl4ZWxzXCIsXG4gICAgXCJmb2N1c2VkXCIsXG4gICAgXCJmcmFtZUNvdW50XCIsXG4gICAgXCJmcmFtZVJhdGVcIixcbiAgICBcImhlaWdodFwiLFxuICAgIFwid2lkdGhcIixcbiAgICBcInNpemVcIixcbiAgICBcImNyZWF0ZUdyYXBoaWNzXCIsXG4gICAgXCJiZWdpbkRyYXdcIixcbiAgICBcImNyZWF0ZVNoYXBlXCIsXG4gICAgXCJsb2FkU2hhcGVcIixcbiAgICBcIlBTaGFwZVwiLFxuICAgIFwiYXJjXCIsXG4gICAgXCJlbGxpcHNlXCIsXG4gICAgXCJsaW5lXCIsXG4gICAgXCJwb2ludFwiLFxuICAgIFwicXVhZFwiLFxuICAgIFwicmVjdFwiLFxuICAgIFwidHJpYW5nbGVcIixcbiAgICBcImJlemllclwiLFxuICAgIFwiYmV6aWVyRGV0YWlsXCIsXG4gICAgXCJiZXppZXJQb2ludFwiLFxuICAgIFwiYmV6aWVyVGFuZ2VudFwiLFxuICAgIFwiY3VydmVcIixcbiAgICBcImN1cnZlRGV0YWlsXCIsXG4gICAgXCJjdXJ2ZVBvaW50XCIsXG4gICAgXCJjdXJ2ZVRhbmdlbnRcIixcbiAgICBcImN1cnZlVGlnaHRuZXNzXCIsXG4gICAgXCJzaGFwZVwiLFxuICAgIFwic2hhcGVNb2RlXCIsXG4gICAgXCJiZWdpbkNvbnRvdXJcIixcbiAgICBcImJlZ2luU2hhcGVcIixcbiAgICBcImJlemllclZlcnRleFwiLFxuICAgIFwiY3VydmVWZXJ0ZXhcIixcbiAgICBcImVuZENvbnRvdXJcIixcbiAgICBcImVuZFNoYXBlXCIsXG4gICAgXCJxdWFkcmF0aWNWZXJ0ZXhcIixcbiAgICBcInZlcnRleFwiLFxuICAgIFwiZWxsaXBzZU1vZGVcIixcbiAgICBcIm5vU21vb3RoXCIsXG4gICAgXCJyZWN0TW9kZVwiLFxuICAgIFwic21vb3RoXCIsXG4gICAgXCJzdHJva2VDYXBcIixcbiAgICBcInN0cm9rZUpvaW5cIixcbiAgICBcInN0cm9rZVdlaWdodFwiLFxuICAgIFwibW91c2VDbGlja2VkXCIsXG4gICAgXCJtb3VzZURyYWdnZWRcIixcbiAgICBcIm1vdXNlTW92ZWRcIixcbiAgICBcIm1vdXNlUHJlc3NlZFwiLFxuICAgIFwibW91c2VSZWxlYXNlZFwiLFxuICAgIFwibW91c2VXaGVlbFwiLFxuICAgIFwia2V5UHJlc3NlZFwiLFxuICAgIFwia2V5UHJlc3NlZGtleVJlbGVhc2VkXCIsXG4gICAgXCJrZXlUeXBlZFwiLFxuICAgIFwicHJpbnRcIixcbiAgICBcInByaW50bG5cIixcbiAgICBcInNhdmVcIixcbiAgICBcInNhdmVGcmFtZVwiLFxuICAgIFwiZGF5XCIsXG4gICAgXCJob3VyXCIsXG4gICAgXCJtaWxsaXNcIixcbiAgICBcIm1pbnV0ZVwiLFxuICAgIFwibW9udGhcIixcbiAgICBcInNlY29uZFwiLFxuICAgIFwieWVhclwiLFxuICAgIFwiYmFja2dyb3VuZFwiLFxuICAgIFwiY2xlYXJcIixcbiAgICBcImNvbG9yTW9kZVwiLFxuICAgIFwiZmlsbFwiLFxuICAgIFwibm9GaWxsXCIsXG4gICAgXCJub1N0cm9rZVwiLFxuICAgIFwic3Ryb2tlXCIsXG4gICAgXCJhbHBoYVwiLFxuICAgIFwiYmx1ZVwiLFxuICAgIFwiYnJpZ2h0bmVzc1wiLFxuICAgIFwiY29sb3JcIixcbiAgICBcImdyZWVuXCIsXG4gICAgXCJodWVcIixcbiAgICBcImxlcnBDb2xvclwiLFxuICAgIFwicmVkXCIsXG4gICAgXCJzYXR1cmF0aW9uXCIsXG4gICAgXCJtb2RlbFhcIixcbiAgICBcIm1vZGVsWVwiLFxuICAgIFwibW9kZWxaXCIsXG4gICAgXCJzY3JlZW5YXCIsXG4gICAgXCJzY3JlZW5ZXCIsXG4gICAgXCJzY3JlZW5aXCIsXG4gICAgXCJhbWJpZW50XCIsXG4gICAgXCJlbWlzc2l2ZVwiLFxuICAgIFwic2hpbmluZXNzXCIsXG4gICAgXCJzcGVjdWxhclwiLFxuICAgIFwiYWRkXCIsXG4gICAgXCJjcmVhdGVJbWFnZVwiLFxuICAgIFwiYmVnaW5DYW1lcmFcIixcbiAgICBcImNhbWVyYVwiLFxuICAgIFwiZW5kQ2FtZXJhXCIsXG4gICAgXCJmcnVzdHVtXCIsXG4gICAgXCJvcnRob1wiLFxuICAgIFwicGVyc3BlY3RpdmVcIixcbiAgICBcInByaW50Q2FtZXJhXCIsXG4gICAgXCJwcmludFByb2plY3Rpb25cIixcbiAgICBcImN1cnNvclwiLFxuICAgIFwiZnJhbWVSYXRlXCIsXG4gICAgXCJub0N1cnNvclwiLFxuICAgIFwiZXhpdFwiLFxuICAgIFwibG9vcFwiLFxuICAgIFwibm9Mb29wXCIsXG4gICAgXCJwb3BTdHlsZVwiLFxuICAgIFwicHVzaFN0eWxlXCIsXG4gICAgXCJyZWRyYXdcIixcbiAgICBcImJpbmFyeVwiLFxuICAgIFwiYm9vbGVhblwiLFxuICAgIFwiYnl0ZVwiLFxuICAgIFwiY2hhclwiLFxuICAgIFwiZmxvYXRcIixcbiAgICBcImhleFwiLFxuICAgIFwiaW50XCIsXG4gICAgXCJzdHJcIixcbiAgICBcInVuYmluYXJ5XCIsXG4gICAgXCJ1bmhleFwiLFxuICAgIFwiam9pblwiLFxuICAgIFwibWF0Y2hcIixcbiAgICBcIm1hdGNoQWxsXCIsXG4gICAgXCJuZlwiLFxuICAgIFwibmZjXCIsXG4gICAgXCJuZnBcIixcbiAgICBcIm5mc1wiLFxuICAgIFwic3BsaXRcIixcbiAgICBcInNwbGl0VG9rZW5zXCIsXG4gICAgXCJ0cmltXCIsXG4gICAgXCJhcHBlbmRcIixcbiAgICBcImFycmF5Q29weVwiLFxuICAgIFwiY29uY2F0XCIsXG4gICAgXCJleHBhbmRcIixcbiAgICBcInJldmVyc2VcIixcbiAgICBcInNob3J0ZW5cIixcbiAgICBcInNvcnRcIixcbiAgICBcInNwbGljZVwiLFxuICAgIFwic3Vic2V0XCIsXG4gICAgXCJib3hcIixcbiAgICBcInNwaGVyZVwiLFxuICAgIFwic3BoZXJlRGV0YWlsXCIsXG4gICAgXCJjcmVhdGVJbnB1dFwiLFxuICAgIFwiY3JlYXRlUmVhZGVyXCIsXG4gICAgXCJsb2FkQnl0ZXNcIixcbiAgICBcImxvYWRKU09OQXJyYXlcIixcbiAgICBcImxvYWRKU09OT2JqZWN0XCIsXG4gICAgXCJsb2FkU3RyaW5nc1wiLFxuICAgIFwibG9hZFRhYmxlXCIsXG4gICAgXCJsb2FkWE1MXCIsXG4gICAgXCJvcGVuXCIsXG4gICAgXCJwYXJzZVhNTFwiLFxuICAgIFwic2F2ZVRhYmxlXCIsXG4gICAgXCJzZWxlY3RGb2xkZXJcIixcbiAgICBcInNlbGVjdElucHV0XCIsXG4gICAgXCJiZWdpblJhd1wiLFxuICAgIFwiYmVnaW5SZWNvcmRcIixcbiAgICBcImNyZWF0ZU91dHB1dFwiLFxuICAgIFwiY3JlYXRlV3JpdGVyXCIsXG4gICAgXCJlbmRSYXdcIixcbiAgICBcImVuZFJlY29yZFwiLFxuICAgIFwiUHJpbnRXcml0ZXJzYXZlQnl0ZXNcIixcbiAgICBcInNhdmVKU09OQXJyYXlcIixcbiAgICBcInNhdmVKU09OT2JqZWN0XCIsXG4gICAgXCJzYXZlU3RyZWFtXCIsXG4gICAgXCJzYXZlU3RyaW5nc1wiLFxuICAgIFwic2F2ZVhNTFwiLFxuICAgIFwic2VsZWN0T3V0cHV0XCIsXG4gICAgXCJwb3BNYXRyaXhcIixcbiAgICBcInByaW50TWF0cml4XCIsXG4gICAgXCJwdXNoTWF0cml4XCIsXG4gICAgXCJyZXNldE1hdHJpeFwiLFxuICAgIFwicm90YXRlXCIsXG4gICAgXCJyb3RhdGVYXCIsXG4gICAgXCJyb3RhdGVZXCIsXG4gICAgXCJyb3RhdGVaXCIsXG4gICAgXCJzY2FsZVwiLFxuICAgIFwic2hlYXJYXCIsXG4gICAgXCJzaGVhcllcIixcbiAgICBcInRyYW5zbGF0ZVwiLFxuICAgIFwiYW1iaWVudExpZ2h0XCIsXG4gICAgXCJkaXJlY3Rpb25hbExpZ2h0XCIsXG4gICAgXCJsaWdodEZhbGxvZmZcIixcbiAgICBcImxpZ2h0c1wiLFxuICAgIFwibGlnaHRTcGVjdWxhclwiLFxuICAgIFwibm9MaWdodHNcIixcbiAgICBcIm5vcm1hbFwiLFxuICAgIFwicG9pbnRMaWdodFwiLFxuICAgIFwic3BvdExpZ2h0XCIsXG4gICAgXCJpbWFnZVwiLFxuICAgIFwiaW1hZ2VNb2RlXCIsXG4gICAgXCJsb2FkSW1hZ2VcIixcbiAgICBcIm5vVGludFwiLFxuICAgIFwicmVxdWVzdEltYWdlXCIsXG4gICAgXCJ0aW50XCIsXG4gICAgXCJ0ZXh0dXJlXCIsXG4gICAgXCJ0ZXh0dXJlTW9kZVwiLFxuICAgIFwidGV4dHVyZVdyYXBcIixcbiAgICBcImJsZW5kXCIsXG4gICAgXCJjb3B5XCIsXG4gICAgXCJmaWx0ZXJcIixcbiAgICBcImdldFwiLFxuICAgIFwibG9hZFBpeGVsc1wiLFxuICAgIFwic2V0XCIsXG4gICAgXCJ1cGRhdGVQaXhlbHNcIixcbiAgICBcImJsZW5kTW9kZVwiLFxuICAgIFwibG9hZFNoYWRlclwiLFxuICAgIFwiUFNoYWRlcnJlc2V0U2hhZGVyXCIsXG4gICAgXCJzaGFkZXJcIixcbiAgICBcImNyZWF0ZUZvbnRcIixcbiAgICBcImxvYWRGb250XCIsXG4gICAgXCJ0ZXh0XCIsXG4gICAgXCJ0ZXh0Rm9udFwiLFxuICAgIFwidGV4dEFsaWduXCIsXG4gICAgXCJ0ZXh0TGVhZGluZ1wiLFxuICAgIFwidGV4dE1vZGVcIixcbiAgICBcInRleHRTaXplXCIsXG4gICAgXCJ0ZXh0V2lkdGhcIixcbiAgICBcInRleHRBc2NlbnRcIixcbiAgICBcInRleHREZXNjZW50XCIsXG4gICAgXCJhYnNcIixcbiAgICBcImNlaWxcIixcbiAgICBcImNvbnN0cmFpblwiLFxuICAgIFwiZGlzdFwiLFxuICAgIFwiZXhwXCIsXG4gICAgXCJmbG9vclwiLFxuICAgIFwibGVycFwiLFxuICAgIFwibG9nXCIsXG4gICAgXCJtYWdcIixcbiAgICBcIm1hcFwiLFxuICAgIFwibWF4XCIsXG4gICAgXCJtaW5cIixcbiAgICBcIm5vcm1cIixcbiAgICBcInBvd1wiLFxuICAgIFwicm91bmRcIixcbiAgICBcInNxXCIsXG4gICAgXCJzcXJ0XCIsXG4gICAgXCJhY29zXCIsXG4gICAgXCJhc2luXCIsXG4gICAgXCJhdGFuXCIsXG4gICAgXCJhdGFuMlwiLFxuICAgIFwiY29zXCIsXG4gICAgXCJkZWdyZWVzXCIsXG4gICAgXCJyYWRpYW5zXCIsXG4gICAgXCJzaW5cIixcbiAgICBcInRhblwiLFxuICAgIFwibm9pc2VcIixcbiAgICBcIm5vaXNlRGV0YWlsXCIsXG4gICAgXCJub2lzZVNlZWRcIixcbiAgICBcInJhbmRvbVwiLFxuICAgIFwicmFuZG9tR2F1c3NpYW5cIixcbiAgICBcInJhbmRvbVNlZWRcIlxuICBdO1xuICBjb25zdCBJREVOVCA9IGhsanMuSURFTlRfUkU7XG4gIGNvbnN0IEZVTkNfTkFNRSA9IHsgdmFyaWFudHM6IFtcbiAgICB7XG4gICAgICBtYXRjaDogcmVnZXguY29uY2F0KHJlZ2V4LmVpdGhlciguLi5CVUlMVF9JTlMpLCByZWdleC5sb29rYWhlYWQoL1xccypcXCgvKSksXG4gICAgICBjbGFzc05hbWU6IFwiYnVpbHRfaW5cIlxuICAgIH0sXG4gICAge1xuICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgbWF0Y2g6IHJlZ2V4LmNvbmNhdChcbiAgICAgICAgL1xcYig/IWZvcnxpZnx3aGlsZSkvLFxuICAgICAgICBJREVOVCwgcmVnZXgubG9va2FoZWFkKC9cXHMqXFwoLykpLFxuICAgICAgY2xhc3NOYW1lOiBcInRpdGxlLmZ1bmN0aW9uXCJcbiAgICB9XG4gIF0gfTtcbiAgY29uc3QgTkVXX0NMQVNTID0ge1xuICAgIG1hdGNoOiBbXG4gICAgICAvbmV3XFxzKy8sXG4gICAgICBJREVOVFxuICAgIF0sXG4gICAgY2xhc3NOYW1lOiB7XG4gICAgICAxOiBcImtleXdvcmRcIixcbiAgICAgIDI6IFwiY2xhc3MudGl0bGVcIlxuICAgIH1cbiAgfTtcbiAgY29uc3QgUFJPUEVSVFkgPSB7XG4gICAgcmVsZXZhbmNlOiAwLFxuICAgIG1hdGNoOiBbXG4gICAgICAvXFwuLyxcbiAgICAgIElERU5UXG4gICAgXSxcbiAgICBjbGFzc05hbWU6IHsgMjogXCJwcm9wZXJ0eVwiIH1cbiAgfTtcbiAgY29uc3QgQ0xBU1MgPSB7XG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHsgbWF0Y2g6IFtcbiAgICAgICAgL2NsYXNzLyxcbiAgICAgICAgL1xccysvLFxuICAgICAgICBJREVOVCxcbiAgICAgICAgL1xccysvLFxuICAgICAgICAvZXh0ZW5kcy8sXG4gICAgICAgIC9cXHMrLyxcbiAgICAgICAgSURFTlRcbiAgICAgIF0gfSxcbiAgICAgIHsgbWF0Y2g6IFtcbiAgICAgICAgL2NsYXNzLyxcbiAgICAgICAgL1xccysvLFxuICAgICAgICBJREVOVFxuICAgICAgXSB9XG4gICAgXSxcbiAgICBjbGFzc05hbWU6IHtcbiAgICAgIDE6IFwia2V5d29yZFwiLFxuICAgICAgMzogXCJ0aXRsZS5jbGFzc1wiLFxuICAgICAgNTogXCJrZXl3b3JkXCIsXG4gICAgICA3OiBcInRpdGxlLmNsYXNzLmluaGVyaXRlZFwiXG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IFRZUEVTID0gW1xuICAgIFwiYm9vbGVhblwiLFxuICAgIFwiYnl0ZVwiLFxuICAgIFwiY2hhclwiLFxuICAgIFwiY29sb3JcIixcbiAgICBcImRvdWJsZVwiLFxuICAgIFwiZmxvYXRcIixcbiAgICBcImludFwiLFxuICAgIFwibG9uZ1wiLFxuICAgIFwic2hvcnRcIixcbiAgXTtcbiAgY29uc3QgQ0xBU1NFUyA9IFtcbiAgICBcIkJ1ZmZlcmVkUmVhZGVyXCIsXG4gICAgXCJQVmVjdG9yXCIsXG4gICAgXCJQRm9udFwiLFxuICAgIFwiUEltYWdlXCIsXG4gICAgXCJQR3JhcGhpY3NcIixcbiAgICBcIkhhc2hNYXBcIixcbiAgICBcIlN0cmluZ1wiLFxuICAgIFwiQXJyYXlcIixcbiAgICBcIkZsb2F0RGljdFwiLFxuICAgIFwiQXJyYXlMaXN0XCIsXG4gICAgXCJGbG9hdExpc3RcIixcbiAgICBcIkludERpY3RcIixcbiAgICBcIkludExpc3RcIixcbiAgICBcIkpTT05BcnJheVwiLFxuICAgIFwiSlNPTk9iamVjdFwiLFxuICAgIFwiT2JqZWN0XCIsXG4gICAgXCJTdHJpbmdEaWN0XCIsXG4gICAgXCJTdHJpbmdMaXN0XCIsXG4gICAgXCJUYWJsZVwiLFxuICAgIFwiVGFibGVSb3dcIixcbiAgICBcIlhNTFwiXG4gIF07XG4gIGNvbnN0IEpBVkFfS0VZV09SRFMgPSBbXG4gICAgXCJhYnN0cmFjdFwiLFxuICAgIFwiYXNzZXJ0XCIsXG4gICAgXCJicmVha1wiLFxuICAgIFwiY2FzZVwiLFxuICAgIFwiY2F0Y2hcIixcbiAgICBcImNvbnN0XCIsXG4gICAgXCJjb250aW51ZVwiLFxuICAgIFwiZGVmYXVsdFwiLFxuICAgIFwiZWxzZVwiLFxuICAgIFwiZW51bVwiLFxuICAgIFwiZmluYWxcIixcbiAgICBcImZpbmFsbHlcIixcbiAgICBcImZvclwiLFxuICAgIFwiaWZcIixcbiAgICBcImltcG9ydFwiLFxuICAgIFwiaW5zdGFuY2VvZlwiLFxuICAgIFwibG9uZ1wiLFxuICAgIFwibmF0aXZlXCIsXG4gICAgXCJuZXdcIixcbiAgICBcInBhY2thZ2VcIixcbiAgICBcInByaXZhdGVcIixcbiAgICBcInByaXZhdGVcIixcbiAgICBcInByb3RlY3RlZFwiLFxuICAgIFwicHJvdGVjdGVkXCIsXG4gICAgXCJwdWJsaWNcIixcbiAgICBcInB1YmxpY1wiLFxuICAgIFwicmV0dXJuXCIsXG4gICAgXCJzdGF0aWNcIixcbiAgICBcInN0cmljdGZwXCIsXG4gICAgXCJzd2l0Y2hcIixcbiAgICBcInN5bmNocm9uaXplZFwiLFxuICAgIFwidGhyb3dcIixcbiAgICBcInRocm93c1wiLFxuICAgIFwidHJhbnNpZW50XCIsXG4gICAgXCJ0cnlcIixcbiAgICBcInZvaWRcIixcbiAgICBcInZvbGF0aWxlXCIsXG4gICAgXCJ3aGlsZVwiXG4gIF07XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnUHJvY2Vzc2luZycsXG4gICAgYWxpYXNlczogWyAncGRlJyBdLFxuICAgIGtleXdvcmRzOiB7XG4gICAgICBrZXl3b3JkOiBbIC4uLkpBVkFfS0VZV09SRFMgXSxcbiAgICAgIGxpdGVyYWw6ICdQMkQgUDNEIEhBTEZfUEkgUEkgUVVBUlRFUl9QSSBUQVUgVFdPX1BJIG51bGwgdHJ1ZSBmYWxzZScsXG4gICAgICB0aXRsZTogJ3NldHVwIGRyYXcnLFxuICAgICAgdmFyaWFibGU6IFwic3VwZXIgdGhpc1wiLFxuICAgICAgYnVpbHRfaW46IFtcbiAgICAgICAgLi4uQlVJTFRfSU5TLFxuICAgICAgICAuLi5DTEFTU0VTXG4gICAgICBdLFxuICAgICAgdHlwZTogVFlQRVNcbiAgICB9LFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBDTEFTUyxcbiAgICAgIE5FV19DTEFTUyxcbiAgICAgIEZVTkNfTkFNRSxcbiAgICAgIFBST1BFUlRZLFxuICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuQVBPU19TVFJJTkdfTU9ERSxcbiAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICBobGpzLkNfTlVNQkVSX01PREVcbiAgICBdXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcHJvY2Vzc2luZztcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1518\n')},1544:module=>{eval("/*\nLanguage: Mercury\nAuthor: mucaho \nDescription: Mercury is a logic/functional programming language which combines the clarity and expressiveness of declarative programming with advanced static analysis and error detection features.\nWebsite: https://www.mercurylang.org\nCategory: functional\n*/\n\nfunction mercury(hljs) {\n const KEYWORDS = {\n keyword:\n 'module use_module import_module include_module end_module initialise '\n + 'mutable initialize finalize finalise interface implementation pred '\n + 'mode func type inst solver any_pred any_func is semidet det nondet '\n + 'multi erroneous failure cc_nondet cc_multi typeclass instance where '\n + 'pragma promise external trace atomic or_else require_complete_switch '\n + 'require_det require_semidet require_multi require_nondet '\n + 'require_cc_multi require_cc_nondet require_erroneous require_failure',\n meta:\n // pragma\n 'inline no_inline type_spec source_file fact_table obsolete memo '\n + 'loop_check minimal_model terminates does_not_terminate '\n + 'check_termination promise_equivalent_clauses '\n // preprocessor\n + 'foreign_proc foreign_decl foreign_code foreign_type '\n + 'foreign_import_module foreign_export_enum foreign_export '\n + 'foreign_enum may_call_mercury will_not_call_mercury thread_safe '\n + 'not_thread_safe maybe_thread_safe promise_pure promise_semipure '\n + 'tabled_for_io local untrailed trailed attach_to_io_state '\n + 'can_pass_as_mercury_type stable will_not_throw_exception '\n + 'may_modify_trail will_not_modify_trail may_duplicate '\n + 'may_not_duplicate affects_liveness does_not_affect_liveness '\n + 'doesnt_affect_liveness no_sharing unknown_sharing sharing',\n built_in:\n 'some all not if then else true fail false try catch catch_any '\n + 'semidet_true semidet_false semidet_fail impure_true impure semipure'\n };\n\n const COMMENT = hljs.COMMENT('%', '$');\n\n const NUMCODE = {\n className: 'number',\n begin: \"0'.\\\\|0[box][0-9a-fA-F]*\"\n };\n\n const ATOM = hljs.inherit(hljs.APOS_STRING_MODE, { relevance: 0 });\n const STRING = hljs.inherit(hljs.QUOTE_STRING_MODE, { relevance: 0 });\n const STRING_FMT = {\n className: 'subst',\n begin: '\\\\\\\\[abfnrtv]\\\\|\\\\\\\\x[0-9a-fA-F]*\\\\\\\\\\\\|%[-+# *.0-9]*[dioxXucsfeEgGp]',\n relevance: 0\n };\n STRING.contains = STRING.contains.slice(); // we need our own copy of contains\n STRING.contains.push(STRING_FMT);\n\n const IMPLICATION = {\n className: 'built_in',\n variants: [\n { begin: '<=>' },\n {\n begin: '<=',\n relevance: 0\n },\n {\n begin: '=>',\n relevance: 0\n },\n { begin: '/\\\\\\\\' },\n { begin: '\\\\\\\\/' }\n ]\n };\n\n const HEAD_BODY_CONJUNCTION = {\n className: 'built_in',\n variants: [\n { begin: ':-\\\\|--\x3e' },\n {\n begin: '=',\n relevance: 0\n }\n ]\n };\n\n return {\n name: 'Mercury',\n aliases: [\n 'm',\n 'moo'\n ],\n keywords: KEYWORDS,\n contains: [\n IMPLICATION,\n HEAD_BODY_CONJUNCTION,\n COMMENT,\n hljs.C_BLOCK_COMMENT_MODE,\n NUMCODE,\n hljs.NUMBER_MODE,\n ATOM,\n STRING,\n { // relevance booster\n begin: /:-/ },\n { // relevance booster\n begin: /\\.$/ }\n ]\n };\n}\n\nmodule.exports = mercury;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTU0NC5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHFEQUFxRCxjQUFjO0FBQ25FLHdEQUF3RCxjQUFjO0FBQ3RFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkM7QUFDN0M7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsUUFBUSxjQUFjO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsUUFBUSxnQkFBZ0I7QUFDeEIsUUFBUTtBQUNSO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsUUFBUSxtQkFBbUI7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSLHFCQUFxQjtBQUNyQixRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9vYnNpZGlhbi1taW5kbWFwLW5leHRnZW4vLi9ub2RlX21vZHVsZXMvLnBucG0vaGlnaGxpZ2h0LmpzQDExLjExLjEvbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL21lcmN1cnkuanM/MWJjYSJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuTGFuZ3VhZ2U6IE1lcmN1cnlcbkF1dGhvcjogbXVjYWhvIDxta3Vja29AZ21haWwuY29tPlxuRGVzY3JpcHRpb246IE1lcmN1cnkgaXMgYSBsb2dpYy9mdW5jdGlvbmFsIHByb2dyYW1taW5nIGxhbmd1YWdlIHdoaWNoIGNvbWJpbmVzIHRoZSBjbGFyaXR5IGFuZCBleHByZXNzaXZlbmVzcyBvZiBkZWNsYXJhdGl2ZSBwcm9ncmFtbWluZyB3aXRoIGFkdmFuY2VkIHN0YXRpYyBhbmFseXNpcyBhbmQgZXJyb3IgZGV0ZWN0aW9uIGZlYXR1cmVzLlxuV2Vic2l0ZTogaHR0cHM6Ly93d3cubWVyY3VyeWxhbmcub3JnXG5DYXRlZ29yeTogZnVuY3Rpb25hbFxuKi9cblxuZnVuY3Rpb24gbWVyY3VyeShobGpzKSB7XG4gIGNvbnN0IEtFWVdPUkRTID0ge1xuICAgIGtleXdvcmQ6XG4gICAgICAnbW9kdWxlIHVzZV9tb2R1bGUgaW1wb3J0X21vZHVsZSBpbmNsdWRlX21vZHVsZSBlbmRfbW9kdWxlIGluaXRpYWxpc2UgJ1xuICAgICAgKyAnbXV0YWJsZSBpbml0aWFsaXplIGZpbmFsaXplIGZpbmFsaXNlIGludGVyZmFjZSBpbXBsZW1lbnRhdGlvbiBwcmVkICdcbiAgICAgICsgJ21vZGUgZnVuYyB0eXBlIGluc3Qgc29sdmVyIGFueV9wcmVkIGFueV9mdW5jIGlzIHNlbWlkZXQgZGV0IG5vbmRldCAnXG4gICAgICArICdtdWx0aSBlcnJvbmVvdXMgZmFpbHVyZSBjY19ub25kZXQgY2NfbXVsdGkgdHlwZWNsYXNzIGluc3RhbmNlIHdoZXJlICdcbiAgICAgICsgJ3ByYWdtYSBwcm9taXNlIGV4dGVybmFsIHRyYWNlIGF0b21pYyBvcl9lbHNlIHJlcXVpcmVfY29tcGxldGVfc3dpdGNoICdcbiAgICAgICsgJ3JlcXVpcmVfZGV0IHJlcXVpcmVfc2VtaWRldCByZXF1aXJlX211bHRpIHJlcXVpcmVfbm9uZGV0ICdcbiAgICAgICsgJ3JlcXVpcmVfY2NfbXVsdGkgcmVxdWlyZV9jY19ub25kZXQgcmVxdWlyZV9lcnJvbmVvdXMgcmVxdWlyZV9mYWlsdXJlJyxcbiAgICBtZXRhOlxuICAgICAgLy8gcHJhZ21hXG4gICAgICAnaW5saW5lIG5vX2lubGluZSB0eXBlX3NwZWMgc291cmNlX2ZpbGUgZmFjdF90YWJsZSBvYnNvbGV0ZSBtZW1vICdcbiAgICAgICsgJ2xvb3BfY2hlY2sgbWluaW1hbF9tb2RlbCB0ZXJtaW5hdGVzIGRvZXNfbm90X3Rlcm1pbmF0ZSAnXG4gICAgICArICdjaGVja190ZXJtaW5hdGlvbiBwcm9taXNlX2VxdWl2YWxlbnRfY2xhdXNlcyAnXG4gICAgICAvLyBwcmVwcm9jZXNzb3JcbiAgICAgICsgJ2ZvcmVpZ25fcHJvYyBmb3JlaWduX2RlY2wgZm9yZWlnbl9jb2RlIGZvcmVpZ25fdHlwZSAnXG4gICAgICArICdmb3JlaWduX2ltcG9ydF9tb2R1bGUgZm9yZWlnbl9leHBvcnRfZW51bSBmb3JlaWduX2V4cG9ydCAnXG4gICAgICArICdmb3JlaWduX2VudW0gbWF5X2NhbGxfbWVyY3VyeSB3aWxsX25vdF9jYWxsX21lcmN1cnkgdGhyZWFkX3NhZmUgJ1xuICAgICAgKyAnbm90X3RocmVhZF9zYWZlIG1heWJlX3RocmVhZF9zYWZlIHByb21pc2VfcHVyZSBwcm9taXNlX3NlbWlwdXJlICdcbiAgICAgICsgJ3RhYmxlZF9mb3JfaW8gbG9jYWwgdW50cmFpbGVkIHRyYWlsZWQgYXR0YWNoX3RvX2lvX3N0YXRlICdcbiAgICAgICsgJ2Nhbl9wYXNzX2FzX21lcmN1cnlfdHlwZSBzdGFibGUgd2lsbF9ub3RfdGhyb3dfZXhjZXB0aW9uICdcbiAgICAgICsgJ21heV9tb2RpZnlfdHJhaWwgd2lsbF9ub3RfbW9kaWZ5X3RyYWlsIG1heV9kdXBsaWNhdGUgJ1xuICAgICAgKyAnbWF5X25vdF9kdXBsaWNhdGUgYWZmZWN0c19saXZlbmVzcyBkb2VzX25vdF9hZmZlY3RfbGl2ZW5lc3MgJ1xuICAgICAgKyAnZG9lc250X2FmZmVjdF9saXZlbmVzcyBub19zaGFyaW5nIHVua25vd25fc2hhcmluZyBzaGFyaW5nJyxcbiAgICBidWlsdF9pbjpcbiAgICAgICdzb21lIGFsbCBub3QgaWYgdGhlbiBlbHNlIHRydWUgZmFpbCBmYWxzZSB0cnkgY2F0Y2ggY2F0Y2hfYW55ICdcbiAgICAgICsgJ3NlbWlkZXRfdHJ1ZSBzZW1pZGV0X2ZhbHNlIHNlbWlkZXRfZmFpbCBpbXB1cmVfdHJ1ZSBpbXB1cmUgc2VtaXB1cmUnXG4gIH07XG5cbiAgY29uc3QgQ09NTUVOVCA9IGhsanMuQ09NTUVOVCgnJScsICckJyk7XG5cbiAgY29uc3QgTlVNQ09ERSA9IHtcbiAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgIGJlZ2luOiBcIjAnLlxcXFx8MFtib3hdWzAtOWEtZkEtRl0qXCJcbiAgfTtcblxuICBjb25zdCBBVE9NID0gaGxqcy5pbmhlcml0KGhsanMuQVBPU19TVFJJTkdfTU9ERSwgeyByZWxldmFuY2U6IDAgfSk7XG4gIGNvbnN0IFNUUklORyA9IGhsanMuaW5oZXJpdChobGpzLlFVT1RFX1NUUklOR19NT0RFLCB7IHJlbGV2YW5jZTogMCB9KTtcbiAgY29uc3QgU1RSSU5HX0ZNVCA9IHtcbiAgICBjbGFzc05hbWU6ICdzdWJzdCcsXG4gICAgYmVnaW46ICdcXFxcXFxcXFthYmZucnR2XVxcXFx8XFxcXFxcXFx4WzAtOWEtZkEtRl0qXFxcXFxcXFxcXFxcfCVbLSsjICouMC05XSpbZGlveFh1Y3NmZUVnR3BdJyxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcbiAgU1RSSU5HLmNvbnRhaW5zID0gU1RSSU5HLmNvbnRhaW5zLnNsaWNlKCk7IC8vIHdlIG5lZWQgb3VyIG93biBjb3B5IG9mIGNvbnRhaW5zXG4gIFNUUklORy5jb250YWlucy5wdXNoKFNUUklOR19GTVQpO1xuXG4gIGNvbnN0IElNUExJQ0FUSU9OID0ge1xuICAgIGNsYXNzTmFtZTogJ2J1aWx0X2luJyxcbiAgICB2YXJpYW50czogW1xuICAgICAgeyBiZWdpbjogJzw9PicgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICc8PScsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICc9PicsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIHsgYmVnaW46ICcvXFxcXFxcXFwnIH0sXG4gICAgICB7IGJlZ2luOiAnXFxcXFxcXFwvJyB9XG4gICAgXVxuICB9O1xuXG4gIGNvbnN0IEhFQURfQk9EWV9DT05KVU5DVElPTiA9IHtcbiAgICBjbGFzc05hbWU6ICdidWlsdF9pbicsXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHsgYmVnaW46ICc6LVxcXFx8LS0+JyB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogJz0nLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH1cbiAgICBdXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnTWVyY3VyeScsXG4gICAgYWxpYXNlczogW1xuICAgICAgJ20nLFxuICAgICAgJ21vbydcbiAgICBdLFxuICAgIGtleXdvcmRzOiBLRVlXT1JEUyxcbiAgICBjb250YWluczogW1xuICAgICAgSU1QTElDQVRJT04sXG4gICAgICBIRUFEX0JPRFlfQ09OSlVOQ1RJT04sXG4gICAgICBDT01NRU5ULFxuICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICAgIE5VTUNPREUsXG4gICAgICBobGpzLk5VTUJFUl9NT0RFLFxuICAgICAgQVRPTSxcbiAgICAgIFNUUklORyxcbiAgICAgIHsgLy8gcmVsZXZhbmNlIGJvb3N0ZXJcbiAgICAgICAgYmVnaW46IC86LS8gfSxcbiAgICAgIHsgLy8gcmVsZXZhbmNlIGJvb3N0ZXJcbiAgICAgICAgYmVnaW46IC9cXC4kLyB9XG4gICAgXVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1lcmN1cnk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///1544\n")},1545:(__unused_webpack_module,exports,__webpack_require__)=>{"use strict";eval("\n\nvar Scalar = __webpack_require__(3923);\n\nconst boolTag = {\n identify: value => typeof value === 'boolean',\n default: true,\n tag: 'tag:yaml.org,2002:bool',\n test: /^(?:[Tt]rue|TRUE|[Ff]alse|FALSE)$/,\n resolve: str => new Scalar.Scalar(str[0] === 't' || str[0] === 'T'),\n stringify({ source, value }, ctx) {\n if (source && boolTag.test.test(source)) {\n const sv = source[0] === 't' || source[0] === 'T';\n if (value === sv)\n return source;\n }\n return value ? ctx.options.trueStr : ctx.options.falseStr;\n }\n};\n\nexports.boolTag = boolTag;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTU0NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixhQUFhLG1CQUFPLENBQUMsSUFBdUI7O0FBRTVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixlQUFlO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsZUFBZSIsInNvdXJjZXMiOlsid2VicGFjazovL29ic2lkaWFuLW1pbmRtYXAtbmV4dGdlbi8uL25vZGVfbW9kdWxlcy8ucG5wbS95YW1sQDIuOC4wL25vZGVfbW9kdWxlcy95YW1sL2Rpc3Qvc2NoZW1hL2NvcmUvYm9vbC5qcz9mMjQ4Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIFNjYWxhciA9IHJlcXVpcmUoJy4uLy4uL25vZGVzL1NjYWxhci5qcycpO1xuXG5jb25zdCBib29sVGFnID0ge1xuICAgIGlkZW50aWZ5OiB2YWx1ZSA9PiB0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJyxcbiAgICBkZWZhdWx0OiB0cnVlLFxuICAgIHRhZzogJ3RhZzp5YW1sLm9yZywyMDAyOmJvb2wnLFxuICAgIHRlc3Q6IC9eKD86W1R0XXJ1ZXxUUlVFfFtGZl1hbHNlfEZBTFNFKSQvLFxuICAgIHJlc29sdmU6IHN0ciA9PiBuZXcgU2NhbGFyLlNjYWxhcihzdHJbMF0gPT09ICd0JyB8fCBzdHJbMF0gPT09ICdUJyksXG4gICAgc3RyaW5naWZ5KHsgc291cmNlLCB2YWx1ZSB9LCBjdHgpIHtcbiAgICAgICAgaWYgKHNvdXJjZSAmJiBib29sVGFnLnRlc3QudGVzdChzb3VyY2UpKSB7XG4gICAgICAgICAgICBjb25zdCBzdiA9IHNvdXJjZVswXSA9PT0gJ3QnIHx8IHNvdXJjZVswXSA9PT0gJ1QnO1xuICAgICAgICAgICAgaWYgKHZhbHVlID09PSBzdilcbiAgICAgICAgICAgICAgICByZXR1cm4gc291cmNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZSA/IGN0eC5vcHRpb25zLnRydWVTdHIgOiBjdHgub3B0aW9ucy5mYWxzZVN0cjtcbiAgICB9XG59O1xuXG5leHBvcnRzLmJvb2xUYWcgPSBib29sVGFnO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1545\n")},1565:(module,__unused_webpack_exports,__webpack_require__)=>{"use strict";eval("\n\nvar common = __webpack_require__(2489);\nvar Type = __webpack_require__(2500);\n\nvar YAML_FLOAT_PATTERN = new RegExp(\n // 2.5e4, 2.5 and integers\n '^(?:[-+]?(?:0|[1-9][0-9_]*)(?:\\\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?' +\n // .2e4, .2\n // special case, seems not from spec\n '|\\\\.[0-9_]+(?:[eE][-+]?[0-9]+)?' +\n // 20:59\n '|[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\\\.[0-9_]*' +\n // .inf\n '|[-+]?\\\\.(?:inf|Inf|INF)' +\n // .nan\n '|\\\\.(?:nan|NaN|NAN))$');\n\nfunction resolveYamlFloat(data) {\n if (data === null) return false;\n\n if (!YAML_FLOAT_PATTERN.test(data) ||\n // Quick hack to not allow integers end with `_`\n // Probably should update regexp & check speed\n data[data.length - 1] === '_') {\n return false;\n }\n\n return true;\n}\n\nfunction constructYamlFloat(data) {\n var value, sign, base, digits;\n\n value = data.replace(/_/g, '').toLowerCase();\n sign = value[0] === '-' ? -1 : 1;\n digits = [];\n\n if ('+-'.indexOf(value[0]) >= 0) {\n value = value.slice(1);\n }\n\n if (value === '.inf') {\n return (sign === 1) ? Number.POSITIVE_INFINITY : Number.NEGATIVE_INFINITY;\n\n } else if (value === '.nan') {\n return NaN;\n\n } else if (value.indexOf(':') >= 0) {\n value.split(':').forEach(function (v) {\n digits.unshift(parseFloat(v, 10));\n });\n\n value = 0.0;\n base = 1;\n\n digits.forEach(function (d) {\n value += d * base;\n base *= 60;\n });\n\n return sign * value;\n\n }\n return sign * parseFloat(value, 10);\n}\n\n\nvar SCIENTIFIC_WITHOUT_DOT = /^[-+]?[0-9]+e/;\n\nfunction representYamlFloat(object, style) {\n var res;\n\n if (isNaN(object)) {\n switch (style) {\n case 'lowercase': return '.nan';\n case 'uppercase': return '.NAN';\n case 'camelcase': return '.NaN';\n }\n } else if (Number.POSITIVE_INFINITY === object) {\n switch (style) {\n case 'lowercase': return '.inf';\n case 'uppercase': return '.INF';\n case 'camelcase': return '.Inf';\n }\n } else if (Number.NEGATIVE_INFINITY === object) {\n switch (style) {\n case 'lowercase': return '-.inf';\n case 'uppercase': return '-.INF';\n case 'camelcase': return '-.Inf';\n }\n } else if (common.isNegativeZero(object)) {\n return '-0.0';\n }\n\n res = object.toString(10);\n\n // JS stringifier can build scientific format without dots: 5e-100,\n // while YAML requres dot: 5.e-100. Fix it with simple hack\n\n return SCIENTIFIC_WITHOUT_DOT.test(res) ? res.replace('e', '.e') : res;\n}\n\nfunction isFloat(object) {\n return (Object.prototype.toString.call(object) === '[object Number]') &&\n (object % 1 !== 0 || common.isNegativeZero(object));\n}\n\nmodule.exports = new Type('tag:yaml.org,2002:float', {\n kind: 'scalar',\n resolve: resolveYamlFloat,\n construct: constructYamlFloat,\n predicate: isFloat,\n represent: representYamlFloat,\n defaultStyle: 'lowercase'\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTU2NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixhQUFhLG1CQUFPLENBQUMsSUFBVztBQUNoQyxhQUFhLG1CQUFPLENBQUMsSUFBUzs7QUFFOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsSUFBSTtBQUNKOztBQUVBLElBQUk7QUFDSjtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7O0FBRUE7QUFDQTtBQUNBOzs7QUFHQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vb2JzaWRpYW4tbWluZG1hcC1uZXh0Z2VuLy4vbm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4xL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUvZmxvYXQuanM/YWYyZiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBjb21tb24gPSByZXF1aXJlKCcuLi9jb21tb24nKTtcbnZhciBUeXBlICAgPSByZXF1aXJlKCcuLi90eXBlJyk7XG5cbnZhciBZQU1MX0ZMT0FUX1BBVFRFUk4gPSBuZXcgUmVnRXhwKFxuICAvLyAyLjVlNCwgMi41IGFuZCBpbnRlZ2Vyc1xuICAnXig/OlstK10/KD86MHxbMS05XVswLTlfXSopKD86XFxcXC5bMC05X10qKT8oPzpbZUVdWy0rXT9bMC05XSspPycgK1xuICAvLyAuMmU0LCAuMlxuICAvLyBzcGVjaWFsIGNhc2UsIHNlZW1zIG5vdCBmcm9tIHNwZWNcbiAgJ3xcXFxcLlswLTlfXSsoPzpbZUVdWy0rXT9bMC05XSspPycgK1xuICAvLyAyMDo1OVxuICAnfFstK10/WzAtOV1bMC05X10qKD86OlswLTVdP1swLTldKStcXFxcLlswLTlfXSonICtcbiAgLy8gLmluZlxuICAnfFstK10/XFxcXC4oPzppbmZ8SW5mfElORiknICtcbiAgLy8gLm5hblxuICAnfFxcXFwuKD86bmFufE5hTnxOQU4pKSQnKTtcblxuZnVuY3Rpb24gcmVzb2x2ZVlhbWxGbG9hdChkYXRhKSB7XG4gIGlmIChkYXRhID09PSBudWxsKSByZXR1cm4gZmFsc2U7XG5cbiAgaWYgKCFZQU1MX0ZMT0FUX1BBVFRFUk4udGVzdChkYXRhKSB8fFxuICAgICAgLy8gUXVpY2sgaGFjayB0byBub3QgYWxsb3cgaW50ZWdlcnMgZW5kIHdpdGggYF9gXG4gICAgICAvLyBQcm9iYWJseSBzaG91bGQgdXBkYXRlIHJlZ2V4cCAmIGNoZWNrIHNwZWVkXG4gICAgICBkYXRhW2RhdGEubGVuZ3RoIC0gMV0gPT09ICdfJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBjb25zdHJ1Y3RZYW1sRmxvYXQoZGF0YSkge1xuICB2YXIgdmFsdWUsIHNpZ24sIGJhc2UsIGRpZ2l0cztcblxuICB2YWx1ZSAgPSBkYXRhLnJlcGxhY2UoL18vZywgJycpLnRvTG93ZXJDYXNlKCk7XG4gIHNpZ24gICA9IHZhbHVlWzBdID09PSAnLScgPyAtMSA6IDE7XG4gIGRpZ2l0cyA9IFtdO1xuXG4gIGlmICgnKy0nLmluZGV4T2YodmFsdWVbMF0pID49IDApIHtcbiAgICB2YWx1ZSA9IHZhbHVlLnNsaWNlKDEpO1xuICB9XG5cbiAgaWYgKHZhbHVlID09PSAnLmluZicpIHtcbiAgICByZXR1cm4gKHNpZ24gPT09IDEpID8gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZIDogTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZO1xuXG4gIH0gZWxzZSBpZiAodmFsdWUgPT09ICcubmFuJykge1xuICAgIHJldHVybiBOYU47XG5cbiAgfSBlbHNlIGlmICh2YWx1ZS5pbmRleE9mKCc6JykgPj0gMCkge1xuICAgIHZhbHVlLnNwbGl0KCc6JykuZm9yRWFjaChmdW5jdGlvbiAodikge1xuICAgICAgZGlnaXRzLnVuc2hpZnQocGFyc2VGbG9hdCh2LCAxMCkpO1xuICAgIH0pO1xuXG4gICAgdmFsdWUgPSAwLjA7XG4gICAgYmFzZSA9IDE7XG5cbiAgICBkaWdpdHMuZm9yRWFjaChmdW5jdGlvbiAoZCkge1xuICAgICAgdmFsdWUgKz0gZCAqIGJhc2U7XG4gICAgICBiYXNlICo9IDYwO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHNpZ24gKiB2YWx1ZTtcblxuICB9XG4gIHJldHVybiBzaWduICogcGFyc2VGbG9hdCh2YWx1ZSwgMTApO1xufVxuXG5cbnZhciBTQ0lFTlRJRklDX1dJVEhPVVRfRE9UID0gL15bLStdP1swLTldK2UvO1xuXG5mdW5jdGlvbiByZXByZXNlbnRZYW1sRmxvYXQob2JqZWN0LCBzdHlsZSkge1xuICB2YXIgcmVzO1xuXG4gIGlmIChpc05hTihvYmplY3QpKSB7XG4gICAgc3dpdGNoIChzdHlsZSkge1xuICAgICAgY2FzZSAnbG93ZXJjYXNlJzogcmV0dXJuICcubmFuJztcbiAgICAgIGNhc2UgJ3VwcGVyY2FzZSc6IHJldHVybiAnLk5BTic7XG4gICAgICBjYXNlICdjYW1lbGNhc2UnOiByZXR1cm4gJy5OYU4nO1xuICAgIH1cbiAgfSBlbHNlIGlmIChOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkgPT09IG9iamVjdCkge1xuICAgIHN3aXRjaCAoc3R5bGUpIHtcbiAgICAgIGNhc2UgJ2xvd2VyY2FzZSc6IHJldHVybiAnLmluZic7XG4gICAgICBjYXNlICd1cHBlcmNhc2UnOiByZXR1cm4gJy5JTkYnO1xuICAgICAgY2FzZSAnY2FtZWxjYXNlJzogcmV0dXJuICcuSW5mJztcbiAgICB9XG4gIH0gZWxzZSBpZiAoTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZID09PSBvYmplY3QpIHtcbiAgICBzd2l0Y2ggKHN0eWxlKSB7XG4gICAgICBjYXNlICdsb3dlcmNhc2UnOiByZXR1cm4gJy0uaW5mJztcbiAgICAgIGNhc2UgJ3VwcGVyY2FzZSc6IHJldHVybiAnLS5JTkYnO1xuICAgICAgY2FzZSAnY2FtZWxjYXNlJzogcmV0dXJuICctLkluZic7XG4gICAgfVxuICB9IGVsc2UgaWYgKGNvbW1vbi5pc05lZ2F0aXZlWmVybyhvYmplY3QpKSB7XG4gICAgcmV0dXJuICctMC4wJztcbiAgfVxuXG4gIHJlcyA9IG9iamVjdC50b1N0cmluZygxMCk7XG5cbiAgLy8gSlMgc3RyaW5naWZpZXIgY2FuIGJ1aWxkIHNjaWVudGlmaWMgZm9ybWF0IHdpdGhvdXQgZG90czogNWUtMTAwLFxuICAvLyB3aGlsZSBZQU1MIHJlcXVyZXMgZG90OiA1LmUtMTAwLiBGaXggaXQgd2l0aCBzaW1wbGUgaGFja1xuXG4gIHJldHVybiBTQ0lFTlRJRklDX1dJVEhPVVRfRE9ULnRlc3QocmVzKSA/IHJlcy5yZXBsYWNlKCdlJywgJy5lJykgOiByZXM7XG59XG5cbmZ1bmN0aW9uIGlzRmxvYXQob2JqZWN0KSB7XG4gIHJldHVybiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iamVjdCkgPT09ICdbb2JqZWN0IE51bWJlcl0nKSAmJlxuICAgICAgICAgKG9iamVjdCAlIDEgIT09IDAgfHwgY29tbW9uLmlzTmVnYXRpdmVaZXJvKG9iamVjdCkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG5ldyBUeXBlKCd0YWc6eWFtbC5vcmcsMjAwMjpmbG9hdCcsIHtcbiAga2luZDogJ3NjYWxhcicsXG4gIHJlc29sdmU6IHJlc29sdmVZYW1sRmxvYXQsXG4gIGNvbnN0cnVjdDogY29uc3RydWN0WWFtbEZsb2F0LFxuICBwcmVkaWNhdGU6IGlzRmxvYXQsXG4gIHJlcHJlc2VudDogcmVwcmVzZW50WWFtbEZsb2F0LFxuICBkZWZhdWx0U3R5bGU6ICdsb3dlcmNhc2UnXG59KTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1565\n")},1583:(__unused_webpack_module,exports,__webpack_require__)=>{"use strict";eval("\n\nvar cstScalar = __webpack_require__(7432);\nvar cstStringify = __webpack_require__(2275);\nvar cstVisit = __webpack_require__(933);\n\n/** The byte order mark */\nconst BOM = '\\u{FEFF}';\n/** Start of doc-mode */\nconst DOCUMENT = '\\x02'; // C0: Start of Text\n/** Unexpected end of flow-mode */\nconst FLOW_END = '\\x18'; // C0: Cancel\n/** Next token is a scalar value */\nconst SCALAR = '\\x1f'; // C0: Unit Separator\n/** @returns `true` if `token` is a flow or block collection */\nconst isCollection = (token) => !!token && 'items' in token;\n/** @returns `true` if `token` is a flow or block scalar; not an alias */\nconst isScalar = (token) => !!token &&\n (token.type === 'scalar' ||\n token.type === 'single-quoted-scalar' ||\n token.type === 'double-quoted-scalar' ||\n token.type === 'block-scalar');\n/* istanbul ignore next */\n/** Get a printable representation of a lexer token */\nfunction prettyToken(token) {\n switch (token) {\n case BOM:\n return '';\n case DOCUMENT:\n return '';\n case FLOW_END:\n return '';\n case SCALAR:\n return '';\n default:\n return JSON.stringify(token);\n }\n}\n/** Identify the type of a lexer token. May return `null` for unknown tokens. */\nfunction tokenType(source) {\n switch (source) {\n case BOM:\n return 'byte-order-mark';\n case DOCUMENT:\n return 'doc-mode';\n case FLOW_END:\n return 'flow-error-end';\n case SCALAR:\n return 'scalar';\n case '---':\n return 'doc-start';\n case '...':\n return 'doc-end';\n case '':\n case '\\n':\n case '\\r\\n':\n return 'newline';\n case '-':\n return 'seq-item-ind';\n case '?':\n return 'explicit-key-ind';\n case ':':\n return 'map-value-ind';\n case '{':\n return 'flow-map-start';\n case '}':\n return 'flow-map-end';\n case '[':\n return 'flow-seq-start';\n case ']':\n return 'flow-seq-end';\n case ',':\n return 'comma';\n }\n switch (source[0]) {\n case ' ':\n case '\\t':\n return 'space';\n case '#':\n return 'comment';\n case '%':\n return 'directive-line';\n case '*':\n return 'alias';\n case '&':\n return 'anchor';\n case '!':\n return 'tag';\n case \"'\":\n return 'single-quoted-scalar';\n case '\"':\n return 'double-quoted-scalar';\n case '|':\n case '>':\n return 'block-scalar-header';\n }\n return null;\n}\n\nexports.createScalarToken = cstScalar.createScalarToken;\nexports.resolveAsScalar = cstScalar.resolveAsScalar;\nexports.setScalarValue = cstScalar.setScalarValue;\nexports.stringify = cstStringify.stringify;\nexports.visit = cstVisit.visit;\nexports.BOM = BOM;\nexports.DOCUMENT = DOCUMENT;\nexports.FLOW_END = FLOW_END;\nexports.SCALAR = SCALAR;\nexports.isCollection = isCollection;\nexports.isScalar = isScalar;\nexports.prettyToken = prettyToken;\nexports.tokenType = tokenType;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTU4My5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFpQjtBQUN6QyxtQkFBbUIsbUJBQU8sQ0FBQyxJQUFvQjtBQUMvQyxlQUFlLG1CQUFPLENBQUMsR0FBZ0I7O0FBRXZDO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQSx5QkFBeUI7QUFDekI7QUFDQSx5QkFBeUI7QUFDekI7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBLDBEQUEwRDtBQUMxRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHlCQUF5QjtBQUN6Qix1QkFBdUI7QUFDdkIsc0JBQXNCO0FBQ3RCLGlCQUFpQjtBQUNqQixhQUFhO0FBQ2IsV0FBVztBQUNYLGdCQUFnQjtBQUNoQixnQkFBZ0I7QUFDaEIsY0FBYztBQUNkLG9CQUFvQjtBQUNwQixnQkFBZ0I7QUFDaEIsbUJBQW1CO0FBQ25CLGlCQUFpQiIsInNvdXJjZXMiOlsid2VicGFjazovL29ic2lkaWFuLW1pbmRtYXAtbmV4dGdlbi8uL25vZGVfbW9kdWxlcy8ucG5wbS95YW1sQDIuOC4wL25vZGVfbW9kdWxlcy95YW1sL2Rpc3QvcGFyc2UvY3N0LmpzPzljYzciXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgY3N0U2NhbGFyID0gcmVxdWlyZSgnLi9jc3Qtc2NhbGFyLmpzJyk7XG52YXIgY3N0U3RyaW5naWZ5ID0gcmVxdWlyZSgnLi9jc3Qtc3RyaW5naWZ5LmpzJyk7XG52YXIgY3N0VmlzaXQgPSByZXF1aXJlKCcuL2NzdC12aXNpdC5qcycpO1xuXG4vKiogVGhlIGJ5dGUgb3JkZXIgbWFyayAqL1xuY29uc3QgQk9NID0gJ1xcdXtGRUZGfSc7XG4vKiogU3RhcnQgb2YgZG9jLW1vZGUgKi9cbmNvbnN0IERPQ1VNRU5UID0gJ1xceDAyJzsgLy8gQzA6IFN0YXJ0IG9mIFRleHRcbi8qKiBVbmV4cGVjdGVkIGVuZCBvZiBmbG93LW1vZGUgKi9cbmNvbnN0IEZMT1dfRU5EID0gJ1xceDE4JzsgLy8gQzA6IENhbmNlbFxuLyoqIE5leHQgdG9rZW4gaXMgYSBzY2FsYXIgdmFsdWUgKi9cbmNvbnN0IFNDQUxBUiA9ICdcXHgxZic7IC8vIEMwOiBVbml0IFNlcGFyYXRvclxuLyoqIEByZXR1cm5zIGB0cnVlYCBpZiBgdG9rZW5gIGlzIGEgZmxvdyBvciBibG9jayBjb2xsZWN0aW9uICovXG5jb25zdCBpc0NvbGxlY3Rpb24gPSAodG9rZW4pID0+ICEhdG9rZW4gJiYgJ2l0ZW1zJyBpbiB0b2tlbjtcbi8qKiBAcmV0dXJucyBgdHJ1ZWAgaWYgYHRva2VuYCBpcyBhIGZsb3cgb3IgYmxvY2sgc2NhbGFyOyBub3QgYW4gYWxpYXMgKi9cbmNvbnN0IGlzU2NhbGFyID0gKHRva2VuKSA9PiAhIXRva2VuICYmXG4gICAgKHRva2VuLnR5cGUgPT09ICdzY2FsYXInIHx8XG4gICAgICAgIHRva2VuLnR5cGUgPT09ICdzaW5nbGUtcXVvdGVkLXNjYWxhcicgfHxcbiAgICAgICAgdG9rZW4udHlwZSA9PT0gJ2RvdWJsZS1xdW90ZWQtc2NhbGFyJyB8fFxuICAgICAgICB0b2tlbi50eXBlID09PSAnYmxvY2stc2NhbGFyJyk7XG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuLyoqIEdldCBhIHByaW50YWJsZSByZXByZXNlbnRhdGlvbiBvZiBhIGxleGVyIHRva2VuICovXG5mdW5jdGlvbiBwcmV0dHlUb2tlbih0b2tlbikge1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgICAgY2FzZSBCT006XG4gICAgICAgICAgICByZXR1cm4gJzxCT00+JztcbiAgICAgICAgY2FzZSBET0NVTUVOVDpcbiAgICAgICAgICAgIHJldHVybiAnPERPQz4nO1xuICAgICAgICBjYXNlIEZMT1dfRU5EOlxuICAgICAgICAgICAgcmV0dXJuICc8RkxPV19FTkQ+JztcbiAgICAgICAgY2FzZSBTQ0FMQVI6XG4gICAgICAgICAgICByZXR1cm4gJzxTQ0FMQVI+JztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh0b2tlbik7XG4gICAgfVxufVxuLyoqIElkZW50aWZ5IHRoZSB0eXBlIG9mIGEgbGV4ZXIgdG9rZW4uIE1heSByZXR1cm4gYG51bGxgIGZvciB1bmtub3duIHRva2Vucy4gKi9cbmZ1bmN0aW9uIHRva2VuVHlwZShzb3VyY2UpIHtcbiAgICBzd2l0Y2ggKHNvdXJjZSkge1xuICAgICAgICBjYXNlIEJPTTpcbiAgICAgICAgICAgIHJldHVybiAnYnl0ZS1vcmRlci1tYXJrJztcbiAgICAgICAgY2FzZSBET0NVTUVOVDpcbiAgICAgICAgICAgIHJldHVybiAnZG9jLW1vZGUnO1xuICAgICAgICBjYXNlIEZMT1dfRU5EOlxuICAgICAgICAgICAgcmV0dXJuICdmbG93LWVycm9yLWVuZCc7XG4gICAgICAgIGNhc2UgU0NBTEFSOlxuICAgICAgICAgICAgcmV0dXJuICdzY2FsYXInO1xuICAgICAgICBjYXNlICctLS0nOlxuICAgICAgICAgICAgcmV0dXJuICdkb2Mtc3RhcnQnO1xuICAgICAgICBjYXNlICcuLi4nOlxuICAgICAgICAgICAgcmV0dXJuICdkb2MtZW5kJztcbiAgICAgICAgY2FzZSAnJzpcbiAgICAgICAgY2FzZSAnXFxuJzpcbiAgICAgICAgY2FzZSAnXFxyXFxuJzpcbiAgICAgICAgICAgIHJldHVybiAnbmV3bGluZSc7XG4gICAgICAgIGNhc2UgJy0nOlxuICAgICAgICAgICAgcmV0dXJuICdzZXEtaXRlbS1pbmQnO1xuICAgICAgICBjYXNlICc/JzpcbiAgICAgICAgICAgIHJldHVybiAnZXhwbGljaXQta2V5LWluZCc7XG4gICAgICAgIGNhc2UgJzonOlxuICAgICAgICAgICAgcmV0dXJuICdtYXAtdmFsdWUtaW5kJztcbiAgICAgICAgY2FzZSAneyc6XG4gICAgICAgICAgICByZXR1cm4gJ2Zsb3ctbWFwLXN0YXJ0JztcbiAgICAgICAgY2FzZSAnfSc6XG4gICAgICAgICAgICByZXR1cm4gJ2Zsb3ctbWFwLWVuZCc7XG4gICAgICAgIGNhc2UgJ1snOlxuICAgICAgICAgICAgcmV0dXJuICdmbG93LXNlcS1zdGFydCc7XG4gICAgICAgIGNhc2UgJ10nOlxuICAgICAgICAgICAgcmV0dXJuICdmbG93LXNlcS1lbmQnO1xuICAgICAgICBjYXNlICcsJzpcbiAgICAgICAgICAgIHJldHVybiAnY29tbWEnO1xuICAgIH1cbiAgICBzd2l0Y2ggKHNvdXJjZVswXSkge1xuICAgICAgICBjYXNlICcgJzpcbiAgICAgICAgY2FzZSAnXFx0JzpcbiAgICAgICAgICAgIHJldHVybiAnc3BhY2UnO1xuICAgICAgICBjYXNlICcjJzpcbiAgICAgICAgICAgIHJldHVybiAnY29tbWVudCc7XG4gICAgICAgIGNhc2UgJyUnOlxuICAgICAgICAgICAgcmV0dXJuICdkaXJlY3RpdmUtbGluZSc7XG4gICAgICAgIGNhc2UgJyonOlxuICAgICAgICAgICAgcmV0dXJuICdhbGlhcyc7XG4gICAgICAgIGNhc2UgJyYnOlxuICAgICAgICAgICAgcmV0dXJuICdhbmNob3InO1xuICAgICAgICBjYXNlICchJzpcbiAgICAgICAgICAgIHJldHVybiAndGFnJztcbiAgICAgICAgY2FzZSBcIidcIjpcbiAgICAgICAgICAgIHJldHVybiAnc2luZ2xlLXF1b3RlZC1zY2FsYXInO1xuICAgICAgICBjYXNlICdcIic6XG4gICAgICAgICAgICByZXR1cm4gJ2RvdWJsZS1xdW90ZWQtc2NhbGFyJztcbiAgICAgICAgY2FzZSAnfCc6XG4gICAgICAgIGNhc2UgJz4nOlxuICAgICAgICAgICAgcmV0dXJuICdibG9jay1zY2FsYXItaGVhZGVyJztcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59XG5cbmV4cG9ydHMuY3JlYXRlU2NhbGFyVG9rZW4gPSBjc3RTY2FsYXIuY3JlYXRlU2NhbGFyVG9rZW47XG5leHBvcnRzLnJlc29sdmVBc1NjYWxhciA9IGNzdFNjYWxhci5yZXNvbHZlQXNTY2FsYXI7XG5leHBvcnRzLnNldFNjYWxhclZhbHVlID0gY3N0U2NhbGFyLnNldFNjYWxhclZhbHVlO1xuZXhwb3J0cy5zdHJpbmdpZnkgPSBjc3RTdHJpbmdpZnkuc3RyaW5naWZ5O1xuZXhwb3J0cy52aXNpdCA9IGNzdFZpc2l0LnZpc2l0O1xuZXhwb3J0cy5CT00gPSBCT007XG5leHBvcnRzLkRPQ1VNRU5UID0gRE9DVU1FTlQ7XG5leHBvcnRzLkZMT1dfRU5EID0gRkxPV19FTkQ7XG5leHBvcnRzLlNDQUxBUiA9IFNDQUxBUjtcbmV4cG9ydHMuaXNDb2xsZWN0aW9uID0gaXNDb2xsZWN0aW9uO1xuZXhwb3J0cy5pc1NjYWxhciA9IGlzU2NhbGFyO1xuZXhwb3J0cy5wcmV0dHlUb2tlbiA9IHByZXR0eVRva2VuO1xuZXhwb3J0cy50b2tlblR5cGUgPSB0b2tlblR5cGU7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///1583\n")},1617:module=>{eval("// https://docs.oracle.com/javase/specs/jls/se15/html/jls-3.html#jls-3.10\nvar decimalDigits = '[0-9](_*[0-9])*';\nvar frac = `\\\\.(${decimalDigits})`;\nvar hexDigits = '[0-9a-fA-F](_*[0-9a-fA-F])*';\nvar NUMERIC = {\n className: 'number',\n variants: [\n // DecimalFloatingPointLiteral\n // including ExponentPart\n { begin: `(\\\\b(${decimalDigits})((${frac})|\\\\.)?|(${frac}))` +\n `[eE][+-]?(${decimalDigits})[fFdD]?\\\\b` },\n // excluding ExponentPart\n { begin: `\\\\b(${decimalDigits})((${frac})[fFdD]?\\\\b|\\\\.([fFdD]\\\\b)?)` },\n { begin: `(${frac})[fFdD]?\\\\b` },\n { begin: `\\\\b(${decimalDigits})[fFdD]\\\\b` },\n\n // HexadecimalFloatingPointLiteral\n { begin: `\\\\b0[xX]((${hexDigits})\\\\.?|(${hexDigits})?\\\\.(${hexDigits}))` +\n `[pP][+-]?(${decimalDigits})[fFdD]?\\\\b` },\n\n // DecimalIntegerLiteral\n { begin: '\\\\b(0|[1-9](_*[0-9])*)[lL]?\\\\b' },\n\n // HexIntegerLiteral\n { begin: `\\\\b0[xX](${hexDigits})[lL]?\\\\b` },\n\n // OctalIntegerLiteral\n { begin: '\\\\b0(_*[0-7])*[lL]?\\\\b' },\n\n // BinaryIntegerLiteral\n { begin: '\\\\b0[bB][01](_*[01])*[lL]?\\\\b' },\n ],\n relevance: 0\n};\n\n/*\nLanguage: Java\nAuthor: Vsevolod Solovyov \nCategory: common, enterprise\nWebsite: https://www.java.com/\n*/\n\n\n/**\n * Allows recursive regex expressions to a given depth\n *\n * ie: recurRegex(\"(abc~~~)\", /~~~/g, 2) becomes:\n * (abc(abc(abc)))\n *\n * @param {string} re\n * @param {RegExp} substitution (should be a g mode regex)\n * @param {number} depth\n * @returns {string}``\n */\nfunction recurRegex(re, substitution, depth) {\n if (depth === -1) return \"\";\n\n return re.replace(substitution, _ => {\n return recurRegex(re, substitution, depth - 1);\n });\n}\n\n/** @type LanguageFn */\nfunction java(hljs) {\n const regex = hljs.regex;\n const JAVA_IDENT_RE = '[\\u00C0-\\u02B8a-zA-Z_$][\\u00C0-\\u02B8a-zA-Z_$0-9]*';\n const GENERIC_IDENT_RE = JAVA_IDENT_RE\n + recurRegex('(?:<' + JAVA_IDENT_RE + '~~~(?:\\\\s*,\\\\s*' + JAVA_IDENT_RE + '~~~)*>)?', /~~~/g, 2);\n const MAIN_KEYWORDS = [\n 'synchronized',\n 'abstract',\n 'private',\n 'var',\n 'static',\n 'if',\n 'const ',\n 'for',\n 'while',\n 'strictfp',\n 'finally',\n 'protected',\n 'import',\n 'native',\n 'final',\n 'void',\n 'enum',\n 'else',\n 'break',\n 'transient',\n 'catch',\n 'instanceof',\n 'volatile',\n 'case',\n 'assert',\n 'package',\n 'default',\n 'public',\n 'try',\n 'switch',\n 'continue',\n 'throws',\n 'protected',\n 'public',\n 'private',\n 'module',\n 'requires',\n 'exports',\n 'do',\n 'sealed',\n 'yield',\n 'permits',\n 'goto',\n 'when'\n ];\n\n const BUILT_INS = [\n 'super',\n 'this'\n ];\n\n const LITERALS = [\n 'false',\n 'true',\n 'null'\n ];\n\n const TYPES = [\n 'char',\n 'boolean',\n 'long',\n 'float',\n 'int',\n 'byte',\n 'short',\n 'double'\n ];\n\n const KEYWORDS = {\n keyword: MAIN_KEYWORDS,\n literal: LITERALS,\n type: TYPES,\n built_in: BUILT_INS\n };\n\n const ANNOTATION = {\n className: 'meta',\n begin: '@' + JAVA_IDENT_RE,\n contains: [\n {\n begin: /\\(/,\n end: /\\)/,\n contains: [ \"self\" ] // allow nested () inside our annotation\n }\n ]\n };\n const PARAMS = {\n className: 'params',\n begin: /\\(/,\n end: /\\)/,\n keywords: KEYWORDS,\n relevance: 0,\n contains: [ hljs.C_BLOCK_COMMENT_MODE ],\n endsParent: true\n };\n\n return {\n name: 'Java',\n aliases: [ 'jsp' ],\n keywords: KEYWORDS,\n illegal: /<\\/|#/,\n contains: [\n hljs.COMMENT(\n '/\\\\*\\\\*',\n '\\\\*/',\n {\n relevance: 0,\n contains: [\n {\n // eat up @'s in emails to prevent them to be recognized as doctags\n begin: /\\w+@/,\n relevance: 0\n },\n {\n className: 'doctag',\n begin: '@[A-Za-z]+'\n }\n ]\n }\n ),\n // relevance boost\n {\n begin: /import java\\.[a-z]+\\./,\n keywords: \"import\",\n relevance: 2\n },\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE,\n {\n begin: /\"\"\"/,\n end: /\"\"\"/,\n className: \"string\",\n contains: [ hljs.BACKSLASH_ESCAPE ]\n },\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE,\n {\n match: [\n /\\b(?:class|interface|enum|extends|implements|new)/,\n /\\s+/,\n JAVA_IDENT_RE\n ],\n className: {\n 1: \"keyword\",\n 3: \"title.class\"\n }\n },\n {\n // Exceptions for hyphenated keywords\n match: /non-sealed/,\n scope: \"keyword\"\n },\n {\n begin: [\n regex.concat(/(?!else)/, JAVA_IDENT_RE),\n /\\s+/,\n JAVA_IDENT_RE,\n /\\s+/,\n /=(?!=)/\n ],\n className: {\n 1: \"type\",\n 3: \"variable\",\n 5: \"operator\"\n }\n },\n {\n begin: [\n /record/,\n /\\s+/,\n JAVA_IDENT_RE\n ],\n className: {\n 1: \"keyword\",\n 3: \"title.class\"\n },\n contains: [\n PARAMS,\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE\n ]\n },\n {\n // Expression keywords prevent 'keyword Name(...)' from being\n // recognized as a function definition\n beginKeywords: 'new throw return else',\n relevance: 0\n },\n {\n begin: [\n '(?:' + GENERIC_IDENT_RE + '\\\\s+)',\n hljs.UNDERSCORE_IDENT_RE,\n /\\s*(?=\\()/\n ],\n className: { 2: \"title.function\" },\n keywords: KEYWORDS,\n contains: [\n {\n className: 'params',\n begin: /\\(/,\n end: /\\)/,\n keywords: KEYWORDS,\n relevance: 0,\n contains: [\n ANNOTATION,\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE,\n NUMERIC,\n hljs.C_BLOCK_COMMENT_MODE\n ]\n },\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE\n ]\n },\n NUMERIC,\n ANNOTATION\n ]\n };\n}\n\nmodule.exports = java;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTYxNy5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0Esa0JBQWtCLGNBQWM7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTSxlQUFlLGNBQWMsS0FBSyxLQUFLLFdBQVcsS0FBSztBQUM3RCxtQkFBbUIsY0FBYyxjQUFjO0FBQy9DO0FBQ0EsTUFBTSxjQUFjLGNBQWMsS0FBSyxLQUFLLCtCQUErQjtBQUMzRSxNQUFNLFdBQVcsS0FBSyxjQUFjO0FBQ3BDLE1BQU0sY0FBYyxjQUFjLGFBQWE7O0FBRS9DO0FBQ0EsTUFBTSxvQkFBb0IsVUFBVSxTQUFTLFVBQVUsUUFBUSxVQUFVO0FBQ3pFLG1CQUFtQixjQUFjLGNBQWM7O0FBRS9DO0FBQ0EsTUFBTSx5Q0FBeUM7O0FBRS9DO0FBQ0EsTUFBTSxtQkFBbUIsVUFBVSxZQUFZOztBQUUvQztBQUNBLE1BQU0saUNBQWlDOztBQUV2QztBQUNBLE1BQU0sd0NBQXdDO0FBQzlDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CLGFBQWEsT0FBTztBQUNwQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIscUJBQXFCO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL29ic2lkaWFuLW1pbmRtYXAtbmV4dGdlbi8uL25vZGVfbW9kdWxlcy8ucG5wbS9oaWdobGlnaHQuanNAMTEuMTEuMS9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvamF2YS5qcz8wMzY2Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vZG9jcy5vcmFjbGUuY29tL2phdmFzZS9zcGVjcy9qbHMvc2UxNS9odG1sL2pscy0zLmh0bWwjamxzLTMuMTBcbnZhciBkZWNpbWFsRGlnaXRzID0gJ1swLTldKF8qWzAtOV0pKic7XG52YXIgZnJhYyA9IGBcXFxcLigke2RlY2ltYWxEaWdpdHN9KWA7XG52YXIgaGV4RGlnaXRzID0gJ1swLTlhLWZBLUZdKF8qWzAtOWEtZkEtRl0pKic7XG52YXIgTlVNRVJJQyA9IHtcbiAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgdmFyaWFudHM6IFtcbiAgICAvLyBEZWNpbWFsRmxvYXRpbmdQb2ludExpdGVyYWxcbiAgICAvLyBpbmNsdWRpbmcgRXhwb25lbnRQYXJ0XG4gICAgeyBiZWdpbjogYChcXFxcYigke2RlY2ltYWxEaWdpdHN9KSgoJHtmcmFjfSl8XFxcXC4pP3woJHtmcmFjfSkpYCArXG4gICAgICBgW2VFXVsrLV0/KCR7ZGVjaW1hbERpZ2l0c30pW2ZGZERdP1xcXFxiYCB9LFxuICAgIC8vIGV4Y2x1ZGluZyBFeHBvbmVudFBhcnRcbiAgICB7IGJlZ2luOiBgXFxcXGIoJHtkZWNpbWFsRGlnaXRzfSkoKCR7ZnJhY30pW2ZGZERdP1xcXFxifFxcXFwuKFtmRmREXVxcXFxiKT8pYCB9LFxuICAgIHsgYmVnaW46IGAoJHtmcmFjfSlbZkZkRF0/XFxcXGJgIH0sXG4gICAgeyBiZWdpbjogYFxcXFxiKCR7ZGVjaW1hbERpZ2l0c30pW2ZGZERdXFxcXGJgIH0sXG5cbiAgICAvLyBIZXhhZGVjaW1hbEZsb2F0aW5nUG9pbnRMaXRlcmFsXG4gICAgeyBiZWdpbjogYFxcXFxiMFt4WF0oKCR7aGV4RGlnaXRzfSlcXFxcLj98KCR7aGV4RGlnaXRzfSk/XFxcXC4oJHtoZXhEaWdpdHN9KSlgICtcbiAgICAgIGBbcFBdWystXT8oJHtkZWNpbWFsRGlnaXRzfSlbZkZkRF0/XFxcXGJgIH0sXG5cbiAgICAvLyBEZWNpbWFsSW50ZWdlckxpdGVyYWxcbiAgICB7IGJlZ2luOiAnXFxcXGIoMHxbMS05XShfKlswLTldKSopW2xMXT9cXFxcYicgfSxcblxuICAgIC8vIEhleEludGVnZXJMaXRlcmFsXG4gICAgeyBiZWdpbjogYFxcXFxiMFt4WF0oJHtoZXhEaWdpdHN9KVtsTF0/XFxcXGJgIH0sXG5cbiAgICAvLyBPY3RhbEludGVnZXJMaXRlcmFsXG4gICAgeyBiZWdpbjogJ1xcXFxiMChfKlswLTddKSpbbExdP1xcXFxiJyB9LFxuXG4gICAgLy8gQmluYXJ5SW50ZWdlckxpdGVyYWxcbiAgICB7IGJlZ2luOiAnXFxcXGIwW2JCXVswMV0oXypbMDFdKSpbbExdP1xcXFxiJyB9LFxuICBdLFxuICByZWxldmFuY2U6IDBcbn07XG5cbi8qXG5MYW5ndWFnZTogSmF2YVxuQXV0aG9yOiBWc2V2b2xvZCBTb2xvdnlvdiA8dnNldm9sb2Quc29sb3Z5b3ZAZ21haWwuY29tPlxuQ2F0ZWdvcnk6IGNvbW1vbiwgZW50ZXJwcmlzZVxuV2Vic2l0ZTogaHR0cHM6Ly93d3cuamF2YS5jb20vXG4qL1xuXG5cbi8qKlxuICogQWxsb3dzIHJlY3Vyc2l2ZSByZWdleCBleHByZXNzaW9ucyB0byBhIGdpdmVuIGRlcHRoXG4gKlxuICogaWU6IHJlY3VyUmVnZXgoXCIoYWJjfn5+KVwiLCAvfn5+L2csIDIpIGJlY29tZXM6XG4gKiAoYWJjKGFiYyhhYmMpKSlcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVcbiAqIEBwYXJhbSB7UmVnRXhwfSBzdWJzdGl0dXRpb24gKHNob3VsZCBiZSBhIGcgbW9kZSByZWdleClcbiAqIEBwYXJhbSB7bnVtYmVyfSBkZXB0aFxuICogQHJldHVybnMge3N0cmluZ31gYFxuICovXG5mdW5jdGlvbiByZWN1clJlZ2V4KHJlLCBzdWJzdGl0dXRpb24sIGRlcHRoKSB7XG4gIGlmIChkZXB0aCA9PT0gLTEpIHJldHVybiBcIlwiO1xuXG4gIHJldHVybiByZS5yZXBsYWNlKHN1YnN0aXR1dGlvbiwgXyA9PiB7XG4gICAgcmV0dXJuIHJlY3VyUmVnZXgocmUsIHN1YnN0aXR1dGlvbiwgZGVwdGggLSAxKTtcbiAgfSk7XG59XG5cbi8qKiBAdHlwZSBMYW5ndWFnZUZuICovXG5mdW5jdGlvbiBqYXZhKGhsanMpIHtcbiAgY29uc3QgcmVnZXggPSBobGpzLnJlZ2V4O1xuICBjb25zdCBKQVZBX0lERU5UX1JFID0gJ1tcXHUwMEMwLVxcdTAyQjhhLXpBLVpfJF1bXFx1MDBDMC1cXHUwMkI4YS16QS1aXyQwLTldKic7XG4gIGNvbnN0IEdFTkVSSUNfSURFTlRfUkUgPSBKQVZBX0lERU5UX1JFXG4gICAgKyByZWN1clJlZ2V4KCcoPzo8JyArIEpBVkFfSURFTlRfUkUgKyAnfn5+KD86XFxcXHMqLFxcXFxzKicgKyBKQVZBX0lERU5UX1JFICsgJ35+fikqPik/JywgL35+fi9nLCAyKTtcbiAgY29uc3QgTUFJTl9LRVlXT1JEUyA9IFtcbiAgICAnc3luY2hyb25pemVkJyxcbiAgICAnYWJzdHJhY3QnLFxuICAgICdwcml2YXRlJyxcbiAgICAndmFyJyxcbiAgICAnc3RhdGljJyxcbiAgICAnaWYnLFxuICAgICdjb25zdCAnLFxuICAgICdmb3InLFxuICAgICd3aGlsZScsXG4gICAgJ3N0cmljdGZwJyxcbiAgICAnZmluYWxseScsXG4gICAgJ3Byb3RlY3RlZCcsXG4gICAgJ2ltcG9ydCcsXG4gICAgJ25hdGl2ZScsXG4gICAgJ2ZpbmFsJyxcbiAgICAndm9pZCcsXG4gICAgJ2VudW0nLFxuICAgICdlbHNlJyxcbiAgICAnYnJlYWsnLFxuICAgICd0cmFuc2llbnQnLFxuICAgICdjYXRjaCcsXG4gICAgJ2luc3RhbmNlb2YnLFxuICAgICd2b2xhdGlsZScsXG4gICAgJ2Nhc2UnLFxuICAgICdhc3NlcnQnLFxuICAgICdwYWNrYWdlJyxcbiAgICAnZGVmYXVsdCcsXG4gICAgJ3B1YmxpYycsXG4gICAgJ3RyeScsXG4gICAgJ3N3aXRjaCcsXG4gICAgJ2NvbnRpbnVlJyxcbiAgICAndGhyb3dzJyxcbiAgICAncHJvdGVjdGVkJyxcbiAgICAncHVibGljJyxcbiAgICAncHJpdmF0ZScsXG4gICAgJ21vZHVsZScsXG4gICAgJ3JlcXVpcmVzJyxcbiAgICAnZXhwb3J0cycsXG4gICAgJ2RvJyxcbiAgICAnc2VhbGVkJyxcbiAgICAneWllbGQnLFxuICAgICdwZXJtaXRzJyxcbiAgICAnZ290bycsXG4gICAgJ3doZW4nXG4gIF07XG5cbiAgY29uc3QgQlVJTFRfSU5TID0gW1xuICAgICdzdXBlcicsXG4gICAgJ3RoaXMnXG4gIF07XG5cbiAgY29uc3QgTElURVJBTFMgPSBbXG4gICAgJ2ZhbHNlJyxcbiAgICAndHJ1ZScsXG4gICAgJ251bGwnXG4gIF07XG5cbiAgY29uc3QgVFlQRVMgPSBbXG4gICAgJ2NoYXInLFxuICAgICdib29sZWFuJyxcbiAgICAnbG9uZycsXG4gICAgJ2Zsb2F0JyxcbiAgICAnaW50JyxcbiAgICAnYnl0ZScsXG4gICAgJ3Nob3J0JyxcbiAgICAnZG91YmxlJ1xuICBdO1xuXG4gIGNvbnN0IEtFWVdPUkRTID0ge1xuICAgIGtleXdvcmQ6IE1BSU5fS0VZV09SRFMsXG4gICAgbGl0ZXJhbDogTElURVJBTFMsXG4gICAgdHlwZTogVFlQRVMsXG4gICAgYnVpbHRfaW46IEJVSUxUX0lOU1xuICB9O1xuXG4gIGNvbnN0IEFOTk9UQVRJT04gPSB7XG4gICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgYmVnaW46ICdAJyArIEpBVkFfSURFTlRfUkUsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC9cXCgvLFxuICAgICAgICBlbmQ6IC9cXCkvLFxuICAgICAgICBjb250YWluczogWyBcInNlbGZcIiBdIC8vIGFsbG93IG5lc3RlZCAoKSBpbnNpZGUgb3VyIGFubm90YXRpb25cbiAgICAgIH1cbiAgICBdXG4gIH07XG4gIGNvbnN0IFBBUkFNUyA9IHtcbiAgICBjbGFzc05hbWU6ICdwYXJhbXMnLFxuICAgIGJlZ2luOiAvXFwoLyxcbiAgICBlbmQ6IC9cXCkvLFxuICAgIGtleXdvcmRzOiBLRVlXT1JEUyxcbiAgICByZWxldmFuY2U6IDAsXG4gICAgY29udGFpbnM6IFsgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSBdLFxuICAgIGVuZHNQYXJlbnQ6IHRydWVcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdKYXZhJyxcbiAgICBhbGlhc2VzOiBbICdqc3AnIF0sXG4gICAga2V5d29yZHM6IEtFWVdPUkRTLFxuICAgIGlsbGVnYWw6IC88XFwvfCMvLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkNPTU1FTlQoXG4gICAgICAgICcvXFxcXCpcXFxcKicsXG4gICAgICAgICdcXFxcKi8nLFxuICAgICAgICB7XG4gICAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIC8vIGVhdCB1cCBAJ3MgaW4gZW1haWxzIHRvIHByZXZlbnQgdGhlbSB0byBiZSByZWNvZ25pemVkIGFzIGRvY3RhZ3NcbiAgICAgICAgICAgICAgYmVnaW46IC9cXHcrQC8sXG4gICAgICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnZG9jdGFnJyxcbiAgICAgICAgICAgICAgYmVnaW46ICdAW0EtWmEtel0rJ1xuICAgICAgICAgICAgfVxuICAgICAgICAgIF1cbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIC8vIHJlbGV2YW5jZSBib29zdFxuICAgICAge1xuICAgICAgICBiZWdpbjogL2ltcG9ydCBqYXZhXFwuW2Etel0rXFwuLyxcbiAgICAgICAga2V5d29yZHM6IFwiaW1wb3J0XCIsXG4gICAgICAgIHJlbGV2YW5jZTogMlxuICAgICAgfSxcbiAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvXCJcIlwiLyxcbiAgICAgICAgZW5kOiAvXCJcIlwiLyxcbiAgICAgICAgY2xhc3NOYW1lOiBcInN0cmluZ1wiLFxuICAgICAgICBjb250YWluczogWyBobGpzLkJBQ0tTTEFTSF9FU0NBUEUgXVxuICAgICAgfSxcbiAgICAgIGhsanMuQVBPU19TVFJJTkdfTU9ERSxcbiAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICB7XG4gICAgICAgIG1hdGNoOiBbXG4gICAgICAgICAgL1xcYig/OmNsYXNzfGludGVyZmFjZXxlbnVtfGV4dGVuZHN8aW1wbGVtZW50c3xuZXcpLyxcbiAgICAgICAgICAvXFxzKy8sXG4gICAgICAgICAgSkFWQV9JREVOVF9SRVxuICAgICAgICBdLFxuICAgICAgICBjbGFzc05hbWU6IHtcbiAgICAgICAgICAxOiBcImtleXdvcmRcIixcbiAgICAgICAgICAzOiBcInRpdGxlLmNsYXNzXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgLy8gRXhjZXB0aW9ucyBmb3IgaHlwaGVuYXRlZCBrZXl3b3Jkc1xuICAgICAgICBtYXRjaDogL25vbi1zZWFsZWQvLFxuICAgICAgICBzY29wZTogXCJrZXl3b3JkXCJcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiBbXG4gICAgICAgICAgcmVnZXguY29uY2F0KC8oPyFlbHNlKS8sIEpBVkFfSURFTlRfUkUpLFxuICAgICAgICAgIC9cXHMrLyxcbiAgICAgICAgICBKQVZBX0lERU5UX1JFLFxuICAgICAgICAgIC9cXHMrLyxcbiAgICAgICAgICAvPSg/IT0pL1xuICAgICAgICBdLFxuICAgICAgICBjbGFzc05hbWU6IHtcbiAgICAgICAgICAxOiBcInR5cGVcIixcbiAgICAgICAgICAzOiBcInZhcmlhYmxlXCIsXG4gICAgICAgICAgNTogXCJvcGVyYXRvclwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiBbXG4gICAgICAgICAgL3JlY29yZC8sXG4gICAgICAgICAgL1xccysvLFxuICAgICAgICAgIEpBVkFfSURFTlRfUkVcbiAgICAgICAgXSxcbiAgICAgICAgY2xhc3NOYW1lOiB7XG4gICAgICAgICAgMTogXCJrZXl3b3JkXCIsXG4gICAgICAgICAgMzogXCJ0aXRsZS5jbGFzc1wiXG4gICAgICAgIH0sXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgUEFSQU1TLFxuICAgICAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIC8vIEV4cHJlc3Npb24ga2V5d29yZHMgcHJldmVudCAna2V5d29yZCBOYW1lKC4uLiknIGZyb20gYmVpbmdcbiAgICAgICAgLy8gcmVjb2duaXplZCBhcyBhIGZ1bmN0aW9uIGRlZmluaXRpb25cbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ25ldyB0aHJvdyByZXR1cm4gZWxzZScsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IFtcbiAgICAgICAgICAnKD86JyArIEdFTkVSSUNfSURFTlRfUkUgKyAnXFxcXHMrKScsXG4gICAgICAgICAgaGxqcy5VTkRFUlNDT1JFX0lERU5UX1JFLFxuICAgICAgICAgIC9cXHMqKD89XFwoKS9cbiAgICAgICAgXSxcbiAgICAgICAgY2xhc3NOYW1lOiB7IDI6IFwidGl0bGUuZnVuY3Rpb25cIiB9LFxuICAgICAgICBrZXl3b3JkczogS0VZV09SRFMsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAncGFyYW1zJyxcbiAgICAgICAgICAgIGJlZ2luOiAvXFwoLyxcbiAgICAgICAgICAgIGVuZDogL1xcKS8sXG4gICAgICAgICAgICBrZXl3b3JkczogS0VZV09SRFMsXG4gICAgICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICAgICBBTk5PVEFUSU9OLFxuICAgICAgICAgICAgICBobGpzLkFQT1NfU1RSSU5HX01PREUsXG4gICAgICAgICAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICAgICAgICAgIE5VTUVSSUMsXG4gICAgICAgICAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREVcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBOVU1FUklDLFxuICAgICAgQU5OT1RBVElPTlxuICAgIF1cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBqYXZhO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1617\n")},1626:module=>{eval("/*\nLanguage: OpenSCAD\nAuthor: Dan Panzarella \nDescription: OpenSCAD is a language for the 3D CAD modeling software of the same name.\nWebsite: https://www.openscad.org\nCategory: scientific\n*/\n\nfunction openscad(hljs) {\n const SPECIAL_VARS = {\n className: 'keyword',\n begin: '\\\\$(f[asn]|t|vp[rtd]|children)'\n };\n const LITERALS = {\n className: 'literal',\n begin: 'false|true|PI|undef'\n };\n const NUMBERS = {\n className: 'number',\n begin: '\\\\b\\\\d+(\\\\.\\\\d+)?(e-?\\\\d+)?', // adds 1e5, 1e-10\n relevance: 0\n };\n const STRING = hljs.inherit(hljs.QUOTE_STRING_MODE, { illegal: null });\n const PREPRO = {\n className: 'meta',\n keywords: { keyword: 'include use' },\n begin: 'include|use <',\n end: '>'\n };\n const PARAMS = {\n className: 'params',\n begin: '\\\\(',\n end: '\\\\)',\n contains: [\n 'self',\n NUMBERS,\n STRING,\n SPECIAL_VARS,\n LITERALS\n ]\n };\n const MODIFIERS = {\n begin: '[*!#%]',\n relevance: 0\n };\n const FUNCTIONS = {\n className: 'function',\n beginKeywords: 'module function',\n end: /=|\\{/,\n contains: [\n PARAMS,\n hljs.UNDERSCORE_TITLE_MODE\n ]\n };\n\n return {\n name: 'OpenSCAD',\n aliases: [ 'scad' ],\n keywords: {\n keyword: 'function module include use for intersection_for if else \\\\%',\n literal: 'false true PI undef',\n built_in: 'circle square polygon text sphere cube cylinder polyhedron translate rotate scale resize mirror multmatrix color offset hull minkowski union difference intersection abs sign sin cos tan acos asin atan atan2 floor round ceil ln log pow sqrt exp rands min max concat lookup str chr search version version_num norm cross parent_module echo import import_dxf dxf_linear_extrude linear_extrude rotate_extrude surface projection render children dxf_cross dxf_dim let assign'\n },\n contains: [\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE,\n NUMBERS,\n PREPRO,\n STRING,\n SPECIAL_VARS,\n MODIFIERS,\n FUNCTIONS\n ]\n };\n}\n\nmodule.exports = openscad;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTYyNi5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0RBQXdELGVBQWU7QUFDdkU7QUFDQTtBQUNBLGdCQUFnQix3QkFBd0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9vYnNpZGlhbi1taW5kbWFwLW5leHRnZW4vLi9ub2RlX21vZHVsZXMvLnBucG0vaGlnaGxpZ2h0LmpzQDExLjExLjEvbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL29wZW5zY2FkLmpzP2VjNDQiXSwic291cmNlc0NvbnRlbnQiOlsiLypcbkxhbmd1YWdlOiBPcGVuU0NBRFxuQXV0aG9yOiBEYW4gUGFuemFyZWxsYSA8YWxzb2VscEBnbWFpbC5jb20+XG5EZXNjcmlwdGlvbjogT3BlblNDQUQgaXMgYSBsYW5ndWFnZSBmb3IgdGhlIDNEIENBRCBtb2RlbGluZyBzb2Z0d2FyZSBvZiB0aGUgc2FtZSBuYW1lLlxuV2Vic2l0ZTogaHR0cHM6Ly93d3cub3BlbnNjYWQub3JnXG5DYXRlZ29yeTogc2NpZW50aWZpY1xuKi9cblxuZnVuY3Rpb24gb3BlbnNjYWQoaGxqcykge1xuICBjb25zdCBTUEVDSUFMX1ZBUlMgPSB7XG4gICAgY2xhc3NOYW1lOiAna2V5d29yZCcsXG4gICAgYmVnaW46ICdcXFxcJChmW2Fzbl18dHx2cFtydGRdfGNoaWxkcmVuKSdcbiAgfTtcbiAgY29uc3QgTElURVJBTFMgPSB7XG4gICAgY2xhc3NOYW1lOiAnbGl0ZXJhbCcsXG4gICAgYmVnaW46ICdmYWxzZXx0cnVlfFBJfHVuZGVmJ1xuICB9O1xuICBjb25zdCBOVU1CRVJTID0ge1xuICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgYmVnaW46ICdcXFxcYlxcXFxkKyhcXFxcLlxcXFxkKyk/KGUtP1xcXFxkKyk/JywgLy8gYWRkcyAxZTUsIDFlLTEwXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG4gIGNvbnN0IFNUUklORyA9IGhsanMuaW5oZXJpdChobGpzLlFVT1RFX1NUUklOR19NT0RFLCB7IGlsbGVnYWw6IG51bGwgfSk7XG4gIGNvbnN0IFBSRVBSTyA9IHtcbiAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICBrZXl3b3JkczogeyBrZXl3b3JkOiAnaW5jbHVkZSB1c2UnIH0sXG4gICAgYmVnaW46ICdpbmNsdWRlfHVzZSA8JyxcbiAgICBlbmQ6ICc+J1xuICB9O1xuICBjb25zdCBQQVJBTVMgPSB7XG4gICAgY2xhc3NOYW1lOiAncGFyYW1zJyxcbiAgICBiZWdpbjogJ1xcXFwoJyxcbiAgICBlbmQ6ICdcXFxcKScsXG4gICAgY29udGFpbnM6IFtcbiAgICAgICdzZWxmJyxcbiAgICAgIE5VTUJFUlMsXG4gICAgICBTVFJJTkcsXG4gICAgICBTUEVDSUFMX1ZBUlMsXG4gICAgICBMSVRFUkFMU1xuICAgIF1cbiAgfTtcbiAgY29uc3QgTU9ESUZJRVJTID0ge1xuICAgIGJlZ2luOiAnWyohIyVdJyxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcbiAgY29uc3QgRlVOQ1RJT05TID0ge1xuICAgIGNsYXNzTmFtZTogJ2Z1bmN0aW9uJyxcbiAgICBiZWdpbktleXdvcmRzOiAnbW9kdWxlIGZ1bmN0aW9uJyxcbiAgICBlbmQ6IC89fFxcey8sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIFBBUkFNUyxcbiAgICAgIGhsanMuVU5ERVJTQ09SRV9USVRMRV9NT0RFXG4gICAgXVxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogJ09wZW5TQ0FEJyxcbiAgICBhbGlhc2VzOiBbICdzY2FkJyBdLFxuICAgIGtleXdvcmRzOiB7XG4gICAgICBrZXl3b3JkOiAnZnVuY3Rpb24gbW9kdWxlIGluY2x1ZGUgdXNlIGZvciBpbnRlcnNlY3Rpb25fZm9yIGlmIGVsc2UgXFxcXCUnLFxuICAgICAgbGl0ZXJhbDogJ2ZhbHNlIHRydWUgUEkgdW5kZWYnLFxuICAgICAgYnVpbHRfaW46ICdjaXJjbGUgc3F1YXJlIHBvbHlnb24gdGV4dCBzcGhlcmUgY3ViZSBjeWxpbmRlciBwb2x5aGVkcm9uIHRyYW5zbGF0ZSByb3RhdGUgc2NhbGUgcmVzaXplIG1pcnJvciBtdWx0bWF0cml4IGNvbG9yIG9mZnNldCBodWxsIG1pbmtvd3NraSB1bmlvbiBkaWZmZXJlbmNlIGludGVyc2VjdGlvbiBhYnMgc2lnbiBzaW4gY29zIHRhbiBhY29zIGFzaW4gYXRhbiBhdGFuMiBmbG9vciByb3VuZCBjZWlsIGxuIGxvZyBwb3cgc3FydCBleHAgcmFuZHMgbWluIG1heCBjb25jYXQgbG9va3VwIHN0ciBjaHIgc2VhcmNoIHZlcnNpb24gdmVyc2lvbl9udW0gbm9ybSBjcm9zcyBwYXJlbnRfbW9kdWxlIGVjaG8gaW1wb3J0IGltcG9ydF9keGYgZHhmX2xpbmVhcl9leHRydWRlIGxpbmVhcl9leHRydWRlIHJvdGF0ZV9leHRydWRlIHN1cmZhY2UgcHJvamVjdGlvbiByZW5kZXIgY2hpbGRyZW4gZHhmX2Nyb3NzIGR4Zl9kaW0gbGV0IGFzc2lnbidcbiAgICB9LFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgTlVNQkVSUyxcbiAgICAgIFBSRVBSTyxcbiAgICAgIFNUUklORyxcbiAgICAgIFNQRUNJQUxfVkFSUyxcbiAgICAgIE1PRElGSUVSUyxcbiAgICAgIEZVTkNUSU9OU1xuICAgIF1cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBvcGVuc2NhZDtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1626\n")},1627:module=>{eval("/*\nLanguage: MIPS Assembly\nAuthor: Nebuleon Fumika \nDescription: MIPS Assembly (up to MIPS32R2)\nWebsite: https://en.wikipedia.org/wiki/MIPS_architecture\nCategory: assembler\n*/\n\nfunction mipsasm(hljs) {\n // local labels: %?[FB]?[AT]?\\d{1,2}\\w+\n return {\n name: 'MIPS Assembly',\n case_insensitive: true,\n aliases: [ 'mips' ],\n keywords: {\n $pattern: '\\\\.?' + hljs.IDENT_RE,\n meta:\n // GNU preprocs\n '.2byte .4byte .align .ascii .asciz .balign .byte .code .data .else .end .endif .endm .endr .equ .err .exitm .extern .global .hword .if .ifdef .ifndef .include .irp .long .macro .rept .req .section .set .skip .space .text .word .ltorg ',\n built_in:\n '$0 $1 $2 $3 $4 $5 $6 $7 $8 $9 $10 $11 $12 $13 $14 $15 ' // integer registers\n + '$16 $17 $18 $19 $20 $21 $22 $23 $24 $25 $26 $27 $28 $29 $30 $31 ' // integer registers\n + 'zero at v0 v1 a0 a1 a2 a3 a4 a5 a6 a7 ' // integer register aliases\n + 't0 t1 t2 t3 t4 t5 t6 t7 t8 t9 s0 s1 s2 s3 s4 s5 s6 s7 s8 ' // integer register aliases\n + 'k0 k1 gp sp fp ra ' // integer register aliases\n + '$f0 $f1 $f2 $f2 $f4 $f5 $f6 $f7 $f8 $f9 $f10 $f11 $f12 $f13 $f14 $f15 ' // floating-point registers\n + '$f16 $f17 $f18 $f19 $f20 $f21 $f22 $f23 $f24 $f25 $f26 $f27 $f28 $f29 $f30 $f31 ' // floating-point registers\n + 'Context Random EntryLo0 EntryLo1 Context PageMask Wired EntryHi ' // Coprocessor 0 registers\n + 'HWREna BadVAddr Count Compare SR IntCtl SRSCtl SRSMap Cause EPC PRId ' // Coprocessor 0 registers\n + 'EBase Config Config1 Config2 Config3 LLAddr Debug DEPC DESAVE CacheErr ' // Coprocessor 0 registers\n + 'ECC ErrorEPC TagLo DataLo TagHi DataHi WatchLo WatchHi PerfCtl PerfCnt ' // Coprocessor 0 registers\n },\n contains: [\n {\n className: 'keyword',\n begin: '\\\\b(' // mnemonics\n // 32-bit integer instructions\n + 'addi?u?|andi?|b(al)?|beql?|bgez(al)?l?|bgtzl?|blezl?|bltz(al)?l?|'\n + 'bnel?|cl[oz]|divu?|ext|ins|j(al)?|jalr(\\\\.hb)?|jr(\\\\.hb)?|lbu?|lhu?|'\n + 'll|lui|lw[lr]?|maddu?|mfhi|mflo|movn|movz|move|msubu?|mthi|mtlo|mul|'\n + 'multu?|nop|nor|ori?|rotrv?|sb|sc|se[bh]|sh|sllv?|slti?u?|srav?|'\n + 'srlv?|subu?|sw[lr]?|xori?|wsbh|'\n // floating-point instructions\n + 'abs\\\\.[sd]|add\\\\.[sd]|alnv.ps|bc1[ft]l?|'\n + 'c\\\\.(s?f|un|u?eq|[ou]lt|[ou]le|ngle?|seq|l[et]|ng[et])\\\\.[sd]|'\n + '(ceil|floor|round|trunc)\\\\.[lw]\\\\.[sd]|cfc1|cvt\\\\.d\\\\.[lsw]|'\n + 'cvt\\\\.l\\\\.[dsw]|cvt\\\\.ps\\\\.s|cvt\\\\.s\\\\.[dlw]|cvt\\\\.s\\\\.p[lu]|cvt\\\\.w\\\\.[dls]|'\n + 'div\\\\.[ds]|ldx?c1|luxc1|lwx?c1|madd\\\\.[sd]|mfc1|mov[fntz]?\\\\.[ds]|'\n + 'msub\\\\.[sd]|mth?c1|mul\\\\.[ds]|neg\\\\.[ds]|nmadd\\\\.[ds]|nmsub\\\\.[ds]|'\n + 'p[lu][lu]\\\\.ps|recip\\\\.fmt|r?sqrt\\\\.[ds]|sdx?c1|sub\\\\.[ds]|suxc1|'\n + 'swx?c1|'\n // system control instructions\n + 'break|cache|d?eret|[de]i|ehb|mfc0|mtc0|pause|prefx?|rdhwr|'\n + 'rdpgpr|sdbbp|ssnop|synci?|syscall|teqi?|tgei?u?|tlb(p|r|w[ir])|'\n + 'tlti?u?|tnei?|wait|wrpgpr'\n + ')',\n end: '\\\\s'\n },\n // lines ending with ; or # aren't really comments, probably auto-detect fail\n hljs.COMMENT('[;#](?!\\\\s*$)', '$'),\n hljs.C_BLOCK_COMMENT_MODE,\n hljs.QUOTE_STRING_MODE,\n {\n className: 'string',\n begin: '\\'',\n end: '[^\\\\\\\\]\\'',\n relevance: 0\n },\n {\n className: 'title',\n begin: '\\\\|',\n end: '\\\\|',\n illegal: '\\\\n',\n relevance: 0\n },\n {\n className: 'number',\n variants: [\n { // hex\n begin: '0x[0-9a-f]+' },\n { // bare number\n begin: '\\\\b-?\\\\d+' }\n ],\n relevance: 0\n },\n {\n className: 'symbol',\n variants: [\n { // GNU MIPS syntax\n begin: '^\\\\s*[a-z_\\\\.\\\\$][a-z0-9_\\\\.\\\\$]+:' },\n { // numbered local labels\n begin: '^\\\\s*[0-9]+:' },\n { // number local label reference (backwards, forwards)\n begin: '[0-9]+[bf]' }\n ],\n relevance: 0\n }\n ],\n // forward slashes are not allowed\n illegal: /\\//\n };\n}\n\nmodule.exports = mipsasm;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTYyNy5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGtDQUFrQyxJQUFJO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCw2QkFBNkI7QUFDN0Isc0JBQXNCO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1osa0NBQWtDO0FBQ2xDLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaLHlEQUF5RDtBQUN6RCxZQUFZO0FBQ1osbUNBQW1DO0FBQ25DLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9vYnNpZGlhbi1taW5kbWFwLW5leHRnZW4vLi9ub2RlX21vZHVsZXMvLnBucG0vaGlnaGxpZ2h0LmpzQDExLjExLjEvbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL21pcHNhc20uanM/MDYwMyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuTGFuZ3VhZ2U6IE1JUFMgQXNzZW1ibHlcbkF1dGhvcjogTmVidWxlb24gRnVtaWthIDxuZWJ1bGVvbi5mdW1pa2FAZ21haWwuY29tPlxuRGVzY3JpcHRpb246IE1JUFMgQXNzZW1ibHkgKHVwIHRvIE1JUFMzMlIyKVxuV2Vic2l0ZTogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTUlQU19hcmNoaXRlY3R1cmVcbkNhdGVnb3J5OiBhc3NlbWJsZXJcbiovXG5cbmZ1bmN0aW9uIG1pcHNhc20oaGxqcykge1xuICAvLyBsb2NhbCBsYWJlbHM6ICU/W0ZCXT9bQVRdP1xcZHsxLDJ9XFx3K1xuICByZXR1cm4ge1xuICAgIG5hbWU6ICdNSVBTIEFzc2VtYmx5JyxcbiAgICBjYXNlX2luc2Vuc2l0aXZlOiB0cnVlLFxuICAgIGFsaWFzZXM6IFsgJ21pcHMnIF0sXG4gICAga2V5d29yZHM6IHtcbiAgICAgICRwYXR0ZXJuOiAnXFxcXC4/JyArIGhsanMuSURFTlRfUkUsXG4gICAgICBtZXRhOlxuICAgICAgICAvLyBHTlUgcHJlcHJvY3NcbiAgICAgICAgJy4yYnl0ZSAuNGJ5dGUgLmFsaWduIC5hc2NpaSAuYXNjaXogLmJhbGlnbiAuYnl0ZSAuY29kZSAuZGF0YSAuZWxzZSAuZW5kIC5lbmRpZiAuZW5kbSAuZW5kciAuZXF1IC5lcnIgLmV4aXRtIC5leHRlcm4gLmdsb2JhbCAuaHdvcmQgLmlmIC5pZmRlZiAuaWZuZGVmIC5pbmNsdWRlIC5pcnAgLmxvbmcgLm1hY3JvIC5yZXB0IC5yZXEgLnNlY3Rpb24gLnNldCAuc2tpcCAuc3BhY2UgLnRleHQgLndvcmQgLmx0b3JnICcsXG4gICAgICBidWlsdF9pbjpcbiAgICAgICAgJyQwICQxICQyICQzICQ0ICQ1ICQ2ICQ3ICQ4ICQ5ICQxMCAkMTEgJDEyICQxMyAkMTQgJDE1ICcgLy8gaW50ZWdlciByZWdpc3RlcnNcbiAgICAgICAgKyAnJDE2ICQxNyAkMTggJDE5ICQyMCAkMjEgJDIyICQyMyAkMjQgJDI1ICQyNiAkMjcgJDI4ICQyOSAkMzAgJDMxICcgLy8gaW50ZWdlciByZWdpc3RlcnNcbiAgICAgICAgKyAnemVybyBhdCB2MCB2MSBhMCBhMSBhMiBhMyBhNCBhNSBhNiBhNyAnIC8vIGludGVnZXIgcmVnaXN0ZXIgYWxpYXNlc1xuICAgICAgICArICd0MCB0MSB0MiB0MyB0NCB0NSB0NiB0NyB0OCB0OSBzMCBzMSBzMiBzMyBzNCBzNSBzNiBzNyBzOCAnIC8vIGludGVnZXIgcmVnaXN0ZXIgYWxpYXNlc1xuICAgICAgICArICdrMCBrMSBncCBzcCBmcCByYSAnIC8vIGludGVnZXIgcmVnaXN0ZXIgYWxpYXNlc1xuICAgICAgICArICckZjAgJGYxICRmMiAkZjIgJGY0ICRmNSAkZjYgJGY3ICRmOCAkZjkgJGYxMCAkZjExICRmMTIgJGYxMyAkZjE0ICRmMTUgJyAvLyBmbG9hdGluZy1wb2ludCByZWdpc3RlcnNcbiAgICAgICAgKyAnJGYxNiAkZjE3ICRmMTggJGYxOSAkZjIwICRmMjEgJGYyMiAkZjIzICRmMjQgJGYyNSAkZjI2ICRmMjcgJGYyOCAkZjI5ICRmMzAgJGYzMSAnIC8vIGZsb2F0aW5nLXBvaW50IHJlZ2lzdGVyc1xuICAgICAgICArICdDb250ZXh0IFJhbmRvbSBFbnRyeUxvMCBFbnRyeUxvMSBDb250ZXh0IFBhZ2VNYXNrIFdpcmVkIEVudHJ5SGkgJyAvLyBDb3Byb2Nlc3NvciAwIHJlZ2lzdGVyc1xuICAgICAgICArICdIV1JFbmEgQmFkVkFkZHIgQ291bnQgQ29tcGFyZSBTUiBJbnRDdGwgU1JTQ3RsIFNSU01hcCBDYXVzZSBFUEMgUFJJZCAnIC8vIENvcHJvY2Vzc29yIDAgcmVnaXN0ZXJzXG4gICAgICAgICsgJ0VCYXNlIENvbmZpZyBDb25maWcxIENvbmZpZzIgQ29uZmlnMyBMTEFkZHIgRGVidWcgREVQQyBERVNBVkUgQ2FjaGVFcnIgJyAvLyBDb3Byb2Nlc3NvciAwIHJlZ2lzdGVyc1xuICAgICAgICArICdFQ0MgRXJyb3JFUEMgVGFnTG8gRGF0YUxvIFRhZ0hpIERhdGFIaSBXYXRjaExvIFdhdGNoSGkgUGVyZkN0bCBQZXJmQ250ICcgLy8gQ29wcm9jZXNzb3IgMCByZWdpc3RlcnNcbiAgICB9LFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2tleXdvcmQnLFxuICAgICAgICBiZWdpbjogJ1xcXFxiKCcgLy8gbW5lbW9uaWNzXG4gICAgICAgICAgICAvLyAzMi1iaXQgaW50ZWdlciBpbnN0cnVjdGlvbnNcbiAgICAgICAgICAgICsgJ2FkZGk/dT98YW5kaT98YihhbCk/fGJlcWw/fGJnZXooYWwpP2w/fGJndHpsP3xibGV6bD98Ymx0eihhbCk/bD98J1xuICAgICAgICAgICAgKyAnYm5lbD98Y2xbb3pdfGRpdnU/fGV4dHxpbnN8aihhbCk/fGphbHIoXFxcXC5oYik/fGpyKFxcXFwuaGIpP3xsYnU/fGxodT98J1xuICAgICAgICAgICAgKyAnbGx8bHVpfGx3W2xyXT98bWFkZHU/fG1maGl8bWZsb3xtb3ZufG1vdnp8bW92ZXxtc3VidT98bXRoaXxtdGxvfG11bHwnXG4gICAgICAgICAgICArICdtdWx0dT98bm9wfG5vcnxvcmk/fHJvdHJ2P3xzYnxzY3xzZVtiaF18c2h8c2xsdj98c2x0aT91P3xzcmF2P3wnXG4gICAgICAgICAgICArICdzcmx2P3xzdWJ1P3xzd1tscl0/fHhvcmk/fHdzYmh8J1xuICAgICAgICAgICAgLy8gZmxvYXRpbmctcG9pbnQgaW5zdHJ1Y3Rpb25zXG4gICAgICAgICAgICArICdhYnNcXFxcLltzZF18YWRkXFxcXC5bc2RdfGFsbnYucHN8YmMxW2Z0XWw/fCdcbiAgICAgICAgICAgICsgJ2NcXFxcLihzP2Z8dW58dT9lcXxbb3VdbHR8W291XWxlfG5nbGU/fHNlcXxsW2V0XXxuZ1tldF0pXFxcXC5bc2RdfCdcbiAgICAgICAgICAgICsgJyhjZWlsfGZsb29yfHJvdW5kfHRydW5jKVxcXFwuW2x3XVxcXFwuW3NkXXxjZmMxfGN2dFxcXFwuZFxcXFwuW2xzd118J1xuICAgICAgICAgICAgKyAnY3Z0XFxcXC5sXFxcXC5bZHN3XXxjdnRcXFxcLnBzXFxcXC5zfGN2dFxcXFwuc1xcXFwuW2Rsd118Y3Z0XFxcXC5zXFxcXC5wW2x1XXxjdnRcXFxcLndcXFxcLltkbHNdfCdcbiAgICAgICAgICAgICsgJ2RpdlxcXFwuW2RzXXxsZHg/YzF8bHV4YzF8bHd4P2MxfG1hZGRcXFxcLltzZF18bWZjMXxtb3ZbZm50el0/XFxcXC5bZHNdfCdcbiAgICAgICAgICAgICsgJ21zdWJcXFxcLltzZF18bXRoP2MxfG11bFxcXFwuW2RzXXxuZWdcXFxcLltkc118bm1hZGRcXFxcLltkc118bm1zdWJcXFxcLltkc118J1xuICAgICAgICAgICAgKyAncFtsdV1bbHVdXFxcXC5wc3xyZWNpcFxcXFwuZm10fHI/c3FydFxcXFwuW2RzXXxzZHg/YzF8c3ViXFxcXC5bZHNdfHN1eGMxfCdcbiAgICAgICAgICAgICsgJ3N3eD9jMXwnXG4gICAgICAgICAgICAvLyBzeXN0ZW0gY29udHJvbCBpbnN0cnVjdGlvbnNcbiAgICAgICAgICAgICsgJ2JyZWFrfGNhY2hlfGQ/ZXJldHxbZGVdaXxlaGJ8bWZjMHxtdGMwfHBhdXNlfHByZWZ4P3xyZGh3cnwnXG4gICAgICAgICAgICArICdyZHBncHJ8c2RiYnB8c3Nub3B8c3luY2k/fHN5c2NhbGx8dGVxaT98dGdlaT91P3x0bGIocHxyfHdbaXJdKXwnXG4gICAgICAgICAgICArICd0bHRpP3U/fHRuZWk/fHdhaXR8d3JwZ3ByJ1xuICAgICAgICArICcpJyxcbiAgICAgICAgZW5kOiAnXFxcXHMnXG4gICAgICB9LFxuICAgICAgLy8gbGluZXMgZW5kaW5nIHdpdGggOyBvciAjIGFyZW4ndCByZWFsbHkgY29tbWVudHMsIHByb2JhYmx5IGF1dG8tZGV0ZWN0IGZhaWxcbiAgICAgIGhsanMuQ09NTUVOVCgnWzsjXSg/IVxcXFxzKiQpJywgJyQnKSxcbiAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICBiZWdpbjogJ1xcJycsXG4gICAgICAgIGVuZDogJ1teXFxcXFxcXFxdXFwnJyxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICd0aXRsZScsXG4gICAgICAgIGJlZ2luOiAnXFxcXHwnLFxuICAgICAgICBlbmQ6ICdcXFxcfCcsXG4gICAgICAgIGlsbGVnYWw6ICdcXFxcbicsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICB7IC8vIGhleFxuICAgICAgICAgICAgYmVnaW46ICcweFswLTlhLWZdKycgfSxcbiAgICAgICAgICB7IC8vIGJhcmUgbnVtYmVyXG4gICAgICAgICAgICBiZWdpbjogJ1xcXFxiLT9cXFxcZCsnIH1cbiAgICAgICAgXSxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzeW1ib2wnLFxuICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgIHsgLy8gR05VIE1JUFMgc3ludGF4XG4gICAgICAgICAgICBiZWdpbjogJ15cXFxccypbYS16X1xcXFwuXFxcXCRdW2EtejAtOV9cXFxcLlxcXFwkXSs6JyB9LFxuICAgICAgICAgIHsgLy8gbnVtYmVyZWQgbG9jYWwgbGFiZWxzXG4gICAgICAgICAgICBiZWdpbjogJ15cXFxccypbMC05XSs6JyB9LFxuICAgICAgICAgIHsgLy8gbnVtYmVyIGxvY2FsIGxhYmVsIHJlZmVyZW5jZSAoYmFja3dhcmRzLCBmb3J3YXJkcylcbiAgICAgICAgICAgIGJlZ2luOiAnWzAtOV0rW2JmXScgfVxuICAgICAgICBdLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH1cbiAgICBdLFxuICAgIC8vIGZvcndhcmQgc2xhc2hlcyBhcmUgbm90IGFsbG93ZWRcbiAgICBpbGxlZ2FsOiAvXFwvL1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1pcHNhc207XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///1627\n")},1628:module=>{eval("/*\nLanguage: Mojolicious\nRequires: xml.js, perl.js\nAuthor: Dotan Dimet \nDescription: Mojolicious .ep (Embedded Perl) templates\nWebsite: https://mojolicious.org\nCategory: template\n*/\nfunction mojolicious(hljs) {\n return {\n name: 'Mojolicious',\n subLanguage: 'xml',\n contains: [\n {\n className: 'meta',\n begin: '^__(END|DATA)__$'\n },\n // mojolicious line\n {\n begin: \"^\\\\s*%{1,2}={0,2}\",\n end: '$',\n subLanguage: 'perl'\n },\n // mojolicious block\n {\n begin: \"<%{1,2}={0,2}\",\n end: \"={0,1}%>\",\n subLanguage: 'perl',\n excludeBegin: true,\n excludeEnd: true\n }\n ]\n };\n}\n\nmodule.exports = mojolicious;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTYyOC5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsdUJBQXVCLElBQUksRUFBRSxJQUFJO0FBQ2pDO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLG1CQUFtQixJQUFJLEVBQUUsSUFBSTtBQUM3QixnQkFBZ0IsSUFBSTtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL29ic2lkaWFuLW1pbmRtYXAtbmV4dGdlbi8uL25vZGVfbW9kdWxlcy8ucG5wbS9oaWdobGlnaHQuanNAMTEuMTEuMS9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvbW9qb2xpY2lvdXMuanM/N2VmMiJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuTGFuZ3VhZ2U6IE1vam9saWNpb3VzXG5SZXF1aXJlczogeG1sLmpzLCBwZXJsLmpzXG5BdXRob3I6IERvdGFuIERpbWV0IDxkb3RhbkBjb3JreS5uZXQ+XG5EZXNjcmlwdGlvbjogTW9qb2xpY2lvdXMgLmVwIChFbWJlZGRlZCBQZXJsKSB0ZW1wbGF0ZXNcbldlYnNpdGU6IGh0dHBzOi8vbW9qb2xpY2lvdXMub3JnXG5DYXRlZ29yeTogdGVtcGxhdGVcbiovXG5mdW5jdGlvbiBtb2pvbGljaW91cyhobGpzKSB7XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ01vam9saWNpb3VzJyxcbiAgICBzdWJMYW5ndWFnZTogJ3htbCcsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgICAgIGJlZ2luOiAnXl9fKEVORHxEQVRBKV9fJCdcbiAgICAgIH0sXG4gICAgICAvLyBtb2pvbGljaW91cyBsaW5lXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiBcIl5cXFxccyolezEsMn09ezAsMn1cIixcbiAgICAgICAgZW5kOiAnJCcsXG4gICAgICAgIHN1Ykxhbmd1YWdlOiAncGVybCdcbiAgICAgIH0sXG4gICAgICAvLyBtb2pvbGljaW91cyBibG9ja1xuICAgICAge1xuICAgICAgICBiZWdpbjogXCI8JXsxLDJ9PXswLDJ9XCIsXG4gICAgICAgIGVuZDogXCI9ezAsMX0lPlwiLFxuICAgICAgICBzdWJMYW5ndWFnZTogJ3BlcmwnLFxuICAgICAgICBleGNsdWRlQmVnaW46IHRydWUsXG4gICAgICAgIGV4Y2x1ZGVFbmQ6IHRydWVcbiAgICAgIH1cbiAgICBdXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbW9qb2xpY2lvdXM7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///1628\n")},1656:module=>{eval('/*\nLanguage: RenderMan RSL\nAuthor: Konstantin Evdokimenko \nContributors: Shuen-Huei Guan \nWebsite: https://renderman.pixar.com/resources/RenderMan_20/shadingLanguage.html\nCategory: graphics\n*/\n\nfunction rsl(hljs) {\n const BUILT_INS = [\n "abs",\n "acos",\n "ambient",\n "area",\n "asin",\n "atan",\n "atmosphere",\n "attribute",\n "calculatenormal",\n "ceil",\n "cellnoise",\n "clamp",\n "comp",\n "concat",\n "cos",\n "degrees",\n "depth",\n "Deriv",\n "diffuse",\n "distance",\n "Du",\n "Dv",\n "environment",\n "exp",\n "faceforward",\n "filterstep",\n "floor",\n "format",\n "fresnel",\n "incident",\n "length",\n "lightsource",\n "log",\n "match",\n "max",\n "min",\n "mod",\n "noise",\n "normalize",\n "ntransform",\n "opposite",\n "option",\n "phong",\n "pnoise",\n "pow",\n "printf",\n "ptlined",\n "radians",\n "random",\n "reflect",\n "refract",\n "renderinfo",\n "round",\n "setcomp",\n "setxcomp",\n "setycomp",\n "setzcomp",\n "shadow",\n "sign",\n "sin",\n "smoothstep",\n "specular",\n "specularbrdf",\n "spline",\n "sqrt",\n "step",\n "tan",\n "texture",\n "textureinfo",\n "trace",\n "transform",\n "vtransform",\n "xcomp",\n "ycomp",\n "zcomp"\n ];\n\n const TYPES = [\n "matrix",\n "float",\n "color",\n "point",\n "normal",\n "vector"\n ];\n\n const KEYWORDS = [\n "while",\n "for",\n "if",\n "do",\n "return",\n "else",\n "break",\n "extern",\n "continue"\n ];\n\n const CLASS_DEFINITION = {\n match: [\n /(surface|displacement|light|volume|imager)/,\n /\\s+/,\n hljs.IDENT_RE,\n ],\n scope: {\n 1: "keyword",\n 3: "title.class",\n }\n };\n\n return {\n name: \'RenderMan RSL\',\n keywords: {\n keyword: KEYWORDS,\n built_in: BUILT_INS,\n type: TYPES\n },\n illegal: \'{eval("/*\nLanguage: Perl\nAuthor: Peter Leonov \nWebsite: https://www.perl.org\nCategory: common\n*/\n\n/** @type LanguageFn */\nfunction perl(hljs) {\n const regex = hljs.regex;\n const KEYWORDS = [\n 'abs',\n 'accept',\n 'alarm',\n 'and',\n 'atan2',\n 'bind',\n 'binmode',\n 'bless',\n 'break',\n 'caller',\n 'chdir',\n 'chmod',\n 'chomp',\n 'chop',\n 'chown',\n 'chr',\n 'chroot',\n 'class',\n 'close',\n 'closedir',\n 'connect',\n 'continue',\n 'cos',\n 'crypt',\n 'dbmclose',\n 'dbmopen',\n 'defined',\n 'delete',\n 'die',\n 'do',\n 'dump',\n 'each',\n 'else',\n 'elsif',\n 'endgrent',\n 'endhostent',\n 'endnetent',\n 'endprotoent',\n 'endpwent',\n 'endservent',\n 'eof',\n 'eval',\n 'exec',\n 'exists',\n 'exit',\n 'exp',\n 'fcntl',\n 'field',\n 'fileno',\n 'flock',\n 'for',\n 'foreach',\n 'fork',\n 'format',\n 'formline',\n 'getc',\n 'getgrent',\n 'getgrgid',\n 'getgrnam',\n 'gethostbyaddr',\n 'gethostbyname',\n 'gethostent',\n 'getlogin',\n 'getnetbyaddr',\n 'getnetbyname',\n 'getnetent',\n 'getpeername',\n 'getpgrp',\n 'getpriority',\n 'getprotobyname',\n 'getprotobynumber',\n 'getprotoent',\n 'getpwent',\n 'getpwnam',\n 'getpwuid',\n 'getservbyname',\n 'getservbyport',\n 'getservent',\n 'getsockname',\n 'getsockopt',\n 'given',\n 'glob',\n 'gmtime',\n 'goto',\n 'grep',\n 'gt',\n 'hex',\n 'if',\n 'index',\n 'int',\n 'ioctl',\n 'join',\n 'keys',\n 'kill',\n 'last',\n 'lc',\n 'lcfirst',\n 'length',\n 'link',\n 'listen',\n 'local',\n 'localtime',\n 'log',\n 'lstat',\n 'lt',\n 'ma',\n 'map',\n 'method',\n 'mkdir',\n 'msgctl',\n 'msgget',\n 'msgrcv',\n 'msgsnd',\n 'my',\n 'ne',\n 'next',\n 'no',\n 'not',\n 'oct',\n 'open',\n 'opendir',\n 'or',\n 'ord',\n 'our',\n 'pack',\n 'package',\n 'pipe',\n 'pop',\n 'pos',\n 'print',\n 'printf',\n 'prototype',\n 'push',\n 'q|0',\n 'qq',\n 'quotemeta',\n 'qw',\n 'qx',\n 'rand',\n 'read',\n 'readdir',\n 'readline',\n 'readlink',\n 'readpipe',\n 'recv',\n 'redo',\n 'ref',\n 'rename',\n 'require',\n 'reset',\n 'return',\n 'reverse',\n 'rewinddir',\n 'rindex',\n 'rmdir',\n 'say',\n 'scalar',\n 'seek',\n 'seekdir',\n 'select',\n 'semctl',\n 'semget',\n 'semop',\n 'send',\n 'setgrent',\n 'sethostent',\n 'setnetent',\n 'setpgrp',\n 'setpriority',\n 'setprotoent',\n 'setpwent',\n 'setservent',\n 'setsockopt',\n 'shift',\n 'shmctl',\n 'shmget',\n 'shmread',\n 'shmwrite',\n 'shutdown',\n 'sin',\n 'sleep',\n 'socket',\n 'socketpair',\n 'sort',\n 'splice',\n 'split',\n 'sprintf',\n 'sqrt',\n 'srand',\n 'stat',\n 'state',\n 'study',\n 'sub',\n 'substr',\n 'symlink',\n 'syscall',\n 'sysopen',\n 'sysread',\n 'sysseek',\n 'system',\n 'syswrite',\n 'tell',\n 'telldir',\n 'tie',\n 'tied',\n 'time',\n 'times',\n 'tr',\n 'truncate',\n 'uc',\n 'ucfirst',\n 'umask',\n 'undef',\n 'unless',\n 'unlink',\n 'unpack',\n 'unshift',\n 'untie',\n 'until',\n 'use',\n 'utime',\n 'values',\n 'vec',\n 'wait',\n 'waitpid',\n 'wantarray',\n 'warn',\n 'when',\n 'while',\n 'write',\n 'x|0',\n 'xor',\n 'y|0'\n ];\n\n // https://perldoc.perl.org/perlre#Modifiers\n const REGEX_MODIFIERS = /[dualxmsipngr]{0,12}/; // aa and xx are valid, making max length 12\n const PERL_KEYWORDS = {\n $pattern: /[\\w.]+/,\n keyword: KEYWORDS.join(\" \")\n };\n const SUBST = {\n className: 'subst',\n begin: '[$@]\\\\{',\n end: '\\\\}',\n keywords: PERL_KEYWORDS\n };\n const METHOD = {\n begin: /->\\{/,\n end: /\\}/\n // contains defined later\n };\n const ATTR = {\n scope: 'attr',\n match: /\\s+:\\s*\\w+(\\s*\\(.*?\\))?/,\n };\n const VAR = {\n scope: 'variable',\n variants: [\n { begin: /\\$\\d/ },\n { begin: regex.concat(\n /[$%@](?!\")(\\^\\w\\b|#\\w+(::\\w+)*|\\{\\w+\\}|\\w+(::\\w*)*)/,\n // negative look-ahead tries to avoid matching patterns that are not\n // Perl at all like $ident$, @ident@, etc.\n `(?![A-Za-z])(?![@$%])`\n )\n },\n {\n // Only $= is a special Perl variable and one can't declare @= or %=.\n begin: /[$%@](?!\")[^\\s\\w{=]|\\$=/,\n relevance: 0\n }\n ],\n contains: [ ATTR ],\n };\n const NUMBER = {\n className: 'number',\n variants: [\n // decimal numbers:\n // include the case where a number starts with a dot (eg. .9), and\n // the leading 0? avoids mixing the first and second match on 0.x cases\n { match: /0?\\.[0-9][0-9_]+\\b/ },\n // include the special versioned number (eg. v5.38)\n { match: /\\bv?(0|[1-9][0-9_]*(\\.[0-9_]+)?|[1-9][0-9_]*)\\b/ },\n // non-decimal numbers:\n { match: /\\b0[0-7][0-7_]*\\b/ },\n { match: /\\b0x[0-9a-fA-F][0-9a-fA-F_]*\\b/ },\n { match: /\\b0b[0-1][0-1_]*\\b/ },\n ],\n relevance: 0\n };\n const STRING_CONTAINS = [\n hljs.BACKSLASH_ESCAPE,\n SUBST,\n VAR\n ];\n const REGEX_DELIMS = [\n /!/,\n /\\//,\n /\\|/,\n /\\?/,\n /'/,\n /\"/, // valid but infrequent and weird\n /#/ // valid but infrequent and weird\n ];\n /**\n * @param {string|RegExp} prefix\n * @param {string|RegExp} open\n * @param {string|RegExp} close\n */\n const PAIRED_DOUBLE_RE = (prefix, open, close = '\\\\1') => {\n const middle = (close === '\\\\1')\n ? close\n : regex.concat(close, open);\n return regex.concat(\n regex.concat(\"(?:\", prefix, \")\"),\n open,\n /(?:\\\\.|[^\\\\\\/])*?/,\n middle,\n /(?:\\\\.|[^\\\\\\/])*?/,\n close,\n REGEX_MODIFIERS\n );\n };\n /**\n * @param {string|RegExp} prefix\n * @param {string|RegExp} open\n * @param {string|RegExp} close\n */\n const PAIRED_RE = (prefix, open, close) => {\n return regex.concat(\n regex.concat(\"(?:\", prefix, \")\"),\n open,\n /(?:\\\\.|[^\\\\\\/])*?/,\n close,\n REGEX_MODIFIERS\n );\n };\n const PERL_DEFAULT_CONTAINS = [\n VAR,\n hljs.HASH_COMMENT_MODE,\n hljs.COMMENT(\n /^=\\w/,\n /=cut/,\n { endsWithParent: true }\n ),\n METHOD,\n {\n className: 'string',\n contains: STRING_CONTAINS,\n variants: [\n {\n begin: 'q[qwxr]?\\\\s*\\\\(',\n end: '\\\\)',\n relevance: 5\n },\n {\n begin: 'q[qwxr]?\\\\s*\\\\[',\n end: '\\\\]',\n relevance: 5\n },\n {\n begin: 'q[qwxr]?\\\\s*\\\\{',\n end: '\\\\}',\n relevance: 5\n },\n {\n begin: 'q[qwxr]?\\\\s*\\\\|',\n end: '\\\\|',\n relevance: 5\n },\n {\n begin: 'q[qwxr]?\\\\s*<',\n end: '>',\n relevance: 5\n },\n {\n begin: 'qw\\\\s+q',\n end: 'q',\n relevance: 5\n },\n {\n begin: '\\'',\n end: '\\'',\n contains: [ hljs.BACKSLASH_ESCAPE ]\n },\n {\n begin: '\"',\n end: '\"'\n },\n {\n begin: '`',\n end: '`',\n contains: [ hljs.BACKSLASH_ESCAPE ]\n },\n {\n begin: /\\{\\w+\\}/,\n relevance: 0\n },\n {\n begin: '-?\\\\w+\\\\s*=>',\n relevance: 0\n }\n ]\n },\n NUMBER,\n { // regexp container\n begin: '(\\\\/\\\\/|' + hljs.RE_STARTERS_RE + '|\\\\b(split|return|print|reverse|grep)\\\\b)\\\\s*',\n keywords: 'split return print reverse grep',\n relevance: 0,\n contains: [\n hljs.HASH_COMMENT_MODE,\n {\n className: 'regexp',\n variants: [\n // allow matching common delimiters\n { begin: PAIRED_DOUBLE_RE(\"s|tr|y\", regex.either(...REGEX_DELIMS, { capture: true })) },\n // and then paired delmis\n { begin: PAIRED_DOUBLE_RE(\"s|tr|y\", \"\\\\(\", \"\\\\)\") },\n { begin: PAIRED_DOUBLE_RE(\"s|tr|y\", \"\\\\[\", \"\\\\]\") },\n { begin: PAIRED_DOUBLE_RE(\"s|tr|y\", \"\\\\{\", \"\\\\}\") }\n ],\n relevance: 2\n },\n {\n className: 'regexp',\n variants: [\n {\n // could be a comment in many languages so do not count\n // as relevant\n begin: /(m|qr)\\/\\//,\n relevance: 0\n },\n // prefix is optional with /regex/\n { begin: PAIRED_RE(\"(?:m|qr)?\", /\\//, /\\//) },\n // allow matching common delimiters\n { begin: PAIRED_RE(\"m|qr\", regex.either(...REGEX_DELIMS, { capture: true }), /\\1/) },\n // allow common paired delmins\n { begin: PAIRED_RE(\"m|qr\", /\\(/, /\\)/) },\n { begin: PAIRED_RE(\"m|qr\", /\\[/, /\\]/) },\n { begin: PAIRED_RE(\"m|qr\", /\\{/, /\\}/) }\n ]\n }\n ]\n },\n {\n className: 'function',\n beginKeywords: 'sub method',\n end: '(\\\\s*\\\\(.*?\\\\))?[;{]',\n excludeEnd: true,\n relevance: 5,\n contains: [ hljs.TITLE_MODE, ATTR ]\n },\n {\n className: 'class',\n beginKeywords: 'class',\n end: '[;{]',\n excludeEnd: true,\n relevance: 5,\n contains: [ hljs.TITLE_MODE, ATTR, NUMBER ]\n },\n {\n begin: '-\\\\w\\\\b',\n relevance: 0\n },\n {\n begin: \"^__DATA__$\",\n end: \"^__END__$\",\n subLanguage: 'mojolicious',\n contains: [\n {\n begin: \"^@@.*\",\n end: \"$\",\n className: \"comment\"\n }\n ]\n }\n ];\n SUBST.contains = PERL_DEFAULT_CONTAINS;\n METHOD.contains = PERL_DEFAULT_CONTAINS;\n\n return {\n name: 'Perl',\n aliases: [\n 'pl',\n 'pm'\n ],\n keywords: PERL_KEYWORDS,\n contains: PERL_DEFAULT_CONTAINS\n };\n}\n\nmodule.exports = perl;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTY5Ni5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwwQ0FBMEMsS0FBSyxHQUFHO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQjtBQUNuQixhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLGVBQWU7QUFDdkIsUUFBUTtBQUNSLDBDQUEwQyxLQUFLO0FBQy9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxpQ0FBaUM7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsNkJBQTZCO0FBQ3JDO0FBQ0EsUUFBUSwwREFBMEQ7QUFDbEU7QUFDQSxRQUFRLDRCQUE0QjtBQUNwQyxRQUFRLHlDQUF5QztBQUNqRCxRQUFRLDZCQUE2QjtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLGVBQWU7QUFDNUIsYUFBYSxlQUFlO0FBQzVCLGFBQWEsZUFBZTtBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsZUFBZTtBQUM1QixhQUFhLGVBQWU7QUFDNUIsYUFBYSxlQUFlO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsaUNBQWlDO0FBQ2pDLG1CQUFtQjtBQUNuQjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxvQkFBb0IsS0FBSztBQUN6QjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWMsa0VBQWtFLGVBQWUsSUFBSTtBQUNuRztBQUNBLGNBQWMsaURBQWlEO0FBQy9ELGNBQWMsaURBQWlEO0FBQy9ELGNBQWMsc0NBQXNDLE9BQU87QUFDM0Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsY0FBYywyQ0FBMkM7QUFDekQ7QUFDQSxjQUFjLHlEQUF5RCxlQUFlLFVBQVU7QUFDaEc7QUFDQSxjQUFjLHNDQUFzQztBQUNwRCxjQUFjLHNDQUFzQztBQUNwRCxjQUFjLDRCQUE0QixNQUFNO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSwrQkFBK0I7QUFDL0I7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL29ic2lkaWFuLW1pbmRtYXAtbmV4dGdlbi8uL25vZGVfbW9kdWxlcy8ucG5wbS9oaWdobGlnaHQuanNAMTEuMTEuMS9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvcGVybC5qcz8zZTEzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qXG5MYW5ndWFnZTogUGVybFxuQXV0aG9yOiBQZXRlciBMZW9ub3YgPGdvanBlZ0B5YW5kZXgucnU+XG5XZWJzaXRlOiBodHRwczovL3d3dy5wZXJsLm9yZ1xuQ2F0ZWdvcnk6IGNvbW1vblxuKi9cblxuLyoqIEB0eXBlIExhbmd1YWdlRm4gKi9cbmZ1bmN0aW9uIHBlcmwoaGxqcykge1xuICBjb25zdCByZWdleCA9IGhsanMucmVnZXg7XG4gIGNvbnN0IEtFWVdPUkRTID0gW1xuICAgICdhYnMnLFxuICAgICdhY2NlcHQnLFxuICAgICdhbGFybScsXG4gICAgJ2FuZCcsXG4gICAgJ2F0YW4yJyxcbiAgICAnYmluZCcsXG4gICAgJ2Jpbm1vZGUnLFxuICAgICdibGVzcycsXG4gICAgJ2JyZWFrJyxcbiAgICAnY2FsbGVyJyxcbiAgICAnY2hkaXInLFxuICAgICdjaG1vZCcsXG4gICAgJ2Nob21wJyxcbiAgICAnY2hvcCcsXG4gICAgJ2Nob3duJyxcbiAgICAnY2hyJyxcbiAgICAnY2hyb290JyxcbiAgICAnY2xhc3MnLFxuICAgICdjbG9zZScsXG4gICAgJ2Nsb3NlZGlyJyxcbiAgICAnY29ubmVjdCcsXG4gICAgJ2NvbnRpbnVlJyxcbiAgICAnY29zJyxcbiAgICAnY3J5cHQnLFxuICAgICdkYm1jbG9zZScsXG4gICAgJ2RibW9wZW4nLFxuICAgICdkZWZpbmVkJyxcbiAgICAnZGVsZXRlJyxcbiAgICAnZGllJyxcbiAgICAnZG8nLFxuICAgICdkdW1wJyxcbiAgICAnZWFjaCcsXG4gICAgJ2Vsc2UnLFxuICAgICdlbHNpZicsXG4gICAgJ2VuZGdyZW50JyxcbiAgICAnZW5kaG9zdGVudCcsXG4gICAgJ2VuZG5ldGVudCcsXG4gICAgJ2VuZHByb3RvZW50JyxcbiAgICAnZW5kcHdlbnQnLFxuICAgICdlbmRzZXJ2ZW50JyxcbiAgICAnZW9mJyxcbiAgICAnZXZhbCcsXG4gICAgJ2V4ZWMnLFxuICAgICdleGlzdHMnLFxuICAgICdleGl0JyxcbiAgICAnZXhwJyxcbiAgICAnZmNudGwnLFxuICAgICdmaWVsZCcsXG4gICAgJ2ZpbGVubycsXG4gICAgJ2Zsb2NrJyxcbiAgICAnZm9yJyxcbiAgICAnZm9yZWFjaCcsXG4gICAgJ2ZvcmsnLFxuICAgICdmb3JtYXQnLFxuICAgICdmb3JtbGluZScsXG4gICAgJ2dldGMnLFxuICAgICdnZXRncmVudCcsXG4gICAgJ2dldGdyZ2lkJyxcbiAgICAnZ2V0Z3JuYW0nLFxuICAgICdnZXRob3N0YnlhZGRyJyxcbiAgICAnZ2V0aG9zdGJ5bmFtZScsXG4gICAgJ2dldGhvc3RlbnQnLFxuICAgICdnZXRsb2dpbicsXG4gICAgJ2dldG5ldGJ5YWRkcicsXG4gICAgJ2dldG5ldGJ5bmFtZScsXG4gICAgJ2dldG5ldGVudCcsXG4gICAgJ2dldHBlZXJuYW1lJyxcbiAgICAnZ2V0cGdycCcsXG4gICAgJ2dldHByaW9yaXR5JyxcbiAgICAnZ2V0cHJvdG9ieW5hbWUnLFxuICAgICdnZXRwcm90b2J5bnVtYmVyJyxcbiAgICAnZ2V0cHJvdG9lbnQnLFxuICAgICdnZXRwd2VudCcsXG4gICAgJ2dldHB3bmFtJyxcbiAgICAnZ2V0cHd1aWQnLFxuICAgICdnZXRzZXJ2YnluYW1lJyxcbiAgICAnZ2V0c2VydmJ5cG9ydCcsXG4gICAgJ2dldHNlcnZlbnQnLFxuICAgICdnZXRzb2NrbmFtZScsXG4gICAgJ2dldHNvY2tvcHQnLFxuICAgICdnaXZlbicsXG4gICAgJ2dsb2InLFxuICAgICdnbXRpbWUnLFxuICAgICdnb3RvJyxcbiAgICAnZ3JlcCcsXG4gICAgJ2d0JyxcbiAgICAnaGV4JyxcbiAgICAnaWYnLFxuICAgICdpbmRleCcsXG4gICAgJ2ludCcsXG4gICAgJ2lvY3RsJyxcbiAgICAnam9pbicsXG4gICAgJ2tleXMnLFxuICAgICdraWxsJyxcbiAgICAnbGFzdCcsXG4gICAgJ2xjJyxcbiAgICAnbGNmaXJzdCcsXG4gICAgJ2xlbmd0aCcsXG4gICAgJ2xpbmsnLFxuICAgICdsaXN0ZW4nLFxuICAgICdsb2NhbCcsXG4gICAgJ2xvY2FsdGltZScsXG4gICAgJ2xvZycsXG4gICAgJ2xzdGF0JyxcbiAgICAnbHQnLFxuICAgICdtYScsXG4gICAgJ21hcCcsXG4gICAgJ21ldGhvZCcsXG4gICAgJ21rZGlyJyxcbiAgICAnbXNnY3RsJyxcbiAgICAnbXNnZ2V0JyxcbiAgICAnbXNncmN2JyxcbiAgICAnbXNnc25kJyxcbiAgICAnbXknLFxuICAgICduZScsXG4gICAgJ25leHQnLFxuICAgICdubycsXG4gICAgJ25vdCcsXG4gICAgJ29jdCcsXG4gICAgJ29wZW4nLFxuICAgICdvcGVuZGlyJyxcbiAgICAnb3InLFxuICAgICdvcmQnLFxuICAgICdvdXInLFxuICAgICdwYWNrJyxcbiAgICAncGFja2FnZScsXG4gICAgJ3BpcGUnLFxuICAgICdwb3AnLFxuICAgICdwb3MnLFxuICAgICdwcmludCcsXG4gICAgJ3ByaW50ZicsXG4gICAgJ3Byb3RvdHlwZScsXG4gICAgJ3B1c2gnLFxuICAgICdxfDAnLFxuICAgICdxcScsXG4gICAgJ3F1b3RlbWV0YScsXG4gICAgJ3F3JyxcbiAgICAncXgnLFxuICAgICdyYW5kJyxcbiAgICAncmVhZCcsXG4gICAgJ3JlYWRkaXInLFxuICAgICdyZWFkbGluZScsXG4gICAgJ3JlYWRsaW5rJyxcbiAgICAncmVhZHBpcGUnLFxuICAgICdyZWN2JyxcbiAgICAncmVkbycsXG4gICAgJ3JlZicsXG4gICAgJ3JlbmFtZScsXG4gICAgJ3JlcXVpcmUnLFxuICAgICdyZXNldCcsXG4gICAgJ3JldHVybicsXG4gICAgJ3JldmVyc2UnLFxuICAgICdyZXdpbmRkaXInLFxuICAgICdyaW5kZXgnLFxuICAgICdybWRpcicsXG4gICAgJ3NheScsXG4gICAgJ3NjYWxhcicsXG4gICAgJ3NlZWsnLFxuICAgICdzZWVrZGlyJyxcbiAgICAnc2VsZWN0JyxcbiAgICAnc2VtY3RsJyxcbiAgICAnc2VtZ2V0JyxcbiAgICAnc2Vtb3AnLFxuICAgICdzZW5kJyxcbiAgICAnc2V0Z3JlbnQnLFxuICAgICdzZXRob3N0ZW50JyxcbiAgICAnc2V0bmV0ZW50JyxcbiAgICAnc2V0cGdycCcsXG4gICAgJ3NldHByaW9yaXR5JyxcbiAgICAnc2V0cHJvdG9lbnQnLFxuICAgICdzZXRwd2VudCcsXG4gICAgJ3NldHNlcnZlbnQnLFxuICAgICdzZXRzb2Nrb3B0JyxcbiAgICAnc2hpZnQnLFxuICAgICdzaG1jdGwnLFxuICAgICdzaG1nZXQnLFxuICAgICdzaG1yZWFkJyxcbiAgICAnc2htd3JpdGUnLFxuICAgICdzaHV0ZG93bicsXG4gICAgJ3NpbicsXG4gICAgJ3NsZWVwJyxcbiAgICAnc29ja2V0JyxcbiAgICAnc29ja2V0cGFpcicsXG4gICAgJ3NvcnQnLFxuICAgICdzcGxpY2UnLFxuICAgICdzcGxpdCcsXG4gICAgJ3NwcmludGYnLFxuICAgICdzcXJ0JyxcbiAgICAnc3JhbmQnLFxuICAgICdzdGF0JyxcbiAgICAnc3RhdGUnLFxuICAgICdzdHVkeScsXG4gICAgJ3N1YicsXG4gICAgJ3N1YnN0cicsXG4gICAgJ3N5bWxpbmsnLFxuICAgICdzeXNjYWxsJyxcbiAgICAnc3lzb3BlbicsXG4gICAgJ3N5c3JlYWQnLFxuICAgICdzeXNzZWVrJyxcbiAgICAnc3lzdGVtJyxcbiAgICAnc3lzd3JpdGUnLFxuICAgICd0ZWxsJyxcbiAgICAndGVsbGRpcicsXG4gICAgJ3RpZScsXG4gICAgJ3RpZWQnLFxuICAgICd0aW1lJyxcbiAgICAndGltZXMnLFxuICAgICd0cicsXG4gICAgJ3RydW5jYXRlJyxcbiAgICAndWMnLFxuICAgICd1Y2ZpcnN0JyxcbiAgICAndW1hc2snLFxuICAgICd1bmRlZicsXG4gICAgJ3VubGVzcycsXG4gICAgJ3VubGluaycsXG4gICAgJ3VucGFjaycsXG4gICAgJ3Vuc2hpZnQnLFxuICAgICd1bnRpZScsXG4gICAgJ3VudGlsJyxcbiAgICAndXNlJyxcbiAgICAndXRpbWUnLFxuICAgICd2YWx1ZXMnLFxuICAgICd2ZWMnLFxuICAgICd3YWl0JyxcbiAgICAnd2FpdHBpZCcsXG4gICAgJ3dhbnRhcnJheScsXG4gICAgJ3dhcm4nLFxuICAgICd3aGVuJyxcbiAgICAnd2hpbGUnLFxuICAgICd3cml0ZScsXG4gICAgJ3h8MCcsXG4gICAgJ3hvcicsXG4gICAgJ3l8MCdcbiAgXTtcblxuICAvLyBodHRwczovL3Blcmxkb2MucGVybC5vcmcvcGVybHJlI01vZGlmaWVyc1xuICBjb25zdCBSRUdFWF9NT0RJRklFUlMgPSAvW2R1YWx4bXNpcG5ncl17MCwxMn0vOyAvLyBhYSBhbmQgeHggYXJlIHZhbGlkLCBtYWtpbmcgbWF4IGxlbmd0aCAxMlxuICBjb25zdCBQRVJMX0tFWVdPUkRTID0ge1xuICAgICRwYXR0ZXJuOiAvW1xcdy5dKy8sXG4gICAga2V5d29yZDogS0VZV09SRFMuam9pbihcIiBcIilcbiAgfTtcbiAgY29uc3QgU1VCU1QgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3Vic3QnLFxuICAgIGJlZ2luOiAnWyRAXVxcXFx7JyxcbiAgICBlbmQ6ICdcXFxcfScsXG4gICAga2V5d29yZHM6IFBFUkxfS0VZV09SRFNcbiAgfTtcbiAgY29uc3QgTUVUSE9EID0ge1xuICAgIGJlZ2luOiAvLT5cXHsvLFxuICAgIGVuZDogL1xcfS9cbiAgICAvLyBjb250YWlucyBkZWZpbmVkIGxhdGVyXG4gIH07XG4gIGNvbnN0IEFUVFIgPSB7XG4gICAgc2NvcGU6ICdhdHRyJyxcbiAgICBtYXRjaDogL1xccys6XFxzKlxcdysoXFxzKlxcKC4qP1xcKSk/LyxcbiAgfTtcbiAgY29uc3QgVkFSID0ge1xuICAgIHNjb3BlOiAndmFyaWFibGUnLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7IGJlZ2luOiAvXFwkXFxkLyB9LFxuICAgICAgeyBiZWdpbjogcmVnZXguY29uY2F0KFxuICAgICAgICAvWyQlQF0oPyFcIikoXFxeXFx3XFxifCNcXHcrKDo6XFx3KykqfFxce1xcdytcXH18XFx3Kyg6OlxcdyopKikvLFxuICAgICAgICAvLyBuZWdhdGl2ZSBsb29rLWFoZWFkIHRyaWVzIHRvIGF2b2lkIG1hdGNoaW5nIHBhdHRlcm5zIHRoYXQgYXJlIG5vdFxuICAgICAgICAvLyBQZXJsIGF0IGFsbCBsaWtlICRpZGVudCQsIEBpZGVudEAsIGV0Yy5cbiAgICAgICAgYCg/IVtBLVphLXpdKSg/IVtAJCVdKWBcbiAgICAgICAgKVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgLy8gT25seSAkPSBpcyBhIHNwZWNpYWwgUGVybCB2YXJpYWJsZSBhbmQgb25lIGNhbid0IGRlY2xhcmUgQD0gb3IgJT0uXG4gICAgICAgIGJlZ2luOiAvWyQlQF0oPyFcIilbXlxcc1xcd3s9XXxcXCQ9LyxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9XG4gICAgXSxcbiAgICBjb250YWluczogWyBBVFRSIF0sXG4gIH07XG4gIGNvbnN0IE5VTUJFUiA9IHtcbiAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICAvLyBkZWNpbWFsIG51bWJlcnM6XG4gICAgICAvLyBpbmNsdWRlIHRoZSBjYXNlIHdoZXJlIGEgbnVtYmVyIHN0YXJ0cyB3aXRoIGEgZG90IChlZy4gLjkpLCBhbmRcbiAgICAgIC8vIHRoZSBsZWFkaW5nIDA/IGF2b2lkcyBtaXhpbmcgdGhlIGZpcnN0IGFuZCBzZWNvbmQgbWF0Y2ggb24gMC54IGNhc2VzXG4gICAgICB7IG1hdGNoOiAvMD9cXC5bMC05XVswLTlfXStcXGIvIH0sXG4gICAgICAvLyBpbmNsdWRlIHRoZSBzcGVjaWFsIHZlcnNpb25lZCBudW1iZXIgKGVnLiB2NS4zOClcbiAgICAgIHsgbWF0Y2g6IC9cXGJ2PygwfFsxLTldWzAtOV9dKihcXC5bMC05X10rKT98WzEtOV1bMC05X10qKVxcYi8gfSxcbiAgICAgIC8vIG5vbi1kZWNpbWFsIG51bWJlcnM6XG4gICAgICB7IG1hdGNoOiAvXFxiMFswLTddWzAtN19dKlxcYi8gfSxcbiAgICAgIHsgbWF0Y2g6IC9cXGIweFswLTlhLWZBLUZdWzAtOWEtZkEtRl9dKlxcYi8gfSxcbiAgICAgIHsgbWF0Y2g6IC9cXGIwYlswLTFdWzAtMV9dKlxcYi8gfSxcbiAgICBdLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuICBjb25zdCBTVFJJTkdfQ09OVEFJTlMgPSBbXG4gICAgaGxqcy5CQUNLU0xBU0hfRVNDQVBFLFxuICAgIFNVQlNULFxuICAgIFZBUlxuICBdO1xuICBjb25zdCBSRUdFWF9ERUxJTVMgPSBbXG4gICAgLyEvLFxuICAgIC9cXC8vLFxuICAgIC9cXHwvLFxuICAgIC9cXD8vLFxuICAgIC8nLyxcbiAgICAvXCIvLCAvLyB2YWxpZCBidXQgaW5mcmVxdWVudCBhbmQgd2VpcmRcbiAgICAvIy8gLy8gdmFsaWQgYnV0IGluZnJlcXVlbnQgYW5kIHdlaXJkXG4gIF07XG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ3xSZWdFeHB9IHByZWZpeFxuICAgKiBAcGFyYW0ge3N0cmluZ3xSZWdFeHB9IG9wZW5cbiAgICogQHBhcmFtIHtzdHJpbmd8UmVnRXhwfSBjbG9zZVxuICAgKi9cbiAgY29uc3QgUEFJUkVEX0RPVUJMRV9SRSA9IChwcmVmaXgsIG9wZW4sIGNsb3NlID0gJ1xcXFwxJykgPT4ge1xuICAgIGNvbnN0IG1pZGRsZSA9IChjbG9zZSA9PT0gJ1xcXFwxJylcbiAgICAgID8gY2xvc2VcbiAgICAgIDogcmVnZXguY29uY2F0KGNsb3NlLCBvcGVuKTtcbiAgICByZXR1cm4gcmVnZXguY29uY2F0KFxuICAgICAgcmVnZXguY29uY2F0KFwiKD86XCIsIHByZWZpeCwgXCIpXCIpLFxuICAgICAgb3BlbixcbiAgICAgIC8oPzpcXFxcLnxbXlxcXFxcXC9dKSo/LyxcbiAgICAgIG1pZGRsZSxcbiAgICAgIC8oPzpcXFxcLnxbXlxcXFxcXC9dKSo/LyxcbiAgICAgIGNsb3NlLFxuICAgICAgUkVHRVhfTU9ESUZJRVJTXG4gICAgKTtcbiAgfTtcbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfFJlZ0V4cH0gcHJlZml4XG4gICAqIEBwYXJhbSB7c3RyaW5nfFJlZ0V4cH0gb3BlblxuICAgKiBAcGFyYW0ge3N0cmluZ3xSZWdFeHB9IGNsb3NlXG4gICAqL1xuICBjb25zdCBQQUlSRURfUkUgPSAocHJlZml4LCBvcGVuLCBjbG9zZSkgPT4ge1xuICAgIHJldHVybiByZWdleC5jb25jYXQoXG4gICAgICByZWdleC5jb25jYXQoXCIoPzpcIiwgcHJlZml4LCBcIilcIiksXG4gICAgICBvcGVuLFxuICAgICAgLyg/OlxcXFwufFteXFxcXFxcL10pKj8vLFxuICAgICAgY2xvc2UsXG4gICAgICBSRUdFWF9NT0RJRklFUlNcbiAgICApO1xuICB9O1xuICBjb25zdCBQRVJMX0RFRkFVTFRfQ09OVEFJTlMgPSBbXG4gICAgVkFSLFxuICAgIGhsanMuSEFTSF9DT01NRU5UX01PREUsXG4gICAgaGxqcy5DT01NRU5UKFxuICAgICAgL149XFx3LyxcbiAgICAgIC89Y3V0LyxcbiAgICAgIHsgZW5kc1dpdGhQYXJlbnQ6IHRydWUgfVxuICAgICksXG4gICAgTUVUSE9ELFxuICAgIHtcbiAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICBjb250YWluczogU1RSSU5HX0NPTlRBSU5TLFxuICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGJlZ2luOiAncVtxd3hyXT9cXFxccypcXFxcKCcsXG4gICAgICAgICAgZW5kOiAnXFxcXCknLFxuICAgICAgICAgIHJlbGV2YW5jZTogNVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgYmVnaW46ICdxW3F3eHJdP1xcXFxzKlxcXFxbJyxcbiAgICAgICAgICBlbmQ6ICdcXFxcXScsXG4gICAgICAgICAgcmVsZXZhbmNlOiA1XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBiZWdpbjogJ3FbcXd4cl0/XFxcXHMqXFxcXHsnLFxuICAgICAgICAgIGVuZDogJ1xcXFx9JyxcbiAgICAgICAgICByZWxldmFuY2U6IDVcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGJlZ2luOiAncVtxd3hyXT9cXFxccypcXFxcfCcsXG4gICAgICAgICAgZW5kOiAnXFxcXHwnLFxuICAgICAgICAgIHJlbGV2YW5jZTogNVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgYmVnaW46ICdxW3F3eHJdP1xcXFxzKjwnLFxuICAgICAgICAgIGVuZDogJz4nLFxuICAgICAgICAgIHJlbGV2YW5jZTogNVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgYmVnaW46ICdxd1xcXFxzK3EnLFxuICAgICAgICAgIGVuZDogJ3EnLFxuICAgICAgICAgIHJlbGV2YW5jZTogNVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgYmVnaW46ICdcXCcnLFxuICAgICAgICAgIGVuZDogJ1xcJycsXG4gICAgICAgICAgY29udGFpbnM6IFsgaGxqcy5CQUNLU0xBU0hfRVNDQVBFIF1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGJlZ2luOiAnXCInLFxuICAgICAgICAgIGVuZDogJ1wiJ1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgYmVnaW46ICdgJyxcbiAgICAgICAgICBlbmQ6ICdgJyxcbiAgICAgICAgICBjb250YWluczogWyBobGpzLkJBQ0tTTEFTSF9FU0NBUEUgXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgYmVnaW46IC9cXHtcXHcrXFx9LyxcbiAgICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGJlZ2luOiAnLT9cXFxcdytcXFxccyo9PicsXG4gICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9LFxuICAgIE5VTUJFUixcbiAgICB7IC8vIHJlZ2V4cCBjb250YWluZXJcbiAgICAgIGJlZ2luOiAnKFxcXFwvXFxcXC98JyArIGhsanMuUkVfU1RBUlRFUlNfUkUgKyAnfFxcXFxiKHNwbGl0fHJldHVybnxwcmludHxyZXZlcnNlfGdyZXApXFxcXGIpXFxcXHMqJyxcbiAgICAgIGtleXdvcmRzOiAnc3BsaXQgcmV0dXJuIHByaW50IHJldmVyc2UgZ3JlcCcsXG4gICAgICByZWxldmFuY2U6IDAsXG4gICAgICBjb250YWluczogW1xuICAgICAgICBobGpzLkhBU0hfQ09NTUVOVF9NT0RFLFxuICAgICAgICB7XG4gICAgICAgICAgY2xhc3NOYW1lOiAncmVnZXhwJyxcbiAgICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgICAgLy8gYWxsb3cgbWF0Y2hpbmcgY29tbW9uIGRlbGltaXRlcnNcbiAgICAgICAgICAgIHsgYmVnaW46IFBBSVJFRF9ET1VCTEVfUkUoXCJzfHRyfHlcIiwgcmVnZXguZWl0aGVyKC4uLlJFR0VYX0RFTElNUywgeyBjYXB0dXJlOiB0cnVlIH0pKSB9LFxuICAgICAgICAgICAgLy8gYW5kIHRoZW4gcGFpcmVkIGRlbG1pc1xuICAgICAgICAgICAgeyBiZWdpbjogUEFJUkVEX0RPVUJMRV9SRShcInN8dHJ8eVwiLCBcIlxcXFwoXCIsIFwiXFxcXClcIikgfSxcbiAgICAgICAgICAgIHsgYmVnaW46IFBBSVJFRF9ET1VCTEVfUkUoXCJzfHRyfHlcIiwgXCJcXFxcW1wiLCBcIlxcXFxdXCIpIH0sXG4gICAgICAgICAgICB7IGJlZ2luOiBQQUlSRURfRE9VQkxFX1JFKFwic3x0cnx5XCIsIFwiXFxcXHtcIiwgXCJcXFxcfVwiKSB9XG4gICAgICAgICAgXSxcbiAgICAgICAgICByZWxldmFuY2U6IDJcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGNsYXNzTmFtZTogJ3JlZ2V4cCcsXG4gICAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgLy8gY291bGQgYmUgYSBjb21tZW50IGluIG1hbnkgbGFuZ3VhZ2VzIHNvIGRvIG5vdCBjb3VudFxuICAgICAgICAgICAgICAvLyBhcyByZWxldmFudFxuICAgICAgICAgICAgICBiZWdpbjogLyhtfHFyKVxcL1xcLy8sXG4gICAgICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC8vIHByZWZpeCBpcyBvcHRpb25hbCB3aXRoIC9yZWdleC9cbiAgICAgICAgICAgIHsgYmVnaW46IFBBSVJFRF9SRShcIig/Om18cXIpP1wiLCAvXFwvLywgL1xcLy8pIH0sXG4gICAgICAgICAgICAvLyBhbGxvdyBtYXRjaGluZyBjb21tb24gZGVsaW1pdGVyc1xuICAgICAgICAgICAgeyBiZWdpbjogUEFJUkVEX1JFKFwibXxxclwiLCByZWdleC5laXRoZXIoLi4uUkVHRVhfREVMSU1TLCB7IGNhcHR1cmU6IHRydWUgfSksIC9cXDEvKSB9LFxuICAgICAgICAgICAgLy8gYWxsb3cgY29tbW9uIHBhaXJlZCBkZWxtaW5zXG4gICAgICAgICAgICB7IGJlZ2luOiBQQUlSRURfUkUoXCJtfHFyXCIsIC9cXCgvLCAvXFwpLykgfSxcbiAgICAgICAgICAgIHsgYmVnaW46IFBBSVJFRF9SRShcIm18cXJcIiwgL1xcWy8sIC9cXF0vKSB9LFxuICAgICAgICAgICAgeyBiZWdpbjogUEFJUkVEX1JFKFwibXxxclwiLCAvXFx7LywgL1xcfS8pIH1cbiAgICAgICAgICBdXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9LFxuICAgIHtcbiAgICAgIGNsYXNzTmFtZTogJ2Z1bmN0aW9uJyxcbiAgICAgIGJlZ2luS2V5d29yZHM6ICdzdWIgbWV0aG9kJyxcbiAgICAgIGVuZDogJyhcXFxccypcXFxcKC4qP1xcXFwpKT9bO3tdJyxcbiAgICAgIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICByZWxldmFuY2U6IDUsXG4gICAgICBjb250YWluczogWyBobGpzLlRJVExFX01PREUsIEFUVFIgXVxuICAgIH0sXG4gICAge1xuICAgICAgY2xhc3NOYW1lOiAnY2xhc3MnLFxuICAgICAgYmVnaW5LZXl3b3JkczogJ2NsYXNzJyxcbiAgICAgIGVuZDogJ1s7e10nLFxuICAgICAgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgIHJlbGV2YW5jZTogNSxcbiAgICAgIGNvbnRhaW5zOiBbIGhsanMuVElUTEVfTU9ERSwgQVRUUiwgTlVNQkVSIF1cbiAgICB9LFxuICAgIHtcbiAgICAgIGJlZ2luOiAnLVxcXFx3XFxcXGInLFxuICAgICAgcmVsZXZhbmNlOiAwXG4gICAgfSxcbiAgICB7XG4gICAgICBiZWdpbjogXCJeX19EQVRBX18kXCIsXG4gICAgICBlbmQ6IFwiXl9fRU5EX18kXCIsXG4gICAgICBzdWJMYW5ndWFnZTogJ21vam9saWNpb3VzJyxcbiAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBiZWdpbjogXCJeQEAuKlwiLFxuICAgICAgICAgIGVuZDogXCIkXCIsXG4gICAgICAgICAgY2xhc3NOYW1lOiBcImNvbW1lbnRcIlxuICAgICAgICB9XG4gICAgICBdXG4gICAgfVxuICBdO1xuICBTVUJTVC5jb250YWlucyA9IFBFUkxfREVGQVVMVF9DT05UQUlOUztcbiAgTUVUSE9ELmNvbnRhaW5zID0gUEVSTF9ERUZBVUxUX0NPTlRBSU5TO1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogJ1BlcmwnLFxuICAgIGFsaWFzZXM6IFtcbiAgICAgICdwbCcsXG4gICAgICAncG0nXG4gICAgXSxcbiAgICBrZXl3b3JkczogUEVSTF9LRVlXT1JEUyxcbiAgICBjb250YWluczogUEVSTF9ERUZBVUxUX0NPTlRBSU5TXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcGVybDtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1696\n")},1698:module=>{eval("/*\nLanguage: AppleScript\nAuthors: Nathan Grigg , Dr. Drang \nCategory: scripting\nWebsite: https://developer.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptLangGuide/introduction/ASLR_intro.html\nAudit: 2020\n*/\n\n/** @type LanguageFn */\nfunction applescript(hljs) {\n const regex = hljs.regex;\n const STRING = hljs.inherit(\n hljs.QUOTE_STRING_MODE, { illegal: null });\n const PARAMS = {\n className: 'params',\n begin: /\\(/,\n end: /\\)/,\n contains: [\n 'self',\n hljs.C_NUMBER_MODE,\n STRING\n ]\n };\n const COMMENT_MODE_1 = hljs.COMMENT(/--/, /$/);\n const COMMENT_MODE_2 = hljs.COMMENT(\n /\\(\\*/,\n /\\*\\)/,\n { contains: [\n 'self', // allow nesting\n COMMENT_MODE_1\n ] }\n );\n const COMMENTS = [\n COMMENT_MODE_1,\n COMMENT_MODE_2,\n hljs.HASH_COMMENT_MODE\n ];\n\n const KEYWORD_PATTERNS = [\n /apart from/,\n /aside from/,\n /instead of/,\n /out of/,\n /greater than/,\n /isn't|(doesn't|does not) (equal|come before|come after|contain)/,\n /(greater|less) than( or equal)?/,\n /(starts?|ends|begins?) with/,\n /contained by/,\n /comes (before|after)/,\n /a (ref|reference)/,\n /POSIX (file|path)/,\n /(date|time) string/,\n /quoted form/\n ];\n\n const BUILT_IN_PATTERNS = [\n /clipboard info/,\n /the clipboard/,\n /info for/,\n /list (disks|folder)/,\n /mount volume/,\n /path to/,\n /(close|open for) access/,\n /(get|set) eof/,\n /current date/,\n /do shell script/,\n /get volume settings/,\n /random number/,\n /set volume/,\n /system attribute/,\n /system info/,\n /time to GMT/,\n /(load|run|store) script/,\n /scripting components/,\n /ASCII (character|number)/,\n /localized string/,\n /choose (application|color|file|file name|folder|from list|remote application|URL)/,\n /display (alert|dialog)/\n ];\n\n return {\n name: 'AppleScript',\n aliases: [ 'osascript' ],\n keywords: {\n keyword:\n 'about above after against and around as at back before beginning '\n + 'behind below beneath beside between but by considering '\n + 'contain contains continue copy div does eighth else end equal '\n + 'equals error every exit fifth first for fourth from front '\n + 'get given global if ignoring in into is it its last local me '\n + 'middle mod my ninth not of on onto or over prop property put ref '\n + 'reference repeat returning script second set seventh since '\n + 'sixth some tell tenth that the|0 then third through thru '\n + 'timeout times to transaction try until where while whose with '\n + 'without',\n literal:\n 'AppleScript false linefeed return pi quote result space tab true',\n built_in:\n 'alias application boolean class constant date file integer list '\n + 'number real record string text '\n + 'activate beep count delay launch log offset read round '\n + 'run say summarize write '\n + 'character characters contents day frontmost id item length '\n + 'month name|0 paragraph paragraphs rest reverse running time version '\n + 'weekday word words year'\n },\n contains: [\n STRING,\n hljs.C_NUMBER_MODE,\n {\n className: 'built_in',\n begin: regex.concat(\n /\\b/,\n regex.either(...BUILT_IN_PATTERNS),\n /\\b/\n )\n },\n {\n className: 'built_in',\n begin: /^\\s*return\\b/\n },\n {\n className: 'literal',\n begin:\n /\\b(text item delimiters|current application|missing value)\\b/\n },\n {\n className: 'keyword',\n begin: regex.concat(\n /\\b/,\n regex.either(...KEYWORD_PATTERNS),\n /\\b/\n )\n },\n {\n beginKeywords: 'on',\n illegal: /[${=;\\n]/,\n contains: [\n hljs.UNDERSCORE_TITLE_MODE,\n PARAMS\n ]\n },\n ...COMMENTS\n ],\n illegal: /\\/\\/|->|=>|\\[\\[/\n };\n}\n\nmodule.exports = applescript;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTY5OC5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QixlQUFlO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9vYnNpZGlhbi1taW5kbWFwLW5leHRnZW4vLi9ub2RlX21vZHVsZXMvLnBucG0vaGlnaGxpZ2h0LmpzQDExLjExLjEvbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2FwcGxlc2NyaXB0LmpzP2U2MjgiXSwic291cmNlc0NvbnRlbnQiOlsiLypcbkxhbmd1YWdlOiBBcHBsZVNjcmlwdFxuQXV0aG9yczogTmF0aGFuIEdyaWdnIDxuYXRoYW5AbmF0aGFuYW15Lm9yZz4sIERyLiBEcmFuZyA8ZHJkcmFuZ0BnbWFpbC5jb20+XG5DYXRlZ29yeTogc2NyaXB0aW5nXG5XZWJzaXRlOiBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vbGlicmFyeS9hcmNoaXZlL2RvY3VtZW50YXRpb24vQXBwbGVTY3JpcHQvQ29uY2VwdHVhbC9BcHBsZVNjcmlwdExhbmdHdWlkZS9pbnRyb2R1Y3Rpb24vQVNMUl9pbnRyby5odG1sXG5BdWRpdDogMjAyMFxuKi9cblxuLyoqIEB0eXBlIExhbmd1YWdlRm4gKi9cbmZ1bmN0aW9uIGFwcGxlc2NyaXB0KGhsanMpIHtcbiAgY29uc3QgcmVnZXggPSBobGpzLnJlZ2V4O1xuICBjb25zdCBTVFJJTkcgPSBobGpzLmluaGVyaXQoXG4gICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSwgeyBpbGxlZ2FsOiBudWxsIH0pO1xuICBjb25zdCBQQVJBTVMgPSB7XG4gICAgY2xhc3NOYW1lOiAncGFyYW1zJyxcbiAgICBiZWdpbjogL1xcKC8sXG4gICAgZW5kOiAvXFwpLyxcbiAgICBjb250YWluczogW1xuICAgICAgJ3NlbGYnLFxuICAgICAgaGxqcy5DX05VTUJFUl9NT0RFLFxuICAgICAgU1RSSU5HXG4gICAgXVxuICB9O1xuICBjb25zdCBDT01NRU5UX01PREVfMSA9IGhsanMuQ09NTUVOVCgvLS0vLCAvJC8pO1xuICBjb25zdCBDT01NRU5UX01PREVfMiA9IGhsanMuQ09NTUVOVChcbiAgICAvXFwoXFwqLyxcbiAgICAvXFwqXFwpLyxcbiAgICB7IGNvbnRhaW5zOiBbXG4gICAgICAnc2VsZicsIC8vIGFsbG93IG5lc3RpbmdcbiAgICAgIENPTU1FTlRfTU9ERV8xXG4gICAgXSB9XG4gICk7XG4gIGNvbnN0IENPTU1FTlRTID0gW1xuICAgIENPTU1FTlRfTU9ERV8xLFxuICAgIENPTU1FTlRfTU9ERV8yLFxuICAgIGhsanMuSEFTSF9DT01NRU5UX01PREVcbiAgXTtcblxuICBjb25zdCBLRVlXT1JEX1BBVFRFUk5TID0gW1xuICAgIC9hcGFydCBmcm9tLyxcbiAgICAvYXNpZGUgZnJvbS8sXG4gICAgL2luc3RlYWQgb2YvLFxuICAgIC9vdXQgb2YvLFxuICAgIC9ncmVhdGVyIHRoYW4vLFxuICAgIC9pc24ndHwoZG9lc24ndHxkb2VzIG5vdCkgKGVxdWFsfGNvbWUgYmVmb3JlfGNvbWUgYWZ0ZXJ8Y29udGFpbikvLFxuICAgIC8oZ3JlYXRlcnxsZXNzKSB0aGFuKCBvciBlcXVhbCk/LyxcbiAgICAvKHN0YXJ0cz98ZW5kc3xiZWdpbnM/KSB3aXRoLyxcbiAgICAvY29udGFpbmVkIGJ5LyxcbiAgICAvY29tZXMgKGJlZm9yZXxhZnRlcikvLFxuICAgIC9hIChyZWZ8cmVmZXJlbmNlKS8sXG4gICAgL1BPU0lYIChmaWxlfHBhdGgpLyxcbiAgICAvKGRhdGV8dGltZSkgc3RyaW5nLyxcbiAgICAvcXVvdGVkIGZvcm0vXG4gIF07XG5cbiAgY29uc3QgQlVJTFRfSU5fUEFUVEVSTlMgPSBbXG4gICAgL2NsaXBib2FyZCBpbmZvLyxcbiAgICAvdGhlIGNsaXBib2FyZC8sXG4gICAgL2luZm8gZm9yLyxcbiAgICAvbGlzdCAoZGlza3N8Zm9sZGVyKS8sXG4gICAgL21vdW50IHZvbHVtZS8sXG4gICAgL3BhdGggdG8vLFxuICAgIC8oY2xvc2V8b3BlbiBmb3IpIGFjY2Vzcy8sXG4gICAgLyhnZXR8c2V0KSBlb2YvLFxuICAgIC9jdXJyZW50IGRhdGUvLFxuICAgIC9kbyBzaGVsbCBzY3JpcHQvLFxuICAgIC9nZXQgdm9sdW1lIHNldHRpbmdzLyxcbiAgICAvcmFuZG9tIG51bWJlci8sXG4gICAgL3NldCB2b2x1bWUvLFxuICAgIC9zeXN0ZW0gYXR0cmlidXRlLyxcbiAgICAvc3lzdGVtIGluZm8vLFxuICAgIC90aW1lIHRvIEdNVC8sXG4gICAgLyhsb2FkfHJ1bnxzdG9yZSkgc2NyaXB0LyxcbiAgICAvc2NyaXB0aW5nIGNvbXBvbmVudHMvLFxuICAgIC9BU0NJSSAoY2hhcmFjdGVyfG51bWJlcikvLFxuICAgIC9sb2NhbGl6ZWQgc3RyaW5nLyxcbiAgICAvY2hvb3NlIChhcHBsaWNhdGlvbnxjb2xvcnxmaWxlfGZpbGUgbmFtZXxmb2xkZXJ8ZnJvbSBsaXN0fHJlbW90ZSBhcHBsaWNhdGlvbnxVUkwpLyxcbiAgICAvZGlzcGxheSAoYWxlcnR8ZGlhbG9nKS9cbiAgXTtcblxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdBcHBsZVNjcmlwdCcsXG4gICAgYWxpYXNlczogWyAnb3Nhc2NyaXB0JyBdLFxuICAgIGtleXdvcmRzOiB7XG4gICAgICBrZXl3b3JkOlxuICAgICAgICAnYWJvdXQgYWJvdmUgYWZ0ZXIgYWdhaW5zdCBhbmQgYXJvdW5kIGFzIGF0IGJhY2sgYmVmb3JlIGJlZ2lubmluZyAnXG4gICAgICAgICsgJ2JlaGluZCBiZWxvdyBiZW5lYXRoIGJlc2lkZSBiZXR3ZWVuIGJ1dCBieSBjb25zaWRlcmluZyAnXG4gICAgICAgICsgJ2NvbnRhaW4gY29udGFpbnMgY29udGludWUgY29weSBkaXYgZG9lcyBlaWdodGggZWxzZSBlbmQgZXF1YWwgJ1xuICAgICAgICArICdlcXVhbHMgZXJyb3IgZXZlcnkgZXhpdCBmaWZ0aCBmaXJzdCBmb3IgZm91cnRoIGZyb20gZnJvbnQgJ1xuICAgICAgICArICdnZXQgZ2l2ZW4gZ2xvYmFsIGlmIGlnbm9yaW5nIGluIGludG8gaXMgaXQgaXRzIGxhc3QgbG9jYWwgbWUgJ1xuICAgICAgICArICdtaWRkbGUgbW9kIG15IG5pbnRoIG5vdCBvZiBvbiBvbnRvIG9yIG92ZXIgcHJvcCBwcm9wZXJ0eSBwdXQgcmVmICdcbiAgICAgICAgKyAncmVmZXJlbmNlIHJlcGVhdCByZXR1cm5pbmcgc2NyaXB0IHNlY29uZCBzZXQgc2V2ZW50aCBzaW5jZSAnXG4gICAgICAgICsgJ3NpeHRoIHNvbWUgdGVsbCB0ZW50aCB0aGF0IHRoZXwwIHRoZW4gdGhpcmQgdGhyb3VnaCB0aHJ1ICdcbiAgICAgICAgKyAndGltZW91dCB0aW1lcyB0byB0cmFuc2FjdGlvbiB0cnkgdW50aWwgd2hlcmUgd2hpbGUgd2hvc2Ugd2l0aCAnXG4gICAgICAgICsgJ3dpdGhvdXQnLFxuICAgICAgbGl0ZXJhbDpcbiAgICAgICAgJ0FwcGxlU2NyaXB0IGZhbHNlIGxpbmVmZWVkIHJldHVybiBwaSBxdW90ZSByZXN1bHQgc3BhY2UgdGFiIHRydWUnLFxuICAgICAgYnVpbHRfaW46XG4gICAgICAgICdhbGlhcyBhcHBsaWNhdGlvbiBib29sZWFuIGNsYXNzIGNvbnN0YW50IGRhdGUgZmlsZSBpbnRlZ2VyIGxpc3QgJ1xuICAgICAgICArICdudW1iZXIgcmVhbCByZWNvcmQgc3RyaW5nIHRleHQgJ1xuICAgICAgICArICdhY3RpdmF0ZSBiZWVwIGNvdW50IGRlbGF5IGxhdW5jaCBsb2cgb2Zmc2V0IHJlYWQgcm91bmQgJ1xuICAgICAgICArICdydW4gc2F5IHN1bW1hcml6ZSB3cml0ZSAnXG4gICAgICAgICsgJ2NoYXJhY3RlciBjaGFyYWN0ZXJzIGNvbnRlbnRzIGRheSBmcm9udG1vc3QgaWQgaXRlbSBsZW5ndGggJ1xuICAgICAgICArICdtb250aCBuYW1lfDAgcGFyYWdyYXBoIHBhcmFncmFwaHMgcmVzdCByZXZlcnNlIHJ1bm5pbmcgdGltZSB2ZXJzaW9uICdcbiAgICAgICAgKyAnd2Vla2RheSB3b3JkIHdvcmRzIHllYXInXG4gICAgfSxcbiAgICBjb250YWluczogW1xuICAgICAgU1RSSU5HLFxuICAgICAgaGxqcy5DX05VTUJFUl9NT0RFLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdidWlsdF9pbicsXG4gICAgICAgIGJlZ2luOiByZWdleC5jb25jYXQoXG4gICAgICAgICAgL1xcYi8sXG4gICAgICAgICAgcmVnZXguZWl0aGVyKC4uLkJVSUxUX0lOX1BBVFRFUk5TKSxcbiAgICAgICAgICAvXFxiL1xuICAgICAgICApXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdidWlsdF9pbicsXG4gICAgICAgIGJlZ2luOiAvXlxccypyZXR1cm5cXGIvXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdsaXRlcmFsJyxcbiAgICAgICAgYmVnaW46XG4gICAgICAgICAgL1xcYih0ZXh0IGl0ZW0gZGVsaW1pdGVyc3xjdXJyZW50IGFwcGxpY2F0aW9ufG1pc3NpbmcgdmFsdWUpXFxiL1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAna2V5d29yZCcsXG4gICAgICAgIGJlZ2luOiByZWdleC5jb25jYXQoXG4gICAgICAgICAgL1xcYi8sXG4gICAgICAgICAgcmVnZXguZWl0aGVyKC4uLktFWVdPUkRfUEFUVEVSTlMpLFxuICAgICAgICAgIC9cXGIvXG4gICAgICAgIClcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICdvbicsXG4gICAgICAgIGlsbGVnYWw6IC9bJHs9O1xcbl0vLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIGhsanMuVU5ERVJTQ09SRV9USVRMRV9NT0RFLFxuICAgICAgICAgIFBBUkFNU1xuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgLi4uQ09NTUVOVFNcbiAgICBdLFxuICAgIGlsbGVnYWw6IC9cXC9cXC98LT58PT58XFxbXFxbL1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFwcGxlc2NyaXB0O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1698\n")},1727:module=>{eval('/*\nLanguage: VHDL\nAuthor: Igor Kalnitsky \nContributors: Daniel C.K. Kho , Guillaume Savaton \nDescription: VHDL is a hardware description language used in electronic design automation to describe digital and mixed-signal systems.\nWebsite: https://en.wikipedia.org/wiki/VHDL\nCategory: hardware\n*/\n\nfunction vhdl(hljs) {\n // Regular expression for VHDL numeric literals.\n\n // Decimal literal:\n const INTEGER_RE = \'\\\\d(_|\\\\d)*\';\n const EXPONENT_RE = \'[eE][-+]?\' + INTEGER_RE;\n const DECIMAL_LITERAL_RE = INTEGER_RE + \'(\\\\.\' + INTEGER_RE + \')?\' + \'(\' + EXPONENT_RE + \')?\';\n // Based literal:\n const BASED_INTEGER_RE = \'\\\\w+\';\n const BASED_LITERAL_RE = INTEGER_RE + \'#\' + BASED_INTEGER_RE + \'(\\\\.\' + BASED_INTEGER_RE + \')?\' + \'#\' + \'(\' + EXPONENT_RE + \')?\';\n\n const NUMBER_RE = \'\\\\b(\' + BASED_LITERAL_RE + \'|\' + DECIMAL_LITERAL_RE + \')\';\n\n const KEYWORDS = [\n "abs",\n "access",\n "after",\n "alias",\n "all",\n "and",\n "architecture",\n "array",\n "assert",\n "assume",\n "assume_guarantee",\n "attribute",\n "begin",\n "block",\n "body",\n "buffer",\n "bus",\n "case",\n "component",\n "configuration",\n "constant",\n "context",\n "cover",\n "disconnect",\n "downto",\n "default",\n "else",\n "elsif",\n "end",\n "entity",\n "exit",\n "fairness",\n "file",\n "for",\n "force",\n "function",\n "generate",\n "generic",\n "group",\n "guarded",\n "if",\n "impure",\n "in",\n "inertial",\n "inout",\n "is",\n "label",\n "library",\n "linkage",\n "literal",\n "loop",\n "map",\n "mod",\n "nand",\n "new",\n "next",\n "nor",\n "not",\n "null",\n "of",\n "on",\n "open",\n "or",\n "others",\n "out",\n "package",\n "parameter",\n "port",\n "postponed",\n "procedure",\n "process",\n "property",\n "protected",\n "pure",\n "range",\n "record",\n "register",\n "reject",\n "release",\n "rem",\n "report",\n "restrict",\n "restrict_guarantee",\n "return",\n "rol",\n "ror",\n "select",\n "sequence",\n "severity",\n "shared",\n "signal",\n "sla",\n "sll",\n "sra",\n "srl",\n "strong",\n "subtype",\n "then",\n "to",\n "transport",\n "type",\n "unaffected",\n "units",\n "until",\n "use",\n "variable",\n "view",\n "vmode",\n "vprop",\n "vunit",\n "wait",\n "when",\n "while",\n "with",\n "xnor",\n "xor"\n ];\n const BUILT_INS = [\n "boolean",\n "bit",\n "character",\n "integer",\n "time",\n "delay_length",\n "natural",\n "positive",\n "string",\n "bit_vector",\n "file_open_kind",\n "file_open_status",\n "std_logic",\n "std_logic_vector",\n "unsigned",\n "signed",\n "boolean_vector",\n "integer_vector",\n "std_ulogic",\n "std_ulogic_vector",\n "unresolved_unsigned",\n "u_unsigned",\n "unresolved_signed",\n "u_signed",\n "real_vector",\n "time_vector"\n ];\n const LITERALS = [\n // severity_level\n "false",\n "true",\n "note",\n "warning",\n "error",\n "failure",\n // textio\n "line",\n "text",\n "side",\n "width"\n ];\n\n return {\n name: \'VHDL\',\n case_insensitive: true,\n keywords: {\n keyword: KEYWORDS,\n built_in: BUILT_INS,\n literal: LITERALS\n },\n illegal: /\\{/,\n contains: [\n hljs.C_BLOCK_COMMENT_MODE, // VHDL-2008 block commenting.\n hljs.COMMENT(\'--\', \'$\'),\n hljs.QUOTE_STRING_MODE,\n {\n className: \'number\',\n begin: NUMBER_RE,\n relevance: 0\n },\n {\n className: \'string\',\n begin: \'\\\'(U|X|0|1|Z|W|L|H|-)\\\'\',\n contains: [ hljs.BACKSLASH_ESCAPE ]\n },\n {\n className: \'symbol\',\n begin: \'\\\'[A-Za-z](_?[A-Za-z0-9])*\',\n contains: [ hljs.BACKSLASH_ESCAPE ]\n }\n ]\n };\n}\n\nmodule.exports = vhdl;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTcyNy5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL29ic2lkaWFuLW1pbmRtYXAtbmV4dGdlbi8uL25vZGVfbW9kdWxlcy8ucG5wbS9oaWdobGlnaHQuanNAMTEuMTEuMS9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvdmhkbC5qcz82NDNjIl0sInNvdXJjZXNDb250ZW50IjpbIi8qXG5MYW5ndWFnZTogVkhETFxuQXV0aG9yOiBJZ29yIEthbG5pdHNreSA8aWdvckBrYWxuaXRza3kub3JnPlxuQ29udHJpYnV0b3JzOiBEYW5pZWwgQy5LLiBLaG8gPGRhbmllbC5raG9AdGF1aG9wLmNvbT4sIEd1aWxsYXVtZSBTYXZhdG9uIDxndWlsbGF1bWUuc2F2YXRvbkBlc2VvLmZyPlxuRGVzY3JpcHRpb246IFZIREwgaXMgYSBoYXJkd2FyZSBkZXNjcmlwdGlvbiBsYW5ndWFnZSB1c2VkIGluIGVsZWN0cm9uaWMgZGVzaWduIGF1dG9tYXRpb24gdG8gZGVzY3JpYmUgZGlnaXRhbCBhbmQgbWl4ZWQtc2lnbmFsIHN5c3RlbXMuXG5XZWJzaXRlOiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9WSERMXG5DYXRlZ29yeTogaGFyZHdhcmVcbiovXG5cbmZ1bmN0aW9uIHZoZGwoaGxqcykge1xuICAvLyBSZWd1bGFyIGV4cHJlc3Npb24gZm9yIFZIREwgbnVtZXJpYyBsaXRlcmFscy5cblxuICAvLyBEZWNpbWFsIGxpdGVyYWw6XG4gIGNvbnN0IElOVEVHRVJfUkUgPSAnXFxcXGQoX3xcXFxcZCkqJztcbiAgY29uc3QgRVhQT05FTlRfUkUgPSAnW2VFXVstK10/JyArIElOVEVHRVJfUkU7XG4gIGNvbnN0IERFQ0lNQUxfTElURVJBTF9SRSA9IElOVEVHRVJfUkUgKyAnKFxcXFwuJyArIElOVEVHRVJfUkUgKyAnKT8nICsgJygnICsgRVhQT05FTlRfUkUgKyAnKT8nO1xuICAvLyBCYXNlZCBsaXRlcmFsOlxuICBjb25zdCBCQVNFRF9JTlRFR0VSX1JFID0gJ1xcXFx3Kyc7XG4gIGNvbnN0IEJBU0VEX0xJVEVSQUxfUkUgPSBJTlRFR0VSX1JFICsgJyMnICsgQkFTRURfSU5URUdFUl9SRSArICcoXFxcXC4nICsgQkFTRURfSU5URUdFUl9SRSArICcpPycgKyAnIycgKyAnKCcgKyBFWFBPTkVOVF9SRSArICcpPyc7XG5cbiAgY29uc3QgTlVNQkVSX1JFID0gJ1xcXFxiKCcgKyBCQVNFRF9MSVRFUkFMX1JFICsgJ3wnICsgREVDSU1BTF9MSVRFUkFMX1JFICsgJyknO1xuXG4gIGNvbnN0IEtFWVdPUkRTID0gW1xuICAgIFwiYWJzXCIsXG4gICAgXCJhY2Nlc3NcIixcbiAgICBcImFmdGVyXCIsXG4gICAgXCJhbGlhc1wiLFxuICAgIFwiYWxsXCIsXG4gICAgXCJhbmRcIixcbiAgICBcImFyY2hpdGVjdHVyZVwiLFxuICAgIFwiYXJyYXlcIixcbiAgICBcImFzc2VydFwiLFxuICAgIFwiYXNzdW1lXCIsXG4gICAgXCJhc3N1bWVfZ3VhcmFudGVlXCIsXG4gICAgXCJhdHRyaWJ1dGVcIixcbiAgICBcImJlZ2luXCIsXG4gICAgXCJibG9ja1wiLFxuICAgIFwiYm9keVwiLFxuICAgIFwiYnVmZmVyXCIsXG4gICAgXCJidXNcIixcbiAgICBcImNhc2VcIixcbiAgICBcImNvbXBvbmVudFwiLFxuICAgIFwiY29uZmlndXJhdGlvblwiLFxuICAgIFwiY29uc3RhbnRcIixcbiAgICBcImNvbnRleHRcIixcbiAgICBcImNvdmVyXCIsXG4gICAgXCJkaXNjb25uZWN0XCIsXG4gICAgXCJkb3dudG9cIixcbiAgICBcImRlZmF1bHRcIixcbiAgICBcImVsc2VcIixcbiAgICBcImVsc2lmXCIsXG4gICAgXCJlbmRcIixcbiAgICBcImVudGl0eVwiLFxuICAgIFwiZXhpdFwiLFxuICAgIFwiZmFpcm5lc3NcIixcbiAgICBcImZpbGVcIixcbiAgICBcImZvclwiLFxuICAgIFwiZm9yY2VcIixcbiAgICBcImZ1bmN0aW9uXCIsXG4gICAgXCJnZW5lcmF0ZVwiLFxuICAgIFwiZ2VuZXJpY1wiLFxuICAgIFwiZ3JvdXBcIixcbiAgICBcImd1YXJkZWRcIixcbiAgICBcImlmXCIsXG4gICAgXCJpbXB1cmVcIixcbiAgICBcImluXCIsXG4gICAgXCJpbmVydGlhbFwiLFxuICAgIFwiaW5vdXRcIixcbiAgICBcImlzXCIsXG4gICAgXCJsYWJlbFwiLFxuICAgIFwibGlicmFyeVwiLFxuICAgIFwibGlua2FnZVwiLFxuICAgIFwibGl0ZXJhbFwiLFxuICAgIFwibG9vcFwiLFxuICAgIFwibWFwXCIsXG4gICAgXCJtb2RcIixcbiAgICBcIm5hbmRcIixcbiAgICBcIm5ld1wiLFxuICAgIFwibmV4dFwiLFxuICAgIFwibm9yXCIsXG4gICAgXCJub3RcIixcbiAgICBcIm51bGxcIixcbiAgICBcIm9mXCIsXG4gICAgXCJvblwiLFxuICAgIFwib3BlblwiLFxuICAgIFwib3JcIixcbiAgICBcIm90aGVyc1wiLFxuICAgIFwib3V0XCIsXG4gICAgXCJwYWNrYWdlXCIsXG4gICAgXCJwYXJhbWV0ZXJcIixcbiAgICBcInBvcnRcIixcbiAgICBcInBvc3Rwb25lZFwiLFxuICAgIFwicHJvY2VkdXJlXCIsXG4gICAgXCJwcm9jZXNzXCIsXG4gICAgXCJwcm9wZXJ0eVwiLFxuICAgIFwicHJvdGVjdGVkXCIsXG4gICAgXCJwdXJlXCIsXG4gICAgXCJyYW5nZVwiLFxuICAgIFwicmVjb3JkXCIsXG4gICAgXCJyZWdpc3RlclwiLFxuICAgIFwicmVqZWN0XCIsXG4gICAgXCJyZWxlYXNlXCIsXG4gICAgXCJyZW1cIixcbiAgICBcInJlcG9ydFwiLFxuICAgIFwicmVzdHJpY3RcIixcbiAgICBcInJlc3RyaWN0X2d1YXJhbnRlZVwiLFxuICAgIFwicmV0dXJuXCIsXG4gICAgXCJyb2xcIixcbiAgICBcInJvclwiLFxuICAgIFwic2VsZWN0XCIsXG4gICAgXCJzZXF1ZW5jZVwiLFxuICAgIFwic2V2ZXJpdHlcIixcbiAgICBcInNoYXJlZFwiLFxuICAgIFwic2lnbmFsXCIsXG4gICAgXCJzbGFcIixcbiAgICBcInNsbFwiLFxuICAgIFwic3JhXCIsXG4gICAgXCJzcmxcIixcbiAgICBcInN0cm9uZ1wiLFxuICAgIFwic3VidHlwZVwiLFxuICAgIFwidGhlblwiLFxuICAgIFwidG9cIixcbiAgICBcInRyYW5zcG9ydFwiLFxuICAgIFwidHlwZVwiLFxuICAgIFwidW5hZmZlY3RlZFwiLFxuICAgIFwidW5pdHNcIixcbiAgICBcInVudGlsXCIsXG4gICAgXCJ1c2VcIixcbiAgICBcInZhcmlhYmxlXCIsXG4gICAgXCJ2aWV3XCIsXG4gICAgXCJ2bW9kZVwiLFxuICAgIFwidnByb3BcIixcbiAgICBcInZ1bml0XCIsXG4gICAgXCJ3YWl0XCIsXG4gICAgXCJ3aGVuXCIsXG4gICAgXCJ3aGlsZVwiLFxuICAgIFwid2l0aFwiLFxuICAgIFwieG5vclwiLFxuICAgIFwieG9yXCJcbiAgXTtcbiAgY29uc3QgQlVJTFRfSU5TID0gW1xuICAgIFwiYm9vbGVhblwiLFxuICAgIFwiYml0XCIsXG4gICAgXCJjaGFyYWN0ZXJcIixcbiAgICBcImludGVnZXJcIixcbiAgICBcInRpbWVcIixcbiAgICBcImRlbGF5X2xlbmd0aFwiLFxuICAgIFwibmF0dXJhbFwiLFxuICAgIFwicG9zaXRpdmVcIixcbiAgICBcInN0cmluZ1wiLFxuICAgIFwiYml0X3ZlY3RvclwiLFxuICAgIFwiZmlsZV9vcGVuX2tpbmRcIixcbiAgICBcImZpbGVfb3Blbl9zdGF0dXNcIixcbiAgICBcInN0ZF9sb2dpY1wiLFxuICAgIFwic3RkX2xvZ2ljX3ZlY3RvclwiLFxuICAgIFwidW5zaWduZWRcIixcbiAgICBcInNpZ25lZFwiLFxuICAgIFwiYm9vbGVhbl92ZWN0b3JcIixcbiAgICBcImludGVnZXJfdmVjdG9yXCIsXG4gICAgXCJzdGRfdWxvZ2ljXCIsXG4gICAgXCJzdGRfdWxvZ2ljX3ZlY3RvclwiLFxuICAgIFwidW5yZXNvbHZlZF91bnNpZ25lZFwiLFxuICAgIFwidV91bnNpZ25lZFwiLFxuICAgIFwidW5yZXNvbHZlZF9zaWduZWRcIixcbiAgICBcInVfc2lnbmVkXCIsXG4gICAgXCJyZWFsX3ZlY3RvclwiLFxuICAgIFwidGltZV92ZWN0b3JcIlxuICBdO1xuICBjb25zdCBMSVRFUkFMUyA9IFtcbiAgICAvLyBzZXZlcml0eV9sZXZlbFxuICAgIFwiZmFsc2VcIixcbiAgICBcInRydWVcIixcbiAgICBcIm5vdGVcIixcbiAgICBcIndhcm5pbmdcIixcbiAgICBcImVycm9yXCIsXG4gICAgXCJmYWlsdXJlXCIsXG4gICAgLy8gdGV4dGlvXG4gICAgXCJsaW5lXCIsXG4gICAgXCJ0ZXh0XCIsXG4gICAgXCJzaWRlXCIsXG4gICAgXCJ3aWR0aFwiXG4gIF07XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnVkhETCcsXG4gICAgY2FzZV9pbnNlbnNpdGl2ZTogdHJ1ZSxcbiAgICBrZXl3b3Jkczoge1xuICAgICAga2V5d29yZDogS0VZV09SRFMsXG4gICAgICBidWlsdF9pbjogQlVJTFRfSU5TLFxuICAgICAgbGl0ZXJhbDogTElURVJBTFNcbiAgICB9LFxuICAgIGlsbGVnYWw6IC9cXHsvLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLCAvLyBWSERMLTIwMDggYmxvY2sgY29tbWVudGluZy5cbiAgICAgIGhsanMuQ09NTUVOVCgnLS0nLCAnJCcpLFxuICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICAgICAgYmVnaW46IE5VTUJFUl9SRSxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICBiZWdpbjogJ1xcJyhVfFh8MHwxfFp8V3xMfEh8LSlcXCcnLFxuICAgICAgICBjb250YWluczogWyBobGpzLkJBQ0tTTEFTSF9FU0NBUEUgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc3ltYm9sJyxcbiAgICAgICAgYmVnaW46ICdcXCdbQS1aYS16XShfP1tBLVphLXowLTldKSonLFxuICAgICAgICBjb250YWluczogWyBobGpzLkJBQ0tTTEFTSF9FU0NBUEUgXVxuICAgICAgfVxuICAgIF1cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB2aGRsO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1727\n')},1751:(__unused_webpack_module,exports)=>{"use strict";eval("\n\nfunction stringifyNumber({ format, minFractionDigits, tag, value }) {\n if (typeof value === 'bigint')\n return String(value);\n const num = typeof value === 'number' ? value : Number(value);\n if (!isFinite(num))\n return isNaN(num) ? '.nan' : num < 0 ? '-.inf' : '.inf';\n let n = JSON.stringify(value);\n if (!format &&\n minFractionDigits &&\n (!tag || tag === 'tag:yaml.org,2002:float') &&\n /^\\d/.test(n)) {\n let i = n.indexOf('.');\n if (i < 0) {\n i = n.length;\n n += '.';\n }\n let d = minFractionDigits - (n.length - i - 1);\n while (d-- > 0)\n n += '0';\n }\n return n;\n}\n\nexports.stringifyNumber = stringifyNumber;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTc1MS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYiwyQkFBMkIsdUNBQXVDO0FBQ2xFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx1QkFBdUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9vYnNpZGlhbi1taW5kbWFwLW5leHRnZW4vLi9ub2RlX21vZHVsZXMvLnBucG0veWFtbEAyLjguMC9ub2RlX21vZHVsZXMveWFtbC9kaXN0L3N0cmluZ2lmeS9zdHJpbmdpZnlOdW1iZXIuanM/N2YxNyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmZ1bmN0aW9uIHN0cmluZ2lmeU51bWJlcih7IGZvcm1hdCwgbWluRnJhY3Rpb25EaWdpdHMsIHRhZywgdmFsdWUgfSkge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdiaWdpbnQnKVxuICAgICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbiAgICBjb25zdCBudW0gPSB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInID8gdmFsdWUgOiBOdW1iZXIodmFsdWUpO1xuICAgIGlmICghaXNGaW5pdGUobnVtKSlcbiAgICAgICAgcmV0dXJuIGlzTmFOKG51bSkgPyAnLm5hbicgOiBudW0gPCAwID8gJy0uaW5mJyA6ICcuaW5mJztcbiAgICBsZXQgbiA9IEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbiAgICBpZiAoIWZvcm1hdCAmJlxuICAgICAgICBtaW5GcmFjdGlvbkRpZ2l0cyAmJlxuICAgICAgICAoIXRhZyB8fCB0YWcgPT09ICd0YWc6eWFtbC5vcmcsMjAwMjpmbG9hdCcpICYmXG4gICAgICAgIC9eXFxkLy50ZXN0KG4pKSB7XG4gICAgICAgIGxldCBpID0gbi5pbmRleE9mKCcuJyk7XG4gICAgICAgIGlmIChpIDwgMCkge1xuICAgICAgICAgICAgaSA9IG4ubGVuZ3RoO1xuICAgICAgICAgICAgbiArPSAnLic7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGQgPSBtaW5GcmFjdGlvbkRpZ2l0cyAtIChuLmxlbmd0aCAtIGkgLSAxKTtcbiAgICAgICAgd2hpbGUgKGQtLSA+IDApXG4gICAgICAgICAgICBuICs9ICcwJztcbiAgICB9XG4gICAgcmV0dXJuIG47XG59XG5cbmV4cG9ydHMuc3RyaW5naWZ5TnVtYmVyID0gc3RyaW5naWZ5TnVtYmVyO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1751\n")},1812:module=>{eval("const flatmap = (makeSource, combineResults) => inputSource => (start, sink) => {\r\n if (start !== 0) return;\r\n\r\n if (!combineResults) combineResults = (x, y) => y;\r\n\r\n let index = 0;\r\n let talkbacks = {};\r\n let sourceEnded = false;\r\n let inputSourceTalkback = null;\r\n\r\n let pullHandle = (t, d) => {\r\n var currTalkback = Object.values(talkbacks).pop();\r\n if (t === 1) {\r\n if (currTalkback) currTalkback(1);\r\n else if (!sourceEnded) inputSourceTalkback(1);\r\n else sink(2);\r\n }\r\n if (t === 2) {\r\n if (currTalkback) currTalkback(2);\r\n inputSourceTalkback(2);\r\n }\r\n }\r\n\r\n let stopOrContinue = d => {\r\n if (sourceEnded && Object.keys(talkbacks).length === 0) sink(2, d);\r\n else inputSourceTalkback(1);\r\n }\r\n\r\n let makeSink = (i, d, talkbacks) =>\r\n (currT, currD) => {\r\n if (currT === 0) {talkbacks[i] = currD; talkbacks[i](1);};\r\n if (currT === 1) sink(1, combineResults(d, currD));\r\n if (currT === 2) {\r\n delete talkbacks[i];\r\n stopOrContinue(currD);\r\n }\r\n }\r\n\r\n inputSource(0, (t, d) => {\r\n if (t === 0) {\r\n inputSourceTalkback = d;\r\n sink(0, pullHandle);\r\n }\r\n if (t === 1) {\r\n makeSource(d)(0, makeSink(index++, d, talkbacks));\r\n }\r\n if (t === 2) {\r\n sourceEnded = true;\r\n stopOrContinue(d);\r\n }\r\n });\r\n}\r\n\r\nmodule.exports = flatmap;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTgxMi5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4QkFBOEIsc0JBQXNCO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL29ic2lkaWFuLW1pbmRtYXAtbmV4dGdlbi8uL25vZGVfbW9kdWxlcy8ucG5wbS9jYWxsYmFnLWZsYXQtbWFwQDEuMC4yL25vZGVfbW9kdWxlcy9jYWxsYmFnLWZsYXQtbWFwL2luZGV4LmpzPzk4ZmUiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgZmxhdG1hcCA9IChtYWtlU291cmNlLCBjb21iaW5lUmVzdWx0cykgPT4gaW5wdXRTb3VyY2UgPT4gKHN0YXJ0LCBzaW5rKSA9PiB7XHJcbiAgICBpZiAoc3RhcnQgIT09IDApIHJldHVybjtcclxuXHJcbiAgICBpZiAoIWNvbWJpbmVSZXN1bHRzKSBjb21iaW5lUmVzdWx0cyA9ICh4LCB5KSA9PiB5O1xyXG5cclxuICAgIGxldCBpbmRleCA9IDA7XHJcbiAgICBsZXQgdGFsa2JhY2tzID0ge307XHJcbiAgICBsZXQgc291cmNlRW5kZWQgPSBmYWxzZTtcclxuICAgIGxldCBpbnB1dFNvdXJjZVRhbGtiYWNrID0gbnVsbDtcclxuXHJcbiAgICBsZXQgcHVsbEhhbmRsZSA9ICh0LCBkKSA9PiB7XHJcbiAgICAgICAgdmFyIGN1cnJUYWxrYmFjayA9IE9iamVjdC52YWx1ZXModGFsa2JhY2tzKS5wb3AoKTtcclxuICAgICAgICBpZiAodCA9PT0gMSkge1xyXG4gICAgICAgICAgICBpZiAoY3VyclRhbGtiYWNrKSBjdXJyVGFsa2JhY2soMSk7XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKCFzb3VyY2VFbmRlZCkgaW5wdXRTb3VyY2VUYWxrYmFjaygxKTtcclxuICAgICAgICAgICAgZWxzZSBzaW5rKDIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodCA9PT0gMikge1xyXG4gICAgICAgICAgICBpZiAoY3VyclRhbGtiYWNrKSBjdXJyVGFsa2JhY2soMik7XHJcbiAgICAgICAgICAgIGlucHV0U291cmNlVGFsa2JhY2soMik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGxldCBzdG9wT3JDb250aW51ZSA9IGQgPT4ge1xyXG4gICAgICAgIGlmIChzb3VyY2VFbmRlZCAmJiBPYmplY3Qua2V5cyh0YWxrYmFja3MpLmxlbmd0aCA9PT0gMCkgc2luaygyLCBkKTtcclxuICAgICAgICBlbHNlIGlucHV0U291cmNlVGFsa2JhY2soMSk7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IG1ha2VTaW5rID0gKGksIGQsIHRhbGtiYWNrcykgPT5cclxuICAgICAgICAoY3VyclQsIGN1cnJEKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChjdXJyVCA9PT0gMCkge3RhbGtiYWNrc1tpXSA9IGN1cnJEOyB0YWxrYmFja3NbaV0oMSk7fTtcclxuICAgICAgICAgICAgaWYgKGN1cnJUID09PSAxKSBzaW5rKDEsIGNvbWJpbmVSZXN1bHRzKGQsIGN1cnJEKSk7XHJcbiAgICAgICAgICAgIGlmIChjdXJyVCA9PT0gMikge1xyXG4gICAgICAgICAgICAgICAgZGVsZXRlIHRhbGtiYWNrc1tpXTtcclxuICAgICAgICAgICAgICAgIHN0b3BPckNvbnRpbnVlKGN1cnJEKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICBpbnB1dFNvdXJjZSgwLCAodCwgZCkgPT4ge1xyXG4gICAgICAgIGlmICh0ID09PSAwKSB7XHJcbiAgICAgICAgICAgIGlucHV0U291cmNlVGFsa2JhY2sgPSBkO1xyXG4gICAgICAgICAgICBzaW5rKDAsIHB1bGxIYW5kbGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodCA9PT0gMSkge1xyXG4gICAgICAgICAgICBtYWtlU291cmNlKGQpKDAsIG1ha2VTaW5rKGluZGV4KyssIGQsIHRhbGtiYWNrcykpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodCA9PT0gMikge1xyXG4gICAgICAgICAgICBzb3VyY2VFbmRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHN0b3BPckNvbnRpbnVlKGQpO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGZsYXRtYXA7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1812\n")},1813:module=>{eval('/*\nLanguage: C/AL\nAuthor: Kenneth Fuglsang Christensen \nDescription: Provides highlighting of Microsoft Dynamics NAV C/AL code files\nWebsite: https://docs.microsoft.com/en-us/dynamics-nav/programming-in-c-al\nCategory: enterprise\n*/\n\n/** @type LanguageFn */\nfunction cal(hljs) {\n const regex = hljs.regex;\n const KEYWORDS = [\n "div",\n "mod",\n "in",\n "and",\n "or",\n "not",\n "xor",\n "asserterror",\n "begin",\n "case",\n "do",\n "downto",\n "else",\n "end",\n "exit",\n "for",\n "local",\n "if",\n "of",\n "repeat",\n "then",\n "to",\n "until",\n "while",\n "with",\n "var"\n ];\n const LITERALS = \'false true\';\n const COMMENT_MODES = [\n hljs.C_LINE_COMMENT_MODE,\n hljs.COMMENT(\n /\\{/,\n /\\}/,\n { relevance: 0 }\n ),\n hljs.COMMENT(\n /\\(\\*/,\n /\\*\\)/,\n { relevance: 10 }\n )\n ];\n const STRING = {\n className: \'string\',\n begin: /\'/,\n end: /\'/,\n contains: [ { begin: /\'\'/ } ]\n };\n const CHAR_STRING = {\n className: \'string\',\n begin: /(#\\d+)+/\n };\n const DATE = {\n className: \'number\',\n begin: \'\\\\b\\\\d+(\\\\.\\\\d+)?(DT|D|T)\',\n relevance: 0\n };\n const DBL_QUOTED_VARIABLE = {\n className: \'string\', // not a string technically but makes sense to be highlighted in the same style\n begin: \'"\',\n end: \'"\'\n };\n\n const PROCEDURE = {\n match: [\n /procedure/,\n /\\s+/,\n /[a-zA-Z_][\\w@]*/,\n /\\s*/\n ],\n scope: {\n 1: "keyword",\n 3: "title.function"\n },\n contains: [\n {\n className: \'params\',\n begin: /\\(/,\n end: /\\)/,\n keywords: KEYWORDS,\n contains: [\n STRING,\n CHAR_STRING,\n hljs.NUMBER_MODE\n ]\n },\n ...COMMENT_MODES\n ]\n };\n\n const OBJECT_TYPES = [\n "Table",\n "Form",\n "Report",\n "Dataport",\n "Codeunit",\n "XMLport",\n "MenuSuite",\n "Page",\n "Query"\n ];\n const OBJECT = {\n match: [\n /OBJECT/,\n /\\s+/,\n regex.either(...OBJECT_TYPES),\n /\\s+/,\n /\\d+/,\n /\\s+(?=[^\\s])/,\n /.*/,\n /$/\n ],\n relevance: 3,\n scope: {\n 1: "keyword",\n 3: "type",\n 5: "number",\n 7: "title"\n }\n };\n\n const PROPERTY = {\n match: /[\\w]+(?=\\=)/,\n scope: "attribute",\n relevance: 0\n };\n\n return {\n name: \'C/AL\',\n case_insensitive: true,\n keywords: {\n keyword: KEYWORDS,\n literal: LITERALS\n },\n illegal: /\\/\\*/,\n contains: [\n PROPERTY,\n STRING,\n CHAR_STRING,\n DATE,\n DBL_QUOTED_VARIABLE,\n hljs.NUMBER_MODE,\n OBJECT,\n PROCEDURE\n ]\n };\n}\n\nmodule.exports = cal;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTgxMy5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULFNBQVM7QUFDVCxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLGNBQWM7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL29ic2lkaWFuLW1pbmRtYXAtbmV4dGdlbi8uL25vZGVfbW9kdWxlcy8ucG5wbS9oaWdobGlnaHQuanNAMTEuMTEuMS9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvY2FsLmpzPzUzZDciXSwic291cmNlc0NvbnRlbnQiOlsiLypcbkxhbmd1YWdlOiBDL0FMXG5BdXRob3I6IEtlbm5ldGggRnVnbHNhbmcgQ2hyaXN0ZW5zZW4gPGtmdWdsc2FuZ0BnbWFpbC5jb20+XG5EZXNjcmlwdGlvbjogUHJvdmlkZXMgaGlnaGxpZ2h0aW5nIG9mIE1pY3Jvc29mdCBEeW5hbWljcyBOQVYgQy9BTCBjb2RlIGZpbGVzXG5XZWJzaXRlOiBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9keW5hbWljcy1uYXYvcHJvZ3JhbW1pbmctaW4tYy1hbFxuQ2F0ZWdvcnk6IGVudGVycHJpc2VcbiovXG5cbi8qKiBAdHlwZSBMYW5ndWFnZUZuICovXG5mdW5jdGlvbiBjYWwoaGxqcykge1xuICBjb25zdCByZWdleCA9IGhsanMucmVnZXg7XG4gIGNvbnN0IEtFWVdPUkRTID0gW1xuICAgIFwiZGl2XCIsXG4gICAgXCJtb2RcIixcbiAgICBcImluXCIsXG4gICAgXCJhbmRcIixcbiAgICBcIm9yXCIsXG4gICAgXCJub3RcIixcbiAgICBcInhvclwiLFxuICAgIFwiYXNzZXJ0ZXJyb3JcIixcbiAgICBcImJlZ2luXCIsXG4gICAgXCJjYXNlXCIsXG4gICAgXCJkb1wiLFxuICAgIFwiZG93bnRvXCIsXG4gICAgXCJlbHNlXCIsXG4gICAgXCJlbmRcIixcbiAgICBcImV4aXRcIixcbiAgICBcImZvclwiLFxuICAgIFwibG9jYWxcIixcbiAgICBcImlmXCIsXG4gICAgXCJvZlwiLFxuICAgIFwicmVwZWF0XCIsXG4gICAgXCJ0aGVuXCIsXG4gICAgXCJ0b1wiLFxuICAgIFwidW50aWxcIixcbiAgICBcIndoaWxlXCIsXG4gICAgXCJ3aXRoXCIsXG4gICAgXCJ2YXJcIlxuICBdO1xuICBjb25zdCBMSVRFUkFMUyA9ICdmYWxzZSB0cnVlJztcbiAgY29uc3QgQ09NTUVOVF9NT0RFUyA9IFtcbiAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgaGxqcy5DT01NRU5UKFxuICAgICAgL1xcey8sXG4gICAgICAvXFx9LyxcbiAgICAgIHsgcmVsZXZhbmNlOiAwIH1cbiAgICApLFxuICAgIGhsanMuQ09NTUVOVChcbiAgICAgIC9cXChcXCovLFxuICAgICAgL1xcKlxcKS8sXG4gICAgICB7IHJlbGV2YW5jZTogMTAgfVxuICAgIClcbiAgXTtcbiAgY29uc3QgU1RSSU5HID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgYmVnaW46IC8nLyxcbiAgICBlbmQ6IC8nLyxcbiAgICBjb250YWluczogWyB7IGJlZ2luOiAvJycvIH0gXVxuICB9O1xuICBjb25zdCBDSEFSX1NUUklORyA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIGJlZ2luOiAvKCNcXGQrKSsvXG4gIH07XG4gIGNvbnN0IERBVEUgPSB7XG4gICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICBiZWdpbjogJ1xcXFxiXFxcXGQrKFxcXFwuXFxcXGQrKT8oRFR8RHxUKScsXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG4gIGNvbnN0IERCTF9RVU9URURfVkFSSUFCTEUgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJywgLy8gbm90IGEgc3RyaW5nIHRlY2huaWNhbGx5IGJ1dCBtYWtlcyBzZW5zZSB0byBiZSBoaWdobGlnaHRlZCBpbiB0aGUgc2FtZSBzdHlsZVxuICAgIGJlZ2luOiAnXCInLFxuICAgIGVuZDogJ1wiJ1xuICB9O1xuXG4gIGNvbnN0IFBST0NFRFVSRSA9IHtcbiAgICBtYXRjaDogW1xuICAgICAgL3Byb2NlZHVyZS8sXG4gICAgICAvXFxzKy8sXG4gICAgICAvW2EtekEtWl9dW1xcd0BdKi8sXG4gICAgICAvXFxzKi9cbiAgICBdLFxuICAgIHNjb3BlOiB7XG4gICAgICAxOiBcImtleXdvcmRcIixcbiAgICAgIDM6IFwidGl0bGUuZnVuY3Rpb25cIlxuICAgIH0sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAncGFyYW1zJyxcbiAgICAgICAgYmVnaW46IC9cXCgvLFxuICAgICAgICBlbmQ6IC9cXCkvLFxuICAgICAgICBrZXl3b3JkczogS0VZV09SRFMsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgU1RSSU5HLFxuICAgICAgICAgIENIQVJfU1RSSU5HLFxuICAgICAgICAgIGhsanMuTlVNQkVSX01PREVcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIC4uLkNPTU1FTlRfTU9ERVNcbiAgICBdXG4gIH07XG5cbiAgY29uc3QgT0JKRUNUX1RZUEVTID0gW1xuICAgIFwiVGFibGVcIixcbiAgICBcIkZvcm1cIixcbiAgICBcIlJlcG9ydFwiLFxuICAgIFwiRGF0YXBvcnRcIixcbiAgICBcIkNvZGV1bml0XCIsXG4gICAgXCJYTUxwb3J0XCIsXG4gICAgXCJNZW51U3VpdGVcIixcbiAgICBcIlBhZ2VcIixcbiAgICBcIlF1ZXJ5XCJcbiAgXTtcbiAgY29uc3QgT0JKRUNUID0ge1xuICAgIG1hdGNoOiBbXG4gICAgICAvT0JKRUNULyxcbiAgICAgIC9cXHMrLyxcbiAgICAgIHJlZ2V4LmVpdGhlciguLi5PQkpFQ1RfVFlQRVMpLFxuICAgICAgL1xccysvLFxuICAgICAgL1xcZCsvLFxuICAgICAgL1xccysoPz1bXlxcc10pLyxcbiAgICAgIC8uKi8sXG4gICAgICAvJC9cbiAgICBdLFxuICAgIHJlbGV2YW5jZTogMyxcbiAgICBzY29wZToge1xuICAgICAgMTogXCJrZXl3b3JkXCIsXG4gICAgICAzOiBcInR5cGVcIixcbiAgICAgIDU6IFwibnVtYmVyXCIsXG4gICAgICA3OiBcInRpdGxlXCJcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgUFJPUEVSVFkgPSB7XG4gICAgbWF0Y2g6IC9bXFx3XSsoPz1cXD0pLyxcbiAgICBzY29wZTogXCJhdHRyaWJ1dGVcIixcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdDL0FMJyxcbiAgICBjYXNlX2luc2Vuc2l0aXZlOiB0cnVlLFxuICAgIGtleXdvcmRzOiB7XG4gICAgICBrZXl3b3JkOiBLRVlXT1JEUyxcbiAgICAgIGxpdGVyYWw6IExJVEVSQUxTXG4gICAgfSxcbiAgICBpbGxlZ2FsOiAvXFwvXFwqLyxcbiAgICBjb250YWluczogW1xuICAgICAgUFJPUEVSVFksXG4gICAgICBTVFJJTkcsXG4gICAgICBDSEFSX1NUUklORyxcbiAgICAgIERBVEUsXG4gICAgICBEQkxfUVVPVEVEX1ZBUklBQkxFLFxuICAgICAgaGxqcy5OVU1CRVJfTU9ERSxcbiAgICAgIE9CSkVDVCxcbiAgICAgIFBST0NFRFVSRVxuICAgIF1cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjYWw7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///1813\n')},1861:module=>{eval("/*\n Language: JBoss CLI\n Author: Raphaël Parrëe \n Description: language definition jboss cli\n Website: https://docs.jboss.org/author/display/WFLY/Command+Line+Interface\n Category: config\n */\n\nfunction jbossCli(hljs) {\n const PARAM = {\n begin: /[\\w-]+ *=/,\n returnBegin: true,\n relevance: 0,\n contains: [\n {\n className: 'attr',\n begin: /[\\w-]+/\n }\n ]\n };\n const PARAMSBLOCK = {\n className: 'params',\n begin: /\\(/,\n end: /\\)/,\n contains: [ PARAM ],\n relevance: 0\n };\n const OPERATION = {\n className: 'function',\n begin: /:[\\w\\-.]+/,\n relevance: 0\n };\n const PATH = {\n className: 'string',\n begin: /\\B([\\/.])[\\w\\-.\\/=]+/\n };\n const COMMAND_PARAMS = {\n className: 'params',\n begin: /--[\\w\\-=\\/]+/\n };\n return {\n name: 'JBoss CLI',\n aliases: [ 'wildfly-cli' ],\n keywords: {\n $pattern: '[a-z\\-]+',\n keyword: 'alias batch cd clear command connect connection-factory connection-info data-source deploy '\n + 'deployment-info deployment-overlay echo echo-dmr help history if jdbc-driver-info jms-queue|20 jms-topic|20 ls '\n + 'patch pwd quit read-attribute read-operation reload rollout-plan run-batch set shutdown try unalias '\n + 'undeploy unset version xa-data-source', // module\n literal: 'true false'\n },\n contains: [\n hljs.HASH_COMMENT_MODE,\n hljs.QUOTE_STRING_MODE,\n COMMAND_PARAMS,\n OPERATION,\n PATH,\n PARAMSBLOCK\n ]\n };\n}\n\nmodule.exports = jbossCli;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTg2MS5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9vYnNpZGlhbi1taW5kbWFwLW5leHRnZW4vLi9ub2RlX21vZHVsZXMvLnBucG0vaGlnaGxpZ2h0LmpzQDExLjExLjEvbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2pib3NzLWNsaS5qcz85ZjUxIl0sInNvdXJjZXNDb250ZW50IjpbIi8qXG4gTGFuZ3VhZ2U6IEpCb3NzIENMSVxuIEF1dGhvcjogUmFwaGHDq2wgUGFycsOrZSA8cnBhcnJlZUBlZGM0aXQuY29tPlxuIERlc2NyaXB0aW9uOiBsYW5ndWFnZSBkZWZpbml0aW9uIGpib3NzIGNsaVxuIFdlYnNpdGU6IGh0dHBzOi8vZG9jcy5qYm9zcy5vcmcvYXV0aG9yL2Rpc3BsYXkvV0ZMWS9Db21tYW5kK0xpbmUrSW50ZXJmYWNlXG4gQ2F0ZWdvcnk6IGNvbmZpZ1xuICovXG5cbmZ1bmN0aW9uIGpib3NzQ2xpKGhsanMpIHtcbiAgY29uc3QgUEFSQU0gPSB7XG4gICAgYmVnaW46IC9bXFx3LV0rICo9LyxcbiAgICByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICByZWxldmFuY2U6IDAsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnYXR0cicsXG4gICAgICAgIGJlZ2luOiAvW1xcdy1dKy9cbiAgICAgIH1cbiAgICBdXG4gIH07XG4gIGNvbnN0IFBBUkFNU0JMT0NLID0ge1xuICAgIGNsYXNzTmFtZTogJ3BhcmFtcycsXG4gICAgYmVnaW46IC9cXCgvLFxuICAgIGVuZDogL1xcKS8sXG4gICAgY29udGFpbnM6IFsgUEFSQU0gXSxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcbiAgY29uc3QgT1BFUkFUSU9OID0ge1xuICAgIGNsYXNzTmFtZTogJ2Z1bmN0aW9uJyxcbiAgICBiZWdpbjogLzpbXFx3XFwtLl0rLyxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcbiAgY29uc3QgUEFUSCA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIGJlZ2luOiAvXFxCKFtcXC8uXSlbXFx3XFwtLlxcLz1dKy9cbiAgfTtcbiAgY29uc3QgQ09NTUFORF9QQVJBTVMgPSB7XG4gICAgY2xhc3NOYW1lOiAncGFyYW1zJyxcbiAgICBiZWdpbjogLy0tW1xcd1xcLT1cXC9dKy9cbiAgfTtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnSkJvc3MgQ0xJJyxcbiAgICBhbGlhc2VzOiBbICd3aWxkZmx5LWNsaScgXSxcbiAgICBrZXl3b3Jkczoge1xuICAgICAgJHBhdHRlcm46ICdbYS16XFwtXSsnLFxuICAgICAga2V5d29yZDogJ2FsaWFzIGJhdGNoIGNkIGNsZWFyIGNvbW1hbmQgY29ubmVjdCBjb25uZWN0aW9uLWZhY3RvcnkgY29ubmVjdGlvbi1pbmZvIGRhdGEtc291cmNlIGRlcGxveSAnXG4gICAgICArICdkZXBsb3ltZW50LWluZm8gZGVwbG95bWVudC1vdmVybGF5IGVjaG8gZWNoby1kbXIgaGVscCBoaXN0b3J5IGlmIGpkYmMtZHJpdmVyLWluZm8gam1zLXF1ZXVlfDIwIGptcy10b3BpY3wyMCBscyAnXG4gICAgICArICdwYXRjaCBwd2QgcXVpdCByZWFkLWF0dHJpYnV0ZSByZWFkLW9wZXJhdGlvbiByZWxvYWQgcm9sbG91dC1wbGFuIHJ1bi1iYXRjaCBzZXQgc2h1dGRvd24gdHJ5IHVuYWxpYXMgJ1xuICAgICAgKyAndW5kZXBsb3kgdW5zZXQgdmVyc2lvbiB4YS1kYXRhLXNvdXJjZScsIC8vIG1vZHVsZVxuICAgICAgbGl0ZXJhbDogJ3RydWUgZmFsc2UnXG4gICAgfSxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5IQVNIX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICBDT01NQU5EX1BBUkFNUyxcbiAgICAgIE9QRVJBVElPTixcbiAgICAgIFBBVEgsXG4gICAgICBQQVJBTVNCTE9DS1xuICAgIF1cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBqYm9zc0NsaTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1861\n")},1922:module=>{eval("/*\nLanguage: Extended Backus-Naur Form\nAuthor: Alex McKibben \nWebsite: https://en.wikipedia.org/wiki/Extended_Backus–Naur_form\nCategory: syntax\n*/\n\n/** @type LanguageFn */\nfunction ebnf(hljs) {\n const commentMode = hljs.COMMENT(/\\(\\*/, /\\*\\)/);\n\n const nonTerminalMode = {\n className: \"attribute\",\n begin: /^[ ]*[a-zA-Z]+([\\s_-]+[a-zA-Z]+)*/\n };\n\n const specialSequenceMode = {\n className: \"meta\",\n begin: /\\?.*\\?/\n };\n\n const ruleBodyMode = {\n begin: /=/,\n end: /[.;]/,\n contains: [\n commentMode,\n specialSequenceMode,\n {\n // terminals\n className: 'string',\n variants: [\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE,\n {\n begin: '`',\n end: '`'\n }\n ]\n }\n ]\n };\n\n return {\n name: 'Extended Backus-Naur Form',\n illegal: /\\S/,\n contains: [\n commentMode,\n nonTerminalMode,\n ruleBodyMode\n ]\n };\n}\n\nmodule.exports = ebnf;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTkyMi5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL29ic2lkaWFuLW1pbmRtYXAtbmV4dGdlbi8uL25vZGVfbW9kdWxlcy8ucG5wbS9oaWdobGlnaHQuanNAMTEuMTEuMS9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvZWJuZi5qcz80NDczIl0sInNvdXJjZXNDb250ZW50IjpbIi8qXG5MYW5ndWFnZTogRXh0ZW5kZWQgQmFja3VzLU5hdXIgRm9ybVxuQXV0aG9yOiBBbGV4IE1jS2liYmVuIDxhbGV4QG51bGxzY29wZS5uZXQ+XG5XZWJzaXRlOiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9FeHRlbmRlZF9CYWNrdXPigJNOYXVyX2Zvcm1cbkNhdGVnb3J5OiBzeW50YXhcbiovXG5cbi8qKiBAdHlwZSBMYW5ndWFnZUZuICovXG5mdW5jdGlvbiBlYm5mKGhsanMpIHtcbiAgY29uc3QgY29tbWVudE1vZGUgPSBobGpzLkNPTU1FTlQoL1xcKFxcKi8sIC9cXCpcXCkvKTtcblxuICBjb25zdCBub25UZXJtaW5hbE1vZGUgPSB7XG4gICAgY2xhc3NOYW1lOiBcImF0dHJpYnV0ZVwiLFxuICAgIGJlZ2luOiAvXlsgXSpbYS16QS1aXSsoW1xcc18tXStbYS16QS1aXSspKi9cbiAgfTtcblxuICBjb25zdCBzcGVjaWFsU2VxdWVuY2VNb2RlID0ge1xuICAgIGNsYXNzTmFtZTogXCJtZXRhXCIsXG4gICAgYmVnaW46IC9cXD8uKlxcPy9cbiAgfTtcblxuICBjb25zdCBydWxlQm9keU1vZGUgPSB7XG4gICAgYmVnaW46IC89LyxcbiAgICBlbmQ6IC9bLjtdLyxcbiAgICBjb250YWluczogW1xuICAgICAgY29tbWVudE1vZGUsXG4gICAgICBzcGVjaWFsU2VxdWVuY2VNb2RlLFxuICAgICAge1xuICAgICAgICAvLyB0ZXJtaW5hbHNcbiAgICAgICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICBobGpzLkFQT1NfU1RSSU5HX01PREUsXG4gICAgICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogJ2AnLFxuICAgICAgICAgICAgZW5kOiAnYCdcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH1cbiAgICBdXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnRXh0ZW5kZWQgQmFja3VzLU5hdXIgRm9ybScsXG4gICAgaWxsZWdhbDogL1xcUy8sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGNvbW1lbnRNb2RlLFxuICAgICAgbm9uVGVybWluYWxNb2RlLFxuICAgICAgcnVsZUJvZHlNb2RlXG4gICAgXVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGVibmY7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///1922\n")},1943:module=>{eval("/*\nLanguage: Scala\nCategory: functional\nAuthor: Jan Berkel \nContributors: Erik Osheim \nWebsite: https://www.scala-lang.org\n*/\n\nfunction scala(hljs) {\n const regex = hljs.regex;\n const ANNOTATION = {\n className: 'meta',\n begin: '@[A-Za-z]+'\n };\n\n // used in strings for escaping/interpolation/substitution\n const SUBST = {\n className: 'subst',\n variants: [\n { begin: '\\\\$[A-Za-z0-9_]+' },\n {\n begin: /\\$\\{/,\n end: /\\}/\n }\n ]\n };\n\n const STRING = {\n className: 'string',\n variants: [\n {\n begin: '\"\"\"',\n end: '\"\"\"'\n },\n {\n begin: '\"',\n end: '\"',\n illegal: '\\\\n',\n contains: [ hljs.BACKSLASH_ESCAPE ]\n },\n {\n begin: '[a-z]+\"',\n end: '\"',\n illegal: '\\\\n',\n contains: [\n hljs.BACKSLASH_ESCAPE,\n SUBST\n ]\n },\n {\n className: 'string',\n begin: '[a-z]+\"\"\"',\n end: '\"\"\"',\n contains: [ SUBST ],\n relevance: 10\n }\n ]\n\n };\n\n const TYPE = {\n className: 'type',\n begin: '\\\\b[A-Z][A-Za-z0-9_]*',\n relevance: 0\n };\n\n const NAME = {\n className: 'title',\n begin: /[^0-9\\n\\t \"'(),.`{}\\[\\]:;][^\\n\\t \"'(),.`{}\\[\\]:;]+|[^0-9\\n\\t \"'(),.`{}\\[\\]:;=]/,\n relevance: 0\n };\n\n const CLASS = {\n className: 'class',\n beginKeywords: 'class object trait type',\n end: /[:={\\[\\n;]/,\n excludeEnd: true,\n contains: [\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE,\n {\n beginKeywords: 'extends with',\n relevance: 10\n },\n {\n begin: /\\[/,\n end: /\\]/,\n excludeBegin: true,\n excludeEnd: true,\n relevance: 0,\n contains: [ \n TYPE, \n hljs.C_LINE_COMMENT_MODE, \n hljs.C_BLOCK_COMMENT_MODE, \n ]\n },\n {\n className: 'params',\n begin: /\\(/,\n end: /\\)/,\n excludeBegin: true,\n excludeEnd: true,\n relevance: 0,\n contains: [ \n TYPE, \n hljs.C_LINE_COMMENT_MODE, \n hljs.C_BLOCK_COMMENT_MODE, \n ]\n },\n NAME\n ]\n };\n\n const METHOD = {\n className: 'function',\n beginKeywords: 'def',\n end: regex.lookahead(/[:={\\[(\\n;]/),\n contains: [ NAME ]\n };\n\n const EXTENSION = {\n begin: [\n /^\\s*/, // Is first token on the line\n 'extension',\n /\\s+(?=[[(])/, // followed by at least one space and `[` or `(`\n ],\n beginScope: { 2: \"keyword\", }\n };\n\n const END = {\n begin: [\n /^\\s*/, // Is first token on the line\n /end/,\n /\\s+/,\n /(extension\\b)?/, // `extension` is the only marker that follows an `end` that cannot be captured by another rule.\n ],\n beginScope: {\n 2: \"keyword\",\n 4: \"keyword\",\n }\n };\n\n // TODO: use negative look-behind in future\n // /(?',\n /\\s+/,\n /using/,\n /\\s+/,\n /\\S+/\n ],\n beginScope: {\n 1: \"comment\",\n 3: \"keyword\",\n 5: \"type\"\n },\n end: /$/,\n contains: [\n DIRECTIVE_VALUE,\n ]\n };\n\n return {\n name: 'Scala',\n keywords: {\n literal: 'true false null',\n keyword: 'type yield lazy override def with val var sealed abstract private trait object if then forSome for while do throw finally protected extends import final return else break new catch super class case package default try this match continue throws implicit export enum given transparent'\n },\n contains: [\n USING_DIRECTIVE,\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE,\n STRING,\n TYPE,\n METHOD,\n CLASS,\n hljs.C_NUMBER_MODE,\n EXTENSION,\n END,\n ...INLINE_MODES,\n USING_PARAM_CLAUSE,\n ANNOTATION\n ]\n };\n}\n\nmodule.exports = scala;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTk0My5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLDJCQUEyQjtBQUNuQztBQUNBLG9CQUFvQjtBQUNwQixnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSwrQkFBK0IsTUFBTSxpQkFBaUIsTUFBTSxzQkFBc0IsTUFBTTtBQUN4RjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGNBQWMsS0FBSztBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLE1BQU07QUFDcEM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU0scUJBQXFCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vb2JzaWRpYW4tbWluZG1hcC1uZXh0Z2VuLy4vbm9kZV9tb2R1bGVzLy5wbnBtL2hpZ2hsaWdodC5qc0AxMS4xMS4xL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9zY2FsYS5qcz9lMWVhIl0sInNvdXJjZXNDb250ZW50IjpbIi8qXG5MYW5ndWFnZTogU2NhbGFcbkNhdGVnb3J5OiBmdW5jdGlvbmFsXG5BdXRob3I6IEphbiBCZXJrZWwgPGphbi5iZXJrZWxAZ21haWwuY29tPlxuQ29udHJpYnV0b3JzOiBFcmlrIE9zaGVpbSA8ZF9tQHBsYXN0aWMtaWRvbGF0cnkuY29tPlxuV2Vic2l0ZTogaHR0cHM6Ly93d3cuc2NhbGEtbGFuZy5vcmdcbiovXG5cbmZ1bmN0aW9uIHNjYWxhKGhsanMpIHtcbiAgY29uc3QgcmVnZXggPSBobGpzLnJlZ2V4O1xuICBjb25zdCBBTk5PVEFUSU9OID0ge1xuICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgIGJlZ2luOiAnQFtBLVphLXpdKydcbiAgfTtcblxuICAvLyB1c2VkIGluIHN0cmluZ3MgZm9yIGVzY2FwaW5nL2ludGVycG9sYXRpb24vc3Vic3RpdHV0aW9uXG4gIGNvbnN0IFNVQlNUID0ge1xuICAgIGNsYXNzTmFtZTogJ3N1YnN0JyxcbiAgICB2YXJpYW50czogW1xuICAgICAgeyBiZWdpbjogJ1xcXFwkW0EtWmEtejAtOV9dKycgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC9cXCRcXHsvLFxuICAgICAgICBlbmQ6IC9cXH0vXG4gICAgICB9XG4gICAgXVxuICB9O1xuXG4gIGNvbnN0IFNUUklORyA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnXCJcIlwiJyxcbiAgICAgICAgZW5kOiAnXCJcIlwiJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdcIicsXG4gICAgICAgIGVuZDogJ1wiJyxcbiAgICAgICAgaWxsZWdhbDogJ1xcXFxuJyxcbiAgICAgICAgY29udGFpbnM6IFsgaGxqcy5CQUNLU0xBU0hfRVNDQVBFIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnW2Etel0rXCInLFxuICAgICAgICBlbmQ6ICdcIicsXG4gICAgICAgIGlsbGVnYWw6ICdcXFxcbicsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgaGxqcy5CQUNLU0xBU0hfRVNDQVBFLFxuICAgICAgICAgIFNVQlNUXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgIGJlZ2luOiAnW2Etel0rXCJcIlwiJyxcbiAgICAgICAgZW5kOiAnXCJcIlwiJyxcbiAgICAgICAgY29udGFpbnM6IFsgU1VCU1QgXSxcbiAgICAgICAgcmVsZXZhbmNlOiAxMFxuICAgICAgfVxuICAgIF1cblxuICB9O1xuXG4gIGNvbnN0IFRZUEUgPSB7XG4gICAgY2xhc3NOYW1lOiAndHlwZScsXG4gICAgYmVnaW46ICdcXFxcYltBLVpdW0EtWmEtejAtOV9dKicsXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG5cbiAgY29uc3QgTkFNRSA9IHtcbiAgICBjbGFzc05hbWU6ICd0aXRsZScsXG4gICAgYmVnaW46IC9bXjAtOVxcblxcdCBcIicoKSwuYHt9XFxbXFxdOjtdW15cXG5cXHQgXCInKCksLmB7fVxcW1xcXTo7XSt8W14wLTlcXG5cXHQgXCInKCksLmB7fVxcW1xcXTo7PV0vLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuXG4gIGNvbnN0IENMQVNTID0ge1xuICAgIGNsYXNzTmFtZTogJ2NsYXNzJyxcbiAgICBiZWdpbktleXdvcmRzOiAnY2xhc3Mgb2JqZWN0IHRyYWl0IHR5cGUnLFxuICAgIGVuZDogL1s6PXtcXFtcXG47XS8sXG4gICAgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ2V4dGVuZHMgd2l0aCcsXG4gICAgICAgIHJlbGV2YW5jZTogMTBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvXFxbLyxcbiAgICAgICAgZW5kOiAvXFxdLyxcbiAgICAgICAgZXhjbHVkZUJlZ2luOiB0cnVlLFxuICAgICAgICBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgIGNvbnRhaW5zOiBbIFxuICAgICAgICAgIFRZUEUsIFxuICAgICAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSwgXG4gICAgICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSwgXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3BhcmFtcycsXG4gICAgICAgIGJlZ2luOiAvXFwoLyxcbiAgICAgICAgZW5kOiAvXFwpLyxcbiAgICAgICAgZXhjbHVkZUJlZ2luOiB0cnVlLFxuICAgICAgICBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgIGNvbnRhaW5zOiBbIFxuICAgICAgICAgIFRZUEUsIFxuICAgICAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSwgXG4gICAgICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSwgXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBOQU1FXG4gICAgXVxuICB9O1xuXG4gIGNvbnN0IE1FVEhPRCA9IHtcbiAgICBjbGFzc05hbWU6ICdmdW5jdGlvbicsXG4gICAgYmVnaW5LZXl3b3JkczogJ2RlZicsXG4gICAgZW5kOiByZWdleC5sb29rYWhlYWQoL1s6PXtcXFsoXFxuO10vKSxcbiAgICBjb250YWluczogWyBOQU1FIF1cbiAgfTtcblxuICBjb25zdCBFWFRFTlNJT04gPSB7XG4gICAgYmVnaW46IFtcbiAgICAgIC9eXFxzKi8sIC8vIElzIGZpcnN0IHRva2VuIG9uIHRoZSBsaW5lXG4gICAgICAnZXh0ZW5zaW9uJyxcbiAgICAgIC9cXHMrKD89W1soXSkvLCAvLyBmb2xsb3dlZCBieSBhdCBsZWFzdCBvbmUgc3BhY2UgYW5kIGBbYCBvciBgKGBcbiAgICBdLFxuICAgIGJlZ2luU2NvcGU6IHsgMjogXCJrZXl3b3JkXCIsIH1cbiAgfTtcblxuICBjb25zdCBFTkQgPSB7XG4gICAgYmVnaW46IFtcbiAgICAgIC9eXFxzKi8sIC8vIElzIGZpcnN0IHRva2VuIG9uIHRoZSBsaW5lXG4gICAgICAvZW5kLyxcbiAgICAgIC9cXHMrLyxcbiAgICAgIC8oZXh0ZW5zaW9uXFxiKT8vLCAvLyBgZXh0ZW5zaW9uYCBpcyB0aGUgb25seSBtYXJrZXIgdGhhdCBmb2xsb3dzIGFuIGBlbmRgIHRoYXQgY2Fubm90IGJlIGNhcHR1cmVkIGJ5IGFub3RoZXIgcnVsZS5cbiAgICBdLFxuICAgIGJlZ2luU2NvcGU6IHtcbiAgICAgIDI6IFwia2V5d29yZFwiLFxuICAgICAgNDogXCJrZXl3b3JkXCIsXG4gICAgfVxuICB9O1xuXG4gIC8vIFRPRE86IHVzZSBuZWdhdGl2ZSBsb29rLWJlaGluZCBpbiBmdXR1cmVcbiAgLy8gICAgICAgLyg/PCFcXC4pXFxiaW5saW5lKD89XFxzKS9cbiAgY29uc3QgSU5MSU5FX01PREVTID0gW1xuICAgIHsgbWF0Y2g6IC9cXC5pbmxpbmVcXGIvIH0sXG4gICAge1xuICAgICAgYmVnaW46IC9cXGJpbmxpbmUoPz1cXHMpLyxcbiAgICAgIGtleXdvcmRzOiAnaW5saW5lJ1xuICAgIH1cbiAgXTtcblxuICBjb25zdCBVU0lOR19QQVJBTV9DTEFVU0UgPSB7XG4gICAgYmVnaW46IFtcbiAgICAgIC9cXChcXHMqLywgLy8gT3BlbmluZyBgKGAgb2YgYSBwYXJhbWV0ZXIgb3IgYXJndW1lbnQgbGlzdFxuICAgICAgL3VzaW5nLyxcbiAgICAgIC9cXHMrKD8hXFwpKS8sIC8vIFNwYWNlcyBub3QgZm9sbG93ZWQgYnkgYClgXG4gICAgXSxcbiAgICBiZWdpblNjb3BlOiB7IDI6IFwia2V5d29yZFwiLCB9XG4gIH07XG5cbiAgLy8gZ2xvYiBhbGwgbm9uLXdoaXRlc3BhY2UgY2hhcmFjdGVycyBhcyBhIFwic3RyaW5nXCJcbiAgLy8gc291cmNlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9zY2FsYS9kb2NzLnNjYWxhLWxhbmcvcHVsbC8yODQ1XG4gIGNvbnN0IERJUkVDVElWRV9WQUxVRSA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIGJlZ2luOiAvXFxTKy8sXG4gIH07XG5cbiAgLy8gZGlyZWN0aXZlc1xuICAvLyBzb3VyY2VkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL3NjYWxhL2RvY3Muc2NhbGEtbGFuZy9wdWxsLzI4NDVcbiAgY29uc3QgVVNJTkdfRElSRUNUSVZFID0ge1xuICAgIGJlZ2luOiBbXG4gICAgICAnLy8+JyxcbiAgICAgIC9cXHMrLyxcbiAgICAgIC91c2luZy8sXG4gICAgICAvXFxzKy8sXG4gICAgICAvXFxTKy9cbiAgICBdLFxuICAgIGJlZ2luU2NvcGU6IHtcbiAgICAgIDE6IFwiY29tbWVudFwiLFxuICAgICAgMzogXCJrZXl3b3JkXCIsXG4gICAgICA1OiBcInR5cGVcIlxuICAgIH0sXG4gICAgZW5kOiAvJC8sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIERJUkVDVElWRV9WQUxVRSxcbiAgICBdXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnU2NhbGEnLFxuICAgIGtleXdvcmRzOiB7XG4gICAgICBsaXRlcmFsOiAndHJ1ZSBmYWxzZSBudWxsJyxcbiAgICAgIGtleXdvcmQ6ICd0eXBlIHlpZWxkIGxhenkgb3ZlcnJpZGUgZGVmIHdpdGggdmFsIHZhciBzZWFsZWQgYWJzdHJhY3QgcHJpdmF0ZSB0cmFpdCBvYmplY3QgaWYgdGhlbiBmb3JTb21lIGZvciB3aGlsZSBkbyB0aHJvdyBmaW5hbGx5IHByb3RlY3RlZCBleHRlbmRzIGltcG9ydCBmaW5hbCByZXR1cm4gZWxzZSBicmVhayBuZXcgY2F0Y2ggc3VwZXIgY2xhc3MgY2FzZSBwYWNrYWdlIGRlZmF1bHQgdHJ5IHRoaXMgbWF0Y2ggY29udGludWUgdGhyb3dzIGltcGxpY2l0IGV4cG9ydCBlbnVtIGdpdmVuIHRyYW5zcGFyZW50J1xuICAgIH0sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIFVTSU5HX0RJUkVDVElWRSxcbiAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgICBTVFJJTkcsXG4gICAgICBUWVBFLFxuICAgICAgTUVUSE9ELFxuICAgICAgQ0xBU1MsXG4gICAgICBobGpzLkNfTlVNQkVSX01PREUsXG4gICAgICBFWFRFTlNJT04sXG4gICAgICBFTkQsXG4gICAgICAuLi5JTkxJTkVfTU9ERVMsXG4gICAgICBVU0lOR19QQVJBTV9DTEFVU0UsXG4gICAgICBBTk5PVEFUSU9OXG4gICAgXVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNjYWxhO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1943\n")},1951:module=>{eval('/*\nLanguage: JSON\nDescription: JSON (JavaScript Object Notation) is a lightweight data-interchange format.\nAuthor: Ivan Sagalaev \nWebsite: http://www.json.org\nCategory: common, protocols, web\n*/\n\nfunction json(hljs) {\n const ATTRIBUTE = {\n className: \'attr\',\n begin: /"(\\\\.|[^\\\\"\\r\\n])*"(?=\\s*:)/,\n relevance: 1.01\n };\n const PUNCTUATION = {\n match: /[{}[\\],:]/,\n className: "punctuation",\n relevance: 0\n };\n const LITERALS = [\n "true",\n "false",\n "null"\n ];\n // NOTE: normally we would rely on `keywords` for this but using a mode here allows us\n // - to use the very tight `illegal: \\S` rule later to flag any other character\n // - as illegal indicating that despite looking like JSON we do not truly have\n // - JSON and thus improve false-positively greatly since JSON will try and claim\n // - all sorts of JSON looking stuff\n const LITERALS_MODE = {\n scope: "literal",\n beginKeywords: LITERALS.join(" "),\n };\n\n return {\n name: \'JSON\',\n aliases: [\'jsonc\'],\n keywords:{\n literal: LITERALS,\n },\n contains: [\n ATTRIBUTE,\n PUNCTUATION,\n hljs.QUOTE_STRING_MODE,\n LITERALS_MODE,\n hljs.C_NUMBER_MODE,\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE\n ],\n illegal: \'\\\\S\'\n };\n}\n\nmodule.exports = json;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTk1MS5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vb2JzaWRpYW4tbWluZG1hcC1uZXh0Z2VuLy4vbm9kZV9tb2R1bGVzLy5wbnBtL2hpZ2hsaWdodC5qc0AxMS4xMS4xL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9qc29uLmpzPzEwMWUiXSwic291cmNlc0NvbnRlbnQiOlsiLypcbkxhbmd1YWdlOiBKU09OXG5EZXNjcmlwdGlvbjogSlNPTiAoSmF2YVNjcmlwdCBPYmplY3QgTm90YXRpb24pIGlzIGEgbGlnaHR3ZWlnaHQgZGF0YS1pbnRlcmNoYW5nZSBmb3JtYXQuXG5BdXRob3I6IEl2YW4gU2FnYWxhZXYgPG1hbmlhY0Bzb2Z0d2FyZW1hbmlhY3Mub3JnPlxuV2Vic2l0ZTogaHR0cDovL3d3dy5qc29uLm9yZ1xuQ2F0ZWdvcnk6IGNvbW1vbiwgcHJvdG9jb2xzLCB3ZWJcbiovXG5cbmZ1bmN0aW9uIGpzb24oaGxqcykge1xuICBjb25zdCBBVFRSSUJVVEUgPSB7XG4gICAgY2xhc3NOYW1lOiAnYXR0cicsXG4gICAgYmVnaW46IC9cIihcXFxcLnxbXlxcXFxcIlxcclxcbl0pKlwiKD89XFxzKjopLyxcbiAgICByZWxldmFuY2U6IDEuMDFcbiAgfTtcbiAgY29uc3QgUFVOQ1RVQVRJT04gPSB7XG4gICAgbWF0Y2g6IC9be31bXFxdLDpdLyxcbiAgICBjbGFzc05hbWU6IFwicHVuY3R1YXRpb25cIixcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcbiAgY29uc3QgTElURVJBTFMgPSBbXG4gICAgXCJ0cnVlXCIsXG4gICAgXCJmYWxzZVwiLFxuICAgIFwibnVsbFwiXG4gIF07XG4gIC8vIE5PVEU6IG5vcm1hbGx5IHdlIHdvdWxkIHJlbHkgb24gYGtleXdvcmRzYCBmb3IgdGhpcyBidXQgdXNpbmcgYSBtb2RlIGhlcmUgYWxsb3dzIHVzXG4gIC8vIC0gdG8gdXNlIHRoZSB2ZXJ5IHRpZ2h0IGBpbGxlZ2FsOiBcXFNgIHJ1bGUgbGF0ZXIgdG8gZmxhZyBhbnkgb3RoZXIgY2hhcmFjdGVyXG4gIC8vIC0gYXMgaWxsZWdhbCBpbmRpY2F0aW5nIHRoYXQgZGVzcGl0ZSBsb29raW5nIGxpa2UgSlNPTiB3ZSBkbyBub3QgdHJ1bHkgaGF2ZVxuICAvLyAtIEpTT04gYW5kIHRodXMgaW1wcm92ZSBmYWxzZS1wb3NpdGl2ZWx5IGdyZWF0bHkgc2luY2UgSlNPTiB3aWxsIHRyeSBhbmQgY2xhaW1cbiAgLy8gLSBhbGwgc29ydHMgb2YgSlNPTiBsb29raW5nIHN0dWZmXG4gIGNvbnN0IExJVEVSQUxTX01PREUgPSB7XG4gICAgc2NvcGU6IFwibGl0ZXJhbFwiLFxuICAgIGJlZ2luS2V5d29yZHM6IExJVEVSQUxTLmpvaW4oXCIgXCIpLFxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogJ0pTT04nLFxuICAgIGFsaWFzZXM6IFsnanNvbmMnXSxcbiAgICBrZXl3b3Jkczp7XG4gICAgICBsaXRlcmFsOiBMSVRFUkFMUyxcbiAgICB9LFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBBVFRSSUJVVEUsXG4gICAgICBQVU5DVFVBVElPTixcbiAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICBMSVRFUkFMU19NT0RFLFxuICAgICAgaGxqcy5DX05VTUJFUl9NT0RFLFxuICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERVxuICAgIF0sXG4gICAgaWxsZWdhbDogJ1xcXFxTJ1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGpzb247XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///1951\n')},1955:module=>{eval('/*\nLanguage: Bash\nAuthor: vah \nContributrors: Benjamin Pannell \nWebsite: https://www.gnu.org/software/bash/\nCategory: common, scripting\n*/\n\n/** @type LanguageFn */\nfunction bash(hljs) {\n const regex = hljs.regex;\n const VAR = {};\n const BRACED_VAR = {\n begin: /\\$\\{/,\n end: /\\}/,\n contains: [\n "self",\n {\n begin: /:-/,\n contains: [ VAR ]\n } // default values\n ]\n };\n Object.assign(VAR, {\n className: \'variable\',\n variants: [\n { begin: regex.concat(/\\$[\\w\\d#@][\\w\\d_]*/,\n // negative look-ahead tries to avoid matching patterns that are not\n // Perl at all like $ident$, @ident@, etc.\n `(?![\\\\w\\\\d])(?![$])`) },\n BRACED_VAR\n ]\n });\n\n const SUBST = {\n className: \'subst\',\n begin: /\\$\\(/,\n end: /\\)/,\n contains: [ hljs.BACKSLASH_ESCAPE ]\n };\n const COMMENT = hljs.inherit(\n hljs.COMMENT(),\n {\n match: [\n /(^|\\s)/,\n /#.*$/\n ],\n scope: {\n 2: \'comment\'\n }\n }\n );\n const HERE_DOC = {\n begin: /<<-?\\s*(?=\\w+)/,\n starts: { contains: [\n hljs.END_SAME_AS_BEGIN({\n begin: /(\\w+)/,\n end: /(\\w+)/,\n className: \'string\'\n })\n ] }\n };\n const QUOTE_STRING = {\n className: \'string\',\n begin: /"/,\n end: /"/,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n VAR,\n SUBST\n ]\n };\n SUBST.contains.push(QUOTE_STRING);\n const ESCAPED_QUOTE = {\n match: /\\\\"/\n };\n const APOS_STRING = {\n className: \'string\',\n begin: /\'/,\n end: /\'/\n };\n const ESCAPED_APOS = {\n match: /\\\\\'/\n };\n const ARITHMETIC = {\n begin: /\\$?\\(\\(/,\n end: /\\)\\)/,\n contains: [\n {\n begin: /\\d+#[0-9a-f]+/,\n className: "number"\n },\n hljs.NUMBER_MODE,\n VAR\n ]\n };\n const SH_LIKE_SHELLS = [\n "fish",\n "bash",\n "zsh",\n "sh",\n "csh",\n "ksh",\n "tcsh",\n "dash",\n "scsh",\n ];\n const KNOWN_SHEBANG = hljs.SHEBANG({\n binary: `(${SH_LIKE_SHELLS.join("|")})`,\n relevance: 10\n });\n const FUNCTION = {\n className: \'function\',\n begin: /\\w[\\w\\d_]*\\s*\\(\\s*\\)\\s*\\{/,\n returnBegin: true,\n contains: [ hljs.inherit(hljs.TITLE_MODE, { begin: /\\w[\\w\\d_]*/ }) ],\n relevance: 0\n };\n\n const KEYWORDS = [\n "if",\n "then",\n "else",\n "elif",\n "fi",\n "time",\n "for",\n "while",\n "until",\n "in",\n "do",\n "done",\n "case",\n "esac",\n "coproc",\n "function",\n "select"\n ];\n\n const LITERALS = [\n "true",\n "false"\n ];\n\n // to consume paths to prevent keyword matches inside them\n const PATH_MODE = { match: /(\\/[a-z._-]+)+/ };\n\n // http://www.gnu.org/software/bash/manual/html_node/Shell-Builtin-Commands.html\n const SHELL_BUILT_INS = [\n "break",\n "cd",\n "continue",\n "eval",\n "exec",\n "exit",\n "export",\n "getopts",\n "hash",\n "pwd",\n "readonly",\n "return",\n "shift",\n "test",\n "times",\n "trap",\n "umask",\n "unset"\n ];\n\n const BASH_BUILT_INS = [\n "alias",\n "bind",\n "builtin",\n "caller",\n "command",\n "declare",\n "echo",\n "enable",\n "help",\n "let",\n "local",\n "logout",\n "mapfile",\n "printf",\n "read",\n "readarray",\n "source",\n "sudo",\n "type",\n "typeset",\n "ulimit",\n "unalias"\n ];\n\n const ZSH_BUILT_INS = [\n "autoload",\n "bg",\n "bindkey",\n "bye",\n "cap",\n "chdir",\n "clone",\n "comparguments",\n "compcall",\n "compctl",\n "compdescribe",\n "compfiles",\n "compgroups",\n "compquote",\n "comptags",\n "comptry",\n "compvalues",\n "dirs",\n "disable",\n "disown",\n "echotc",\n "echoti",\n "emulate",\n "fc",\n "fg",\n "float",\n "functions",\n "getcap",\n "getln",\n "history",\n "integer",\n "jobs",\n "kill",\n "limit",\n "log",\n "noglob",\n "popd",\n "print",\n "pushd",\n "pushln",\n "rehash",\n "sched",\n "setcap",\n "setopt",\n "stat",\n "suspend",\n "ttyctl",\n "unfunction",\n "unhash",\n "unlimit",\n "unsetopt",\n "vared",\n "wait",\n "whence",\n "where",\n "which",\n "zcompile",\n "zformat",\n "zftp",\n "zle",\n "zmodload",\n "zparseopts",\n "zprof",\n "zpty",\n "zregexparse",\n "zsocket",\n "zstyle",\n "ztcp"\n ];\n\n const GNU_CORE_UTILS = [\n "chcon",\n "chgrp",\n "chown",\n "chmod",\n "cp",\n "dd",\n "df",\n "dir",\n "dircolors",\n "ln",\n "ls",\n "mkdir",\n "mkfifo",\n "mknod",\n "mktemp",\n "mv",\n "realpath",\n "rm",\n "rmdir",\n "shred",\n "sync",\n "touch",\n "truncate",\n "vdir",\n "b2sum",\n "base32",\n "base64",\n "cat",\n "cksum",\n "comm",\n "csplit",\n "cut",\n "expand",\n "fmt",\n "fold",\n "head",\n "join",\n "md5sum",\n "nl",\n "numfmt",\n "od",\n "paste",\n "ptx",\n "pr",\n "sha1sum",\n "sha224sum",\n "sha256sum",\n "sha384sum",\n "sha512sum",\n "shuf",\n "sort",\n "split",\n "sum",\n "tac",\n "tail",\n "tr",\n "tsort",\n "unexpand",\n "uniq",\n "wc",\n "arch",\n "basename",\n "chroot",\n "date",\n "dirname",\n "du",\n "echo",\n "env",\n "expr",\n "factor",\n // "false", // keyword literal already\n "groups",\n "hostid",\n "id",\n "link",\n "logname",\n "nice",\n "nohup",\n "nproc",\n "pathchk",\n "pinky",\n "printenv",\n "printf",\n "pwd",\n "readlink",\n "runcon",\n "seq",\n "sleep",\n "stat",\n "stdbuf",\n "stty",\n "tee",\n "test",\n "timeout",\n // "true", // keyword literal already\n "tty",\n "uname",\n "unlink",\n "uptime",\n "users",\n "who",\n "whoami",\n "yes"\n ];\n\n return {\n name: \'Bash\',\n aliases: [\n \'sh\',\n \'zsh\'\n ],\n keywords: {\n $pattern: /\\b[a-z][a-z0-9._-]+\\b/,\n keyword: KEYWORDS,\n literal: LITERALS,\n built_in: [\n ...SHELL_BUILT_INS,\n ...BASH_BUILT_INS,\n // Shell modifiers\n "set",\n "shopt",\n ...ZSH_BUILT_INS,\n ...GNU_CORE_UTILS\n ]\n },\n contains: [\n KNOWN_SHEBANG, // to catch known shells and boost relevancy\n hljs.SHEBANG(), // to catch unknown shells but still highlight the shebang\n FUNCTION,\n ARITHMETIC,\n COMMENT,\n HERE_DOC,\n PATH_MODE,\n QUOTE_STRING,\n ESCAPED_QUOTE,\n APOS_STRING,\n ESCAPED_APOS,\n VAR\n ]\n };\n}\n\nmodule.exports = bash;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTk1NS5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLGdDQUFnQztBQUNoQztBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLHlCQUF5QjtBQUN6QztBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EscUNBQXFDO0FBQ3JDO0FBQ0EsZ0RBQWdELHFCQUFxQjtBQUNyRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esc0JBQXNCOztBQUV0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL29ic2lkaWFuLW1pbmRtYXAtbmV4dGdlbi8uL25vZGVfbW9kdWxlcy8ucG5wbS9oaWdobGlnaHQuanNAMTEuMTEuMS9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvYmFzaC5qcz9mMjY3Il0sInNvdXJjZXNDb250ZW50IjpbIi8qXG5MYW5ndWFnZTogQmFzaFxuQXV0aG9yOiB2YWggPHZhaHRlbmJlcmdAZ21haWwuY29tPlxuQ29udHJpYnV0cm9yczogQmVuamFtaW4gUGFubmVsbCA8Y29udGFjdEBzaWVycmFzb2Z0d29ya3MuY29tPlxuV2Vic2l0ZTogaHR0cHM6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9iYXNoL1xuQ2F0ZWdvcnk6IGNvbW1vbiwgc2NyaXB0aW5nXG4qL1xuXG4vKiogQHR5cGUgTGFuZ3VhZ2VGbiAqL1xuZnVuY3Rpb24gYmFzaChobGpzKSB7XG4gIGNvbnN0IHJlZ2V4ID0gaGxqcy5yZWdleDtcbiAgY29uc3QgVkFSID0ge307XG4gIGNvbnN0IEJSQUNFRF9WQVIgPSB7XG4gICAgYmVnaW46IC9cXCRcXHsvLFxuICAgIGVuZDogL1xcfS8sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIFwic2VsZlwiLFxuICAgICAge1xuICAgICAgICBiZWdpbjogLzotLyxcbiAgICAgICAgY29udGFpbnM6IFsgVkFSIF1cbiAgICAgIH0gLy8gZGVmYXVsdCB2YWx1ZXNcbiAgICBdXG4gIH07XG4gIE9iamVjdC5hc3NpZ24oVkFSLCB7XG4gICAgY2xhc3NOYW1lOiAndmFyaWFibGUnLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7IGJlZ2luOiByZWdleC5jb25jYXQoL1xcJFtcXHdcXGQjQF1bXFx3XFxkX10qLyxcbiAgICAgICAgLy8gbmVnYXRpdmUgbG9vay1haGVhZCB0cmllcyB0byBhdm9pZCBtYXRjaGluZyBwYXR0ZXJucyB0aGF0IGFyZSBub3RcbiAgICAgICAgLy8gUGVybCBhdCBhbGwgbGlrZSAkaWRlbnQkLCBAaWRlbnRALCBldGMuXG4gICAgICAgIGAoPyFbXFxcXHdcXFxcZF0pKD8hWyRdKWApIH0sXG4gICAgICBCUkFDRURfVkFSXG4gICAgXVxuICB9KTtcblxuICBjb25zdCBTVUJTVCA9IHtcbiAgICBjbGFzc05hbWU6ICdzdWJzdCcsXG4gICAgYmVnaW46IC9cXCRcXCgvLFxuICAgIGVuZDogL1xcKS8sXG4gICAgY29udGFpbnM6IFsgaGxqcy5CQUNLU0xBU0hfRVNDQVBFIF1cbiAgfTtcbiAgY29uc3QgQ09NTUVOVCA9IGhsanMuaW5oZXJpdChcbiAgICBobGpzLkNPTU1FTlQoKSxcbiAgICB7XG4gICAgICBtYXRjaDogW1xuICAgICAgICAvKF58XFxzKS8sXG4gICAgICAgIC8jLiokL1xuICAgICAgXSxcbiAgICAgIHNjb3BlOiB7XG4gICAgICAgIDI6ICdjb21tZW50J1xuICAgICAgfVxuICAgIH1cbiAgKTtcbiAgY29uc3QgSEVSRV9ET0MgPSB7XG4gICAgYmVnaW46IC88PC0/XFxzKig/PVxcdyspLyxcbiAgICBzdGFydHM6IHsgY29udGFpbnM6IFtcbiAgICAgIGhsanMuRU5EX1NBTUVfQVNfQkVHSU4oe1xuICAgICAgICBiZWdpbjogLyhcXHcrKS8sXG4gICAgICAgIGVuZDogLyhcXHcrKS8sXG4gICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZydcbiAgICAgIH0pXG4gICAgXSB9XG4gIH07XG4gIGNvbnN0IFFVT1RFX1NUUklORyA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIGJlZ2luOiAvXCIvLFxuICAgIGVuZDogL1wiLyxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5CQUNLU0xBU0hfRVNDQVBFLFxuICAgICAgVkFSLFxuICAgICAgU1VCU1RcbiAgICBdXG4gIH07XG4gIFNVQlNULmNvbnRhaW5zLnB1c2goUVVPVEVfU1RSSU5HKTtcbiAgY29uc3QgRVNDQVBFRF9RVU9URSA9IHtcbiAgICBtYXRjaDogL1xcXFxcIi9cbiAgfTtcbiAgY29uc3QgQVBPU19TVFJJTkcgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICBiZWdpbjogLycvLFxuICAgIGVuZDogLycvXG4gIH07XG4gIGNvbnN0IEVTQ0FQRURfQVBPUyA9IHtcbiAgICBtYXRjaDogL1xcXFwnL1xuICB9O1xuICBjb25zdCBBUklUSE1FVElDID0ge1xuICAgIGJlZ2luOiAvXFwkP1xcKFxcKC8sXG4gICAgZW5kOiAvXFwpXFwpLyxcbiAgICBjb250YWluczogW1xuICAgICAge1xuICAgICAgICBiZWdpbjogL1xcZCsjWzAtOWEtZl0rLyxcbiAgICAgICAgY2xhc3NOYW1lOiBcIm51bWJlclwiXG4gICAgICB9LFxuICAgICAgaGxqcy5OVU1CRVJfTU9ERSxcbiAgICAgIFZBUlxuICAgIF1cbiAgfTtcbiAgY29uc3QgU0hfTElLRV9TSEVMTFMgPSBbXG4gICAgXCJmaXNoXCIsXG4gICAgXCJiYXNoXCIsXG4gICAgXCJ6c2hcIixcbiAgICBcInNoXCIsXG4gICAgXCJjc2hcIixcbiAgICBcImtzaFwiLFxuICAgIFwidGNzaFwiLFxuICAgIFwiZGFzaFwiLFxuICAgIFwic2NzaFwiLFxuICBdO1xuICBjb25zdCBLTk9XTl9TSEVCQU5HID0gaGxqcy5TSEVCQU5HKHtcbiAgICBiaW5hcnk6IGAoJHtTSF9MSUtFX1NIRUxMUy5qb2luKFwifFwiKX0pYCxcbiAgICByZWxldmFuY2U6IDEwXG4gIH0pO1xuICBjb25zdCBGVU5DVElPTiA9IHtcbiAgICBjbGFzc05hbWU6ICdmdW5jdGlvbicsXG4gICAgYmVnaW46IC9cXHdbXFx3XFxkX10qXFxzKlxcKFxccypcXClcXHMqXFx7LyxcbiAgICByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICBjb250YWluczogWyBobGpzLmluaGVyaXQoaGxqcy5USVRMRV9NT0RFLCB7IGJlZ2luOiAvXFx3W1xcd1xcZF9dKi8gfSkgXSxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcblxuICBjb25zdCBLRVlXT1JEUyA9IFtcbiAgICBcImlmXCIsXG4gICAgXCJ0aGVuXCIsXG4gICAgXCJlbHNlXCIsXG4gICAgXCJlbGlmXCIsXG4gICAgXCJmaVwiLFxuICAgIFwidGltZVwiLFxuICAgIFwiZm9yXCIsXG4gICAgXCJ3aGlsZVwiLFxuICAgIFwidW50aWxcIixcbiAgICBcImluXCIsXG4gICAgXCJkb1wiLFxuICAgIFwiZG9uZVwiLFxuICAgIFwiY2FzZVwiLFxuICAgIFwiZXNhY1wiLFxuICAgIFwiY29wcm9jXCIsXG4gICAgXCJmdW5jdGlvblwiLFxuICAgIFwic2VsZWN0XCJcbiAgXTtcblxuICBjb25zdCBMSVRFUkFMUyA9IFtcbiAgICBcInRydWVcIixcbiAgICBcImZhbHNlXCJcbiAgXTtcblxuICAvLyB0byBjb25zdW1lIHBhdGhzIHRvIHByZXZlbnQga2V5d29yZCBtYXRjaGVzIGluc2lkZSB0aGVtXG4gIGNvbnN0IFBBVEhfTU9ERSA9IHsgbWF0Y2g6IC8oXFwvW2Etei5fLV0rKSsvIH07XG5cbiAgLy8gaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2Jhc2gvbWFudWFsL2h0bWxfbm9kZS9TaGVsbC1CdWlsdGluLUNvbW1hbmRzLmh0bWxcbiAgY29uc3QgU0hFTExfQlVJTFRfSU5TID0gW1xuICAgIFwiYnJlYWtcIixcbiAgICBcImNkXCIsXG4gICAgXCJjb250aW51ZVwiLFxuICAgIFwiZXZhbFwiLFxuICAgIFwiZXhlY1wiLFxuICAgIFwiZXhpdFwiLFxuICAgIFwiZXhwb3J0XCIsXG4gICAgXCJnZXRvcHRzXCIsXG4gICAgXCJoYXNoXCIsXG4gICAgXCJwd2RcIixcbiAgICBcInJlYWRvbmx5XCIsXG4gICAgXCJyZXR1cm5cIixcbiAgICBcInNoaWZ0XCIsXG4gICAgXCJ0ZXN0XCIsXG4gICAgXCJ0aW1lc1wiLFxuICAgIFwidHJhcFwiLFxuICAgIFwidW1hc2tcIixcbiAgICBcInVuc2V0XCJcbiAgXTtcblxuICBjb25zdCBCQVNIX0JVSUxUX0lOUyA9IFtcbiAgICBcImFsaWFzXCIsXG4gICAgXCJiaW5kXCIsXG4gICAgXCJidWlsdGluXCIsXG4gICAgXCJjYWxsZXJcIixcbiAgICBcImNvbW1hbmRcIixcbiAgICBcImRlY2xhcmVcIixcbiAgICBcImVjaG9cIixcbiAgICBcImVuYWJsZVwiLFxuICAgIFwiaGVscFwiLFxuICAgIFwibGV0XCIsXG4gICAgXCJsb2NhbFwiLFxuICAgIFwibG9nb3V0XCIsXG4gICAgXCJtYXBmaWxlXCIsXG4gICAgXCJwcmludGZcIixcbiAgICBcInJlYWRcIixcbiAgICBcInJlYWRhcnJheVwiLFxuICAgIFwic291cmNlXCIsXG4gICAgXCJzdWRvXCIsXG4gICAgXCJ0eXBlXCIsXG4gICAgXCJ0eXBlc2V0XCIsXG4gICAgXCJ1bGltaXRcIixcbiAgICBcInVuYWxpYXNcIlxuICBdO1xuXG4gIGNvbnN0IFpTSF9CVUlMVF9JTlMgPSBbXG4gICAgXCJhdXRvbG9hZFwiLFxuICAgIFwiYmdcIixcbiAgICBcImJpbmRrZXlcIixcbiAgICBcImJ5ZVwiLFxuICAgIFwiY2FwXCIsXG4gICAgXCJjaGRpclwiLFxuICAgIFwiY2xvbmVcIixcbiAgICBcImNvbXBhcmd1bWVudHNcIixcbiAgICBcImNvbXBjYWxsXCIsXG4gICAgXCJjb21wY3RsXCIsXG4gICAgXCJjb21wZGVzY3JpYmVcIixcbiAgICBcImNvbXBmaWxlc1wiLFxuICAgIFwiY29tcGdyb3Vwc1wiLFxuICAgIFwiY29tcHF1b3RlXCIsXG4gICAgXCJjb21wdGFnc1wiLFxuICAgIFwiY29tcHRyeVwiLFxuICAgIFwiY29tcHZhbHVlc1wiLFxuICAgIFwiZGlyc1wiLFxuICAgIFwiZGlzYWJsZVwiLFxuICAgIFwiZGlzb3duXCIsXG4gICAgXCJlY2hvdGNcIixcbiAgICBcImVjaG90aVwiLFxuICAgIFwiZW11bGF0ZVwiLFxuICAgIFwiZmNcIixcbiAgICBcImZnXCIsXG4gICAgXCJmbG9hdFwiLFxuICAgIFwiZnVuY3Rpb25zXCIsXG4gICAgXCJnZXRjYXBcIixcbiAgICBcImdldGxuXCIsXG4gICAgXCJoaXN0b3J5XCIsXG4gICAgXCJpbnRlZ2VyXCIsXG4gICAgXCJqb2JzXCIsXG4gICAgXCJraWxsXCIsXG4gICAgXCJsaW1pdFwiLFxuICAgIFwibG9nXCIsXG4gICAgXCJub2dsb2JcIixcbiAgICBcInBvcGRcIixcbiAgICBcInByaW50XCIsXG4gICAgXCJwdXNoZFwiLFxuICAgIFwicHVzaGxuXCIsXG4gICAgXCJyZWhhc2hcIixcbiAgICBcInNjaGVkXCIsXG4gICAgXCJzZXRjYXBcIixcbiAgICBcInNldG9wdFwiLFxuICAgIFwic3RhdFwiLFxuICAgIFwic3VzcGVuZFwiLFxuICAgIFwidHR5Y3RsXCIsXG4gICAgXCJ1bmZ1bmN0aW9uXCIsXG4gICAgXCJ1bmhhc2hcIixcbiAgICBcInVubGltaXRcIixcbiAgICBcInVuc2V0b3B0XCIsXG4gICAgXCJ2YXJlZFwiLFxuICAgIFwid2FpdFwiLFxuICAgIFwid2hlbmNlXCIsXG4gICAgXCJ3aGVyZVwiLFxuICAgIFwid2hpY2hcIixcbiAgICBcInpjb21waWxlXCIsXG4gICAgXCJ6Zm9ybWF0XCIsXG4gICAgXCJ6ZnRwXCIsXG4gICAgXCJ6bGVcIixcbiAgICBcInptb2Rsb2FkXCIsXG4gICAgXCJ6cGFyc2VvcHRzXCIsXG4gICAgXCJ6cHJvZlwiLFxuICAgIFwienB0eVwiLFxuICAgIFwienJlZ2V4cGFyc2VcIixcbiAgICBcInpzb2NrZXRcIixcbiAgICBcInpzdHlsZVwiLFxuICAgIFwienRjcFwiXG4gIF07XG5cbiAgY29uc3QgR05VX0NPUkVfVVRJTFMgPSBbXG4gICAgXCJjaGNvblwiLFxuICAgIFwiY2hncnBcIixcbiAgICBcImNob3duXCIsXG4gICAgXCJjaG1vZFwiLFxuICAgIFwiY3BcIixcbiAgICBcImRkXCIsXG4gICAgXCJkZlwiLFxuICAgIFwiZGlyXCIsXG4gICAgXCJkaXJjb2xvcnNcIixcbiAgICBcImxuXCIsXG4gICAgXCJsc1wiLFxuICAgIFwibWtkaXJcIixcbiAgICBcIm1rZmlmb1wiLFxuICAgIFwibWtub2RcIixcbiAgICBcIm1rdGVtcFwiLFxuICAgIFwibXZcIixcbiAgICBcInJlYWxwYXRoXCIsXG4gICAgXCJybVwiLFxuICAgIFwicm1kaXJcIixcbiAgICBcInNocmVkXCIsXG4gICAgXCJzeW5jXCIsXG4gICAgXCJ0b3VjaFwiLFxuICAgIFwidHJ1bmNhdGVcIixcbiAgICBcInZkaXJcIixcbiAgICBcImIyc3VtXCIsXG4gICAgXCJiYXNlMzJcIixcbiAgICBcImJhc2U2NFwiLFxuICAgIFwiY2F0XCIsXG4gICAgXCJja3N1bVwiLFxuICAgIFwiY29tbVwiLFxuICAgIFwiY3NwbGl0XCIsXG4gICAgXCJjdXRcIixcbiAgICBcImV4cGFuZFwiLFxuICAgIFwiZm10XCIsXG4gICAgXCJmb2xkXCIsXG4gICAgXCJoZWFkXCIsXG4gICAgXCJqb2luXCIsXG4gICAgXCJtZDVzdW1cIixcbiAgICBcIm5sXCIsXG4gICAgXCJudW1mbXRcIixcbiAgICBcIm9kXCIsXG4gICAgXCJwYXN0ZVwiLFxuICAgIFwicHR4XCIsXG4gICAgXCJwclwiLFxuICAgIFwic2hhMXN1bVwiLFxuICAgIFwic2hhMjI0c3VtXCIsXG4gICAgXCJzaGEyNTZzdW1cIixcbiAgICBcInNoYTM4NHN1bVwiLFxuICAgIFwic2hhNTEyc3VtXCIsXG4gICAgXCJzaHVmXCIsXG4gICAgXCJzb3J0XCIsXG4gICAgXCJzcGxpdFwiLFxuICAgIFwic3VtXCIsXG4gICAgXCJ0YWNcIixcbiAgICBcInRhaWxcIixcbiAgICBcInRyXCIsXG4gICAgXCJ0c29ydFwiLFxuICAgIFwidW5leHBhbmRcIixcbiAgICBcInVuaXFcIixcbiAgICBcIndjXCIsXG4gICAgXCJhcmNoXCIsXG4gICAgXCJiYXNlbmFtZVwiLFxuICAgIFwiY2hyb290XCIsXG4gICAgXCJkYXRlXCIsXG4gICAgXCJkaXJuYW1lXCIsXG4gICAgXCJkdVwiLFxuICAgIFwiZWNob1wiLFxuICAgIFwiZW52XCIsXG4gICAgXCJleHByXCIsXG4gICAgXCJmYWN0b3JcIixcbiAgICAvLyBcImZhbHNlXCIsIC8vIGtleXdvcmQgbGl0ZXJhbCBhbHJlYWR5XG4gICAgXCJncm91cHNcIixcbiAgICBcImhvc3RpZFwiLFxuICAgIFwiaWRcIixcbiAgICBcImxpbmtcIixcbiAgICBcImxvZ25hbWVcIixcbiAgICBcIm5pY2VcIixcbiAgICBcIm5vaHVwXCIsXG4gICAgXCJucHJvY1wiLFxuICAgIFwicGF0aGNoa1wiLFxuICAgIFwicGlua3lcIixcbiAgICBcInByaW50ZW52XCIsXG4gICAgXCJwcmludGZcIixcbiAgICBcInB3ZFwiLFxuICAgIFwicmVhZGxpbmtcIixcbiAgICBcInJ1bmNvblwiLFxuICAgIFwic2VxXCIsXG4gICAgXCJzbGVlcFwiLFxuICAgIFwic3RhdFwiLFxuICAgIFwic3RkYnVmXCIsXG4gICAgXCJzdHR5XCIsXG4gICAgXCJ0ZWVcIixcbiAgICBcInRlc3RcIixcbiAgICBcInRpbWVvdXRcIixcbiAgICAvLyBcInRydWVcIiwgLy8ga2V5d29yZCBsaXRlcmFsIGFscmVhZHlcbiAgICBcInR0eVwiLFxuICAgIFwidW5hbWVcIixcbiAgICBcInVubGlua1wiLFxuICAgIFwidXB0aW1lXCIsXG4gICAgXCJ1c2Vyc1wiLFxuICAgIFwid2hvXCIsXG4gICAgXCJ3aG9hbWlcIixcbiAgICBcInllc1wiXG4gIF07XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnQmFzaCcsXG4gICAgYWxpYXNlczogW1xuICAgICAgJ3NoJyxcbiAgICAgICd6c2gnXG4gICAgXSxcbiAgICBrZXl3b3Jkczoge1xuICAgICAgJHBhdHRlcm46IC9cXGJbYS16XVthLXowLTkuXy1dK1xcYi8sXG4gICAgICBrZXl3b3JkOiBLRVlXT1JEUyxcbiAgICAgIGxpdGVyYWw6IExJVEVSQUxTLFxuICAgICAgYnVpbHRfaW46IFtcbiAgICAgICAgLi4uU0hFTExfQlVJTFRfSU5TLFxuICAgICAgICAuLi5CQVNIX0JVSUxUX0lOUyxcbiAgICAgICAgLy8gU2hlbGwgbW9kaWZpZXJzXG4gICAgICAgIFwic2V0XCIsXG4gICAgICAgIFwic2hvcHRcIixcbiAgICAgICAgLi4uWlNIX0JVSUxUX0lOUyxcbiAgICAgICAgLi4uR05VX0NPUkVfVVRJTFNcbiAgICAgIF1cbiAgICB9LFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBLTk9XTl9TSEVCQU5HLCAvLyB0byBjYXRjaCBrbm93biBzaGVsbHMgYW5kIGJvb3N0IHJlbGV2YW5jeVxuICAgICAgaGxqcy5TSEVCQU5HKCksIC8vIHRvIGNhdGNoIHVua25vd24gc2hlbGxzIGJ1dCBzdGlsbCBoaWdobGlnaHQgdGhlIHNoZWJhbmdcbiAgICAgIEZVTkNUSU9OLFxuICAgICAgQVJJVEhNRVRJQyxcbiAgICAgIENPTU1FTlQsXG4gICAgICBIRVJFX0RPQyxcbiAgICAgIFBBVEhfTU9ERSxcbiAgICAgIFFVT1RFX1NUUklORyxcbiAgICAgIEVTQ0FQRURfUVVPVEUsXG4gICAgICBBUE9TX1NUUklORyxcbiAgICAgIEVTQ0FQRURfQVBPUyxcbiAgICAgIFZBUlxuICAgIF1cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNoO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1955\n')},1961:(module,__unused_webpack_exports,__webpack_require__)=>{"use strict";eval("// JS-YAML's default schema for `safeLoad` function.\n// It is not described in the YAML specification.\n//\n// This schema is based on standard YAML's Core schema and includes most of\n// extra types described at YAML tag repository. (http://yaml.org/type/)\n\n\n\n\n\nvar Schema = __webpack_require__(8796);\n\n\nmodule.exports = new Schema({\n include: [\n __webpack_require__(2801)\n ],\n implicit: [\n __webpack_require__(4759),\n __webpack_require__(6259)\n ],\n explicit: [\n __webpack_require__(4230),\n __webpack_require__(554),\n __webpack_require__(3446),\n __webpack_require__(7487)\n ]\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTk2MS5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHYTs7O0FBR2IsYUFBYSxtQkFBTyxDQUFDLElBQVc7OztBQUdoQztBQUNBO0FBQ0EsSUFBSSxtQkFBTyxDQUFDLElBQVE7QUFDcEI7QUFDQTtBQUNBLElBQUksbUJBQU8sQ0FBQyxJQUFtQjtBQUMvQixJQUFJLG1CQUFPLENBQUMsSUFBZTtBQUMzQjtBQUNBO0FBQ0EsSUFBSSxtQkFBTyxDQUFDLElBQWdCO0FBQzVCLElBQUksbUJBQU8sQ0FBQyxHQUFjO0FBQzFCLElBQUksbUJBQU8sQ0FBQyxJQUFlO0FBQzNCLElBQUksbUJBQU8sQ0FBQyxJQUFhO0FBQ3pCO0FBQ0EsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL29ic2lkaWFuLW1pbmRtYXAtbmV4dGdlbi8uL25vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMS9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC9zY2hlbWEvZGVmYXVsdF9zYWZlLmpzPzJlNGUiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gSlMtWUFNTCdzIGRlZmF1bHQgc2NoZW1hIGZvciBgc2FmZUxvYWRgIGZ1bmN0aW9uLlxuLy8gSXQgaXMgbm90IGRlc2NyaWJlZCBpbiB0aGUgWUFNTCBzcGVjaWZpY2F0aW9uLlxuLy9cbi8vIFRoaXMgc2NoZW1hIGlzIGJhc2VkIG9uIHN0YW5kYXJkIFlBTUwncyBDb3JlIHNjaGVtYSBhbmQgaW5jbHVkZXMgbW9zdCBvZlxuLy8gZXh0cmEgdHlwZXMgZGVzY3JpYmVkIGF0IFlBTUwgdGFnIHJlcG9zaXRvcnkuIChodHRwOi8veWFtbC5vcmcvdHlwZS8pXG5cblxuJ3VzZSBzdHJpY3QnO1xuXG5cbnZhciBTY2hlbWEgPSByZXF1aXJlKCcuLi9zY2hlbWEnKTtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IG5ldyBTY2hlbWEoe1xuICBpbmNsdWRlOiBbXG4gICAgcmVxdWlyZSgnLi9jb3JlJylcbiAgXSxcbiAgaW1wbGljaXQ6IFtcbiAgICByZXF1aXJlKCcuLi90eXBlL3RpbWVzdGFtcCcpLFxuICAgIHJlcXVpcmUoJy4uL3R5cGUvbWVyZ2UnKVxuICBdLFxuICBleHBsaWNpdDogW1xuICAgIHJlcXVpcmUoJy4uL3R5cGUvYmluYXJ5JyksXG4gICAgcmVxdWlyZSgnLi4vdHlwZS9vbWFwJyksXG4gICAgcmVxdWlyZSgnLi4vdHlwZS9wYWlycycpLFxuICAgIHJlcXVpcmUoJy4uL3R5cGUvc2V0JylcbiAgXVxufSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///1961\n")},1983:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _layout_manager__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(5147);\n/* harmony import */ var _loading_view__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7889);\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(6442);\n/* harmony import */ var _get_active_file__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(2065);\n/* harmony import */ var _views__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(2981);\n/* harmony import */ var src_settings_filesystem__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(8079);\n/* harmony import */ var _view_creator__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(2235);\n/* harmony import */ var _leaf_manager__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(8701);\n/* harmony import */ var src_core_events__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(4215);\n/* harmony import */ var src_utilities_callbag__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(200);\n\n\n\n\n\n\n\n\n\n\nsrc_utilities_callbag__WEBPACK_IMPORTED_MODULE_8__/* ["default"].subscribe */ .Ay.subscribe(src_core_events__WEBPACK_IMPORTED_MODULE_7__.start, () => (0,_view_creator__WEBPACK_IMPORTED_MODULE_5__/* .setViewCreator */ .e)((leaf) => new _loading_view__WEBPACK_IMPORTED_MODULE_1__/* .LoadingView */ .E(leaf)));\nsrc_utilities_callbag__WEBPACK_IMPORTED_MODULE_8__/* ["default"].subscribe */ .Ay.subscribe(src_core_events__WEBPACK_IMPORTED_MODULE_7__.layoutChange, () => {\n _layout_manager__WEBPACK_IMPORTED_MODULE_0__/* .layoutManager */ .S.serialise();\n const topLevel = app.workspace.rootSplit.children[0];\n (function loop(parent) {\n if (parent.type === "split")\n parent.children.map(loop);\n else {\n const currentTab = parent.children[parent.currentTab];\n const view = currentTab.view;\n const loaded = view instanceof _view__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A;\n if (!loaded) return;\n const subject = _views__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A.get(view);\n const file = subject === "unpinned" ? (0,_get_active_file__WEBPACK_IMPORTED_MODULE_9__/* .getActiveFile */ .R)() : subject;\n if (file) view.firstRender(file);\n }\n })(topLevel);\n});\nsrc_utilities_callbag__WEBPACK_IMPORTED_MODULE_8__/* ["default"].subscribe */ .Ay.subscribe(src_core_events__WEBPACK_IMPORTED_MODULE_7__.pin, () => {\n const activeFile = (0,_get_active_file__WEBPACK_IMPORTED_MODULE_9__/* .getActiveFile */ .R)();\n if (_views__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A.has(activeFile)) {\n _leaf_manager__WEBPACK_IMPORTED_MODULE_6__/* .leafManager */ .O.close(activeFile);\n _leaf_manager__WEBPACK_IMPORTED_MODULE_6__/* .leafManager */ .O.replace("unpinned", activeFile);\n } else\n _leaf_manager__WEBPACK_IMPORTED_MODULE_6__/* .leafManager */ .O.replace("unpinned", activeFile);\n});\nsrc_utilities_callbag__WEBPACK_IMPORTED_MODULE_8__/* ["default"].subscribe */ .Ay.subscribe(src_core_events__WEBPACK_IMPORTED_MODULE_7__.unpin, (file) => {\n if (_views__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A.has("unpinned")) {\n _leaf_manager__WEBPACK_IMPORTED_MODULE_6__/* .leafManager */ .O.close("unpinned");\n _leaf_manager__WEBPACK_IMPORTED_MODULE_6__/* .leafManager */ .O.replace(file, "unpinned");\n } else\n _leaf_manager__WEBPACK_IMPORTED_MODULE_6__/* .leafManager */ .O.replace(file, "unpinned");\n});\nsrc_utilities_callbag__WEBPACK_IMPORTED_MODULE_8__/* ["default"].subscribe */ .Ay.subscribe(src_core_events__WEBPACK_IMPORTED_MODULE_7__.fileOpen, (file) => {\n if ((file == null ? void 0 : file.extension) !== "md") return;\n if (_views__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A.has(file)) {\n const view = _views__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A.get(file);\n view.render(file);\n }\n if (_views__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A.has("unpinned")) {\n const view = _views__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A.get("unpinned");\n view.render(file);\n }\n});\nsrc_utilities_callbag__WEBPACK_IMPORTED_MODULE_8__/* ["default"].subscribe */ .Ay.subscribe(src_core_events__WEBPACK_IMPORTED_MODULE_7__.fileRenamed, ({ path }) => {\n const activeFile = (0,_get_active_file__WEBPACK_IMPORTED_MODULE_9__/* .getActiveFile */ .R)();\n const unpinned = _views__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A.get("unpinned");\n if (unpinned && (activeFile == null ? void 0 : activeFile.path) === path && src_settings_filesystem__WEBPACK_IMPORTED_MODULE_4__.globalSettings.titleAsRootNode)\n unpinned.render(activeFile);\n const result = _views__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A.getByPath(path);\n if (result) {\n const { view, file } = result;\n view.setDisplayText(file.basename);\n view.render(file);\n }\n});\nsrc_utilities_callbag__WEBPACK_IMPORTED_MODULE_8__/* ["default"].subscribe */ .Ay.subscribe(src_core_events__WEBPACK_IMPORTED_MODULE_7__.commandOpenUnpinned, () => {\n const activeFile = (0,_get_active_file__WEBPACK_IMPORTED_MODULE_9__/* .getActiveFile */ .R)();\n if (activeFile === null) return;\n if (_views__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A.has("unpinned"))\n _leaf_manager__WEBPACK_IMPORTED_MODULE_6__/* .leafManager */ .O.reveal("unpinned");\n else\n _leaf_manager__WEBPACK_IMPORTED_MODULE_6__/* .leafManager */ .O.new("unpinned");\n});\nsrc_utilities_callbag__WEBPACK_IMPORTED_MODULE_8__/* ["default"].subscribe */ .Ay.subscribe(src_core_events__WEBPACK_IMPORTED_MODULE_7__.commandOpenPinned, () => {\n const activeFile = (0,_get_active_file__WEBPACK_IMPORTED_MODULE_9__/* .getActiveFile */ .R)();\n if (activeFile === null) return;\n if (_views__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A.has(activeFile))\n _leaf_manager__WEBPACK_IMPORTED_MODULE_6__/* .leafManager */ .O.reveal(activeFile);\n else\n _leaf_manager__WEBPACK_IMPORTED_MODULE_6__/* .leafManager */ .O.new(activeFile);\n});\nsrc_utilities_callbag__WEBPACK_IMPORTED_MODULE_8__/* ["default"].subscribe */ .Ay.subscribe(src_core_events__WEBPACK_IMPORTED_MODULE_7__.fileChanged, ({ editor, info: { file } }) => {\n file = file;\n if (file.extension !== "md") return;\n const content = editor.getValue();\n if (_views__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A.has(file)) {\n const view = _views__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A.get(file);\n view.render(file, content);\n }\n if (_views__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A.has("unpinned")) {\n const view = _views__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A.get("unpinned");\n view.render(file, content);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTk4My5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUM4QjtBQUNGO0FBQ0Q7QUFDRztBQUNaO0FBQ2E7QUFDQTtBQUNIO0FBQ2dHO0FBQ3hHO0FBR3BCLDJGQUFpQixDQUFDLGtEQUFLLEVBQUUsTUFDdkIsc0VBQWMsQ0FBQyxDQUFDLFNBQXdCLElBQUksK0RBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUVoRSwyRkFBaUIsQ0FBQyx5REFBWSxFQUFFLE1BQU07QUFDcEMscUVBQWEsQ0FBQyxVQUFVO0FBRXhCLFFBQU0sV0FBVyxJQUFJLFVBQVUsVUFBVSxTQUFTLENBQUM7QUFFbkQsR0FBQyxTQUFTLEtBQUssUUFBd0M7QUFDckQsUUFBSSxPQUFPLFNBQVM7QUFDbEIsYUFBTyxTQUFTLElBQUksSUFBSTtBQUFBLFNBQ3JCO0FBQ0gsWUFBTSxhQUFhLE9BQU8sU0FBUyxPQUFPLFVBQVU7QUFDcEQsWUFBTSxPQUFPLFdBQVc7QUFDeEIsWUFBTSxTQUFTLGdCQUFnQixzREFBYztBQUM3QyxVQUFJLENBQUMsT0FBUTtBQUNiLFlBQU0sVUFBVSx1REFBSyxDQUFDLElBQUksSUFBSTtBQUM5QixZQUFNLE9BQU8sWUFBWSxhQUFhLHdFQUFhLENBQUMsSUFBSTtBQUN4RCxVQUFJLEtBQU0sTUFBSyxZQUFZLElBQUk7QUFBQSxJQUNqQztBQUFBLEVBQ0YsR0FBRyxRQUFRO0FBQ2IsQ0FBQztBQUVELDJGQUFpQixDQUFDLGdEQUFHLEVBQUUsTUFBTTtBQUMzQixRQUFNLGFBQWEsd0VBQWEsQ0FBQztBQUNqQyxNQUFJLHVEQUFLLENBQUMsSUFBSSxVQUFVLEdBQUc7QUFDekIsbUVBQVcsQ0FBQyxNQUFNLFVBQVU7QUFDNUIsbUVBQVcsQ0FBQyxRQUFRLFlBQVksVUFBVTtBQUFBLEVBQzVDO0FBRUUsbUVBQVcsQ0FBQyxRQUFRLFlBQVksVUFBVTtBQUM5QyxDQUFDO0FBQ0QsMkZBQWlCLENBQUMsa0RBQUssRUFBRSxDQUFDLFNBQWdCO0FBQ3hDLE1BQUksdURBQUssQ0FBQyxJQUFJLFVBQVUsR0FBRztBQUN6QixtRUFBVyxDQUFDLE1BQU0sVUFBVTtBQUM1QixtRUFBVyxDQUFDLFFBQVEsTUFBTSxVQUFVO0FBQUEsRUFDdEM7QUFFRSxtRUFBVyxDQUFDLFFBQVEsTUFBTSxVQUFVO0FBQ3hDLENBQUM7QUFFRCwyRkFBaUIsQ0FBQyxxREFBUSxFQUFFLFVBQVE7QUFDbEMsT0FBSSw2QkFBTSxlQUFjLEtBQU07QUFFOUIsTUFBSSx1REFBSyxDQUFDLElBQUksSUFBSSxHQUFHO0FBQ25CLFVBQU0sT0FBTyx1REFBSyxDQUFDLElBQUksSUFBSTtBQUMzQixTQUFLLE9BQU8sSUFBSTtBQUFBLEVBQ2xCO0FBRUEsTUFBSSx1REFBSyxDQUFDLElBQUksVUFBVSxHQUFHO0FBQ3pCLFVBQU0sT0FBTyx1REFBSyxDQUFDLElBQUksVUFBVTtBQUNqQyxTQUFLLE9BQU8sSUFBSTtBQUFBLEVBQ2xCO0FBQ0YsQ0FBQztBQUVELDJGQUFpQixDQUFDLHdEQUFXLEVBQUUsQ0FBQyxFQUFFLEtBQUssTUFBTTtBQUMzQyxRQUFNLGFBQWEsd0VBQWEsQ0FBQztBQUNqQyxRQUFNLFdBQVcsdURBQUssQ0FBQyxJQUFJLFVBQVU7QUFDckMsTUFBSSxhQUFZLHlDQUFZLFVBQVMsUUFBUSxtRUFBYyxDQUFDO0FBQzFELGFBQVMsT0FBTyxVQUFVO0FBRTVCLFFBQU0sU0FBUyx1REFBSyxDQUFDLFVBQVUsSUFBSTtBQUNuQyxNQUFJLFFBQVE7QUFDVixVQUFNLEVBQUUsTUFBTSxLQUFLLElBQUk7QUFDdkIsU0FBSyxlQUFlLEtBQUssUUFBUTtBQUNqQyxTQUFLLE9BQU8sSUFBSTtBQUFBLEVBQ2xCO0FBQ0YsQ0FBQztBQUVELDJGQUFpQixDQUFDLGdFQUFtQixFQUFFLE1BQU07QUFDM0MsUUFBTSxhQUFhLHdFQUFhLENBQUM7QUFDakMsTUFBSSxlQUFlLEtBQU07QUFFekIsTUFBSSx1REFBSyxDQUFDLElBQUksVUFBVTtBQUN0QixtRUFBVyxDQUFDLE9BQU8sVUFBVTtBQUFBO0FBRTdCLG1FQUFXLENBQUMsSUFBSSxVQUFVO0FBQzlCLENBQUM7QUFFRCwyRkFBaUIsQ0FBQyw4REFBaUIsRUFBRSxNQUFNO0FBQ3pDLFFBQU0sYUFBYSx3RUFBYSxDQUFDO0FBQ2pDLE1BQUksZUFBZSxLQUFNO0FBRXpCLE1BQUksdURBQUssQ0FBQyxJQUFJLFVBQVU7QUFDdEIsbUVBQVcsQ0FBQyxPQUFPLFVBQVU7QUFBQTtBQUU3QixtRUFBVyxDQUFDLElBQUksVUFBVTtBQUM5QixDQUFDO0FBRUQsMkZBQWlCLENBQUMsd0RBQVcsRUFBRSxDQUFDLEVBQUUsUUFBUSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU07QUFDN0QsU0FBTztBQUVQLE1BQUksS0FBSyxjQUFjLEtBQU07QUFFN0IsUUFBTSxVQUFVLE9BQU8sU0FBUztBQUVoQyxNQUFJLHVEQUFLLENBQUMsSUFBSSxJQUFJLEdBQUc7QUFDbkIsVUFBTSxPQUFPLHVEQUFLLENBQUMsSUFBSSxJQUFJO0FBQzNCLFNBQUssT0FBTyxNQUFNLE9BQU87QUFBQSxFQUMzQjtBQUVBLE1BQUksdURBQUssQ0FBQyxJQUFJLFVBQVUsR0FBRztBQUN6QixVQUFNLE9BQU8sdURBQUssQ0FBQyxJQUFJLFVBQVU7QUFDakMsU0FBSyxPQUFPLE1BQU0sT0FBTztBQUFBLEVBQzNCO0FBQ0YsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL29ic2lkaWFuLW1pbmRtYXAtbmV4dGdlbi8uL3NyYy92aWV3cy9ldmVudC1saXN0ZW5lcnMudHM/NTBhNiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBURmlsZSwgV29ya3NwYWNlTGVhZiwgV29ya3NwYWNlU3BsaXQsIFdvcmtzcGFjZVRhYnMgfSBmcm9tICdvYnNpZGlhbidcbmltcG9ydCB7IGxheW91dE1hbmFnZXIgfSBmcm9tICcuL2xheW91dC1tYW5hZ2VyJ1xuaW1wb3J0IHsgTG9hZGluZ1ZpZXcgfSBmcm9tICcuL2xvYWRpbmctdmlldydcbmltcG9ydCBNaW5kbWFwVGFiVmlldyBmcm9tICcuL3ZpZXcnXG5pbXBvcnQgeyBnZXRBY3RpdmVGaWxlIH0gZnJvbSAnLi9nZXQtYWN0aXZlLWZpbGUnXG5pbXBvcnQgdmlld3MgZnJvbSAnLi92aWV3cydcbmltcG9ydCB7IGdsb2JhbFNldHRpbmdzIH0gZnJvbSAnc3JjL3NldHRpbmdzL2ZpbGVzeXN0ZW0nXG5pbXBvcnQgeyBzZXRWaWV3Q3JlYXRvciB9IGZyb20gJy4vdmlldy1jcmVhdG9yJ1xuaW1wb3J0IHsgbGVhZk1hbmFnZXIgfSBmcm9tICcuL2xlYWYtbWFuYWdlcidcbmltcG9ydCB7IGNvbW1hbmRPcGVuUGlubmVkLCBjb21tYW5kT3BlblVucGlubmVkLCBmaWxlQ2hhbmdlZCwgZmlsZU9wZW4sIGZpbGVSZW5hbWVkLCBsYXlvdXRDaGFuZ2UsIHBpbiwgc3RhcnQsIHVucGluIH0gZnJvbSAnc3JjL2NvcmUvZXZlbnRzJ1xuaW1wb3J0IENhbGxiYWcgZnJvbSAnc3JjL3V0aWxpdGllcy9jYWxsYmFnJ1xuXG5cbkNhbGxiYWcuc3Vic2NyaWJlKHN0YXJ0LCAoKSA9PlxuICBzZXRWaWV3Q3JlYXRvcigobGVhZjogV29ya3NwYWNlTGVhZikgPT4gbmV3IExvYWRpbmdWaWV3KGxlYWYpKSlcblxuQ2FsbGJhZy5zdWJzY3JpYmUobGF5b3V0Q2hhbmdlLCAoKSA9PiB7XG4gIGxheW91dE1hbmFnZXIuc2VyaWFsaXNlKClcblxuICBjb25zdCB0b3BMZXZlbCA9IGFwcC53b3Jrc3BhY2Uucm9vdFNwbGl0LmNoaWxkcmVuWzBdIGFzIFdvcmtzcGFjZVNwbGl0IHwgV29ya3NwYWNlVGFicztcblxuICAoZnVuY3Rpb24gbG9vcChwYXJlbnQ6IFdvcmtzcGFjZVNwbGl0IHwgV29ya3NwYWNlVGFicykge1xuICAgIGlmIChwYXJlbnQudHlwZSA9PT0gJ3NwbGl0JylcbiAgICAgIHBhcmVudC5jaGlsZHJlbi5tYXAobG9vcClcbiAgICBlbHNlIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRUYWIgPSBwYXJlbnQuY2hpbGRyZW5bcGFyZW50LmN1cnJlbnRUYWJdXG4gICAgICBjb25zdCB2aWV3ID0gY3VycmVudFRhYi52aWV3XG4gICAgICBjb25zdCBsb2FkZWQgPSB2aWV3IGluc3RhbmNlb2YgTWluZG1hcFRhYlZpZXdcbiAgICAgIGlmICghbG9hZGVkKSByZXR1cm5cbiAgICAgIGNvbnN0IHN1YmplY3QgPSB2aWV3cy5nZXQodmlldykhXG4gICAgICBjb25zdCBmaWxlID0gc3ViamVjdCA9PT0gJ3VucGlubmVkJyA/IGdldEFjdGl2ZUZpbGUoKSA6IHN1YmplY3RcbiAgICAgIGlmIChmaWxlKSB2aWV3LmZpcnN0UmVuZGVyKGZpbGUpXG4gICAgfVxuICB9KSh0b3BMZXZlbClcbn0pXG5cbkNhbGxiYWcuc3Vic2NyaWJlKHBpbiwgKCkgPT4ge1xuICBjb25zdCBhY3RpdmVGaWxlID0gZ2V0QWN0aXZlRmlsZSgpIVxuICBpZiAodmlld3MuaGFzKGFjdGl2ZUZpbGUpKSB7XG4gICAgbGVhZk1hbmFnZXIuY2xvc2UoYWN0aXZlRmlsZSlcbiAgICBsZWFmTWFuYWdlci5yZXBsYWNlKCd1bnBpbm5lZCcsIGFjdGl2ZUZpbGUpXG4gIH1cbiAgZWxzZVxuICAgIGxlYWZNYW5hZ2VyLnJlcGxhY2UoJ3VucGlubmVkJywgYWN0aXZlRmlsZSlcbn0pXG5DYWxsYmFnLnN1YnNjcmliZSh1bnBpbiwgKGZpbGU6IFRGaWxlKSA9PiB7XG4gIGlmICh2aWV3cy5oYXMoJ3VucGlubmVkJykpIHtcbiAgICBsZWFmTWFuYWdlci5jbG9zZSgndW5waW5uZWQnKVxuICAgIGxlYWZNYW5hZ2VyLnJlcGxhY2UoZmlsZSwgJ3VucGlubmVkJylcbiAgfVxuICBlbHNlXG4gICAgbGVhZk1hbmFnZXIucmVwbGFjZShmaWxlLCAndW5waW5uZWQnKVxufSlcblxuQ2FsbGJhZy5zdWJzY3JpYmUoZmlsZU9wZW4sIGZpbGUgPT4ge1xuICBpZiAoZmlsZT8uZXh0ZW5zaW9uICE9PSAnbWQnKSByZXR1cm5cblxuICBpZiAodmlld3MuaGFzKGZpbGUpKSB7XG4gICAgY29uc3QgdmlldyA9IHZpZXdzLmdldChmaWxlKSFcbiAgICB2aWV3LnJlbmRlcihmaWxlKVxuICB9XG5cbiAgaWYgKHZpZXdzLmhhcygndW5waW5uZWQnKSkge1xuICAgIGNvbnN0IHZpZXcgPSB2aWV3cy5nZXQoJ3VucGlubmVkJykhXG4gICAgdmlldy5yZW5kZXIoZmlsZSlcbiAgfVxufSlcblxuQ2FsbGJhZy5zdWJzY3JpYmUoZmlsZVJlbmFtZWQsICh7IHBhdGggfSkgPT4ge1xuICBjb25zdCBhY3RpdmVGaWxlID0gZ2V0QWN0aXZlRmlsZSgpXG4gIGNvbnN0IHVucGlubmVkID0gdmlld3MuZ2V0KCd1bnBpbm5lZCcpXG4gIGlmICh1bnBpbm5lZCAmJiBhY3RpdmVGaWxlPy5wYXRoID09PSBwYXRoICYmIGdsb2JhbFNldHRpbmdzLnRpdGxlQXNSb290Tm9kZSlcbiAgICB1bnBpbm5lZC5yZW5kZXIoYWN0aXZlRmlsZSlcblxuICBjb25zdCByZXN1bHQgPSB2aWV3cy5nZXRCeVBhdGgocGF0aClcbiAgaWYgKHJlc3VsdCkge1xuICAgIGNvbnN0IHsgdmlldywgZmlsZSB9ID0gcmVzdWx0XG4gICAgdmlldy5zZXREaXNwbGF5VGV4dChmaWxlLmJhc2VuYW1lKVxuICAgIHZpZXcucmVuZGVyKGZpbGUpXG4gIH1cbn0pXG5cbkNhbGxiYWcuc3Vic2NyaWJlKGNvbW1hbmRPcGVuVW5waW5uZWQsICgpID0+IHtcbiAgY29uc3QgYWN0aXZlRmlsZSA9IGdldEFjdGl2ZUZpbGUoKVxuICBpZiAoYWN0aXZlRmlsZSA9PT0gbnVsbCkgcmV0dXJuXG5cbiAgaWYgKHZpZXdzLmhhcygndW5waW5uZWQnKSlcbiAgICBsZWFmTWFuYWdlci5yZXZlYWwoJ3VucGlubmVkJylcbiAgZWxzZVxuICAgIGxlYWZNYW5hZ2VyLm5ldygndW5waW5uZWQnKVxufSlcblxuQ2FsbGJhZy5zdWJzY3JpYmUoY29tbWFuZE9wZW5QaW5uZWQsICgpID0+IHtcbiAgY29uc3QgYWN0aXZlRmlsZSA9IGdldEFjdGl2ZUZpbGUoKVxuICBpZiAoYWN0aXZlRmlsZSA9PT0gbnVsbCkgcmV0dXJuXG5cbiAgaWYgKHZpZXdzLmhhcyhhY3RpdmVGaWxlKSlcbiAgICBsZWFmTWFuYWdlci5yZXZlYWwoYWN0aXZlRmlsZSlcbiAgZWxzZVxuICAgIGxlYWZNYW5hZ2VyLm5ldyhhY3RpdmVGaWxlKVxufSlcblxuQ2FsbGJhZy5zdWJzY3JpYmUoZmlsZUNoYW5nZWQsICh7IGVkaXRvciwgaW5mbzogeyBmaWxlIH0gfSkgPT4ge1xuICBmaWxlID0gZmlsZSFcblxuICBpZiAoZmlsZS5leHRlbnNpb24gIT09ICdtZCcpIHJldHVyblxuXG4gIGNvbnN0IGNvbnRlbnQgPSBlZGl0b3IuZ2V0VmFsdWUoKVxuXG4gIGlmICh2aWV3cy5oYXMoZmlsZSkpIHtcbiAgICBjb25zdCB2aWV3ID0gdmlld3MuZ2V0KGZpbGUpIVxuICAgIHZpZXcucmVuZGVyKGZpbGUsIGNvbnRlbnQpXG4gIH1cblxuICBpZiAodmlld3MuaGFzKCd1bnBpbm5lZCcpKSB7XG4gICAgY29uc3QgdmlldyA9IHZpZXdzLmdldCgndW5waW5uZWQnKSFcbiAgICB2aWV3LnJlbmRlcihmaWxlLCBjb250ZW50KVxuICB9XG59KVxuXG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///1983\n')},2026:(__unused_webpack_module,exports)=>{"use strict";eval("\n\nfunction resolveEnd(end, offset, reqSpace, onError) {\n let comment = '';\n if (end) {\n let hasSpace = false;\n let sep = '';\n for (const token of end) {\n const { source, type } = token;\n switch (type) {\n case 'space':\n hasSpace = true;\n break;\n case 'comment': {\n if (reqSpace && !hasSpace)\n onError(token, 'MISSING_CHAR', 'Comments must be separated from other tokens by white space characters');\n const cb = source.substring(1) || ' ';\n if (!comment)\n comment = cb;\n else\n comment += sep + cb;\n sep = '';\n break;\n }\n case 'newline':\n if (comment)\n sep += source;\n hasSpace = true;\n break;\n default:\n onError(token, 'UNEXPECTED_TOKEN', `Unexpected ${type} at node end`);\n }\n offset += source.length;\n }\n }\n return { comment, offset };\n}\n\nexports.resolveEnd = resolveEnd;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjAyNi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsZUFBZTtBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxRUFBcUUsTUFBTTtBQUMzRTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjs7QUFFQSxrQkFBa0IiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9vYnNpZGlhbi1taW5kbWFwLW5leHRnZW4vLi9ub2RlX21vZHVsZXMvLnBucG0veWFtbEAyLjguMC9ub2RlX21vZHVsZXMveWFtbC9kaXN0L2NvbXBvc2UvcmVzb2x2ZS1lbmQuanM/MzkxNSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmZ1bmN0aW9uIHJlc29sdmVFbmQoZW5kLCBvZmZzZXQsIHJlcVNwYWNlLCBvbkVycm9yKSB7XG4gICAgbGV0IGNvbW1lbnQgPSAnJztcbiAgICBpZiAoZW5kKSB7XG4gICAgICAgIGxldCBoYXNTcGFjZSA9IGZhbHNlO1xuICAgICAgICBsZXQgc2VwID0gJyc7XG4gICAgICAgIGZvciAoY29uc3QgdG9rZW4gb2YgZW5kKSB7XG4gICAgICAgICAgICBjb25zdCB7IHNvdXJjZSwgdHlwZSB9ID0gdG9rZW47XG4gICAgICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdzcGFjZSc6XG4gICAgICAgICAgICAgICAgICAgIGhhc1NwYWNlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnY29tbWVudCc6IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlcVNwYWNlICYmICFoYXNTcGFjZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uRXJyb3IodG9rZW4sICdNSVNTSU5HX0NIQVInLCAnQ29tbWVudHMgbXVzdCBiZSBzZXBhcmF0ZWQgZnJvbSBvdGhlciB0b2tlbnMgYnkgd2hpdGUgc3BhY2UgY2hhcmFjdGVycycpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjYiA9IHNvdXJjZS5zdWJzdHJpbmcoMSkgfHwgJyAnO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbW1lbnQpXG4gICAgICAgICAgICAgICAgICAgICAgICBjb21tZW50ID0gY2I7XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1lbnQgKz0gc2VwICsgY2I7XG4gICAgICAgICAgICAgICAgICAgIHNlcCA9ICcnO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSAnbmV3bGluZSc6XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb21tZW50KVxuICAgICAgICAgICAgICAgICAgICAgICAgc2VwICs9IHNvdXJjZTtcbiAgICAgICAgICAgICAgICAgICAgaGFzU3BhY2UgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBvbkVycm9yKHRva2VuLCAnVU5FWFBFQ1RFRF9UT0tFTicsIGBVbmV4cGVjdGVkICR7dHlwZX0gYXQgbm9kZSBlbmRgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9mZnNldCArPSBzb3VyY2UubGVuZ3RoO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7IGNvbW1lbnQsIG9mZnNldCB9O1xufVxuXG5leHBvcnRzLnJlc29sdmVFbmQgPSByZXNvbHZlRW5kO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2026\n")},2065:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ R: () => (/* binding */ getActiveFile)\n/* harmony export */ });\nfunction getActiveFile() {\n const af = app.workspace.getActiveFile();\n return (af == null ? void 0 : af.extension) === "md" ? af : null;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjA2NS5qcyIsIm1hcHBpbmdzIjoiOzs7QUFFTyxTQUFTLGdCQUE4QjtBQUM1QyxRQUFNLEtBQUssSUFBSSxVQUFVLGNBQWM7QUFDdkMsVUFBTyx5QkFBSSxlQUFjLE9BQU8sS0FBSztBQUN2QyIsInNvdXJjZXMiOlsid2VicGFjazovL29ic2lkaWFuLW1pbmRtYXAtbmV4dGdlbi8uL3NyYy92aWV3cy9nZXQtYWN0aXZlLWZpbGUudHM/YWNmNSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBURmlsZSB9IGZyb20gJ29ic2lkaWFuJ1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0QWN0aXZlRmlsZSgpOiBURmlsZSB8IG51bGwge1xuICBjb25zdCBhZiA9IGFwcC53b3Jrc3BhY2UuZ2V0QWN0aXZlRmlsZSgpXG4gIHJldHVybiBhZj8uZXh0ZW5zaW9uID09PSAnbWQnID8gYWYgOiBudWxsXG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2065\n')},2075:module=>{"use strict";eval('\n\nmodule.exports = function (item) {\n var content = item[1];\n var cssMapping = item[3];\n if (!cssMapping) {\n return content;\n }\n if (typeof btoa === "function") {\n var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(cssMapping))));\n var data = "sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(base64);\n var sourceMapping = "/*# ".concat(data, " */");\n return [content].concat([sourceMapping]).join("\\n");\n }\n return [content].join("\\n");\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjA3NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdURBQXVELGNBQWM7QUFDckU7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL29ic2lkaWFuLW1pbmRtYXAtbmV4dGdlbi8uL25vZGVfbW9kdWxlcy8ucG5wbS9jc3MtbG9hZGVyQDcuMS4yX3dlYnBhY2tANS45OS45L25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9zb3VyY2VNYXBzLmpzPzAxMjciXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZW0pIHtcbiAgdmFyIGNvbnRlbnQgPSBpdGVtWzFdO1xuICB2YXIgY3NzTWFwcGluZyA9IGl0ZW1bM107XG4gIGlmICghY3NzTWFwcGluZykge1xuICAgIHJldHVybiBjb250ZW50O1xuICB9XG4gIGlmICh0eXBlb2YgYnRvYSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgdmFyIGJhc2U2NCA9IGJ0b2EodW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KGNzc01hcHBpbmcpKSkpO1xuICAgIHZhciBkYXRhID0gXCJzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxcIi5jb25jYXQoYmFzZTY0KTtcbiAgICB2YXIgc291cmNlTWFwcGluZyA9IFwiLyojIFwiLmNvbmNhdChkYXRhLCBcIiAqL1wiKTtcbiAgICByZXR1cm4gW2NvbnRlbnRdLmNvbmNhdChbc291cmNlTWFwcGluZ10pLmpvaW4oXCJcXG5cIik7XG4gIH1cbiAgcmV0dXJuIFtjb250ZW50XS5qb2luKFwiXFxuXCIpO1xufTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2075\n')},2116:module=>{eval("/*\nLanguage: Device Tree\nDescription: *.dts files used in the Linux kernel\nAuthor: Martin Braun , Moritz Fischer \nWebsite: https://elinux.org/Device_Tree_Reference\nCategory: config\n*/\n\n/** @type LanguageFn */\nfunction dts(hljs) {\n const STRINGS = {\n className: 'string',\n variants: [\n hljs.inherit(hljs.QUOTE_STRING_MODE, { begin: '((u8?|U)|L)?\"' }),\n {\n begin: '(u8?|U)?R\"',\n end: '\"',\n contains: [ hljs.BACKSLASH_ESCAPE ]\n },\n {\n begin: '\\'\\\\\\\\?.',\n end: '\\'',\n illegal: '.'\n }\n ]\n };\n\n const NUMBERS = {\n className: 'number',\n variants: [\n { begin: '\\\\b(\\\\d+(\\\\.\\\\d*)?|\\\\.\\\\d+)(u|U|l|L|ul|UL|f|F)' },\n { begin: hljs.C_NUMBER_RE }\n ],\n relevance: 0\n };\n\n const PREPROCESSOR = {\n className: 'meta',\n begin: '#',\n end: '$',\n keywords: { keyword: 'if else elif endif define undef ifdef ifndef' },\n contains: [\n {\n begin: /\\\\\\n/,\n relevance: 0\n },\n {\n beginKeywords: 'include',\n end: '$',\n keywords: { keyword: 'include' },\n contains: [\n hljs.inherit(STRINGS, { className: 'string' }),\n {\n className: 'string',\n begin: '<',\n end: '>',\n illegal: '\\\\n'\n }\n ]\n },\n STRINGS,\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE\n ]\n };\n\n const REFERENCE = {\n className: 'variable',\n begin: /&[a-z\\d_]*\\b/\n };\n\n const KEYWORD = {\n className: 'keyword',\n begin: '/[a-z][a-z\\\\d-]*/'\n };\n\n const LABEL = {\n className: 'symbol',\n begin: '^\\\\s*[a-zA-Z_][a-zA-Z\\\\d_]*:'\n };\n\n const CELL_PROPERTY = {\n className: 'params',\n relevance: 0,\n begin: '<',\n end: '>',\n contains: [\n NUMBERS,\n REFERENCE\n ]\n };\n\n const NODE = {\n className: 'title.class',\n begin: /[a-zA-Z_][a-zA-Z\\d_@-]*(?=\\s\\{)/,\n relevance: 0.2\n };\n\n const ROOT_NODE = {\n className: 'title.class',\n begin: /^\\/(?=\\s*\\{)/,\n relevance: 10\n };\n\n // TODO: `attribute` might be the right scope here, unsure\n // I'm not sure if all these key names have semantic meaning or not\n const ATTR_NO_VALUE = {\n match: /[a-z][a-z-,]+(?=;)/,\n relevance: 0,\n scope: \"attr\"\n };\n const ATTR = {\n relevance: 0,\n match: [\n /[a-z][a-z-,]+/,\n /\\s*/,\n /=/\n ],\n scope: {\n 1: \"attr\",\n 3: \"operator\"\n }\n };\n\n const PUNC = {\n scope: \"punctuation\",\n relevance: 0,\n // `};` combined is just to avoid tons of useless punctuation nodes\n match: /\\};|[;{}]/\n };\n\n return {\n name: 'Device Tree',\n contains: [\n ROOT_NODE,\n REFERENCE,\n KEYWORD,\n LABEL,\n NODE,\n ATTR,\n ATTR_NO_VALUE,\n CELL_PROPERTY,\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE,\n NUMBERS,\n STRINGS,\n PREPROCESSOR,\n PUNC,\n {\n begin: hljs.IDENT_RE + '::',\n keywords: \"\"\n }\n ]\n };\n}\n\nmodule.exports = dts;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjExNi5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkNBQTZDLHdCQUF3QjtBQUNyRTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLHlEQUF5RDtBQUNqRSxRQUFRO0FBQ1I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLHlEQUF5RDtBQUN6RTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxvQkFBb0Isb0JBQW9CO0FBQ3hDO0FBQ0Esa0NBQWtDLHFCQUFxQjtBQUN2RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSwwQ0FBMEM7QUFDMUM7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsdUJBQXVCO0FBQ3ZCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1YsZUFBZSxLQUFLO0FBQ3BCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL29ic2lkaWFuLW1pbmRtYXAtbmV4dGdlbi8uL25vZGVfbW9kdWxlcy8ucG5wbS9oaWdobGlnaHQuanNAMTEuMTEuMS9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvZHRzLmpzPzE0YjIiXSwic291cmNlc0NvbnRlbnQiOlsiLypcbkxhbmd1YWdlOiBEZXZpY2UgVHJlZVxuRGVzY3JpcHRpb246ICouZHRzIGZpbGVzIHVzZWQgaW4gdGhlIExpbnV4IGtlcm5lbFxuQXV0aG9yOiBNYXJ0aW4gQnJhdW4gPG1hcnRpbi5icmF1bkBldHR1cy5jb20+LCBNb3JpdHogRmlzY2hlciA8bW9yaXR6LmZpc2NoZXJAZXR0dXMuY29tPlxuV2Vic2l0ZTogaHR0cHM6Ly9lbGludXgub3JnL0RldmljZV9UcmVlX1JlZmVyZW5jZVxuQ2F0ZWdvcnk6IGNvbmZpZ1xuKi9cblxuLyoqIEB0eXBlIExhbmd1YWdlRm4gKi9cbmZ1bmN0aW9uIGR0cyhobGpzKSB7XG4gIGNvbnN0IFNUUklOR1MgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICB2YXJpYW50czogW1xuICAgICAgaGxqcy5pbmhlcml0KGhsanMuUVVPVEVfU1RSSU5HX01PREUsIHsgYmVnaW46ICcoKHU4P3xVKXxMKT9cIicgfSksXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnKHU4P3xVKT9SXCInLFxuICAgICAgICBlbmQ6ICdcIicsXG4gICAgICAgIGNvbnRhaW5zOiBbIGhsanMuQkFDS1NMQVNIX0VTQ0FQRSBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogJ1xcJ1xcXFxcXFxcPy4nLFxuICAgICAgICBlbmQ6ICdcXCcnLFxuICAgICAgICBpbGxlZ2FsOiAnLidcbiAgICAgIH1cbiAgICBdXG4gIH07XG5cbiAgY29uc3QgTlVNQkVSUyA9IHtcbiAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7IGJlZ2luOiAnXFxcXGIoXFxcXGQrKFxcXFwuXFxcXGQqKT98XFxcXC5cXFxcZCspKHV8VXxsfEx8dWx8VUx8ZnxGKScgfSxcbiAgICAgIHsgYmVnaW46IGhsanMuQ19OVU1CRVJfUkUgfVxuICAgIF0sXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG5cbiAgY29uc3QgUFJFUFJPQ0VTU09SID0ge1xuICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgIGJlZ2luOiAnIycsXG4gICAgZW5kOiAnJCcsXG4gICAga2V5d29yZHM6IHsga2V5d29yZDogJ2lmIGVsc2UgZWxpZiBlbmRpZiBkZWZpbmUgdW5kZWYgaWZkZWYgaWZuZGVmJyB9LFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvXFxcXFxcbi8sXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ2luY2x1ZGUnLFxuICAgICAgICBlbmQ6ICckJyxcbiAgICAgICAga2V5d29yZHM6IHsga2V5d29yZDogJ2luY2x1ZGUnIH0sXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgaGxqcy5pbmhlcml0KFNUUklOR1MsIHsgY2xhc3NOYW1lOiAnc3RyaW5nJyB9KSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgYmVnaW46ICc8JyxcbiAgICAgICAgICAgIGVuZDogJz4nLFxuICAgICAgICAgICAgaWxsZWdhbDogJ1xcXFxuJ1xuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIFNUUklOR1MsXG4gICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFXG4gICAgXVxuICB9O1xuXG4gIGNvbnN0IFJFRkVSRU5DRSA9IHtcbiAgICBjbGFzc05hbWU6ICd2YXJpYWJsZScsXG4gICAgYmVnaW46IC8mW2EtelxcZF9dKlxcYi9cbiAgfTtcblxuICBjb25zdCBLRVlXT1JEID0ge1xuICAgIGNsYXNzTmFtZTogJ2tleXdvcmQnLFxuICAgIGJlZ2luOiAnL1thLXpdW2EtelxcXFxkLV0qLydcbiAgfTtcblxuICBjb25zdCBMQUJFTCA9IHtcbiAgICBjbGFzc05hbWU6ICdzeW1ib2wnLFxuICAgIGJlZ2luOiAnXlxcXFxzKlthLXpBLVpfXVthLXpBLVpcXFxcZF9dKjonXG4gIH07XG5cbiAgY29uc3QgQ0VMTF9QUk9QRVJUWSA9IHtcbiAgICBjbGFzc05hbWU6ICdwYXJhbXMnLFxuICAgIHJlbGV2YW5jZTogMCxcbiAgICBiZWdpbjogJzwnLFxuICAgIGVuZDogJz4nLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBOVU1CRVJTLFxuICAgICAgUkVGRVJFTkNFXG4gICAgXVxuICB9O1xuXG4gIGNvbnN0IE5PREUgPSB7XG4gICAgY2xhc3NOYW1lOiAndGl0bGUuY2xhc3MnLFxuICAgIGJlZ2luOiAvW2EtekEtWl9dW2EtekEtWlxcZF9ALV0qKD89XFxzXFx7KS8sXG4gICAgcmVsZXZhbmNlOiAwLjJcbiAgfTtcblxuICBjb25zdCBST09UX05PREUgPSB7XG4gICAgY2xhc3NOYW1lOiAndGl0bGUuY2xhc3MnLFxuICAgIGJlZ2luOiAvXlxcLyg/PVxccypcXHspLyxcbiAgICByZWxldmFuY2U6IDEwXG4gIH07XG5cbiAgLy8gVE9ETzogYGF0dHJpYnV0ZWAgbWlnaHQgYmUgdGhlIHJpZ2h0IHNjb3BlIGhlcmUsIHVuc3VyZVxuICAvLyBJJ20gbm90IHN1cmUgaWYgYWxsIHRoZXNlIGtleSBuYW1lcyBoYXZlIHNlbWFudGljIG1lYW5pbmcgb3Igbm90XG4gIGNvbnN0IEFUVFJfTk9fVkFMVUUgPSB7XG4gICAgbWF0Y2g6IC9bYS16XVthLXotLF0rKD89OykvLFxuICAgIHJlbGV2YW5jZTogMCxcbiAgICBzY29wZTogXCJhdHRyXCJcbiAgfTtcbiAgY29uc3QgQVRUUiA9IHtcbiAgICByZWxldmFuY2U6IDAsXG4gICAgbWF0Y2g6IFtcbiAgICAgIC9bYS16XVthLXotLF0rLyxcbiAgICAgIC9cXHMqLyxcbiAgICAgIC89L1xuICAgIF0sXG4gICAgc2NvcGU6IHtcbiAgICAgIDE6IFwiYXR0clwiLFxuICAgICAgMzogXCJvcGVyYXRvclwiXG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IFBVTkMgPSB7XG4gICAgc2NvcGU6IFwicHVuY3R1YXRpb25cIixcbiAgICByZWxldmFuY2U6IDAsXG4gICAgLy8gYH07YCBjb21iaW5lZCBpcyBqdXN0IHRvIGF2b2lkIHRvbnMgb2YgdXNlbGVzcyBwdW5jdHVhdGlvbiBub2Rlc1xuICAgIG1hdGNoOiAvXFx9O3xbO3t9XS9cbiAgfTtcblxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdEZXZpY2UgVHJlZScsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIFJPT1RfTk9ERSxcbiAgICAgIFJFRkVSRU5DRSxcbiAgICAgIEtFWVdPUkQsXG4gICAgICBMQUJFTCxcbiAgICAgIE5PREUsXG4gICAgICBBVFRSLFxuICAgICAgQVRUUl9OT19WQUxVRSxcbiAgICAgIENFTExfUFJPUEVSVFksXG4gICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgTlVNQkVSUyxcbiAgICAgIFNUUklOR1MsXG4gICAgICBQUkVQUk9DRVNTT1IsXG4gICAgICBQVU5DLFxuICAgICAge1xuICAgICAgICBiZWdpbjogaGxqcy5JREVOVF9SRSArICc6OicsXG4gICAgICAgIGtleXdvcmRzOiBcIlwiXG4gICAgICB9XG4gICAgXVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGR0cztcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2116\n")},2118:module=>{eval("/*\nLanguage: CMake\nDescription: CMake is an open-source cross-platform system for build automation.\nAuthor: Igor Kalnitsky \nWebsite: https://cmake.org\nCategory: build-system\n*/\n\n/** @type LanguageFn */\nfunction cmake(hljs) {\n return {\n name: 'CMake',\n aliases: [ 'cmake.in' ],\n case_insensitive: true,\n keywords: { keyword:\n // scripting commands\n 'break cmake_host_system_information cmake_minimum_required cmake_parse_arguments '\n + 'cmake_policy configure_file continue elseif else endforeach endfunction endif endmacro '\n + 'endwhile execute_process file find_file find_library find_package find_path '\n + 'find_program foreach function get_cmake_property get_directory_property '\n + 'get_filename_component get_property if include include_guard list macro '\n + 'mark_as_advanced math message option return separate_arguments '\n + 'set_directory_properties set_property set site_name string unset variable_watch while '\n // project commands\n + 'add_compile_definitions add_compile_options add_custom_command add_custom_target '\n + 'add_definitions add_dependencies add_executable add_library add_link_options '\n + 'add_subdirectory add_test aux_source_directory build_command create_test_sourcelist '\n + 'define_property enable_language enable_testing export fltk_wrap_ui '\n + 'get_source_file_property get_target_property get_test_property include_directories '\n + 'include_external_msproject include_regular_expression install link_directories '\n + 'link_libraries load_cache project qt_wrap_cpp qt_wrap_ui remove_definitions '\n + 'set_source_files_properties set_target_properties set_tests_properties source_group '\n + 'target_compile_definitions target_compile_features target_compile_options '\n + 'target_include_directories target_link_directories target_link_libraries '\n + 'target_link_options target_sources try_compile try_run '\n // CTest commands\n + 'ctest_build ctest_configure ctest_coverage ctest_empty_binary_directory ctest_memcheck '\n + 'ctest_read_custom_files ctest_run_script ctest_sleep ctest_start ctest_submit '\n + 'ctest_test ctest_update ctest_upload '\n // deprecated commands\n + 'build_name exec_program export_library_dependencies install_files install_programs '\n + 'install_targets load_command make_directory output_required_files remove '\n + 'subdir_depends subdirs use_mangled_mesa utility_source variable_requires write_file '\n + 'qt5_use_modules qt5_use_package qt5_wrap_cpp '\n // core keywords\n + 'on off true false and or not command policy target test exists is_newer_than '\n + 'is_directory is_symlink is_absolute matches less greater equal less_equal '\n + 'greater_equal strless strgreater strequal strless_equal strgreater_equal version_less '\n + 'version_greater version_equal version_less_equal version_greater_equal in_list defined' },\n contains: [\n {\n className: 'variable',\n begin: /\\$\\{/,\n end: /\\}/\n },\n hljs.COMMENT(/#\\[\\[/, /]]/),\n hljs.HASH_COMMENT_MODE,\n hljs.QUOTE_STRING_MODE,\n hljs.NUMBER_MODE\n ]\n };\n}\n\nmodule.exports = cmake;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjExOC5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0dBQW9HO0FBQ3BHO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQjtBQUNwQixnQkFBZ0I7QUFDaEIsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vb2JzaWRpYW4tbWluZG1hcC1uZXh0Z2VuLy4vbm9kZV9tb2R1bGVzLy5wbnBtL2hpZ2hsaWdodC5qc0AxMS4xMS4xL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9jbWFrZS5qcz8zMzg1Il0sInNvdXJjZXNDb250ZW50IjpbIi8qXG5MYW5ndWFnZTogQ01ha2VcbkRlc2NyaXB0aW9uOiBDTWFrZSBpcyBhbiBvcGVuLXNvdXJjZSBjcm9zcy1wbGF0Zm9ybSBzeXN0ZW0gZm9yIGJ1aWxkIGF1dG9tYXRpb24uXG5BdXRob3I6IElnb3IgS2Fsbml0c2t5IDxpZ29yQGthbG5pdHNreS5vcmc+XG5XZWJzaXRlOiBodHRwczovL2NtYWtlLm9yZ1xuQ2F0ZWdvcnk6IGJ1aWxkLXN5c3RlbVxuKi9cblxuLyoqIEB0eXBlIExhbmd1YWdlRm4gKi9cbmZ1bmN0aW9uIGNtYWtlKGhsanMpIHtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnQ01ha2UnLFxuICAgIGFsaWFzZXM6IFsgJ2NtYWtlLmluJyBdLFxuICAgIGNhc2VfaW5zZW5zaXRpdmU6IHRydWUsXG4gICAga2V5d29yZHM6IHsga2V5d29yZDpcbiAgICAgICAgLy8gc2NyaXB0aW5nIGNvbW1hbmRzXG4gICAgICAgICdicmVhayBjbWFrZV9ob3N0X3N5c3RlbV9pbmZvcm1hdGlvbiBjbWFrZV9taW5pbXVtX3JlcXVpcmVkIGNtYWtlX3BhcnNlX2FyZ3VtZW50cyAnXG4gICAgICAgICsgJ2NtYWtlX3BvbGljeSBjb25maWd1cmVfZmlsZSBjb250aW51ZSBlbHNlaWYgZWxzZSBlbmRmb3JlYWNoIGVuZGZ1bmN0aW9uIGVuZGlmIGVuZG1hY3JvICdcbiAgICAgICAgKyAnZW5kd2hpbGUgZXhlY3V0ZV9wcm9jZXNzIGZpbGUgZmluZF9maWxlIGZpbmRfbGlicmFyeSBmaW5kX3BhY2thZ2UgZmluZF9wYXRoICdcbiAgICAgICAgKyAnZmluZF9wcm9ncmFtIGZvcmVhY2ggZnVuY3Rpb24gZ2V0X2NtYWtlX3Byb3BlcnR5IGdldF9kaXJlY3RvcnlfcHJvcGVydHkgJ1xuICAgICAgICArICdnZXRfZmlsZW5hbWVfY29tcG9uZW50IGdldF9wcm9wZXJ0eSBpZiBpbmNsdWRlIGluY2x1ZGVfZ3VhcmQgbGlzdCBtYWNybyAnXG4gICAgICAgICsgJ21hcmtfYXNfYWR2YW5jZWQgbWF0aCBtZXNzYWdlIG9wdGlvbiByZXR1cm4gc2VwYXJhdGVfYXJndW1lbnRzICdcbiAgICAgICAgKyAnc2V0X2RpcmVjdG9yeV9wcm9wZXJ0aWVzIHNldF9wcm9wZXJ0eSBzZXQgc2l0ZV9uYW1lIHN0cmluZyB1bnNldCB2YXJpYWJsZV93YXRjaCB3aGlsZSAnXG4gICAgICAgIC8vIHByb2plY3QgY29tbWFuZHNcbiAgICAgICAgKyAnYWRkX2NvbXBpbGVfZGVmaW5pdGlvbnMgYWRkX2NvbXBpbGVfb3B0aW9ucyBhZGRfY3VzdG9tX2NvbW1hbmQgYWRkX2N1c3RvbV90YXJnZXQgJ1xuICAgICAgICArICdhZGRfZGVmaW5pdGlvbnMgYWRkX2RlcGVuZGVuY2llcyBhZGRfZXhlY3V0YWJsZSBhZGRfbGlicmFyeSBhZGRfbGlua19vcHRpb25zICdcbiAgICAgICAgKyAnYWRkX3N1YmRpcmVjdG9yeSBhZGRfdGVzdCBhdXhfc291cmNlX2RpcmVjdG9yeSBidWlsZF9jb21tYW5kIGNyZWF0ZV90ZXN0X3NvdXJjZWxpc3QgJ1xuICAgICAgICArICdkZWZpbmVfcHJvcGVydHkgZW5hYmxlX2xhbmd1YWdlIGVuYWJsZV90ZXN0aW5nIGV4cG9ydCBmbHRrX3dyYXBfdWkgJ1xuICAgICAgICArICdnZXRfc291cmNlX2ZpbGVfcHJvcGVydHkgZ2V0X3RhcmdldF9wcm9wZXJ0eSBnZXRfdGVzdF9wcm9wZXJ0eSBpbmNsdWRlX2RpcmVjdG9yaWVzICdcbiAgICAgICAgKyAnaW5jbHVkZV9leHRlcm5hbF9tc3Byb2plY3QgaW5jbHVkZV9yZWd1bGFyX2V4cHJlc3Npb24gaW5zdGFsbCBsaW5rX2RpcmVjdG9yaWVzICdcbiAgICAgICAgKyAnbGlua19saWJyYXJpZXMgbG9hZF9jYWNoZSBwcm9qZWN0IHF0X3dyYXBfY3BwIHF0X3dyYXBfdWkgcmVtb3ZlX2RlZmluaXRpb25zICdcbiAgICAgICAgKyAnc2V0X3NvdXJjZV9maWxlc19wcm9wZXJ0aWVzIHNldF90YXJnZXRfcHJvcGVydGllcyBzZXRfdGVzdHNfcHJvcGVydGllcyBzb3VyY2VfZ3JvdXAgJ1xuICAgICAgICArICd0YXJnZXRfY29tcGlsZV9kZWZpbml0aW9ucyB0YXJnZXRfY29tcGlsZV9mZWF0dXJlcyB0YXJnZXRfY29tcGlsZV9vcHRpb25zICdcbiAgICAgICAgKyAndGFyZ2V0X2luY2x1ZGVfZGlyZWN0b3JpZXMgdGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMgdGFyZ2V0X2xpbmtfbGlicmFyaWVzICdcbiAgICAgICAgKyAndGFyZ2V0X2xpbmtfb3B0aW9ucyB0YXJnZXRfc291cmNlcyB0cnlfY29tcGlsZSB0cnlfcnVuICdcbiAgICAgICAgLy8gQ1Rlc3QgY29tbWFuZHNcbiAgICAgICAgKyAnY3Rlc3RfYnVpbGQgY3Rlc3RfY29uZmlndXJlIGN0ZXN0X2NvdmVyYWdlIGN0ZXN0X2VtcHR5X2JpbmFyeV9kaXJlY3RvcnkgY3Rlc3RfbWVtY2hlY2sgJ1xuICAgICAgICArICdjdGVzdF9yZWFkX2N1c3RvbV9maWxlcyBjdGVzdF9ydW5fc2NyaXB0IGN0ZXN0X3NsZWVwIGN0ZXN0X3N0YXJ0IGN0ZXN0X3N1Ym1pdCAnXG4gICAgICAgICsgJ2N0ZXN0X3Rlc3QgY3Rlc3RfdXBkYXRlIGN0ZXN0X3VwbG9hZCAnXG4gICAgICAgIC8vIGRlcHJlY2F0ZWQgY29tbWFuZHNcbiAgICAgICAgKyAnYnVpbGRfbmFtZSBleGVjX3Byb2dyYW0gZXhwb3J0X2xpYnJhcnlfZGVwZW5kZW5jaWVzIGluc3RhbGxfZmlsZXMgaW5zdGFsbF9wcm9ncmFtcyAnXG4gICAgICAgICsgJ2luc3RhbGxfdGFyZ2V0cyBsb2FkX2NvbW1hbmQgbWFrZV9kaXJlY3Rvcnkgb3V0cHV0X3JlcXVpcmVkX2ZpbGVzIHJlbW92ZSAnXG4gICAgICAgICsgJ3N1YmRpcl9kZXBlbmRzIHN1YmRpcnMgdXNlX21hbmdsZWRfbWVzYSB1dGlsaXR5X3NvdXJjZSB2YXJpYWJsZV9yZXF1aXJlcyB3cml0ZV9maWxlICdcbiAgICAgICAgKyAncXQ1X3VzZV9tb2R1bGVzIHF0NV91c2VfcGFja2FnZSBxdDVfd3JhcF9jcHAgJ1xuICAgICAgICAvLyBjb3JlIGtleXdvcmRzXG4gICAgICAgICsgJ29uIG9mZiB0cnVlIGZhbHNlIGFuZCBvciBub3QgY29tbWFuZCBwb2xpY3kgdGFyZ2V0IHRlc3QgZXhpc3RzIGlzX25ld2VyX3RoYW4gJ1xuICAgICAgICArICdpc19kaXJlY3RvcnkgaXNfc3ltbGluayBpc19hYnNvbHV0ZSBtYXRjaGVzIGxlc3MgZ3JlYXRlciBlcXVhbCBsZXNzX2VxdWFsICdcbiAgICAgICAgKyAnZ3JlYXRlcl9lcXVhbCBzdHJsZXNzIHN0cmdyZWF0ZXIgc3RyZXF1YWwgc3RybGVzc19lcXVhbCBzdHJncmVhdGVyX2VxdWFsIHZlcnNpb25fbGVzcyAnXG4gICAgICAgICsgJ3ZlcnNpb25fZ3JlYXRlciB2ZXJzaW9uX2VxdWFsIHZlcnNpb25fbGVzc19lcXVhbCB2ZXJzaW9uX2dyZWF0ZXJfZXF1YWwgaW5fbGlzdCBkZWZpbmVkJyB9LFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3ZhcmlhYmxlJyxcbiAgICAgICAgYmVnaW46IC9cXCRcXHsvLFxuICAgICAgICBlbmQ6IC9cXH0vXG4gICAgICB9LFxuICAgICAgaGxqcy5DT01NRU5UKC8jXFxbXFxbLywgL11dLyksXG4gICAgICBobGpzLkhBU0hfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgIGhsanMuTlVNQkVSX01PREVcbiAgICBdXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY21ha2U7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2118\n")},2124:module=>{eval("/*\nLanguage: ARM Assembly\nAuthor: Dan Panzarella \nDescription: ARM Assembly including Thumb and Thumb2 instructions\nCategory: assembler\n*/\n\n/** @type LanguageFn */\nfunction armasm(hljs) {\n // local labels: %?[FB]?[AT]?\\d{1,2}\\w+\n\n const COMMENT = { variants: [\n hljs.COMMENT('^[ \\\\t]*(?=#)', '$', {\n relevance: 0,\n excludeBegin: true\n }),\n hljs.COMMENT('[;@]', '$', { relevance: 0 }),\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE\n ] };\n\n return {\n name: 'ARM Assembly',\n case_insensitive: true,\n aliases: [ 'arm' ],\n keywords: {\n $pattern: '\\\\.?' + hljs.IDENT_RE,\n meta:\n // GNU preprocs\n '.2byte .4byte .align .ascii .asciz .balign .byte .code .data .else .end .endif .endm .endr .equ .err .exitm .extern .global .hword .if .ifdef .ifndef .include .irp .long .macro .rept .req .section .set .skip .space .text .word .arm .thumb .code16 .code32 .force_thumb .thumb_func .ltorg '\n // ARM directives\n + 'ALIAS ALIGN ARM AREA ASSERT ATTR CN CODE CODE16 CODE32 COMMON CP DATA DCB DCD DCDU DCDO DCFD DCFDU DCI DCQ DCQU DCW DCWU DN ELIF ELSE END ENDFUNC ENDIF ENDP ENTRY EQU EXPORT EXPORTAS EXTERN FIELD FILL FUNCTION GBLA GBLL GBLS GET GLOBAL IF IMPORT INCBIN INCLUDE INFO KEEP LCLA LCLL LCLS LTORG MACRO MAP MEND MEXIT NOFP OPT PRESERVE8 PROC QN READONLY RELOC REQUIRE REQUIRE8 RLIST FN ROUT SETA SETL SETS SN SPACE SUBT THUMB THUMBX TTL WHILE WEND ',\n built_in:\n 'r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15 ' // standard registers\n + 'w0 w1 w2 w3 w4 w5 w6 w7 w8 w9 w10 w11 w12 w13 w14 w15 ' // 32 bit ARMv8 registers\n + 'w16 w17 w18 w19 w20 w21 w22 w23 w24 w25 w26 w27 w28 w29 w30 '\n + 'x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 ' // 64 bit ARMv8 registers\n + 'x16 x17 x18 x19 x20 x21 x22 x23 x24 x25 x26 x27 x28 x29 x30 '\n + 'pc lr sp ip sl sb fp ' // typical regs plus backward compatibility\n + 'a1 a2 a3 a4 v1 v2 v3 v4 v5 v6 v7 v8 f0 f1 f2 f3 f4 f5 f6 f7 ' // more regs and fp\n + 'p0 p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 p11 p12 p13 p14 p15 ' // coprocessor regs\n + 'c0 c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 ' // more coproc\n + 'q0 q1 q2 q3 q4 q5 q6 q7 q8 q9 q10 q11 q12 q13 q14 q15 ' // advanced SIMD NEON regs\n\n // program status registers\n + 'cpsr_c cpsr_x cpsr_s cpsr_f cpsr_cx cpsr_cxs cpsr_xs cpsr_xsf cpsr_sf cpsr_cxsf '\n + 'spsr_c spsr_x spsr_s spsr_f spsr_cx spsr_cxs spsr_xs spsr_xsf spsr_sf spsr_cxsf '\n\n // NEON and VFP registers\n + 's0 s1 s2 s3 s4 s5 s6 s7 s8 s9 s10 s11 s12 s13 s14 s15 '\n + 's16 s17 s18 s19 s20 s21 s22 s23 s24 s25 s26 s27 s28 s29 s30 s31 '\n + 'd0 d1 d2 d3 d4 d5 d6 d7 d8 d9 d10 d11 d12 d13 d14 d15 '\n + 'd16 d17 d18 d19 d20 d21 d22 d23 d24 d25 d26 d27 d28 d29 d30 d31 '\n\n + '{PC} {VAR} {TRUE} {FALSE} {OPT} {CONFIG} {ENDIAN} {CODESIZE} {CPU} {FPU} {ARCHITECTURE} {PCSTOREOFFSET} {ARMASM_VERSION} {INTER} {ROPI} {RWPI} {SWST} {NOSWST} . @'\n },\n contains: [\n {\n className: 'keyword',\n begin: '\\\\b(' // mnemonics\n + 'adc|'\n + '(qd?|sh?|u[qh]?)?add(8|16)?|usada?8|(q|sh?|u[qh]?)?(as|sa)x|'\n + 'and|adrl?|sbc|rs[bc]|asr|b[lx]?|blx|bxj|cbn?z|tb[bh]|bic|'\n + 'bfc|bfi|[su]bfx|bkpt|cdp2?|clz|clrex|cmp|cmn|cpsi[ed]|cps|'\n + 'setend|dbg|dmb|dsb|eor|isb|it[te]{0,3}|lsl|lsr|ror|rrx|'\n + 'ldm(([id][ab])|f[ds])?|ldr((s|ex)?[bhd])?|movt?|mvn|mra|mar|'\n + 'mul|[us]mull|smul[bwt][bt]|smu[as]d|smmul|smmla|'\n + 'mla|umlaal|smlal?([wbt][bt]|d)|mls|smlsl?[ds]|smc|svc|sev|'\n + 'mia([bt]{2}|ph)?|mrr?c2?|mcrr2?|mrs|msr|orr|orn|pkh(tb|bt)|rbit|'\n + 'rev(16|sh)?|sel|[su]sat(16)?|nop|pop|push|rfe([id][ab])?|'\n + 'stm([id][ab])?|str(ex)?[bhd]?|(qd?)?sub|(sh?|q|u[qh]?)?sub(8|16)|'\n + '[su]xt(a?h|a?b(16)?)|srs([id][ab])?|swpb?|swi|smi|tst|teq|'\n + 'wfe|wfi|yield'\n + ')'\n + '(eq|ne|cs|cc|mi|pl|vs|vc|hi|ls|ge|lt|gt|le|al|hs|lo)?' // condition codes\n + '[sptrx]?' // legal postfixes\n + '(?=\\\\s)' // followed by space\n },\n COMMENT,\n hljs.QUOTE_STRING_MODE,\n {\n className: 'string',\n begin: '\\'',\n end: '[^\\\\\\\\]\\'',\n relevance: 0\n },\n {\n className: 'title',\n begin: '\\\\|',\n end: '\\\\|',\n illegal: '\\\\n',\n relevance: 0\n },\n {\n className: 'number',\n variants: [\n { // hex\n begin: '[#$=]?0x[0-9a-f]+' },\n { // bin\n begin: '[#$=]?0b[01]+' },\n { // literal\n begin: '[#$=]\\\\d+' },\n { // bare number\n begin: '\\\\b\\\\d+' }\n ],\n relevance: 0\n },\n {\n className: 'symbol',\n variants: [\n { // GNU ARM syntax\n begin: '^[ \\\\t]*[a-z_\\\\.\\\\$][a-z0-9_\\\\.\\\\$]+:' },\n { // ARM syntax\n begin: '^[a-z_\\\\.\\\\$][a-z0-9_\\\\.\\\\$]+' },\n { // label reference\n begin: '[=#]\\\\w+' }\n ],\n relevance: 0\n }\n ]\n };\n}\n\nmodule.exports = armasm;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjEyNC5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGtDQUFrQyxJQUFJOztBQUV0QyxvQkFBb0I7QUFDcEI7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLG9CQUFvQixZQUFZLGNBQWM7QUFDOUM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFlBQVksS0FBSyxNQUFNLE9BQU8sUUFBUSxNQUFNLFNBQVMsU0FBUyxXQUFXLE1BQU0sTUFBTSxlQUFlLGdCQUFnQixpQkFBaUIsUUFBUSxPQUFPLE9BQU8sT0FBTyxRQUFRO0FBQzFLLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaURBQWlELElBQUk7QUFDckQ7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaLHdDQUF3QztBQUN4QyxZQUFZO0FBQ1osb0NBQW9DO0FBQ3BDLFlBQVk7QUFDWixnQ0FBZ0M7QUFDaEMsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1osNERBQTREO0FBQzVELFlBQVk7QUFDWixvREFBb0Q7QUFDcEQsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vb2JzaWRpYW4tbWluZG1hcC1uZXh0Z2VuLy4vbm9kZV9tb2R1bGVzLy5wbnBtL2hpZ2hsaWdodC5qc0AxMS4xMS4xL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9hcm1hc20uanM/Zjk2ZiJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuTGFuZ3VhZ2U6IEFSTSBBc3NlbWJseVxuQXV0aG9yOiBEYW4gUGFuemFyZWxsYSA8YWxzb2VscEBnbWFpbC5jb20+XG5EZXNjcmlwdGlvbjogQVJNIEFzc2VtYmx5IGluY2x1ZGluZyBUaHVtYiBhbmQgVGh1bWIyIGluc3RydWN0aW9uc1xuQ2F0ZWdvcnk6IGFzc2VtYmxlclxuKi9cblxuLyoqIEB0eXBlIExhbmd1YWdlRm4gKi9cbmZ1bmN0aW9uIGFybWFzbShobGpzKSB7XG4gIC8vIGxvY2FsIGxhYmVsczogJT9bRkJdP1tBVF0/XFxkezEsMn1cXHcrXG5cbiAgY29uc3QgQ09NTUVOVCA9IHsgdmFyaWFudHM6IFtcbiAgICBobGpzLkNPTU1FTlQoJ15bIFxcXFx0XSooPz0jKScsICckJywge1xuICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgZXhjbHVkZUJlZ2luOiB0cnVlXG4gICAgfSksXG4gICAgaGxqcy5DT01NRU5UKCdbO0BdJywgJyQnLCB7IHJlbGV2YW5jZTogMCB9KSxcbiAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERVxuICBdIH07XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnQVJNIEFzc2VtYmx5JyxcbiAgICBjYXNlX2luc2Vuc2l0aXZlOiB0cnVlLFxuICAgIGFsaWFzZXM6IFsgJ2FybScgXSxcbiAgICBrZXl3b3Jkczoge1xuICAgICAgJHBhdHRlcm46ICdcXFxcLj8nICsgaGxqcy5JREVOVF9SRSxcbiAgICAgIG1ldGE6XG4gICAgICAgIC8vIEdOVSBwcmVwcm9jc1xuICAgICAgICAnLjJieXRlIC40Ynl0ZSAuYWxpZ24gLmFzY2lpIC5hc2NpeiAuYmFsaWduIC5ieXRlIC5jb2RlIC5kYXRhIC5lbHNlIC5lbmQgLmVuZGlmIC5lbmRtIC5lbmRyIC5lcXUgLmVyciAuZXhpdG0gLmV4dGVybiAuZ2xvYmFsIC5od29yZCAuaWYgLmlmZGVmIC5pZm5kZWYgLmluY2x1ZGUgLmlycCAubG9uZyAubWFjcm8gLnJlcHQgLnJlcSAuc2VjdGlvbiAuc2V0IC5za2lwIC5zcGFjZSAudGV4dCAud29yZCAuYXJtIC50aHVtYiAuY29kZTE2IC5jb2RlMzIgLmZvcmNlX3RodW1iIC50aHVtYl9mdW5jIC5sdG9yZyAnXG4gICAgICAgIC8vIEFSTSBkaXJlY3RpdmVzXG4gICAgICAgICsgJ0FMSUFTIEFMSUdOIEFSTSBBUkVBIEFTU0VSVCBBVFRSIENOIENPREUgQ09ERTE2IENPREUzMiBDT01NT04gQ1AgREFUQSBEQ0IgRENEIERDRFUgRENETyBEQ0ZEIERDRkRVIERDSSBEQ1EgRENRVSBEQ1cgRENXVSBETiBFTElGIEVMU0UgRU5EIEVOREZVTkMgRU5ESUYgRU5EUCBFTlRSWSBFUVUgRVhQT1JUIEVYUE9SVEFTIEVYVEVSTiBGSUVMRCBGSUxMIEZVTkNUSU9OIEdCTEEgR0JMTCBHQkxTIEdFVCBHTE9CQUwgSUYgSU1QT1JUIElOQ0JJTiBJTkNMVURFIElORk8gS0VFUCBMQ0xBIExDTEwgTENMUyBMVE9SRyBNQUNSTyBNQVAgTUVORCBNRVhJVCBOT0ZQIE9QVCBQUkVTRVJWRTggUFJPQyBRTiBSRUFET05MWSBSRUxPQyBSRVFVSVJFIFJFUVVJUkU4IFJMSVNUIEZOIFJPVVQgU0VUQSBTRVRMIFNFVFMgU04gU1BBQ0UgU1VCVCBUSFVNQiBUSFVNQlggVFRMIFdISUxFIFdFTkQgJyxcbiAgICAgIGJ1aWx0X2luOlxuICAgICAgICAncjAgcjEgcjIgcjMgcjQgcjUgcjYgcjcgcjggcjkgcjEwIHIxMSByMTIgcjEzIHIxNCByMTUgJyAvLyBzdGFuZGFyZCByZWdpc3RlcnNcbiAgICAgICAgKyAndzAgdzEgdzIgdzMgdzQgdzUgdzYgdzcgdzggdzkgdzEwIHcxMSB3MTIgdzEzIHcxNCB3MTUgJyAvLyAzMiBiaXQgQVJNdjggcmVnaXN0ZXJzXG4gICAgICAgICsgJ3cxNiB3MTcgdzE4IHcxOSB3MjAgdzIxIHcyMiB3MjMgdzI0IHcyNSB3MjYgdzI3IHcyOCB3MjkgdzMwICdcbiAgICAgICAgKyAneDAgeDEgeDIgeDMgeDQgeDUgeDYgeDcgeDggeDkgeDEwIHgxMSB4MTIgeDEzIHgxNCB4MTUgJyAvLyA2NCBiaXQgQVJNdjggcmVnaXN0ZXJzXG4gICAgICAgICsgJ3gxNiB4MTcgeDE4IHgxOSB4MjAgeDIxIHgyMiB4MjMgeDI0IHgyNSB4MjYgeDI3IHgyOCB4MjkgeDMwICdcbiAgICAgICAgKyAncGMgbHIgc3AgaXAgc2wgc2IgZnAgJyAvLyB0eXBpY2FsIHJlZ3MgcGx1cyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5XG4gICAgICAgICsgJ2ExIGEyIGEzIGE0IHYxIHYyIHYzIHY0IHY1IHY2IHY3IHY4IGYwIGYxIGYyIGYzIGY0IGY1IGY2IGY3ICcgLy8gbW9yZSByZWdzIGFuZCBmcFxuICAgICAgICArICdwMCBwMSBwMiBwMyBwNCBwNSBwNiBwNyBwOCBwOSBwMTAgcDExIHAxMiBwMTMgcDE0IHAxNSAnIC8vIGNvcHJvY2Vzc29yIHJlZ3NcbiAgICAgICAgKyAnYzAgYzEgYzIgYzMgYzQgYzUgYzYgYzcgYzggYzkgYzEwIGMxMSBjMTIgYzEzIGMxNCBjMTUgJyAvLyBtb3JlIGNvcHJvY1xuICAgICAgICArICdxMCBxMSBxMiBxMyBxNCBxNSBxNiBxNyBxOCBxOSBxMTAgcTExIHExMiBxMTMgcTE0IHExNSAnIC8vIGFkdmFuY2VkIFNJTUQgTkVPTiByZWdzXG5cbiAgICAgICAgLy8gcHJvZ3JhbSBzdGF0dXMgcmVnaXN0ZXJzXG4gICAgICAgICsgJ2Nwc3JfYyBjcHNyX3ggY3Bzcl9zIGNwc3JfZiBjcHNyX2N4IGNwc3JfY3hzIGNwc3JfeHMgY3Bzcl94c2YgY3Bzcl9zZiBjcHNyX2N4c2YgJ1xuICAgICAgICArICdzcHNyX2Mgc3Bzcl94IHNwc3JfcyBzcHNyX2Ygc3Bzcl9jeCBzcHNyX2N4cyBzcHNyX3hzIHNwc3JfeHNmIHNwc3Jfc2Ygc3Bzcl9jeHNmICdcblxuICAgICAgICAvLyBORU9OIGFuZCBWRlAgcmVnaXN0ZXJzXG4gICAgICAgICsgJ3MwIHMxIHMyIHMzIHM0IHM1IHM2IHM3IHM4IHM5IHMxMCBzMTEgczEyIHMxMyBzMTQgczE1ICdcbiAgICAgICAgKyAnczE2IHMxNyBzMTggczE5IHMyMCBzMjEgczIyIHMyMyBzMjQgczI1IHMyNiBzMjcgczI4IHMyOSBzMzAgczMxICdcbiAgICAgICAgKyAnZDAgZDEgZDIgZDMgZDQgZDUgZDYgZDcgZDggZDkgZDEwIGQxMSBkMTIgZDEzIGQxNCBkMTUgJ1xuICAgICAgICArICdkMTYgZDE3IGQxOCBkMTkgZDIwIGQyMSBkMjIgZDIzIGQyNCBkMjUgZDI2IGQyNyBkMjggZDI5IGQzMCBkMzEgJ1xuXG4gICAgICAgICsgJ3tQQ30ge1ZBUn0ge1RSVUV9IHtGQUxTRX0ge09QVH0ge0NPTkZJR30ge0VORElBTn0ge0NPREVTSVpFfSB7Q1BVfSB7RlBVfSB7QVJDSElURUNUVVJFfSB7UENTVE9SRU9GRlNFVH0ge0FSTUFTTV9WRVJTSU9OfSB7SU5URVJ9IHtST1BJfSB7UldQSX0ge1NXU1R9IHtOT1NXU1R9IC4gQCdcbiAgICB9LFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2tleXdvcmQnLFxuICAgICAgICBiZWdpbjogJ1xcXFxiKCcgLy8gbW5lbW9uaWNzXG4gICAgICAgICAgICArICdhZGN8J1xuICAgICAgICAgICAgKyAnKHFkP3xzaD98dVtxaF0/KT9hZGQoOHwxNik/fHVzYWRhPzh8KHF8c2g/fHVbcWhdPyk/KGFzfHNhKXh8J1xuICAgICAgICAgICAgKyAnYW5kfGFkcmw/fHNiY3xyc1tiY118YXNyfGJbbHhdP3xibHh8YnhqfGNibj96fHRiW2JoXXxiaWN8J1xuICAgICAgICAgICAgKyAnYmZjfGJmaXxbc3VdYmZ4fGJrcHR8Y2RwMj98Y2x6fGNscmV4fGNtcHxjbW58Y3BzaVtlZF18Y3BzfCdcbiAgICAgICAgICAgICsgJ3NldGVuZHxkYmd8ZG1ifGRzYnxlb3J8aXNifGl0W3RlXXswLDN9fGxzbHxsc3J8cm9yfHJyeHwnXG4gICAgICAgICAgICArICdsZG0oKFtpZF1bYWJdKXxmW2RzXSk/fGxkcigoc3xleCk/W2JoZF0pP3xtb3Z0P3xtdm58bXJhfG1hcnwnXG4gICAgICAgICAgICArICdtdWx8W3VzXW11bGx8c211bFtid3RdW2J0XXxzbXVbYXNdZHxzbW11bHxzbW1sYXwnXG4gICAgICAgICAgICArICdtbGF8dW1sYWFsfHNtbGFsPyhbd2J0XVtidF18ZCl8bWxzfHNtbHNsP1tkc118c21jfHN2Y3xzZXZ8J1xuICAgICAgICAgICAgKyAnbWlhKFtidF17Mn18cGgpP3xtcnI/YzI/fG1jcnIyP3xtcnN8bXNyfG9ycnxvcm58cGtoKHRifGJ0KXxyYml0fCdcbiAgICAgICAgICAgICsgJ3JldigxNnxzaCk/fHNlbHxbc3Vdc2F0KDE2KT98bm9wfHBvcHxwdXNofHJmZShbaWRdW2FiXSk/fCdcbiAgICAgICAgICAgICsgJ3N0bShbaWRdW2FiXSk/fHN0cihleCk/W2JoZF0/fChxZD8pP3N1Ynwoc2g/fHF8dVtxaF0/KT9zdWIoOHwxNil8J1xuICAgICAgICAgICAgKyAnW3N1XXh0KGE/aHxhP2IoMTYpPyl8c3JzKFtpZF1bYWJdKT98c3dwYj98c3dpfHNtaXx0c3R8dGVxfCdcbiAgICAgICAgICAgICsgJ3dmZXx3Zml8eWllbGQnXG4gICAgICAgICsgJyknXG4gICAgICAgICsgJyhlcXxuZXxjc3xjY3xtaXxwbHx2c3x2Y3xoaXxsc3xnZXxsdHxndHxsZXxhbHxoc3xsbyk/JyAvLyBjb25kaXRpb24gY29kZXNcbiAgICAgICAgKyAnW3NwdHJ4XT8nIC8vIGxlZ2FsIHBvc3RmaXhlc1xuICAgICAgICArICcoPz1cXFxccyknIC8vIGZvbGxvd2VkIGJ5IHNwYWNlXG4gICAgICB9LFxuICAgICAgQ09NTUVOVCxcbiAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgIGJlZ2luOiAnXFwnJyxcbiAgICAgICAgZW5kOiAnW15cXFxcXFxcXF1cXCcnLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3RpdGxlJyxcbiAgICAgICAgYmVnaW46ICdcXFxcfCcsXG4gICAgICAgIGVuZDogJ1xcXFx8JyxcbiAgICAgICAgaWxsZWdhbDogJ1xcXFxuJyxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgIHsgLy8gaGV4XG4gICAgICAgICAgICBiZWdpbjogJ1sjJD1dPzB4WzAtOWEtZl0rJyB9LFxuICAgICAgICAgIHsgLy8gYmluXG4gICAgICAgICAgICBiZWdpbjogJ1sjJD1dPzBiWzAxXSsnIH0sXG4gICAgICAgICAgeyAvLyBsaXRlcmFsXG4gICAgICAgICAgICBiZWdpbjogJ1sjJD1dXFxcXGQrJyB9LFxuICAgICAgICAgIHsgLy8gYmFyZSBudW1iZXJcbiAgICAgICAgICAgIGJlZ2luOiAnXFxcXGJcXFxcZCsnIH1cbiAgICAgICAgXSxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzeW1ib2wnLFxuICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgIHsgLy8gR05VIEFSTSBzeW50YXhcbiAgICAgICAgICAgIGJlZ2luOiAnXlsgXFxcXHRdKlthLXpfXFxcXC5cXFxcJF1bYS16MC05X1xcXFwuXFxcXCRdKzonIH0sXG4gICAgICAgICAgeyAvLyBBUk0gc3ludGF4XG4gICAgICAgICAgICBiZWdpbjogJ15bYS16X1xcXFwuXFxcXCRdW2EtejAtOV9cXFxcLlxcXFwkXSsnIH0sXG4gICAgICAgICAgeyAvLyBsYWJlbCByZWZlcmVuY2VcbiAgICAgICAgICAgIGJlZ2luOiAnWz0jXVxcXFx3KycgfVxuICAgICAgICBdLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH1cbiAgICBdXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXJtYXNtO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2124\n")},2139:module=>{eval('/*\n Language: Groovy\n Author: Guillaume Laforge \n Description: Groovy programming language implementation inspired from Vsevolod\'s Java mode\n Website: https://groovy-lang.org\n Category: system\n */\n\nfunction variants(variants, obj = {}) {\n obj.variants = variants;\n return obj;\n}\n\nfunction groovy(hljs) {\n const regex = hljs.regex;\n const IDENT_RE = \'[A-Za-z0-9_$]+\';\n const COMMENT = variants([\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE,\n hljs.COMMENT(\n \'/\\\\*\\\\*\',\n \'\\\\*/\',\n {\n relevance: 0,\n contains: [\n {\n // eat up @\'s in emails to prevent them to be recognized as doctags\n begin: /\\w+@/,\n relevance: 0\n },\n {\n className: \'doctag\',\n begin: \'@[A-Za-z]+\'\n }\n ]\n }\n )\n ]);\n const REGEXP = {\n className: \'regexp\',\n begin: /~?\\/[^\\/\\n]+\\//,\n contains: [ hljs.BACKSLASH_ESCAPE ]\n };\n const NUMBER = variants([\n hljs.BINARY_NUMBER_MODE,\n hljs.C_NUMBER_MODE\n ]);\n const STRING = variants([\n {\n begin: /"""/,\n end: /"""/\n },\n {\n begin: /\'\'\'/,\n end: /\'\'\'/\n },\n {\n begin: "\\\\$/",\n end: "/\\\\$",\n relevance: 10\n },\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE\n ],\n { className: "string" }\n );\n\n const CLASS_DEFINITION = {\n match: [\n /(class|interface|trait|enum|record|extends|implements)/,\n /\\s+/,\n hljs.UNDERSCORE_IDENT_RE\n ],\n scope: {\n 1: "keyword",\n 3: "title.class",\n }\n };\n const TYPES = [\n "byte",\n "short",\n "char",\n "int",\n "long",\n "boolean",\n "float",\n "double",\n "void"\n ];\n const KEYWORDS = [\n // groovy specific keywords\n "def",\n "as",\n "in",\n "assert",\n "trait",\n // common keywords with Java\n "abstract",\n "static",\n "volatile",\n "transient",\n "public",\n "private",\n "protected",\n "synchronized",\n "final",\n "class",\n "interface",\n "enum",\n "if",\n "else",\n "for",\n "while",\n "switch",\n "case",\n "break",\n "default",\n "continue",\n "throw",\n "throws",\n "try",\n "catch",\n "finally",\n "implements",\n "extends",\n "new",\n "import",\n "package",\n "return",\n "instanceof",\n "var"\n ];\n\n return {\n name: \'Groovy\',\n keywords: {\n "variable.language": \'this super\',\n literal: \'true false null\',\n type: TYPES,\n keyword: KEYWORDS\n },\n contains: [\n hljs.SHEBANG({\n binary: "groovy",\n relevance: 10\n }),\n COMMENT,\n STRING,\n REGEXP,\n NUMBER,\n CLASS_DEFINITION,\n {\n className: \'meta\',\n begin: \'@[A-Za-z]+\',\n relevance: 0\n },\n {\n // highlight map keys and named parameters as attrs\n className: \'attr\',\n begin: IDENT_RE + \'[ \\t]*:\',\n relevance: 0\n },\n {\n // catch middle element of the ternary operator\n // to avoid highlight it as a label, named parameter, or map key\n begin: /\\?/,\n end: /:/,\n relevance: 0,\n contains: [\n COMMENT,\n STRING,\n REGEXP,\n NUMBER,\n \'self\'\n ]\n },\n {\n // highlight labeled statements\n className: \'symbol\',\n begin: \'^[ \\t]*\' + regex.lookahead(IDENT_RE + \':\'),\n excludeBegin: true,\n end: IDENT_RE + \':\',\n relevance: 0\n }\n ],\n illegal: /#|<\\//\n };\n}\n\nmodule.exports = groovy;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjEzOS5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxvQ0FBb0M7QUFDcEM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vb2JzaWRpYW4tbWluZG1hcC1uZXh0Z2VuLy4vbm9kZV9tb2R1bGVzLy5wbnBtL2hpZ2hsaWdodC5qc0AxMS4xMS4xL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9ncm9vdnkuanM/ZTBlMyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuIExhbmd1YWdlOiBHcm9vdnlcbiBBdXRob3I6IEd1aWxsYXVtZSBMYWZvcmdlIDxnbGFmb3JnZUBnbWFpbC5jb20+XG4gRGVzY3JpcHRpb246IEdyb292eSBwcm9ncmFtbWluZyBsYW5ndWFnZSBpbXBsZW1lbnRhdGlvbiBpbnNwaXJlZCBmcm9tIFZzZXZvbG9kJ3MgSmF2YSBtb2RlXG4gV2Vic2l0ZTogaHR0cHM6Ly9ncm9vdnktbGFuZy5vcmdcbiBDYXRlZ29yeTogc3lzdGVtXG4gKi9cblxuZnVuY3Rpb24gdmFyaWFudHModmFyaWFudHMsIG9iaiA9IHt9KSB7XG4gIG9iai52YXJpYW50cyA9IHZhcmlhbnRzO1xuICByZXR1cm4gb2JqO1xufVxuXG5mdW5jdGlvbiBncm9vdnkoaGxqcykge1xuICBjb25zdCByZWdleCA9IGhsanMucmVnZXg7XG4gIGNvbnN0IElERU5UX1JFID0gJ1tBLVphLXowLTlfJF0rJztcbiAgY29uc3QgQ09NTUVOVCA9IHZhcmlhbnRzKFtcbiAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICBobGpzLkNPTU1FTlQoXG4gICAgICAnL1xcXFwqXFxcXConLFxuICAgICAgJ1xcXFwqLycsXG4gICAgICB7XG4gICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICAvLyBlYXQgdXAgQCdzIGluIGVtYWlscyB0byBwcmV2ZW50IHRoZW0gdG8gYmUgcmVjb2duaXplZCBhcyBkb2N0YWdzXG4gICAgICAgICAgICBiZWdpbjogL1xcdytALyxcbiAgICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAnZG9jdGFnJyxcbiAgICAgICAgICAgIGJlZ2luOiAnQFtBLVphLXpdKydcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH1cbiAgICApXG4gIF0pO1xuICBjb25zdCBSRUdFWFAgPSB7XG4gICAgY2xhc3NOYW1lOiAncmVnZXhwJyxcbiAgICBiZWdpbjogL34/XFwvW15cXC9cXG5dK1xcLy8sXG4gICAgY29udGFpbnM6IFsgaGxqcy5CQUNLU0xBU0hfRVNDQVBFIF1cbiAgfTtcbiAgY29uc3QgTlVNQkVSID0gdmFyaWFudHMoW1xuICAgIGhsanMuQklOQVJZX05VTUJFUl9NT0RFLFxuICAgIGhsanMuQ19OVU1CRVJfTU9ERVxuICBdKTtcbiAgY29uc3QgU1RSSU5HID0gdmFyaWFudHMoW1xuICAgIHtcbiAgICAgIGJlZ2luOiAvXCJcIlwiLyxcbiAgICAgIGVuZDogL1wiXCJcIi9cbiAgICB9LFxuICAgIHtcbiAgICAgIGJlZ2luOiAvJycnLyxcbiAgICAgIGVuZDogLycnJy9cbiAgICB9LFxuICAgIHtcbiAgICAgIGJlZ2luOiBcIlxcXFwkL1wiLFxuICAgICAgZW5kOiBcIi9cXFxcJFwiLFxuICAgICAgcmVsZXZhbmNlOiAxMFxuICAgIH0sXG4gICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREVcbiAgXSxcbiAgeyBjbGFzc05hbWU6IFwic3RyaW5nXCIgfVxuICApO1xuXG4gIGNvbnN0IENMQVNTX0RFRklOSVRJT04gPSB7XG4gICAgbWF0Y2g6IFtcbiAgICAgIC8oY2xhc3N8aW50ZXJmYWNlfHRyYWl0fGVudW18cmVjb3JkfGV4dGVuZHN8aW1wbGVtZW50cykvLFxuICAgICAgL1xccysvLFxuICAgICAgaGxqcy5VTkRFUlNDT1JFX0lERU5UX1JFXG4gICAgXSxcbiAgICBzY29wZToge1xuICAgICAgMTogXCJrZXl3b3JkXCIsXG4gICAgICAzOiBcInRpdGxlLmNsYXNzXCIsXG4gICAgfVxuICB9O1xuICBjb25zdCBUWVBFUyA9IFtcbiAgICBcImJ5dGVcIixcbiAgICBcInNob3J0XCIsXG4gICAgXCJjaGFyXCIsXG4gICAgXCJpbnRcIixcbiAgICBcImxvbmdcIixcbiAgICBcImJvb2xlYW5cIixcbiAgICBcImZsb2F0XCIsXG4gICAgXCJkb3VibGVcIixcbiAgICBcInZvaWRcIlxuICBdO1xuICBjb25zdCBLRVlXT1JEUyA9IFtcbiAgICAvLyBncm9vdnkgc3BlY2lmaWMga2V5d29yZHNcbiAgICBcImRlZlwiLFxuICAgIFwiYXNcIixcbiAgICBcImluXCIsXG4gICAgXCJhc3NlcnRcIixcbiAgICBcInRyYWl0XCIsXG4gICAgLy8gY29tbW9uIGtleXdvcmRzIHdpdGggSmF2YVxuICAgIFwiYWJzdHJhY3RcIixcbiAgICBcInN0YXRpY1wiLFxuICAgIFwidm9sYXRpbGVcIixcbiAgICBcInRyYW5zaWVudFwiLFxuICAgIFwicHVibGljXCIsXG4gICAgXCJwcml2YXRlXCIsXG4gICAgXCJwcm90ZWN0ZWRcIixcbiAgICBcInN5bmNocm9uaXplZFwiLFxuICAgIFwiZmluYWxcIixcbiAgICBcImNsYXNzXCIsXG4gICAgXCJpbnRlcmZhY2VcIixcbiAgICBcImVudW1cIixcbiAgICBcImlmXCIsXG4gICAgXCJlbHNlXCIsXG4gICAgXCJmb3JcIixcbiAgICBcIndoaWxlXCIsXG4gICAgXCJzd2l0Y2hcIixcbiAgICBcImNhc2VcIixcbiAgICBcImJyZWFrXCIsXG4gICAgXCJkZWZhdWx0XCIsXG4gICAgXCJjb250aW51ZVwiLFxuICAgIFwidGhyb3dcIixcbiAgICBcInRocm93c1wiLFxuICAgIFwidHJ5XCIsXG4gICAgXCJjYXRjaFwiLFxuICAgIFwiZmluYWxseVwiLFxuICAgIFwiaW1wbGVtZW50c1wiLFxuICAgIFwiZXh0ZW5kc1wiLFxuICAgIFwibmV3XCIsXG4gICAgXCJpbXBvcnRcIixcbiAgICBcInBhY2thZ2VcIixcbiAgICBcInJldHVyblwiLFxuICAgIFwiaW5zdGFuY2VvZlwiLFxuICAgIFwidmFyXCJcbiAgXTtcblxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdHcm9vdnknLFxuICAgIGtleXdvcmRzOiB7XG4gICAgICBcInZhcmlhYmxlLmxhbmd1YWdlXCI6ICd0aGlzIHN1cGVyJyxcbiAgICAgIGxpdGVyYWw6ICd0cnVlIGZhbHNlIG51bGwnLFxuICAgICAgdHlwZTogVFlQRVMsXG4gICAgICBrZXl3b3JkOiBLRVlXT1JEU1xuICAgIH0sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuU0hFQkFORyh7XG4gICAgICAgIGJpbmFyeTogXCJncm9vdnlcIixcbiAgICAgICAgcmVsZXZhbmNlOiAxMFxuICAgICAgfSksXG4gICAgICBDT01NRU5ULFxuICAgICAgU1RSSU5HLFxuICAgICAgUkVHRVhQLFxuICAgICAgTlVNQkVSLFxuICAgICAgQ0xBU1NfREVGSU5JVElPTixcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgICAgIGJlZ2luOiAnQFtBLVphLXpdKycsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgLy8gaGlnaGxpZ2h0IG1hcCBrZXlzIGFuZCBuYW1lZCBwYXJhbWV0ZXJzIGFzIGF0dHJzXG4gICAgICAgIGNsYXNzTmFtZTogJ2F0dHInLFxuICAgICAgICBiZWdpbjogSURFTlRfUkUgKyAnWyBcXHRdKjonLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIC8vIGNhdGNoIG1pZGRsZSBlbGVtZW50IG9mIHRoZSB0ZXJuYXJ5IG9wZXJhdG9yXG4gICAgICAgIC8vIHRvIGF2b2lkIGhpZ2hsaWdodCBpdCBhcyBhIGxhYmVsLCBuYW1lZCBwYXJhbWV0ZXIsIG9yIG1hcCBrZXlcbiAgICAgICAgYmVnaW46IC9cXD8vLFxuICAgICAgICBlbmQ6IC86LyxcbiAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIENPTU1FTlQsXG4gICAgICAgICAgU1RSSU5HLFxuICAgICAgICAgIFJFR0VYUCxcbiAgICAgICAgICBOVU1CRVIsXG4gICAgICAgICAgJ3NlbGYnXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIC8vIGhpZ2hsaWdodCBsYWJlbGVkIHN0YXRlbWVudHNcbiAgICAgICAgY2xhc3NOYW1lOiAnc3ltYm9sJyxcbiAgICAgICAgYmVnaW46ICdeWyBcXHRdKicgKyByZWdleC5sb29rYWhlYWQoSURFTlRfUkUgKyAnOicpLFxuICAgICAgICBleGNsdWRlQmVnaW46IHRydWUsXG4gICAgICAgIGVuZDogSURFTlRfUkUgKyAnOicsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfVxuICAgIF0sXG4gICAgaWxsZWdhbDogLyN8PFxcLy9cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBncm9vdnk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2139\n')},2146:(__unused_webpack_module,exports,__webpack_require__)=>{"use strict";eval("\n\nvar node_process = __webpack_require__(932);\nvar directives = __webpack_require__(4172);\nvar Document = __webpack_require__(983);\nvar errors = __webpack_require__(7454);\nvar identity = __webpack_require__(9141);\nvar composeDoc = __webpack_require__(5757);\nvar resolveEnd = __webpack_require__(2026);\n\nfunction getErrorPos(src) {\n if (typeof src === 'number')\n return [src, src + 1];\n if (Array.isArray(src))\n return src.length === 2 ? src : [src[0], src[1]];\n const { offset, source } = src;\n return [offset, offset + (typeof source === 'string' ? source.length : 1)];\n}\nfunction parsePrelude(prelude) {\n let comment = '';\n let atComment = false;\n let afterEmptyLine = false;\n for (let i = 0; i < prelude.length; ++i) {\n const source = prelude[i];\n switch (source[0]) {\n case '#':\n comment +=\n (comment === '' ? '' : afterEmptyLine ? '\\n\\n' : '\\n') +\n (source.substring(1) || ' ');\n atComment = true;\n afterEmptyLine = false;\n break;\n case '%':\n if (prelude[i + 1]?.[0] !== '#')\n i += 1;\n atComment = false;\n break;\n default:\n // This may be wrong after doc-end, but in that case it doesn't matter\n if (!atComment)\n afterEmptyLine = true;\n atComment = false;\n }\n }\n return { comment, afterEmptyLine };\n}\n/**\n * Compose a stream of CST nodes into a stream of YAML Documents.\n *\n * ```ts\n * import { Composer, Parser } from 'yaml'\n *\n * const src: string = ...\n * const tokens = new Parser().parse(src)\n * const docs = new Composer().compose(tokens)\n * ```\n */\nclass Composer {\n constructor(options = {}) {\n this.doc = null;\n this.atDirectives = false;\n this.prelude = [];\n this.errors = [];\n this.warnings = [];\n this.onError = (source, code, message, warning) => {\n const pos = getErrorPos(source);\n if (warning)\n this.warnings.push(new errors.YAMLWarning(pos, code, message));\n else\n this.errors.push(new errors.YAMLParseError(pos, code, message));\n };\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n this.directives = new directives.Directives({ version: options.version || '1.2' });\n this.options = options;\n }\n decorate(doc, afterDoc) {\n const { comment, afterEmptyLine } = parsePrelude(this.prelude);\n //console.log({ dc: doc.comment, prelude, comment })\n if (comment) {\n const dc = doc.contents;\n if (afterDoc) {\n doc.comment = doc.comment ? `${doc.comment}\\n${comment}` : comment;\n }\n else if (afterEmptyLine || doc.directives.docStart || !dc) {\n doc.commentBefore = comment;\n }\n else if (identity.isCollection(dc) && !dc.flow && dc.items.length > 0) {\n let it = dc.items[0];\n if (identity.isPair(it))\n it = it.key;\n const cb = it.commentBefore;\n it.commentBefore = cb ? `${comment}\\n${cb}` : comment;\n }\n else {\n const cb = dc.commentBefore;\n dc.commentBefore = cb ? `${comment}\\n${cb}` : comment;\n }\n }\n if (afterDoc) {\n Array.prototype.push.apply(doc.errors, this.errors);\n Array.prototype.push.apply(doc.warnings, this.warnings);\n }\n else {\n doc.errors = this.errors;\n doc.warnings = this.warnings;\n }\n this.prelude = [];\n this.errors = [];\n this.warnings = [];\n }\n /**\n * Current stream status information.\n *\n * Mostly useful at the end of input for an empty stream.\n */\n streamInfo() {\n return {\n comment: parsePrelude(this.prelude).comment,\n directives: this.directives,\n errors: this.errors,\n warnings: this.warnings\n };\n }\n /**\n * Compose tokens into documents.\n *\n * @param forceDoc - If the stream contains no document, still emit a final document including any comments and directives that would be applied to a subsequent document.\n * @param endOffset - Should be set if `forceDoc` is also set, to set the document range end and to indicate errors correctly.\n */\n *compose(tokens, forceDoc = false, endOffset = -1) {\n for (const token of tokens)\n yield* this.next(token);\n yield* this.end(forceDoc, endOffset);\n }\n /** Advance the composer by one CST token. */\n *next(token) {\n if (node_process.env.LOG_STREAM)\n console.dir(token, { depth: null });\n switch (token.type) {\n case 'directive':\n this.directives.add(token.source, (offset, message, warning) => {\n const pos = getErrorPos(token);\n pos[0] += offset;\n this.onError(pos, 'BAD_DIRECTIVE', message, warning);\n });\n this.prelude.push(token.source);\n this.atDirectives = true;\n break;\n case 'document': {\n const doc = composeDoc.composeDoc(this.options, this.directives, token, this.onError);\n if (this.atDirectives && !doc.directives.docStart)\n this.onError(token, 'MISSING_CHAR', 'Missing directives-end/doc-start indicator line');\n this.decorate(doc, false);\n if (this.doc)\n yield this.doc;\n this.doc = doc;\n this.atDirectives = false;\n break;\n }\n case 'byte-order-mark':\n case 'space':\n break;\n case 'comment':\n case 'newline':\n this.prelude.push(token.source);\n break;\n case 'error': {\n const msg = token.source\n ? `${token.message}: ${JSON.stringify(token.source)}`\n : token.message;\n const error = new errors.YAMLParseError(getErrorPos(token), 'UNEXPECTED_TOKEN', msg);\n if (this.atDirectives || !this.doc)\n this.errors.push(error);\n else\n this.doc.errors.push(error);\n break;\n }\n case 'doc-end': {\n if (!this.doc) {\n const msg = 'Unexpected doc-end without preceding document';\n this.errors.push(new errors.YAMLParseError(getErrorPos(token), 'UNEXPECTED_TOKEN', msg));\n break;\n }\n this.doc.directives.docEnd = true;\n const end = resolveEnd.resolveEnd(token.end, token.offset + token.source.length, this.doc.options.strict, this.onError);\n this.decorate(this.doc, true);\n if (end.comment) {\n const dc = this.doc.comment;\n this.doc.comment = dc ? `${dc}\\n${end.comment}` : end.comment;\n }\n this.doc.range[2] = end.offset;\n break;\n }\n default:\n this.errors.push(new errors.YAMLParseError(getErrorPos(token), 'UNEXPECTED_TOKEN', `Unsupported token ${token.type}`));\n }\n }\n /**\n * Call at end of input to yield any remaining document.\n *\n * @param forceDoc - If the stream contains no document, still emit a final document including any comments and directives that would be applied to a subsequent document.\n * @param endOffset - Should be set if `forceDoc` is also set, to set the document range end and to indicate errors correctly.\n */\n *end(forceDoc = false, endOffset = -1) {\n if (this.doc) {\n this.decorate(this.doc, true);\n yield this.doc;\n this.doc = null;\n }\n else if (forceDoc) {\n const opts = Object.assign({ _directives: this.directives }, this.options);\n const doc = new Document.Document(undefined, opts);\n if (this.atDirectives)\n this.onError(endOffset, 'MISSING_CHAR', 'Missing directives-end indicator line');\n doc.range = [0, endOffset, endOffset];\n this.decorate(doc, false);\n yield doc;\n }\n }\n}\n\nexports.Composer = Composer;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjE0Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFTO0FBQ3BDLGlCQUFpQixtQkFBTyxDQUFDLElBQXNCO0FBQy9DLGVBQWUsbUJBQU8sQ0FBQyxHQUFvQjtBQUMzQyxhQUFhLG1CQUFPLENBQUMsSUFBYztBQUNuQyxlQUFlLG1CQUFPLENBQUMsSUFBc0I7QUFDN0MsaUJBQWlCLG1CQUFPLENBQUMsSUFBa0I7QUFDM0MsaUJBQWlCLG1CQUFPLENBQUMsSUFBa0I7O0FBRTNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLGlCQUFpQjtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0Isb0JBQW9CO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxtQkFBbUI7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEI7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzREFBc0QsbUNBQW1DO0FBQ3pGO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQiwwQkFBMEI7QUFDMUMsd0JBQXdCLG1DQUFtQztBQUMzRDtBQUNBO0FBQ0E7QUFDQSwrQ0FBK0MsWUFBWSxJQUFJLFFBQVE7QUFDdkU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkNBQTJDLFFBQVEsSUFBSSxHQUFHO0FBQzFEO0FBQ0E7QUFDQTtBQUNBLDJDQUEyQyxRQUFRLElBQUksR0FBRztBQUMxRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDLGFBQWE7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUIsY0FBYyxJQUFJLDZCQUE2QjtBQUN4RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtDQUErQyxHQUFHLElBQUksWUFBWTtBQUNsRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0hBQXdILFdBQVc7QUFDbkk7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUNBQXlDLDhCQUE4QjtBQUN2RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsZ0JBQWdCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vb2JzaWRpYW4tbWluZG1hcC1uZXh0Z2VuLy4vbm9kZV9tb2R1bGVzLy5wbnBtL3lhbWxAMi44LjAvbm9kZV9tb2R1bGVzL3lhbWwvZGlzdC9jb21wb3NlL2NvbXBvc2VyLmpzP2Q2NzIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgbm9kZV9wcm9jZXNzID0gcmVxdWlyZSgncHJvY2VzcycpO1xudmFyIGRpcmVjdGl2ZXMgPSByZXF1aXJlKCcuLi9kb2MvZGlyZWN0aXZlcy5qcycpO1xudmFyIERvY3VtZW50ID0gcmVxdWlyZSgnLi4vZG9jL0RvY3VtZW50LmpzJyk7XG52YXIgZXJyb3JzID0gcmVxdWlyZSgnLi4vZXJyb3JzLmpzJyk7XG52YXIgaWRlbnRpdHkgPSByZXF1aXJlKCcuLi9ub2Rlcy9pZGVudGl0eS5qcycpO1xudmFyIGNvbXBvc2VEb2MgPSByZXF1aXJlKCcuL2NvbXBvc2UtZG9jLmpzJyk7XG52YXIgcmVzb2x2ZUVuZCA9IHJlcXVpcmUoJy4vcmVzb2x2ZS1lbmQuanMnKTtcblxuZnVuY3Rpb24gZ2V0RXJyb3JQb3Moc3JjKSB7XG4gICAgaWYgKHR5cGVvZiBzcmMgPT09ICdudW1iZXInKVxuICAgICAgICByZXR1cm4gW3NyYywgc3JjICsgMV07XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoc3JjKSlcbiAgICAgICAgcmV0dXJuIHNyYy5sZW5ndGggPT09IDIgPyBzcmMgOiBbc3JjWzBdLCBzcmNbMV1dO1xuICAgIGNvbnN0IHsgb2Zmc2V0LCBzb3VyY2UgfSA9IHNyYztcbiAgICByZXR1cm4gW29mZnNldCwgb2Zmc2V0ICsgKHR5cGVvZiBzb3VyY2UgPT09ICdzdHJpbmcnID8gc291cmNlLmxlbmd0aCA6IDEpXTtcbn1cbmZ1bmN0aW9uIHBhcnNlUHJlbHVkZShwcmVsdWRlKSB7XG4gICAgbGV0IGNvbW1lbnQgPSAnJztcbiAgICBsZXQgYXRDb21tZW50ID0gZmFsc2U7XG4gICAgbGV0IGFmdGVyRW1wdHlMaW5lID0gZmFsc2U7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcmVsdWRlLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGNvbnN0IHNvdXJjZSA9IHByZWx1ZGVbaV07XG4gICAgICAgIHN3aXRjaCAoc291cmNlWzBdKSB7XG4gICAgICAgICAgICBjYXNlICcjJzpcbiAgICAgICAgICAgICAgICBjb21tZW50ICs9XG4gICAgICAgICAgICAgICAgICAgIChjb21tZW50ID09PSAnJyA/ICcnIDogYWZ0ZXJFbXB0eUxpbmUgPyAnXFxuXFxuJyA6ICdcXG4nKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAoc291cmNlLnN1YnN0cmluZygxKSB8fCAnICcpO1xuICAgICAgICAgICAgICAgIGF0Q29tbWVudCA9IHRydWU7XG4gICAgICAgICAgICAgICAgYWZ0ZXJFbXB0eUxpbmUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJyUnOlxuICAgICAgICAgICAgICAgIGlmIChwcmVsdWRlW2kgKyAxXT8uWzBdICE9PSAnIycpXG4gICAgICAgICAgICAgICAgICAgIGkgKz0gMTtcbiAgICAgICAgICAgICAgICBhdENvbW1lbnQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgLy8gVGhpcyBtYXkgYmUgd3JvbmcgYWZ0ZXIgZG9jLWVuZCwgYnV0IGluIHRoYXQgY2FzZSBpdCBkb2Vzbid0IG1hdHRlclxuICAgICAgICAgICAgICAgIGlmICghYXRDb21tZW50KVxuICAgICAgICAgICAgICAgICAgICBhZnRlckVtcHR5TGluZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgYXRDb21tZW50ID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHsgY29tbWVudCwgYWZ0ZXJFbXB0eUxpbmUgfTtcbn1cbi8qKlxuICogQ29tcG9zZSBhIHN0cmVhbSBvZiBDU1Qgbm9kZXMgaW50byBhIHN0cmVhbSBvZiBZQU1MIERvY3VtZW50cy5cbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgQ29tcG9zZXIsIFBhcnNlciB9IGZyb20gJ3lhbWwnXG4gKlxuICogY29uc3Qgc3JjOiBzdHJpbmcgPSAuLi5cbiAqIGNvbnN0IHRva2VucyA9IG5ldyBQYXJzZXIoKS5wYXJzZShzcmMpXG4gKiBjb25zdCBkb2NzID0gbmV3IENvbXBvc2VyKCkuY29tcG9zZSh0b2tlbnMpXG4gKiBgYGBcbiAqL1xuY2xhc3MgQ29tcG9zZXIge1xuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMgPSB7fSkge1xuICAgICAgICB0aGlzLmRvYyA9IG51bGw7XG4gICAgICAgIHRoaXMuYXREaXJlY3RpdmVzID0gZmFsc2U7XG4gICAgICAgIHRoaXMucHJlbHVkZSA9IFtdO1xuICAgICAgICB0aGlzLmVycm9ycyA9IFtdO1xuICAgICAgICB0aGlzLndhcm5pbmdzID0gW107XG4gICAgICAgIHRoaXMub25FcnJvciA9IChzb3VyY2UsIGNvZGUsIG1lc3NhZ2UsIHdhcm5pbmcpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBvcyA9IGdldEVycm9yUG9zKHNvdXJjZSk7XG4gICAgICAgICAgICBpZiAod2FybmluZylcbiAgICAgICAgICAgICAgICB0aGlzLndhcm5pbmdzLnB1c2gobmV3IGVycm9ycy5ZQU1MV2FybmluZyhwb3MsIGNvZGUsIG1lc3NhZ2UpKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9ycy5wdXNoKG5ldyBlcnJvcnMuWUFNTFBhcnNlRXJyb3IocG9zLCBjb2RlLCBtZXNzYWdlKSk7XG4gICAgICAgIH07XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvcHJlZmVyLW51bGxpc2gtY29hbGVzY2luZ1xuICAgICAgICB0aGlzLmRpcmVjdGl2ZXMgPSBuZXcgZGlyZWN0aXZlcy5EaXJlY3RpdmVzKHsgdmVyc2lvbjogb3B0aW9ucy52ZXJzaW9uIHx8ICcxLjInIH0pO1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgIH1cbiAgICBkZWNvcmF0ZShkb2MsIGFmdGVyRG9jKSB7XG4gICAgICAgIGNvbnN0IHsgY29tbWVudCwgYWZ0ZXJFbXB0eUxpbmUgfSA9IHBhcnNlUHJlbHVkZSh0aGlzLnByZWx1ZGUpO1xuICAgICAgICAvL2NvbnNvbGUubG9nKHsgZGM6IGRvYy5jb21tZW50LCBwcmVsdWRlLCBjb21tZW50IH0pXG4gICAgICAgIGlmIChjb21tZW50KSB7XG4gICAgICAgICAgICBjb25zdCBkYyA9IGRvYy5jb250ZW50cztcbiAgICAgICAgICAgIGlmIChhZnRlckRvYykge1xuICAgICAgICAgICAgICAgIGRvYy5jb21tZW50ID0gZG9jLmNvbW1lbnQgPyBgJHtkb2MuY29tbWVudH1cXG4ke2NvbW1lbnR9YCA6IGNvbW1lbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChhZnRlckVtcHR5TGluZSB8fCBkb2MuZGlyZWN0aXZlcy5kb2NTdGFydCB8fCAhZGMpIHtcbiAgICAgICAgICAgICAgICBkb2MuY29tbWVudEJlZm9yZSA9IGNvbW1lbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChpZGVudGl0eS5pc0NvbGxlY3Rpb24oZGMpICYmICFkYy5mbG93ICYmIGRjLml0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBsZXQgaXQgPSBkYy5pdGVtc1swXTtcbiAgICAgICAgICAgICAgICBpZiAoaWRlbnRpdHkuaXNQYWlyKGl0KSlcbiAgICAgICAgICAgICAgICAgICAgaXQgPSBpdC5rZXk7XG4gICAgICAgICAgICAgICAgY29uc3QgY2IgPSBpdC5jb21tZW50QmVmb3JlO1xuICAgICAgICAgICAgICAgIGl0LmNvbW1lbnRCZWZvcmUgPSBjYiA/IGAke2NvbW1lbnR9XFxuJHtjYn1gIDogY29tbWVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNiID0gZGMuY29tbWVudEJlZm9yZTtcbiAgICAgICAgICAgICAgICBkYy5jb21tZW50QmVmb3JlID0gY2IgPyBgJHtjb21tZW50fVxcbiR7Y2J9YCA6IGNvbW1lbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFmdGVyRG9jKSB7XG4gICAgICAgICAgICBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShkb2MuZXJyb3JzLCB0aGlzLmVycm9ycyk7XG4gICAgICAgICAgICBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShkb2Mud2FybmluZ3MsIHRoaXMud2FybmluZ3MpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZG9jLmVycm9ycyA9IHRoaXMuZXJyb3JzO1xuICAgICAgICAgICAgZG9jLndhcm5pbmdzID0gdGhpcy53YXJuaW5ncztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnByZWx1ZGUgPSBbXTtcbiAgICAgICAgdGhpcy5lcnJvcnMgPSBbXTtcbiAgICAgICAgdGhpcy53YXJuaW5ncyA9IFtdO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDdXJyZW50IHN0cmVhbSBzdGF0dXMgaW5mb3JtYXRpb24uXG4gICAgICpcbiAgICAgKiBNb3N0bHkgdXNlZnVsIGF0IHRoZSBlbmQgb2YgaW5wdXQgZm9yIGFuIGVtcHR5IHN0cmVhbS5cbiAgICAgKi9cbiAgICBzdHJlYW1JbmZvKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29tbWVudDogcGFyc2VQcmVsdWRlKHRoaXMucHJlbHVkZSkuY29tbWVudCxcbiAgICAgICAgICAgIGRpcmVjdGl2ZXM6IHRoaXMuZGlyZWN0aXZlcyxcbiAgICAgICAgICAgIGVycm9yczogdGhpcy5lcnJvcnMsXG4gICAgICAgICAgICB3YXJuaW5nczogdGhpcy53YXJuaW5nc1xuICAgICAgICB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDb21wb3NlIHRva2VucyBpbnRvIGRvY3VtZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBmb3JjZURvYyAtIElmIHRoZSBzdHJlYW0gY29udGFpbnMgbm8gZG9jdW1lbnQsIHN0aWxsIGVtaXQgYSBmaW5hbCBkb2N1bWVudCBpbmNsdWRpbmcgYW55IGNvbW1lbnRzIGFuZCBkaXJlY3RpdmVzIHRoYXQgd291bGQgYmUgYXBwbGllZCB0byBhIHN1YnNlcXVlbnQgZG9jdW1lbnQuXG4gICAgICogQHBhcmFtIGVuZE9mZnNldCAtIFNob3VsZCBiZSBzZXQgaWYgYGZvcmNlRG9jYCBpcyBhbHNvIHNldCwgdG8gc2V0IHRoZSBkb2N1bWVudCByYW5nZSBlbmQgYW5kIHRvIGluZGljYXRlIGVycm9ycyBjb3JyZWN0bHkuXG4gICAgICovXG4gICAgKmNvbXBvc2UodG9rZW5zLCBmb3JjZURvYyA9IGZhbHNlLCBlbmRPZmZzZXQgPSAtMSkge1xuICAgICAgICBmb3IgKGNvbnN0IHRva2VuIG9mIHRva2VucylcbiAgICAgICAgICAgIHlpZWxkKiB0aGlzLm5leHQodG9rZW4pO1xuICAgICAgICB5aWVsZCogdGhpcy5lbmQoZm9yY2VEb2MsIGVuZE9mZnNldCk7XG4gICAgfVxuICAgIC8qKiBBZHZhbmNlIHRoZSBjb21wb3NlciBieSBvbmUgQ1NUIHRva2VuLiAqL1xuICAgICpuZXh0KHRva2VuKSB7XG4gICAgICAgIGlmIChub2RlX3Byb2Nlc3MuZW52LkxPR19TVFJFQU0pXG4gICAgICAgICAgICBjb25zb2xlLmRpcih0b2tlbiwgeyBkZXB0aDogbnVsbCB9KTtcbiAgICAgICAgc3dpdGNoICh0b2tlbi50eXBlKSB7XG4gICAgICAgICAgICBjYXNlICdkaXJlY3RpdmUnOlxuICAgICAgICAgICAgICAgIHRoaXMuZGlyZWN0aXZlcy5hZGQodG9rZW4uc291cmNlLCAob2Zmc2V0LCBtZXNzYWdlLCB3YXJuaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBvcyA9IGdldEVycm9yUG9zKHRva2VuKTtcbiAgICAgICAgICAgICAgICAgICAgcG9zWzBdICs9IG9mZnNldDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkVycm9yKHBvcywgJ0JBRF9ESVJFQ1RJVkUnLCBtZXNzYWdlLCB3YXJuaW5nKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLnByZWx1ZGUucHVzaCh0b2tlbi5zb3VyY2UpO1xuICAgICAgICAgICAgICAgIHRoaXMuYXREaXJlY3RpdmVzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2RvY3VtZW50Jzoge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRvYyA9IGNvbXBvc2VEb2MuY29tcG9zZURvYyh0aGlzLm9wdGlvbnMsIHRoaXMuZGlyZWN0aXZlcywgdG9rZW4sIHRoaXMub25FcnJvcik7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuYXREaXJlY3RpdmVzICYmICFkb2MuZGlyZWN0aXZlcy5kb2NTdGFydClcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkVycm9yKHRva2VuLCAnTUlTU0lOR19DSEFSJywgJ01pc3NpbmcgZGlyZWN0aXZlcy1lbmQvZG9jLXN0YXJ0IGluZGljYXRvciBsaW5lJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5kZWNvcmF0ZShkb2MsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kb2MpXG4gICAgICAgICAgICAgICAgICAgIHlpZWxkIHRoaXMuZG9jO1xuICAgICAgICAgICAgICAgIHRoaXMuZG9jID0gZG9jO1xuICAgICAgICAgICAgICAgIHRoaXMuYXREaXJlY3RpdmVzID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICdieXRlLW9yZGVyLW1hcmsnOlxuICAgICAgICAgICAgY2FzZSAnc3BhY2UnOlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnY29tbWVudCc6XG4gICAgICAgICAgICBjYXNlICduZXdsaW5lJzpcbiAgICAgICAgICAgICAgICB0aGlzLnByZWx1ZGUucHVzaCh0b2tlbi5zb3VyY2UpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZXJyb3InOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbXNnID0gdG9rZW4uc291cmNlXG4gICAgICAgICAgICAgICAgICAgID8gYCR7dG9rZW4ubWVzc2FnZX06ICR7SlNPTi5zdHJpbmdpZnkodG9rZW4uc291cmNlKX1gXG4gICAgICAgICAgICAgICAgICAgIDogdG9rZW4ubWVzc2FnZTtcbiAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBlcnJvcnMuWUFNTFBhcnNlRXJyb3IoZ2V0RXJyb3JQb3ModG9rZW4pLCAnVU5FWFBFQ1RFRF9UT0tFTicsIG1zZyk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuYXREaXJlY3RpdmVzIHx8ICF0aGlzLmRvYylcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvcnMucHVzaChlcnJvcik7XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRvYy5lcnJvcnMucHVzaChlcnJvcik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICdkb2MtZW5kJzoge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5kb2MpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbXNnID0gJ1VuZXhwZWN0ZWQgZG9jLWVuZCB3aXRob3V0IHByZWNlZGluZyBkb2N1bWVudCc7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3JzLnB1c2gobmV3IGVycm9ycy5ZQU1MUGFyc2VFcnJvcihnZXRFcnJvclBvcyh0b2tlbiksICdVTkVYUEVDVEVEX1RPS0VOJywgbXNnKSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmRvYy5kaXJlY3RpdmVzLmRvY0VuZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgY29uc3QgZW5kID0gcmVzb2x2ZUVuZC5yZXNvbHZlRW5kKHRva2VuLmVuZCwgdG9rZW4ub2Zmc2V0ICsgdG9rZW4uc291cmNlLmxlbmd0aCwgdGhpcy5kb2Mub3B0aW9ucy5zdHJpY3QsIHRoaXMub25FcnJvcik7XG4gICAgICAgICAgICAgICAgdGhpcy5kZWNvcmF0ZSh0aGlzLmRvYywgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKGVuZC5jb21tZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRjID0gdGhpcy5kb2MuY29tbWVudDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kb2MuY29tbWVudCA9IGRjID8gYCR7ZGN9XFxuJHtlbmQuY29tbWVudH1gIDogZW5kLmNvbW1lbnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuZG9jLnJhbmdlWzJdID0gZW5kLm9mZnNldDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhpcy5lcnJvcnMucHVzaChuZXcgZXJyb3JzLllBTUxQYXJzZUVycm9yKGdldEVycm9yUG9zKHRva2VuKSwgJ1VORVhQRUNURURfVE9LRU4nLCBgVW5zdXBwb3J0ZWQgdG9rZW4gJHt0b2tlbi50eXBlfWApKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBDYWxsIGF0IGVuZCBvZiBpbnB1dCB0byB5aWVsZCBhbnkgcmVtYWluaW5nIGRvY3VtZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGZvcmNlRG9jIC0gSWYgdGhlIHN0cmVhbSBjb250YWlucyBubyBkb2N1bWVudCwgc3RpbGwgZW1pdCBhIGZpbmFsIGRvY3VtZW50IGluY2x1ZGluZyBhbnkgY29tbWVudHMgYW5kIGRpcmVjdGl2ZXMgdGhhdCB3b3VsZCBiZSBhcHBsaWVkIHRvIGEgc3Vic2VxdWVudCBkb2N1bWVudC5cbiAgICAgKiBAcGFyYW0gZW5kT2Zmc2V0IC0gU2hvdWxkIGJlIHNldCBpZiBgZm9yY2VEb2NgIGlzIGFsc28gc2V0LCB0byBzZXQgdGhlIGRvY3VtZW50IHJhbmdlIGVuZCBhbmQgdG8gaW5kaWNhdGUgZXJyb3JzIGNvcnJlY3RseS5cbiAgICAgKi9cbiAgICAqZW5kKGZvcmNlRG9jID0gZmFsc2UsIGVuZE9mZnNldCA9IC0xKSB7XG4gICAgICAgIGlmICh0aGlzLmRvYykge1xuICAgICAgICAgICAgdGhpcy5kZWNvcmF0ZSh0aGlzLmRvYywgdHJ1ZSk7XG4gICAgICAgICAgICB5aWVsZCB0aGlzLmRvYztcbiAgICAgICAgICAgIHRoaXMuZG9jID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChmb3JjZURvYykge1xuICAgICAgICAgICAgY29uc3Qgb3B0cyA9IE9iamVjdC5hc3NpZ24oeyBfZGlyZWN0aXZlczogdGhpcy5kaXJlY3RpdmVzIH0sIHRoaXMub3B0aW9ucyk7XG4gICAgICAgICAgICBjb25zdCBkb2MgPSBuZXcgRG9jdW1lbnQuRG9jdW1lbnQodW5kZWZpbmVkLCBvcHRzKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmF0RGlyZWN0aXZlcylcbiAgICAgICAgICAgICAgICB0aGlzLm9uRXJyb3IoZW5kT2Zmc2V0LCAnTUlTU0lOR19DSEFSJywgJ01pc3NpbmcgZGlyZWN0aXZlcy1lbmQgaW5kaWNhdG9yIGxpbmUnKTtcbiAgICAgICAgICAgIGRvYy5yYW5nZSA9IFswLCBlbmRPZmZzZXQsIGVuZE9mZnNldF07XG4gICAgICAgICAgICB0aGlzLmRlY29yYXRlKGRvYywgZmFsc2UpO1xuICAgICAgICAgICAgeWllbGQgZG9jO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnRzLkNvbXBvc2VyID0gQ29tcG9zZXI7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2146\n")},2150:(module,__unused_webpack_exports,__webpack_require__)=>{"use strict";eval("\n\nvar Type = __webpack_require__(2500);\n\nfunction resolveYamlNull(data) {\n if (data === null) return true;\n\n var max = data.length;\n\n return (max === 1 && data === '~') ||\n (max === 4 && (data === 'null' || data === 'Null' || data === 'NULL'));\n}\n\nfunction constructYamlNull() {\n return null;\n}\n\nfunction isNull(object) {\n return object === null;\n}\n\nmodule.exports = new Type('tag:yaml.org,2002:null', {\n kind: 'scalar',\n resolve: resolveYamlNull,\n construct: constructYamlNull,\n predicate: isNull,\n represent: {\n canonical: function () { return '~'; },\n lowercase: function () { return 'null'; },\n uppercase: function () { return 'NULL'; },\n camelcase: function () { return 'Null'; }\n },\n defaultStyle: 'lowercase'\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjE1MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsSUFBUzs7QUFFNUI7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkIsZ0JBQWdCO0FBQzdDLDZCQUE2QixnQkFBZ0I7QUFDN0MsNkJBQTZCLGdCQUFnQjtBQUM3Qyw2QkFBNkI7QUFDN0IsR0FBRztBQUNIO0FBQ0EsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL29ic2lkaWFuLW1pbmRtYXAtbmV4dGdlbi8uL25vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMS9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC90eXBlL251bGwuanM/YmJkMyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBUeXBlID0gcmVxdWlyZSgnLi4vdHlwZScpO1xuXG5mdW5jdGlvbiByZXNvbHZlWWFtbE51bGwoZGF0YSkge1xuICBpZiAoZGF0YSA9PT0gbnVsbCkgcmV0dXJuIHRydWU7XG5cbiAgdmFyIG1heCA9IGRhdGEubGVuZ3RoO1xuXG4gIHJldHVybiAobWF4ID09PSAxICYmIGRhdGEgPT09ICd+JykgfHxcbiAgICAgICAgIChtYXggPT09IDQgJiYgKGRhdGEgPT09ICdudWxsJyB8fCBkYXRhID09PSAnTnVsbCcgfHwgZGF0YSA9PT0gJ05VTEwnKSk7XG59XG5cbmZ1bmN0aW9uIGNvbnN0cnVjdFlhbWxOdWxsKCkge1xuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gaXNOdWxsKG9iamVjdCkge1xuICByZXR1cm4gb2JqZWN0ID09PSBudWxsO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG5ldyBUeXBlKCd0YWc6eWFtbC5vcmcsMjAwMjpudWxsJywge1xuICBraW5kOiAnc2NhbGFyJyxcbiAgcmVzb2x2ZTogcmVzb2x2ZVlhbWxOdWxsLFxuICBjb25zdHJ1Y3Q6IGNvbnN0cnVjdFlhbWxOdWxsLFxuICBwcmVkaWNhdGU6IGlzTnVsbCxcbiAgcmVwcmVzZW50OiB7XG4gICAgY2Fub25pY2FsOiBmdW5jdGlvbiAoKSB7IHJldHVybiAnfic7ICAgIH0sXG4gICAgbG93ZXJjYXNlOiBmdW5jdGlvbiAoKSB7IHJldHVybiAnbnVsbCc7IH0sXG4gICAgdXBwZXJjYXNlOiBmdW5jdGlvbiAoKSB7IHJldHVybiAnTlVMTCc7IH0sXG4gICAgY2FtZWxjYXNlOiBmdW5jdGlvbiAoKSB7IHJldHVybiAnTnVsbCc7IH1cbiAgfSxcbiAgZGVmYXVsdFN0eWxlOiAnbG93ZXJjYXNlJ1xufSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2150\n")},2235:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Z: () => (/* binding */ constructView),\n/* harmony export */ e: () => (/* binding */ setViewCreator)\n/* harmony export */ });\n/* harmony import */ var src_constants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(7903);\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(6442);\n/* harmony import */ var src_core_entry__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(2392);\n/* harmony import */ var _get_active_file__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(2065);\n/* harmony import */ var _views__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(2981);\nvar __async = (__this, __arguments, generator) => {\n return new Promise((resolve, reject) => {\n var fulfilled = (value) => {\n try {\n step(generator.next(value));\n } catch (e) {\n reject(e);\n }\n };\n var rejected = (value) => {\n try {\n step(generator.throw(value));\n } catch (e) {\n reject(e);\n }\n };\n var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);\n step((generator = generator.apply(__this, __arguments)).next());\n });\n};\n\n\n\n\n\nlet viewCreator;\nfunction setViewCreator(vc) {\n viewCreator = vc;\n}\nsrc_core_entry__WEBPACK_IMPORTED_MODULE_2__.plugin.registerView(src_constants__WEBPACK_IMPORTED_MODULE_0__/* .MM_VIEW_TYPE */ .Ik, (leaf) => viewCreator(leaf));\nfunction constructView(leaf, subject) {\n return enqueue(() => __async(null, null, function* () {\n const pinned = subject !== "unpinned";\n const displayText = pinned ? subject.basename : "Mindmap";\n viewCreator = () => {\n const view2 = new _view__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A(leaf, displayText, pinned);\n _views__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A.set(subject, view2);\n return view2;\n };\n yield leaf.setViewState({ type: src_constants__WEBPACK_IMPORTED_MODULE_0__/* .MM_VIEW_TYPE */ .Ik, active: true });\n const view = leaf.view;\n const file = pinned ? subject : (0,_get_active_file__WEBPACK_IMPORTED_MODULE_4__/* .getActiveFile */ .R)();\n waitUntilActive(leaf).then(() => file && view.firstRender(file));\n }));\n}\nlet waitForLastConstruct = Promise.resolve();\nfunction enqueue(onfulfilled) {\n return waitForLastConstruct = waitForLastConstruct.then(onfulfilled);\n}\nconst waitUntilActive = (leaf) => new Promise((resolve) => {\n const listener = app.workspace.on("active-leaf-change", (activeLeaf) => {\n if (activeLeaf === leaf) {\n resolve();\n app.workspace.offref(listener);\n }\n });\n src_core_entry__WEBPACK_IMPORTED_MODULE_2__.plugin.registerEvent(listener);\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjIzNS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUM2QjtBQUVGO0FBQ0o7QUFDTztBQUNaO0FBRWxCLElBQUk7QUFDRyxTQUFTLGVBQWUsSUFBaUI7QUFBRSxnQkFBYztBQUFHO0FBQ25FLGtEQUFNLENBQUMsYUFBYSxpRUFBWSxFQUFFLENBQUMsU0FBd0IsWUFBWSxJQUFJLENBQUM7QUFFckUsU0FBUyxjQUFjLE1BQXFCLFNBQXlCO0FBQzFFLFNBQU8sUUFBUSxNQUFZO0FBQ3pCLFVBQU0sU0FBUyxZQUFZO0FBQzNCLFVBQU0sY0FBYyxTQUFTLFFBQVEsV0FBVztBQUVoRCxrQkFBYyxNQUFNO0FBQ2xCLFlBQU1BLFFBQU8sSUFBSSxzREFBYyxDQUFDLE1BQU0sYUFBYSxNQUFNO0FBQ3pELDZEQUFLLENBQUMsSUFBSSxTQUFTQSxLQUFJO0FBQ3ZCLGFBQU9BO0FBQUEsSUFDVDtBQUNBLFVBQU0sS0FBSyxhQUFhLEVBQUUsTUFBTSxpRUFBWSxFQUFFLFFBQVEsS0FBSyxDQUFDO0FBRTVELFVBQU0sT0FBTyxLQUFLO0FBQ2xCLFVBQU0sT0FBTyxTQUFTLFVBQVUsd0VBQWEsQ0FBQztBQUU5QyxvQkFBZ0IsSUFBSSxFQUNuQixLQUFLLE1BQ0osUUFBUSxLQUFLLFlBQVksSUFBSSxDQUFDO0FBQUEsRUFDbEMsRUFBQztBQUNIO0FBRUEsSUFBSSx1QkFBdUIsUUFBUSxRQUFRO0FBQzNDLFNBQVMsUUFBUSxhQUFrQztBQUNqRCxTQUFPLHVCQUF1QixxQkFBcUIsS0FBSyxXQUFXO0FBQ3JFO0FBRUEsTUFBTSxrQkFBa0IsQ0FBQyxTQUN2QixJQUFJLFFBQWMsYUFBVztBQUMzQixRQUFNLFdBQ0osSUFBSSxVQUFVLEdBQUcsc0JBQXNCLGdCQUFjO0FBQ25ELFFBQUksZUFBZSxNQUFNO0FBQ3ZCLGNBQVE7QUFDUixVQUFJLFVBQVUsT0FBTyxRQUFRO0FBQUEsSUFDL0I7QUFBQSxFQUNGLENBQUM7QUFDSCxvREFBTSxDQUFDLGNBQWMsUUFBUTtBQUMvQixDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vb2JzaWRpYW4tbWluZG1hcC1uZXh0Z2VuLy4vc3JjL3ZpZXdzL3ZpZXctY3JlYXRvci50cz81M2EzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFZpZXdDcmVhdG9yLCBXb3Jrc3BhY2VMZWFmIH0gZnJvbSAnb2JzaWRpYW4nXG5pbXBvcnQgeyBNTV9WSUVXX1RZUEUgfSBmcm9tICdzcmMvY29uc3RhbnRzJ1xuaW1wb3J0IHsgTWluZG1hcFN1YmplY3QgfSBmcm9tICcuL2xheW91dC1tYW5hZ2VyJ1xuaW1wb3J0IE1pbmRtYXBUYWJWaWV3IGZyb20gJy4vdmlldydcbmltcG9ydCB7IHBsdWdpbiB9IGZyb20gJ3NyYy9jb3JlL2VudHJ5J1xuaW1wb3J0IHsgZ2V0QWN0aXZlRmlsZSB9IGZyb20gJy4vZ2V0LWFjdGl2ZS1maWxlJ1xuaW1wb3J0IHZpZXdzIGZyb20gJy4vdmlld3MnXG5cbmxldCB2aWV3Q3JlYXRvciE6IFZpZXdDcmVhdG9yXG5leHBvcnQgZnVuY3Rpb24gc2V0Vmlld0NyZWF0b3IodmM6IFZpZXdDcmVhdG9yKSB7IHZpZXdDcmVhdG9yID0gdmMgfVxucGx1Z2luLnJlZ2lzdGVyVmlldyhNTV9WSUVXX1RZUEUsIChsZWFmOiBXb3Jrc3BhY2VMZWFmKSA9PiB2aWV3Q3JlYXRvcihsZWFmKSlcblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnN0cnVjdFZpZXcobGVhZjogV29ya3NwYWNlTGVhZiwgc3ViamVjdDogTWluZG1hcFN1YmplY3QpIHtcbiAgcmV0dXJuIGVucXVldWUoYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHBpbm5lZCA9IHN1YmplY3QgIT09ICd1bnBpbm5lZCdcbiAgICBjb25zdCBkaXNwbGF5VGV4dCA9IHBpbm5lZCA/IHN1YmplY3QuYmFzZW5hbWUgOiAnTWluZG1hcCdcblxuICAgIHZpZXdDcmVhdG9yID0gKCkgPT4ge1xuICAgICAgY29uc3QgdmlldyA9IG5ldyBNaW5kbWFwVGFiVmlldyhsZWFmLCBkaXNwbGF5VGV4dCwgcGlubmVkKVxuICAgICAgdmlld3Muc2V0KHN1YmplY3QsIHZpZXcpXG4gICAgICByZXR1cm4gdmlld1xuICAgIH1cbiAgICBhd2FpdCBsZWFmLnNldFZpZXdTdGF0ZSh7IHR5cGU6IE1NX1ZJRVdfVFlQRSwgYWN0aXZlOiB0cnVlIH0pXG5cbiAgICBjb25zdCB2aWV3ID0gbGVhZi52aWV3IGFzIE1pbmRtYXBUYWJWaWV3XG4gICAgY29uc3QgZmlsZSA9IHBpbm5lZCA/IHN1YmplY3QgOiBnZXRBY3RpdmVGaWxlKClcblxuICAgIHdhaXRVbnRpbEFjdGl2ZShsZWFmKVxuICAgIC50aGVuKCgpID0+XG4gICAgICBmaWxlICYmIHZpZXcuZmlyc3RSZW5kZXIoZmlsZSkpXG4gIH0pXG59XG5cbmxldCB3YWl0Rm9yTGFzdENvbnN0cnVjdCA9IFByb21pc2UucmVzb2x2ZSgpXG5mdW5jdGlvbiBlbnF1ZXVlKG9uZnVsZmlsbGVkOiAoKSA9PiBQcm9taXNlPHZvaWQ+KSB7XG4gIHJldHVybiB3YWl0Rm9yTGFzdENvbnN0cnVjdCA9IHdhaXRGb3JMYXN0Q29uc3RydWN0LnRoZW4ob25mdWxmaWxsZWQpXG59XG5cbmNvbnN0IHdhaXRVbnRpbEFjdGl2ZSA9IChsZWFmOiBXb3Jrc3BhY2VMZWFmKSA9PlxuICBuZXcgUHJvbWlzZTx2b2lkPihyZXNvbHZlID0+IHtcbiAgICBjb25zdCBsaXN0ZW5lciA9XG4gICAgICBhcHAud29ya3NwYWNlLm9uKCdhY3RpdmUtbGVhZi1jaGFuZ2UnLCBhY3RpdmVMZWFmID0+IHtcbiAgICAgICAgaWYgKGFjdGl2ZUxlYWYgPT09IGxlYWYpIHtcbiAgICAgICAgICByZXNvbHZlKClcbiAgICAgICAgICBhcHAud29ya3NwYWNlLm9mZnJlZihsaXN0ZW5lcilcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICBwbHVnaW4ucmVnaXN0ZXJFdmVudChsaXN0ZW5lcilcbiAgfSlcbiJdLCJuYW1lcyI6WyJ2aWV3Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2235\n')},2261:module=>{eval('/*\nLanguage: GML\nDescription: Game Maker Language for GameMaker (rev. 2023.1)\nWebsite: https://manual.yoyogames.com/\nCategory: scripting\n*/\n\nfunction gml(hljs) {\n const KEYWORDS = [\n "#endregion",\n "#macro",\n "#region",\n "and",\n "begin",\n "break",\n "case",\n "constructor",\n "continue",\n "default",\n "delete",\n "div",\n "do",\n "else",\n "end",\n "enum",\n "exit",\n "for",\n "function",\n "globalvar",\n "if",\n "mod",\n "new",\n "not",\n "or",\n "repeat",\n "return",\n "static",\n "switch",\n "then",\n "until",\n "var",\n "while",\n "with",\n "xor"\n ];\n\n const BUILT_INS = [\n "abs",\n "alarm_get",\n "alarm_set",\n "angle_difference",\n "animcurve_channel_evaluate",\n "animcurve_channel_new",\n "animcurve_create",\n "animcurve_destroy",\n "animcurve_exists",\n "animcurve_get",\n "animcurve_get_channel",\n "animcurve_get_channel_index",\n "animcurve_point_new",\n "ansi_char",\n "application_get_position",\n "application_surface_draw_enable",\n "application_surface_enable",\n "application_surface_is_enabled",\n "arccos",\n "arcsin",\n "arctan",\n "arctan2",\n "array_all",\n "array_any",\n "array_concat",\n "array_contains",\n "array_contains_ext",\n "array_copy",\n "array_copy_while",\n "array_create",\n "array_create_ext",\n "array_delete",\n "array_equals",\n "array_filter",\n "array_filter_ext",\n "array_find_index",\n "array_first",\n "array_foreach",\n "array_get",\n "array_get_index",\n "array_insert",\n "array_intersection",\n "array_last",\n "array_length",\n "array_map",\n "array_map_ext",\n "array_pop",\n "array_push",\n "array_reduce",\n "array_resize",\n "array_reverse",\n "array_reverse_ext",\n "array_set",\n "array_shuffle",\n "array_shuffle_ext",\n "array_sort",\n "array_union",\n "array_unique",\n "array_unique_ext",\n "asset_add_tags",\n "asset_clear_tags",\n "asset_get_ids",\n "asset_get_index",\n "asset_get_tags",\n "asset_get_type",\n "asset_has_any_tag",\n "asset_has_tags",\n "asset_remove_tags",\n "audio_bus_clear_emitters",\n "audio_bus_create",\n "audio_bus_get_emitters",\n "audio_channel_num",\n "audio_create_buffer_sound",\n "audio_create_play_queue",\n "audio_create_stream",\n "audio_create_sync_group",\n "audio_debug",\n "audio_destroy_stream",\n "audio_destroy_sync_group",\n "audio_effect_create",\n "audio_emitter_bus",\n "audio_emitter_create",\n "audio_emitter_exists",\n "audio_emitter_falloff",\n "audio_emitter_free",\n "audio_emitter_gain",\n "audio_emitter_get_bus",\n "audio_emitter_get_gain",\n "audio_emitter_get_listener_mask",\n "audio_emitter_get_pitch",\n "audio_emitter_get_vx",\n "audio_emitter_get_vy",\n "audio_emitter_get_vz",\n "audio_emitter_get_x",\n "audio_emitter_get_y",\n "audio_emitter_get_z",\n "audio_emitter_pitch",\n "audio_emitter_position",\n "audio_emitter_set_listener_mask",\n "audio_emitter_velocity",\n "audio_exists",\n "audio_falloff_set_model",\n "audio_free_buffer_sound",\n "audio_free_play_queue",\n "audio_get_listener_count",\n "audio_get_listener_info",\n "audio_get_listener_mask",\n "audio_get_master_gain",\n "audio_get_name",\n "audio_get_recorder_count",\n "audio_get_recorder_info",\n "audio_get_type",\n "audio_group_get_assets",\n "audio_group_get_gain",\n "audio_group_is_loaded",\n "audio_group_load",\n "audio_group_load_progress",\n "audio_group_name",\n "audio_group_set_gain",\n "audio_group_stop_all",\n "audio_group_unload",\n "audio_is_paused",\n "audio_is_playing",\n "audio_listener_get_data",\n "audio_listener_orientation",\n "audio_listener_position",\n "audio_listener_set_orientation",\n "audio_listener_set_position",\n "audio_listener_set_velocity",\n "audio_listener_velocity",\n "audio_master_gain",\n "audio_pause_all",\n "audio_pause_sound",\n "audio_pause_sync_group",\n "audio_play_in_sync_group",\n "audio_play_sound",\n "audio_play_sound_at",\n "audio_play_sound_ext",\n "audio_play_sound_on",\n "audio_queue_sound",\n "audio_resume_all",\n "audio_resume_sound",\n "audio_resume_sync_group",\n "audio_set_listener_mask",\n "audio_set_master_gain",\n "audio_sound_gain",\n "audio_sound_get_audio_group",\n "audio_sound_get_gain",\n "audio_sound_get_listener_mask",\n "audio_sound_get_loop",\n "audio_sound_get_loop_end",\n "audio_sound_get_loop_start",\n "audio_sound_get_pitch",\n "audio_sound_get_track_position",\n "audio_sound_is_playable",\n "audio_sound_length",\n "audio_sound_loop",\n "audio_sound_loop_end",\n "audio_sound_loop_start",\n "audio_sound_pitch",\n "audio_sound_set_listener_mask",\n "audio_sound_set_track_position",\n "audio_start_recording",\n "audio_start_sync_group",\n "audio_stop_all",\n "audio_stop_recording",\n "audio_stop_sound",\n "audio_stop_sync_group",\n "audio_sync_group_debug",\n "audio_sync_group_get_track_pos",\n "audio_sync_group_is_paused",\n "audio_sync_group_is_playing",\n "audio_system_is_available",\n "audio_system_is_initialised",\n "base64_decode",\n "base64_encode",\n "bool",\n "browser_input_capture",\n "buffer_async_group_begin",\n "buffer_async_group_end",\n "buffer_async_group_option",\n "buffer_base64_decode",\n "buffer_base64_decode_ext",\n "buffer_base64_encode",\n "buffer_compress",\n "buffer_copy",\n "buffer_copy_from_vertex_buffer",\n "buffer_copy_stride",\n "buffer_crc32",\n "buffer_create",\n "buffer_create_from_vertex_buffer",\n "buffer_create_from_vertex_buffer_ext",\n "buffer_decompress",\n "buffer_delete",\n "buffer_exists",\n "buffer_fill",\n "buffer_get_address",\n "buffer_get_alignment",\n "buffer_get_size",\n "buffer_get_surface",\n "buffer_get_type",\n "buffer_load",\n "buffer_load_async",\n "buffer_load_ext",\n "buffer_load_partial",\n "buffer_md5",\n "buffer_peek",\n "buffer_poke",\n "buffer_read",\n "buffer_resize",\n "buffer_save",\n "buffer_save_async",\n "buffer_save_ext",\n "buffer_seek",\n "buffer_set_surface",\n "buffer_set_used_size",\n "buffer_sha1",\n "buffer_sizeof",\n "buffer_tell",\n "buffer_write",\n "call_cancel",\n "call_later",\n "camera_apply",\n "camera_copy_transforms",\n "camera_create",\n "camera_create_view",\n "camera_destroy",\n "camera_get_active",\n "camera_get_begin_script",\n "camera_get_default",\n "camera_get_end_script",\n "camera_get_proj_mat",\n "camera_get_update_script",\n "camera_get_view_angle",\n "camera_get_view_border_x",\n "camera_get_view_border_y",\n "camera_get_view_height",\n "camera_get_view_mat",\n "camera_get_view_speed_x",\n "camera_get_view_speed_y",\n "camera_get_view_target",\n "camera_get_view_width",\n "camera_get_view_x",\n "camera_get_view_y",\n "camera_set_begin_script",\n "camera_set_default",\n "camera_set_end_script",\n "camera_set_proj_mat",\n "camera_set_update_script",\n "camera_set_view_angle",\n "camera_set_view_border",\n "camera_set_view_mat",\n "camera_set_view_pos",\n "camera_set_view_size",\n "camera_set_view_speed",\n "camera_set_view_target",\n "ceil",\n "choose",\n "chr",\n "clamp",\n "clickable_add",\n "clickable_add_ext",\n "clickable_change",\n "clickable_change_ext",\n "clickable_delete",\n "clickable_exists",\n "clickable_set_style",\n "clipboard_get_text",\n "clipboard_has_text",\n "clipboard_set_text",\n "cloud_file_save",\n "cloud_string_save",\n "cloud_synchronise",\n "code_is_compiled",\n "collision_circle",\n "collision_circle_list",\n "collision_ellipse",\n "collision_ellipse_list",\n "collision_line",\n "collision_line_list",\n "collision_point",\n "collision_point_list",\n "collision_rectangle",\n "collision_rectangle_list",\n "color_get_blue",\n "color_get_green",\n "color_get_hue",\n "color_get_red",\n "color_get_saturation",\n "color_get_value",\n "colour_get_blue",\n "colour_get_green",\n "colour_get_hue",\n "colour_get_red",\n "colour_get_saturation",\n "colour_get_value",\n "cos",\n "darccos",\n "darcsin",\n "darctan",\n "darctan2",\n "date_compare_date",\n "date_compare_datetime",\n "date_compare_time",\n "date_create_datetime",\n "date_current_datetime",\n "date_date_of",\n "date_date_string",\n "date_datetime_string",\n "date_day_span",\n "date_days_in_month",\n "date_days_in_year",\n "date_get_day",\n "date_get_day_of_year",\n "date_get_hour",\n "date_get_hour_of_year",\n "date_get_minute",\n "date_get_minute_of_year",\n "date_get_month",\n "date_get_second",\n "date_get_second_of_year",\n "date_get_timezone",\n "date_get_week",\n "date_get_weekday",\n "date_get_year",\n "date_hour_span",\n "date_inc_day",\n "date_inc_hour",\n "date_inc_minute",\n "date_inc_month",\n "date_inc_second",\n "date_inc_week",\n "date_inc_year",\n "date_is_today",\n "date_leap_year",\n "date_minute_span",\n "date_month_span",\n "date_second_span",\n "date_set_timezone",\n "date_time_of",\n "date_time_string",\n "date_valid_datetime",\n "date_week_span",\n "date_year_span",\n "db_to_lin",\n "dbg_add_font_glyphs",\n "dbg_button",\n "dbg_checkbox",\n "dbg_color",\n "dbg_colour",\n "dbg_drop_down",\n "dbg_same_line",\n "dbg_section",\n "dbg_section_delete",\n "dbg_section_exists",\n "dbg_slider",\n "dbg_slider_int",\n "dbg_sprite",\n "dbg_text",\n "dbg_text_input",\n "dbg_view",\n "dbg_view_delete",\n "dbg_view_exists",\n "dbg_watch",\n "dcos",\n "debug_event",\n "debug_get_callstack",\n "degtorad",\n "device_get_tilt_x",\n "device_get_tilt_y",\n "device_get_tilt_z",\n "device_is_keypad_open",\n "device_mouse_check_button",\n "device_mouse_check_button_pressed",\n "device_mouse_check_button_released",\n "device_mouse_dbclick_enable",\n "device_mouse_raw_x",\n "device_mouse_raw_y",\n "device_mouse_x",\n "device_mouse_x_to_gui",\n "device_mouse_y",\n "device_mouse_y_to_gui",\n "directory_create",\n "directory_destroy",\n "directory_exists",\n "display_get_dpi_x",\n "display_get_dpi_y",\n "display_get_frequency",\n "display_get_gui_height",\n "display_get_gui_width",\n "display_get_height",\n "display_get_orientation",\n "display_get_sleep_margin",\n "display_get_timing_method",\n "display_get_width",\n "display_mouse_get_x",\n "display_mouse_get_y",\n "display_mouse_set",\n "display_reset",\n "display_set_gui_maximise",\n "display_set_gui_maximize",\n "display_set_gui_size",\n "display_set_sleep_margin",\n "display_set_timing_method",\n "display_set_ui_visibility",\n "distance_to_object",\n "distance_to_point",\n "dot_product",\n "dot_product_3d",\n "dot_product_3d_normalised",\n "dot_product_3d_normalized",\n "dot_product_normalised",\n "dot_product_normalized",\n "draw_arrow",\n "draw_button",\n "draw_circle",\n "draw_circle_color",\n "draw_circle_colour",\n "draw_clear",\n "draw_clear_alpha",\n "draw_ellipse",\n "draw_ellipse_color",\n "draw_ellipse_colour",\n "draw_enable_drawevent",\n "draw_enable_skeleton_blendmodes",\n "draw_enable_swf_aa",\n "draw_flush",\n "draw_get_alpha",\n "draw_get_color",\n "draw_get_colour",\n "draw_get_enable_skeleton_blendmodes",\n "draw_get_font",\n "draw_get_halign",\n "draw_get_lighting",\n "draw_get_swf_aa_level",\n "draw_get_valign",\n "draw_getpixel",\n "draw_getpixel_ext",\n "draw_healthbar",\n "draw_highscore",\n "draw_light_define_ambient",\n "draw_light_define_direction",\n "draw_light_define_point",\n "draw_light_enable",\n "draw_light_get",\n "draw_light_get_ambient",\n "draw_line",\n "draw_line_color",\n "draw_line_colour",\n "draw_line_width",\n "draw_line_width_color",\n "draw_line_width_colour",\n "draw_path",\n "draw_point",\n "draw_point_color",\n "draw_point_colour",\n "draw_primitive_begin",\n "draw_primitive_begin_texture",\n "draw_primitive_end",\n "draw_rectangle",\n "draw_rectangle_color",\n "draw_rectangle_colour",\n "draw_roundrect",\n "draw_roundrect_color",\n "draw_roundrect_color_ext",\n "draw_roundrect_colour",\n "draw_roundrect_colour_ext",\n "draw_roundrect_ext",\n "draw_self",\n "draw_set_alpha",\n "draw_set_circle_precision",\n "draw_set_color",\n "draw_set_colour",\n "draw_set_font",\n "draw_set_halign",\n "draw_set_lighting",\n "draw_set_swf_aa_level",\n "draw_set_valign",\n "draw_skeleton",\n "draw_skeleton_collision",\n "draw_skeleton_instance",\n "draw_skeleton_time",\n "draw_sprite",\n "draw_sprite_ext",\n "draw_sprite_general",\n "draw_sprite_part",\n "draw_sprite_part_ext",\n "draw_sprite_pos",\n "draw_sprite_stretched",\n "draw_sprite_stretched_ext",\n "draw_sprite_tiled",\n "draw_sprite_tiled_ext",\n "draw_surface",\n "draw_surface_ext",\n "draw_surface_general",\n "draw_surface_part",\n "draw_surface_part_ext",\n "draw_surface_stretched",\n "draw_surface_stretched_ext",\n "draw_surface_tiled",\n "draw_surface_tiled_ext",\n "draw_text",\n "draw_text_color",\n "draw_text_colour",\n "draw_text_ext",\n "draw_text_ext_color",\n "draw_text_ext_colour",\n "draw_text_ext_transformed",\n "draw_text_ext_transformed_color",\n "draw_text_ext_transformed_colour",\n "draw_text_transformed",\n "draw_text_transformed_color",\n "draw_text_transformed_colour",\n "draw_texture_flush",\n "draw_tile",\n "draw_tilemap",\n "draw_triangle",\n "draw_triangle_color",\n "draw_triangle_colour",\n "draw_vertex",\n "draw_vertex_color",\n "draw_vertex_colour",\n "draw_vertex_texture",\n "draw_vertex_texture_color",\n "draw_vertex_texture_colour",\n "ds_exists",\n "ds_grid_add",\n "ds_grid_add_disk",\n "ds_grid_add_grid_region",\n "ds_grid_add_region",\n "ds_grid_clear",\n "ds_grid_copy",\n "ds_grid_create",\n "ds_grid_destroy",\n "ds_grid_get",\n "ds_grid_get_disk_max",\n "ds_grid_get_disk_mean",\n "ds_grid_get_disk_min",\n "ds_grid_get_disk_sum",\n "ds_grid_get_max",\n "ds_grid_get_mean",\n "ds_grid_get_min",\n "ds_grid_get_sum",\n "ds_grid_height",\n "ds_grid_multiply",\n "ds_grid_multiply_disk",\n "ds_grid_multiply_grid_region",\n "ds_grid_multiply_region",\n "ds_grid_read",\n "ds_grid_resize",\n "ds_grid_set",\n "ds_grid_set_disk",\n "ds_grid_set_grid_region",\n "ds_grid_set_region",\n "ds_grid_shuffle",\n "ds_grid_sort",\n "ds_grid_to_mp_grid",\n "ds_grid_value_disk_exists",\n "ds_grid_value_disk_x",\n "ds_grid_value_disk_y",\n "ds_grid_value_exists",\n "ds_grid_value_x",\n "ds_grid_value_y",\n "ds_grid_width",\n "ds_grid_write",\n "ds_list_add",\n "ds_list_clear",\n "ds_list_copy",\n "ds_list_create",\n "ds_list_delete",\n "ds_list_destroy",\n "ds_list_empty",\n "ds_list_find_index",\n "ds_list_find_value",\n "ds_list_insert",\n "ds_list_is_list",\n "ds_list_is_map",\n "ds_list_mark_as_list",\n "ds_list_mark_as_map",\n "ds_list_read",\n "ds_list_replace",\n "ds_list_set",\n "ds_list_shuffle",\n "ds_list_size",\n "ds_list_sort",\n "ds_list_write",\n "ds_map_add",\n "ds_map_add_list",\n "ds_map_add_map",\n "ds_map_clear",\n "ds_map_copy",\n "ds_map_create",\n "ds_map_delete",\n "ds_map_destroy",\n "ds_map_empty",\n "ds_map_exists",\n "ds_map_find_first",\n "ds_map_find_last",\n "ds_map_find_next",\n "ds_map_find_previous",\n "ds_map_find_value",\n "ds_map_is_list",\n "ds_map_is_map",\n "ds_map_keys_to_array",\n "ds_map_read",\n "ds_map_replace",\n "ds_map_replace_list",\n "ds_map_replace_map",\n "ds_map_secure_load",\n "ds_map_secure_load_buffer",\n "ds_map_secure_save",\n "ds_map_secure_save_buffer",\n "ds_map_set",\n "ds_map_size",\n "ds_map_values_to_array",\n "ds_map_write",\n "ds_priority_add",\n "ds_priority_change_priority",\n "ds_priority_clear",\n "ds_priority_copy",\n "ds_priority_create",\n "ds_priority_delete_max",\n "ds_priority_delete_min",\n "ds_priority_delete_value",\n "ds_priority_destroy",\n "ds_priority_empty",\n "ds_priority_find_max",\n "ds_priority_find_min",\n "ds_priority_find_priority",\n "ds_priority_read",\n "ds_priority_size",\n "ds_priority_write",\n "ds_queue_clear",\n "ds_queue_copy",\n "ds_queue_create",\n "ds_queue_dequeue",\n "ds_queue_destroy",\n "ds_queue_empty",\n "ds_queue_enqueue",\n "ds_queue_head",\n "ds_queue_read",\n "ds_queue_size",\n "ds_queue_tail",\n "ds_queue_write",\n "ds_set_precision",\n "ds_stack_clear",\n "ds_stack_copy",\n "ds_stack_create",\n "ds_stack_destroy",\n "ds_stack_empty",\n "ds_stack_pop",\n "ds_stack_push",\n "ds_stack_read",\n "ds_stack_size",\n "ds_stack_top",\n "ds_stack_write",\n "dsin",\n "dtan",\n "effect_clear",\n "effect_create_above",\n "effect_create_below",\n "effect_create_depth",\n "effect_create_layer",\n "environment_get_variable",\n "event_inherited",\n "event_perform",\n "event_perform_async",\n "event_perform_object",\n "event_user",\n "exception_unhandled_handler",\n "exp",\n "extension_exists",\n "extension_get_option_count",\n "extension_get_option_names",\n "extension_get_option_value",\n "extension_get_options",\n "extension_get_version",\n "external_call",\n "external_define",\n "external_free",\n "file_attributes",\n "file_bin_close",\n "file_bin_open",\n "file_bin_position",\n "file_bin_read_byte",\n "file_bin_rewrite",\n "file_bin_seek",\n "file_bin_size",\n "file_bin_write_byte",\n "file_copy",\n "file_delete",\n "file_exists",\n "file_find_close",\n "file_find_first",\n "file_find_next",\n "file_rename",\n "file_text_close",\n "file_text_eof",\n "file_text_eoln",\n "file_text_open_append",\n "file_text_open_from_string",\n "file_text_open_read",\n "file_text_open_write",\n "file_text_read_real",\n "file_text_read_string",\n "file_text_readln",\n "file_text_write_real",\n "file_text_write_string",\n "file_text_writeln",\n "filename_change_ext",\n "filename_dir",\n "filename_drive",\n "filename_ext",\n "filename_name",\n "filename_path",\n "floor",\n "font_add",\n "font_add_enable_aa",\n "font_add_get_enable_aa",\n "font_add_sprite",\n "font_add_sprite_ext",\n "font_cache_glyph",\n "font_delete",\n "font_enable_effects",\n "font_enable_sdf",\n "font_exists",\n "font_get_bold",\n "font_get_first",\n "font_get_fontname",\n "font_get_info",\n "font_get_italic",\n "font_get_last",\n "font_get_name",\n "font_get_sdf_enabled",\n "font_get_sdf_spread",\n "font_get_size",\n "font_get_texture",\n "font_get_uvs",\n "font_replace_sprite",\n "font_replace_sprite_ext",\n "font_sdf_spread",\n "font_set_cache_size",\n "frac",\n "fx_create",\n "fx_get_name",\n "fx_get_parameter",\n "fx_get_parameter_names",\n "fx_get_parameters",\n "fx_get_single_layer",\n "fx_set_parameter",\n "fx_set_parameters",\n "fx_set_single_layer",\n "game_change",\n "game_end",\n "game_get_speed",\n "game_load",\n "game_load_buffer",\n "game_restart",\n "game_save",\n "game_save_buffer",\n "game_set_speed",\n "gamepad_axis_count",\n "gamepad_axis_value",\n "gamepad_button_check",\n "gamepad_button_check_pressed",\n "gamepad_button_check_released",\n "gamepad_button_count",\n "gamepad_button_value",\n "gamepad_get_axis_deadzone",\n "gamepad_get_button_threshold",\n "gamepad_get_description",\n "gamepad_get_device_count",\n "gamepad_get_guid",\n "gamepad_get_mapping",\n "gamepad_get_option",\n "gamepad_hat_count",\n "gamepad_hat_value",\n "gamepad_is_connected",\n "gamepad_is_supported",\n "gamepad_remove_mapping",\n "gamepad_set_axis_deadzone",\n "gamepad_set_button_threshold",\n "gamepad_set_color",\n "gamepad_set_colour",\n "gamepad_set_option",\n "gamepad_set_vibration",\n "gamepad_test_mapping",\n "gc_collect",\n "gc_enable",\n "gc_get_stats",\n "gc_get_target_frame_time",\n "gc_is_enabled",\n "gc_target_frame_time",\n "gesture_double_tap_distance",\n "gesture_double_tap_time",\n "gesture_drag_distance",\n "gesture_drag_time",\n "gesture_flick_speed",\n "gesture_get_double_tap_distance",\n "gesture_get_double_tap_time",\n "gesture_get_drag_distance",\n "gesture_get_drag_time",\n "gesture_get_flick_speed",\n "gesture_get_pinch_angle_away",\n "gesture_get_pinch_angle_towards",\n "gesture_get_pinch_distance",\n "gesture_get_rotate_angle",\n "gesture_get_rotate_time",\n "gesture_get_tap_count",\n "gesture_pinch_angle_away",\n "gesture_pinch_angle_towards",\n "gesture_pinch_distance",\n "gesture_rotate_angle",\n "gesture_rotate_time",\n "gesture_tap_count",\n "get_integer",\n "get_integer_async",\n "get_login_async",\n "get_open_filename",\n "get_open_filename_ext",\n "get_save_filename",\n "get_save_filename_ext",\n "get_string",\n "get_string_async",\n "get_timer",\n "gif_add_surface",\n "gif_open",\n "gif_save",\n "gif_save_buffer",\n "gml_pragma",\n "gml_release_mode",\n "gpu_get_alphatestenable",\n "gpu_get_alphatestref",\n "gpu_get_blendenable",\n "gpu_get_blendmode",\n "gpu_get_blendmode_dest",\n "gpu_get_blendmode_destalpha",\n "gpu_get_blendmode_ext",\n "gpu_get_blendmode_ext_sepalpha",\n "gpu_get_blendmode_src",\n "gpu_get_blendmode_srcalpha",\n "gpu_get_colorwriteenable",\n "gpu_get_colourwriteenable",\n "gpu_get_cullmode",\n "gpu_get_depth",\n "gpu_get_fog",\n "gpu_get_state",\n "gpu_get_tex_filter",\n "gpu_get_tex_filter_ext",\n "gpu_get_tex_max_aniso",\n "gpu_get_tex_max_aniso_ext",\n "gpu_get_tex_max_mip",\n "gpu_get_tex_max_mip_ext",\n "gpu_get_tex_min_mip",\n "gpu_get_tex_min_mip_ext",\n "gpu_get_tex_mip_bias",\n "gpu_get_tex_mip_bias_ext",\n "gpu_get_tex_mip_enable",\n "gpu_get_tex_mip_enable_ext",\n "gpu_get_tex_mip_filter",\n "gpu_get_tex_mip_filter_ext",\n "gpu_get_tex_repeat",\n "gpu_get_tex_repeat_ext",\n "gpu_get_texfilter",\n "gpu_get_texfilter_ext",\n "gpu_get_texrepeat",\n "gpu_get_texrepeat_ext",\n "gpu_get_zfunc",\n "gpu_get_ztestenable",\n "gpu_get_zwriteenable",\n "gpu_pop_state",\n "gpu_push_state",\n "gpu_set_alphatestenable",\n "gpu_set_alphatestref",\n "gpu_set_blendenable",\n "gpu_set_blendmode",\n "gpu_set_blendmode_ext",\n "gpu_set_blendmode_ext_sepalpha",\n "gpu_set_colorwriteenable",\n "gpu_set_colourwriteenable",\n "gpu_set_cullmode",\n "gpu_set_depth",\n "gpu_set_fog",\n "gpu_set_state",\n "gpu_set_tex_filter",\n "gpu_set_tex_filter_ext",\n "gpu_set_tex_max_aniso",\n "gpu_set_tex_max_aniso_ext",\n "gpu_set_tex_max_mip",\n "gpu_set_tex_max_mip_ext",\n "gpu_set_tex_min_mip",\n "gpu_set_tex_min_mip_ext",\n "gpu_set_tex_mip_bias",\n "gpu_set_tex_mip_bias_ext",\n "gpu_set_tex_mip_enable",\n "gpu_set_tex_mip_enable_ext",\n "gpu_set_tex_mip_filter",\n "gpu_set_tex_mip_filter_ext",\n "gpu_set_tex_repeat",\n "gpu_set_tex_repeat_ext",\n "gpu_set_texfilter",\n "gpu_set_texfilter_ext",\n "gpu_set_texrepeat",\n "gpu_set_texrepeat_ext",\n "gpu_set_zfunc",\n "gpu_set_ztestenable",\n "gpu_set_zwriteenable",\n "handle_parse",\n "highscore_add",\n "highscore_clear",\n "highscore_name",\n "highscore_value",\n "http_get",\n "http_get_file",\n "http_get_request_crossorigin",\n "http_post_string",\n "http_request",\n "http_set_request_crossorigin",\n "iap_acquire",\n "iap_activate",\n "iap_consume",\n "iap_enumerate_products",\n "iap_product_details",\n "iap_purchase_details",\n "iap_restore_all",\n "iap_status",\n "ini_close",\n "ini_key_delete",\n "ini_key_exists",\n "ini_open",\n "ini_open_from_string",\n "ini_read_real",\n "ini_read_string",\n "ini_section_delete",\n "ini_section_exists",\n "ini_write_real",\n "ini_write_string",\n "instance_activate_all",\n "instance_activate_layer",\n "instance_activate_object",\n "instance_activate_region",\n "instance_change",\n "instance_copy",\n "instance_create_depth",\n "instance_create_layer",\n "instance_deactivate_all",\n "instance_deactivate_layer",\n "instance_deactivate_object",\n "instance_deactivate_region",\n "instance_destroy",\n "instance_exists",\n "instance_find",\n "instance_furthest",\n "instance_id_get",\n "instance_nearest",\n "instance_number",\n "instance_place",\n "instance_place_list",\n "instance_position",\n "instance_position_list",\n "instanceof",\n "int64",\n "io_clear",\n "irandom",\n "irandom_range",\n "is_array",\n "is_bool",\n "is_callable",\n "is_debug_overlay_open",\n "is_handle",\n "is_infinity",\n "is_instanceof",\n "is_int32",\n "is_int64",\n "is_keyboard_used_debug_overlay",\n "is_method",\n "is_mouse_over_debug_overlay",\n "is_nan",\n "is_numeric",\n "is_ptr",\n "is_real",\n "is_string",\n "is_struct",\n "is_undefined",\n "json_decode",\n "json_encode",\n "json_parse",\n "json_stringify",\n "keyboard_check",\n "keyboard_check_direct",\n "keyboard_check_pressed",\n "keyboard_check_released",\n "keyboard_clear",\n "keyboard_get_map",\n "keyboard_get_numlock",\n "keyboard_key_press",\n "keyboard_key_release",\n "keyboard_set_map",\n "keyboard_set_numlock",\n "keyboard_unset_map",\n "keyboard_virtual_height",\n "keyboard_virtual_hide",\n "keyboard_virtual_show",\n "keyboard_virtual_status",\n "layer_add_instance",\n "layer_background_alpha",\n "layer_background_blend",\n "layer_background_change",\n "layer_background_create",\n "layer_background_destroy",\n "layer_background_exists",\n "layer_background_get_alpha",\n "layer_background_get_blend",\n "layer_background_get_htiled",\n "layer_background_get_id",\n "layer_background_get_index",\n "layer_background_get_speed",\n "layer_background_get_sprite",\n "layer_background_get_stretch",\n "layer_background_get_visible",\n "layer_background_get_vtiled",\n "layer_background_get_xscale",\n "layer_background_get_yscale",\n "layer_background_htiled",\n "layer_background_index",\n "layer_background_speed",\n "layer_background_sprite",\n "layer_background_stretch",\n "layer_background_visible",\n "layer_background_vtiled",\n "layer_background_xscale",\n "layer_background_yscale",\n "layer_clear_fx",\n "layer_create",\n "layer_depth",\n "layer_destroy",\n "layer_destroy_instances",\n "layer_element_move",\n "layer_enable_fx",\n "layer_exists",\n "layer_force_draw_depth",\n "layer_fx_is_enabled",\n "layer_get_all",\n "layer_get_all_elements",\n "layer_get_depth",\n "layer_get_element_layer",\n "layer_get_element_type",\n "layer_get_forced_depth",\n "layer_get_fx",\n "layer_get_hspeed",\n "layer_get_id",\n "layer_get_id_at_depth",\n "layer_get_name",\n "layer_get_script_begin",\n "layer_get_script_end",\n "layer_get_shader",\n "layer_get_target_room",\n "layer_get_visible",\n "layer_get_vspeed",\n "layer_get_x",\n "layer_get_y",\n "layer_has_instance",\n "layer_hspeed",\n "layer_instance_get_instance",\n "layer_is_draw_depth_forced",\n "layer_reset_target_room",\n "layer_script_begin",\n "layer_script_end",\n "layer_sequence_angle",\n "layer_sequence_create",\n "layer_sequence_destroy",\n "layer_sequence_exists",\n "layer_sequence_get_angle",\n "layer_sequence_get_headdir",\n "layer_sequence_get_headpos",\n "layer_sequence_get_instance",\n "layer_sequence_get_length",\n "layer_sequence_get_sequence",\n "layer_sequence_get_speedscale",\n "layer_sequence_get_x",\n "layer_sequence_get_xscale",\n "layer_sequence_get_y",\n "layer_sequence_get_yscale",\n "layer_sequence_headdir",\n "layer_sequence_headpos",\n "layer_sequence_is_finished",\n "layer_sequence_is_paused",\n "layer_sequence_pause",\n "layer_sequence_play",\n "layer_sequence_speedscale",\n "layer_sequence_x",\n "layer_sequence_xscale",\n "layer_sequence_y",\n "layer_sequence_yscale",\n "layer_set_fx",\n "layer_set_target_room",\n "layer_set_visible",\n "layer_shader",\n "layer_sprite_alpha",\n "layer_sprite_angle",\n "layer_sprite_blend",\n "layer_sprite_change",\n "layer_sprite_create",\n "layer_sprite_destroy",\n "layer_sprite_exists",\n "layer_sprite_get_alpha",\n "layer_sprite_get_angle",\n "layer_sprite_get_blend",\n "layer_sprite_get_id",\n "layer_sprite_get_index",\n "layer_sprite_get_speed",\n "layer_sprite_get_sprite",\n "layer_sprite_get_x",\n "layer_sprite_get_xscale",\n "layer_sprite_get_y",\n "layer_sprite_get_yscale",\n "layer_sprite_index",\n "layer_sprite_speed",\n "layer_sprite_x",\n "layer_sprite_xscale",\n "layer_sprite_y",\n "layer_sprite_yscale",\n "layer_tile_alpha",\n "layer_tile_blend",\n "layer_tile_change",\n "layer_tile_create",\n "layer_tile_destroy",\n "layer_tile_exists",\n "layer_tile_get_alpha",\n "layer_tile_get_blend",\n "layer_tile_get_region",\n "layer_tile_get_sprite",\n "layer_tile_get_visible",\n "layer_tile_get_x",\n "layer_tile_get_xscale",\n "layer_tile_get_y",\n "layer_tile_get_yscale",\n "layer_tile_region",\n "layer_tile_visible",\n "layer_tile_x",\n "layer_tile_xscale",\n "layer_tile_y",\n "layer_tile_yscale",\n "layer_tilemap_create",\n "layer_tilemap_destroy",\n "layer_tilemap_exists",\n "layer_tilemap_get_id",\n "layer_vspeed",\n "layer_x",\n "layer_y",\n "lengthdir_x",\n "lengthdir_y",\n "lerp",\n "lin_to_db",\n "ln",\n "load_csv",\n "log10",\n "log2",\n "logn",\n "make_color_hsv",\n "make_color_rgb",\n "make_colour_hsv",\n "make_colour_rgb",\n "math_get_epsilon",\n "math_set_epsilon",\n "matrix_build",\n "matrix_build_identity",\n "matrix_build_lookat",\n "matrix_build_projection_ortho",\n "matrix_build_projection_perspective",\n "matrix_build_projection_perspective_fov",\n "matrix_get",\n "matrix_multiply",\n "matrix_set",\n "matrix_stack_clear",\n "matrix_stack_is_empty",\n "matrix_stack_pop",\n "matrix_stack_push",\n "matrix_stack_set",\n "matrix_stack_top",\n "matrix_transform_vertex",\n "max",\n "md5_file",\n "md5_string_unicode",\n "md5_string_utf8",\n "mean",\n "median",\n "merge_color",\n "merge_colour",\n "method",\n "method_call",\n "method_get_index",\n "method_get_self",\n "min",\n "motion_add",\n "motion_set",\n "mouse_check_button",\n "mouse_check_button_pressed",\n "mouse_check_button_released",\n "mouse_clear",\n "mouse_wheel_down",\n "mouse_wheel_up",\n "move_and_collide",\n "move_bounce_all",\n "move_bounce_solid",\n "move_contact_all",\n "move_contact_solid",\n "move_outside_all",\n "move_outside_solid",\n "move_random",\n "move_snap",\n "move_towards_point",\n "move_wrap",\n "mp_grid_add_cell",\n "mp_grid_add_instances",\n "mp_grid_add_rectangle",\n "mp_grid_clear_all",\n "mp_grid_clear_cell",\n "mp_grid_clear_rectangle",\n "mp_grid_create",\n "mp_grid_destroy",\n "mp_grid_draw",\n "mp_grid_get_cell",\n "mp_grid_path",\n "mp_grid_to_ds_grid",\n "mp_linear_path",\n "mp_linear_path_object",\n "mp_linear_step",\n "mp_linear_step_object",\n "mp_potential_path",\n "mp_potential_path_object",\n "mp_potential_settings",\n "mp_potential_step",\n "mp_potential_step_object",\n "nameof",\n "network_connect",\n "network_connect_async",\n "network_connect_raw",\n "network_connect_raw_async",\n "network_create_server",\n "network_create_server_raw",\n "network_create_socket",\n "network_create_socket_ext",\n "network_destroy",\n "network_resolve",\n "network_send_broadcast",\n "network_send_packet",\n "network_send_raw",\n "network_send_udp",\n "network_send_udp_raw",\n "network_set_config",\n "network_set_timeout",\n "object_exists",\n "object_get_mask",\n "object_get_name",\n "object_get_parent",\n "object_get_persistent",\n "object_get_physics",\n "object_get_solid",\n "object_get_sprite",\n "object_get_visible",\n "object_is_ancestor",\n "object_set_mask",\n "object_set_persistent",\n "object_set_solid",\n "object_set_sprite",\n "object_set_visible",\n "ord",\n "os_check_permission",\n "os_get_config",\n "os_get_info",\n "os_get_language",\n "os_get_region",\n "os_is_network_connected",\n "os_is_paused",\n "os_lock_orientation",\n "os_powersave_enable",\n "os_request_permission",\n "os_set_orientation_lock",\n "parameter_count",\n "parameter_string",\n "part_emitter_burst",\n "part_emitter_clear",\n "part_emitter_create",\n "part_emitter_delay",\n "part_emitter_destroy",\n "part_emitter_destroy_all",\n "part_emitter_enable",\n "part_emitter_exists",\n "part_emitter_interval",\n "part_emitter_region",\n "part_emitter_relative",\n "part_emitter_stream",\n "part_particles_burst",\n "part_particles_clear",\n "part_particles_count",\n "part_particles_create",\n "part_particles_create_color",\n "part_particles_create_colour",\n "part_system_angle",\n "part_system_automatic_draw",\n "part_system_automatic_update",\n "part_system_clear",\n "part_system_color",\n "part_system_colour",\n "part_system_create",\n "part_system_create_layer",\n "part_system_depth",\n "part_system_destroy",\n "part_system_draw_order",\n "part_system_drawit",\n "part_system_exists",\n "part_system_get_info",\n "part_system_get_layer",\n "part_system_global_space",\n "part_system_layer",\n "part_system_position",\n "part_system_update",\n "part_type_alpha1",\n "part_type_alpha2",\n "part_type_alpha3",\n "part_type_blend",\n "part_type_clear",\n "part_type_color1",\n "part_type_color2",\n "part_type_color3",\n "part_type_color_hsv",\n "part_type_color_mix",\n "part_type_color_rgb",\n "part_type_colour1",\n "part_type_colour2",\n "part_type_colour3",\n "part_type_colour_hsv",\n "part_type_colour_mix",\n "part_type_colour_rgb",\n "part_type_create",\n "part_type_death",\n "part_type_destroy",\n "part_type_direction",\n "part_type_exists",\n "part_type_gravity",\n "part_type_life",\n "part_type_orientation",\n "part_type_scale",\n "part_type_shape",\n "part_type_size",\n "part_type_size_x",\n "part_type_size_y",\n "part_type_speed",\n "part_type_sprite",\n "part_type_step",\n "part_type_subimage",\n "particle_exists",\n "particle_get_info",\n "path_add",\n "path_add_point",\n "path_append",\n "path_assign",\n "path_change_point",\n "path_clear_points",\n "path_delete",\n "path_delete_point",\n "path_duplicate",\n "path_end",\n "path_exists",\n "path_flip",\n "path_get_closed",\n "path_get_kind",\n "path_get_length",\n "path_get_name",\n "path_get_number",\n "path_get_point_speed",\n "path_get_point_x",\n "path_get_point_y",\n "path_get_precision",\n "path_get_speed",\n "path_get_x",\n "path_get_y",\n "path_insert_point",\n "path_mirror",\n "path_rescale",\n "path_reverse",\n "path_rotate",\n "path_set_closed",\n "path_set_kind",\n "path_set_precision",\n "path_shift",\n "path_start",\n "physics_apply_angular_impulse",\n "physics_apply_force",\n "physics_apply_impulse",\n "physics_apply_local_force",\n "physics_apply_local_impulse",\n "physics_apply_torque",\n "physics_draw_debug",\n "physics_fixture_add_point",\n "physics_fixture_bind",\n "physics_fixture_bind_ext",\n "physics_fixture_create",\n "physics_fixture_delete",\n "physics_fixture_set_angular_damping",\n "physics_fixture_set_awake",\n "physics_fixture_set_box_shape",\n "physics_fixture_set_chain_shape",\n "physics_fixture_set_circle_shape",\n "physics_fixture_set_collision_group",\n "physics_fixture_set_density",\n "physics_fixture_set_edge_shape",\n "physics_fixture_set_friction",\n "physics_fixture_set_kinematic",\n "physics_fixture_set_linear_damping",\n "physics_fixture_set_polygon_shape",\n "physics_fixture_set_restitution",\n "physics_fixture_set_sensor",\n "physics_get_density",\n "physics_get_friction",\n "physics_get_restitution",\n "physics_joint_delete",\n "physics_joint_distance_create",\n "physics_joint_enable_motor",\n "physics_joint_friction_create",\n "physics_joint_gear_create",\n "physics_joint_get_value",\n "physics_joint_prismatic_create",\n "physics_joint_pulley_create",\n "physics_joint_revolute_create",\n "physics_joint_rope_create",\n "physics_joint_set_value",\n "physics_joint_weld_create",\n "physics_joint_wheel_create",\n "physics_mass_properties",\n "physics_particle_count",\n "physics_particle_create",\n "physics_particle_delete",\n "physics_particle_delete_region_box",\n "physics_particle_delete_region_circle",\n "physics_particle_delete_region_poly",\n "physics_particle_draw",\n "physics_particle_draw_ext",\n "physics_particle_get_damping",\n "physics_particle_get_data",\n "physics_particle_get_data_particle",\n "physics_particle_get_density",\n "physics_particle_get_gravity_scale",\n "physics_particle_get_group_flags",\n "physics_particle_get_max_count",\n "physics_particle_get_radius",\n "physics_particle_group_add_point",\n "physics_particle_group_begin",\n "physics_particle_group_box",\n "physics_particle_group_circle",\n "physics_particle_group_count",\n "physics_particle_group_delete",\n "physics_particle_group_end",\n "physics_particle_group_get_ang_vel",\n "physics_particle_group_get_angle",\n "physics_particle_group_get_centre_x",\n "physics_particle_group_get_centre_y",\n "physics_particle_group_get_data",\n "physics_particle_group_get_inertia",\n "physics_particle_group_get_mass",\n "physics_particle_group_get_vel_x",\n "physics_particle_group_get_vel_y",\n "physics_particle_group_get_x",\n "physics_particle_group_get_y",\n "physics_particle_group_join",\n "physics_particle_group_polygon",\n "physics_particle_set_category_flags",\n "physics_particle_set_damping",\n "physics_particle_set_density",\n "physics_particle_set_flags",\n "physics_particle_set_gravity_scale",\n "physics_particle_set_group_flags",\n "physics_particle_set_max_count",\n "physics_particle_set_radius",\n "physics_pause_enable",\n "physics_remove_fixture",\n "physics_set_density",\n "physics_set_friction",\n "physics_set_restitution",\n "physics_test_overlap",\n "physics_world_create",\n "physics_world_draw_debug",\n "physics_world_gravity",\n "physics_world_update_iterations",\n "physics_world_update_speed",\n "place_empty",\n "place_free",\n "place_meeting",\n "place_snapped",\n "point_direction",\n "point_distance",\n "point_distance_3d",\n "point_in_circle",\n "point_in_rectangle",\n "point_in_triangle",\n "position_change",\n "position_destroy",\n "position_empty",\n "position_meeting",\n "power",\n "ptr",\n "radtodeg",\n "random",\n "random_get_seed",\n "random_range",\n "random_set_seed",\n "randomise",\n "randomize",\n "real",\n "rectangle_in_circle",\n "rectangle_in_rectangle",\n "rectangle_in_triangle",\n "ref_create",\n "rollback_chat",\n "rollback_create_game",\n "rollback_define_extra_network_latency",\n "rollback_define_input",\n "rollback_define_input_frame_delay",\n "rollback_define_mock_input",\n "rollback_define_player",\n "rollback_display_events",\n "rollback_get_info",\n "rollback_get_input",\n "rollback_get_player_prefs",\n "rollback_join_game",\n "rollback_leave_game",\n "rollback_set_player_prefs",\n "rollback_start_game",\n "rollback_sync_on_frame",\n "rollback_use_late_join",\n "rollback_use_manual_start",\n "rollback_use_player_prefs",\n "rollback_use_random_input",\n "room_add",\n "room_assign",\n "room_duplicate",\n "room_exists",\n "room_get_camera",\n "room_get_info",\n "room_get_name",\n "room_get_viewport",\n "room_goto",\n "room_goto_next",\n "room_goto_previous",\n "room_instance_add",\n "room_instance_clear",\n "room_next",\n "room_previous",\n "room_restart",\n "room_set_camera",\n "room_set_height",\n "room_set_persistent",\n "room_set_view_enabled",\n "room_set_viewport",\n "room_set_width",\n "round",\n "scheduler_resolution_get",\n "scheduler_resolution_set",\n "screen_save",\n "screen_save_part",\n "script_execute",\n "script_execute_ext",\n "script_exists",\n "script_get_name",\n "sequence_create",\n "sequence_destroy",\n "sequence_exists",\n "sequence_get",\n "sequence_get_objects",\n "sequence_instance_override_object",\n "sequence_keyframe_new",\n "sequence_keyframedata_new",\n "sequence_track_new",\n "sha1_file",\n "sha1_string_unicode",\n "sha1_string_utf8",\n "shader_current",\n "shader_enable_corner_id",\n "shader_get_name",\n "shader_get_sampler_index",\n "shader_get_uniform",\n "shader_is_compiled",\n "shader_reset",\n "shader_set",\n "shader_set_uniform_f",\n "shader_set_uniform_f_array",\n "shader_set_uniform_f_buffer",\n "shader_set_uniform_i",\n "shader_set_uniform_i_array",\n "shader_set_uniform_matrix",\n "shader_set_uniform_matrix_array",\n "shaders_are_supported",\n "shop_leave_rating",\n "show_debug_message",\n "show_debug_message_ext",\n "show_debug_overlay",\n "show_error",\n "show_message",\n "show_message_async",\n "show_question",\n "show_question_async",\n "sign",\n "sin",\n "skeleton_animation_clear",\n "skeleton_animation_get",\n "skeleton_animation_get_duration",\n "skeleton_animation_get_event_frames",\n "skeleton_animation_get_ext",\n "skeleton_animation_get_frame",\n "skeleton_animation_get_frames",\n "skeleton_animation_get_position",\n "skeleton_animation_is_finished",\n "skeleton_animation_is_looping",\n "skeleton_animation_list",\n "skeleton_animation_mix",\n "skeleton_animation_set",\n "skeleton_animation_set_ext",\n "skeleton_animation_set_frame",\n "skeleton_animation_set_position",\n "skeleton_attachment_create",\n "skeleton_attachment_create_color",\n "skeleton_attachment_create_colour",\n "skeleton_attachment_destroy",\n "skeleton_attachment_exists",\n "skeleton_attachment_get",\n "skeleton_attachment_replace",\n "skeleton_attachment_replace_color",\n "skeleton_attachment_replace_colour",\n "skeleton_attachment_set",\n "skeleton_bone_data_get",\n "skeleton_bone_data_set",\n "skeleton_bone_list",\n "skeleton_bone_state_get",\n "skeleton_bone_state_set",\n "skeleton_collision_draw_set",\n "skeleton_find_slot",\n "skeleton_get_bounds",\n "skeleton_get_minmax",\n "skeleton_get_num_bounds",\n "skeleton_skin_create",\n "skeleton_skin_get",\n "skeleton_skin_list",\n "skeleton_skin_set",\n "skeleton_slot_alpha_get",\n "skeleton_slot_color_get",\n "skeleton_slot_color_set",\n "skeleton_slot_colour_get",\n "skeleton_slot_colour_set",\n "skeleton_slot_data",\n "skeleton_slot_data_instance",\n "skeleton_slot_list",\n "sprite_add",\n "sprite_add_ext",\n "sprite_add_from_surface",\n "sprite_assign",\n "sprite_collision_mask",\n "sprite_create_from_surface",\n "sprite_delete",\n "sprite_duplicate",\n "sprite_exists",\n "sprite_flush",\n "sprite_flush_multi",\n "sprite_get_bbox_bottom",\n "sprite_get_bbox_left",\n "sprite_get_bbox_mode",\n "sprite_get_bbox_right",\n "sprite_get_bbox_top",\n "sprite_get_height",\n "sprite_get_info",\n "sprite_get_name",\n "sprite_get_nineslice",\n "sprite_get_number",\n "sprite_get_speed",\n "sprite_get_speed_type",\n "sprite_get_texture",\n "sprite_get_tpe",\n "sprite_get_uvs",\n "sprite_get_width",\n "sprite_get_xoffset",\n "sprite_get_yoffset",\n "sprite_merge",\n "sprite_nineslice_create",\n "sprite_prefetch",\n "sprite_prefetch_multi",\n "sprite_replace",\n "sprite_save",\n "sprite_save_strip",\n "sprite_set_alpha_from_sprite",\n "sprite_set_bbox",\n "sprite_set_bbox_mode",\n "sprite_set_cache_size",\n "sprite_set_cache_size_ext",\n "sprite_set_nineslice",\n "sprite_set_offset",\n "sprite_set_speed",\n "sqr",\n "sqrt",\n "static_get",\n "static_set",\n "string",\n "string_byte_at",\n "string_byte_length",\n "string_char_at",\n "string_concat",\n "string_concat_ext",\n "string_copy",\n "string_count",\n "string_delete",\n "string_digits",\n "string_ends_with",\n "string_ext",\n "string_foreach",\n "string_format",\n "string_hash_to_newline",\n "string_height",\n "string_height_ext",\n "string_insert",\n "string_join",\n "string_join_ext",\n "string_last_pos",\n "string_last_pos_ext",\n "string_length",\n "string_letters",\n "string_lettersdigits",\n "string_lower",\n "string_ord_at",\n "string_pos",\n "string_pos_ext",\n "string_repeat",\n "string_replace",\n "string_replace_all",\n "string_set_byte_at",\n "string_split",\n "string_split_ext",\n "string_starts_with",\n "string_trim",\n "string_trim_end",\n "string_trim_start",\n "string_upper",\n "string_width",\n "string_width_ext",\n "struct_exists",\n "struct_foreach",\n "struct_get",\n "struct_get_from_hash",\n "struct_get_names",\n "struct_names_count",\n "struct_remove",\n "struct_set",\n "struct_set_from_hash",\n "surface_copy",\n "surface_copy_part",\n "surface_create",\n "surface_create_ext",\n "surface_depth_disable",\n "surface_exists",\n "surface_format_is_supported",\n "surface_free",\n "surface_get_depth_disable",\n "surface_get_format",\n "surface_get_height",\n "surface_get_target",\n "surface_get_target_ext",\n "surface_get_texture",\n "surface_get_width",\n "surface_getpixel",\n "surface_getpixel_ext",\n "surface_reset_target",\n "surface_resize",\n "surface_save",\n "surface_save_part",\n "surface_set_target",\n "surface_set_target_ext",\n "tag_get_asset_ids",\n "tag_get_assets",\n "tan",\n "texture_debug_messages",\n "texture_flush",\n "texture_get_height",\n "texture_get_texel_height",\n "texture_get_texel_width",\n "texture_get_uvs",\n "texture_get_width",\n "texture_global_scale",\n "texture_is_ready",\n "texture_prefetch",\n "texture_set_stage",\n "texturegroup_get_fonts",\n "texturegroup_get_names",\n "texturegroup_get_sprites",\n "texturegroup_get_status",\n "texturegroup_get_textures",\n "texturegroup_get_tilesets",\n "texturegroup_load",\n "texturegroup_set_mode",\n "texturegroup_unload",\n "tile_get_empty",\n "tile_get_flip",\n "tile_get_index",\n "tile_get_mirror",\n "tile_get_rotate",\n "tile_set_empty",\n "tile_set_flip",\n "tile_set_index",\n "tile_set_mirror",\n "tile_set_rotate",\n "tilemap_clear",\n "tilemap_get",\n "tilemap_get_at_pixel",\n "tilemap_get_cell_x_at_pixel",\n "tilemap_get_cell_y_at_pixel",\n "tilemap_get_frame",\n "tilemap_get_global_mask",\n "tilemap_get_height",\n "tilemap_get_mask",\n "tilemap_get_tile_height",\n "tilemap_get_tile_width",\n "tilemap_get_tileset",\n "tilemap_get_width",\n "tilemap_get_x",\n "tilemap_get_y",\n "tilemap_set",\n "tilemap_set_at_pixel",\n "tilemap_set_global_mask",\n "tilemap_set_height",\n "tilemap_set_mask",\n "tilemap_set_width",\n "tilemap_tileset",\n "tilemap_x",\n "tilemap_y",\n "tileset_get_info",\n "tileset_get_name",\n "tileset_get_texture",\n "tileset_get_uvs",\n "time_bpm_to_seconds",\n "time_seconds_to_bpm",\n "time_source_create",\n "time_source_destroy",\n "time_source_exists",\n "time_source_get_children",\n "time_source_get_parent",\n "time_source_get_period",\n "time_source_get_reps_completed",\n "time_source_get_reps_remaining",\n "time_source_get_state",\n "time_source_get_time_remaining",\n "time_source_get_units",\n "time_source_pause",\n "time_source_reconfigure",\n "time_source_reset",\n "time_source_resume",\n "time_source_start",\n "time_source_stop",\n "timeline_add",\n "timeline_clear",\n "timeline_delete",\n "timeline_exists",\n "timeline_get_name",\n "timeline_max_moment",\n "timeline_moment_add_script",\n "timeline_moment_clear",\n "timeline_size",\n "typeof",\n "url_get_domain",\n "url_open",\n "url_open_ext",\n "url_open_full",\n "uwp_device_touchscreen_available",\n "uwp_livetile_badge_clear",\n "uwp_livetile_badge_notification",\n "uwp_livetile_notification_begin",\n "uwp_livetile_notification_end",\n "uwp_livetile_notification_expiry",\n "uwp_livetile_notification_image_add",\n "uwp_livetile_notification_secondary_begin",\n "uwp_livetile_notification_tag",\n "uwp_livetile_notification_template_add",\n "uwp_livetile_notification_text_add",\n "uwp_livetile_queue_enable",\n "uwp_livetile_tile_clear",\n "uwp_secondarytile_badge_clear",\n "uwp_secondarytile_badge_notification",\n "uwp_secondarytile_delete",\n "uwp_secondarytile_pin",\n "uwp_secondarytile_tile_clear",\n "variable_clone",\n "variable_get_hash",\n "variable_global_exists",\n "variable_global_get",\n "variable_global_set",\n "variable_instance_exists",\n "variable_instance_get",\n "variable_instance_get_names",\n "variable_instance_names_count",\n "variable_instance_set",\n "variable_struct_exists",\n "variable_struct_get",\n "variable_struct_get_names",\n "variable_struct_names_count",\n "variable_struct_remove",\n "variable_struct_set",\n "vertex_argb",\n "vertex_begin",\n "vertex_color",\n "vertex_colour",\n "vertex_create_buffer",\n "vertex_create_buffer_ext",\n "vertex_create_buffer_from_buffer",\n "vertex_create_buffer_from_buffer_ext",\n "vertex_delete_buffer",\n "vertex_end",\n "vertex_float1",\n "vertex_float2",\n "vertex_float3",\n "vertex_float4",\n "vertex_format_add_color",\n "vertex_format_add_colour",\n "vertex_format_add_custom",\n "vertex_format_add_normal",\n "vertex_format_add_position",\n "vertex_format_add_position_3d",\n "vertex_format_add_texcoord",\n "vertex_format_begin",\n "vertex_format_delete",\n "vertex_format_end",\n "vertex_format_get_info",\n "vertex_freeze",\n "vertex_get_buffer_size",\n "vertex_get_number",\n "vertex_normal",\n "vertex_position",\n "vertex_position_3d",\n "vertex_submit",\n "vertex_submit_ext",\n "vertex_texcoord",\n "vertex_ubyte4",\n "vertex_update_buffer_from_buffer",\n "vertex_update_buffer_from_vertex",\n "video_close",\n "video_draw",\n "video_enable_loop",\n "video_get_duration",\n "video_get_format",\n "video_get_position",\n "video_get_status",\n "video_get_volume",\n "video_is_looping",\n "video_open",\n "video_pause",\n "video_resume",\n "video_seek_to",\n "video_set_volume",\n "view_get_camera",\n "view_get_hport",\n "view_get_surface_id",\n "view_get_visible",\n "view_get_wport",\n "view_get_xport",\n "view_get_yport",\n "view_set_camera",\n "view_set_hport",\n "view_set_surface_id",\n "view_set_visible",\n "view_set_wport",\n "view_set_xport",\n "view_set_yport",\n "virtual_key_add",\n "virtual_key_delete",\n "virtual_key_hide",\n "virtual_key_show",\n "wallpaper_set_config",\n "wallpaper_set_subscriptions",\n "weak_ref_alive",\n "weak_ref_any_alive",\n "weak_ref_create",\n "window_center",\n "window_device",\n "window_enable_borderless_fullscreen",\n "window_get_borderless_fullscreen",\n "window_get_caption",\n "window_get_color",\n "window_get_colour",\n "window_get_cursor",\n "window_get_fullscreen",\n "window_get_height",\n "window_get_showborder",\n "window_get_visible_rects",\n "window_get_width",\n "window_get_x",\n "window_get_y",\n "window_handle",\n "window_has_focus",\n "window_mouse_get_delta_x",\n "window_mouse_get_delta_y",\n "window_mouse_get_locked",\n "window_mouse_get_x",\n "window_mouse_get_y",\n "window_mouse_set",\n "window_mouse_set_locked",\n "window_set_caption",\n "window_set_color",\n "window_set_colour",\n "window_set_cursor",\n "window_set_fullscreen",\n "window_set_max_height",\n "window_set_max_width",\n "window_set_min_height",\n "window_set_min_width",\n "window_set_position",\n "window_set_rectangle",\n "window_set_showborder",\n "window_set_size",\n "window_view_mouse_get_x",\n "window_view_mouse_get_y",\n "window_views_mouse_get_x",\n "window_views_mouse_get_y",\n "winphone_tile_background_color",\n "winphone_tile_background_colour",\n "zip_add_file",\n "zip_create",\n "zip_save",\n "zip_unzip",\n "zip_unzip_async"\n ];\n const SYMBOLS = [\n "AudioEffect",\n "AudioEffectType",\n "AudioLFOType",\n "GM_build_date",\n "GM_build_type",\n "GM_is_sandboxed",\n "GM_project_filename",\n "GM_runtime_version",\n "GM_version",\n "NaN",\n "_GMFILE_",\n "_GMFUNCTION_",\n "_GMLINE_",\n "alignmentH",\n "alignmentV",\n "all",\n "animcurvetype_bezier",\n "animcurvetype_catmullrom",\n "animcurvetype_linear",\n "asset_animationcurve",\n "asset_font",\n "asset_object",\n "asset_path",\n "asset_room",\n "asset_script",\n "asset_sequence",\n "asset_shader",\n "asset_sound",\n "asset_sprite",\n "asset_tiles",\n "asset_timeline",\n "asset_unknown",\n "audio_3D",\n "audio_bus_main",\n "audio_falloff_exponent_distance",\n "audio_falloff_exponent_distance_clamped",\n "audio_falloff_exponent_distance_scaled",\n "audio_falloff_inverse_distance",\n "audio_falloff_inverse_distance_clamped",\n "audio_falloff_inverse_distance_scaled",\n "audio_falloff_linear_distance",\n "audio_falloff_linear_distance_clamped",\n "audio_falloff_none",\n "audio_mono",\n "audio_stereo",\n "bboxkind_diamond",\n "bboxkind_ellipse",\n "bboxkind_precise",\n "bboxkind_rectangular",\n "bboxmode_automatic",\n "bboxmode_fullimage",\n "bboxmode_manual",\n "bm_add",\n "bm_dest_alpha",\n "bm_dest_color",\n "bm_dest_colour",\n "bm_inv_dest_alpha",\n "bm_inv_dest_color",\n "bm_inv_dest_colour",\n "bm_inv_src_alpha",\n "bm_inv_src_color",\n "bm_inv_src_colour",\n "bm_max",\n "bm_normal",\n "bm_one",\n "bm_src_alpha",\n "bm_src_alpha_sat",\n "bm_src_color",\n "bm_src_colour",\n "bm_subtract",\n "bm_zero",\n "browser_chrome",\n "browser_edge",\n "browser_firefox",\n "browser_ie",\n "browser_ie_mobile",\n "browser_not_a_browser",\n "browser_opera",\n "browser_safari",\n "browser_safari_mobile",\n "browser_tizen",\n "browser_unknown",\n "browser_windows_store",\n "buffer_bool",\n "buffer_f16",\n "buffer_f32",\n "buffer_f64",\n "buffer_fast",\n "buffer_fixed",\n "buffer_grow",\n "buffer_s16",\n "buffer_s32",\n "buffer_s8",\n "buffer_seek_end",\n "buffer_seek_relative",\n "buffer_seek_start",\n "buffer_string",\n "buffer_text",\n "buffer_u16",\n "buffer_u32",\n "buffer_u64",\n "buffer_u8",\n "buffer_vbuffer",\n "buffer_wrap",\n "c_aqua",\n "c_black",\n "c_blue",\n "c_dkgray",\n "c_dkgrey",\n "c_fuchsia",\n "c_gray",\n "c_green",\n "c_grey",\n "c_lime",\n "c_ltgray",\n "c_ltgrey",\n "c_maroon",\n "c_navy",\n "c_olive",\n "c_orange",\n "c_purple",\n "c_red",\n "c_silver",\n "c_teal",\n "c_white",\n "c_yellow",\n "cache_directory",\n "characterSpacing",\n "cmpfunc_always",\n "cmpfunc_equal",\n "cmpfunc_greater",\n "cmpfunc_greaterequal",\n "cmpfunc_less",\n "cmpfunc_lessequal",\n "cmpfunc_never",\n "cmpfunc_notequal",\n "coreColor",\n "coreColour",\n "cr_appstart",\n "cr_arrow",\n "cr_beam",\n "cr_cross",\n "cr_default",\n "cr_drag",\n "cr_handpoint",\n "cr_hourglass",\n "cr_none",\n "cr_size_all",\n "cr_size_nesw",\n "cr_size_ns",\n "cr_size_nwse",\n "cr_size_we",\n "cr_uparrow",\n "cull_clockwise",\n "cull_counterclockwise",\n "cull_noculling",\n "device_emulator",\n "device_ios_ipad",\n "device_ios_ipad_retina",\n "device_ios_iphone",\n "device_ios_iphone5",\n "device_ios_iphone6",\n "device_ios_iphone6plus",\n "device_ios_iphone_retina",\n "device_ios_unknown",\n "device_tablet",\n "display_landscape",\n "display_landscape_flipped",\n "display_portrait",\n "display_portrait_flipped",\n "dll_cdecl",\n "dll_stdcall",\n "dropShadowEnabled",\n "dropShadowEnabled",\n "ds_type_grid",\n "ds_type_list",\n "ds_type_map",\n "ds_type_priority",\n "ds_type_queue",\n "ds_type_stack",\n "ef_cloud",\n "ef_ellipse",\n "ef_explosion",\n "ef_firework",\n "ef_flare",\n "ef_rain",\n "ef_ring",\n "ef_smoke",\n "ef_smokeup",\n "ef_snow",\n "ef_spark",\n "ef_star",\n "effectsEnabled",\n "effectsEnabled",\n "ev_alarm",\n "ev_animation_end",\n "ev_animation_event",\n "ev_animation_update",\n "ev_async_audio_playback",\n "ev_async_audio_playback_ended",\n "ev_async_audio_recording",\n "ev_async_dialog",\n "ev_async_push_notification",\n "ev_async_save_load",\n "ev_async_save_load",\n "ev_async_social",\n "ev_async_system_event",\n "ev_async_web",\n "ev_async_web_cloud",\n "ev_async_web_iap",\n "ev_async_web_image_load",\n "ev_async_web_networking",\n "ev_async_web_steam",\n "ev_audio_playback",\n "ev_audio_playback_ended",\n "ev_audio_recording",\n "ev_boundary",\n "ev_boundary_view0",\n "ev_boundary_view1",\n "ev_boundary_view2",\n "ev_boundary_view3",\n "ev_boundary_view4",\n "ev_boundary_view5",\n "ev_boundary_view6",\n "ev_boundary_view7",\n "ev_broadcast_message",\n "ev_cleanup",\n "ev_collision",\n "ev_create",\n "ev_destroy",\n "ev_dialog_async",\n "ev_draw",\n "ev_draw_begin",\n "ev_draw_end",\n "ev_draw_normal",\n "ev_draw_post",\n "ev_draw_pre",\n "ev_end_of_path",\n "ev_game_end",\n "ev_game_start",\n "ev_gesture",\n "ev_gesture_double_tap",\n "ev_gesture_drag_end",\n "ev_gesture_drag_start",\n "ev_gesture_dragging",\n "ev_gesture_flick",\n "ev_gesture_pinch_end",\n "ev_gesture_pinch_in",\n "ev_gesture_pinch_out",\n "ev_gesture_pinch_start",\n "ev_gesture_rotate_end",\n "ev_gesture_rotate_start",\n "ev_gesture_rotating",\n "ev_gesture_tap",\n "ev_global_gesture_double_tap",\n "ev_global_gesture_drag_end",\n "ev_global_gesture_drag_start",\n "ev_global_gesture_dragging",\n "ev_global_gesture_flick",\n "ev_global_gesture_pinch_end",\n "ev_global_gesture_pinch_in",\n "ev_global_gesture_pinch_out",\n "ev_global_gesture_pinch_start",\n "ev_global_gesture_rotate_end",\n "ev_global_gesture_rotate_start",\n "ev_global_gesture_rotating",\n "ev_global_gesture_tap",\n "ev_global_left_button",\n "ev_global_left_press",\n "ev_global_left_release",\n "ev_global_middle_button",\n "ev_global_middle_press",\n "ev_global_middle_release",\n "ev_global_right_button",\n "ev_global_right_press",\n "ev_global_right_release",\n "ev_gui",\n "ev_gui_begin",\n "ev_gui_end",\n "ev_joystick1_button1",\n "ev_joystick1_button2",\n "ev_joystick1_button3",\n "ev_joystick1_button4",\n "ev_joystick1_button5",\n "ev_joystick1_button6",\n "ev_joystick1_button7",\n "ev_joystick1_button8",\n "ev_joystick1_down",\n "ev_joystick1_left",\n "ev_joystick1_right",\n "ev_joystick1_up",\n "ev_joystick2_button1",\n "ev_joystick2_button2",\n "ev_joystick2_button3",\n "ev_joystick2_button4",\n "ev_joystick2_button5",\n "ev_joystick2_button6",\n "ev_joystick2_button7",\n "ev_joystick2_button8",\n "ev_joystick2_down",\n "ev_joystick2_left",\n "ev_joystick2_right",\n "ev_joystick2_up",\n "ev_keyboard",\n "ev_keypress",\n "ev_keyrelease",\n "ev_left_button",\n "ev_left_press",\n "ev_left_release",\n "ev_middle_button",\n "ev_middle_press",\n "ev_middle_release",\n "ev_mouse",\n "ev_mouse_enter",\n "ev_mouse_leave",\n "ev_mouse_wheel_down",\n "ev_mouse_wheel_up",\n "ev_no_button",\n "ev_no_more_health",\n "ev_no_more_lives",\n "ev_other",\n "ev_outside",\n "ev_outside_view0",\n "ev_outside_view1",\n "ev_outside_view2",\n "ev_outside_view3",\n "ev_outside_view4",\n "ev_outside_view5",\n "ev_outside_view6",\n "ev_outside_view7",\n "ev_pre_create",\n "ev_push_notification",\n "ev_right_button",\n "ev_right_press",\n "ev_right_release",\n "ev_room_end",\n "ev_room_start",\n "ev_social",\n "ev_step",\n "ev_step_begin",\n "ev_step_end",\n "ev_step_normal",\n "ev_system_event",\n "ev_trigger",\n "ev_user0",\n "ev_user1",\n "ev_user10",\n "ev_user11",\n "ev_user12",\n "ev_user13",\n "ev_user14",\n "ev_user15",\n "ev_user2",\n "ev_user3",\n "ev_user4",\n "ev_user5",\n "ev_user6",\n "ev_user7",\n "ev_user8",\n "ev_user9",\n "ev_web_async",\n "ev_web_cloud",\n "ev_web_iap",\n "ev_web_image_load",\n "ev_web_networking",\n "ev_web_sound_load",\n "ev_web_steam",\n "fa_archive",\n "fa_bottom",\n "fa_center",\n "fa_directory",\n "fa_hidden",\n "fa_left",\n "fa_middle",\n "fa_none",\n "fa_readonly",\n "fa_right",\n "fa_sysfile",\n "fa_top",\n "fa_volumeid",\n "false",\n "frameSizeX",\n "frameSizeY",\n "gamespeed_fps",\n "gamespeed_microseconds",\n "global",\n "glowColor",\n "glowColour",\n "glowEnabled",\n "glowEnabled",\n "glowEnd",\n "glowStart",\n "gp_axis_acceleration_x",\n "gp_axis_acceleration_y",\n "gp_axis_acceleration_z",\n "gp_axis_angular_velocity_x",\n "gp_axis_angular_velocity_y",\n "gp_axis_angular_velocity_z",\n "gp_axis_orientation_w",\n "gp_axis_orientation_x",\n "gp_axis_orientation_y",\n "gp_axis_orientation_z",\n "gp_axislh",\n "gp_axislv",\n "gp_axisrh",\n "gp_axisrv",\n "gp_face1",\n "gp_face2",\n "gp_face3",\n "gp_face4",\n "gp_padd",\n "gp_padl",\n "gp_padr",\n "gp_padu",\n "gp_select",\n "gp_shoulderl",\n "gp_shoulderlb",\n "gp_shoulderr",\n "gp_shoulderrb",\n "gp_start",\n "gp_stickl",\n "gp_stickr",\n "iap_available",\n "iap_canceled",\n "iap_ev_consume",\n "iap_ev_product",\n "iap_ev_purchase",\n "iap_ev_restore",\n "iap_ev_storeload",\n "iap_failed",\n "iap_purchased",\n "iap_refunded",\n "iap_status_available",\n "iap_status_loading",\n "iap_status_processing",\n "iap_status_restoring",\n "iap_status_unavailable",\n "iap_status_uninitialised",\n "iap_storeload_failed",\n "iap_storeload_ok",\n "iap_unavailable",\n "infinity",\n "kbv_autocapitalize_characters",\n "kbv_autocapitalize_none",\n "kbv_autocapitalize_sentences",\n "kbv_autocapitalize_words",\n "kbv_returnkey_continue",\n "kbv_returnkey_default",\n "kbv_returnkey_done",\n "kbv_returnkey_emergency",\n "kbv_returnkey_go",\n "kbv_returnkey_google",\n "kbv_returnkey_join",\n "kbv_returnkey_next",\n "kbv_returnkey_route",\n "kbv_returnkey_search",\n "kbv_returnkey_send",\n "kbv_returnkey_yahoo",\n "kbv_type_ascii",\n "kbv_type_default",\n "kbv_type_email",\n "kbv_type_numbers",\n "kbv_type_phone",\n "kbv_type_phone_name",\n "kbv_type_url",\n "layerelementtype_background",\n "layerelementtype_instance",\n "layerelementtype_oldtilemap",\n "layerelementtype_particlesystem",\n "layerelementtype_sequence",\n "layerelementtype_sprite",\n "layerelementtype_tile",\n "layerelementtype_tilemap",\n "layerelementtype_undefined",\n "leaderboard_type_number",\n "leaderboard_type_time_mins_secs",\n "lighttype_dir",\n "lighttype_point",\n "lineSpacing",\n "m_axisx",\n "m_axisx_gui",\n "m_axisy",\n "m_axisy_gui",\n "m_scroll_down",\n "m_scroll_up",\n "matrix_projection",\n "matrix_view",\n "matrix_world",\n "mb_any",\n "mb_left",\n "mb_middle",\n "mb_none",\n "mb_right",\n "mb_side1",\n "mb_side2",\n "mip_markedonly",\n "mip_off",\n "mip_on",\n "network_config_avoid_time_wait",\n "network_config_connect_timeout",\n "network_config_disable_multicast",\n "network_config_disable_reliable_udp",\n "network_config_enable_multicast",\n "network_config_enable_reliable_udp",\n "network_config_use_non_blocking_socket",\n "network_config_websocket_protocol",\n "network_connect_active",\n "network_connect_blocking",\n "network_connect_nonblocking",\n "network_connect_none",\n "network_connect_passive",\n "network_send_binary",\n "network_send_text",\n "network_socket_bluetooth",\n "network_socket_tcp",\n "network_socket_udp",\n "network_socket_ws",\n "network_socket_wss",\n "network_type_connect",\n "network_type_data",\n "network_type_disconnect",\n "network_type_down",\n "network_type_non_blocking_connect",\n "network_type_up",\n "network_type_up_failed",\n "nineslice_blank",\n "nineslice_bottom",\n "nineslice_center",\n "nineslice_centre",\n "nineslice_hide",\n "nineslice_left",\n "nineslice_mirror",\n "nineslice_repeat",\n "nineslice_right",\n "nineslice_stretch",\n "nineslice_top",\n "noone",\n "of_challenge_lose",\n "of_challenge_tie",\n "of_challenge_win",\n "os_android",\n "os_gdk",\n "os_gxgames",\n "os_ios",\n "os_linux",\n "os_macosx",\n "os_operagx",\n "os_permission_denied",\n "os_permission_denied_dont_request",\n "os_permission_granted",\n "os_ps3",\n "os_ps4",\n "os_ps5",\n "os_psvita",\n "os_switch",\n "os_tvos",\n "os_unknown",\n "os_uwp",\n "os_win8native",\n "os_windows",\n "os_winphone",\n "os_xboxone",\n "os_xboxseriesxs",\n "other",\n "outlineColor",\n "outlineColour",\n "outlineDist",\n "outlineEnabled",\n "outlineEnabled",\n "paragraphSpacing",\n "path_action_continue",\n "path_action_restart",\n "path_action_reverse",\n "path_action_stop",\n "phy_debug_render_aabb",\n "phy_debug_render_collision_pairs",\n "phy_debug_render_coms",\n "phy_debug_render_core_shapes",\n "phy_debug_render_joints",\n "phy_debug_render_obb",\n "phy_debug_render_shapes",\n "phy_joint_anchor_1_x",\n "phy_joint_anchor_1_y",\n "phy_joint_anchor_2_x",\n "phy_joint_anchor_2_y",\n "phy_joint_angle",\n "phy_joint_angle_limits",\n "phy_joint_damping_ratio",\n "phy_joint_frequency",\n "phy_joint_length_1",\n "phy_joint_length_2",\n "phy_joint_lower_angle_limit",\n "phy_joint_max_force",\n "phy_joint_max_length",\n "phy_joint_max_motor_force",\n "phy_joint_max_motor_torque",\n "phy_joint_max_torque",\n "phy_joint_motor_force",\n "phy_joint_motor_speed",\n "phy_joint_motor_torque",\n "phy_joint_reaction_force_x",\n "phy_joint_reaction_force_y",\n "phy_joint_reaction_torque",\n "phy_joint_speed",\n "phy_joint_translation",\n "phy_joint_upper_angle_limit",\n "phy_particle_data_flag_category",\n "phy_particle_data_flag_color",\n "phy_particle_data_flag_colour",\n "phy_particle_data_flag_position",\n "phy_particle_data_flag_typeflags",\n "phy_particle_data_flag_velocity",\n "phy_particle_flag_colormixing",\n "phy_particle_flag_colourmixing",\n "phy_particle_flag_elastic",\n "phy_particle_flag_powder",\n "phy_particle_flag_spring",\n "phy_particle_flag_tensile",\n "phy_particle_flag_viscous",\n "phy_particle_flag_wall",\n "phy_particle_flag_water",\n "phy_particle_flag_zombie",\n "phy_particle_group_flag_rigid",\n "phy_particle_group_flag_solid",\n "pi",\n "pointer_invalid",\n "pointer_null",\n "pr_linelist",\n "pr_linestrip",\n "pr_pointlist",\n "pr_trianglefan",\n "pr_trianglelist",\n "pr_trianglestrip",\n "ps_distr_gaussian",\n "ps_distr_invgaussian",\n "ps_distr_linear",\n "ps_mode_burst",\n "ps_mode_stream",\n "ps_shape_diamond",\n "ps_shape_ellipse",\n "ps_shape_line",\n "ps_shape_rectangle",\n "pt_shape_circle",\n "pt_shape_cloud",\n "pt_shape_disk",\n "pt_shape_explosion",\n "pt_shape_flare",\n "pt_shape_line",\n "pt_shape_pixel",\n "pt_shape_ring",\n "pt_shape_smoke",\n "pt_shape_snow",\n "pt_shape_spark",\n "pt_shape_sphere",\n "pt_shape_square",\n "pt_shape_star",\n "rollback_chat_message",\n "rollback_connect_error",\n "rollback_connect_info",\n "rollback_connected_to_peer",\n "rollback_connection_rejected",\n "rollback_disconnected_from_peer",\n "rollback_end_game",\n "rollback_game_full",\n "rollback_game_info",\n "rollback_game_interrupted",\n "rollback_game_resumed",\n "rollback_high_latency",\n "rollback_player_prefs",\n "rollback_protocol_rejected",\n "rollback_synchronized_with_peer",\n "rollback_synchronizing_with_peer",\n "self",\n "seqaudiokey_loop",\n "seqaudiokey_oneshot",\n "seqdir_left",\n "seqdir_right",\n "seqinterpolation_assign",\n "seqinterpolation_lerp",\n "seqplay_loop",\n "seqplay_oneshot",\n "seqplay_pingpong",\n "seqtextkey_bottom",\n "seqtextkey_center",\n "seqtextkey_justify",\n "seqtextkey_left",\n "seqtextkey_middle",\n "seqtextkey_right",\n "seqtextkey_top",\n "seqtracktype_audio",\n "seqtracktype_bool",\n "seqtracktype_clipmask",\n "seqtracktype_clipmask_mask",\n "seqtracktype_clipmask_subject",\n "seqtracktype_color",\n "seqtracktype_colour",\n "seqtracktype_empty",\n "seqtracktype_graphic",\n "seqtracktype_group",\n "seqtracktype_instance",\n "seqtracktype_message",\n "seqtracktype_moment",\n "seqtracktype_particlesystem",\n "seqtracktype_real",\n "seqtracktype_sequence",\n "seqtracktype_spriteframes",\n "seqtracktype_string",\n "seqtracktype_text",\n "shadowColor",\n "shadowColour",\n "shadowOffsetX",\n "shadowOffsetY",\n "shadowSoftness",\n "sprite_add_ext_error_cancelled",\n "sprite_add_ext_error_decompressfailed",\n "sprite_add_ext_error_loadfailed",\n "sprite_add_ext_error_setupfailed",\n "sprite_add_ext_error_spritenotfound",\n "sprite_add_ext_error_unknown",\n "spritespeed_framespergameframe",\n "spritespeed_framespersecond",\n "surface_r16float",\n "surface_r32float",\n "surface_r8unorm",\n "surface_rg8unorm",\n "surface_rgba16float",\n "surface_rgba32float",\n "surface_rgba4unorm",\n "surface_rgba8unorm",\n "texturegroup_status_fetched",\n "texturegroup_status_loaded",\n "texturegroup_status_loading",\n "texturegroup_status_unloaded",\n "tf_anisotropic",\n "tf_linear",\n "tf_point",\n "thickness",\n "tile_flip",\n "tile_index_mask",\n "tile_mirror",\n "tile_rotate",\n "time_source_expire_after",\n "time_source_expire_nearest",\n "time_source_game",\n "time_source_global",\n "time_source_state_active",\n "time_source_state_initial",\n "time_source_state_paused",\n "time_source_state_stopped",\n "time_source_units_frames",\n "time_source_units_seconds",\n "timezone_local",\n "timezone_utc",\n "tm_countvsyncs",\n "tm_sleep",\n "tm_systemtiming",\n "true",\n "ty_real",\n "ty_string",\n "undefined",\n "vertex_type_color",\n "vertex_type_colour",\n "vertex_type_float1",\n "vertex_type_float2",\n "vertex_type_float3",\n "vertex_type_float4",\n "vertex_type_ubyte4",\n "vertex_usage_binormal",\n "vertex_usage_blendindices",\n "vertex_usage_blendweight",\n "vertex_usage_color",\n "vertex_usage_colour",\n "vertex_usage_depth",\n "vertex_usage_fog",\n "vertex_usage_normal",\n "vertex_usage_position",\n "vertex_usage_psize",\n "vertex_usage_sample",\n "vertex_usage_tangent",\n "vertex_usage_texcoord",\n "video_format_rgba",\n "video_format_yuv",\n "video_status_closed",\n "video_status_paused",\n "video_status_playing",\n "video_status_preparing",\n "vk_add",\n "vk_alt",\n "vk_anykey",\n "vk_backspace",\n "vk_control",\n "vk_decimal",\n "vk_delete",\n "vk_divide",\n "vk_down",\n "vk_end",\n "vk_enter",\n "vk_escape",\n "vk_f1",\n "vk_f10",\n "vk_f11",\n "vk_f12",\n "vk_f2",\n "vk_f3",\n "vk_f4",\n "vk_f5",\n "vk_f6",\n "vk_f7",\n "vk_f8",\n "vk_f9",\n "vk_home",\n "vk_insert",\n "vk_lalt",\n "vk_lcontrol",\n "vk_left",\n "vk_lshift",\n "vk_multiply",\n "vk_nokey",\n "vk_numpad0",\n "vk_numpad1",\n "vk_numpad2",\n "vk_numpad3",\n "vk_numpad4",\n "vk_numpad5",\n "vk_numpad6",\n "vk_numpad7",\n "vk_numpad8",\n "vk_numpad9",\n "vk_pagedown",\n "vk_pageup",\n "vk_pause",\n "vk_printscreen",\n "vk_ralt",\n "vk_rcontrol",\n "vk_return",\n "vk_right",\n "vk_rshift",\n "vk_shift",\n "vk_space",\n "vk_subtract",\n "vk_tab",\n "vk_up",\n "wallpaper_config",\n "wallpaper_subscription_data",\n "wrap"\n ];\n const LANGUAGE_VARIABLES = [\n "alarm",\n "application_surface",\n "argument",\n "argument0",\n "argument1",\n "argument2",\n "argument3",\n "argument4",\n "argument5",\n "argument6",\n "argument7",\n "argument8",\n "argument9",\n "argument10",\n "argument11",\n "argument12",\n "argument13",\n "argument14",\n "argument15",\n "argument_count",\n "async_load",\n "background_color",\n "background_colour",\n "background_showcolor",\n "background_showcolour",\n "bbox_bottom",\n "bbox_left",\n "bbox_right",\n "bbox_top",\n "browser_height",\n "browser_width",\n "colour?ColourTrack",\n "current_day",\n "current_hour",\n "current_minute",\n "current_month",\n "current_second",\n "current_time",\n "current_weekday",\n "current_year",\n "cursor_sprite",\n "debug_mode",\n "delta_time",\n "depth",\n "direction",\n "display_aa",\n "drawn_by_sequence",\n "event_action",\n "event_data",\n "event_number",\n "event_object",\n "event_type",\n "font_texture_page_size",\n "fps",\n "fps_real",\n "friction",\n "game_display_name",\n "game_id",\n "game_project_name",\n "game_save_id",\n "gravity",\n "gravity_direction",\n "health",\n "hspeed",\n "iap_data",\n "id",\n "image_alpha",\n "image_angle",\n "image_blend",\n "image_index",\n "image_number",\n "image_speed",\n "image_xscale",\n "image_yscale",\n "in_collision_tree",\n "in_sequence",\n "instance_count",\n "instance_id",\n "keyboard_key",\n "keyboard_lastchar",\n "keyboard_lastkey",\n "keyboard_string",\n "layer",\n "lives",\n "longMessage",\n "managed",\n "mask_index",\n "message",\n "mouse_button",\n "mouse_lastbutton",\n "mouse_x",\n "mouse_y",\n "object_index",\n "os_browser",\n "os_device",\n "os_type",\n "os_version",\n "path_endaction",\n "path_index",\n "path_orientation",\n "path_position",\n "path_positionprevious",\n "path_scale",\n "path_speed",\n "persistent",\n "phy_active",\n "phy_angular_damping",\n "phy_angular_velocity",\n "phy_bullet",\n "phy_col_normal_x",\n "phy_col_normal_y",\n "phy_collision_points",\n "phy_collision_x",\n "phy_collision_y",\n "phy_com_x",\n "phy_com_y",\n "phy_dynamic",\n "phy_fixed_rotation",\n "phy_inertia",\n "phy_kinematic",\n "phy_linear_damping",\n "phy_linear_velocity_x",\n "phy_linear_velocity_y",\n "phy_mass",\n "phy_position_x",\n "phy_position_xprevious",\n "phy_position_y",\n "phy_position_yprevious",\n "phy_rotation",\n "phy_sleeping",\n "phy_speed",\n "phy_speed_x",\n "phy_speed_y",\n "player_avatar_sprite",\n "player_avatar_url",\n "player_id",\n "player_local",\n "player_type",\n "player_user_id",\n "program_directory",\n "rollback_api_server",\n "rollback_confirmed_frame",\n "rollback_current_frame",\n "rollback_event_id",\n "rollback_event_param",\n "rollback_game_running",\n "room",\n "room_first",\n "room_height",\n "room_last",\n "room_persistent",\n "room_speed",\n "room_width",\n "score",\n "script",\n "sequence_instance",\n "solid",\n "speed",\n "sprite_height",\n "sprite_index",\n "sprite_width",\n "sprite_xoffset",\n "sprite_yoffset",\n "stacktrace",\n "temp_directory",\n "timeline_index",\n "timeline_loop",\n "timeline_position",\n "timeline_running",\n "timeline_speed",\n "view_camera",\n "view_current",\n "view_enabled",\n "view_hport",\n "view_surface_id",\n "view_visible",\n "view_wport",\n "view_xport",\n "view_yport",\n "visible",\n "vspeed",\n "webgl_enabled",\n "working_directory",\n "x",\n "xprevious",\n "xstart",\n "y",\n "yprevious",\n "ystart"\n ];\n return {\n name: \'GML\',\n case_insensitive: false, // language is case-insensitive\n keywords: {\n keyword: KEYWORDS,\n built_in: BUILT_INS,\n symbol: SYMBOLS,\n "variable.language": LANGUAGE_VARIABLES\n },\n contains: [\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE,\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE,\n hljs.C_NUMBER_MODE\n ]\n };\n}\n\nmodule.exports = gml;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjI2MS5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vb2JzaWRpYW4tbWluZG1hcC1uZXh0Z2VuLy4vbm9kZV9tb2R1bGVzLy5wbnBtL2hpZ2hsaWdodC5qc0AxMS4xMS4xL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9nbWwuanM/MDg4NiJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuTGFuZ3VhZ2U6IEdNTFxuRGVzY3JpcHRpb246IEdhbWUgTWFrZXIgTGFuZ3VhZ2UgZm9yIEdhbWVNYWtlciAocmV2LiAyMDIzLjEpXG5XZWJzaXRlOiBodHRwczovL21hbnVhbC55b3lvZ2FtZXMuY29tL1xuQ2F0ZWdvcnk6IHNjcmlwdGluZ1xuKi9cblxuZnVuY3Rpb24gZ21sKGhsanMpIHtcbiAgY29uc3QgS0VZV09SRFMgPSBbXG4gICAgXCIjZW5kcmVnaW9uXCIsXG4gICAgXCIjbWFjcm9cIixcbiAgICBcIiNyZWdpb25cIixcbiAgICBcImFuZFwiLFxuICAgIFwiYmVnaW5cIixcbiAgICBcImJyZWFrXCIsXG4gICAgXCJjYXNlXCIsXG4gICAgXCJjb25zdHJ1Y3RvclwiLFxuICAgIFwiY29udGludWVcIixcbiAgICBcImRlZmF1bHRcIixcbiAgICBcImRlbGV0ZVwiLFxuICAgIFwiZGl2XCIsXG4gICAgXCJkb1wiLFxuICAgIFwiZWxzZVwiLFxuICAgIFwiZW5kXCIsXG4gICAgXCJlbnVtXCIsXG4gICAgXCJleGl0XCIsXG4gICAgXCJmb3JcIixcbiAgICBcImZ1bmN0aW9uXCIsXG4gICAgXCJnbG9iYWx2YXJcIixcbiAgICBcImlmXCIsXG4gICAgXCJtb2RcIixcbiAgICBcIm5ld1wiLFxuICAgIFwibm90XCIsXG4gICAgXCJvclwiLFxuICAgIFwicmVwZWF0XCIsXG4gICAgXCJyZXR1cm5cIixcbiAgICBcInN0YXRpY1wiLFxuICAgIFwic3dpdGNoXCIsXG4gICAgXCJ0aGVuXCIsXG4gICAgXCJ1bnRpbFwiLFxuICAgIFwidmFyXCIsXG4gICAgXCJ3aGlsZVwiLFxuICAgIFwid2l0aFwiLFxuICAgIFwieG9yXCJcbiAgXTtcblxuICBjb25zdCBCVUlMVF9JTlMgPSBbXG4gICAgXCJhYnNcIixcbiAgICBcImFsYXJtX2dldFwiLFxuICAgIFwiYWxhcm1fc2V0XCIsXG4gICAgXCJhbmdsZV9kaWZmZXJlbmNlXCIsXG4gICAgXCJhbmltY3VydmVfY2hhbm5lbF9ldmFsdWF0ZVwiLFxuICAgIFwiYW5pbWN1cnZlX2NoYW5uZWxfbmV3XCIsXG4gICAgXCJhbmltY3VydmVfY3JlYXRlXCIsXG4gICAgXCJhbmltY3VydmVfZGVzdHJveVwiLFxuICAgIFwiYW5pbWN1cnZlX2V4aXN0c1wiLFxuICAgIFwiYW5pbWN1cnZlX2dldFwiLFxuICAgIFwiYW5pbWN1cnZlX2dldF9jaGFubmVsXCIsXG4gICAgXCJhbmltY3VydmVfZ2V0X2NoYW5uZWxfaW5kZXhcIixcbiAgICBcImFuaW1jdXJ2ZV9wb2ludF9uZXdcIixcbiAgICBcImFuc2lfY2hhclwiLFxuICAgIFwiYXBwbGljYXRpb25fZ2V0X3Bvc2l0aW9uXCIsXG4gICAgXCJhcHBsaWNhdGlvbl9zdXJmYWNlX2RyYXdfZW5hYmxlXCIsXG4gICAgXCJhcHBsaWNhdGlvbl9zdXJmYWNlX2VuYWJsZVwiLFxuICAgIFwiYXBwbGljYXRpb25fc3VyZmFjZV9pc19lbmFibGVkXCIsXG4gICAgXCJhcmNjb3NcIixcbiAgICBcImFyY3NpblwiLFxuICAgIFwiYXJjdGFuXCIsXG4gICAgXCJhcmN0YW4yXCIsXG4gICAgXCJhcnJheV9hbGxcIixcbiAgICBcImFycmF5X2FueVwiLFxuICAgIFwiYXJyYXlfY29uY2F0XCIsXG4gICAgXCJhcnJheV9jb250YWluc1wiLFxuICAgIFwiYXJyYXlfY29udGFpbnNfZXh0XCIsXG4gICAgXCJhcnJheV9jb3B5XCIsXG4gICAgXCJhcnJheV9jb3B5X3doaWxlXCIsXG4gICAgXCJhcnJheV9jcmVhdGVcIixcbiAgICBcImFycmF5X2NyZWF0ZV9leHRcIixcbiAgICBcImFycmF5X2RlbGV0ZVwiLFxuICAgIFwiYXJyYXlfZXF1YWxzXCIsXG4gICAgXCJhcnJheV9maWx0ZXJcIixcbiAgICBcImFycmF5X2ZpbHRlcl9leHRcIixcbiAgICBcImFycmF5X2ZpbmRfaW5kZXhcIixcbiAgICBcImFycmF5X2ZpcnN0XCIsXG4gICAgXCJhcnJheV9mb3JlYWNoXCIsXG4gICAgXCJhcnJheV9nZXRcIixcbiAgICBcImFycmF5X2dldF9pbmRleFwiLFxuICAgIFwiYXJyYXlfaW5zZXJ0XCIsXG4gICAgXCJhcnJheV9pbnRlcnNlY3Rpb25cIixcbiAgICBcImFycmF5X2xhc3RcIixcbiAgICBcImFycmF5X2xlbmd0aFwiLFxuICAgIFwiYXJyYXlfbWFwXCIsXG4gICAgXCJhcnJheV9tYXBfZXh0XCIsXG4gICAgXCJhcnJheV9wb3BcIixcbiAgICBcImFycmF5X3B1c2hcIixcbiAgICBcImFycmF5X3JlZHVjZVwiLFxuICAgIFwiYXJyYXlfcmVzaXplXCIsXG4gICAgXCJhcnJheV9yZXZlcnNlXCIsXG4gICAgXCJhcnJheV9yZXZlcnNlX2V4dFwiLFxuICAgIFwiYXJyYXlfc2V0XCIsXG4gICAgXCJhcnJheV9zaHVmZmxlXCIsXG4gICAgXCJhcnJheV9zaHVmZmxlX2V4dFwiLFxuICAgIFwiYXJyYXlfc29ydFwiLFxuICAgIFwiYXJyYXlfdW5pb25cIixcbiAgICBcImFycmF5X3VuaXF1ZVwiLFxuICAgIFwiYXJyYXlfdW5pcXVlX2V4dFwiLFxuICAgIFwiYXNzZXRfYWRkX3RhZ3NcIixcbiAgICBcImFzc2V0X2NsZWFyX3RhZ3NcIixcbiAgICBcImFzc2V0X2dldF9pZHNcIixcbiAgICBcImFzc2V0X2dldF9pbmRleFwiLFxuICAgIFwiYXNzZXRfZ2V0X3RhZ3NcIixcbiAgICBcImFzc2V0X2dldF90eXBlXCIsXG4gICAgXCJhc3NldF9oYXNfYW55X3RhZ1wiLFxuICAgIFwiYXNzZXRfaGFzX3RhZ3NcIixcbiAgICBcImFzc2V0X3JlbW92ZV90YWdzXCIsXG4gICAgXCJhdWRpb19idXNfY2xlYXJfZW1pdHRlcnNcIixcbiAgICBcImF1ZGlvX2J1c19jcmVhdGVcIixcbiAgICBcImF1ZGlvX2J1c19nZXRfZW1pdHRlcnNcIixcbiAgICBcImF1ZGlvX2NoYW5uZWxfbnVtXCIsXG4gICAgXCJhdWRpb19jcmVhdGVfYnVmZmVyX3NvdW5kXCIsXG4gICAgXCJhdWRpb19jcmVhdGVfcGxheV9xdWV1ZVwiLFxuICAgIFwiYXVkaW9fY3JlYXRlX3N0cmVhbVwiLFxuICAgIFwiYXVkaW9fY3JlYXRlX3N5bmNfZ3JvdXBcIixcbiAgICBcImF1ZGlvX2RlYnVnXCIsXG4gICAgXCJhdWRpb19kZXN0cm95X3N0cmVhbVwiLFxuICAgIFwiYXVkaW9fZGVzdHJveV9zeW5jX2dyb3VwXCIsXG4gICAgXCJhdWRpb19lZmZlY3RfY3JlYXRlXCIsXG4gICAgXCJhdWRpb19lbWl0dGVyX2J1c1wiLFxuICAgIFwiYXVkaW9fZW1pdHRlcl9jcmVhdGVcIixcbiAgICBcImF1ZGlvX2VtaXR0ZXJfZXhpc3RzXCIsXG4gICAgXCJhdWRpb19lbWl0dGVyX2ZhbGxvZmZcIixcbiAgICBcImF1ZGlvX2VtaXR0ZXJfZnJlZVwiLFxuICAgIFwiYXVkaW9fZW1pdHRlcl9nYWluXCIsXG4gICAgXCJhdWRpb19lbWl0dGVyX2dldF9idXNcIixcbiAgICBcImF1ZGlvX2VtaXR0ZXJfZ2V0X2dhaW5cIixcbiAgICBcImF1ZGlvX2VtaXR0ZXJfZ2V0X2xpc3RlbmVyX21hc2tcIixcbiAgICBcImF1ZGlvX2VtaXR0ZXJfZ2V0X3BpdGNoXCIsXG4gICAgXCJhdWRpb19lbWl0dGVyX2dldF92eFwiLFxuICAgIFwiYXVkaW9fZW1pdHRlcl9nZXRfdnlcIixcbiAgICBcImF1ZGlvX2VtaXR0ZXJfZ2V0X3Z6XCIsXG4gICAgXCJhdWRpb19lbWl0dGVyX2dldF94XCIsXG4gICAgXCJhdWRpb19lbWl0dGVyX2dldF95XCIsXG4gICAgXCJhdWRpb19lbWl0dGVyX2dldF96XCIsXG4gICAgXCJhdWRpb19lbWl0dGVyX3BpdGNoXCIsXG4gICAgXCJhdWRpb19lbWl0dGVyX3Bvc2l0aW9uXCIsXG4gICAgXCJhdWRpb19lbWl0dGVyX3NldF9saXN0ZW5lcl9tYXNrXCIsXG4gICAgXCJhdWRpb19lbWl0dGVyX3ZlbG9jaXR5XCIsXG4gICAgXCJhdWRpb19leGlzdHNcIixcbiAgICBcImF1ZGlvX2ZhbGxvZmZfc2V0X21vZGVsXCIsXG4gICAgXCJhdWRpb19mcmVlX2J1ZmZlcl9zb3VuZFwiLFxuICAgIFwiYXVkaW9fZnJlZV9wbGF5X3F1ZXVlXCIsXG4gICAgXCJhdWRpb19nZXRfbGlzdGVuZXJfY291bnRcIixcbiAgICBcImF1ZGlvX2dldF9saXN0ZW5lcl9pbmZvXCIsXG4gICAgXCJhdWRpb19nZXRfbGlzdGVuZXJfbWFza1wiLFxuICAgIFwiYXVkaW9fZ2V0X21hc3Rlcl9nYWluXCIsXG4gICAgXCJhdWRpb19nZXRfbmFtZVwiLFxuICAgIFwiYXVkaW9fZ2V0X3JlY29yZGVyX2NvdW50XCIsXG4gICAgXCJhdWRpb19nZXRfcmVjb3JkZXJfaW5mb1wiLFxuICAgIFwiYXVkaW9fZ2V0X3R5cGVcIixcbiAgICBcImF1ZGlvX2dyb3VwX2dldF9hc3NldHNcIixcbiAgICBcImF1ZGlvX2dyb3VwX2dldF9nYWluXCIsXG4gICAgXCJhdWRpb19ncm91cF9pc19sb2FkZWRcIixcbiAgICBcImF1ZGlvX2dyb3VwX2xvYWRcIixcbiAgICBcImF1ZGlvX2dyb3VwX2xvYWRfcHJvZ3Jlc3NcIixcbiAgICBcImF1ZGlvX2dyb3VwX25hbWVcIixcbiAgICBcImF1ZGlvX2dyb3VwX3NldF9nYWluXCIsXG4gICAgXCJhdWRpb19ncm91cF9zdG9wX2FsbFwiLFxuICAgIFwiYXVkaW9fZ3JvdXBfdW5sb2FkXCIsXG4gICAgXCJhdWRpb19pc19wYXVzZWRcIixcbiAgICBcImF1ZGlvX2lzX3BsYXlpbmdcIixcbiAgICBcImF1ZGlvX2xpc3RlbmVyX2dldF9kYXRhXCIsXG4gICAgXCJhdWRpb19saXN0ZW5lcl9vcmllbnRhdGlvblwiLFxuICAgIFwiYXVkaW9fbGlzdGVuZXJfcG9zaXRpb25cIixcbiAgICBcImF1ZGlvX2xpc3RlbmVyX3NldF9vcmllbnRhdGlvblwiLFxuICAgIFwiYXVkaW9fbGlzdGVuZXJfc2V0X3Bvc2l0aW9uXCIsXG4gICAgXCJhdWRpb19saXN0ZW5lcl9zZXRfdmVsb2NpdHlcIixcbiAgICBcImF1ZGlvX2xpc3RlbmVyX3ZlbG9jaXR5XCIsXG4gICAgXCJhdWRpb19tYXN0ZXJfZ2FpblwiLFxuICAgIFwiYXVkaW9fcGF1c2VfYWxsXCIsXG4gICAgXCJhdWRpb19wYXVzZV9zb3VuZFwiLFxuICAgIFwiYXVkaW9fcGF1c2Vfc3luY19ncm91cFwiLFxuICAgIFwiYXVkaW9fcGxheV9pbl9zeW5jX2dyb3VwXCIsXG4gICAgXCJhdWRpb19wbGF5X3NvdW5kXCIsXG4gICAgXCJhdWRpb19wbGF5X3NvdW5kX2F0XCIsXG4gICAgXCJhdWRpb19wbGF5X3NvdW5kX2V4dFwiLFxuICAgIFwiYXVkaW9fcGxheV9zb3VuZF9vblwiLFxuICAgIFwiYXVkaW9fcXVldWVfc291bmRcIixcbiAgICBcImF1ZGlvX3Jlc3VtZV9hbGxcIixcbiAgICBcImF1ZGlvX3Jlc3VtZV9zb3VuZFwiLFxuICAgIFwiYXVkaW9fcmVzdW1lX3N5bmNfZ3JvdXBcIixcbiAgICBcImF1ZGlvX3NldF9saXN0ZW5lcl9tYXNrXCIsXG4gICAgXCJhdWRpb19zZXRfbWFzdGVyX2dhaW5cIixcbiAgICBcImF1ZGlvX3NvdW5kX2dhaW5cIixcbiAgICBcImF1ZGlvX3NvdW5kX2dldF9hdWRpb19ncm91cFwiLFxuICAgIFwiYXVkaW9fc291bmRfZ2V0X2dhaW5cIixcbiAgICBcImF1ZGlvX3NvdW5kX2dldF9saXN0ZW5lcl9tYXNrXCIsXG4gICAgXCJhdWRpb19zb3VuZF9nZXRfbG9vcFwiLFxuICAgIFwiYXVkaW9fc291bmRfZ2V0X2xvb3BfZW5kXCIsXG4gICAgXCJhdWRpb19zb3VuZF9nZXRfbG9vcF9zdGFydFwiLFxuICAgIFwiYXVkaW9fc291bmRfZ2V0X3BpdGNoXCIsXG4gICAgXCJhdWRpb19zb3VuZF9nZXRfdHJhY2tfcG9zaXRpb25cIixcbiAgICBcImF1ZGlvX3NvdW5kX2lzX3BsYXlhYmxlXCIsXG4gICAgXCJhdWRpb19zb3VuZF9sZW5ndGhcIixcbiAgICBcImF1ZGlvX3NvdW5kX2xvb3BcIixcbiAgICBcImF1ZGlvX3NvdW5kX2xvb3BfZW5kXCIsXG4gICAgXCJhdWRpb19zb3VuZF9sb29wX3N0YXJ0XCIsXG4gICAgXCJhdWRpb19zb3VuZF9waXRjaFwiLFxuICAgIFwiYXVkaW9fc291bmRfc2V0X2xpc3RlbmVyX21hc2tcIixcbiAgICBcImF1ZGlvX3NvdW5kX3NldF90cmFja19wb3NpdGlvblwiLFxuICAgIFwiYXVkaW9fc3RhcnRfcmVjb3JkaW5nXCIsXG4gICAgXCJhdWRpb19zdGFydF9zeW5jX2dyb3VwXCIsXG4gICAgXCJhdWRpb19zdG9wX2FsbFwiLFxuICAgIFwiYXVkaW9fc3RvcF9yZWNvcmRpbmdcIixcbiAgICBcImF1ZGlvX3N0b3Bfc291bmRcIixcbiAgICBcImF1ZGlvX3N0b3Bfc3luY19ncm91cFwiLFxuICAgIFwiYXVkaW9fc3luY19ncm91cF9kZWJ1Z1wiLFxuICAgIFwiYXVkaW9fc3luY19ncm91cF9nZXRfdHJhY2tfcG9zXCIsXG4gICAgXCJhdWRpb19zeW5jX2dyb3VwX2lzX3BhdXNlZFwiLFxuICAgIFwiYXVkaW9fc3luY19ncm91cF9pc19wbGF5aW5nXCIsXG4gICAgXCJhdWRpb19zeXN0ZW1faXNfYXZhaWxhYmxlXCIsXG4gICAgXCJhdWRpb19zeXN0ZW1faXNfaW5pdGlhbGlzZWRcIixcbiAgICBcImJhc2U2NF9kZWNvZGVcIixcbiAgICBcImJhc2U2NF9lbmNvZGVcIixcbiAgICBcImJvb2xcIixcbiAgICBcImJyb3dzZXJfaW5wdXRfY2FwdHVyZVwiLFxuICAgIFwiYnVmZmVyX2FzeW5jX2dyb3VwX2JlZ2luXCIsXG4gICAgXCJidWZmZXJfYXN5bmNfZ3JvdXBfZW5kXCIsXG4gICAgXCJidWZmZXJfYXN5bmNfZ3JvdXBfb3B0aW9uXCIsXG4gICAgXCJidWZmZXJfYmFzZTY0X2RlY29kZVwiLFxuICAgIFwiYnVmZmVyX2Jhc2U2NF9kZWNvZGVfZXh0XCIsXG4gICAgXCJidWZmZXJfYmFzZTY0X2VuY29kZVwiLFxuICAgIFwiYnVmZmVyX2NvbXByZXNzXCIsXG4gICAgXCJidWZmZXJfY29weVwiLFxuICAgIFwiYnVmZmVyX2NvcHlfZnJvbV92ZXJ0ZXhfYnVmZmVyXCIsXG4gICAgXCJidWZmZXJfY29weV9zdHJpZGVcIixcbiAgICBcImJ1ZmZlcl9jcmMzMlwiLFxuICAgIFwiYnVmZmVyX2NyZWF0ZVwiLFxuICAgIFwiYnVmZmVyX2NyZWF0ZV9mcm9tX3ZlcnRleF9idWZmZXJcIixcbiAgICBcImJ1ZmZlcl9jcmVhdGVfZnJvbV92ZXJ0ZXhfYnVmZmVyX2V4dFwiLFxuICAgIFwiYnVmZmVyX2RlY29tcHJlc3NcIixcbiAgICBcImJ1ZmZlcl9kZWxldGVcIixcbiAgICBcImJ1ZmZlcl9leGlzdHNcIixcbiAgICBcImJ1ZmZlcl9maWxsXCIsXG4gICAgXCJidWZmZXJfZ2V0X2FkZHJlc3NcIixcbiAgICBcImJ1ZmZlcl9nZXRfYWxpZ25tZW50XCIsXG4gICAgXCJidWZmZXJfZ2V0X3NpemVcIixcbiAgICBcImJ1ZmZlcl9nZXRfc3VyZmFjZVwiLFxuICAgIFwiYnVmZmVyX2dldF90eXBlXCIsXG4gICAgXCJidWZmZXJfbG9hZFwiLFxuICAgIFwiYnVmZmVyX2xvYWRfYXN5bmNcIixcbiAgICBcImJ1ZmZlcl9sb2FkX2V4dFwiLFxuICAgIFwiYnVmZmVyX2xvYWRfcGFydGlhbFwiLFxuICAgIFwiYnVmZmVyX21kNVwiLFxuICAgIFwiYnVmZmVyX3BlZWtcIixcbiAgICBcImJ1ZmZlcl9wb2tlXCIsXG4gICAgXCJidWZmZXJfcmVhZFwiLFxuICAgIFwiYnVmZmVyX3Jlc2l6ZVwiLFxuICAgIFwiYnVmZmVyX3NhdmVcIixcbiAgICBcImJ1ZmZlcl9zYXZlX2FzeW5jXCIsXG4gICAgXCJidWZmZXJfc2F2ZV9leHRcIixcbiAgICBcImJ1ZmZlcl9zZWVrXCIsXG4gICAgXCJidWZmZXJfc2V0X3N1cmZhY2VcIixcbiAgICBcImJ1ZmZlcl9zZXRfdXNlZF9zaXplXCIsXG4gICAgXCJidWZmZXJfc2hhMVwiLFxuICAgIFwiYnVmZmVyX3NpemVvZlwiLFxuICAgIFwiYnVmZmVyX3RlbGxcIixcbiAgICBcImJ1ZmZlcl93cml0ZVwiLFxuICAgIFwiY2FsbF9jYW5jZWxcIixcbiAgICBcImNhbGxfbGF0ZXJcIixcbiAgICBcImNhbWVyYV9hcHBseVwiLFxuICAgIFwiY2FtZXJhX2NvcHlfdHJhbnNmb3Jtc1wiLFxuICAgIFwiY2FtZXJhX2NyZWF0ZVwiLFxuICAgIFwiY2FtZXJhX2NyZWF0ZV92aWV3XCIsXG4gICAgXCJjYW1lcmFfZGVzdHJveVwiLFxuICAgIFwiY2FtZXJhX2dldF9hY3RpdmVcIixcbiAgICBcImNhbWVyYV9nZXRfYmVnaW5fc2NyaXB0XCIsXG4gICAgXCJjYW1lcmFfZ2V0X2RlZmF1bHRcIixcbiAgICBcImNhbWVyYV9nZXRfZW5kX3NjcmlwdFwiLFxuICAgIFwiY2FtZXJhX2dldF9wcm9qX21hdFwiLFxuICAgIFwiY2FtZXJhX2dldF91cGRhdGVfc2NyaXB0XCIsXG4gICAgXCJjYW1lcmFfZ2V0X3ZpZXdfYW5nbGVcIixcbiAgICBcImNhbWVyYV9nZXRfdmlld19ib3JkZXJfeFwiLFxuICAgIFwiY2FtZXJhX2dldF92aWV3X2JvcmRlcl95XCIsXG4gICAgXCJjYW1lcmFfZ2V0X3ZpZXdfaGVpZ2h0XCIsXG4gICAgXCJjYW1lcmFfZ2V0X3ZpZXdfbWF0XCIsXG4gICAgXCJjYW1lcmFfZ2V0X3ZpZXdfc3BlZWRfeFwiLFxuICAgIFwiY2FtZXJhX2dldF92aWV3X3NwZWVkX3lcIixcbiAgICBcImNhbWVyYV9nZXRfdmlld190YXJnZXRcIixcbiAgICBcImNhbWVyYV9nZXRfdmlld193aWR0aFwiLFxuICAgIFwiY2FtZXJhX2dldF92aWV3X3hcIixcbiAgICBcImNhbWVyYV9nZXRfdmlld195XCIsXG4gICAgXCJjYW1lcmFfc2V0X2JlZ2luX3NjcmlwdFwiLFxuICAgIFwiY2FtZXJhX3NldF9kZWZhdWx0XCIsXG4gICAgXCJjYW1lcmFfc2V0X2VuZF9zY3JpcHRcIixcbiAgICBcImNhbWVyYV9zZXRfcHJval9tYXRcIixcbiAgICBcImNhbWVyYV9zZXRfdXBkYXRlX3NjcmlwdFwiLFxuICAgIFwiY2FtZXJhX3NldF92aWV3X2FuZ2xlXCIsXG4gICAgXCJjYW1lcmFfc2V0X3ZpZXdfYm9yZGVyXCIsXG4gICAgXCJjYW1lcmFfc2V0X3ZpZXdfbWF0XCIsXG4gICAgXCJjYW1lcmFfc2V0X3ZpZXdfcG9zXCIsXG4gICAgXCJjYW1lcmFfc2V0X3ZpZXdfc2l6ZVwiLFxuICAgIFwiY2FtZXJhX3NldF92aWV3X3NwZWVkXCIsXG4gICAgXCJjYW1lcmFfc2V0X3ZpZXdfdGFyZ2V0XCIsXG4gICAgXCJjZWlsXCIsXG4gICAgXCJjaG9vc2VcIixcbiAgICBcImNoclwiLFxuICAgIFwiY2xhbXBcIixcbiAgICBcImNsaWNrYWJsZV9hZGRcIixcbiAgICBcImNsaWNrYWJsZV9hZGRfZXh0XCIsXG4gICAgXCJjbGlja2FibGVfY2hhbmdlXCIsXG4gICAgXCJjbGlja2FibGVfY2hhbmdlX2V4dFwiLFxuICAgIFwiY2xpY2thYmxlX2RlbGV0ZVwiLFxuICAgIFwiY2xpY2thYmxlX2V4aXN0c1wiLFxuICAgIFwiY2xpY2thYmxlX3NldF9zdHlsZVwiLFxuICAgIFwiY2xpcGJvYXJkX2dldF90ZXh0XCIsXG4gICAgXCJjbGlwYm9hcmRfaGFzX3RleHRcIixcbiAgICBcImNsaXBib2FyZF9zZXRfdGV4dFwiLFxuICAgIFwiY2xvdWRfZmlsZV9zYXZlXCIsXG4gICAgXCJjbG91ZF9zdHJpbmdfc2F2ZVwiLFxuICAgIFwiY2xvdWRfc3luY2hyb25pc2VcIixcbiAgICBcImNvZGVfaXNfY29tcGlsZWRcIixcbiAgICBcImNvbGxpc2lvbl9jaXJjbGVcIixcbiAgICBcImNvbGxpc2lvbl9jaXJjbGVfbGlzdFwiLFxuICAgIFwiY29sbGlzaW9uX2VsbGlwc2VcIixcbiAgICBcImNvbGxpc2lvbl9lbGxpcHNlX2xpc3RcIixcbiAgICBcImNvbGxpc2lvbl9saW5lXCIsXG4gICAgXCJjb2xsaXNpb25fbGluZV9saXN0XCIsXG4gICAgXCJjb2xsaXNpb25fcG9pbnRcIixcbiAgICBcImNvbGxpc2lvbl9wb2ludF9saXN0XCIsXG4gICAgXCJjb2xsaXNpb25fcmVjdGFuZ2xlXCIsXG4gICAgXCJjb2xsaXNpb25fcmVjdGFuZ2xlX2xpc3RcIixcbiAgICBcImNvbG9yX2dldF9ibHVlXCIsXG4gICAgXCJjb2xvcl9nZXRfZ3JlZW5cIixcbiAgICBcImNvbG9yX2dldF9odWVcIixcbiAgICBcImNvbG9yX2dldF9yZWRcIixcbiAgICBcImNvbG9yX2dldF9zYXR1cmF0aW9uXCIsXG4gICAgXCJjb2xvcl9nZXRfdmFsdWVcIixcbiAgICBcImNvbG91cl9nZXRfYmx1ZVwiLFxuICAgIFwiY29sb3VyX2dldF9ncmVlblwiLFxuICAgIFwiY29sb3VyX2dldF9odWVcIixcbiAgICBcImNvbG91cl9nZXRfcmVkXCIsXG4gICAgXCJjb2xvdXJfZ2V0X3NhdHVyYXRpb25cIixcbiAgICBcImNvbG91cl9nZXRfdmFsdWVcIixcbiAgICBcImNvc1wiLFxuICAgIFwiZGFyY2Nvc1wiLFxuICAgIFwiZGFyY3NpblwiLFxuICAgIFwiZGFyY3RhblwiLFxuICAgIFwiZGFyY3RhbjJcIixcbiAgICBcImRhdGVfY29tcGFyZV9kYXRlXCIsXG4gICAgXCJkYXRlX2NvbXBhcmVfZGF0ZXRpbWVcIixcbiAgICBcImRhdGVfY29tcGFyZV90aW1lXCIsXG4gICAgXCJkYXRlX2NyZWF0ZV9kYXRldGltZVwiLFxuICAgIFwiZGF0ZV9jdXJyZW50X2RhdGV0aW1lXCIsXG4gICAgXCJkYXRlX2RhdGVfb2ZcIixcbiAgICBcImRhdGVfZGF0ZV9zdHJpbmdcIixcbiAgICBcImRhdGVfZGF0ZXRpbWVfc3RyaW5nXCIsXG4gICAgXCJkYXRlX2RheV9zcGFuXCIsXG4gICAgXCJkYXRlX2RheXNfaW5fbW9udGhcIixcbiAgICBcImRhdGVfZGF5c19pbl95ZWFyXCIsXG4gICAgXCJkYXRlX2dldF9kYXlcIixcbiAgICBcImRhdGVfZ2V0X2RheV9vZl95ZWFyXCIsXG4gICAgXCJkYXRlX2dldF9ob3VyXCIsXG4gICAgXCJkYXRlX2dldF9ob3VyX29mX3llYXJcIixcbiAgICBcImRhdGVfZ2V0X21pbnV0ZVwiLFxuICAgIFwiZGF0ZV9nZXRfbWludXRlX29mX3llYXJcIixcbiAgICBcImRhdGVfZ2V0X21vbnRoXCIsXG4gICAgXCJkYXRlX2dldF9zZWNvbmRcIixcbiAgICBcImRhdGVfZ2V0X3NlY29uZF9vZl95ZWFyXCIsXG4gICAgXCJkYXRlX2dldF90aW1lem9uZVwiLFxuICAgIFwiZGF0ZV9nZXRfd2Vla1wiLFxuICAgIFwiZGF0ZV9nZXRfd2Vla2RheVwiLFxuICAgIFwiZGF0ZV9nZXRfeWVhclwiLFxuICAgIFwiZGF0ZV9ob3VyX3NwYW5cIixcbiAgICBcImRhdGVfaW5jX2RheVwiLFxuICAgIFwiZGF0ZV9pbmNfaG91clwiLFxuICAgIFwiZGF0ZV9pbmNfbWludXRlXCIsXG4gICAgXCJkYXRlX2luY19tb250aFwiLFxuICAgIFwiZGF0ZV9pbmNfc2Vjb25kXCIsXG4gICAgXCJkYXRlX2luY193ZWVrXCIsXG4gICAgXCJkYXRlX2luY195ZWFyXCIsXG4gICAgXCJkYXRlX2lzX3RvZGF5XCIsXG4gICAgXCJkYXRlX2xlYXBfeWVhclwiLFxuICAgIFwiZGF0ZV9taW51dGVfc3BhblwiLFxuICAgIFwiZGF0ZV9tb250aF9zcGFuXCIsXG4gICAgXCJkYXRlX3NlY29uZF9zcGFuXCIsXG4gICAgXCJkYXRlX3NldF90aW1lem9uZVwiLFxuICAgIFwiZGF0ZV90aW1lX29mXCIsXG4gICAgXCJkYXRlX3RpbWVfc3RyaW5nXCIsXG4gICAgXCJkYXRlX3ZhbGlkX2RhdGV0aW1lXCIsXG4gICAgXCJkYXRlX3dlZWtfc3BhblwiLFxuICAgIFwiZGF0ZV95ZWFyX3NwYW5cIixcbiAgICBcImRiX3RvX2xpblwiLFxuICAgIFwiZGJnX2FkZF9mb250X2dseXBoc1wiLFxuICAgIFwiZGJnX2J1dHRvblwiLFxuICAgIFwiZGJnX2NoZWNrYm94XCIsXG4gICAgXCJkYmdfY29sb3JcIixcbiAgICBcImRiZ19jb2xvdXJcIixcbiAgICBcImRiZ19kcm9wX2Rvd25cIixcbiAgICBcImRiZ19zYW1lX2xpbmVcIixcbiAgICBcImRiZ19zZWN0aW9uXCIsXG4gICAgXCJkYmdfc2VjdGlvbl9kZWxldGVcIixcbiAgICBcImRiZ19zZWN0aW9uX2V4aXN0c1wiLFxuICAgIFwiZGJnX3NsaWRlclwiLFxuICAgIFwiZGJnX3NsaWRlcl9pbnRcIixcbiAgICBcImRiZ19zcHJpdGVcIixcbiAgICBcImRiZ190ZXh0XCIsXG4gICAgXCJkYmdfdGV4dF9pbnB1dFwiLFxuICAgIFwiZGJnX3ZpZXdcIixcbiAgICBcImRiZ192aWV3X2RlbGV0ZVwiLFxuICAgIFwiZGJnX3ZpZXdfZXhpc3RzXCIsXG4gICAgXCJkYmdfd2F0Y2hcIixcbiAgICBcImRjb3NcIixcbiAgICBcImRlYnVnX2V2ZW50XCIsXG4gICAgXCJkZWJ1Z19nZXRfY2FsbHN0YWNrXCIsXG4gICAgXCJkZWd0b3JhZFwiLFxuICAgIFwiZGV2aWNlX2dldF90aWx0X3hcIixcbiAgICBcImRldmljZV9nZXRfdGlsdF95XCIsXG4gICAgXCJkZXZpY2VfZ2V0X3RpbHRfelwiLFxuICAgIFwiZGV2aWNlX2lzX2tleXBhZF9vcGVuXCIsXG4gICAgXCJkZXZpY2VfbW91c2VfY2hlY2tfYnV0dG9uXCIsXG4gICAgXCJkZXZpY2VfbW91c2VfY2hlY2tfYnV0dG9uX3ByZXNzZWRcIixcbiAgICBcImRldmljZV9tb3VzZV9jaGVja19idXR0b25fcmVsZWFzZWRcIixcbiAgICBcImRldmljZV9tb3VzZV9kYmNsaWNrX2VuYWJsZVwiLFxuICAgIFwiZGV2aWNlX21vdXNlX3Jhd194XCIsXG4gICAgXCJkZXZpY2VfbW91c2VfcmF3X3lcIixcbiAgICBcImRldmljZV9tb3VzZV94XCIsXG4gICAgXCJkZXZpY2VfbW91c2VfeF90b19ndWlcIixcbiAgICBcImRldmljZV9tb3VzZV95XCIsXG4gICAgXCJkZXZpY2VfbW91c2VfeV90b19ndWlcIixcbiAgICBcImRpcmVjdG9yeV9jcmVhdGVcIixcbiAgICBcImRpcmVjdG9yeV9kZXN0cm95XCIsXG4gICAgXCJkaXJlY3RvcnlfZXhpc3RzXCIsXG4gICAgXCJkaXNwbGF5X2dldF9kcGlfeFwiLFxuICAgIFwiZGlzcGxheV9nZXRfZHBpX3lcIixcbiAgICBcImRpc3BsYXlfZ2V0X2ZyZXF1ZW5jeVwiLFxuICAgIFwiZGlzcGxheV9nZXRfZ3VpX2hlaWdodFwiLFxuICAgIFwiZGlzcGxheV9nZXRfZ3VpX3dpZHRoXCIsXG4gICAgXCJkaXNwbGF5X2dldF9oZWlnaHRcIixcbiAgICBcImRpc3BsYXlfZ2V0X29yaWVudGF0aW9uXCIsXG4gICAgXCJkaXNwbGF5X2dldF9zbGVlcF9tYXJnaW5cIixcbiAgICBcImRpc3BsYXlfZ2V0X3RpbWluZ19tZXRob2RcIixcbiAgICBcImRpc3BsYXlfZ2V0X3dpZHRoXCIsXG4gICAgXCJkaXNwbGF5X21vdXNlX2dldF94XCIsXG4gICAgXCJkaXNwbGF5X21vdXNlX2dldF95XCIsXG4gICAgXCJkaXNwbGF5X21vdXNlX3NldFwiLFxuICAgIFwiZGlzcGxheV9yZXNldFwiLFxuICAgIFwiZGlzcGxheV9zZXRfZ3VpX21heGltaXNlXCIsXG4gICAgXCJkaXNwbGF5X3NldF9ndWlfbWF4aW1pemVcIixcbiAgICBcImRpc3BsYXlfc2V0X2d1aV9zaXplXCIsXG4gICAgXCJkaXNwbGF5X3NldF9zbGVlcF9tYXJnaW5cIixcbiAgICBcImRpc3BsYXlfc2V0X3RpbWluZ19tZXRob2RcIixcbiAgICBcImRpc3BsYXlfc2V0X3VpX3Zpc2liaWxpdHlcIixcbiAgICBcImRpc3RhbmNlX3RvX29iamVjdFwiLFxuICAgIFwiZGlzdGFuY2VfdG9fcG9pbnRcIixcbiAgICBcImRvdF9wcm9kdWN0XCIsXG4gICAgXCJkb3RfcHJvZHVjdF8zZFwiLFxuICAgIFwiZG90X3Byb2R1Y3RfM2Rfbm9ybWFsaXNlZFwiLFxuICAgIFwiZG90X3Byb2R1Y3RfM2Rfbm9ybWFsaXplZFwiLFxuICAgIFwiZG90X3Byb2R1Y3Rfbm9ybWFsaXNlZFwiLFxuICAgIFwiZG90X3Byb2R1Y3Rfbm9ybWFsaXplZFwiLFxuICAgIFwiZHJhd19hcnJvd1wiLFxuICAgIFwiZHJhd19idXR0b25cIixcbiAgICBcImRyYXdfY2lyY2xlXCIsXG4gICAgXCJkcmF3X2NpcmNsZV9jb2xvclwiLFxuICAgIFwiZHJhd19jaXJjbGVfY29sb3VyXCIsXG4gICAgXCJkcmF3X2NsZWFyXCIsXG4gICAgXCJkcmF3X2NsZWFyX2FscGhhXCIsXG4gICAgXCJkcmF3X2VsbGlwc2VcIixcbiAgICBcImRyYXdfZWxsaXBzZV9jb2xvclwiLFxuICAgIFwiZHJhd19lbGxpcHNlX2NvbG91clwiLFxuICAgIFwiZHJhd19lbmFibGVfZHJhd2V2ZW50XCIsXG4gICAgXCJkcmF3X2VuYWJsZV9za2VsZXRvbl9ibGVuZG1vZGVzXCIsXG4gICAgXCJkcmF3X2VuYWJsZV9zd2ZfYWFcIixcbiAgICBcImRyYXdfZmx1c2hcIixcbiAgICBcImRyYXdfZ2V0X2FscGhhXCIsXG4gICAgXCJkcmF3X2dldF9jb2xvclwiLFxuICAgIFwiZHJhd19nZXRfY29sb3VyXCIsXG4gICAgXCJkcmF3X2dldF9lbmFibGVfc2tlbGV0b25fYmxlbmRtb2Rlc1wiLFxuICAgIFwiZHJhd19nZXRfZm9udFwiLFxuICAgIFwiZHJhd19nZXRfaGFsaWduXCIsXG4gICAgXCJkcmF3X2dldF9saWdodGluZ1wiLFxuICAgIFwiZHJhd19nZXRfc3dmX2FhX2xldmVsXCIsXG4gICAgXCJkcmF3X2dldF92YWxpZ25cIixcbiAgICBcImRyYXdfZ2V0cGl4ZWxcIixcbiAgICBcImRyYXdfZ2V0cGl4ZWxfZXh0XCIsXG4gICAgXCJkcmF3X2hlYWx0aGJhclwiLFxuICAgIFwiZHJhd19oaWdoc2NvcmVcIixcbiAgICBcImRyYXdfbGlnaHRfZGVmaW5lX2FtYmllbnRcIixcbiAgICBcImRyYXdfbGlnaHRfZGVmaW5lX2RpcmVjdGlvblwiLFxuICAgIFwiZHJhd19saWdodF9kZWZpbmVfcG9pbnRcIixcbiAgICBcImRyYXdfbGlnaHRfZW5hYmxlXCIsXG4gICAgXCJkcmF3X2xpZ2h0X2dldFwiLFxuICAgIFwiZHJhd19saWdodF9nZXRfYW1iaWVudFwiLFxuICAgIFwiZHJhd19saW5lXCIsXG4gICAgXCJkcmF3X2xpbmVfY29sb3JcIixcbiAgICBcImRyYXdfbGluZV9jb2xvdXJcIixcbiAgICBcImRyYXdfbGluZV93aWR0aFwiLFxuICAgIFwiZHJhd19saW5lX3dpZHRoX2NvbG9yXCIsXG4gICAgXCJkcmF3X2xpbmVfd2lkdGhfY29sb3VyXCIsXG4gICAgXCJkcmF3X3BhdGhcIixcbiAgICBcImRyYXdfcG9pbnRcIixcbiAgICBcImRyYXdfcG9pbnRfY29sb3JcIixcbiAgICBcImRyYXdfcG9pbnRfY29sb3VyXCIsXG4gICAgXCJkcmF3X3ByaW1pdGl2ZV9iZWdpblwiLFxuICAgIFwiZHJhd19wcmltaXRpdmVfYmVnaW5fdGV4dHVyZVwiLFxuICAgIFwiZHJhd19wcmltaXRpdmVfZW5kXCIsXG4gICAgXCJkcmF3X3JlY3RhbmdsZVwiLFxuICAgIFwiZHJhd19yZWN0YW5nbGVfY29sb3JcIixcbiAgICBcImRyYXdfcmVjdGFuZ2xlX2NvbG91clwiLFxuICAgIFwiZHJhd19yb3VuZHJlY3RcIixcbiAgICBcImRyYXdfcm91bmRyZWN0X2NvbG9yXCIsXG4gICAgXCJkcmF3X3JvdW5kcmVjdF9jb2xvcl9leHRcIixcbiAgICBcImRyYXdfcm91bmRyZWN0X2NvbG91clwiLFxuICAgIFwiZHJhd19yb3VuZHJlY3RfY29sb3VyX2V4dFwiLFxuICAgIFwiZHJhd19yb3VuZHJlY3RfZXh0XCIsXG4gICAgXCJkcmF3X3NlbGZcIixcbiAgICBcImRyYXdfc2V0X2FscGhhXCIsXG4gICAgXCJkcmF3X3NldF9jaXJjbGVfcHJlY2lzaW9uXCIsXG4gICAgXCJkcmF3X3NldF9jb2xvclwiLFxuICAgIFwiZHJhd19zZXRfY29sb3VyXCIsXG4gICAgXCJkcmF3X3NldF9mb250XCIsXG4gICAgXCJkcmF3X3NldF9oYWxpZ25cIixcbiAgICBcImRyYXdfc2V0X2xpZ2h0aW5nXCIsXG4gICAgXCJkcmF3X3NldF9zd2ZfYWFfbGV2ZWxcIixcbiAgICBcImRyYXdfc2V0X3ZhbGlnblwiLFxuICAgIFwiZHJhd19za2VsZXRvblwiLFxuICAgIFwiZHJhd19za2VsZXRvbl9jb2xsaXNpb25cIixcbiAgICBcImRyYXdfc2tlbGV0b25faW5zdGFuY2VcIixcbiAgICBcImRyYXdfc2tlbGV0b25fdGltZVwiLFxuICAgIFwiZHJhd19zcHJpdGVcIixcbiAgICBcImRyYXdfc3ByaXRlX2V4dFwiLFxuICAgIFwiZHJhd19zcHJpdGVfZ2VuZXJhbFwiLFxuICAgIFwiZHJhd19zcHJpdGVfcGFydFwiLFxuICAgIFwiZHJhd19zcHJpdGVfcGFydF9leHRcIixcbiAgICBcImRyYXdfc3ByaXRlX3Bvc1wiLFxuICAgIFwiZHJhd19zcHJpdGVfc3RyZXRjaGVkXCIsXG4gICAgXCJkcmF3X3Nwcml0ZV9zdHJldGNoZWRfZXh0XCIsXG4gICAgXCJkcmF3X3Nwcml0ZV90aWxlZFwiLFxuICAgIFwiZHJhd19zcHJpdGVfdGlsZWRfZXh0XCIsXG4gICAgXCJkcmF3X3N1cmZhY2VcIixcbiAgICBcImRyYXdfc3VyZmFjZV9leHRcIixcbiAgICBcImRyYXdfc3VyZmFjZV9nZW5lcmFsXCIsXG4gICAgXCJkcmF3X3N1cmZhY2VfcGFydFwiLFxuICAgIFwiZHJhd19zdXJmYWNlX3BhcnRfZXh0XCIsXG4gICAgXCJkcmF3X3N1cmZhY2Vfc3RyZXRjaGVkXCIsXG4gICAgXCJkcmF3X3N1cmZhY2Vfc3RyZXRjaGVkX2V4dFwiLFxuICAgIFwiZHJhd19zdXJmYWNlX3RpbGVkXCIsXG4gICAgXCJkcmF3X3N1cmZhY2VfdGlsZWRfZXh0XCIsXG4gICAgXCJkcmF3X3RleHRcIixcbiAgICBcImRyYXdfdGV4dF9jb2xvclwiLFxuICAgIFwiZHJhd190ZXh0X2NvbG91clwiLFxuICAgIFwiZHJhd190ZXh0X2V4dFwiLFxuICAgIFwiZHJhd190ZXh0X2V4dF9jb2xvclwiLFxuICAgIFwiZHJhd190ZXh0X2V4dF9jb2xvdXJcIixcbiAgICBcImRyYXdfdGV4dF9leHRfdHJhbnNmb3JtZWRcIixcbiAgICBcImRyYXdfdGV4dF9leHRfdHJhbnNmb3JtZWRfY29sb3JcIixcbiAgICBcImRyYXdfdGV4dF9leHRfdHJhbnNmb3JtZWRfY29sb3VyXCIsXG4gICAgXCJkcmF3X3RleHRfdHJhbnNmb3JtZWRcIixcbiAgICBcImRyYXdfdGV4dF90cmFuc2Zvcm1lZF9jb2xvclwiLFxuICAgIFwiZHJhd190ZXh0X3RyYW5zZm9ybWVkX2NvbG91clwiLFxuICAgIFwiZHJhd190ZXh0dXJlX2ZsdXNoXCIsXG4gICAgXCJkcmF3X3RpbGVcIixcbiAgICBcImRyYXdfdGlsZW1hcFwiLFxuICAgIFwiZHJhd190cmlhbmdsZVwiLFxuICAgIFwiZHJhd190cmlhbmdsZV9jb2xvclwiLFxuICAgIFwiZHJhd190cmlhbmdsZV9jb2xvdXJcIixcbiAgICBcImRyYXdfdmVydGV4XCIsXG4gICAgXCJkcmF3X3ZlcnRleF9jb2xvclwiLFxuICAgIFwiZHJhd192ZXJ0ZXhfY29sb3VyXCIsXG4gICAgXCJkcmF3X3ZlcnRleF90ZXh0dXJlXCIsXG4gICAgXCJkcmF3X3ZlcnRleF90ZXh0dXJlX2NvbG9yXCIsXG4gICAgXCJkcmF3X3ZlcnRleF90ZXh0dXJlX2NvbG91clwiLFxuICAgIFwiZHNfZXhpc3RzXCIsXG4gICAgXCJkc19ncmlkX2FkZFwiLFxuICAgIFwiZHNfZ3JpZF9hZGRfZGlza1wiLFxuICAgIFwiZHNfZ3JpZF9hZGRfZ3JpZF9yZWdpb25cIixcbiAgICBcImRzX2dyaWRfYWRkX3JlZ2lvblwiLFxuICAgIFwiZHNfZ3JpZF9jbGVhclwiLFxuICAgIFwiZHNfZ3JpZF9jb3B5XCIsXG4gICAgXCJkc19ncmlkX2NyZWF0ZVwiLFxuICAgIFwiZHNfZ3JpZF9kZXN0cm95XCIsXG4gICAgXCJkc19ncmlkX2dldFwiLFxuICAgIFwiZHNfZ3JpZF9nZXRfZGlza19tYXhcIixcbiAgICBcImRzX2dyaWRfZ2V0X2Rpc2tfbWVhblwiLFxuICAgIFwiZHNfZ3JpZF9nZXRfZGlza19taW5cIixcbiAgICBcImRzX2dyaWRfZ2V0X2Rpc2tfc3VtXCIsXG4gICAgXCJkc19ncmlkX2dldF9tYXhcIixcbiAgICBcImRzX2dyaWRfZ2V0X21lYW5cIixcbiAgICBcImRzX2dyaWRfZ2V0X21pblwiLFxuICAgIFwiZHNfZ3JpZF9nZXRfc3VtXCIsXG4gICAgXCJkc19ncmlkX2hlaWdodFwiLFxuICAgIFwiZHNfZ3JpZF9tdWx0aXBseVwiLFxuICAgIFwiZHNfZ3JpZF9tdWx0aXBseV9kaXNrXCIsXG4gICAgXCJkc19ncmlkX211bHRpcGx5X2dyaWRfcmVnaW9uXCIsXG4gICAgXCJkc19ncmlkX211bHRpcGx5X3JlZ2lvblwiLFxuICAgIFwiZHNfZ3JpZF9yZWFkXCIsXG4gICAgXCJkc19ncmlkX3Jlc2l6ZVwiLFxuICAgIFwiZHNfZ3JpZF9zZXRcIixcbiAgICBcImRzX2dyaWRfc2V0X2Rpc2tcIixcbiAgICBcImRzX2dyaWRfc2V0X2dyaWRfcmVnaW9uXCIsXG4gICAgXCJkc19ncmlkX3NldF9yZWdpb25cIixcbiAgICBcImRzX2dyaWRfc2h1ZmZsZVwiLFxuICAgIFwiZHNfZ3JpZF9zb3J0XCIsXG4gICAgXCJkc19ncmlkX3RvX21wX2dyaWRcIixcbiAgICBcImRzX2dyaWRfdmFsdWVfZGlza19leGlzdHNcIixcbiAgICBcImRzX2dyaWRfdmFsdWVfZGlza194XCIsXG4gICAgXCJkc19ncmlkX3ZhbHVlX2Rpc2tfeVwiLFxuICAgIFwiZHNfZ3JpZF92YWx1ZV9leGlzdHNcIixcbiAgICBcImRzX2dyaWRfdmFsdWVfeFwiLFxuICAgIFwiZHNfZ3JpZF92YWx1ZV95XCIsXG4gICAgXCJkc19ncmlkX3dpZHRoXCIsXG4gICAgXCJkc19ncmlkX3dyaXRlXCIsXG4gICAgXCJkc19saXN0X2FkZFwiLFxuICAgIFwiZHNfbGlzdF9jbGVhclwiLFxuICAgIFwiZHNfbGlzdF9jb3B5XCIsXG4gICAgXCJkc19saXN0X2NyZWF0ZVwiLFxuICAgIFwiZHNfbGlzdF9kZWxldGVcIixcbiAgICBcImRzX2xpc3RfZGVzdHJveVwiLFxuICAgIFwiZHNfbGlzdF9lbXB0eVwiLFxuICAgIFwiZHNfbGlzdF9maW5kX2luZGV4XCIsXG4gICAgXCJkc19saXN0X2ZpbmRfdmFsdWVcIixcbiAgICBcImRzX2xpc3RfaW5zZXJ0XCIsXG4gICAgXCJkc19saXN0X2lzX2xpc3RcIixcbiAgICBcImRzX2xpc3RfaXNfbWFwXCIsXG4gICAgXCJkc19saXN0X21hcmtfYXNfbGlzdFwiLFxuICAgIFwiZHNfbGlzdF9tYXJrX2FzX21hcFwiLFxuICAgIFwiZHNfbGlzdF9yZWFkXCIsXG4gICAgXCJkc19saXN0X3JlcGxhY2VcIixcbiAgICBcImRzX2xpc3Rfc2V0XCIsXG4gICAgXCJkc19saXN0X3NodWZmbGVcIixcbiAgICBcImRzX2xpc3Rfc2l6ZVwiLFxuICAgIFwiZHNfbGlzdF9zb3J0XCIsXG4gICAgXCJkc19saXN0X3dyaXRlXCIsXG4gICAgXCJkc19tYXBfYWRkXCIsXG4gICAgXCJkc19tYXBfYWRkX2xpc3RcIixcbiAgICBcImRzX21hcF9hZGRfbWFwXCIsXG4gICAgXCJkc19tYXBfY2xlYXJcIixcbiAgICBcImRzX21hcF9jb3B5XCIsXG4gICAgXCJkc19tYXBfY3JlYXRlXCIsXG4gICAgXCJkc19tYXBfZGVsZXRlXCIsXG4gICAgXCJkc19tYXBfZGVzdHJveVwiLFxuICAgIFwiZHNfbWFwX2VtcHR5XCIsXG4gICAgXCJkc19tYXBfZXhpc3RzXCIsXG4gICAgXCJkc19tYXBfZmluZF9maXJzdFwiLFxuICAgIFwiZHNfbWFwX2ZpbmRfbGFzdFwiLFxuICAgIFwiZHNfbWFwX2ZpbmRfbmV4dFwiLFxuICAgIFwiZHNfbWFwX2ZpbmRfcHJldmlvdXNcIixcbiAgICBcImRzX21hcF9maW5kX3ZhbHVlXCIsXG4gICAgXCJkc19tYXBfaXNfbGlzdFwiLFxuICAgIFwiZHNfbWFwX2lzX21hcFwiLFxuICAgIFwiZHNfbWFwX2tleXNfdG9fYXJyYXlcIixcbiAgICBcImRzX21hcF9yZWFkXCIsXG4gICAgXCJkc19tYXBfcmVwbGFjZVwiLFxuICAgIFwiZHNfbWFwX3JlcGxhY2VfbGlzdFwiLFxuICAgIFwiZHNfbWFwX3JlcGxhY2VfbWFwXCIsXG4gICAgXCJkc19tYXBfc2VjdXJlX2xvYWRcIixcbiAgICBcImRzX21hcF9zZWN1cmVfbG9hZF9idWZmZXJcIixcbiAgICBcImRzX21hcF9zZWN1cmVfc2F2ZVwiLFxuICAgIFwiZHNfbWFwX3NlY3VyZV9zYXZlX2J1ZmZlclwiLFxuICAgIFwiZHNfbWFwX3NldFwiLFxuICAgIFwiZHNfbWFwX3NpemVcIixcbiAgICBcImRzX21hcF92YWx1ZXNfdG9fYXJyYXlcIixcbiAgICBcImRzX21hcF93cml0ZVwiLFxuICAgIFwiZHNfcHJpb3JpdHlfYWRkXCIsXG4gICAgXCJkc19wcmlvcml0eV9jaGFuZ2VfcHJpb3JpdHlcIixcbiAgICBcImRzX3ByaW9yaXR5X2NsZWFyXCIsXG4gICAgXCJkc19wcmlvcml0eV9jb3B5XCIsXG4gICAgXCJkc19wcmlvcml0eV9jcmVhdGVcIixcbiAgICBcImRzX3ByaW9yaXR5X2RlbGV0ZV9tYXhcIixcbiAgICBcImRzX3ByaW9yaXR5X2RlbGV0ZV9taW5cIixcbiAgICBcImRzX3ByaW9yaXR5X2RlbGV0ZV92YWx1ZVwiLFxuICAgIFwiZHNfcHJpb3JpdHlfZGVzdHJveVwiLFxuICAgIFwiZHNfcHJpb3JpdHlfZW1wdHlcIixcbiAgICBcImRzX3ByaW9yaXR5X2ZpbmRfbWF4XCIsXG4gICAgXCJkc19wcmlvcml0eV9maW5kX21pblwiLFxuICAgIFwiZHNfcHJpb3JpdHlfZmluZF9wcmlvcml0eVwiLFxuICAgIFwiZHNfcHJpb3JpdHlfcmVhZFwiLFxuICAgIFwiZHNfcHJpb3JpdHlfc2l6ZVwiLFxuICAgIFwiZHNfcHJpb3JpdHlfd3JpdGVcIixcbiAgICBcImRzX3F1ZXVlX2NsZWFyXCIsXG4gICAgXCJkc19xdWV1ZV9jb3B5XCIsXG4gICAgXCJkc19xdWV1ZV9jcmVhdGVcIixcbiAgICBcImRzX3F1ZXVlX2RlcXVldWVcIixcbiAgICBcImRzX3F1ZXVlX2Rlc3Ryb3lcIixcbiAgICBcImRzX3F1ZXVlX2VtcHR5XCIsXG4gICAgXCJkc19xdWV1ZV9lbnF1ZXVlXCIsXG4gICAgXCJkc19xdWV1ZV9oZWFkXCIsXG4gICAgXCJkc19xdWV1ZV9yZWFkXCIsXG4gICAgXCJkc19xdWV1ZV9zaXplXCIsXG4gICAgXCJkc19xdWV1ZV90YWlsXCIsXG4gICAgXCJkc19xdWV1ZV93cml0ZVwiLFxuICAgIFwiZHNfc2V0X3ByZWNpc2lvblwiLFxuICAgIFwiZHNfc3RhY2tfY2xlYXJcIixcbiAgICBcImRzX3N0YWNrX2NvcHlcIixcbiAgICBcImRzX3N0YWNrX2NyZWF0ZVwiLFxuICAgIFwiZHNfc3RhY2tfZGVzdHJveVwiLFxuICAgIFwiZHNfc3RhY2tfZW1wdHlcIixcbiAgICBcImRzX3N0YWNrX3BvcFwiLFxuICAgIFwiZHNfc3RhY2tfcHVzaFwiLFxuICAgIFwiZHNfc3RhY2tfcmVhZFwiLFxuICAgIFwiZHNfc3RhY2tfc2l6ZVwiLFxuICAgIFwiZHNfc3RhY2tfdG9wXCIsXG4gICAgXCJkc19zdGFja193cml0ZVwiLFxuICAgIFwiZHNpblwiLFxuICAgIFwiZHRhblwiLFxuICAgIFwiZWZmZWN0X2NsZWFyXCIsXG4gICAgXCJlZmZlY3RfY3JlYXRlX2Fib3ZlXCIsXG4gICAgXCJlZmZlY3RfY3JlYXRlX2JlbG93XCIsXG4gICAgXCJlZmZlY3RfY3JlYXRlX2RlcHRoXCIsXG4gICAgXCJlZmZlY3RfY3JlYXRlX2xheWVyXCIsXG4gICAgXCJlbnZpcm9ubWVudF9nZXRfdmFyaWFibGVcIixcbiAgICBcImV2ZW50X2luaGVyaXRlZFwiLFxuICAgIFwiZXZlbnRfcGVyZm9ybVwiLFxuICAgIFwiZXZlbnRfcGVyZm9ybV9hc3luY1wiLFxuICAgIFwiZXZlbnRfcGVyZm9ybV9vYmplY3RcIixcbiAgICBcImV2ZW50X3VzZXJcIixcbiAgICBcImV4Y2VwdGlvbl91bmhhbmRsZWRfaGFuZGxlclwiLFxuICAgIFwiZXhwXCIsXG4gICAgXCJleHRlbnNpb25fZXhpc3RzXCIsXG4gICAgXCJleHRlbnNpb25fZ2V0X29wdGlvbl9jb3VudFwiLFxuICAgIFwiZXh0ZW5zaW9uX2dldF9vcHRpb25fbmFtZXNcIixcbiAgICBcImV4dGVuc2lvbl9nZXRfb3B0aW9uX3ZhbHVlXCIsXG4gICAgXCJleHRlbnNpb25fZ2V0X29wdGlvbnNcIixcbiAgICBcImV4dGVuc2lvbl9nZXRfdmVyc2lvblwiLFxuICAgIFwiZXh0ZXJuYWxfY2FsbFwiLFxuICAgIFwiZXh0ZXJuYWxfZGVmaW5lXCIsXG4gICAgXCJleHRlcm5hbF9mcmVlXCIsXG4gICAgXCJmaWxlX2F0dHJpYnV0ZXNcIixcbiAgICBcImZpbGVfYmluX2Nsb3NlXCIsXG4gICAgXCJmaWxlX2Jpbl9vcGVuXCIsXG4gICAgXCJmaWxlX2Jpbl9wb3NpdGlvblwiLFxuICAgIFwiZmlsZV9iaW5fcmVhZF9ieXRlXCIsXG4gICAgXCJmaWxlX2Jpbl9yZXdyaXRlXCIsXG4gICAgXCJmaWxlX2Jpbl9zZWVrXCIsXG4gICAgXCJmaWxlX2Jpbl9zaXplXCIsXG4gICAgXCJmaWxlX2Jpbl93cml0ZV9ieXRlXCIsXG4gICAgXCJmaWxlX2NvcHlcIixcbiAgICBcImZpbGVfZGVsZXRlXCIsXG4gICAgXCJmaWxlX2V4aXN0c1wiLFxuICAgIFwiZmlsZV9maW5kX2Nsb3NlXCIsXG4gICAgXCJmaWxlX2ZpbmRfZmlyc3RcIixcbiAgICBcImZpbGVfZmluZF9uZXh0XCIsXG4gICAgXCJmaWxlX3JlbmFtZVwiLFxuICAgIFwiZmlsZV90ZXh0X2Nsb3NlXCIsXG4gICAgXCJmaWxlX3RleHRfZW9mXCIsXG4gICAgXCJmaWxlX3RleHRfZW9sblwiLFxuICAgIFwiZmlsZV90ZXh0X29wZW5fYXBwZW5kXCIsXG4gICAgXCJmaWxlX3RleHRfb3Blbl9mcm9tX3N0cmluZ1wiLFxuICAgIFwiZmlsZV90ZXh0X29wZW5fcmVhZFwiLFxuICAgIFwiZmlsZV90ZXh0X29wZW5fd3JpdGVcIixcbiAgICBcImZpbGVfdGV4dF9yZWFkX3JlYWxcIixcbiAgICBcImZpbGVfdGV4dF9yZWFkX3N0cmluZ1wiLFxuICAgIFwiZmlsZV90ZXh0X3JlYWRsblwiLFxuICAgIFwiZmlsZV90ZXh0X3dyaXRlX3JlYWxcIixcbiAgICBcImZpbGVfdGV4dF93cml0ZV9zdHJpbmdcIixcbiAgICBcImZpbGVfdGV4dF93cml0ZWxuXCIsXG4gICAgXCJmaWxlbmFtZV9jaGFuZ2VfZXh0XCIsXG4gICAgXCJmaWxlbmFtZV9kaXJcIixcbiAgICBcImZpbGVuYW1lX2RyaXZlXCIsXG4gICAgXCJmaWxlbmFtZV9leHRcIixcbiAgICBcImZpbGVuYW1lX25hbWVcIixcbiAgICBcImZpbGVuYW1lX3BhdGhcIixcbiAgICBcImZsb29yXCIsXG4gICAgXCJmb250X2FkZFwiLFxuICAgIFwiZm9udF9hZGRfZW5hYmxlX2FhXCIsXG4gICAgXCJmb250X2FkZF9nZXRfZW5hYmxlX2FhXCIsXG4gICAgXCJmb250X2FkZF9zcHJpdGVcIixcbiAgICBcImZvbnRfYWRkX3Nwcml0ZV9leHRcIixcbiAgICBcImZvbnRfY2FjaGVfZ2x5cGhcIixcbiAgICBcImZvbnRfZGVsZXRlXCIsXG4gICAgXCJmb250X2VuYWJsZV9lZmZlY3RzXCIsXG4gICAgXCJmb250X2VuYWJsZV9zZGZcIixcbiAgICBcImZvbnRfZXhpc3RzXCIsXG4gICAgXCJmb250X2dldF9ib2xkXCIsXG4gICAgXCJmb250X2dldF9maXJzdFwiLFxuICAgIFwiZm9udF9nZXRfZm9udG5hbWVcIixcbiAgICBcImZvbnRfZ2V0X2luZm9cIixcbiAgICBcImZvbnRfZ2V0X2l0YWxpY1wiLFxuICAgIFwiZm9udF9nZXRfbGFzdFwiLFxuICAgIFwiZm9udF9nZXRfbmFtZVwiLFxuICAgIFwiZm9udF9nZXRfc2RmX2VuYWJsZWRcIixcbiAgICBcImZvbnRfZ2V0X3NkZl9zcHJlYWRcIixcbiAgICBcImZvbnRfZ2V0X3NpemVcIixcbiAgICBcImZvbnRfZ2V0X3RleHR1cmVcIixcbiAgICBcImZvbnRfZ2V0X3V2c1wiLFxuICAgIFwiZm9udF9yZXBsYWNlX3Nwcml0ZVwiLFxuICAgIFwiZm9udF9yZXBsYWNlX3Nwcml0ZV9leHRcIixcbiAgICBcImZvbnRfc2RmX3NwcmVhZFwiLFxuICAgIFwiZm9udF9zZXRfY2FjaGVfc2l6ZVwiLFxuICAgIFwiZnJhY1wiLFxuICAgIFwiZnhfY3JlYXRlXCIsXG4gICAgXCJmeF9nZXRfbmFtZVwiLFxuICAgIFwiZnhfZ2V0X3BhcmFtZXRlclwiLFxuICAgIFwiZnhfZ2V0X3BhcmFtZXRlcl9uYW1lc1wiLFxuICAgIFwiZnhfZ2V0X3BhcmFtZXRlcnNcIixcbiAgICBcImZ4X2dldF9zaW5nbGVfbGF5ZXJcIixcbiAgICBcImZ4X3NldF9wYXJhbWV0ZXJcIixcbiAgICBcImZ4X3NldF9wYXJhbWV0ZXJzXCIsXG4gICAgXCJmeF9zZXRfc2luZ2xlX2xheWVyXCIsXG4gICAgXCJnYW1lX2NoYW5nZVwiLFxuICAgIFwiZ2FtZV9lbmRcIixcbiAgICBcImdhbWVfZ2V0X3NwZWVkXCIsXG4gICAgXCJnYW1lX2xvYWRcIixcbiAgICBcImdhbWVfbG9hZF9idWZmZXJcIixcbiAgICBcImdhbWVfcmVzdGFydFwiLFxuICAgIFwiZ2FtZV9zYXZlXCIsXG4gICAgXCJnYW1lX3NhdmVfYnVmZmVyXCIsXG4gICAgXCJnYW1lX3NldF9zcGVlZFwiLFxuICAgIFwiZ2FtZXBhZF9heGlzX2NvdW50XCIsXG4gICAgXCJnYW1lcGFkX2F4aXNfdmFsdWVcIixcbiAgICBcImdhbWVwYWRfYnV0dG9uX2NoZWNrXCIsXG4gICAgXCJnYW1lcGFkX2J1dHRvbl9jaGVja19wcmVzc2VkXCIsXG4gICAgXCJnYW1lcGFkX2J1dHRvbl9jaGVja19yZWxlYXNlZFwiLFxuICAgIFwiZ2FtZXBhZF9idXR0b25fY291bnRcIixcbiAgICBcImdhbWVwYWRfYnV0dG9uX3ZhbHVlXCIsXG4gICAgXCJnYW1lcGFkX2dldF9heGlzX2RlYWR6b25lXCIsXG4gICAgXCJnYW1lcGFkX2dldF9idXR0b25fdGhyZXNob2xkXCIsXG4gICAgXCJnYW1lcGFkX2dldF9kZXNjcmlwdGlvblwiLFxuICAgIFwiZ2FtZXBhZF9nZXRfZGV2aWNlX2NvdW50XCIsXG4gICAgXCJnYW1lcGFkX2dldF9ndWlkXCIsXG4gICAgXCJnYW1lcGFkX2dldF9tYXBwaW5nXCIsXG4gICAgXCJnYW1lcGFkX2dldF9vcHRpb25cIixcbiAgICBcImdhbWVwYWRfaGF0X2NvdW50XCIsXG4gICAgXCJnYW1lcGFkX2hhdF92YWx1ZVwiLFxuICAgIFwiZ2FtZXBhZF9pc19jb25uZWN0ZWRcIixcbiAgICBcImdhbWVwYWRfaXNfc3VwcG9ydGVkXCIsXG4gICAgXCJnYW1lcGFkX3JlbW92ZV9tYXBwaW5nXCIsXG4gICAgXCJnYW1lcGFkX3NldF9heGlzX2RlYWR6b25lXCIsXG4gICAgXCJnYW1lcGFkX3NldF9idXR0b25fdGhyZXNob2xkXCIsXG4gICAgXCJnYW1lcGFkX3NldF9jb2xvclwiLFxuICAgIFwiZ2FtZXBhZF9zZXRfY29sb3VyXCIsXG4gICAgXCJnYW1lcGFkX3NldF9vcHRpb25cIixcbiAgICBcImdhbWVwYWRfc2V0X3ZpYnJhdGlvblwiLFxuICAgIFwiZ2FtZXBhZF90ZXN0X21hcHBpbmdcIixcbiAgICBcImdjX2NvbGxlY3RcIixcbiAgICBcImdjX2VuYWJsZVwiLFxuICAgIFwiZ2NfZ2V0X3N0YXRzXCIsXG4gICAgXCJnY19nZXRfdGFyZ2V0X2ZyYW1lX3RpbWVcIixcbiAgICBcImdjX2lzX2VuYWJsZWRcIixcbiAgICBcImdjX3RhcmdldF9mcmFtZV90aW1lXCIsXG4gICAgXCJnZXN0dXJlX2RvdWJsZV90YXBfZGlzdGFuY2VcIixcbiAgICBcImdlc3R1cmVfZG91YmxlX3RhcF90aW1lXCIsXG4gICAgXCJnZXN0dXJlX2RyYWdfZGlzdGFuY2VcIixcbiAgICBcImdlc3R1cmVfZHJhZ190aW1lXCIsXG4gICAgXCJnZXN0dXJlX2ZsaWNrX3NwZWVkXCIsXG4gICAgXCJnZXN0dXJlX2dldF9kb3VibGVfdGFwX2Rpc3RhbmNlXCIsXG4gICAgXCJnZXN0dXJlX2dldF9kb3VibGVfdGFwX3RpbWVcIixcbiAgICBcImdlc3R1cmVfZ2V0X2RyYWdfZGlzdGFuY2VcIixcbiAgICBcImdlc3R1cmVfZ2V0X2RyYWdfdGltZVwiLFxuICAgIFwiZ2VzdHVyZV9nZXRfZmxpY2tfc3BlZWRcIixcbiAgICBcImdlc3R1cmVfZ2V0X3BpbmNoX2FuZ2xlX2F3YXlcIixcbiAgICBcImdlc3R1cmVfZ2V0X3BpbmNoX2FuZ2xlX3Rvd2FyZHNcIixcbiAgICBcImdlc3R1cmVfZ2V0X3BpbmNoX2Rpc3RhbmNlXCIsXG4gICAgXCJnZXN0dXJlX2dldF9yb3RhdGVfYW5nbGVcIixcbiAgICBcImdlc3R1cmVfZ2V0X3JvdGF0ZV90aW1lXCIsXG4gICAgXCJnZXN0dXJlX2dldF90YXBfY291bnRcIixcbiAgICBcImdlc3R1cmVfcGluY2hfYW5nbGVfYXdheVwiLFxuICAgIFwiZ2VzdHVyZV9waW5jaF9hbmdsZV90b3dhcmRzXCIsXG4gICAgXCJnZXN0dXJlX3BpbmNoX2Rpc3RhbmNlXCIsXG4gICAgXCJnZXN0dXJlX3JvdGF0ZV9hbmdsZVwiLFxuICAgIFwiZ2VzdHVyZV9yb3RhdGVfdGltZVwiLFxuICAgIFwiZ2VzdHVyZV90YXBfY291bnRcIixcbiAgICBcImdldF9pbnRlZ2VyXCIsXG4gICAgXCJnZXRfaW50ZWdlcl9hc3luY1wiLFxuICAgIFwiZ2V0X2xvZ2luX2FzeW5jXCIsXG4gICAgXCJnZXRfb3Blbl9maWxlbmFtZVwiLFxuICAgIFwiZ2V0X29wZW5fZmlsZW5hbWVfZXh0XCIsXG4gICAgXCJnZXRfc2F2ZV9maWxlbmFtZVwiLFxuICAgIFwiZ2V0X3NhdmVfZmlsZW5hbWVfZXh0XCIsXG4gICAgXCJnZXRfc3RyaW5nXCIsXG4gICAgXCJnZXRfc3RyaW5nX2FzeW5jXCIsXG4gICAgXCJnZXRfdGltZXJcIixcbiAgICBcImdpZl9hZGRfc3VyZmFjZVwiLFxuICAgIFwiZ2lmX29wZW5cIixcbiAgICBcImdpZl9zYXZlXCIsXG4gICAgXCJnaWZfc2F2ZV9idWZmZXJcIixcbiAgICBcImdtbF9wcmFnbWFcIixcbiAgICBcImdtbF9yZWxlYXNlX21vZGVcIixcbiAgICBcImdwdV9nZXRfYWxwaGF0ZXN0ZW5hYmxlXCIsXG4gICAgXCJncHVfZ2V0X2FscGhhdGVzdHJlZlwiLFxuICAgIFwiZ3B1X2dldF9ibGVuZGVuYWJsZVwiLFxuICAgIFwiZ3B1X2dldF9ibGVuZG1vZGVcIixcbiAgICBcImdwdV9nZXRfYmxlbmRtb2RlX2Rlc3RcIixcbiAgICBcImdwdV9nZXRfYmxlbmRtb2RlX2Rlc3RhbHBoYVwiLFxuICAgIFwiZ3B1X2dldF9ibGVuZG1vZGVfZXh0XCIsXG4gICAgXCJncHVfZ2V0X2JsZW5kbW9kZV9leHRfc2VwYWxwaGFcIixcbiAgICBcImdwdV9nZXRfYmxlbmRtb2RlX3NyY1wiLFxuICAgIFwiZ3B1X2dldF9ibGVuZG1vZGVfc3JjYWxwaGFcIixcbiAgICBcImdwdV9nZXRfY29sb3J3cml0ZWVuYWJsZVwiLFxuICAgIFwiZ3B1X2dldF9jb2xvdXJ3cml0ZWVuYWJsZVwiLFxuICAgIFwiZ3B1X2dldF9jdWxsbW9kZVwiLFxuICAgIFwiZ3B1X2dldF9kZXB0aFwiLFxuICAgIFwiZ3B1X2dldF9mb2dcIixcbiAgICBcImdwdV9nZXRfc3RhdGVcIixcbiAgICBcImdwdV9nZXRfdGV4X2ZpbHRlclwiLFxuICAgIFwiZ3B1X2dldF90ZXhfZmlsdGVyX2V4dFwiLFxuICAgIFwiZ3B1X2dldF90ZXhfbWF4X2FuaXNvXCIsXG4gICAgXCJncHVfZ2V0X3RleF9tYXhfYW5pc29fZXh0XCIsXG4gICAgXCJncHVfZ2V0X3RleF9tYXhfbWlwXCIsXG4gICAgXCJncHVfZ2V0X3RleF9tYXhfbWlwX2V4dFwiLFxuICAgIFwiZ3B1X2dldF90ZXhfbWluX21pcFwiLFxuICAgIFwiZ3B1X2dldF90ZXhfbWluX21pcF9leHRcIixcbiAgICBcImdwdV9nZXRfdGV4X21pcF9iaWFzXCIsXG4gICAgXCJncHVfZ2V0X3RleF9taXBfYmlhc19leHRcIixcbiAgICBcImdwdV9nZXRfdGV4X21pcF9lbmFibGVcIixcbiAgICBcImdwdV9nZXRfdGV4X21pcF9lbmFibGVfZXh0XCIsXG4gICAgXCJncHVfZ2V0X3RleF9taXBfZmlsdGVyXCIsXG4gICAgXCJncHVfZ2V0X3RleF9taXBfZmlsdGVyX2V4dFwiLFxuICAgIFwiZ3B1X2dldF90ZXhfcmVwZWF0XCIsXG4gICAgXCJncHVfZ2V0X3RleF9yZXBlYXRfZXh0XCIsXG4gICAgXCJncHVfZ2V0X3RleGZpbHRlclwiLFxuICAgIFwiZ3B1X2dldF90ZXhmaWx0ZXJfZXh0XCIsXG4gICAgXCJncHVfZ2V0X3RleHJlcGVhdFwiLFxuICAgIFwiZ3B1X2dldF90ZXhyZXBlYXRfZXh0XCIsXG4gICAgXCJncHVfZ2V0X3pmdW5jXCIsXG4gICAgXCJncHVfZ2V0X3p0ZXN0ZW5hYmxlXCIsXG4gICAgXCJncHVfZ2V0X3p3cml0ZWVuYWJsZVwiLFxuICAgIFwiZ3B1X3BvcF9zdGF0ZVwiLFxuICAgIFwiZ3B1X3B1c2hfc3RhdGVcIixcbiAgICBcImdwdV9zZXRfYWxwaGF0ZXN0ZW5hYmxlXCIsXG4gICAgXCJncHVfc2V0X2FscGhhdGVzdHJlZlwiLFxuICAgIFwiZ3B1X3NldF9ibGVuZGVuYWJsZVwiLFxuICAgIFwiZ3B1X3NldF9ibGVuZG1vZGVcIixcbiAgICBcImdwdV9zZXRfYmxlbmRtb2RlX2V4dFwiLFxuICAgIFwiZ3B1X3NldF9ibGVuZG1vZGVfZXh0X3NlcGFscGhhXCIsXG4gICAgXCJncHVfc2V0X2NvbG9yd3JpdGVlbmFibGVcIixcbiAgICBcImdwdV9zZXRfY29sb3Vyd3JpdGVlbmFibGVcIixcbiAgICBcImdwdV9zZXRfY3VsbG1vZGVcIixcbiAgICBcImdwdV9zZXRfZGVwdGhcIixcbiAgICBcImdwdV9zZXRfZm9nXCIsXG4gICAgXCJncHVfc2V0X3N0YXRlXCIsXG4gICAgXCJncHVfc2V0X3RleF9maWx0ZXJcIixcbiAgICBcImdwdV9zZXRfdGV4X2ZpbHRlcl9leHRcIixcbiAgICBcImdwdV9zZXRfdGV4X21heF9hbmlzb1wiLFxuICAgIFwiZ3B1X3NldF90ZXhfbWF4X2FuaXNvX2V4dFwiLFxuICAgIFwiZ3B1X3NldF90ZXhfbWF4X21pcFwiLFxuICAgIFwiZ3B1X3NldF90ZXhfbWF4X21pcF9leHRcIixcbiAgICBcImdwdV9zZXRfdGV4X21pbl9taXBcIixcbiAgICBcImdwdV9zZXRfdGV4X21pbl9taXBfZXh0XCIsXG4gICAgXCJncHVfc2V0X3RleF9taXBfYmlhc1wiLFxuICAgIFwiZ3B1X3NldF90ZXhfbWlwX2JpYXNfZXh0XCIsXG4gICAgXCJncHVfc2V0X3RleF9taXBfZW5hYmxlXCIsXG4gICAgXCJncHVfc2V0X3RleF9taXBfZW5hYmxlX2V4dFwiLFxuICAgIFwiZ3B1X3NldF90ZXhfbWlwX2ZpbHRlclwiLFxuICAgIFwiZ3B1X3NldF90ZXhfbWlwX2ZpbHRlcl9leHRcIixcbiAgICBcImdwdV9zZXRfdGV4X3JlcGVhdFwiLFxuICAgIFwiZ3B1X3NldF90ZXhfcmVwZWF0X2V4dFwiLFxuICAgIFwiZ3B1X3NldF90ZXhmaWx0ZXJcIixcbiAgICBcImdwdV9zZXRfdGV4ZmlsdGVyX2V4dFwiLFxuICAgIFwiZ3B1X3NldF90ZXhyZXBlYXRcIixcbiAgICBcImdwdV9zZXRfdGV4cmVwZWF0X2V4dFwiLFxuICAgIFwiZ3B1X3NldF96ZnVuY1wiLFxuICAgIFwiZ3B1X3NldF96dGVzdGVuYWJsZVwiLFxuICAgIFwiZ3B1X3NldF96d3JpdGVlbmFibGVcIixcbiAgICBcImhhbmRsZV9wYXJzZVwiLFxuICAgIFwiaGlnaHNjb3JlX2FkZFwiLFxuICAgIFwiaGlnaHNjb3JlX2NsZWFyXCIsXG4gICAgXCJoaWdoc2NvcmVfbmFtZVwiLFxuICAgIFwiaGlnaHNjb3JlX3ZhbHVlXCIsXG4gICAgXCJodHRwX2dldFwiLFxuICAgIFwiaHR0cF9nZXRfZmlsZVwiLFxuICAgIFwiaHR0cF9nZXRfcmVxdWVzdF9jcm9zc29yaWdpblwiLFxuICAgIFwiaHR0cF9wb3N0X3N0cmluZ1wiLFxuICAgIFwiaHR0cF9yZXF1ZXN0XCIsXG4gICAgXCJodHRwX3NldF9yZXF1ZXN0X2Nyb3Nzb3JpZ2luXCIsXG4gICAgXCJpYXBfYWNxdWlyZVwiLFxuICAgIFwiaWFwX2FjdGl2YXRlXCIsXG4gICAgXCJpYXBfY29uc3VtZVwiLFxuICAgIFwiaWFwX2VudW1lcmF0ZV9wcm9kdWN0c1wiLFxuICAgIFwiaWFwX3Byb2R1Y3RfZGV0YWlsc1wiLFxuICAgIFwiaWFwX3B1cmNoYXNlX2RldGFpbHNcIixcbiAgICBcImlhcF9yZXN0b3JlX2FsbFwiLFxuICAgIFwiaWFwX3N0YXR1c1wiLFxuICAgIFwiaW5pX2Nsb3NlXCIsXG4gICAgXCJpbmlfa2V5X2RlbGV0ZVwiLFxuICAgIFwiaW5pX2tleV9leGlzdHNcIixcbiAgICBcImluaV9vcGVuXCIsXG4gICAgXCJpbmlfb3Blbl9mcm9tX3N0cmluZ1wiLFxuICAgIFwiaW5pX3JlYWRfcmVhbFwiLFxuICAgIFwiaW5pX3JlYWRfc3RyaW5nXCIsXG4gICAgXCJpbmlfc2VjdGlvbl9kZWxldGVcIixcbiAgICBcImluaV9zZWN0aW9uX2V4aXN0c1wiLFxuICAgIFwiaW5pX3dyaXRlX3JlYWxcIixcbiAgICBcImluaV93cml0ZV9zdHJpbmdcIixcbiAgICBcImluc3RhbmNlX2FjdGl2YXRlX2FsbFwiLFxuICAgIFwiaW5zdGFuY2VfYWN0aXZhdGVfbGF5ZXJcIixcbiAgICBcImluc3RhbmNlX2FjdGl2YXRlX29iamVjdFwiLFxuICAgIFwiaW5zdGFuY2VfYWN0aXZhdGVfcmVnaW9uXCIsXG4gICAgXCJpbnN0YW5jZV9jaGFuZ2VcIixcbiAgICBcImluc3RhbmNlX2NvcHlcIixcbiAgICBcImluc3RhbmNlX2NyZWF0ZV9kZXB0aFwiLFxuICAgIFwiaW5zdGFuY2VfY3JlYXRlX2xheWVyXCIsXG4gICAgXCJpbnN0YW5jZV9kZWFjdGl2YXRlX2FsbFwiLFxuICAgIFwiaW5zdGFuY2VfZGVhY3RpdmF0ZV9sYXllclwiLFxuICAgIFwiaW5zdGFuY2VfZGVhY3RpdmF0ZV9vYmplY3RcIixcbiAgICBcImluc3RhbmNlX2RlYWN0aXZhdGVfcmVnaW9uXCIsXG4gICAgXCJpbnN0YW5jZV9kZXN0cm95XCIsXG4gICAgXCJpbnN0YW5jZV9leGlzdHNcIixcbiAgICBcImluc3RhbmNlX2ZpbmRcIixcbiAgICBcImluc3RhbmNlX2Z1cnRoZXN0XCIsXG4gICAgXCJpbnN0YW5jZV9pZF9nZXRcIixcbiAgICBcImluc3RhbmNlX25lYXJlc3RcIixcbiAgICBcImluc3RhbmNlX251bWJlclwiLFxuICAgIFwiaW5zdGFuY2VfcGxhY2VcIixcbiAgICBcImluc3RhbmNlX3BsYWNlX2xpc3RcIixcbiAgICBcImluc3RhbmNlX3Bvc2l0aW9uXCIsXG4gICAgXCJpbnN0YW5jZV9wb3NpdGlvbl9saXN0XCIsXG4gICAgXCJpbnN0YW5jZW9mXCIsXG4gICAgXCJpbnQ2NFwiLFxuICAgIFwiaW9fY2xlYXJcIixcbiAgICBcImlyYW5kb21cIixcbiAgICBcImlyYW5kb21fcmFuZ2VcIixcbiAgICBcImlzX2FycmF5XCIsXG4gICAgXCJpc19ib29sXCIsXG4gICAgXCJpc19jYWxsYWJsZVwiLFxuICAgIFwiaXNfZGVidWdfb3ZlcmxheV9vcGVuXCIsXG4gICAgXCJpc19oYW5kbGVcIixcbiAgICBcImlzX2luZmluaXR5XCIsXG4gICAgXCJpc19pbnN0YW5jZW9mXCIsXG4gICAgXCJpc19pbnQzMlwiLFxuICAgIFwiaXNfaW50NjRcIixcbiAgICBcImlzX2tleWJvYXJkX3VzZWRfZGVidWdfb3ZlcmxheVwiLFxuICAgIFwiaXNfbWV0aG9kXCIsXG4gICAgXCJpc19tb3VzZV9vdmVyX2RlYnVnX292ZXJsYXlcIixcbiAgICBcImlzX25hblwiLFxuICAgIFwiaXNfbnVtZXJpY1wiLFxuICAgIFwiaXNfcHRyXCIsXG4gICAgXCJpc19yZWFsXCIsXG4gICAgXCJpc19zdHJpbmdcIixcbiAgICBcImlzX3N0cnVjdFwiLFxuICAgIFwiaXNfdW5kZWZpbmVkXCIsXG4gICAgXCJqc29uX2RlY29kZVwiLFxuICAgIFwianNvbl9lbmNvZGVcIixcbiAgICBcImpzb25fcGFyc2VcIixcbiAgICBcImpzb25fc3RyaW5naWZ5XCIsXG4gICAgXCJrZXlib2FyZF9jaGVja1wiLFxuICAgIFwia2V5Ym9hcmRfY2hlY2tfZGlyZWN0XCIsXG4gICAgXCJrZXlib2FyZF9jaGVja19wcmVzc2VkXCIsXG4gICAgXCJrZXlib2FyZF9jaGVja19yZWxlYXNlZFwiLFxuICAgIFwia2V5Ym9hcmRfY2xlYXJcIixcbiAgICBcImtleWJvYXJkX2dldF9tYXBcIixcbiAgICBcImtleWJvYXJkX2dldF9udW1sb2NrXCIsXG4gICAgXCJrZXlib2FyZF9rZXlfcHJlc3NcIixcbiAgICBcImtleWJvYXJkX2tleV9yZWxlYXNlXCIsXG4gICAgXCJrZXlib2FyZF9zZXRfbWFwXCIsXG4gICAgXCJrZXlib2FyZF9zZXRfbnVtbG9ja1wiLFxuICAgIFwia2V5Ym9hcmRfdW5zZXRfbWFwXCIsXG4gICAgXCJrZXlib2FyZF92aXJ0dWFsX2hlaWdodFwiLFxuICAgIFwia2V5Ym9hcmRfdmlydHVhbF9oaWRlXCIsXG4gICAgXCJrZXlib2FyZF92aXJ0dWFsX3Nob3dcIixcbiAgICBcImtleWJvYXJkX3ZpcnR1YWxfc3RhdHVzXCIsXG4gICAgXCJsYXllcl9hZGRfaW5zdGFuY2VcIixcbiAgICBcImxheWVyX2JhY2tncm91bmRfYWxwaGFcIixcbiAgICBcImxheWVyX2JhY2tncm91bmRfYmxlbmRcIixcbiAgICBcImxheWVyX2JhY2tncm91bmRfY2hhbmdlXCIsXG4gICAgXCJsYXllcl9iYWNrZ3JvdW5kX2NyZWF0ZVwiLFxuICAgIFwibGF5ZXJfYmFja2dyb3VuZF9kZXN0cm95XCIsXG4gICAgXCJsYXllcl9iYWNrZ3JvdW5kX2V4aXN0c1wiLFxuICAgIFwibGF5ZXJfYmFja2dyb3VuZF9nZXRfYWxwaGFcIixcbiAgICBcImxheWVyX2JhY2tncm91bmRfZ2V0X2JsZW5kXCIsXG4gICAgXCJsYXllcl9iYWNrZ3JvdW5kX2dldF9odGlsZWRcIixcbiAgICBcImxheWVyX2JhY2tncm91bmRfZ2V0X2lkXCIsXG4gICAgXCJsYXllcl9iYWNrZ3JvdW5kX2dldF9pbmRleFwiLFxuICAgIFwibGF5ZXJfYmFja2dyb3VuZF9nZXRfc3BlZWRcIixcbiAgICBcImxheWVyX2JhY2tncm91bmRfZ2V0X3Nwcml0ZVwiLFxuICAgIFwibGF5ZXJfYmFja2dyb3VuZF9nZXRfc3RyZXRjaFwiLFxuICAgIFwibGF5ZXJfYmFja2dyb3VuZF9nZXRfdmlzaWJsZVwiLFxuICAgIFwibGF5ZXJfYmFja2dyb3VuZF9nZXRfdnRpbGVkXCIsXG4gICAgXCJsYXllcl9iYWNrZ3JvdW5kX2dldF94c2NhbGVcIixcbiAgICBcImxheWVyX2JhY2tncm91bmRfZ2V0X3lzY2FsZVwiLFxuICAgIFwibGF5ZXJfYmFja2dyb3VuZF9odGlsZWRcIixcbiAgICBcImxheWVyX2JhY2tncm91bmRfaW5kZXhcIixcbiAgICBcImxheWVyX2JhY2tncm91bmRfc3BlZWRcIixcbiAgICBcImxheWVyX2JhY2tncm91bmRfc3ByaXRlXCIsXG4gICAgXCJsYXllcl9iYWNrZ3JvdW5kX3N0cmV0Y2hcIixcbiAgICBcImxheWVyX2JhY2tncm91bmRfdmlzaWJsZVwiLFxuICAgIFwibGF5ZXJfYmFja2dyb3VuZF92dGlsZWRcIixcbiAgICBcImxheWVyX2JhY2tncm91bmRfeHNjYWxlXCIsXG4gICAgXCJsYXllcl9iYWNrZ3JvdW5kX3lzY2FsZVwiLFxuICAgIFwibGF5ZXJfY2xlYXJfZnhcIixcbiAgICBcImxheWVyX2NyZWF0ZVwiLFxuICAgIFwibGF5ZXJfZGVwdGhcIixcbiAgICBcImxheWVyX2Rlc3Ryb3lcIixcbiAgICBcImxheWVyX2Rlc3Ryb3lfaW5zdGFuY2VzXCIsXG4gICAgXCJsYXllcl9lbGVtZW50X21vdmVcIixcbiAgICBcImxheWVyX2VuYWJsZV9meFwiLFxuICAgIFwibGF5ZXJfZXhpc3RzXCIsXG4gICAgXCJsYXllcl9mb3JjZV9kcmF3X2RlcHRoXCIsXG4gICAgXCJsYXllcl9meF9pc19lbmFibGVkXCIsXG4gICAgXCJsYXllcl9nZXRfYWxsXCIsXG4gICAgXCJsYXllcl9nZXRfYWxsX2VsZW1lbnRzXCIsXG4gICAgXCJsYXllcl9nZXRfZGVwdGhcIixcbiAgICBcImxheWVyX2dldF9lbGVtZW50X2xheWVyXCIsXG4gICAgXCJsYXllcl9nZXRfZWxlbWVudF90eXBlXCIsXG4gICAgXCJsYXllcl9nZXRfZm9yY2VkX2RlcHRoXCIsXG4gICAgXCJsYXllcl9nZXRfZnhcIixcbiAgICBcImxheWVyX2dldF9oc3BlZWRcIixcbiAgICBcImxheWVyX2dldF9pZFwiLFxuICAgIFwibGF5ZXJfZ2V0X2lkX2F0X2RlcHRoXCIsXG4gICAgXCJsYXllcl9nZXRfbmFtZVwiLFxuICAgIFwibGF5ZXJfZ2V0X3NjcmlwdF9iZWdpblwiLFxuICAgIFwibGF5ZXJfZ2V0X3NjcmlwdF9lbmRcIixcbiAgICBcImxheWVyX2dldF9zaGFkZXJcIixcbiAgICBcImxheWVyX2dldF90YXJnZXRfcm9vbVwiLFxuICAgIFwibGF5ZXJfZ2V0X3Zpc2libGVcIixcbiAgICBcImxheWVyX2dldF92c3BlZWRcIixcbiAgICBcImxheWVyX2dldF94XCIsXG4gICAgXCJsYXllcl9nZXRfeVwiLFxuICAgIFwibGF5ZXJfaGFzX2luc3RhbmNlXCIsXG4gICAgXCJsYXllcl9oc3BlZWRcIixcbiAgICBcImxheWVyX2luc3RhbmNlX2dldF9pbnN0YW5jZVwiLFxuICAgIFwibGF5ZXJfaXNfZHJhd19kZXB0aF9mb3JjZWRcIixcbiAgICBcImxheWVyX3Jlc2V0X3RhcmdldF9yb29tXCIsXG4gICAgXCJsYXllcl9zY3JpcHRfYmVnaW5cIixcbiAgICBcImxheWVyX3NjcmlwdF9lbmRcIixcbiAgICBcImxheWVyX3NlcXVlbmNlX2FuZ2xlXCIsXG4gICAgXCJsYXllcl9zZXF1ZW5jZV9jcmVhdGVcIixcbiAgICBcImxheWVyX3NlcXVlbmNlX2Rlc3Ryb3lcIixcbiAgICBcImxheWVyX3NlcXVlbmNlX2V4aXN0c1wiLFxuICAgIFwibGF5ZXJfc2VxdWVuY2VfZ2V0X2FuZ2xlXCIsXG4gICAgXCJsYXllcl9zZXF1ZW5jZV9nZXRfaGVhZGRpclwiLFxuICAgIFwibGF5ZXJfc2VxdWVuY2VfZ2V0X2hlYWRwb3NcIixcbiAgICBcImxheWVyX3NlcXVlbmNlX2dldF9pbnN0YW5jZVwiLFxuICAgIFwibGF5ZXJfc2VxdWVuY2VfZ2V0X2xlbmd0aFwiLFxuICAgIFwibGF5ZXJfc2VxdWVuY2VfZ2V0X3NlcXVlbmNlXCIsXG4gICAgXCJsYXllcl9zZXF1ZW5jZV9nZXRfc3BlZWRzY2FsZVwiLFxuICAgIFwibGF5ZXJfc2VxdWVuY2VfZ2V0X3hcIixcbiAgICBcImxheWVyX3NlcXVlbmNlX2dldF94c2NhbGVcIixcbiAgICBcImxheWVyX3NlcXVlbmNlX2dldF95XCIsXG4gICAgXCJsYXllcl9zZXF1ZW5jZV9nZXRfeXNjYWxlXCIsXG4gICAgXCJsYXllcl9zZXF1ZW5jZV9oZWFkZGlyXCIsXG4gICAgXCJsYXllcl9zZXF1ZW5jZV9oZWFkcG9zXCIsXG4gICAgXCJsYXllcl9zZXF1ZW5jZV9pc19maW5pc2hlZFwiLFxuICAgIFwibGF5ZXJfc2VxdWVuY2VfaXNfcGF1c2VkXCIsXG4gICAgXCJsYXllcl9zZXF1ZW5jZV9wYXVzZVwiLFxuICAgIFwibGF5ZXJfc2VxdWVuY2VfcGxheVwiLFxuICAgIFwibGF5ZXJfc2VxdWVuY2Vfc3BlZWRzY2FsZVwiLFxuICAgIFwibGF5ZXJfc2VxdWVuY2VfeFwiLFxuICAgIFwibGF5ZXJfc2VxdWVuY2VfeHNjYWxlXCIsXG4gICAgXCJsYXllcl9zZXF1ZW5jZV95XCIsXG4gICAgXCJsYXllcl9zZXF1ZW5jZV95c2NhbGVcIixcbiAgICBcImxheWVyX3NldF9meFwiLFxuICAgIFwibGF5ZXJfc2V0X3RhcmdldF9yb29tXCIsXG4gICAgXCJsYXllcl9zZXRfdmlzaWJsZVwiLFxuICAgIFwibGF5ZXJfc2hhZGVyXCIsXG4gICAgXCJsYXllcl9zcHJpdGVfYWxwaGFcIixcbiAgICBcImxheWVyX3Nwcml0ZV9hbmdsZVwiLFxuICAgIFwibGF5ZXJfc3ByaXRlX2JsZW5kXCIsXG4gICAgXCJsYXllcl9zcHJpdGVfY2hhbmdlXCIsXG4gICAgXCJsYXllcl9zcHJpdGVfY3JlYXRlXCIsXG4gICAgXCJsYXllcl9zcHJpdGVfZGVzdHJveVwiLFxuICAgIFwibGF5ZXJfc3ByaXRlX2V4aXN0c1wiLFxuICAgIFwibGF5ZXJfc3ByaXRlX2dldF9hbHBoYVwiLFxuICAgIFwibGF5ZXJfc3ByaXRlX2dldF9hbmdsZVwiLFxuICAgIFwibGF5ZXJfc3ByaXRlX2dldF9ibGVuZFwiLFxuICAgIFwibGF5ZXJfc3ByaXRlX2dldF9pZFwiLFxuICAgIFwibGF5ZXJfc3ByaXRlX2dldF9pbmRleFwiLFxuICAgIFwibGF5ZXJfc3ByaXRlX2dldF9zcGVlZFwiLFxuICAgIFwibGF5ZXJfc3ByaXRlX2dldF9zcHJpdGVcIixcbiAgICBcImxheWVyX3Nwcml0ZV9nZXRfeFwiLFxuICAgIFwibGF5ZXJfc3ByaXRlX2dldF94c2NhbGVcIixcbiAgICBcImxheWVyX3Nwcml0ZV9nZXRfeVwiLFxuICAgIFwibGF5ZXJfc3ByaXRlX2dldF95c2NhbGVcIixcbiAgICBcImxheWVyX3Nwcml0ZV9pbmRleFwiLFxuICAgIFwibGF5ZXJfc3ByaXRlX3NwZWVkXCIsXG4gICAgXCJsYXllcl9zcHJpdGVfeFwiLFxuICAgIFwibGF5ZXJfc3ByaXRlX3hzY2FsZVwiLFxuICAgIFwibGF5ZXJfc3ByaXRlX3lcIixcbiAgICBcImxheWVyX3Nwcml0ZV95c2NhbGVcIixcbiAgICBcImxheWVyX3RpbGVfYWxwaGFcIixcbiAgICBcImxheWVyX3RpbGVfYmxlbmRcIixcbiAgICBcImxheWVyX3RpbGVfY2hhbmdlXCIsXG4gICAgXCJsYXllcl90aWxlX2NyZWF0ZVwiLFxuICAgIFwibGF5ZXJfdGlsZV9kZXN0cm95XCIsXG4gICAgXCJsYXllcl90aWxlX2V4aXN0c1wiLFxuICAgIFwibGF5ZXJfdGlsZV9nZXRfYWxwaGFcIixcbiAgICBcImxheWVyX3RpbGVfZ2V0X2JsZW5kXCIsXG4gICAgXCJsYXllcl90aWxlX2dldF9yZWdpb25cIixcbiAgICBcImxheWVyX3RpbGVfZ2V0X3Nwcml0ZVwiLFxuICAgIFwibGF5ZXJfdGlsZV9nZXRfdmlzaWJsZVwiLFxuICAgIFwibGF5ZXJfdGlsZV9nZXRfeFwiLFxuICAgIFwibGF5ZXJfdGlsZV9nZXRfeHNjYWxlXCIsXG4gICAgXCJsYXllcl90aWxlX2dldF95XCIsXG4gICAgXCJsYXllcl90aWxlX2dldF95c2NhbGVcIixcbiAgICBcImxheWVyX3RpbGVfcmVnaW9uXCIsXG4gICAgXCJsYXllcl90aWxlX3Zpc2libGVcIixcbiAgICBcImxheWVyX3RpbGVfeFwiLFxuICAgIFwibGF5ZXJfdGlsZV94c2NhbGVcIixcbiAgICBcImxheWVyX3RpbGVfeVwiLFxuICAgIFwibGF5ZXJfdGlsZV95c2NhbGVcIixcbiAgICBcImxheWVyX3RpbGVtYXBfY3JlYXRlXCIsXG4gICAgXCJsYXllcl90aWxlbWFwX2Rlc3Ryb3lcIixcbiAgICBcImxheWVyX3RpbGVtYXBfZXhpc3RzXCIsXG4gICAgXCJsYXllcl90aWxlbWFwX2dldF9pZFwiLFxuICAgIFwibGF5ZXJfdnNwZWVkXCIsXG4gICAgXCJsYXllcl94XCIsXG4gICAgXCJsYXllcl95XCIsXG4gICAgXCJsZW5ndGhkaXJfeFwiLFxuICAgIFwibGVuZ3RoZGlyX3lcIixcbiAgICBcImxlcnBcIixcbiAgICBcImxpbl90b19kYlwiLFxuICAgIFwibG5cIixcbiAgICBcImxvYWRfY3N2XCIsXG4gICAgXCJsb2cxMFwiLFxuICAgIFwibG9nMlwiLFxuICAgIFwibG9nblwiLFxuICAgIFwibWFrZV9jb2xvcl9oc3ZcIixcbiAgICBcIm1ha2VfY29sb3JfcmdiXCIsXG4gICAgXCJtYWtlX2NvbG91cl9oc3ZcIixcbiAgICBcIm1ha2VfY29sb3VyX3JnYlwiLFxuICAgIFwibWF0aF9nZXRfZXBzaWxvblwiLFxuICAgIFwibWF0aF9zZXRfZXBzaWxvblwiLFxuICAgIFwibWF0cml4X2J1aWxkXCIsXG4gICAgXCJtYXRyaXhfYnVpbGRfaWRlbnRpdHlcIixcbiAgICBcIm1hdHJpeF9idWlsZF9sb29rYXRcIixcbiAgICBcIm1hdHJpeF9idWlsZF9wcm9qZWN0aW9uX29ydGhvXCIsXG4gICAgXCJtYXRyaXhfYnVpbGRfcHJvamVjdGlvbl9wZXJzcGVjdGl2ZVwiLFxuICAgIFwibWF0cml4X2J1aWxkX3Byb2plY3Rpb25fcGVyc3BlY3RpdmVfZm92XCIsXG4gICAgXCJtYXRyaXhfZ2V0XCIsXG4gICAgXCJtYXRyaXhfbXVsdGlwbHlcIixcbiAgICBcIm1hdHJpeF9zZXRcIixcbiAgICBcIm1hdHJpeF9zdGFja19jbGVhclwiLFxuICAgIFwibWF0cml4X3N0YWNrX2lzX2VtcHR5XCIsXG4gICAgXCJtYXRyaXhfc3RhY2tfcG9wXCIsXG4gICAgXCJtYXRyaXhfc3RhY2tfcHVzaFwiLFxuICAgIFwibWF0cml4X3N0YWNrX3NldFwiLFxuICAgIFwibWF0cml4X3N0YWNrX3RvcFwiLFxuICAgIFwibWF0cml4X3RyYW5zZm9ybV92ZXJ0ZXhcIixcbiAgICBcIm1heFwiLFxuICAgIFwibWQ1X2ZpbGVcIixcbiAgICBcIm1kNV9zdHJpbmdfdW5pY29kZVwiLFxuICAgIFwibWQ1X3N0cmluZ191dGY4XCIsXG4gICAgXCJtZWFuXCIsXG4gICAgXCJtZWRpYW5cIixcbiAgICBcIm1lcmdlX2NvbG9yXCIsXG4gICAgXCJtZXJnZV9jb2xvdXJcIixcbiAgICBcIm1ldGhvZFwiLFxuICAgIFwibWV0aG9kX2NhbGxcIixcbiAgICBcIm1ldGhvZF9nZXRfaW5kZXhcIixcbiAgICBcIm1ldGhvZF9nZXRfc2VsZlwiLFxuICAgIFwibWluXCIsXG4gICAgXCJtb3Rpb25fYWRkXCIsXG4gICAgXCJtb3Rpb25fc2V0XCIsXG4gICAgXCJtb3VzZV9jaGVja19idXR0b25cIixcbiAgICBcIm1vdXNlX2NoZWNrX2J1dHRvbl9wcmVzc2VkXCIsXG4gICAgXCJtb3VzZV9jaGVja19idXR0b25fcmVsZWFzZWRcIixcbiAgICBcIm1vdXNlX2NsZWFyXCIsXG4gICAgXCJtb3VzZV93aGVlbF9kb3duXCIsXG4gICAgXCJtb3VzZV93aGVlbF91cFwiLFxuICAgIFwibW92ZV9hbmRfY29sbGlkZVwiLFxuICAgIFwibW92ZV9ib3VuY2VfYWxsXCIsXG4gICAgXCJtb3ZlX2JvdW5jZV9zb2xpZFwiLFxuICAgIFwibW92ZV9jb250YWN0X2FsbFwiLFxuICAgIFwibW92ZV9jb250YWN0X3NvbGlkXCIsXG4gICAgXCJtb3ZlX291dHNpZGVfYWxsXCIsXG4gICAgXCJtb3ZlX291dHNpZGVfc29saWRcIixcbiAgICBcIm1vdmVfcmFuZG9tXCIsXG4gICAgXCJtb3ZlX3NuYXBcIixcbiAgICBcIm1vdmVfdG93YXJkc19wb2ludFwiLFxuICAgIFwibW92ZV93cmFwXCIsXG4gICAgXCJtcF9ncmlkX2FkZF9jZWxsXCIsXG4gICAgXCJtcF9ncmlkX2FkZF9pbnN0YW5jZXNcIixcbiAgICBcIm1wX2dyaWRfYWRkX3JlY3RhbmdsZVwiLFxuICAgIFwibXBfZ3JpZF9jbGVhcl9hbGxcIixcbiAgICBcIm1wX2dyaWRfY2xlYXJfY2VsbFwiLFxuICAgIFwibXBfZ3JpZF9jbGVhcl9yZWN0YW5nbGVcIixcbiAgICBcIm1wX2dyaWRfY3JlYXRlXCIsXG4gICAgXCJtcF9ncmlkX2Rlc3Ryb3lcIixcbiAgICBcIm1wX2dyaWRfZHJhd1wiLFxuICAgIFwibXBfZ3JpZF9nZXRfY2VsbFwiLFxuICAgIFwibXBfZ3JpZF9wYXRoXCIsXG4gICAgXCJtcF9ncmlkX3RvX2RzX2dyaWRcIixcbiAgICBcIm1wX2xpbmVhcl9wYXRoXCIsXG4gICAgXCJtcF9saW5lYXJfcGF0aF9vYmplY3RcIixcbiAgICBcIm1wX2xpbmVhcl9zdGVwXCIsXG4gICAgXCJtcF9saW5lYXJfc3RlcF9vYmplY3RcIixcbiAgICBcIm1wX3BvdGVudGlhbF9wYXRoXCIsXG4gICAgXCJtcF9wb3RlbnRpYWxfcGF0aF9vYmplY3RcIixcbiAgICBcIm1wX3BvdGVudGlhbF9zZXR0aW5nc1wiLFxuICAgIFwibXBfcG90ZW50aWFsX3N0ZXBcIixcbiAgICBcIm1wX3BvdGVudGlhbF9zdGVwX29iamVjdFwiLFxuICAgIFwibmFtZW9mXCIsXG4gICAgXCJuZXR3b3JrX2Nvbm5lY3RcIixcbiAgICBcIm5ldHdvcmtfY29ubmVjdF9hc3luY1wiLFxuICAgIFwibmV0d29ya19jb25uZWN0X3Jhd1wiLFxuICAgIFwibmV0d29ya19jb25uZWN0X3Jhd19hc3luY1wiLFxuICAgIFwibmV0d29ya19jcmVhdGVfc2VydmVyXCIsXG4gICAgXCJuZXR3b3JrX2NyZWF0ZV9zZXJ2ZXJfcmF3XCIsXG4gICAgXCJuZXR3b3JrX2NyZWF0ZV9zb2NrZXRcIixcbiAgICBcIm5ldHdvcmtfY3JlYXRlX3NvY2tldF9leHRcIixcbiAgICBcIm5ldHdvcmtfZGVzdHJveVwiLFxuICAgIFwibmV0d29ya19yZXNvbHZlXCIsXG4gICAgXCJuZXR3b3JrX3NlbmRfYnJvYWRjYXN0XCIsXG4gICAgXCJuZXR3b3JrX3NlbmRfcGFja2V0XCIsXG4gICAgXCJuZXR3b3JrX3NlbmRfcmF3XCIsXG4gICAgXCJuZXR3b3JrX3NlbmRfdWRwXCIsXG4gICAgXCJuZXR3b3JrX3NlbmRfdWRwX3Jhd1wiLFxuICAgIFwibmV0d29ya19zZXRfY29uZmlnXCIsXG4gICAgXCJuZXR3b3JrX3NldF90aW1lb3V0XCIsXG4gICAgXCJvYmplY3RfZXhpc3RzXCIsXG4gICAgXCJvYmplY3RfZ2V0X21hc2tcIixcbiAgICBcIm9iamVjdF9nZXRfbmFtZVwiLFxuICAgIFwib2JqZWN0X2dldF9wYXJlbnRcIixcbiAgICBcIm9iamVjdF9nZXRfcGVyc2lzdGVudFwiLFxuICAgIFwib2JqZWN0X2dldF9waHlzaWNzXCIsXG4gICAgXCJvYmplY3RfZ2V0X3NvbGlkXCIsXG4gICAgXCJvYmplY3RfZ2V0X3Nwcml0ZVwiLFxuICAgIFwib2JqZWN0X2dldF92aXNpYmxlXCIsXG4gICAgXCJvYmplY3RfaXNfYW5jZXN0b3JcIixcbiAgICBcIm9iamVjdF9zZXRfbWFza1wiLFxuICAgIFwib2JqZWN0X3NldF9wZXJzaXN0ZW50XCIsXG4gICAgXCJvYmplY3Rfc2V0X3NvbGlkXCIsXG4gICAgXCJvYmplY3Rfc2V0X3Nwcml0ZVwiLFxuICAgIFwib2JqZWN0X3NldF92aXNpYmxlXCIsXG4gICAgXCJvcmRcIixcbiAgICBcIm9zX2NoZWNrX3Blcm1pc3Npb25cIixcbiAgICBcIm9zX2dldF9jb25maWdcIixcbiAgICBcIm9zX2dldF9pbmZvXCIsXG4gICAgXCJvc19nZXRfbGFuZ3VhZ2VcIixcbiAgICBcIm9zX2dldF9yZWdpb25cIixcbiAgICBcIm9zX2lzX25ldHdvcmtfY29ubmVjdGVkXCIsXG4gICAgXCJvc19pc19wYXVzZWRcIixcbiAgICBcIm9zX2xvY2tfb3JpZW50YXRpb25cIixcbiAgICBcIm9zX3Bvd2Vyc2F2ZV9lbmFibGVcIixcbiAgICBcIm9zX3JlcXVlc3RfcGVybWlzc2lvblwiLFxuICAgIFwib3Nfc2V0X29yaWVudGF0aW9uX2xvY2tcIixcbiAgICBcInBhcmFtZXRlcl9jb3VudFwiLFxuICAgIFwicGFyYW1ldGVyX3N0cmluZ1wiLFxuICAgIFwicGFydF9lbWl0dGVyX2J1cnN0XCIsXG4gICAgXCJwYXJ0X2VtaXR0ZXJfY2xlYXJcIixcbiAgICBcInBhcnRfZW1pdHRlcl9jcmVhdGVcIixcbiAgICBcInBhcnRfZW1pdHRlcl9kZWxheVwiLFxuICAgIFwicGFydF9lbWl0dGVyX2Rlc3Ryb3lcIixcbiAgICBcInBhcnRfZW1pdHRlcl9kZXN0cm95X2FsbFwiLFxuICAgIFwicGFydF9lbWl0dGVyX2VuYWJsZVwiLFxuICAgIFwicGFydF9lbWl0dGVyX2V4aXN0c1wiLFxuICAgIFwicGFydF9lbWl0dGVyX2ludGVydmFsXCIsXG4gICAgXCJwYXJ0X2VtaXR0ZXJfcmVnaW9uXCIsXG4gICAgXCJwYXJ0X2VtaXR0ZXJfcmVsYXRpdmVcIixcbiAgICBcInBhcnRfZW1pdHRlcl9zdHJlYW1cIixcbiAgICBcInBhcnRfcGFydGljbGVzX2J1cnN0XCIsXG4gICAgXCJwYXJ0X3BhcnRpY2xlc19jbGVhclwiLFxuICAgIFwicGFydF9wYXJ0aWNsZXNfY291bnRcIixcbiAgICBcInBhcnRfcGFydGljbGVzX2NyZWF0ZVwiLFxuICAgIFwicGFydF9wYXJ0aWNsZXNfY3JlYXRlX2NvbG9yXCIsXG4gICAgXCJwYXJ0X3BhcnRpY2xlc19jcmVhdGVfY29sb3VyXCIsXG4gICAgXCJwYXJ0X3N5c3RlbV9hbmdsZVwiLFxuICAgIFwicGFydF9zeXN0ZW1fYXV0b21hdGljX2RyYXdcIixcbiAgICBcInBhcnRfc3lzdGVtX2F1dG9tYXRpY191cGRhdGVcIixcbiAgICBcInBhcnRfc3lzdGVtX2NsZWFyXCIsXG4gICAgXCJwYXJ0X3N5c3RlbV9jb2xvclwiLFxuICAgIFwicGFydF9zeXN0ZW1fY29sb3VyXCIsXG4gICAgXCJwYXJ0X3N5c3RlbV9jcmVhdGVcIixcbiAgICBcInBhcnRfc3lzdGVtX2NyZWF0ZV9sYXllclwiLFxuICAgIFwicGFydF9zeXN0ZW1fZGVwdGhcIixcbiAgICBcInBhcnRfc3lzdGVtX2Rlc3Ryb3lcIixcbiAgICBcInBhcnRfc3lzdGVtX2RyYXdfb3JkZXJcIixcbiAgICBcInBhcnRfc3lzdGVtX2RyYXdpdFwiLFxuICAgIFwicGFydF9zeXN0ZW1fZXhpc3RzXCIsXG4gICAgXCJwYXJ0X3N5c3RlbV9nZXRfaW5mb1wiLFxuICAgIFwicGFydF9zeXN0ZW1fZ2V0X2xheWVyXCIsXG4gICAgXCJwYXJ0X3N5c3RlbV9nbG9iYWxfc3BhY2VcIixcbiAgICBcInBhcnRfc3lzdGVtX2xheWVyXCIsXG4gICAgXCJwYXJ0X3N5c3RlbV9wb3NpdGlvblwiLFxuICAgIFwicGFydF9zeXN0ZW1fdXBkYXRlXCIsXG4gICAgXCJwYXJ0X3R5cGVfYWxwaGExXCIsXG4gICAgXCJwYXJ0X3R5cGVfYWxwaGEyXCIsXG4gICAgXCJwYXJ0X3R5cGVfYWxwaGEzXCIsXG4gICAgXCJwYXJ0X3R5cGVfYmxlbmRcIixcbiAgICBcInBhcnRfdHlwZV9jbGVhclwiLFxuICAgIFwicGFydF90eXBlX2NvbG9yMVwiLFxuICAgIFwicGFydF90eXBlX2NvbG9yMlwiLFxuICAgIFwicGFydF90eXBlX2NvbG9yM1wiLFxuICAgIFwicGFydF90eXBlX2NvbG9yX2hzdlwiLFxuICAgIFwicGFydF90eXBlX2NvbG9yX21peFwiLFxuICAgIFwicGFydF90eXBlX2NvbG9yX3JnYlwiLFxuICAgIFwicGFydF90eXBlX2NvbG91cjFcIixcbiAgICBcInBhcnRfdHlwZV9jb2xvdXIyXCIsXG4gICAgXCJwYXJ0X3R5cGVfY29sb3VyM1wiLFxuICAgIFwicGFydF90eXBlX2NvbG91cl9oc3ZcIixcbiAgICBcInBhcnRfdHlwZV9jb2xvdXJfbWl4XCIsXG4gICAgXCJwYXJ0X3R5cGVfY29sb3VyX3JnYlwiLFxuICAgIFwicGFydF90eXBlX2NyZWF0ZVwiLFxuICAgIFwicGFydF90eXBlX2RlYXRoXCIsXG4gICAgXCJwYXJ0X3R5cGVfZGVzdHJveVwiLFxuICAgIFwicGFydF90eXBlX2RpcmVjdGlvblwiLFxuICAgIFwicGFydF90eXBlX2V4aXN0c1wiLFxuICAgIFwicGFydF90eXBlX2dyYXZpdHlcIixcbiAgICBcInBhcnRfdHlwZV9saWZlXCIsXG4gICAgXCJwYXJ0X3R5cGVfb3JpZW50YXRpb25cIixcbiAgICBcInBhcnRfdHlwZV9zY2FsZVwiLFxuICAgIFwicGFydF90eXBlX3NoYXBlXCIsXG4gICAgXCJwYXJ0X3R5cGVfc2l6ZVwiLFxuICAgIFwicGFydF90eXBlX3NpemVfeFwiLFxuICAgIFwicGFydF90eXBlX3NpemVfeVwiLFxuICAgIFwicGFydF90eXBlX3NwZWVkXCIsXG4gICAgXCJwYXJ0X3R5cGVfc3ByaXRlXCIsXG4gICAgXCJwYXJ0X3R5cGVfc3RlcFwiLFxuICAgIFwicGFydF90eXBlX3N1YmltYWdlXCIsXG4gICAgXCJwYXJ0aWNsZV9leGlzdHNcIixcbiAgICBcInBhcnRpY2xlX2dldF9pbmZvXCIsXG4gICAgXCJwYXRoX2FkZFwiLFxuICAgIFwicGF0aF9hZGRfcG9pbnRcIixcbiAgICBcInBhdGhfYXBwZW5kXCIsXG4gICAgXCJwYXRoX2Fzc2lnblwiLFxuICAgIFwicGF0aF9jaGFuZ2VfcG9pbnRcIixcbiAgICBcInBhdGhfY2xlYXJfcG9pbnRzXCIsXG4gICAgXCJwYXRoX2RlbGV0ZVwiLFxuICAgIFwicGF0aF9kZWxldGVfcG9pbnRcIixcbiAgICBcInBhdGhfZHVwbGljYXRlXCIsXG4gICAgXCJwYXRoX2VuZFwiLFxuICAgIFwicGF0aF9leGlzdHNcIixcbiAgICBcInBhdGhfZmxpcFwiLFxuICAgIFwicGF0aF9nZXRfY2xvc2VkXCIsXG4gICAgXCJwYXRoX2dldF9raW5kXCIsXG4gICAgXCJwYXRoX2dldF9sZW5ndGhcIixcbiAgICBcInBhdGhfZ2V0X25hbWVcIixcbiAgICBcInBhdGhfZ2V0X251bWJlclwiLFxuICAgIFwicGF0aF9nZXRfcG9pbnRfc3BlZWRcIixcbiAgICBcInBhdGhfZ2V0X3BvaW50X3hcIixcbiAgICBcInBhdGhfZ2V0X3BvaW50X3lcIixcbiAgICBcInBhdGhfZ2V0X3ByZWNpc2lvblwiLFxuICAgIFwicGF0aF9nZXRfc3BlZWRcIixcbiAgICBcInBhdGhfZ2V0X3hcIixcbiAgICBcInBhdGhfZ2V0X3lcIixcbiAgICBcInBhdGhfaW5zZXJ0X3BvaW50XCIsXG4gICAgXCJwYXRoX21pcnJvclwiLFxuICAgIFwicGF0aF9yZXNjYWxlXCIsXG4gICAgXCJwYXRoX3JldmVyc2VcIixcbiAgICBcInBhdGhfcm90YXRlXCIsXG4gICAgXCJwYXRoX3NldF9jbG9zZWRcIixcbiAgICBcInBhdGhfc2V0X2tpbmRcIixcbiAgICBcInBhdGhfc2V0X3ByZWNpc2lvblwiLFxuICAgIFwicGF0aF9zaGlmdFwiLFxuICAgIFwicGF0aF9zdGFydFwiLFxuICAgIFwicGh5c2ljc19hcHBseV9hbmd1bGFyX2ltcHVsc2VcIixcbiAgICBcInBoeXNpY3NfYXBwbHlfZm9yY2VcIixcbiAgICBcInBoeXNpY3NfYXBwbHlfaW1wdWxzZVwiLFxuICAgIFwicGh5c2ljc19hcHBseV9sb2NhbF9mb3JjZVwiLFxuICAgIFwicGh5c2ljc19hcHBseV9sb2NhbF9pbXB1bHNlXCIsXG4gICAgXCJwaHlzaWNzX2FwcGx5X3RvcnF1ZVwiLFxuICAgIFwicGh5c2ljc19kcmF3X2RlYnVnXCIsXG4gICAgXCJwaHlzaWNzX2ZpeHR1cmVfYWRkX3BvaW50XCIsXG4gICAgXCJwaHlzaWNzX2ZpeHR1cmVfYmluZFwiLFxuICAgIFwicGh5c2ljc19maXh0dXJlX2JpbmRfZXh0XCIsXG4gICAgXCJwaHlzaWNzX2ZpeHR1cmVfY3JlYXRlXCIsXG4gICAgXCJwaHlzaWNzX2ZpeHR1cmVfZGVsZXRlXCIsXG4gICAgXCJwaHlzaWNzX2ZpeHR1cmVfc2V0X2FuZ3VsYXJfZGFtcGluZ1wiLFxuICAgIFwicGh5c2ljc19maXh0dXJlX3NldF9hd2FrZVwiLFxuICAgIFwicGh5c2ljc19maXh0dXJlX3NldF9ib3hfc2hhcGVcIixcbiAgICBcInBoeXNpY3NfZml4dHVyZV9zZXRfY2hhaW5fc2hhcGVcIixcbiAgICBcInBoeXNpY3NfZml4dHVyZV9zZXRfY2lyY2xlX3NoYXBlXCIsXG4gICAgXCJwaHlzaWNzX2ZpeHR1cmVfc2V0X2NvbGxpc2lvbl9ncm91cFwiLFxuICAgIFwicGh5c2ljc19maXh0dXJlX3NldF9kZW5zaXR5XCIsXG4gICAgXCJwaHlzaWNzX2ZpeHR1cmVfc2V0X2VkZ2Vfc2hhcGVcIixcbiAgICBcInBoeXNpY3NfZml4dHVyZV9zZXRfZnJpY3Rpb25cIixcbiAgICBcInBoeXNpY3NfZml4dHVyZV9zZXRfa2luZW1hdGljXCIsXG4gICAgXCJwaHlzaWNzX2ZpeHR1cmVfc2V0X2xpbmVhcl9kYW1waW5nXCIsXG4gICAgXCJwaHlzaWNzX2ZpeHR1cmVfc2V0X3BvbHlnb25fc2hhcGVcIixcbiAgICBcInBoeXNpY3NfZml4dHVyZV9zZXRfcmVzdGl0dXRpb25cIixcbiAgICBcInBoeXNpY3NfZml4dHVyZV9zZXRfc2Vuc29yXCIsXG4gICAgXCJwaHlzaWNzX2dldF9kZW5zaXR5XCIsXG4gICAgXCJwaHlzaWNzX2dldF9mcmljdGlvblwiLFxuICAgIFwicGh5c2ljc19nZXRfcmVzdGl0dXRpb25cIixcbiAgICBcInBoeXNpY3Nfam9pbnRfZGVsZXRlXCIsXG4gICAgXCJwaHlzaWNzX2pvaW50X2Rpc3RhbmNlX2NyZWF0ZVwiLFxuICAgIFwicGh5c2ljc19qb2ludF9lbmFibGVfbW90b3JcIixcbiAgICBcInBoeXNpY3Nfam9pbnRfZnJpY3Rpb25fY3JlYXRlXCIsXG4gICAgXCJwaHlzaWNzX2pvaW50X2dlYXJfY3JlYXRlXCIsXG4gICAgXCJwaHlzaWNzX2pvaW50X2dldF92YWx1ZVwiLFxuICAgIFwicGh5c2ljc19qb2ludF9wcmlzbWF0aWNfY3JlYXRlXCIsXG4gICAgXCJwaHlzaWNzX2pvaW50X3B1bGxleV9jcmVhdGVcIixcbiAgICBcInBoeXNpY3Nfam9pbnRfcmV2b2x1dGVfY3JlYXRlXCIsXG4gICAgXCJwaHlzaWNzX2pvaW50X3JvcGVfY3JlYXRlXCIsXG4gICAgXCJwaHlzaWNzX2pvaW50X3NldF92YWx1ZVwiLFxuICAgIFwicGh5c2ljc19qb2ludF93ZWxkX2NyZWF0ZVwiLFxuICAgIFwicGh5c2ljc19qb2ludF93aGVlbF9jcmVhdGVcIixcbiAgICBcInBoeXNpY3NfbWFzc19wcm9wZXJ0aWVzXCIsXG4gICAgXCJwaHlzaWNzX3BhcnRpY2xlX2NvdW50XCIsXG4gICAgXCJwaHlzaWNzX3BhcnRpY2xlX2NyZWF0ZVwiLFxuICAgIFwicGh5c2ljc19wYXJ0aWNsZV9kZWxldGVcIixcbiAgICBcInBoeXNpY3NfcGFydGljbGVfZGVsZXRlX3JlZ2lvbl9ib3hcIixcbiAgICBcInBoeXNpY3NfcGFydGljbGVfZGVsZXRlX3JlZ2lvbl9jaXJjbGVcIixcbiAgICBcInBoeXNpY3NfcGFydGljbGVfZGVsZXRlX3JlZ2lvbl9wb2x5XCIsXG4gICAgXCJwaHlzaWNzX3BhcnRpY2xlX2RyYXdcIixcbiAgICBcInBoeXNpY3NfcGFydGljbGVfZHJhd19leHRcIixcbiAgICBcInBoeXNpY3NfcGFydGljbGVfZ2V0X2RhbXBpbmdcIixcbiAgICBcInBoeXNpY3NfcGFydGljbGVfZ2V0X2RhdGFcIixcbiAgICBcInBoeXNpY3NfcGFydGljbGVfZ2V0X2RhdGFfcGFydGljbGVcIixcbiAgICBcInBoeXNpY3NfcGFydGljbGVfZ2V0X2RlbnNpdHlcIixcbiAgICBcInBoeXNpY3NfcGFydGljbGVfZ2V0X2dyYXZpdHlfc2NhbGVcIixcbiAgICBcInBoeXNpY3NfcGFydGljbGVfZ2V0X2dyb3VwX2ZsYWdzXCIsXG4gICAgXCJwaHlzaWNzX3BhcnRpY2xlX2dldF9tYXhfY291bnRcIixcbiAgICBcInBoeXNpY3NfcGFydGljbGVfZ2V0X3JhZGl1c1wiLFxuICAgIFwicGh5c2ljc19wYXJ0aWNsZV9ncm91cF9hZGRfcG9pbnRcIixcbiAgICBcInBoeXNpY3NfcGFydGljbGVfZ3JvdXBfYmVnaW5cIixcbiAgICBcInBoeXNpY3NfcGFydGljbGVfZ3JvdXBfYm94XCIsXG4gICAgXCJwaHlzaWNzX3BhcnRpY2xlX2dyb3VwX2NpcmNsZVwiLFxuICAgIFwicGh5c2ljc19wYXJ0aWNsZV9ncm91cF9jb3VudFwiLFxuICAgIFwicGh5c2ljc19wYXJ0aWNsZV9ncm91cF9kZWxldGVcIixcbiAgICBcInBoeXNpY3NfcGFydGljbGVfZ3JvdXBfZW5kXCIsXG4gICAgXCJwaHlzaWNzX3BhcnRpY2xlX2dyb3VwX2dldF9hbmdfdmVsXCIsXG4gICAgXCJwaHlzaWNzX3BhcnRpY2xlX2dyb3VwX2dldF9hbmdsZVwiLFxuICAgIFwicGh5c2ljc19wYXJ0aWNsZV9ncm91cF9nZXRfY2VudHJlX3hcIixcbiAgICBcInBoeXNpY3NfcGFydGljbGVfZ3JvdXBfZ2V0X2NlbnRyZV95XCIsXG4gICAgXCJwaHlzaWNzX3BhcnRpY2xlX2dyb3VwX2dldF9kYXRhXCIsXG4gICAgXCJwaHlzaWNzX3BhcnRpY2xlX2dyb3VwX2dldF9pbmVydGlhXCIsXG4gICAgXCJwaHlzaWNzX3BhcnRpY2xlX2dyb3VwX2dldF9tYXNzXCIsXG4gICAgXCJwaHlzaWNzX3BhcnRpY2xlX2dyb3VwX2dldF92ZWxfeFwiLFxuICAgIFwicGh5c2ljc19wYXJ0aWNsZV9ncm91cF9nZXRfdmVsX3lcIixcbiAgICBcInBoeXNpY3NfcGFydGljbGVfZ3JvdXBfZ2V0X3hcIixcbiAgICBcInBoeXNpY3NfcGFydGljbGVfZ3JvdXBfZ2V0X3lcIixcbiAgICBcInBoeXNpY3NfcGFydGljbGVfZ3JvdXBfam9pblwiLFxuICAgIFwicGh5c2ljc19wYXJ0aWNsZV9ncm91cF9wb2x5Z29uXCIsXG4gICAgXCJwaHlzaWNzX3BhcnRpY2xlX3NldF9jYXRlZ29yeV9mbGFnc1wiLFxuICAgIFwicGh5c2ljc19wYXJ0aWNsZV9zZXRfZGFtcGluZ1wiLFxuICAgIFwicGh5c2ljc19wYXJ0aWNsZV9zZXRfZGVuc2l0eVwiLFxuICAgIFwicGh5c2ljc19wYXJ0aWNsZV9zZXRfZmxhZ3NcIixcbiAgICBcInBoeXNpY3NfcGFydGljbGVfc2V0X2dyYXZpdHlfc2NhbGVcIixcbiAgICBcInBoeXNpY3NfcGFydGljbGVfc2V0X2dyb3VwX2ZsYWdzXCIsXG4gICAgXCJwaHlzaWNzX3BhcnRpY2xlX3NldF9tYXhfY291bnRcIixcbiAgICBcInBoeXNpY3NfcGFydGljbGVfc2V0X3JhZGl1c1wiLFxuICAgIFwicGh5c2ljc19wYXVzZV9lbmFibGVcIixcbiAgICBcInBoeXNpY3NfcmVtb3ZlX2ZpeHR1cmVcIixcbiAgICBcInBoeXNpY3Nfc2V0X2RlbnNpdHlcIixcbiAgICBcInBoeXNpY3Nfc2V0X2ZyaWN0aW9uXCIsXG4gICAgXCJwaHlzaWNzX3NldF9yZXN0aXR1dGlvblwiLFxuICAgIFwicGh5c2ljc190ZXN0X292ZXJsYXBcIixcbiAgICBcInBoeXNpY3Nfd29ybGRfY3JlYXRlXCIsXG4gICAgXCJwaHlzaWNzX3dvcmxkX2RyYXdfZGVidWdcIixcbiAgICBcInBoeXNpY3Nfd29ybGRfZ3Jhdml0eVwiLFxuICAgIFwicGh5c2ljc193b3JsZF91cGRhdGVfaXRlcmF0aW9uc1wiLFxuICAgIFwicGh5c2ljc193b3JsZF91cGRhdGVfc3BlZWRcIixcbiAgICBcInBsYWNlX2VtcHR5XCIsXG4gICAgXCJwbGFjZV9mcmVlXCIsXG4gICAgXCJwbGFjZV9tZWV0aW5nXCIsXG4gICAgXCJwbGFjZV9zbmFwcGVkXCIsXG4gICAgXCJwb2ludF9kaXJlY3Rpb25cIixcbiAgICBcInBvaW50X2Rpc3RhbmNlXCIsXG4gICAgXCJwb2ludF9kaXN0YW5jZV8zZFwiLFxuICAgIFwicG9pbnRfaW5fY2lyY2xlXCIsXG4gICAgXCJwb2ludF9pbl9yZWN0YW5nbGVcIixcbiAgICBcInBvaW50X2luX3RyaWFuZ2xlXCIsXG4gICAgXCJwb3NpdGlvbl9jaGFuZ2VcIixcbiAgICBcInBvc2l0aW9uX2Rlc3Ryb3lcIixcbiAgICBcInBvc2l0aW9uX2VtcHR5XCIsXG4gICAgXCJwb3NpdGlvbl9tZWV0aW5nXCIsXG4gICAgXCJwb3dlclwiLFxuICAgIFwicHRyXCIsXG4gICAgXCJyYWR0b2RlZ1wiLFxuICAgIFwicmFuZG9tXCIsXG4gICAgXCJyYW5kb21fZ2V0X3NlZWRcIixcbiAgICBcInJhbmRvbV9yYW5nZVwiLFxuICAgIFwicmFuZG9tX3NldF9zZWVkXCIsXG4gICAgXCJyYW5kb21pc2VcIixcbiAgICBcInJhbmRvbWl6ZVwiLFxuICAgIFwicmVhbFwiLFxuICAgIFwicmVjdGFuZ2xlX2luX2NpcmNsZVwiLFxuICAgIFwicmVjdGFuZ2xlX2luX3JlY3RhbmdsZVwiLFxuICAgIFwicmVjdGFuZ2xlX2luX3RyaWFuZ2xlXCIsXG4gICAgXCJyZWZfY3JlYXRlXCIsXG4gICAgXCJyb2xsYmFja19jaGF0XCIsXG4gICAgXCJyb2xsYmFja19jcmVhdGVfZ2FtZVwiLFxuICAgIFwicm9sbGJhY2tfZGVmaW5lX2V4dHJhX25ldHdvcmtfbGF0ZW5jeVwiLFxuICAgIFwicm9sbGJhY2tfZGVmaW5lX2lucHV0XCIsXG4gICAgXCJyb2xsYmFja19kZWZpbmVfaW5wdXRfZnJhbWVfZGVsYXlcIixcbiAgICBcInJvbGxiYWNrX2RlZmluZV9tb2NrX2lucHV0XCIsXG4gICAgXCJyb2xsYmFja19kZWZpbmVfcGxheWVyXCIsXG4gICAgXCJyb2xsYmFja19kaXNwbGF5X2V2ZW50c1wiLFxuICAgIFwicm9sbGJhY2tfZ2V0X2luZm9cIixcbiAgICBcInJvbGxiYWNrX2dldF9pbnB1dFwiLFxuICAgIFwicm9sbGJhY2tfZ2V0X3BsYXllcl9wcmVmc1wiLFxuICAgIFwicm9sbGJhY2tfam9pbl9nYW1lXCIsXG4gICAgXCJyb2xsYmFja19sZWF2ZV9nYW1lXCIsXG4gICAgXCJyb2xsYmFja19zZXRfcGxheWVyX3ByZWZzXCIsXG4gICAgXCJyb2xsYmFja19zdGFydF9nYW1lXCIsXG4gICAgXCJyb2xsYmFja19zeW5jX29uX2ZyYW1lXCIsXG4gICAgXCJyb2xsYmFja191c2VfbGF0ZV9qb2luXCIsXG4gICAgXCJyb2xsYmFja191c2VfbWFudWFsX3N0YXJ0XCIsXG4gICAgXCJyb2xsYmFja191c2VfcGxheWVyX3ByZWZzXCIsXG4gICAgXCJyb2xsYmFja191c2VfcmFuZG9tX2lucHV0XCIsXG4gICAgXCJyb29tX2FkZFwiLFxuICAgIFwicm9vbV9hc3NpZ25cIixcbiAgICBcInJvb21fZHVwbGljYXRlXCIsXG4gICAgXCJyb29tX2V4aXN0c1wiLFxuICAgIFwicm9vbV9nZXRfY2FtZXJhXCIsXG4gICAgXCJyb29tX2dldF9pbmZvXCIsXG4gICAgXCJyb29tX2dldF9uYW1lXCIsXG4gICAgXCJyb29tX2dldF92aWV3cG9ydFwiLFxuICAgIFwicm9vbV9nb3RvXCIsXG4gICAgXCJyb29tX2dvdG9fbmV4dFwiLFxuICAgIFwicm9vbV9nb3RvX3ByZXZpb3VzXCIsXG4gICAgXCJyb29tX2luc3RhbmNlX2FkZFwiLFxuICAgIFwicm9vbV9pbnN0YW5jZV9jbGVhclwiLFxuICAgIFwicm9vbV9uZXh0XCIsXG4gICAgXCJyb29tX3ByZXZpb3VzXCIsXG4gICAgXCJyb29tX3Jlc3RhcnRcIixcbiAgICBcInJvb21fc2V0X2NhbWVyYVwiLFxuICAgIFwicm9vbV9zZXRfaGVpZ2h0XCIsXG4gICAgXCJyb29tX3NldF9wZXJzaXN0ZW50XCIsXG4gICAgXCJyb29tX3NldF92aWV3X2VuYWJsZWRcIixcbiAgICBcInJvb21fc2V0X3ZpZXdwb3J0XCIsXG4gICAgXCJyb29tX3NldF93aWR0aFwiLFxuICAgIFwicm91bmRcIixcbiAgICBcInNjaGVkdWxlcl9yZXNvbHV0aW9uX2dldFwiLFxuICAgIFwic2NoZWR1bGVyX3Jlc29sdXRpb25fc2V0XCIsXG4gICAgXCJzY3JlZW5fc2F2ZVwiLFxuICAgIFwic2NyZWVuX3NhdmVfcGFydFwiLFxuICAgIFwic2NyaXB0X2V4ZWN1dGVcIixcbiAgICBcInNjcmlwdF9leGVjdXRlX2V4dFwiLFxuICAgIFwic2NyaXB0X2V4aXN0c1wiLFxuICAgIFwic2NyaXB0X2dldF9uYW1lXCIsXG4gICAgXCJzZXF1ZW5jZV9jcmVhdGVcIixcbiAgICBcInNlcXVlbmNlX2Rlc3Ryb3lcIixcbiAgICBcInNlcXVlbmNlX2V4aXN0c1wiLFxuICAgIFwic2VxdWVuY2VfZ2V0XCIsXG4gICAgXCJzZXF1ZW5jZV9nZXRfb2JqZWN0c1wiLFxuICAgIFwic2VxdWVuY2VfaW5zdGFuY2Vfb3ZlcnJpZGVfb2JqZWN0XCIsXG4gICAgXCJzZXF1ZW5jZV9rZXlmcmFtZV9uZXdcIixcbiAgICBcInNlcXVlbmNlX2tleWZyYW1lZGF0YV9uZXdcIixcbiAgICBcInNlcXVlbmNlX3RyYWNrX25ld1wiLFxuICAgIFwic2hhMV9maWxlXCIsXG4gICAgXCJzaGExX3N0cmluZ191bmljb2RlXCIsXG4gICAgXCJzaGExX3N0cmluZ191dGY4XCIsXG4gICAgXCJzaGFkZXJfY3VycmVudFwiLFxuICAgIFwic2hhZGVyX2VuYWJsZV9jb3JuZXJfaWRcIixcbiAgICBcInNoYWRlcl9nZXRfbmFtZVwiLFxuICAgIFwic2hhZGVyX2dldF9zYW1wbGVyX2luZGV4XCIsXG4gICAgXCJzaGFkZXJfZ2V0X3VuaWZvcm1cIixcbiAgICBcInNoYWRlcl9pc19jb21waWxlZFwiLFxuICAgIFwic2hhZGVyX3Jlc2V0XCIsXG4gICAgXCJzaGFkZXJfc2V0XCIsXG4gICAgXCJzaGFkZXJfc2V0X3VuaWZvcm1fZlwiLFxuICAgIFwic2hhZGVyX3NldF91bmlmb3JtX2ZfYXJyYXlcIixcbiAgICBcInNoYWRlcl9zZXRfdW5pZm9ybV9mX2J1ZmZlclwiLFxuICAgIFwic2hhZGVyX3NldF91bmlmb3JtX2lcIixcbiAgICBcInNoYWRlcl9zZXRfdW5pZm9ybV9pX2FycmF5XCIsXG4gICAgXCJzaGFkZXJfc2V0X3VuaWZvcm1fbWF0cml4XCIsXG4gICAgXCJzaGFkZXJfc2V0X3VuaWZvcm1fbWF0cml4X2FycmF5XCIsXG4gICAgXCJzaGFkZXJzX2FyZV9zdXBwb3J0ZWRcIixcbiAgICBcInNob3BfbGVhdmVfcmF0aW5nXCIsXG4gICAgXCJzaG93X2RlYnVnX21lc3NhZ2VcIixcbiAgICBcInNob3dfZGVidWdfbWVzc2FnZV9leHRcIixcbiAgICBcInNob3dfZGVidWdfb3ZlcmxheVwiLFxuICAgIFwic2hvd19lcnJvclwiLFxuICAgIFwic2hvd19tZXNzYWdlXCIsXG4gICAgXCJzaG93X21lc3NhZ2VfYXN5bmNcIixcbiAgICBcInNob3dfcXVlc3Rpb25cIixcbiAgICBcInNob3dfcXVlc3Rpb25fYXN5bmNcIixcbiAgICBcInNpZ25cIixcbiAgICBcInNpblwiLFxuICAgIFwic2tlbGV0b25fYW5pbWF0aW9uX2NsZWFyXCIsXG4gICAgXCJza2VsZXRvbl9hbmltYXRpb25fZ2V0XCIsXG4gICAgXCJza2VsZXRvbl9hbmltYXRpb25fZ2V0X2R1cmF0aW9uXCIsXG4gICAgXCJza2VsZXRvbl9hbmltYXRpb25fZ2V0X2V2ZW50X2ZyYW1lc1wiLFxuICAgIFwic2tlbGV0b25fYW5pbWF0aW9uX2dldF9leHRcIixcbiAgICBcInNrZWxldG9uX2FuaW1hdGlvbl9nZXRfZnJhbWVcIixcbiAgICBcInNrZWxldG9uX2FuaW1hdGlvbl9nZXRfZnJhbWVzXCIsXG4gICAgXCJza2VsZXRvbl9hbmltYXRpb25fZ2V0X3Bvc2l0aW9uXCIsXG4gICAgXCJza2VsZXRvbl9hbmltYXRpb25faXNfZmluaXNoZWRcIixcbiAgICBcInNrZWxldG9uX2FuaW1hdGlvbl9pc19sb29waW5nXCIsXG4gICAgXCJza2VsZXRvbl9hbmltYXRpb25fbGlzdFwiLFxuICAgIFwic2tlbGV0b25fYW5pbWF0aW9uX21peFwiLFxuICAgIFwic2tlbGV0b25fYW5pbWF0aW9uX3NldFwiLFxuICAgIFwic2tlbGV0b25fYW5pbWF0aW9uX3NldF9leHRcIixcbiAgICBcInNrZWxldG9uX2FuaW1hdGlvbl9zZXRfZnJhbWVcIixcbiAgICBcInNrZWxldG9uX2FuaW1hdGlvbl9zZXRfcG9zaXRpb25cIixcbiAgICBcInNrZWxldG9uX2F0dGFjaG1lbnRfY3JlYXRlXCIsXG4gICAgXCJza2VsZXRvbl9hdHRhY2htZW50X2NyZWF0ZV9jb2xvclwiLFxuICAgIFwic2tlbGV0b25fYXR0YWNobWVudF9jcmVhdGVfY29sb3VyXCIsXG4gICAgXCJza2VsZXRvbl9hdHRhY2htZW50X2Rlc3Ryb3lcIixcbiAgICBcInNrZWxldG9uX2F0dGFjaG1lbnRfZXhpc3RzXCIsXG4gICAgXCJza2VsZXRvbl9hdHRhY2htZW50X2dldFwiLFxuICAgIFwic2tlbGV0b25fYXR0YWNobWVudF9yZXBsYWNlXCIsXG4gICAgXCJza2VsZXRvbl9hdHRhY2htZW50X3JlcGxhY2VfY29sb3JcIixcbiAgICBcInNrZWxldG9uX2F0dGFjaG1lbnRfcmVwbGFjZV9jb2xvdXJcIixcbiAgICBcInNrZWxldG9uX2F0dGFjaG1lbnRfc2V0XCIsXG4gICAgXCJza2VsZXRvbl9ib25lX2RhdGFfZ2V0XCIsXG4gICAgXCJza2VsZXRvbl9ib25lX2RhdGFfc2V0XCIsXG4gICAgXCJza2VsZXRvbl9ib25lX2xpc3RcIixcbiAgICBcInNrZWxldG9uX2JvbmVfc3RhdGVfZ2V0XCIsXG4gICAgXCJza2VsZXRvbl9ib25lX3N0YXRlX3NldFwiLFxuICAgIFwic2tlbGV0b25fY29sbGlzaW9uX2RyYXdfc2V0XCIsXG4gICAgXCJza2VsZXRvbl9maW5kX3Nsb3RcIixcbiAgICBcInNrZWxldG9uX2dldF9ib3VuZHNcIixcbiAgICBcInNrZWxldG9uX2dldF9taW5tYXhcIixcbiAgICBcInNrZWxldG9uX2dldF9udW1fYm91bmRzXCIsXG4gICAgXCJza2VsZXRvbl9za2luX2NyZWF0ZVwiLFxuICAgIFwic2tlbGV0b25fc2tpbl9nZXRcIixcbiAgICBcInNrZWxldG9uX3NraW5fbGlzdFwiLFxuICAgIFwic2tlbGV0b25fc2tpbl9zZXRcIixcbiAgICBcInNrZWxldG9uX3Nsb3RfYWxwaGFfZ2V0XCIsXG4gICAgXCJza2VsZXRvbl9zbG90X2NvbG9yX2dldFwiLFxuICAgIFwic2tlbGV0b25fc2xvdF9jb2xvcl9zZXRcIixcbiAgICBcInNrZWxldG9uX3Nsb3RfY29sb3VyX2dldFwiLFxuICAgIFwic2tlbGV0b25fc2xvdF9jb2xvdXJfc2V0XCIsXG4gICAgXCJza2VsZXRvbl9zbG90X2RhdGFcIixcbiAgICBcInNrZWxldG9uX3Nsb3RfZGF0YV9pbnN0YW5jZVwiLFxuICAgIFwic2tlbGV0b25fc2xvdF9saXN0XCIsXG4gICAgXCJzcHJpdGVfYWRkXCIsXG4gICAgXCJzcHJpdGVfYWRkX2V4dFwiLFxuICAgIFwic3ByaXRlX2FkZF9mcm9tX3N1cmZhY2VcIixcbiAgICBcInNwcml0ZV9hc3NpZ25cIixcbiAgICBcInNwcml0ZV9jb2xsaXNpb25fbWFza1wiLFxuICAgIFwic3ByaXRlX2NyZWF0ZV9mcm9tX3N1cmZhY2VcIixcbiAgICBcInNwcml0ZV9kZWxldGVcIixcbiAgICBcInNwcml0ZV9kdXBsaWNhdGVcIixcbiAgICBcInNwcml0ZV9leGlzdHNcIixcbiAgICBcInNwcml0ZV9mbHVzaFwiLFxuICAgIFwic3ByaXRlX2ZsdXNoX211bHRpXCIsXG4gICAgXCJzcHJpdGVfZ2V0X2Jib3hfYm90dG9tXCIsXG4gICAgXCJzcHJpdGVfZ2V0X2Jib3hfbGVmdFwiLFxuICAgIFwic3ByaXRlX2dldF9iYm94X21vZGVcIixcbiAgICBcInNwcml0ZV9nZXRfYmJveF9yaWdodFwiLFxuICAgIFwic3ByaXRlX2dldF9iYm94X3RvcFwiLFxuICAgIFwic3ByaXRlX2dldF9oZWlnaHRcIixcbiAgICBcInNwcml0ZV9nZXRfaW5mb1wiLFxuICAgIFwic3ByaXRlX2dldF9uYW1lXCIsXG4gICAgXCJzcHJpdGVfZ2V0X25pbmVzbGljZVwiLFxuICAgIFwic3ByaXRlX2dldF9udW1iZXJcIixcbiAgICBcInNwcml0ZV9nZXRfc3BlZWRcIixcbiAgICBcInNwcml0ZV9nZXRfc3BlZWRfdHlwZVwiLFxuICAgIFwic3ByaXRlX2dldF90ZXh0dXJlXCIsXG4gICAgXCJzcHJpdGVfZ2V0X3RwZVwiLFxuICAgIFwic3ByaXRlX2dldF91dnNcIixcbiAgICBcInNwcml0ZV9nZXRfd2lkdGhcIixcbiAgICBcInNwcml0ZV9nZXRfeG9mZnNldFwiLFxuICAgIFwic3ByaXRlX2dldF95b2Zmc2V0XCIsXG4gICAgXCJzcHJpdGVfbWVyZ2VcIixcbiAgICBcInNwcml0ZV9uaW5lc2xpY2VfY3JlYXRlXCIsXG4gICAgXCJzcHJpdGVfcHJlZmV0Y2hcIixcbiAgICBcInNwcml0ZV9wcmVmZXRjaF9tdWx0aVwiLFxuICAgIFwic3ByaXRlX3JlcGxhY2VcIixcbiAgICBcInNwcml0ZV9zYXZlXCIsXG4gICAgXCJzcHJpdGVfc2F2ZV9zdHJpcFwiLFxuICAgIFwic3ByaXRlX3NldF9hbHBoYV9mcm9tX3Nwcml0ZVwiLFxuICAgIFwic3ByaXRlX3NldF9iYm94XCIsXG4gICAgXCJzcHJpdGVfc2V0X2Jib3hfbW9kZVwiLFxuICAgIFwic3ByaXRlX3NldF9jYWNoZV9zaXplXCIsXG4gICAgXCJzcHJpdGVfc2V0X2NhY2hlX3NpemVfZXh0XCIsXG4gICAgXCJzcHJpdGVfc2V0X25pbmVzbGljZVwiLFxuICAgIFwic3ByaXRlX3NldF9vZmZzZXRcIixcbiAgICBcInNwcml0ZV9zZXRfc3BlZWRcIixcbiAgICBcInNxclwiLFxuICAgIFwic3FydFwiLFxuICAgIFwic3RhdGljX2dldFwiLFxuICAgIFwic3RhdGljX3NldFwiLFxuICAgIFwic3RyaW5nXCIsXG4gICAgXCJzdHJpbmdfYnl0ZV9hdFwiLFxuICAgIFwic3RyaW5nX2J5dGVfbGVuZ3RoXCIsXG4gICAgXCJzdHJpbmdfY2hhcl9hdFwiLFxuICAgIFwic3RyaW5nX2NvbmNhdFwiLFxuICAgIFwic3RyaW5nX2NvbmNhdF9leHRcIixcbiAgICBcInN0cmluZ19jb3B5XCIsXG4gICAgXCJzdHJpbmdfY291bnRcIixcbiAgICBcInN0cmluZ19kZWxldGVcIixcbiAgICBcInN0cmluZ19kaWdpdHNcIixcbiAgICBcInN0cmluZ19lbmRzX3dpdGhcIixcbiAgICBcInN0cmluZ19leHRcIixcbiAgICBcInN0cmluZ19mb3JlYWNoXCIsXG4gICAgXCJzdHJpbmdfZm9ybWF0XCIsXG4gICAgXCJzdHJpbmdfaGFzaF90b19uZXdsaW5lXCIsXG4gICAgXCJzdHJpbmdfaGVpZ2h0XCIsXG4gICAgXCJzdHJpbmdfaGVpZ2h0X2V4dFwiLFxuICAgIFwic3RyaW5nX2luc2VydFwiLFxuICAgIFwic3RyaW5nX2pvaW5cIixcbiAgICBcInN0cmluZ19qb2luX2V4dFwiLFxuICAgIFwic3RyaW5nX2xhc3RfcG9zXCIsXG4gICAgXCJzdHJpbmdfbGFzdF9wb3NfZXh0XCIsXG4gICAgXCJzdHJpbmdfbGVuZ3RoXCIsXG4gICAgXCJzdHJpbmdfbGV0dGVyc1wiLFxuICAgIFwic3RyaW5nX2xldHRlcnNkaWdpdHNcIixcbiAgICBcInN0cmluZ19sb3dlclwiLFxuICAgIFwic3RyaW5nX29yZF9hdFwiLFxuICAgIFwic3RyaW5nX3Bvc1wiLFxuICAgIFwic3RyaW5nX3Bvc19leHRcIixcbiAgICBcInN0cmluZ19yZXBlYXRcIixcbiAgICBcInN0cmluZ19yZXBsYWNlXCIsXG4gICAgXCJzdHJpbmdfcmVwbGFjZV9hbGxcIixcbiAgICBcInN0cmluZ19zZXRfYnl0ZV9hdFwiLFxuICAgIFwic3RyaW5nX3NwbGl0XCIsXG4gICAgXCJzdHJpbmdfc3BsaXRfZXh0XCIsXG4gICAgXCJzdHJpbmdfc3RhcnRzX3dpdGhcIixcbiAgICBcInN0cmluZ190cmltXCIsXG4gICAgXCJzdHJpbmdfdHJpbV9lbmRcIixcbiAgICBcInN0cmluZ190cmltX3N0YXJ0XCIsXG4gICAgXCJzdHJpbmdfdXBwZXJcIixcbiAgICBcInN0cmluZ193aWR0aFwiLFxuICAgIFwic3RyaW5nX3dpZHRoX2V4dFwiLFxuICAgIFwic3RydWN0X2V4aXN0c1wiLFxuICAgIFwic3RydWN0X2ZvcmVhY2hcIixcbiAgICBcInN0cnVjdF9nZXRcIixcbiAgICBcInN0cnVjdF9nZXRfZnJvbV9oYXNoXCIsXG4gICAgXCJzdHJ1Y3RfZ2V0X25hbWVzXCIsXG4gICAgXCJzdHJ1Y3RfbmFtZXNfY291bnRcIixcbiAgICBcInN0cnVjdF9yZW1vdmVcIixcbiAgICBcInN0cnVjdF9zZXRcIixcbiAgICBcInN0cnVjdF9zZXRfZnJvbV9oYXNoXCIsXG4gICAgXCJzdXJmYWNlX2NvcHlcIixcbiAgICBcInN1cmZhY2VfY29weV9wYXJ0XCIsXG4gICAgXCJzdXJmYWNlX2NyZWF0ZVwiLFxuICAgIFwic3VyZmFjZV9jcmVhdGVfZXh0XCIsXG4gICAgXCJzdXJmYWNlX2RlcHRoX2Rpc2FibGVcIixcbiAgICBcInN1cmZhY2VfZXhpc3RzXCIsXG4gICAgXCJzdXJmYWNlX2Zvcm1hdF9pc19zdXBwb3J0ZWRcIixcbiAgICBcInN1cmZhY2VfZnJlZVwiLFxuICAgIFwic3VyZmFjZV9nZXRfZGVwdGhfZGlzYWJsZVwiLFxuICAgIFwic3VyZmFjZV9nZXRfZm9ybWF0XCIsXG4gICAgXCJzdXJmYWNlX2dldF9oZWlnaHRcIixcbiAgICBcInN1cmZhY2VfZ2V0X3RhcmdldFwiLFxuICAgIFwic3VyZmFjZV9nZXRfdGFyZ2V0X2V4dFwiLFxuICAgIFwic3VyZmFjZV9nZXRfdGV4dHVyZVwiLFxuICAgIFwic3VyZmFjZV9nZXRfd2lkdGhcIixcbiAgICBcInN1cmZhY2VfZ2V0cGl4ZWxcIixcbiAgICBcInN1cmZhY2VfZ2V0cGl4ZWxfZXh0XCIsXG4gICAgXCJzdXJmYWNlX3Jlc2V0X3RhcmdldFwiLFxuICAgIFwic3VyZmFjZV9yZXNpemVcIixcbiAgICBcInN1cmZhY2Vfc2F2ZVwiLFxuICAgIFwic3VyZmFjZV9zYXZlX3BhcnRcIixcbiAgICBcInN1cmZhY2Vfc2V0X3RhcmdldFwiLFxuICAgIFwic3VyZmFjZV9zZXRfdGFyZ2V0X2V4dFwiLFxuICAgIFwidGFnX2dldF9hc3NldF9pZHNcIixcbiAgICBcInRhZ19nZXRfYXNzZXRzXCIsXG4gICAgXCJ0YW5cIixcbiAgICBcInRleHR1cmVfZGVidWdfbWVzc2FnZXNcIixcbiAgICBcInRleHR1cmVfZmx1c2hcIixcbiAgICBcInRleHR1cmVfZ2V0X2hlaWdodFwiLFxuICAgIFwidGV4dHVyZV9nZXRfdGV4ZWxfaGVpZ2h0XCIsXG4gICAgXCJ0ZXh0dXJlX2dldF90ZXhlbF93aWR0aFwiLFxuICAgIFwidGV4dHVyZV9nZXRfdXZzXCIsXG4gICAgXCJ0ZXh0dXJlX2dldF93aWR0aFwiLFxuICAgIFwidGV4dHVyZV9nbG9iYWxfc2NhbGVcIixcbiAgICBcInRleHR1cmVfaXNfcmVhZHlcIixcbiAgICBcInRleHR1cmVfcHJlZmV0Y2hcIixcbiAgICBcInRleHR1cmVfc2V0X3N0YWdlXCIsXG4gICAgXCJ0ZXh0dXJlZ3JvdXBfZ2V0X2ZvbnRzXCIsXG4gICAgXCJ0ZXh0dXJlZ3JvdXBfZ2V0X25hbWVzXCIsXG4gICAgXCJ0ZXh0dXJlZ3JvdXBfZ2V0X3Nwcml0ZXNcIixcbiAgICBcInRleHR1cmVncm91cF9nZXRfc3RhdHVzXCIsXG4gICAgXCJ0ZXh0dXJlZ3JvdXBfZ2V0X3RleHR1cmVzXCIsXG4gICAgXCJ0ZXh0dXJlZ3JvdXBfZ2V0X3RpbGVzZXRzXCIsXG4gICAgXCJ0ZXh0dXJlZ3JvdXBfbG9hZFwiLFxuICAgIFwidGV4dHVyZWdyb3VwX3NldF9tb2RlXCIsXG4gICAgXCJ0ZXh0dXJlZ3JvdXBfdW5sb2FkXCIsXG4gICAgXCJ0aWxlX2dldF9lbXB0eVwiLFxuICAgIFwidGlsZV9nZXRfZmxpcFwiLFxuICAgIFwidGlsZV9nZXRfaW5kZXhcIixcbiAgICBcInRpbGVfZ2V0X21pcnJvclwiLFxuICAgIFwidGlsZV9nZXRfcm90YXRlXCIsXG4gICAgXCJ0aWxlX3NldF9lbXB0eVwiLFxuICAgIFwidGlsZV9zZXRfZmxpcFwiLFxuICAgIFwidGlsZV9zZXRfaW5kZXhcIixcbiAgICBcInRpbGVfc2V0X21pcnJvclwiLFxuICAgIFwidGlsZV9zZXRfcm90YXRlXCIsXG4gICAgXCJ0aWxlbWFwX2NsZWFyXCIsXG4gICAgXCJ0aWxlbWFwX2dldFwiLFxuICAgIFwidGlsZW1hcF9nZXRfYXRfcGl4ZWxcIixcbiAgICBcInRpbGVtYXBfZ2V0X2NlbGxfeF9hdF9waXhlbFwiLFxuICAgIFwidGlsZW1hcF9nZXRfY2VsbF95X2F0X3BpeGVsXCIsXG4gICAgXCJ0aWxlbWFwX2dldF9mcmFtZVwiLFxuICAgIFwidGlsZW1hcF9nZXRfZ2xvYmFsX21hc2tcIixcbiAgICBcInRpbGVtYXBfZ2V0X2hlaWdodFwiLFxuICAgIFwidGlsZW1hcF9nZXRfbWFza1wiLFxuICAgIFwidGlsZW1hcF9nZXRfdGlsZV9oZWlnaHRcIixcbiAgICBcInRpbGVtYXBfZ2V0X3RpbGVfd2lkdGhcIixcbiAgICBcInRpbGVtYXBfZ2V0X3RpbGVzZXRcIixcbiAgICBcInRpbGVtYXBfZ2V0X3dpZHRoXCIsXG4gICAgXCJ0aWxlbWFwX2dldF94XCIsXG4gICAgXCJ0aWxlbWFwX2dldF95XCIsXG4gICAgXCJ0aWxlbWFwX3NldFwiLFxuICAgIFwidGlsZW1hcF9zZXRfYXRfcGl4ZWxcIixcbiAgICBcInRpbGVtYXBfc2V0X2dsb2JhbF9tYXNrXCIsXG4gICAgXCJ0aWxlbWFwX3NldF9oZWlnaHRcIixcbiAgICBcInRpbGVtYXBfc2V0X21hc2tcIixcbiAgICBcInRpbGVtYXBfc2V0X3dpZHRoXCIsXG4gICAgXCJ0aWxlbWFwX3RpbGVzZXRcIixcbiAgICBcInRpbGVtYXBfeFwiLFxuICAgIFwidGlsZW1hcF95XCIsXG4gICAgXCJ0aWxlc2V0X2dldF9pbmZvXCIsXG4gICAgXCJ0aWxlc2V0X2dldF9uYW1lXCIsXG4gICAgXCJ0aWxlc2V0X2dldF90ZXh0dXJlXCIsXG4gICAgXCJ0aWxlc2V0X2dldF91dnNcIixcbiAgICBcInRpbWVfYnBtX3RvX3NlY29uZHNcIixcbiAgICBcInRpbWVfc2Vjb25kc190b19icG1cIixcbiAgICBcInRpbWVfc291cmNlX2NyZWF0ZVwiLFxuICAgIFwidGltZV9zb3VyY2VfZGVzdHJveVwiLFxuICAgIFwidGltZV9zb3VyY2VfZXhpc3RzXCIsXG4gICAgXCJ0aW1lX3NvdXJjZV9nZXRfY2hpbGRyZW5cIixcbiAgICBcInRpbWVfc291cmNlX2dldF9wYXJlbnRcIixcbiAgICBcInRpbWVfc291cmNlX2dldF9wZXJpb2RcIixcbiAgICBcInRpbWVfc291cmNlX2dldF9yZXBzX2NvbXBsZXRlZFwiLFxuICAgIFwidGltZV9zb3VyY2VfZ2V0X3JlcHNfcmVtYWluaW5nXCIsXG4gICAgXCJ0aW1lX3NvdXJjZV9nZXRfc3RhdGVcIixcbiAgICBcInRpbWVfc291cmNlX2dldF90aW1lX3JlbWFpbmluZ1wiLFxuICAgIFwidGltZV9zb3VyY2VfZ2V0X3VuaXRzXCIsXG4gICAgXCJ0aW1lX3NvdXJjZV9wYXVzZVwiLFxuICAgIFwidGltZV9zb3VyY2VfcmVjb25maWd1cmVcIixcbiAgICBcInRpbWVfc291cmNlX3Jlc2V0XCIsXG4gICAgXCJ0aW1lX3NvdXJjZV9yZXN1bWVcIixcbiAgICBcInRpbWVfc291cmNlX3N0YXJ0XCIsXG4gICAgXCJ0aW1lX3NvdXJjZV9zdG9wXCIsXG4gICAgXCJ0aW1lbGluZV9hZGRcIixcbiAgICBcInRpbWVsaW5lX2NsZWFyXCIsXG4gICAgXCJ0aW1lbGluZV9kZWxldGVcIixcbiAgICBcInRpbWVsaW5lX2V4aXN0c1wiLFxuICAgIFwidGltZWxpbmVfZ2V0X25hbWVcIixcbiAgICBcInRpbWVsaW5lX21heF9tb21lbnRcIixcbiAgICBcInRpbWVsaW5lX21vbWVudF9hZGRfc2NyaXB0XCIsXG4gICAgXCJ0aW1lbGluZV9tb21lbnRfY2xlYXJcIixcbiAgICBcInRpbWVsaW5lX3NpemVcIixcbiAgICBcInR5cGVvZlwiLFxuICAgIFwidXJsX2dldF9kb21haW5cIixcbiAgICBcInVybF9vcGVuXCIsXG4gICAgXCJ1cmxfb3Blbl9leHRcIixcbiAgICBcInVybF9vcGVuX2Z1bGxcIixcbiAgICBcInV3cF9kZXZpY2VfdG91Y2hzY3JlZW5fYXZhaWxhYmxlXCIsXG4gICAgXCJ1d3BfbGl2ZXRpbGVfYmFkZ2VfY2xlYXJcIixcbiAgICBcInV3cF9saXZldGlsZV9iYWRnZV9ub3RpZmljYXRpb25cIixcbiAgICBcInV3cF9saXZldGlsZV9ub3RpZmljYXRpb25fYmVnaW5cIixcbiAgICBcInV3cF9saXZldGlsZV9ub3RpZmljYXRpb25fZW5kXCIsXG4gICAgXCJ1d3BfbGl2ZXRpbGVfbm90aWZpY2F0aW9uX2V4cGlyeVwiLFxuICAgIFwidXdwX2xpdmV0aWxlX25vdGlmaWNhdGlvbl9pbWFnZV9hZGRcIixcbiAgICBcInV3cF9saXZldGlsZV9ub3RpZmljYXRpb25fc2Vjb25kYXJ5X2JlZ2luXCIsXG4gICAgXCJ1d3BfbGl2ZXRpbGVfbm90aWZpY2F0aW9uX3RhZ1wiLFxuICAgIFwidXdwX2xpdmV0aWxlX25vdGlmaWNhdGlvbl90ZW1wbGF0ZV9hZGRcIixcbiAgICBcInV3cF9saXZldGlsZV9ub3RpZmljYXRpb25fdGV4dF9hZGRcIixcbiAgICBcInV3cF9saXZldGlsZV9xdWV1ZV9lbmFibGVcIixcbiAgICBcInV3cF9saXZldGlsZV90aWxlX2NsZWFyXCIsXG4gICAgXCJ1d3Bfc2Vjb25kYXJ5dGlsZV9iYWRnZV9jbGVhclwiLFxuICAgIFwidXdwX3NlY29uZGFyeXRpbGVfYmFkZ2Vfbm90aWZpY2F0aW9uXCIsXG4gICAgXCJ1d3Bfc2Vjb25kYXJ5dGlsZV9kZWxldGVcIixcbiAgICBcInV3cF9zZWNvbmRhcnl0aWxlX3BpblwiLFxuICAgIFwidXdwX3NlY29uZGFyeXRpbGVfdGlsZV9jbGVhclwiLFxuICAgIFwidmFyaWFibGVfY2xvbmVcIixcbiAgICBcInZhcmlhYmxlX2dldF9oYXNoXCIsXG4gICAgXCJ2YXJpYWJsZV9nbG9iYWxfZXhpc3RzXCIsXG4gICAgXCJ2YXJpYWJsZV9nbG9iYWxfZ2V0XCIsXG4gICAgXCJ2YXJpYWJsZV9nbG9iYWxfc2V0XCIsXG4gICAgXCJ2YXJpYWJsZV9pbnN0YW5jZV9leGlzdHNcIixcbiAgICBcInZhcmlhYmxlX2luc3RhbmNlX2dldFwiLFxuICAgIFwidmFyaWFibGVfaW5zdGFuY2VfZ2V0X25hbWVzXCIsXG4gICAgXCJ2YXJpYWJsZV9pbnN0YW5jZV9uYW1lc19jb3VudFwiLFxuICAgIFwidmFyaWFibGVfaW5zdGFuY2Vfc2V0XCIsXG4gICAgXCJ2YXJpYWJsZV9zdHJ1Y3RfZXhpc3RzXCIsXG4gICAgXCJ2YXJpYWJsZV9zdHJ1Y3RfZ2V0XCIsXG4gICAgXCJ2YXJpYWJsZV9zdHJ1Y3RfZ2V0X25hbWVzXCIsXG4gICAgXCJ2YXJpYWJsZV9zdHJ1Y3RfbmFtZXNfY291bnRcIixcbiAgICBcInZhcmlhYmxlX3N0cnVjdF9yZW1vdmVcIixcbiAgICBcInZhcmlhYmxlX3N0cnVjdF9zZXRcIixcbiAgICBcInZlcnRleF9hcmdiXCIsXG4gICAgXCJ2ZXJ0ZXhfYmVnaW5cIixcbiAgICBcInZlcnRleF9jb2xvclwiLFxuICAgIFwidmVydGV4X2NvbG91clwiLFxuICAgIFwidmVydGV4X2NyZWF0ZV9idWZmZXJcIixcbiAgICBcInZlcnRleF9jcmVhdGVfYnVmZmVyX2V4dFwiLFxuICAgIFwidmVydGV4X2NyZWF0ZV9idWZmZXJfZnJvbV9idWZmZXJcIixcbiAgICBcInZlcnRleF9jcmVhdGVfYnVmZmVyX2Zyb21fYnVmZmVyX2V4dFwiLFxuICAgIFwidmVydGV4X2RlbGV0ZV9idWZmZXJcIixcbiAgICBcInZlcnRleF9lbmRcIixcbiAgICBcInZlcnRleF9mbG9hdDFcIixcbiAgICBcInZlcnRleF9mbG9hdDJcIixcbiAgICBcInZlcnRleF9mbG9hdDNcIixcbiAgICBcInZlcnRleF9mbG9hdDRcIixcbiAgICBcInZlcnRleF9mb3JtYXRfYWRkX2NvbG9yXCIsXG4gICAgXCJ2ZXJ0ZXhfZm9ybWF0X2FkZF9jb2xvdXJcIixcbiAgICBcInZlcnRleF9mb3JtYXRfYWRkX2N1c3RvbVwiLFxuICAgIFwidmVydGV4X2Zvcm1hdF9hZGRfbm9ybWFsXCIsXG4gICAgXCJ2ZXJ0ZXhfZm9ybWF0X2FkZF9wb3NpdGlvblwiLFxuICAgIFwidmVydGV4X2Zvcm1hdF9hZGRfcG9zaXRpb25fM2RcIixcbiAgICBcInZlcnRleF9mb3JtYXRfYWRkX3RleGNvb3JkXCIsXG4gICAgXCJ2ZXJ0ZXhfZm9ybWF0X2JlZ2luXCIsXG4gICAgXCJ2ZXJ0ZXhfZm9ybWF0X2RlbGV0ZVwiLFxuICAgIFwidmVydGV4X2Zvcm1hdF9lbmRcIixcbiAgICBcInZlcnRleF9mb3JtYXRfZ2V0X2luZm9cIixcbiAgICBcInZlcnRleF9mcmVlemVcIixcbiAgICBcInZlcnRleF9nZXRfYnVmZmVyX3NpemVcIixcbiAgICBcInZlcnRleF9nZXRfbnVtYmVyXCIsXG4gICAgXCJ2ZXJ0ZXhfbm9ybWFsXCIsXG4gICAgXCJ2ZXJ0ZXhfcG9zaXRpb25cIixcbiAgICBcInZlcnRleF9wb3NpdGlvbl8zZFwiLFxuICAgIFwidmVydGV4X3N1Ym1pdFwiLFxuICAgIFwidmVydGV4X3N1Ym1pdF9leHRcIixcbiAgICBcInZlcnRleF90ZXhjb29yZFwiLFxuICAgIFwidmVydGV4X3VieXRlNFwiLFxuICAgIFwidmVydGV4X3VwZGF0ZV9idWZmZXJfZnJvbV9idWZmZXJcIixcbiAgICBcInZlcnRleF91cGRhdGVfYnVmZmVyX2Zyb21fdmVydGV4XCIsXG4gICAgXCJ2aWRlb19jbG9zZVwiLFxuICAgIFwidmlkZW9fZHJhd1wiLFxuICAgIFwidmlkZW9fZW5hYmxlX2xvb3BcIixcbiAgICBcInZpZGVvX2dldF9kdXJhdGlvblwiLFxuICAgIFwidmlkZW9fZ2V0X2Zvcm1hdFwiLFxuICAgIFwidmlkZW9fZ2V0X3Bvc2l0aW9uXCIsXG4gICAgXCJ2aWRlb19nZXRfc3RhdHVzXCIsXG4gICAgXCJ2aWRlb19nZXRfdm9sdW1lXCIsXG4gICAgXCJ2aWRlb19pc19sb29waW5nXCIsXG4gICAgXCJ2aWRlb19vcGVuXCIsXG4gICAgXCJ2aWRlb19wYXVzZVwiLFxuICAgIFwidmlkZW9fcmVzdW1lXCIsXG4gICAgXCJ2aWRlb19zZWVrX3RvXCIsXG4gICAgXCJ2aWRlb19zZXRfdm9sdW1lXCIsXG4gICAgXCJ2aWV3X2dldF9jYW1lcmFcIixcbiAgICBcInZpZXdfZ2V0X2hwb3J0XCIsXG4gICAgXCJ2aWV3X2dldF9zdXJmYWNlX2lkXCIsXG4gICAgXCJ2aWV3X2dldF92aXNpYmxlXCIsXG4gICAgXCJ2aWV3X2dldF93cG9ydFwiLFxuICAgIFwidmlld19nZXRfeHBvcnRcIixcbiAgICBcInZpZXdfZ2V0X3lwb3J0XCIsXG4gICAgXCJ2aWV3X3NldF9jYW1lcmFcIixcbiAgICBcInZpZXdfc2V0X2hwb3J0XCIsXG4gICAgXCJ2aWV3X3NldF9zdXJmYWNlX2lkXCIsXG4gICAgXCJ2aWV3X3NldF92aXNpYmxlXCIsXG4gICAgXCJ2aWV3X3NldF93cG9ydFwiLFxuICAgIFwidmlld19zZXRfeHBvcnRcIixcbiAgICBcInZpZXdfc2V0X3lwb3J0XCIsXG4gICAgXCJ2aXJ0dWFsX2tleV9hZGRcIixcbiAgICBcInZpcnR1YWxfa2V5X2RlbGV0ZVwiLFxuICAgIFwidmlydHVhbF9rZXlfaGlkZVwiLFxuICAgIFwidmlydHVhbF9rZXlfc2hvd1wiLFxuICAgIFwid2FsbHBhcGVyX3NldF9jb25maWdcIixcbiAgICBcIndhbGxwYXBlcl9zZXRfc3Vic2NyaXB0aW9uc1wiLFxuICAgIFwid2Vha19yZWZfYWxpdmVcIixcbiAgICBcIndlYWtfcmVmX2FueV9hbGl2ZVwiLFxuICAgIFwid2Vha19yZWZfY3JlYXRlXCIsXG4gICAgXCJ3aW5kb3dfY2VudGVyXCIsXG4gICAgXCJ3aW5kb3dfZGV2aWNlXCIsXG4gICAgXCJ3aW5kb3dfZW5hYmxlX2JvcmRlcmxlc3NfZnVsbHNjcmVlblwiLFxuICAgIFwid2luZG93X2dldF9ib3JkZXJsZXNzX2Z1bGxzY3JlZW5cIixcbiAgICBcIndpbmRvd19nZXRfY2FwdGlvblwiLFxuICAgIFwid2luZG93X2dldF9jb2xvclwiLFxuICAgIFwid2luZG93X2dldF9jb2xvdXJcIixcbiAgICBcIndpbmRvd19nZXRfY3Vyc29yXCIsXG4gICAgXCJ3aW5kb3dfZ2V0X2Z1bGxzY3JlZW5cIixcbiAgICBcIndpbmRvd19nZXRfaGVpZ2h0XCIsXG4gICAgXCJ3aW5kb3dfZ2V0X3Nob3dib3JkZXJcIixcbiAgICBcIndpbmRvd19nZXRfdmlzaWJsZV9yZWN0c1wiLFxuICAgIFwid2luZG93X2dldF93aWR0aFwiLFxuICAgIFwid2luZG93X2dldF94XCIsXG4gICAgXCJ3aW5kb3dfZ2V0X3lcIixcbiAgICBcIndpbmRvd19oYW5kbGVcIixcbiAgICBcIndpbmRvd19oYXNfZm9jdXNcIixcbiAgICBcIndpbmRvd19tb3VzZV9nZXRfZGVsdGFfeFwiLFxuICAgIFwid2luZG93X21vdXNlX2dldF9kZWx0YV95XCIsXG4gICAgXCJ3aW5kb3dfbW91c2VfZ2V0X2xvY2tlZFwiLFxuICAgIFwid2luZG93X21vdXNlX2dldF94XCIsXG4gICAgXCJ3aW5kb3dfbW91c2VfZ2V0X3lcIixcbiAgICBcIndpbmRvd19tb3VzZV9zZXRcIixcbiAgICBcIndpbmRvd19tb3VzZV9zZXRfbG9ja2VkXCIsXG4gICAgXCJ3aW5kb3dfc2V0X2NhcHRpb25cIixcbiAgICBcIndpbmRvd19zZXRfY29sb3JcIixcbiAgICBcIndpbmRvd19zZXRfY29sb3VyXCIsXG4gICAgXCJ3aW5kb3dfc2V0X2N1cnNvclwiLFxuICAgIFwid2luZG93X3NldF9mdWxsc2NyZWVuXCIsXG4gICAgXCJ3aW5kb3dfc2V0X21heF9oZWlnaHRcIixcbiAgICBcIndpbmRvd19zZXRfbWF4X3dpZHRoXCIsXG4gICAgXCJ3aW5kb3dfc2V0X21pbl9oZWlnaHRcIixcbiAgICBcIndpbmRvd19zZXRfbWluX3dpZHRoXCIsXG4gICAgXCJ3aW5kb3dfc2V0X3Bvc2l0aW9uXCIsXG4gICAgXCJ3aW5kb3dfc2V0X3JlY3RhbmdsZVwiLFxuICAgIFwid2luZG93X3NldF9zaG93Ym9yZGVyXCIsXG4gICAgXCJ3aW5kb3dfc2V0X3NpemVcIixcbiAgICBcIndpbmRvd192aWV3X21vdXNlX2dldF94XCIsXG4gICAgXCJ3aW5kb3dfdmlld19tb3VzZV9nZXRfeVwiLFxuICAgIFwid2luZG93X3ZpZXdzX21vdXNlX2dldF94XCIsXG4gICAgXCJ3aW5kb3dfdmlld3NfbW91c2VfZ2V0X3lcIixcbiAgICBcIndpbnBob25lX3RpbGVfYmFja2dyb3VuZF9jb2xvclwiLFxuICAgIFwid2lucGhvbmVfdGlsZV9iYWNrZ3JvdW5kX2NvbG91clwiLFxuICAgIFwiemlwX2FkZF9maWxlXCIsXG4gICAgXCJ6aXBfY3JlYXRlXCIsXG4gICAgXCJ6aXBfc2F2ZVwiLFxuICAgIFwiemlwX3VuemlwXCIsXG4gICAgXCJ6aXBfdW56aXBfYXN5bmNcIlxuICBdO1xuICBjb25zdCBTWU1CT0xTID0gW1xuICAgIFwiQXVkaW9FZmZlY3RcIixcbiAgICBcIkF1ZGlvRWZmZWN0VHlwZVwiLFxuICAgIFwiQXVkaW9MRk9UeXBlXCIsXG4gICAgXCJHTV9idWlsZF9kYXRlXCIsXG4gICAgXCJHTV9idWlsZF90eXBlXCIsXG4gICAgXCJHTV9pc19zYW5kYm94ZWRcIixcbiAgICBcIkdNX3Byb2plY3RfZmlsZW5hbWVcIixcbiAgICBcIkdNX3J1bnRpbWVfdmVyc2lvblwiLFxuICAgIFwiR01fdmVyc2lvblwiLFxuICAgIFwiTmFOXCIsXG4gICAgXCJfR01GSUxFX1wiLFxuICAgIFwiX0dNRlVOQ1RJT05fXCIsXG4gICAgXCJfR01MSU5FX1wiLFxuICAgIFwiYWxpZ25tZW50SFwiLFxuICAgIFwiYWxpZ25tZW50VlwiLFxuICAgIFwiYWxsXCIsXG4gICAgXCJhbmltY3VydmV0eXBlX2JlemllclwiLFxuICAgIFwiYW5pbWN1cnZldHlwZV9jYXRtdWxscm9tXCIsXG4gICAgXCJhbmltY3VydmV0eXBlX2xpbmVhclwiLFxuICAgIFwiYXNzZXRfYW5pbWF0aW9uY3VydmVcIixcbiAgICBcImFzc2V0X2ZvbnRcIixcbiAgICBcImFzc2V0X29iamVjdFwiLFxuICAgIFwiYXNzZXRfcGF0aFwiLFxuICAgIFwiYXNzZXRfcm9vbVwiLFxuICAgIFwiYXNzZXRfc2NyaXB0XCIsXG4gICAgXCJhc3NldF9zZXF1ZW5jZVwiLFxuICAgIFwiYXNzZXRfc2hhZGVyXCIsXG4gICAgXCJhc3NldF9zb3VuZFwiLFxuICAgIFwiYXNzZXRfc3ByaXRlXCIsXG4gICAgXCJhc3NldF90aWxlc1wiLFxuICAgIFwiYXNzZXRfdGltZWxpbmVcIixcbiAgICBcImFzc2V0X3Vua25vd25cIixcbiAgICBcImF1ZGlvXzNEXCIsXG4gICAgXCJhdWRpb19idXNfbWFpblwiLFxuICAgIFwiYXVkaW9fZmFsbG9mZl9leHBvbmVudF9kaXN0YW5jZVwiLFxuICAgIFwiYXVkaW9fZmFsbG9mZl9leHBvbmVudF9kaXN0YW5jZV9jbGFtcGVkXCIsXG4gICAgXCJhdWRpb19mYWxsb2ZmX2V4cG9uZW50X2Rpc3RhbmNlX3NjYWxlZFwiLFxuICAgIFwiYXVkaW9fZmFsbG9mZl9pbnZlcnNlX2Rpc3RhbmNlXCIsXG4gICAgXCJhdWRpb19mYWxsb2ZmX2ludmVyc2VfZGlzdGFuY2VfY2xhbXBlZFwiLFxuICAgIFwiYXVkaW9fZmFsbG9mZl9pbnZlcnNlX2Rpc3RhbmNlX3NjYWxlZFwiLFxuICAgIFwiYXVkaW9fZmFsbG9mZl9saW5lYXJfZGlzdGFuY2VcIixcbiAgICBcImF1ZGlvX2ZhbGxvZmZfbGluZWFyX2Rpc3RhbmNlX2NsYW1wZWRcIixcbiAgICBcImF1ZGlvX2ZhbGxvZmZfbm9uZVwiLFxuICAgIFwiYXVkaW9fbW9ub1wiLFxuICAgIFwiYXVkaW9fc3RlcmVvXCIsXG4gICAgXCJiYm94a2luZF9kaWFtb25kXCIsXG4gICAgXCJiYm94a2luZF9lbGxpcHNlXCIsXG4gICAgXCJiYm94a2luZF9wcmVjaXNlXCIsXG4gICAgXCJiYm94a2luZF9yZWN0YW5ndWxhclwiLFxuICAgIFwiYmJveG1vZGVfYXV0b21hdGljXCIsXG4gICAgXCJiYm94bW9kZV9mdWxsaW1hZ2VcIixcbiAgICBcImJib3htb2RlX21hbnVhbFwiLFxuICAgIFwiYm1fYWRkXCIsXG4gICAgXCJibV9kZXN0X2FscGhhXCIsXG4gICAgXCJibV9kZXN0X2NvbG9yXCIsXG4gICAgXCJibV9kZXN0X2NvbG91clwiLFxuICAgIFwiYm1faW52X2Rlc3RfYWxwaGFcIixcbiAgICBcImJtX2ludl9kZXN0X2NvbG9yXCIsXG4gICAgXCJibV9pbnZfZGVzdF9jb2xvdXJcIixcbiAgICBcImJtX2ludl9zcmNfYWxwaGFcIixcbiAgICBcImJtX2ludl9zcmNfY29sb3JcIixcbiAgICBcImJtX2ludl9zcmNfY29sb3VyXCIsXG4gICAgXCJibV9tYXhcIixcbiAgICBcImJtX25vcm1hbFwiLFxuICAgIFwiYm1fb25lXCIsXG4gICAgXCJibV9zcmNfYWxwaGFcIixcbiAgICBcImJtX3NyY19hbHBoYV9zYXRcIixcbiAgICBcImJtX3NyY19jb2xvclwiLFxuICAgIFwiYm1fc3JjX2NvbG91clwiLFxuICAgIFwiYm1fc3VidHJhY3RcIixcbiAgICBcImJtX3plcm9cIixcbiAgICBcImJyb3dzZXJfY2hyb21lXCIsXG4gICAgXCJicm93c2VyX2VkZ2VcIixcbiAgICBcImJyb3dzZXJfZmlyZWZveFwiLFxuICAgIFwiYnJvd3Nlcl9pZVwiLFxuICAgIFwiYnJvd3Nlcl9pZV9tb2JpbGVcIixcbiAgICBcImJyb3dzZXJfbm90X2FfYnJvd3NlclwiLFxuICAgIFwiYnJvd3Nlcl9vcGVyYVwiLFxuICAgIFwiYnJvd3Nlcl9zYWZhcmlcIixcbiAgICBcImJyb3dzZXJfc2FmYXJpX21vYmlsZVwiLFxuICAgIFwiYnJvd3Nlcl90aXplblwiLFxuICAgIFwiYnJvd3Nlcl91bmtub3duXCIsXG4gICAgXCJicm93c2VyX3dpbmRvd3Nfc3RvcmVcIixcbiAgICBcImJ1ZmZlcl9ib29sXCIsXG4gICAgXCJidWZmZXJfZjE2XCIsXG4gICAgXCJidWZmZXJfZjMyXCIsXG4gICAgXCJidWZmZXJfZjY0XCIsXG4gICAgXCJidWZmZXJfZmFzdFwiLFxuICAgIFwiYnVmZmVyX2ZpeGVkXCIsXG4gICAgXCJidWZmZXJfZ3Jvd1wiLFxuICAgIFwiYnVmZmVyX3MxNlwiLFxuICAgIFwiYnVmZmVyX3MzMlwiLFxuICAgIFwiYnVmZmVyX3M4XCIsXG4gICAgXCJidWZmZXJfc2Vla19lbmRcIixcbiAgICBcImJ1ZmZlcl9zZWVrX3JlbGF0aXZlXCIsXG4gICAgXCJidWZmZXJfc2Vla19zdGFydFwiLFxuICAgIFwiYnVmZmVyX3N0cmluZ1wiLFxuICAgIFwiYnVmZmVyX3RleHRcIixcbiAgICBcImJ1ZmZlcl91MTZcIixcbiAgICBcImJ1ZmZlcl91MzJcIixcbiAgICBcImJ1ZmZlcl91NjRcIixcbiAgICBcImJ1ZmZlcl91OFwiLFxuICAgIFwiYnVmZmVyX3ZidWZmZXJcIixcbiAgICBcImJ1ZmZlcl93cmFwXCIsXG4gICAgXCJjX2FxdWFcIixcbiAgICBcImNfYmxhY2tcIixcbiAgICBcImNfYmx1ZVwiLFxuICAgIFwiY19ka2dyYXlcIixcbiAgICBcImNfZGtncmV5XCIsXG4gICAgXCJjX2Z1Y2hzaWFcIixcbiAgICBcImNfZ3JheVwiLFxuICAgIFwiY19ncmVlblwiLFxuICAgIFwiY19ncmV5XCIsXG4gICAgXCJjX2xpbWVcIixcbiAgICBcImNfbHRncmF5XCIsXG4gICAgXCJjX2x0Z3JleVwiLFxuICAgIFwiY19tYXJvb25cIixcbiAgICBcImNfbmF2eVwiLFxuICAgIFwiY19vbGl2ZVwiLFxuICAgIFwiY19vcmFuZ2VcIixcbiAgICBcImNfcHVycGxlXCIsXG4gICAgXCJjX3JlZFwiLFxuICAgIFwiY19zaWx2ZXJcIixcbiAgICBcImNfdGVhbFwiLFxuICAgIFwiY193aGl0ZVwiLFxuICAgIFwiY195ZWxsb3dcIixcbiAgICBcImNhY2hlX2RpcmVjdG9yeVwiLFxuICAgIFwiY2hhcmFjdGVyU3BhY2luZ1wiLFxuICAgIFwiY21wZnVuY19hbHdheXNcIixcbiAgICBcImNtcGZ1bmNfZXF1YWxcIixcbiAgICBcImNtcGZ1bmNfZ3JlYXRlclwiLFxuICAgIFwiY21wZnVuY19ncmVhdGVyZXF1YWxcIixcbiAgICBcImNtcGZ1bmNfbGVzc1wiLFxuICAgIFwiY21wZnVuY19sZXNzZXF1YWxcIixcbiAgICBcImNtcGZ1bmNfbmV2ZXJcIixcbiAgICBcImNtcGZ1bmNfbm90ZXF1YWxcIixcbiAgICBcImNvcmVDb2xvclwiLFxuICAgIFwiY29yZUNvbG91clwiLFxuICAgIFwiY3JfYXBwc3RhcnRcIixcbiAgICBcImNyX2Fycm93XCIsXG4gICAgXCJjcl9iZWFtXCIsXG4gICAgXCJjcl9jcm9zc1wiLFxuICAgIFwiY3JfZGVmYXVsdFwiLFxuICAgIFwiY3JfZHJhZ1wiLFxuICAgIFwiY3JfaGFuZHBvaW50XCIsXG4gICAgXCJjcl9ob3VyZ2xhc3NcIixcbiAgICBcImNyX25vbmVcIixcbiAgICBcImNyX3NpemVfYWxsXCIsXG4gICAgXCJjcl9zaXplX25lc3dcIixcbiAgICBcImNyX3NpemVfbnNcIixcbiAgICBcImNyX3NpemVfbndzZVwiLFxuICAgIFwiY3Jfc2l6ZV93ZVwiLFxuICAgIFwiY3JfdXBhcnJvd1wiLFxuICAgIFwiY3VsbF9jbG9ja3dpc2VcIixcbiAgICBcImN1bGxfY291bnRlcmNsb2Nrd2lzZVwiLFxuICAgIFwiY3VsbF9ub2N1bGxpbmdcIixcbiAgICBcImRldmljZV9lbXVsYXRvclwiLFxuICAgIFwiZGV2aWNlX2lvc19pcGFkXCIsXG4gICAgXCJkZXZpY2VfaW9zX2lwYWRfcmV0aW5hXCIsXG4gICAgXCJkZXZpY2VfaW9zX2lwaG9uZVwiLFxuICAgIFwiZGV2aWNlX2lvc19pcGhvbmU1XCIsXG4gICAgXCJkZXZpY2VfaW9zX2lwaG9uZTZcIixcbiAgICBcImRldmljZV9pb3NfaXBob25lNnBsdXNcIixcbiAgICBcImRldmljZV9pb3NfaXBob25lX3JldGluYVwiLFxuICAgIFwiZGV2aWNlX2lvc191bmtub3duXCIsXG4gICAgXCJkZXZpY2VfdGFibGV0XCIsXG4gICAgXCJkaXNwbGF5X2xhbmRzY2FwZVwiLFxuICAgIFwiZGlzcGxheV9sYW5kc2NhcGVfZmxpcHBlZFwiLFxuICAgIFwiZGlzcGxheV9wb3J0cmFpdFwiLFxuICAgIFwiZGlzcGxheV9wb3J0cmFpdF9mbGlwcGVkXCIsXG4gICAgXCJkbGxfY2RlY2xcIixcbiAgICBcImRsbF9zdGRjYWxsXCIsXG4gICAgXCJkcm9wU2hhZG93RW5hYmxlZFwiLFxuICAgIFwiZHJvcFNoYWRvd0VuYWJsZWRcIixcbiAgICBcImRzX3R5cGVfZ3JpZFwiLFxuICAgIFwiZHNfdHlwZV9saXN0XCIsXG4gICAgXCJkc190eXBlX21hcFwiLFxuICAgIFwiZHNfdHlwZV9wcmlvcml0eVwiLFxuICAgIFwiZHNfdHlwZV9xdWV1ZVwiLFxuICAgIFwiZHNfdHlwZV9zdGFja1wiLFxuICAgIFwiZWZfY2xvdWRcIixcbiAgICBcImVmX2VsbGlwc2VcIixcbiAgICBcImVmX2V4cGxvc2lvblwiLFxuICAgIFwiZWZfZmlyZXdvcmtcIixcbiAgICBcImVmX2ZsYXJlXCIsXG4gICAgXCJlZl9yYWluXCIsXG4gICAgXCJlZl9yaW5nXCIsXG4gICAgXCJlZl9zbW9rZVwiLFxuICAgIFwiZWZfc21va2V1cFwiLFxuICAgIFwiZWZfc25vd1wiLFxuICAgIFwiZWZfc3BhcmtcIixcbiAgICBcImVmX3N0YXJcIixcbiAgICBcImVmZmVjdHNFbmFibGVkXCIsXG4gICAgXCJlZmZlY3RzRW5hYmxlZFwiLFxuICAgIFwiZXZfYWxhcm1cIixcbiAgICBcImV2X2FuaW1hdGlvbl9lbmRcIixcbiAgICBcImV2X2FuaW1hdGlvbl9ldmVudFwiLFxuICAgIFwiZXZfYW5pbWF0aW9uX3VwZGF0ZVwiLFxuICAgIFwiZXZfYXN5bmNfYXVkaW9fcGxheWJhY2tcIixcbiAgICBcImV2X2FzeW5jX2F1ZGlvX3BsYXliYWNrX2VuZGVkXCIsXG4gICAgXCJldl9hc3luY19hdWRpb19yZWNvcmRpbmdcIixcbiAgICBcImV2X2FzeW5jX2RpYWxvZ1wiLFxuICAgIFwiZXZfYXN5bmNfcHVzaF9ub3RpZmljYXRpb25cIixcbiAgICBcImV2X2FzeW5jX3NhdmVfbG9hZFwiLFxuICAgIFwiZXZfYXN5bmNfc2F2ZV9sb2FkXCIsXG4gICAgXCJldl9hc3luY19zb2NpYWxcIixcbiAgICBcImV2X2FzeW5jX3N5c3RlbV9ldmVudFwiLFxuICAgIFwiZXZfYXN5bmNfd2ViXCIsXG4gICAgXCJldl9hc3luY193ZWJfY2xvdWRcIixcbiAgICBcImV2X2FzeW5jX3dlYl9pYXBcIixcbiAgICBcImV2X2FzeW5jX3dlYl9pbWFnZV9sb2FkXCIsXG4gICAgXCJldl9hc3luY193ZWJfbmV0d29ya2luZ1wiLFxuICAgIFwiZXZfYXN5bmNfd2ViX3N0ZWFtXCIsXG4gICAgXCJldl9hdWRpb19wbGF5YmFja1wiLFxuICAgIFwiZXZfYXVkaW9fcGxheWJhY2tfZW5kZWRcIixcbiAgICBcImV2X2F1ZGlvX3JlY29yZGluZ1wiLFxuICAgIFwiZXZfYm91bmRhcnlcIixcbiAgICBcImV2X2JvdW5kYXJ5X3ZpZXcwXCIsXG4gICAgXCJldl9ib3VuZGFyeV92aWV3MVwiLFxuICAgIFwiZXZfYm91bmRhcnlfdmlldzJcIixcbiAgICBcImV2X2JvdW5kYXJ5X3ZpZXczXCIsXG4gICAgXCJldl9ib3VuZGFyeV92aWV3NFwiLFxuICAgIFwiZXZfYm91bmRhcnlfdmlldzVcIixcbiAgICBcImV2X2JvdW5kYXJ5X3ZpZXc2XCIsXG4gICAgXCJldl9ib3VuZGFyeV92aWV3N1wiLFxuICAgIFwiZXZfYnJvYWRjYXN0X21lc3NhZ2VcIixcbiAgICBcImV2X2NsZWFudXBcIixcbiAgICBcImV2X2NvbGxpc2lvblwiLFxuICAgIFwiZXZfY3JlYXRlXCIsXG4gICAgXCJldl9kZXN0cm95XCIsXG4gICAgXCJldl9kaWFsb2dfYXN5bmNcIixcbiAgICBcImV2X2RyYXdcIixcbiAgICBcImV2X2RyYXdfYmVnaW5cIixcbiAgICBcImV2X2RyYXdfZW5kXCIsXG4gICAgXCJldl9kcmF3X25vcm1hbFwiLFxuICAgIFwiZXZfZHJhd19wb3N0XCIsXG4gICAgXCJldl9kcmF3X3ByZVwiLFxuICAgIFwiZXZfZW5kX29mX3BhdGhcIixcbiAgICBcImV2X2dhbWVfZW5kXCIsXG4gICAgXCJldl9nYW1lX3N0YXJ0XCIsXG4gICAgXCJldl9nZXN0dXJlXCIsXG4gICAgXCJldl9nZXN0dXJlX2RvdWJsZV90YXBcIixcbiAgICBcImV2X2dlc3R1cmVfZHJhZ19lbmRcIixcbiAgICBcImV2X2dlc3R1cmVfZHJhZ19zdGFydFwiLFxuICAgIFwiZXZfZ2VzdHVyZV9kcmFnZ2luZ1wiLFxuICAgIFwiZXZfZ2VzdHVyZV9mbGlja1wiLFxuICAgIFwiZXZfZ2VzdHVyZV9waW5jaF9lbmRcIixcbiAgICBcImV2X2dlc3R1cmVfcGluY2hfaW5cIixcbiAgICBcImV2X2dlc3R1cmVfcGluY2hfb3V0XCIsXG4gICAgXCJldl9nZXN0dXJlX3BpbmNoX3N0YXJ0XCIsXG4gICAgXCJldl9nZXN0dXJlX3JvdGF0ZV9lbmRcIixcbiAgICBcImV2X2dlc3R1cmVfcm90YXRlX3N0YXJ0XCIsXG4gICAgXCJldl9nZXN0dXJlX3JvdGF0aW5nXCIsXG4gICAgXCJldl9nZXN0dXJlX3RhcFwiLFxuICAgIFwiZXZfZ2xvYmFsX2dlc3R1cmVfZG91YmxlX3RhcFwiLFxuICAgIFwiZXZfZ2xvYmFsX2dlc3R1cmVfZHJhZ19lbmRcIixcbiAgICBcImV2X2dsb2JhbF9nZXN0dXJlX2RyYWdfc3RhcnRcIixcbiAgICBcImV2X2dsb2JhbF9nZXN0dXJlX2RyYWdnaW5nXCIsXG4gICAgXCJldl9nbG9iYWxfZ2VzdHVyZV9mbGlja1wiLFxuICAgIFwiZXZfZ2xvYmFsX2dlc3R1cmVfcGluY2hfZW5kXCIsXG4gICAgXCJldl9nbG9iYWxfZ2VzdHVyZV9waW5jaF9pblwiLFxuICAgIFwiZXZfZ2xvYmFsX2dlc3R1cmVfcGluY2hfb3V0XCIsXG4gICAgXCJldl9nbG9iYWxfZ2VzdHVyZV9waW5jaF9zdGFydFwiLFxuICAgIFwiZXZfZ2xvYmFsX2dlc3R1cmVfcm90YXRlX2VuZFwiLFxuICAgIFwiZXZfZ2xvYmFsX2dlc3R1cmVfcm90YXRlX3N0YXJ0XCIsXG4gICAgXCJldl9nbG9iYWxfZ2VzdHVyZV9yb3RhdGluZ1wiLFxuICAgIFwiZXZfZ2xvYmFsX2dlc3R1cmVfdGFwXCIsXG4gICAgXCJldl9nbG9iYWxfbGVmdF9idXR0b25cIixcbiAgICBcImV2X2dsb2JhbF9sZWZ0X3ByZXNzXCIsXG4gICAgXCJldl9nbG9iYWxfbGVmdF9yZWxlYXNlXCIsXG4gICAgXCJldl9nbG9iYWxfbWlkZGxlX2J1dHRvblwiLFxuICAgIFwiZXZfZ2xvYmFsX21pZGRsZV9wcmVzc1wiLFxuICAgIFwiZXZfZ2xvYmFsX21pZGRsZV9yZWxlYXNlXCIsXG4gICAgXCJldl9nbG9iYWxfcmlnaHRfYnV0dG9uXCIsXG4gICAgXCJldl9nbG9iYWxfcmlnaHRfcHJlc3NcIixcbiAgICBcImV2X2dsb2JhbF9yaWdodF9yZWxlYXNlXCIsXG4gICAgXCJldl9ndWlcIixcbiAgICBcImV2X2d1aV9iZWdpblwiLFxuICAgIFwiZXZfZ3VpX2VuZFwiLFxuICAgIFwiZXZfam95c3RpY2sxX2J1dHRvbjFcIixcbiAgICBcImV2X2pveXN0aWNrMV9idXR0b24yXCIsXG4gICAgXCJldl9qb3lzdGljazFfYnV0dG9uM1wiLFxuICAgIFwiZXZfam95c3RpY2sxX2J1dHRvbjRcIixcbiAgICBcImV2X2pveXN0aWNrMV9idXR0b241XCIsXG4gICAgXCJldl9qb3lzdGljazFfYnV0dG9uNlwiLFxuICAgIFwiZXZfam95c3RpY2sxX2J1dHRvbjdcIixcbiAgICBcImV2X2pveXN0aWNrMV9idXR0b244XCIsXG4gICAgXCJldl9qb3lzdGljazFfZG93blwiLFxuICAgIFwiZXZfam95c3RpY2sxX2xlZnRcIixcbiAgICBcImV2X2pveXN0aWNrMV9yaWdodFwiLFxuICAgIFwiZXZfam95c3RpY2sxX3VwXCIsXG4gICAgXCJldl9qb3lzdGljazJfYnV0dG9uMVwiLFxuICAgIFwiZXZfam95c3RpY2syX2J1dHRvbjJcIixcbiAgICBcImV2X2pveXN0aWNrMl9idXR0b24zXCIsXG4gICAgXCJldl9qb3lzdGljazJfYnV0dG9uNFwiLFxuICAgIFwiZXZfam95c3RpY2syX2J1dHRvbjVcIixcbiAgICBcImV2X2pveXN0aWNrMl9idXR0b242XCIsXG4gICAgXCJldl9qb3lzdGljazJfYnV0dG9uN1wiLFxuICAgIFwiZXZfam95c3RpY2syX2J1dHRvbjhcIixcbiAgICBcImV2X2pveXN0aWNrMl9kb3duXCIsXG4gICAgXCJldl9qb3lzdGljazJfbGVmdFwiLFxuICAgIFwiZXZfam95c3RpY2syX3JpZ2h0XCIsXG4gICAgXCJldl9qb3lzdGljazJfdXBcIixcbiAgICBcImV2X2tleWJvYXJkXCIsXG4gICAgXCJldl9rZXlwcmVzc1wiLFxuICAgIFwiZXZfa2V5cmVsZWFzZVwiLFxuICAgIFwiZXZfbGVmdF9idXR0b25cIixcbiAgICBcImV2X2xlZnRfcHJlc3NcIixcbiAgICBcImV2X2xlZnRfcmVsZWFzZVwiLFxuICAgIFwiZXZfbWlkZGxlX2J1dHRvblwiLFxuICAgIFwiZXZfbWlkZGxlX3ByZXNzXCIsXG4gICAgXCJldl9taWRkbGVfcmVsZWFzZVwiLFxuICAgIFwiZXZfbW91c2VcIixcbiAgICBcImV2X21vdXNlX2VudGVyXCIsXG4gICAgXCJldl9tb3VzZV9sZWF2ZVwiLFxuICAgIFwiZXZfbW91c2Vfd2hlZWxfZG93blwiLFxuICAgIFwiZXZfbW91c2Vfd2hlZWxfdXBcIixcbiAgICBcImV2X25vX2J1dHRvblwiLFxuICAgIFwiZXZfbm9fbW9yZV9oZWFsdGhcIixcbiAgICBcImV2X25vX21vcmVfbGl2ZXNcIixcbiAgICBcImV2X290aGVyXCIsXG4gICAgXCJldl9vdXRzaWRlXCIsXG4gICAgXCJldl9vdXRzaWRlX3ZpZXcwXCIsXG4gICAgXCJldl9vdXRzaWRlX3ZpZXcxXCIsXG4gICAgXCJldl9vdXRzaWRlX3ZpZXcyXCIsXG4gICAgXCJldl9vdXRzaWRlX3ZpZXczXCIsXG4gICAgXCJldl9vdXRzaWRlX3ZpZXc0XCIsXG4gICAgXCJldl9vdXRzaWRlX3ZpZXc1XCIsXG4gICAgXCJldl9vdXRzaWRlX3ZpZXc2XCIsXG4gICAgXCJldl9vdXRzaWRlX3ZpZXc3XCIsXG4gICAgXCJldl9wcmVfY3JlYXRlXCIsXG4gICAgXCJldl9wdXNoX25vdGlmaWNhdGlvblwiLFxuICAgIFwiZXZfcmlnaHRfYnV0dG9uXCIsXG4gICAgXCJldl9yaWdodF9wcmVzc1wiLFxuICAgIFwiZXZfcmlnaHRfcmVsZWFzZVwiLFxuICAgIFwiZXZfcm9vbV9lbmRcIixcbiAgICBcImV2X3Jvb21fc3RhcnRcIixcbiAgICBcImV2X3NvY2lhbFwiLFxuICAgIFwiZXZfc3RlcFwiLFxuICAgIFwiZXZfc3RlcF9iZWdpblwiLFxuICAgIFwiZXZfc3RlcF9lbmRcIixcbiAgICBcImV2X3N0ZXBfbm9ybWFsXCIsXG4gICAgXCJldl9zeXN0ZW1fZXZlbnRcIixcbiAgICBcImV2X3RyaWdnZXJcIixcbiAgICBcImV2X3VzZXIwXCIsXG4gICAgXCJldl91c2VyMVwiLFxuICAgIFwiZXZfdXNlcjEwXCIsXG4gICAgXCJldl91c2VyMTFcIixcbiAgICBcImV2X3VzZXIxMlwiLFxuICAgIFwiZXZfdXNlcjEzXCIsXG4gICAgXCJldl91c2VyMTRcIixcbiAgICBcImV2X3VzZXIxNVwiLFxuICAgIFwiZXZfdXNlcjJcIixcbiAgICBcImV2X3VzZXIzXCIsXG4gICAgXCJldl91c2VyNFwiLFxuICAgIFwiZXZfdXNlcjVcIixcbiAgICBcImV2X3VzZXI2XCIsXG4gICAgXCJldl91c2VyN1wiLFxuICAgIFwiZXZfdXNlcjhcIixcbiAgICBcImV2X3VzZXI5XCIsXG4gICAgXCJldl93ZWJfYXN5bmNcIixcbiAgICBcImV2X3dlYl9jbG91ZFwiLFxuICAgIFwiZXZfd2ViX2lhcFwiLFxuICAgIFwiZXZfd2ViX2ltYWdlX2xvYWRcIixcbiAgICBcImV2X3dlYl9uZXR3b3JraW5nXCIsXG4gICAgXCJldl93ZWJfc291bmRfbG9hZFwiLFxuICAgIFwiZXZfd2ViX3N0ZWFtXCIsXG4gICAgXCJmYV9hcmNoaXZlXCIsXG4gICAgXCJmYV9ib3R0b21cIixcbiAgICBcImZhX2NlbnRlclwiLFxuICAgIFwiZmFfZGlyZWN0b3J5XCIsXG4gICAgXCJmYV9oaWRkZW5cIixcbiAgICBcImZhX2xlZnRcIixcbiAgICBcImZhX21pZGRsZVwiLFxuICAgIFwiZmFfbm9uZVwiLFxuICAgIFwiZmFfcmVhZG9ubHlcIixcbiAgICBcImZhX3JpZ2h0XCIsXG4gICAgXCJmYV9zeXNmaWxlXCIsXG4gICAgXCJmYV90b3BcIixcbiAgICBcImZhX3ZvbHVtZWlkXCIsXG4gICAgXCJmYWxzZVwiLFxuICAgIFwiZnJhbWVTaXplWFwiLFxuICAgIFwiZnJhbWVTaXplWVwiLFxuICAgIFwiZ2FtZXNwZWVkX2Zwc1wiLFxuICAgIFwiZ2FtZXNwZWVkX21pY3Jvc2Vjb25kc1wiLFxuICAgIFwiZ2xvYmFsXCIsXG4gICAgXCJnbG93Q29sb3JcIixcbiAgICBcImdsb3dDb2xvdXJcIixcbiAgICBcImdsb3dFbmFibGVkXCIsXG4gICAgXCJnbG93RW5hYmxlZFwiLFxuICAgIFwiZ2xvd0VuZFwiLFxuICAgIFwiZ2xvd1N0YXJ0XCIsXG4gICAgXCJncF9heGlzX2FjY2VsZXJhdGlvbl94XCIsXG4gICAgXCJncF9heGlzX2FjY2VsZXJhdGlvbl95XCIsXG4gICAgXCJncF9heGlzX2FjY2VsZXJhdGlvbl96XCIsXG4gICAgXCJncF9heGlzX2FuZ3VsYXJfdmVsb2NpdHlfeFwiLFxuICAgIFwiZ3BfYXhpc19hbmd1bGFyX3ZlbG9jaXR5X3lcIixcbiAgICBcImdwX2F4aXNfYW5ndWxhcl92ZWxvY2l0eV96XCIsXG4gICAgXCJncF9heGlzX29yaWVudGF0aW9uX3dcIixcbiAgICBcImdwX2F4aXNfb3JpZW50YXRpb25feFwiLFxuICAgIFwiZ3BfYXhpc19vcmllbnRhdGlvbl95XCIsXG4gICAgXCJncF9heGlzX29yaWVudGF0aW9uX3pcIixcbiAgICBcImdwX2F4aXNsaFwiLFxuICAgIFwiZ3BfYXhpc2x2XCIsXG4gICAgXCJncF9heGlzcmhcIixcbiAgICBcImdwX2F4aXNydlwiLFxuICAgIFwiZ3BfZmFjZTFcIixcbiAgICBcImdwX2ZhY2UyXCIsXG4gICAgXCJncF9mYWNlM1wiLFxuICAgIFwiZ3BfZmFjZTRcIixcbiAgICBcImdwX3BhZGRcIixcbiAgICBcImdwX3BhZGxcIixcbiAgICBcImdwX3BhZHJcIixcbiAgICBcImdwX3BhZHVcIixcbiAgICBcImdwX3NlbGVjdFwiLFxuICAgIFwiZ3Bfc2hvdWxkZXJsXCIsXG4gICAgXCJncF9zaG91bGRlcmxiXCIsXG4gICAgXCJncF9zaG91bGRlcnJcIixcbiAgICBcImdwX3Nob3VsZGVycmJcIixcbiAgICBcImdwX3N0YXJ0XCIsXG4gICAgXCJncF9zdGlja2xcIixcbiAgICBcImdwX3N0aWNrclwiLFxuICAgIFwiaWFwX2F2YWlsYWJsZVwiLFxuICAgIFwiaWFwX2NhbmNlbGVkXCIsXG4gICAgXCJpYXBfZXZfY29uc3VtZVwiLFxuICAgIFwiaWFwX2V2X3Byb2R1Y3RcIixcbiAgICBcImlhcF9ldl9wdXJjaGFzZVwiLFxuICAgIFwiaWFwX2V2X3Jlc3RvcmVcIixcbiAgICBcImlhcF9ldl9zdG9yZWxvYWRcIixcbiAgICBcImlhcF9mYWlsZWRcIixcbiAgICBcImlhcF9wdXJjaGFzZWRcIixcbiAgICBcImlhcF9yZWZ1bmRlZFwiLFxuICAgIFwiaWFwX3N0YXR1c19hdmFpbGFibGVcIixcbiAgICBcImlhcF9zdGF0dXNfbG9hZGluZ1wiLFxuICAgIFwiaWFwX3N0YXR1c19wcm9jZXNzaW5nXCIsXG4gICAgXCJpYXBfc3RhdHVzX3Jlc3RvcmluZ1wiLFxuICAgIFwiaWFwX3N0YXR1c191bmF2YWlsYWJsZVwiLFxuICAgIFwiaWFwX3N0YXR1c191bmluaXRpYWxpc2VkXCIsXG4gICAgXCJpYXBfc3RvcmVsb2FkX2ZhaWxlZFwiLFxuICAgIFwiaWFwX3N0b3JlbG9hZF9va1wiLFxuICAgIFwiaWFwX3VuYXZhaWxhYmxlXCIsXG4gICAgXCJpbmZpbml0eVwiLFxuICAgIFwia2J2X2F1dG9jYXBpdGFsaXplX2NoYXJhY3RlcnNcIixcbiAgICBcImtidl9hdXRvY2FwaXRhbGl6ZV9ub25lXCIsXG4gICAgXCJrYnZfYXV0b2NhcGl0YWxpemVfc2VudGVuY2VzXCIsXG4gICAgXCJrYnZfYXV0b2NhcGl0YWxpemVfd29yZHNcIixcbiAgICBcImtidl9yZXR1cm5rZXlfY29udGludWVcIixcbiAgICBcImtidl9yZXR1cm5rZXlfZGVmYXVsdFwiLFxuICAgIFwia2J2X3JldHVybmtleV9kb25lXCIsXG4gICAgXCJrYnZfcmV0dXJua2V5X2VtZXJnZW5jeVwiLFxuICAgIFwia2J2X3JldHVybmtleV9nb1wiLFxuICAgIFwia2J2X3JldHVybmtleV9nb29nbGVcIixcbiAgICBcImtidl9yZXR1cm5rZXlfam9pblwiLFxuICAgIFwia2J2X3JldHVybmtleV9uZXh0XCIsXG4gICAgXCJrYnZfcmV0dXJua2V5X3JvdXRlXCIsXG4gICAgXCJrYnZfcmV0dXJua2V5X3NlYXJjaFwiLFxuICAgIFwia2J2X3JldHVybmtleV9zZW5kXCIsXG4gICAgXCJrYnZfcmV0dXJua2V5X3lhaG9vXCIsXG4gICAgXCJrYnZfdHlwZV9hc2NpaVwiLFxuICAgIFwia2J2X3R5cGVfZGVmYXVsdFwiLFxuICAgIFwia2J2X3R5cGVfZW1haWxcIixcbiAgICBcImtidl90eXBlX251bWJlcnNcIixcbiAgICBcImtidl90eXBlX3Bob25lXCIsXG4gICAgXCJrYnZfdHlwZV9waG9uZV9uYW1lXCIsXG4gICAgXCJrYnZfdHlwZV91cmxcIixcbiAgICBcImxheWVyZWxlbWVudHR5cGVfYmFja2dyb3VuZFwiLFxuICAgIFwibGF5ZXJlbGVtZW50dHlwZV9pbnN0YW5jZVwiLFxuICAgIFwibGF5ZXJlbGVtZW50dHlwZV9vbGR0aWxlbWFwXCIsXG4gICAgXCJsYXllcmVsZW1lbnR0eXBlX3BhcnRpY2xlc3lzdGVtXCIsXG4gICAgXCJsYXllcmVsZW1lbnR0eXBlX3NlcXVlbmNlXCIsXG4gICAgXCJsYXllcmVsZW1lbnR0eXBlX3Nwcml0ZVwiLFxuICAgIFwibGF5ZXJlbGVtZW50dHlwZV90aWxlXCIsXG4gICAgXCJsYXllcmVsZW1lbnR0eXBlX3RpbGVtYXBcIixcbiAgICBcImxheWVyZWxlbWVudHR5cGVfdW5kZWZpbmVkXCIsXG4gICAgXCJsZWFkZXJib2FyZF90eXBlX251bWJlclwiLFxuICAgIFwibGVhZGVyYm9hcmRfdHlwZV90aW1lX21pbnNfc2Vjc1wiLFxuICAgIFwibGlnaHR0eXBlX2RpclwiLFxuICAgIFwibGlnaHR0eXBlX3BvaW50XCIsXG4gICAgXCJsaW5lU3BhY2luZ1wiLFxuICAgIFwibV9heGlzeFwiLFxuICAgIFwibV9heGlzeF9ndWlcIixcbiAgICBcIm1fYXhpc3lcIixcbiAgICBcIm1fYXhpc3lfZ3VpXCIsXG4gICAgXCJtX3Njcm9sbF9kb3duXCIsXG4gICAgXCJtX3Njcm9sbF91cFwiLFxuICAgIFwibWF0cml4X3Byb2plY3Rpb25cIixcbiAgICBcIm1hdHJpeF92aWV3XCIsXG4gICAgXCJtYXRyaXhfd29ybGRcIixcbiAgICBcIm1iX2FueVwiLFxuICAgIFwibWJfbGVmdFwiLFxuICAgIFwibWJfbWlkZGxlXCIsXG4gICAgXCJtYl9ub25lXCIsXG4gICAgXCJtYl9yaWdodFwiLFxuICAgIFwibWJfc2lkZTFcIixcbiAgICBcIm1iX3NpZGUyXCIsXG4gICAgXCJtaXBfbWFya2Vkb25seVwiLFxuICAgIFwibWlwX29mZlwiLFxuICAgIFwibWlwX29uXCIsXG4gICAgXCJuZXR3b3JrX2NvbmZpZ19hdm9pZF90aW1lX3dhaXRcIixcbiAgICBcIm5ldHdvcmtfY29uZmlnX2Nvbm5lY3RfdGltZW91dFwiLFxuICAgIFwibmV0d29ya19jb25maWdfZGlzYWJsZV9tdWx0aWNhc3RcIixcbiAgICBcIm5ldHdvcmtfY29uZmlnX2Rpc2FibGVfcmVsaWFibGVfdWRwXCIsXG4gICAgXCJuZXR3b3JrX2NvbmZpZ19lbmFibGVfbXVsdGljYXN0XCIsXG4gICAgXCJuZXR3b3JrX2NvbmZpZ19lbmFibGVfcmVsaWFibGVfdWRwXCIsXG4gICAgXCJuZXR3b3JrX2NvbmZpZ191c2Vfbm9uX2Jsb2NraW5nX3NvY2tldFwiLFxuICAgIFwibmV0d29ya19jb25maWdfd2Vic29ja2V0X3Byb3RvY29sXCIsXG4gICAgXCJuZXR3b3JrX2Nvbm5lY3RfYWN0aXZlXCIsXG4gICAgXCJuZXR3b3JrX2Nvbm5lY3RfYmxvY2tpbmdcIixcbiAgICBcIm5ldHdvcmtfY29ubmVjdF9ub25ibG9ja2luZ1wiLFxuICAgIFwibmV0d29ya19jb25uZWN0X25vbmVcIixcbiAgICBcIm5ldHdvcmtfY29ubmVjdF9wYXNzaXZlXCIsXG4gICAgXCJuZXR3b3JrX3NlbmRfYmluYXJ5XCIsXG4gICAgXCJuZXR3b3JrX3NlbmRfdGV4dFwiLFxuICAgIFwibmV0d29ya19zb2NrZXRfYmx1ZXRvb3RoXCIsXG4gICAgXCJuZXR3b3JrX3NvY2tldF90Y3BcIixcbiAgICBcIm5ldHdvcmtfc29ja2V0X3VkcFwiLFxuICAgIFwibmV0d29ya19zb2NrZXRfd3NcIixcbiAgICBcIm5ldHdvcmtfc29ja2V0X3dzc1wiLFxuICAgIFwibmV0d29ya190eXBlX2Nvbm5lY3RcIixcbiAgICBcIm5ldHdvcmtfdHlwZV9kYXRhXCIsXG4gICAgXCJuZXR3b3JrX3R5cGVfZGlzY29ubmVjdFwiLFxuICAgIFwibmV0d29ya190eXBlX2Rvd25cIixcbiAgICBcIm5ldHdvcmtfdHlwZV9ub25fYmxvY2tpbmdfY29ubmVjdFwiLFxuICAgIFwibmV0d29ya190eXBlX3VwXCIsXG4gICAgXCJuZXR3b3JrX3R5cGVfdXBfZmFpbGVkXCIsXG4gICAgXCJuaW5lc2xpY2VfYmxhbmtcIixcbiAgICBcIm5pbmVzbGljZV9ib3R0b21cIixcbiAgICBcIm5pbmVzbGljZV9jZW50ZXJcIixcbiAgICBcIm5pbmVzbGljZV9jZW50cmVcIixcbiAgICBcIm5pbmVzbGljZV9oaWRlXCIsXG4gICAgXCJuaW5lc2xpY2VfbGVmdFwiLFxuICAgIFwibmluZXNsaWNlX21pcnJvclwiLFxuICAgIFwibmluZXNsaWNlX3JlcGVhdFwiLFxuICAgIFwibmluZXNsaWNlX3JpZ2h0XCIsXG4gICAgXCJuaW5lc2xpY2Vfc3RyZXRjaFwiLFxuICAgIFwibmluZXNsaWNlX3RvcFwiLFxuICAgIFwibm9vbmVcIixcbiAgICBcIm9mX2NoYWxsZW5nZV9sb3NlXCIsXG4gICAgXCJvZl9jaGFsbGVuZ2VfdGllXCIsXG4gICAgXCJvZl9jaGFsbGVuZ2Vfd2luXCIsXG4gICAgXCJvc19hbmRyb2lkXCIsXG4gICAgXCJvc19nZGtcIixcbiAgICBcIm9zX2d4Z2FtZXNcIixcbiAgICBcIm9zX2lvc1wiLFxuICAgIFwib3NfbGludXhcIixcbiAgICBcIm9zX21hY29zeFwiLFxuICAgIFwib3Nfb3BlcmFneFwiLFxuICAgIFwib3NfcGVybWlzc2lvbl9kZW5pZWRcIixcbiAgICBcIm9zX3Blcm1pc3Npb25fZGVuaWVkX2RvbnRfcmVxdWVzdFwiLFxuICAgIFwib3NfcGVybWlzc2lvbl9ncmFudGVkXCIsXG4gICAgXCJvc19wczNcIixcbiAgICBcIm9zX3BzNFwiLFxuICAgIFwib3NfcHM1XCIsXG4gICAgXCJvc19wc3ZpdGFcIixcbiAgICBcIm9zX3N3aXRjaFwiLFxuICAgIFwib3NfdHZvc1wiLFxuICAgIFwib3NfdW5rbm93blwiLFxuICAgIFwib3NfdXdwXCIsXG4gICAgXCJvc193aW44bmF0aXZlXCIsXG4gICAgXCJvc193aW5kb3dzXCIsXG4gICAgXCJvc193aW5waG9uZVwiLFxuICAgIFwib3NfeGJveG9uZVwiLFxuICAgIFwib3NfeGJveHNlcmllc3hzXCIsXG4gICAgXCJvdGhlclwiLFxuICAgIFwib3V0bGluZUNvbG9yXCIsXG4gICAgXCJvdXRsaW5lQ29sb3VyXCIsXG4gICAgXCJvdXRsaW5lRGlzdFwiLFxuICAgIFwib3V0bGluZUVuYWJsZWRcIixcbiAgICBcIm91dGxpbmVFbmFibGVkXCIsXG4gICAgXCJwYXJhZ3JhcGhTcGFjaW5nXCIsXG4gICAgXCJwYXRoX2FjdGlvbl9jb250aW51ZVwiLFxuICAgIFwicGF0aF9hY3Rpb25fcmVzdGFydFwiLFxuICAgIFwicGF0aF9hY3Rpb25fcmV2ZXJzZVwiLFxuICAgIFwicGF0aF9hY3Rpb25fc3RvcFwiLFxuICAgIFwicGh5X2RlYnVnX3JlbmRlcl9hYWJiXCIsXG4gICAgXCJwaHlfZGVidWdfcmVuZGVyX2NvbGxpc2lvbl9wYWlyc1wiLFxuICAgIFwicGh5X2RlYnVnX3JlbmRlcl9jb21zXCIsXG4gICAgXCJwaHlfZGVidWdfcmVuZGVyX2NvcmVfc2hhcGVzXCIsXG4gICAgXCJwaHlfZGVidWdfcmVuZGVyX2pvaW50c1wiLFxuICAgIFwicGh5X2RlYnVnX3JlbmRlcl9vYmJcIixcbiAgICBcInBoeV9kZWJ1Z19yZW5kZXJfc2hhcGVzXCIsXG4gICAgXCJwaHlfam9pbnRfYW5jaG9yXzFfeFwiLFxuICAgIFwicGh5X2pvaW50X2FuY2hvcl8xX3lcIixcbiAgICBcInBoeV9qb2ludF9hbmNob3JfMl94XCIsXG4gICAgXCJwaHlfam9pbnRfYW5jaG9yXzJfeVwiLFxuICAgIFwicGh5X2pvaW50X2FuZ2xlXCIsXG4gICAgXCJwaHlfam9pbnRfYW5nbGVfbGltaXRzXCIsXG4gICAgXCJwaHlfam9pbnRfZGFtcGluZ19yYXRpb1wiLFxuICAgIFwicGh5X2pvaW50X2ZyZXF1ZW5jeVwiLFxuICAgIFwicGh5X2pvaW50X2xlbmd0aF8xXCIsXG4gICAgXCJwaHlfam9pbnRfbGVuZ3RoXzJcIixcbiAgICBcInBoeV9qb2ludF9sb3dlcl9hbmdsZV9saW1pdFwiLFxuICAgIFwicGh5X2pvaW50X21heF9mb3JjZVwiLFxuICAgIFwicGh5X2pvaW50X21heF9sZW5ndGhcIixcbiAgICBcInBoeV9qb2ludF9tYXhfbW90b3JfZm9yY2VcIixcbiAgICBcInBoeV9qb2ludF9tYXhfbW90b3JfdG9ycXVlXCIsXG4gICAgXCJwaHlfam9pbnRfbWF4X3RvcnF1ZVwiLFxuICAgIFwicGh5X2pvaW50X21vdG9yX2ZvcmNlXCIsXG4gICAgXCJwaHlfam9pbnRfbW90b3Jfc3BlZWRcIixcbiAgICBcInBoeV9qb2ludF9tb3Rvcl90b3JxdWVcIixcbiAgICBcInBoeV9qb2ludF9yZWFjdGlvbl9mb3JjZV94XCIsXG4gICAgXCJwaHlfam9pbnRfcmVhY3Rpb25fZm9yY2VfeVwiLFxuICAgIFwicGh5X2pvaW50X3JlYWN0aW9uX3RvcnF1ZVwiLFxuICAgIFwicGh5X2pvaW50X3NwZWVkXCIsXG4gICAgXCJwaHlfam9pbnRfdHJhbnNsYXRpb25cIixcbiAgICBcInBoeV9qb2ludF91cHBlcl9hbmdsZV9saW1pdFwiLFxuICAgIFwicGh5X3BhcnRpY2xlX2RhdGFfZmxhZ19jYXRlZ29yeVwiLFxuICAgIFwicGh5X3BhcnRpY2xlX2RhdGFfZmxhZ19jb2xvclwiLFxuICAgIFwicGh5X3BhcnRpY2xlX2RhdGFfZmxhZ19jb2xvdXJcIixcbiAgICBcInBoeV9wYXJ0aWNsZV9kYXRhX2ZsYWdfcG9zaXRpb25cIixcbiAgICBcInBoeV9wYXJ0aWNsZV9kYXRhX2ZsYWdfdHlwZWZsYWdzXCIsXG4gICAgXCJwaHlfcGFydGljbGVfZGF0YV9mbGFnX3ZlbG9jaXR5XCIsXG4gICAgXCJwaHlfcGFydGljbGVfZmxhZ19jb2xvcm1peGluZ1wiLFxuICAgIFwicGh5X3BhcnRpY2xlX2ZsYWdfY29sb3VybWl4aW5nXCIsXG4gICAgXCJwaHlfcGFydGljbGVfZmxhZ19lbGFzdGljXCIsXG4gICAgXCJwaHlfcGFydGljbGVfZmxhZ19wb3dkZXJcIixcbiAgICBcInBoeV9wYXJ0aWNsZV9mbGFnX3NwcmluZ1wiLFxuICAgIFwicGh5X3BhcnRpY2xlX2ZsYWdfdGVuc2lsZVwiLFxuICAgIFwicGh5X3BhcnRpY2xlX2ZsYWdfdmlzY291c1wiLFxuICAgIFwicGh5X3BhcnRpY2xlX2ZsYWdfd2FsbFwiLFxuICAgIFwicGh5X3BhcnRpY2xlX2ZsYWdfd2F0ZXJcIixcbiAgICBcInBoeV9wYXJ0aWNsZV9mbGFnX3pvbWJpZVwiLFxuICAgIFwicGh5X3BhcnRpY2xlX2dyb3VwX2ZsYWdfcmlnaWRcIixcbiAgICBcInBoeV9wYXJ0aWNsZV9ncm91cF9mbGFnX3NvbGlkXCIsXG4gICAgXCJwaVwiLFxuICAgIFwicG9pbnRlcl9pbnZhbGlkXCIsXG4gICAgXCJwb2ludGVyX251bGxcIixcbiAgICBcInByX2xpbmVsaXN0XCIsXG4gICAgXCJwcl9saW5lc3RyaXBcIixcbiAgICBcInByX3BvaW50bGlzdFwiLFxuICAgIFwicHJfdHJpYW5nbGVmYW5cIixcbiAgICBcInByX3RyaWFuZ2xlbGlzdFwiLFxuICAgIFwicHJfdHJpYW5nbGVzdHJpcFwiLFxuICAgIFwicHNfZGlzdHJfZ2F1c3NpYW5cIixcbiAgICBcInBzX2Rpc3RyX2ludmdhdXNzaWFuXCIsXG4gICAgXCJwc19kaXN0cl9saW5lYXJcIixcbiAgICBcInBzX21vZGVfYnVyc3RcIixcbiAgICBcInBzX21vZGVfc3RyZWFtXCIsXG4gICAgXCJwc19zaGFwZV9kaWFtb25kXCIsXG4gICAgXCJwc19zaGFwZV9lbGxpcHNlXCIsXG4gICAgXCJwc19zaGFwZV9saW5lXCIsXG4gICAgXCJwc19zaGFwZV9yZWN0YW5nbGVcIixcbiAgICBcInB0X3NoYXBlX2NpcmNsZVwiLFxuICAgIFwicHRfc2hhcGVfY2xvdWRcIixcbiAgICBcInB0X3NoYXBlX2Rpc2tcIixcbiAgICBcInB0X3NoYXBlX2V4cGxvc2lvblwiLFxuICAgIFwicHRfc2hhcGVfZmxhcmVcIixcbiAgICBcInB0X3NoYXBlX2xpbmVcIixcbiAgICBcInB0X3NoYXBlX3BpeGVsXCIsXG4gICAgXCJwdF9zaGFwZV9yaW5nXCIsXG4gICAgXCJwdF9zaGFwZV9zbW9rZVwiLFxuICAgIFwicHRfc2hhcGVfc25vd1wiLFxuICAgIFwicHRfc2hhcGVfc3BhcmtcIixcbiAgICBcInB0X3NoYXBlX3NwaGVyZVwiLFxuICAgIFwicHRfc2hhcGVfc3F1YXJlXCIsXG4gICAgXCJwdF9zaGFwZV9zdGFyXCIsXG4gICAgXCJyb2xsYmFja19jaGF0X21lc3NhZ2VcIixcbiAgICBcInJvbGxiYWNrX2Nvbm5lY3RfZXJyb3JcIixcbiAgICBcInJvbGxiYWNrX2Nvbm5lY3RfaW5mb1wiLFxuICAgIFwicm9sbGJhY2tfY29ubmVjdGVkX3RvX3BlZXJcIixcbiAgICBcInJvbGxiYWNrX2Nvbm5lY3Rpb25fcmVqZWN0ZWRcIixcbiAgICBcInJvbGxiYWNrX2Rpc2Nvbm5lY3RlZF9mcm9tX3BlZXJcIixcbiAgICBcInJvbGxiYWNrX2VuZF9nYW1lXCIsXG4gICAgXCJyb2xsYmFja19nYW1lX2Z1bGxcIixcbiAgICBcInJvbGxiYWNrX2dhbWVfaW5mb1wiLFxuICAgIFwicm9sbGJhY2tfZ2FtZV9pbnRlcnJ1cHRlZFwiLFxuICAgIFwicm9sbGJhY2tfZ2FtZV9yZXN1bWVkXCIsXG4gICAgXCJyb2xsYmFja19oaWdoX2xhdGVuY3lcIixcbiAgICBcInJvbGxiYWNrX3BsYXllcl9wcmVmc1wiLFxuICAgIFwicm9sbGJhY2tfcHJvdG9jb2xfcmVqZWN0ZWRcIixcbiAgICBcInJvbGxiYWNrX3N5bmNocm9uaXplZF93aXRoX3BlZXJcIixcbiAgICBcInJvbGxiYWNrX3N5bmNocm9uaXppbmdfd2l0aF9wZWVyXCIsXG4gICAgXCJzZWxmXCIsXG4gICAgXCJzZXFhdWRpb2tleV9sb29wXCIsXG4gICAgXCJzZXFhdWRpb2tleV9vbmVzaG90XCIsXG4gICAgXCJzZXFkaXJfbGVmdFwiLFxuICAgIFwic2VxZGlyX3JpZ2h0XCIsXG4gICAgXCJzZXFpbnRlcnBvbGF0aW9uX2Fzc2lnblwiLFxuICAgIFwic2VxaW50ZXJwb2xhdGlvbl9sZXJwXCIsXG4gICAgXCJzZXFwbGF5X2xvb3BcIixcbiAgICBcInNlcXBsYXlfb25lc2hvdFwiLFxuICAgIFwic2VxcGxheV9waW5ncG9uZ1wiLFxuICAgIFwic2VxdGV4dGtleV9ib3R0b21cIixcbiAgICBcInNlcXRleHRrZXlfY2VudGVyXCIsXG4gICAgXCJzZXF0ZXh0a2V5X2p1c3RpZnlcIixcbiAgICBcInNlcXRleHRrZXlfbGVmdFwiLFxuICAgIFwic2VxdGV4dGtleV9taWRkbGVcIixcbiAgICBcInNlcXRleHRrZXlfcmlnaHRcIixcbiAgICBcInNlcXRleHRrZXlfdG9wXCIsXG4gICAgXCJzZXF0cmFja3R5cGVfYXVkaW9cIixcbiAgICBcInNlcXRyYWNrdHlwZV9ib29sXCIsXG4gICAgXCJzZXF0cmFja3R5cGVfY2xpcG1hc2tcIixcbiAgICBcInNlcXRyYWNrdHlwZV9jbGlwbWFza19tYXNrXCIsXG4gICAgXCJzZXF0cmFja3R5cGVfY2xpcG1hc2tfc3ViamVjdFwiLFxuICAgIFwic2VxdHJhY2t0eXBlX2NvbG9yXCIsXG4gICAgXCJzZXF0cmFja3R5cGVfY29sb3VyXCIsXG4gICAgXCJzZXF0cmFja3R5cGVfZW1wdHlcIixcbiAgICBcInNlcXRyYWNrdHlwZV9ncmFwaGljXCIsXG4gICAgXCJzZXF0cmFja3R5cGVfZ3JvdXBcIixcbiAgICBcInNlcXRyYWNrdHlwZV9pbnN0YW5jZVwiLFxuICAgIFwic2VxdHJhY2t0eXBlX21lc3NhZ2VcIixcbiAgICBcInNlcXRyYWNrdHlwZV9tb21lbnRcIixcbiAgICBcInNlcXRyYWNrdHlwZV9wYXJ0aWNsZXN5c3RlbVwiLFxuICAgIFwic2VxdHJhY2t0eXBlX3JlYWxcIixcbiAgICBcInNlcXRyYWNrdHlwZV9zZXF1ZW5jZVwiLFxuICAgIFwic2VxdHJhY2t0eXBlX3Nwcml0ZWZyYW1lc1wiLFxuICAgIFwic2VxdHJhY2t0eXBlX3N0cmluZ1wiLFxuICAgIFwic2VxdHJhY2t0eXBlX3RleHRcIixcbiAgICBcInNoYWRvd0NvbG9yXCIsXG4gICAgXCJzaGFkb3dDb2xvdXJcIixcbiAgICBcInNoYWRvd09mZnNldFhcIixcbiAgICBcInNoYWRvd09mZnNldFlcIixcbiAgICBcInNoYWRvd1NvZnRuZXNzXCIsXG4gICAgXCJzcHJpdGVfYWRkX2V4dF9lcnJvcl9jYW5jZWxsZWRcIixcbiAgICBcInNwcml0ZV9hZGRfZXh0X2Vycm9yX2RlY29tcHJlc3NmYWlsZWRcIixcbiAgICBcInNwcml0ZV9hZGRfZXh0X2Vycm9yX2xvYWRmYWlsZWRcIixcbiAgICBcInNwcml0ZV9hZGRfZXh0X2Vycm9yX3NldHVwZmFpbGVkXCIsXG4gICAgXCJzcHJpdGVfYWRkX2V4dF9lcnJvcl9zcHJpdGVub3Rmb3VuZFwiLFxuICAgIFwic3ByaXRlX2FkZF9leHRfZXJyb3JfdW5rbm93blwiLFxuICAgIFwic3ByaXRlc3BlZWRfZnJhbWVzcGVyZ2FtZWZyYW1lXCIsXG4gICAgXCJzcHJpdGVzcGVlZF9mcmFtZXNwZXJzZWNvbmRcIixcbiAgICBcInN1cmZhY2VfcjE2ZmxvYXRcIixcbiAgICBcInN1cmZhY2VfcjMyZmxvYXRcIixcbiAgICBcInN1cmZhY2Vfcjh1bm9ybVwiLFxuICAgIFwic3VyZmFjZV9yZzh1bm9ybVwiLFxuICAgIFwic3VyZmFjZV9yZ2JhMTZmbG9hdFwiLFxuICAgIFwic3VyZmFjZV9yZ2JhMzJmbG9hdFwiLFxuICAgIFwic3VyZmFjZV9yZ2JhNHVub3JtXCIsXG4gICAgXCJzdXJmYWNlX3JnYmE4dW5vcm1cIixcbiAgICBcInRleHR1cmVncm91cF9zdGF0dXNfZmV0Y2hlZFwiLFxuICAgIFwidGV4dHVyZWdyb3VwX3N0YXR1c19sb2FkZWRcIixcbiAgICBcInRleHR1cmVncm91cF9zdGF0dXNfbG9hZGluZ1wiLFxuICAgIFwidGV4dHVyZWdyb3VwX3N0YXR1c191bmxvYWRlZFwiLFxuICAgIFwidGZfYW5pc290cm9waWNcIixcbiAgICBcInRmX2xpbmVhclwiLFxuICAgIFwidGZfcG9pbnRcIixcbiAgICBcInRoaWNrbmVzc1wiLFxuICAgIFwidGlsZV9mbGlwXCIsXG4gICAgXCJ0aWxlX2luZGV4X21hc2tcIixcbiAgICBcInRpbGVfbWlycm9yXCIsXG4gICAgXCJ0aWxlX3JvdGF0ZVwiLFxuICAgIFwidGltZV9zb3VyY2VfZXhwaXJlX2FmdGVyXCIsXG4gICAgXCJ0aW1lX3NvdXJjZV9leHBpcmVfbmVhcmVzdFwiLFxuICAgIFwidGltZV9zb3VyY2VfZ2FtZVwiLFxuICAgIFwidGltZV9zb3VyY2VfZ2xvYmFsXCIsXG4gICAgXCJ0aW1lX3NvdXJjZV9zdGF0ZV9hY3RpdmVcIixcbiAgICBcInRpbWVfc291cmNlX3N0YXRlX2luaXRpYWxcIixcbiAgICBcInRpbWVfc291cmNlX3N0YXRlX3BhdXNlZFwiLFxuICAgIFwidGltZV9zb3VyY2Vfc3RhdGVfc3RvcHBlZFwiLFxuICAgIFwidGltZV9zb3VyY2VfdW5pdHNfZnJhbWVzXCIsXG4gICAgXCJ0aW1lX3NvdXJjZV91bml0c19zZWNvbmRzXCIsXG4gICAgXCJ0aW1lem9uZV9sb2NhbFwiLFxuICAgIFwidGltZXpvbmVfdXRjXCIsXG4gICAgXCJ0bV9jb3VudHZzeW5jc1wiLFxuICAgIFwidG1fc2xlZXBcIixcbiAgICBcInRtX3N5c3RlbXRpbWluZ1wiLFxuICAgIFwidHJ1ZVwiLFxuICAgIFwidHlfcmVhbFwiLFxuICAgIFwidHlfc3RyaW5nXCIsXG4gICAgXCJ1bmRlZmluZWRcIixcbiAgICBcInZlcnRleF90eXBlX2NvbG9yXCIsXG4gICAgXCJ2ZXJ0ZXhfdHlwZV9jb2xvdXJcIixcbiAgICBcInZlcnRleF90eXBlX2Zsb2F0MVwiLFxuICAgIFwidmVydGV4X3R5cGVfZmxvYXQyXCIsXG4gICAgXCJ2ZXJ0ZXhfdHlwZV9mbG9hdDNcIixcbiAgICBcInZlcnRleF90eXBlX2Zsb2F0NFwiLFxuICAgIFwidmVydGV4X3R5cGVfdWJ5dGU0XCIsXG4gICAgXCJ2ZXJ0ZXhfdXNhZ2VfYmlub3JtYWxcIixcbiAgICBcInZlcnRleF91c2FnZV9ibGVuZGluZGljZXNcIixcbiAgICBcInZlcnRleF91c2FnZV9ibGVuZHdlaWdodFwiLFxuICAgIFwidmVydGV4X3VzYWdlX2NvbG9yXCIsXG4gICAgXCJ2ZXJ0ZXhfdXNhZ2VfY29sb3VyXCIsXG4gICAgXCJ2ZXJ0ZXhfdXNhZ2VfZGVwdGhcIixcbiAgICBcInZlcnRleF91c2FnZV9mb2dcIixcbiAgICBcInZlcnRleF91c2FnZV9ub3JtYWxcIixcbiAgICBcInZlcnRleF91c2FnZV9wb3NpdGlvblwiLFxuICAgIFwidmVydGV4X3VzYWdlX3BzaXplXCIsXG4gICAgXCJ2ZXJ0ZXhfdXNhZ2Vfc2FtcGxlXCIsXG4gICAgXCJ2ZXJ0ZXhfdXNhZ2VfdGFuZ2VudFwiLFxuICAgIFwidmVydGV4X3VzYWdlX3RleGNvb3JkXCIsXG4gICAgXCJ2aWRlb19mb3JtYXRfcmdiYVwiLFxuICAgIFwidmlkZW9fZm9ybWF0X3l1dlwiLFxuICAgIFwidmlkZW9fc3RhdHVzX2Nsb3NlZFwiLFxuICAgIFwidmlkZW9fc3RhdHVzX3BhdXNlZFwiLFxuICAgIFwidmlkZW9fc3RhdHVzX3BsYXlpbmdcIixcbiAgICBcInZpZGVvX3N0YXR1c19wcmVwYXJpbmdcIixcbiAgICBcInZrX2FkZFwiLFxuICAgIFwidmtfYWx0XCIsXG4gICAgXCJ2a19hbnlrZXlcIixcbiAgICBcInZrX2JhY2tzcGFjZVwiLFxuICAgIFwidmtfY29udHJvbFwiLFxuICAgIFwidmtfZGVjaW1hbFwiLFxuICAgIFwidmtfZGVsZXRlXCIsXG4gICAgXCJ2a19kaXZpZGVcIixcbiAgICBcInZrX2Rvd25cIixcbiAgICBcInZrX2VuZFwiLFxuICAgIFwidmtfZW50ZXJcIixcbiAgICBcInZrX2VzY2FwZVwiLFxuICAgIFwidmtfZjFcIixcbiAgICBcInZrX2YxMFwiLFxuICAgIFwidmtfZjExXCIsXG4gICAgXCJ2a19mMTJcIixcbiAgICBcInZrX2YyXCIsXG4gICAgXCJ2a19mM1wiLFxuICAgIFwidmtfZjRcIixcbiAgICBcInZrX2Y1XCIsXG4gICAgXCJ2a19mNlwiLFxuICAgIFwidmtfZjdcIixcbiAgICBcInZrX2Y4XCIsXG4gICAgXCJ2a19mOVwiLFxuICAgIFwidmtfaG9tZVwiLFxuICAgIFwidmtfaW5zZXJ0XCIsXG4gICAgXCJ2a19sYWx0XCIsXG4gICAgXCJ2a19sY29udHJvbFwiLFxuICAgIFwidmtfbGVmdFwiLFxuICAgIFwidmtfbHNoaWZ0XCIsXG4gICAgXCJ2a19tdWx0aXBseVwiLFxuICAgIFwidmtfbm9rZXlcIixcbiAgICBcInZrX251bXBhZDBcIixcbiAgICBcInZrX251bXBhZDFcIixcbiAgICBcInZrX251bXBhZDJcIixcbiAgICBcInZrX251bXBhZDNcIixcbiAgICBcInZrX251bXBhZDRcIixcbiAgICBcInZrX251bXBhZDVcIixcbiAgICBcInZrX251bXBhZDZcIixcbiAgICBcInZrX251bXBhZDdcIixcbiAgICBcInZrX251bXBhZDhcIixcbiAgICBcInZrX251bXBhZDlcIixcbiAgICBcInZrX3BhZ2Vkb3duXCIsXG4gICAgXCJ2a19wYWdldXBcIixcbiAgICBcInZrX3BhdXNlXCIsXG4gICAgXCJ2a19wcmludHNjcmVlblwiLFxuICAgIFwidmtfcmFsdFwiLFxuICAgIFwidmtfcmNvbnRyb2xcIixcbiAgICBcInZrX3JldHVyblwiLFxuICAgIFwidmtfcmlnaHRcIixcbiAgICBcInZrX3JzaGlmdFwiLFxuICAgIFwidmtfc2hpZnRcIixcbiAgICBcInZrX3NwYWNlXCIsXG4gICAgXCJ2a19zdWJ0cmFjdFwiLFxuICAgIFwidmtfdGFiXCIsXG4gICAgXCJ2a191cFwiLFxuICAgIFwid2FsbHBhcGVyX2NvbmZpZ1wiLFxuICAgIFwid2FsbHBhcGVyX3N1YnNjcmlwdGlvbl9kYXRhXCIsXG4gICAgXCJ3cmFwXCJcbiAgXTtcbiAgY29uc3QgTEFOR1VBR0VfVkFSSUFCTEVTID0gW1xuICAgIFwiYWxhcm1cIixcbiAgICBcImFwcGxpY2F0aW9uX3N1cmZhY2VcIixcbiAgICBcImFyZ3VtZW50XCIsXG4gICAgXCJhcmd1bWVudDBcIixcbiAgICBcImFyZ3VtZW50MVwiLFxuICAgIFwiYXJndW1lbnQyXCIsXG4gICAgXCJhcmd1bWVudDNcIixcbiAgICBcImFyZ3VtZW50NFwiLFxuICAgIFwiYXJndW1lbnQ1XCIsXG4gICAgXCJhcmd1bWVudDZcIixcbiAgICBcImFyZ3VtZW50N1wiLFxuICAgIFwiYXJndW1lbnQ4XCIsXG4gICAgXCJhcmd1bWVudDlcIixcbiAgICBcImFyZ3VtZW50MTBcIixcbiAgICBcImFyZ3VtZW50MTFcIixcbiAgICBcImFyZ3VtZW50MTJcIixcbiAgICBcImFyZ3VtZW50MTNcIixcbiAgICBcImFyZ3VtZW50MTRcIixcbiAgICBcImFyZ3VtZW50MTVcIixcbiAgICBcImFyZ3VtZW50X2NvdW50XCIsXG4gICAgXCJhc3luY19sb2FkXCIsXG4gICAgXCJiYWNrZ3JvdW5kX2NvbG9yXCIsXG4gICAgXCJiYWNrZ3JvdW5kX2NvbG91clwiLFxuICAgIFwiYmFja2dyb3VuZF9zaG93Y29sb3JcIixcbiAgICBcImJhY2tncm91bmRfc2hvd2NvbG91clwiLFxuICAgIFwiYmJveF9ib3R0b21cIixcbiAgICBcImJib3hfbGVmdFwiLFxuICAgIFwiYmJveF9yaWdodFwiLFxuICAgIFwiYmJveF90b3BcIixcbiAgICBcImJyb3dzZXJfaGVpZ2h0XCIsXG4gICAgXCJicm93c2VyX3dpZHRoXCIsXG4gICAgXCJjb2xvdXI/Q29sb3VyVHJhY2tcIixcbiAgICBcImN1cnJlbnRfZGF5XCIsXG4gICAgXCJjdXJyZW50X2hvdXJcIixcbiAgICBcImN1cnJlbnRfbWludXRlXCIsXG4gICAgXCJjdXJyZW50X21vbnRoXCIsXG4gICAgXCJjdXJyZW50X3NlY29uZFwiLFxuICAgIFwiY3VycmVudF90aW1lXCIsXG4gICAgXCJjdXJyZW50X3dlZWtkYXlcIixcbiAgICBcImN1cnJlbnRfeWVhclwiLFxuICAgIFwiY3Vyc29yX3Nwcml0ZVwiLFxuICAgIFwiZGVidWdfbW9kZVwiLFxuICAgIFwiZGVsdGFfdGltZVwiLFxuICAgIFwiZGVwdGhcIixcbiAgICBcImRpcmVjdGlvblwiLFxuICAgIFwiZGlzcGxheV9hYVwiLFxuICAgIFwiZHJhd25fYnlfc2VxdWVuY2VcIixcbiAgICBcImV2ZW50X2FjdGlvblwiLFxuICAgIFwiZXZlbnRfZGF0YVwiLFxuICAgIFwiZXZlbnRfbnVtYmVyXCIsXG4gICAgXCJldmVudF9vYmplY3RcIixcbiAgICBcImV2ZW50X3R5cGVcIixcbiAgICBcImZvbnRfdGV4dHVyZV9wYWdlX3NpemVcIixcbiAgICBcImZwc1wiLFxuICAgIFwiZnBzX3JlYWxcIixcbiAgICBcImZyaWN0aW9uXCIsXG4gICAgXCJnYW1lX2Rpc3BsYXlfbmFtZVwiLFxuICAgIFwiZ2FtZV9pZFwiLFxuICAgIFwiZ2FtZV9wcm9qZWN0X25hbWVcIixcbiAgICBcImdhbWVfc2F2ZV9pZFwiLFxuICAgIFwiZ3Jhdml0eVwiLFxuICAgIFwiZ3Jhdml0eV9kaXJlY3Rpb25cIixcbiAgICBcImhlYWx0aFwiLFxuICAgIFwiaHNwZWVkXCIsXG4gICAgXCJpYXBfZGF0YVwiLFxuICAgIFwiaWRcIixcbiAgICBcImltYWdlX2FscGhhXCIsXG4gICAgXCJpbWFnZV9hbmdsZVwiLFxuICAgIFwiaW1hZ2VfYmxlbmRcIixcbiAgICBcImltYWdlX2luZGV4XCIsXG4gICAgXCJpbWFnZV9udW1iZXJcIixcbiAgICBcImltYWdlX3NwZWVkXCIsXG4gICAgXCJpbWFnZV94c2NhbGVcIixcbiAgICBcImltYWdlX3lzY2FsZVwiLFxuICAgIFwiaW5fY29sbGlzaW9uX3RyZWVcIixcbiAgICBcImluX3NlcXVlbmNlXCIsXG4gICAgXCJpbnN0YW5jZV9jb3VudFwiLFxuICAgIFwiaW5zdGFuY2VfaWRcIixcbiAgICBcImtleWJvYXJkX2tleVwiLFxuICAgIFwia2V5Ym9hcmRfbGFzdGNoYXJcIixcbiAgICBcImtleWJvYXJkX2xhc3RrZXlcIixcbiAgICBcImtleWJvYXJkX3N0cmluZ1wiLFxuICAgIFwibGF5ZXJcIixcbiAgICBcImxpdmVzXCIsXG4gICAgXCJsb25nTWVzc2FnZVwiLFxuICAgIFwibWFuYWdlZFwiLFxuICAgIFwibWFza19pbmRleFwiLFxuICAgIFwibWVzc2FnZVwiLFxuICAgIFwibW91c2VfYnV0dG9uXCIsXG4gICAgXCJtb3VzZV9sYXN0YnV0dG9uXCIsXG4gICAgXCJtb3VzZV94XCIsXG4gICAgXCJtb3VzZV95XCIsXG4gICAgXCJvYmplY3RfaW5kZXhcIixcbiAgICBcIm9zX2Jyb3dzZXJcIixcbiAgICBcIm9zX2RldmljZVwiLFxuICAgIFwib3NfdHlwZVwiLFxuICAgIFwib3NfdmVyc2lvblwiLFxuICAgIFwicGF0aF9lbmRhY3Rpb25cIixcbiAgICBcInBhdGhfaW5kZXhcIixcbiAgICBcInBhdGhfb3JpZW50YXRpb25cIixcbiAgICBcInBhdGhfcG9zaXRpb25cIixcbiAgICBcInBhdGhfcG9zaXRpb25wcmV2aW91c1wiLFxuICAgIFwicGF0aF9zY2FsZVwiLFxuICAgIFwicGF0aF9zcGVlZFwiLFxuICAgIFwicGVyc2lzdGVudFwiLFxuICAgIFwicGh5X2FjdGl2ZVwiLFxuICAgIFwicGh5X2FuZ3VsYXJfZGFtcGluZ1wiLFxuICAgIFwicGh5X2FuZ3VsYXJfdmVsb2NpdHlcIixcbiAgICBcInBoeV9idWxsZXRcIixcbiAgICBcInBoeV9jb2xfbm9ybWFsX3hcIixcbiAgICBcInBoeV9jb2xfbm9ybWFsX3lcIixcbiAgICBcInBoeV9jb2xsaXNpb25fcG9pbnRzXCIsXG4gICAgXCJwaHlfY29sbGlzaW9uX3hcIixcbiAgICBcInBoeV9jb2xsaXNpb25feVwiLFxuICAgIFwicGh5X2NvbV94XCIsXG4gICAgXCJwaHlfY29tX3lcIixcbiAgICBcInBoeV9keW5hbWljXCIsXG4gICAgXCJwaHlfZml4ZWRfcm90YXRpb25cIixcbiAgICBcInBoeV9pbmVydGlhXCIsXG4gICAgXCJwaHlfa2luZW1hdGljXCIsXG4gICAgXCJwaHlfbGluZWFyX2RhbXBpbmdcIixcbiAgICBcInBoeV9saW5lYXJfdmVsb2NpdHlfeFwiLFxuICAgIFwicGh5X2xpbmVhcl92ZWxvY2l0eV95XCIsXG4gICAgXCJwaHlfbWFzc1wiLFxuICAgIFwicGh5X3Bvc2l0aW9uX3hcIixcbiAgICBcInBoeV9wb3NpdGlvbl94cHJldmlvdXNcIixcbiAgICBcInBoeV9wb3NpdGlvbl95XCIsXG4gICAgXCJwaHlfcG9zaXRpb25feXByZXZpb3VzXCIsXG4gICAgXCJwaHlfcm90YXRpb25cIixcbiAgICBcInBoeV9zbGVlcGluZ1wiLFxuICAgIFwicGh5X3NwZWVkXCIsXG4gICAgXCJwaHlfc3BlZWRfeFwiLFxuICAgIFwicGh5X3NwZWVkX3lcIixcbiAgICBcInBsYXllcl9hdmF0YXJfc3ByaXRlXCIsXG4gICAgXCJwbGF5ZXJfYXZhdGFyX3VybFwiLFxuICAgIFwicGxheWVyX2lkXCIsXG4gICAgXCJwbGF5ZXJfbG9jYWxcIixcbiAgICBcInBsYXllcl90eXBlXCIsXG4gICAgXCJwbGF5ZXJfdXNlcl9pZFwiLFxuICAgIFwicHJvZ3JhbV9kaXJlY3RvcnlcIixcbiAgICBcInJvbGxiYWNrX2FwaV9zZXJ2ZXJcIixcbiAgICBcInJvbGxiYWNrX2NvbmZpcm1lZF9mcmFtZVwiLFxuICAgIFwicm9sbGJhY2tfY3VycmVudF9mcmFtZVwiLFxuICAgIFwicm9sbGJhY2tfZXZlbnRfaWRcIixcbiAgICBcInJvbGxiYWNrX2V2ZW50X3BhcmFtXCIsXG4gICAgXCJyb2xsYmFja19nYW1lX3J1bm5pbmdcIixcbiAgICBcInJvb21cIixcbiAgICBcInJvb21fZmlyc3RcIixcbiAgICBcInJvb21faGVpZ2h0XCIsXG4gICAgXCJyb29tX2xhc3RcIixcbiAgICBcInJvb21fcGVyc2lzdGVudFwiLFxuICAgIFwicm9vbV9zcGVlZFwiLFxuICAgIFwicm9vbV93aWR0aFwiLFxuICAgIFwic2NvcmVcIixcbiAgICBcInNjcmlwdFwiLFxuICAgIFwic2VxdWVuY2VfaW5zdGFuY2VcIixcbiAgICBcInNvbGlkXCIsXG4gICAgXCJzcGVlZFwiLFxuICAgIFwic3ByaXRlX2hlaWdodFwiLFxuICAgIFwic3ByaXRlX2luZGV4XCIsXG4gICAgXCJzcHJpdGVfd2lkdGhcIixcbiAgICBcInNwcml0ZV94b2Zmc2V0XCIsXG4gICAgXCJzcHJpdGVfeW9mZnNldFwiLFxuICAgIFwic3RhY2t0cmFjZVwiLFxuICAgIFwidGVtcF9kaXJlY3RvcnlcIixcbiAgICBcInRpbWVsaW5lX2luZGV4XCIsXG4gICAgXCJ0aW1lbGluZV9sb29wXCIsXG4gICAgXCJ0aW1lbGluZV9wb3NpdGlvblwiLFxuICAgIFwidGltZWxpbmVfcnVubmluZ1wiLFxuICAgIFwidGltZWxpbmVfc3BlZWRcIixcbiAgICBcInZpZXdfY2FtZXJhXCIsXG4gICAgXCJ2aWV3X2N1cnJlbnRcIixcbiAgICBcInZpZXdfZW5hYmxlZFwiLFxuICAgIFwidmlld19ocG9ydFwiLFxuICAgIFwidmlld19zdXJmYWNlX2lkXCIsXG4gICAgXCJ2aWV3X3Zpc2libGVcIixcbiAgICBcInZpZXdfd3BvcnRcIixcbiAgICBcInZpZXdfeHBvcnRcIixcbiAgICBcInZpZXdfeXBvcnRcIixcbiAgICBcInZpc2libGVcIixcbiAgICBcInZzcGVlZFwiLFxuICAgIFwid2ViZ2xfZW5hYmxlZFwiLFxuICAgIFwid29ya2luZ19kaXJlY3RvcnlcIixcbiAgICBcInhcIixcbiAgICBcInhwcmV2aW91c1wiLFxuICAgIFwieHN0YXJ0XCIsXG4gICAgXCJ5XCIsXG4gICAgXCJ5cHJldmlvdXNcIixcbiAgICBcInlzdGFydFwiXG4gIF07XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ0dNTCcsXG4gICAgY2FzZV9pbnNlbnNpdGl2ZTogZmFsc2UsIC8vIGxhbmd1YWdlIGlzIGNhc2UtaW5zZW5zaXRpdmVcbiAgICBrZXl3b3Jkczoge1xuICAgICAga2V5d29yZDogS0VZV09SRFMsXG4gICAgICBidWlsdF9pbjogQlVJTFRfSU5TLFxuICAgICAgc3ltYm9sOiBTWU1CT0xTLFxuICAgICAgXCJ2YXJpYWJsZS5sYW5ndWFnZVwiOiBMQU5HVUFHRV9WQVJJQUJMRVNcbiAgICB9LFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgIGhsanMuQ19OVU1CRVJfTU9ERVxuICAgIF1cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnbWw7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2261\n')},2275:(__unused_webpack_module,exports)=>{"use strict";eval("\n\n/**\n * Stringify a CST document, token, or collection item\n *\n * Fair warning: This applies no validation whatsoever, and\n * simply concatenates the sources in their logical order.\n */\nconst stringify = (cst) => 'type' in cst ? stringifyToken(cst) : stringifyItem(cst);\nfunction stringifyToken(token) {\n switch (token.type) {\n case 'block-scalar': {\n let res = '';\n for (const tok of token.props)\n res += stringifyToken(tok);\n return res + token.source;\n }\n case 'block-map':\n case 'block-seq': {\n let res = '';\n for (const item of token.items)\n res += stringifyItem(item);\n return res;\n }\n case 'flow-collection': {\n let res = token.start.source;\n for (const item of token.items)\n res += stringifyItem(item);\n for (const st of token.end)\n res += st.source;\n return res;\n }\n case 'document': {\n let res = stringifyItem(token);\n if (token.end)\n for (const st of token.end)\n res += st.source;\n return res;\n }\n default: {\n let res = token.source;\n if ('end' in token && token.end)\n for (const st of token.end)\n res += st.source;\n return res;\n }\n }\n}\nfunction stringifyItem({ start, key, sep, value }) {\n let res = '';\n for (const st of start)\n res += st.source;\n if (key)\n res += stringifyToken(key);\n if (sep)\n for (const st of sep)\n res += st.source;\n if (value)\n res += stringifyToken(value);\n return res;\n}\n\nexports.stringify = stringify;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjI3NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5Qix3QkFBd0I7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlCQUFpQiIsInNvdXJjZXMiOlsid2VicGFjazovL29ic2lkaWFuLW1pbmRtYXAtbmV4dGdlbi8uL25vZGVfbW9kdWxlcy8ucG5wbS95YW1sQDIuOC4wL25vZGVfbW9kdWxlcy95YW1sL2Rpc3QvcGFyc2UvY3N0LXN0cmluZ2lmeS5qcz9mODU3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBTdHJpbmdpZnkgYSBDU1QgZG9jdW1lbnQsIHRva2VuLCBvciBjb2xsZWN0aW9uIGl0ZW1cbiAqXG4gKiBGYWlyIHdhcm5pbmc6IFRoaXMgYXBwbGllcyBubyB2YWxpZGF0aW9uIHdoYXRzb2V2ZXIsIGFuZFxuICogc2ltcGx5IGNvbmNhdGVuYXRlcyB0aGUgc291cmNlcyBpbiB0aGVpciBsb2dpY2FsIG9yZGVyLlxuICovXG5jb25zdCBzdHJpbmdpZnkgPSAoY3N0KSA9PiAndHlwZScgaW4gY3N0ID8gc3RyaW5naWZ5VG9rZW4oY3N0KSA6IHN0cmluZ2lmeUl0ZW0oY3N0KTtcbmZ1bmN0aW9uIHN0cmluZ2lmeVRva2VuKHRva2VuKSB7XG4gICAgc3dpdGNoICh0b2tlbi50eXBlKSB7XG4gICAgICAgIGNhc2UgJ2Jsb2NrLXNjYWxhcic6IHtcbiAgICAgICAgICAgIGxldCByZXMgPSAnJztcbiAgICAgICAgICAgIGZvciAoY29uc3QgdG9rIG9mIHRva2VuLnByb3BzKVxuICAgICAgICAgICAgICAgIHJlcyArPSBzdHJpbmdpZnlUb2tlbih0b2spO1xuICAgICAgICAgICAgcmV0dXJuIHJlcyArIHRva2VuLnNvdXJjZTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdibG9jay1tYXAnOlxuICAgICAgICBjYXNlICdibG9jay1zZXEnOiB7XG4gICAgICAgICAgICBsZXQgcmVzID0gJyc7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdG9rZW4uaXRlbXMpXG4gICAgICAgICAgICAgICAgcmVzICs9IHN0cmluZ2lmeUl0ZW0oaXRlbSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ2Zsb3ctY29sbGVjdGlvbic6IHtcbiAgICAgICAgICAgIGxldCByZXMgPSB0b2tlbi5zdGFydC5zb3VyY2U7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdG9rZW4uaXRlbXMpXG4gICAgICAgICAgICAgICAgcmVzICs9IHN0cmluZ2lmeUl0ZW0oaXRlbSk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHN0IG9mIHRva2VuLmVuZClcbiAgICAgICAgICAgICAgICByZXMgKz0gc3Quc291cmNlO1xuICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdkb2N1bWVudCc6IHtcbiAgICAgICAgICAgIGxldCByZXMgPSBzdHJpbmdpZnlJdGVtKHRva2VuKTtcbiAgICAgICAgICAgIGlmICh0b2tlbi5lbmQpXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBzdCBvZiB0b2tlbi5lbmQpXG4gICAgICAgICAgICAgICAgICAgIHJlcyArPSBzdC5zb3VyY2U7XG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGxldCByZXMgPSB0b2tlbi5zb3VyY2U7XG4gICAgICAgICAgICBpZiAoJ2VuZCcgaW4gdG9rZW4gJiYgdG9rZW4uZW5kKVxuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgc3Qgb2YgdG9rZW4uZW5kKVxuICAgICAgICAgICAgICAgICAgICByZXMgKz0gc3Quc291cmNlO1xuICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIHN0cmluZ2lmeUl0ZW0oeyBzdGFydCwga2V5LCBzZXAsIHZhbHVlIH0pIHtcbiAgICBsZXQgcmVzID0gJyc7XG4gICAgZm9yIChjb25zdCBzdCBvZiBzdGFydClcbiAgICAgICAgcmVzICs9IHN0LnNvdXJjZTtcbiAgICBpZiAoa2V5KVxuICAgICAgICByZXMgKz0gc3RyaW5naWZ5VG9rZW4oa2V5KTtcbiAgICBpZiAoc2VwKVxuICAgICAgICBmb3IgKGNvbnN0IHN0IG9mIHNlcClcbiAgICAgICAgICAgIHJlcyArPSBzdC5zb3VyY2U7XG4gICAgaWYgKHZhbHVlKVxuICAgICAgICByZXMgKz0gc3RyaW5naWZ5VG9rZW4odmFsdWUpO1xuICAgIHJldHVybiByZXM7XG59XG5cbmV4cG9ydHMuc3RyaW5naWZ5ID0gc3RyaW5naWZ5O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2275\n")},2293:module=>{eval("const MODES = (hljs) => {\n return {\n IMPORTANT: {\n scope: 'meta',\n begin: '!important'\n },\n BLOCK_COMMENT: hljs.C_BLOCK_COMMENT_MODE,\n HEXCOLOR: {\n scope: 'number',\n begin: /#(([0-9a-fA-F]{3,4})|(([0-9a-fA-F]{2}){3,4}))\\b/\n },\n FUNCTION_DISPATCH: {\n className: \"built_in\",\n begin: /[\\w-]+(?=\\()/\n },\n ATTRIBUTE_SELECTOR_MODE: {\n scope: 'selector-attr',\n begin: /\\[/,\n end: /\\]/,\n illegal: '$',\n contains: [\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE\n ]\n },\n CSS_NUMBER_MODE: {\n scope: 'number',\n begin: hljs.NUMBER_RE + '(' +\n '%|em|ex|ch|rem' +\n '|vw|vh|vmin|vmax' +\n '|cm|mm|in|pt|pc|px' +\n '|deg|grad|rad|turn' +\n '|s|ms' +\n '|Hz|kHz' +\n '|dpi|dpcm|dppx' +\n ')?',\n relevance: 0\n },\n CSS_VARIABLE: {\n className: \"attr\",\n begin: /--[A-Za-z_][A-Za-z0-9_-]*/\n }\n };\n};\n\nconst HTML_TAGS = [\n 'a',\n 'abbr',\n 'address',\n 'article',\n 'aside',\n 'audio',\n 'b',\n 'blockquote',\n 'body',\n 'button',\n 'canvas',\n 'caption',\n 'cite',\n 'code',\n 'dd',\n 'del',\n 'details',\n 'dfn',\n 'div',\n 'dl',\n 'dt',\n 'em',\n 'fieldset',\n 'figcaption',\n 'figure',\n 'footer',\n 'form',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'header',\n 'hgroup',\n 'html',\n 'i',\n 'iframe',\n 'img',\n 'input',\n 'ins',\n 'kbd',\n 'label',\n 'legend',\n 'li',\n 'main',\n 'mark',\n 'menu',\n 'nav',\n 'object',\n 'ol',\n 'optgroup',\n 'option',\n 'p',\n 'picture',\n 'q',\n 'quote',\n 'samp',\n 'section',\n 'select',\n 'source',\n 'span',\n 'strong',\n 'summary',\n 'sup',\n 'table',\n 'tbody',\n 'td',\n 'textarea',\n 'tfoot',\n 'th',\n 'thead',\n 'time',\n 'tr',\n 'ul',\n 'var',\n 'video'\n];\n\nconst SVG_TAGS = [\n 'defs',\n 'g',\n 'marker',\n 'mask',\n 'pattern',\n 'svg',\n 'switch',\n 'symbol',\n 'feBlend',\n 'feColorMatrix',\n 'feComponentTransfer',\n 'feComposite',\n 'feConvolveMatrix',\n 'feDiffuseLighting',\n 'feDisplacementMap',\n 'feFlood',\n 'feGaussianBlur',\n 'feImage',\n 'feMerge',\n 'feMorphology',\n 'feOffset',\n 'feSpecularLighting',\n 'feTile',\n 'feTurbulence',\n 'linearGradient',\n 'radialGradient',\n 'stop',\n 'circle',\n 'ellipse',\n 'image',\n 'line',\n 'path',\n 'polygon',\n 'polyline',\n 'rect',\n 'text',\n 'use',\n 'textPath',\n 'tspan',\n 'foreignObject',\n 'clipPath'\n];\n\nconst TAGS = [\n ...HTML_TAGS,\n ...SVG_TAGS,\n];\n\n// Sorting, then reversing makes sure longer attributes/elements like\n// `font-weight` are matched fully instead of getting false positives on say `font`\n\nconst MEDIA_FEATURES = [\n 'any-hover',\n 'any-pointer',\n 'aspect-ratio',\n 'color',\n 'color-gamut',\n 'color-index',\n 'device-aspect-ratio',\n 'device-height',\n 'device-width',\n 'display-mode',\n 'forced-colors',\n 'grid',\n 'height',\n 'hover',\n 'inverted-colors',\n 'monochrome',\n 'orientation',\n 'overflow-block',\n 'overflow-inline',\n 'pointer',\n 'prefers-color-scheme',\n 'prefers-contrast',\n 'prefers-reduced-motion',\n 'prefers-reduced-transparency',\n 'resolution',\n 'scan',\n 'scripting',\n 'update',\n 'width',\n // TODO: find a better solution?\n 'min-width',\n 'max-width',\n 'min-height',\n 'max-height'\n].sort().reverse();\n\n// https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-classes\nconst PSEUDO_CLASSES = [\n 'active',\n 'any-link',\n 'blank',\n 'checked',\n 'current',\n 'default',\n 'defined',\n 'dir', // dir()\n 'disabled',\n 'drop',\n 'empty',\n 'enabled',\n 'first',\n 'first-child',\n 'first-of-type',\n 'fullscreen',\n 'future',\n 'focus',\n 'focus-visible',\n 'focus-within',\n 'has', // has()\n 'host', // host or host()\n 'host-context', // host-context()\n 'hover',\n 'indeterminate',\n 'in-range',\n 'invalid',\n 'is', // is()\n 'lang', // lang()\n 'last-child',\n 'last-of-type',\n 'left',\n 'link',\n 'local-link',\n 'not', // not()\n 'nth-child', // nth-child()\n 'nth-col', // nth-col()\n 'nth-last-child', // nth-last-child()\n 'nth-last-col', // nth-last-col()\n 'nth-last-of-type', //nth-last-of-type()\n 'nth-of-type', //nth-of-type()\n 'only-child',\n 'only-of-type',\n 'optional',\n 'out-of-range',\n 'past',\n 'placeholder-shown',\n 'read-only',\n 'read-write',\n 'required',\n 'right',\n 'root',\n 'scope',\n 'target',\n 'target-within',\n 'user-invalid',\n 'valid',\n 'visited',\n 'where' // where()\n].sort().reverse();\n\n// https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-elements\nconst PSEUDO_ELEMENTS = [\n 'after',\n 'backdrop',\n 'before',\n 'cue',\n 'cue-region',\n 'first-letter',\n 'first-line',\n 'grammar-error',\n 'marker',\n 'part',\n 'placeholder',\n 'selection',\n 'slotted',\n 'spelling-error'\n].sort().reverse();\n\nconst ATTRIBUTES = [\n 'accent-color',\n 'align-content',\n 'align-items',\n 'align-self',\n 'alignment-baseline',\n 'all',\n 'anchor-name',\n 'animation',\n 'animation-composition',\n 'animation-delay',\n 'animation-direction',\n 'animation-duration',\n 'animation-fill-mode',\n 'animation-iteration-count',\n 'animation-name',\n 'animation-play-state',\n 'animation-range',\n 'animation-range-end',\n 'animation-range-start',\n 'animation-timeline',\n 'animation-timing-function',\n 'appearance',\n 'aspect-ratio',\n 'backdrop-filter',\n 'backface-visibility',\n 'background',\n 'background-attachment',\n 'background-blend-mode',\n 'background-clip',\n 'background-color',\n 'background-image',\n 'background-origin',\n 'background-position',\n 'background-position-x',\n 'background-position-y',\n 'background-repeat',\n 'background-size',\n 'baseline-shift',\n 'block-size',\n 'border',\n 'border-block',\n 'border-block-color',\n 'border-block-end',\n 'border-block-end-color',\n 'border-block-end-style',\n 'border-block-end-width',\n 'border-block-start',\n 'border-block-start-color',\n 'border-block-start-style',\n 'border-block-start-width',\n 'border-block-style',\n 'border-block-width',\n 'border-bottom',\n 'border-bottom-color',\n 'border-bottom-left-radius',\n 'border-bottom-right-radius',\n 'border-bottom-style',\n 'border-bottom-width',\n 'border-collapse',\n 'border-color',\n 'border-end-end-radius',\n 'border-end-start-radius',\n 'border-image',\n 'border-image-outset',\n 'border-image-repeat',\n 'border-image-slice',\n 'border-image-source',\n 'border-image-width',\n 'border-inline',\n 'border-inline-color',\n 'border-inline-end',\n 'border-inline-end-color',\n 'border-inline-end-style',\n 'border-inline-end-width',\n 'border-inline-start',\n 'border-inline-start-color',\n 'border-inline-start-style',\n 'border-inline-start-width',\n 'border-inline-style',\n 'border-inline-width',\n 'border-left',\n 'border-left-color',\n 'border-left-style',\n 'border-left-width',\n 'border-radius',\n 'border-right',\n 'border-right-color',\n 'border-right-style',\n 'border-right-width',\n 'border-spacing',\n 'border-start-end-radius',\n 'border-start-start-radius',\n 'border-style',\n 'border-top',\n 'border-top-color',\n 'border-top-left-radius',\n 'border-top-right-radius',\n 'border-top-style',\n 'border-top-width',\n 'border-width',\n 'bottom',\n 'box-align',\n 'box-decoration-break',\n 'box-direction',\n 'box-flex',\n 'box-flex-group',\n 'box-lines',\n 'box-ordinal-group',\n 'box-orient',\n 'box-pack',\n 'box-shadow',\n 'box-sizing',\n 'break-after',\n 'break-before',\n 'break-inside',\n 'caption-side',\n 'caret-color',\n 'clear',\n 'clip',\n 'clip-path',\n 'clip-rule',\n 'color',\n 'color-interpolation',\n 'color-interpolation-filters',\n 'color-profile',\n 'color-rendering',\n 'color-scheme',\n 'column-count',\n 'column-fill',\n 'column-gap',\n 'column-rule',\n 'column-rule-color',\n 'column-rule-style',\n 'column-rule-width',\n 'column-span',\n 'column-width',\n 'columns',\n 'contain',\n 'contain-intrinsic-block-size',\n 'contain-intrinsic-height',\n 'contain-intrinsic-inline-size',\n 'contain-intrinsic-size',\n 'contain-intrinsic-width',\n 'container',\n 'container-name',\n 'container-type',\n 'content',\n 'content-visibility',\n 'counter-increment',\n 'counter-reset',\n 'counter-set',\n 'cue',\n 'cue-after',\n 'cue-before',\n 'cursor',\n 'cx',\n 'cy',\n 'direction',\n 'display',\n 'dominant-baseline',\n 'empty-cells',\n 'enable-background',\n 'field-sizing',\n 'fill',\n 'fill-opacity',\n 'fill-rule',\n 'filter',\n 'flex',\n 'flex-basis',\n 'flex-direction',\n 'flex-flow',\n 'flex-grow',\n 'flex-shrink',\n 'flex-wrap',\n 'float',\n 'flood-color',\n 'flood-opacity',\n 'flow',\n 'font',\n 'font-display',\n 'font-family',\n 'font-feature-settings',\n 'font-kerning',\n 'font-language-override',\n 'font-optical-sizing',\n 'font-palette',\n 'font-size',\n 'font-size-adjust',\n 'font-smooth',\n 'font-smoothing',\n 'font-stretch',\n 'font-style',\n 'font-synthesis',\n 'font-synthesis-position',\n 'font-synthesis-small-caps',\n 'font-synthesis-style',\n 'font-synthesis-weight',\n 'font-variant',\n 'font-variant-alternates',\n 'font-variant-caps',\n 'font-variant-east-asian',\n 'font-variant-emoji',\n 'font-variant-ligatures',\n 'font-variant-numeric',\n 'font-variant-position',\n 'font-variation-settings',\n 'font-weight',\n 'forced-color-adjust',\n 'gap',\n 'glyph-orientation-horizontal',\n 'glyph-orientation-vertical',\n 'grid',\n 'grid-area',\n 'grid-auto-columns',\n 'grid-auto-flow',\n 'grid-auto-rows',\n 'grid-column',\n 'grid-column-end',\n 'grid-column-start',\n 'grid-gap',\n 'grid-row',\n 'grid-row-end',\n 'grid-row-start',\n 'grid-template',\n 'grid-template-areas',\n 'grid-template-columns',\n 'grid-template-rows',\n 'hanging-punctuation',\n 'height',\n 'hyphenate-character',\n 'hyphenate-limit-chars',\n 'hyphens',\n 'icon',\n 'image-orientation',\n 'image-rendering',\n 'image-resolution',\n 'ime-mode',\n 'initial-letter',\n 'initial-letter-align',\n 'inline-size',\n 'inset',\n 'inset-area',\n 'inset-block',\n 'inset-block-end',\n 'inset-block-start',\n 'inset-inline',\n 'inset-inline-end',\n 'inset-inline-start',\n 'isolation',\n 'justify-content',\n 'justify-items',\n 'justify-self',\n 'kerning',\n 'left',\n 'letter-spacing',\n 'lighting-color',\n 'line-break',\n 'line-height',\n 'line-height-step',\n 'list-style',\n 'list-style-image',\n 'list-style-position',\n 'list-style-type',\n 'margin',\n 'margin-block',\n 'margin-block-end',\n 'margin-block-start',\n 'margin-bottom',\n 'margin-inline',\n 'margin-inline-end',\n 'margin-inline-start',\n 'margin-left',\n 'margin-right',\n 'margin-top',\n 'margin-trim',\n 'marker',\n 'marker-end',\n 'marker-mid',\n 'marker-start',\n 'marks',\n 'mask',\n 'mask-border',\n 'mask-border-mode',\n 'mask-border-outset',\n 'mask-border-repeat',\n 'mask-border-slice',\n 'mask-border-source',\n 'mask-border-width',\n 'mask-clip',\n 'mask-composite',\n 'mask-image',\n 'mask-mode',\n 'mask-origin',\n 'mask-position',\n 'mask-repeat',\n 'mask-size',\n 'mask-type',\n 'masonry-auto-flow',\n 'math-depth',\n 'math-shift',\n 'math-style',\n 'max-block-size',\n 'max-height',\n 'max-inline-size',\n 'max-width',\n 'min-block-size',\n 'min-height',\n 'min-inline-size',\n 'min-width',\n 'mix-blend-mode',\n 'nav-down',\n 'nav-index',\n 'nav-left',\n 'nav-right',\n 'nav-up',\n 'none',\n 'normal',\n 'object-fit',\n 'object-position',\n 'offset',\n 'offset-anchor',\n 'offset-distance',\n 'offset-path',\n 'offset-position',\n 'offset-rotate',\n 'opacity',\n 'order',\n 'orphans',\n 'outline',\n 'outline-color',\n 'outline-offset',\n 'outline-style',\n 'outline-width',\n 'overflow',\n 'overflow-anchor',\n 'overflow-block',\n 'overflow-clip-margin',\n 'overflow-inline',\n 'overflow-wrap',\n 'overflow-x',\n 'overflow-y',\n 'overlay',\n 'overscroll-behavior',\n 'overscroll-behavior-block',\n 'overscroll-behavior-inline',\n 'overscroll-behavior-x',\n 'overscroll-behavior-y',\n 'padding',\n 'padding-block',\n 'padding-block-end',\n 'padding-block-start',\n 'padding-bottom',\n 'padding-inline',\n 'padding-inline-end',\n 'padding-inline-start',\n 'padding-left',\n 'padding-right',\n 'padding-top',\n 'page',\n 'page-break-after',\n 'page-break-before',\n 'page-break-inside',\n 'paint-order',\n 'pause',\n 'pause-after',\n 'pause-before',\n 'perspective',\n 'perspective-origin',\n 'place-content',\n 'place-items',\n 'place-self',\n 'pointer-events',\n 'position',\n 'position-anchor',\n 'position-visibility',\n 'print-color-adjust',\n 'quotes',\n 'r',\n 'resize',\n 'rest',\n 'rest-after',\n 'rest-before',\n 'right',\n 'rotate',\n 'row-gap',\n 'ruby-align',\n 'ruby-position',\n 'scale',\n 'scroll-behavior',\n 'scroll-margin',\n 'scroll-margin-block',\n 'scroll-margin-block-end',\n 'scroll-margin-block-start',\n 'scroll-margin-bottom',\n 'scroll-margin-inline',\n 'scroll-margin-inline-end',\n 'scroll-margin-inline-start',\n 'scroll-margin-left',\n 'scroll-margin-right',\n 'scroll-margin-top',\n 'scroll-padding',\n 'scroll-padding-block',\n 'scroll-padding-block-end',\n 'scroll-padding-block-start',\n 'scroll-padding-bottom',\n 'scroll-padding-inline',\n 'scroll-padding-inline-end',\n 'scroll-padding-inline-start',\n 'scroll-padding-left',\n 'scroll-padding-right',\n 'scroll-padding-top',\n 'scroll-snap-align',\n 'scroll-snap-stop',\n 'scroll-snap-type',\n 'scroll-timeline',\n 'scroll-timeline-axis',\n 'scroll-timeline-name',\n 'scrollbar-color',\n 'scrollbar-gutter',\n 'scrollbar-width',\n 'shape-image-threshold',\n 'shape-margin',\n 'shape-outside',\n 'shape-rendering',\n 'speak',\n 'speak-as',\n 'src', // @font-face\n 'stop-color',\n 'stop-opacity',\n 'stroke',\n 'stroke-dasharray',\n 'stroke-dashoffset',\n 'stroke-linecap',\n 'stroke-linejoin',\n 'stroke-miterlimit',\n 'stroke-opacity',\n 'stroke-width',\n 'tab-size',\n 'table-layout',\n 'text-align',\n 'text-align-all',\n 'text-align-last',\n 'text-anchor',\n 'text-combine-upright',\n 'text-decoration',\n 'text-decoration-color',\n 'text-decoration-line',\n 'text-decoration-skip',\n 'text-decoration-skip-ink',\n 'text-decoration-style',\n 'text-decoration-thickness',\n 'text-emphasis',\n 'text-emphasis-color',\n 'text-emphasis-position',\n 'text-emphasis-style',\n 'text-indent',\n 'text-justify',\n 'text-orientation',\n 'text-overflow',\n 'text-rendering',\n 'text-shadow',\n 'text-size-adjust',\n 'text-transform',\n 'text-underline-offset',\n 'text-underline-position',\n 'text-wrap',\n 'text-wrap-mode',\n 'text-wrap-style',\n 'timeline-scope',\n 'top',\n 'touch-action',\n 'transform',\n 'transform-box',\n 'transform-origin',\n 'transform-style',\n 'transition',\n 'transition-behavior',\n 'transition-delay',\n 'transition-duration',\n 'transition-property',\n 'transition-timing-function',\n 'translate',\n 'unicode-bidi',\n 'user-modify',\n 'user-select',\n 'vector-effect',\n 'vertical-align',\n 'view-timeline',\n 'view-timeline-axis',\n 'view-timeline-inset',\n 'view-timeline-name',\n 'view-transition-name',\n 'visibility',\n 'voice-balance',\n 'voice-duration',\n 'voice-family',\n 'voice-pitch',\n 'voice-range',\n 'voice-rate',\n 'voice-stress',\n 'voice-volume',\n 'white-space',\n 'white-space-collapse',\n 'widows',\n 'width',\n 'will-change',\n 'word-break',\n 'word-spacing',\n 'word-wrap',\n 'writing-mode',\n 'x',\n 'y',\n 'z-index',\n 'zoom'\n].sort().reverse();\n\n/*\nLanguage: SCSS\nDescription: Scss is an extension of the syntax of CSS.\nAuthor: Kurt Emch \nWebsite: https://sass-lang.com\nCategory: common, css, web\n*/\n\n\n/** @type LanguageFn */\nfunction scss(hljs) {\n const modes = MODES(hljs);\n const PSEUDO_ELEMENTS$1 = PSEUDO_ELEMENTS;\n const PSEUDO_CLASSES$1 = PSEUDO_CLASSES;\n\n const AT_IDENTIFIER = '@[a-z-]+'; // @font-face\n const AT_MODIFIERS = \"and or not only\";\n const IDENT_RE = '[a-zA-Z-][a-zA-Z0-9_-]*';\n const VARIABLE = {\n className: 'variable',\n begin: '(\\\\$' + IDENT_RE + ')\\\\b',\n relevance: 0\n };\n\n return {\n name: 'SCSS',\n case_insensitive: true,\n illegal: '[=/|\\']',\n contains: [\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE,\n // to recognize keyframe 40% etc which are outside the scope of our\n // attribute value mode\n modes.CSS_NUMBER_MODE,\n {\n className: 'selector-id',\n begin: '#[A-Za-z0-9_-]+',\n relevance: 0\n },\n {\n className: 'selector-class',\n begin: '\\\\.[A-Za-z0-9_-]+',\n relevance: 0\n },\n modes.ATTRIBUTE_SELECTOR_MODE,\n {\n className: 'selector-tag',\n begin: '\\\\b(' + TAGS.join('|') + ')\\\\b',\n // was there, before, but why?\n relevance: 0\n },\n {\n className: 'selector-pseudo',\n begin: ':(' + PSEUDO_CLASSES$1.join('|') + ')'\n },\n {\n className: 'selector-pseudo',\n begin: ':(:)?(' + PSEUDO_ELEMENTS$1.join('|') + ')'\n },\n VARIABLE,\n { // pseudo-selector params\n begin: /\\(/,\n end: /\\)/,\n contains: [ modes.CSS_NUMBER_MODE ]\n },\n modes.CSS_VARIABLE,\n {\n className: 'attribute',\n begin: '\\\\b(' + ATTRIBUTES.join('|') + ')\\\\b'\n },\n { begin: '\\\\b(whitespace|wait|w-resize|visible|vertical-text|vertical-ideographic|uppercase|upper-roman|upper-alpha|underline|transparent|top|thin|thick|text|text-top|text-bottom|tb-rl|table-header-group|table-footer-group|sw-resize|super|strict|static|square|solid|small-caps|separate|se-resize|scroll|s-resize|rtl|row-resize|ridge|right|repeat|repeat-y|repeat-x|relative|progress|pointer|overline|outside|outset|oblique|nowrap|not-allowed|normal|none|nw-resize|no-repeat|no-drop|newspaper|ne-resize|n-resize|move|middle|medium|ltr|lr-tb|lowercase|lower-roman|lower-alpha|loose|list-item|line|line-through|line-edge|lighter|left|keep-all|justify|italic|inter-word|inter-ideograph|inside|inset|inline|inline-block|inherit|inactive|ideograph-space|ideograph-parenthesis|ideograph-numeric|ideograph-alpha|horizontal|hidden|help|hand|groove|fixed|ellipsis|e-resize|double|dotted|distribute|distribute-space|distribute-letter|distribute-all-lines|disc|disabled|default|decimal|dashed|crosshair|collapse|col-resize|circle|char|center|capitalize|break-word|break-all|bottom|both|bolder|bold|block|bidi-override|below|baseline|auto|always|all-scroll|absolute|table|table-cell)\\\\b' },\n {\n begin: /:/,\n end: /[;}{]/,\n relevance: 0,\n contains: [\n modes.BLOCK_COMMENT,\n VARIABLE,\n modes.HEXCOLOR,\n modes.CSS_NUMBER_MODE,\n hljs.QUOTE_STRING_MODE,\n hljs.APOS_STRING_MODE,\n modes.IMPORTANT,\n modes.FUNCTION_DISPATCH\n ]\n },\n // matching these here allows us to treat them more like regular CSS\n // rules so everything between the {} gets regular rule highlighting,\n // which is what we want for page and font-face\n {\n begin: '@(page|font-face)',\n keywords: {\n $pattern: AT_IDENTIFIER,\n keyword: '@page @font-face'\n }\n },\n {\n begin: '@',\n end: '[{;]',\n returnBegin: true,\n keywords: {\n $pattern: /[a-z-]+/,\n keyword: AT_MODIFIERS,\n attribute: MEDIA_FEATURES.join(\" \")\n },\n contains: [\n {\n begin: AT_IDENTIFIER,\n className: \"keyword\"\n },\n {\n begin: /[a-z-]+(?=:)/,\n className: \"attribute\"\n },\n VARIABLE,\n hljs.QUOTE_STRING_MODE,\n hljs.APOS_STRING_MODE,\n modes.HEXCOLOR,\n modes.CSS_NUMBER_MODE\n ]\n },\n modes.FUNCTION_DISPATCH\n ]\n };\n}\n\nmodule.exports = scss;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjI5My5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QixJQUFJLGdCQUFnQixFQUFFLEVBQUUsSUFBSTtBQUN6RCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsb0NBQW9DO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLFFBQVEscXBDQUFxcEM7QUFDN3BDO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLDRDQUE0QztBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL29ic2lkaWFuLW1pbmRtYXAtbmV4dGdlbi8uL25vZGVfbW9kdWxlcy8ucG5wbS9oaWdobGlnaHQuanNAMTEuMTEuMS9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvc2Nzcy5qcz8zNjZlIl0sInNvdXJjZXNDb250ZW50IjpbImNvbnN0IE1PREVTID0gKGhsanMpID0+IHtcbiAgcmV0dXJuIHtcbiAgICBJTVBPUlRBTlQ6IHtcbiAgICAgIHNjb3BlOiAnbWV0YScsXG4gICAgICBiZWdpbjogJyFpbXBvcnRhbnQnXG4gICAgfSxcbiAgICBCTE9DS19DT01NRU5UOiBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgIEhFWENPTE9SOiB7XG4gICAgICBzY29wZTogJ251bWJlcicsXG4gICAgICBiZWdpbjogLyMoKFswLTlhLWZBLUZdezMsNH0pfCgoWzAtOWEtZkEtRl17Mn0pezMsNH0pKVxcYi9cbiAgICB9LFxuICAgIEZVTkNUSU9OX0RJU1BBVENIOiB7XG4gICAgICBjbGFzc05hbWU6IFwiYnVpbHRfaW5cIixcbiAgICAgIGJlZ2luOiAvW1xcdy1dKyg/PVxcKCkvXG4gICAgfSxcbiAgICBBVFRSSUJVVEVfU0VMRUNUT1JfTU9ERToge1xuICAgICAgc2NvcGU6ICdzZWxlY3Rvci1hdHRyJyxcbiAgICAgIGJlZ2luOiAvXFxbLyxcbiAgICAgIGVuZDogL1xcXS8sXG4gICAgICBpbGxlZ2FsOiAnJCcsXG4gICAgICBjb250YWluczogW1xuICAgICAgICBobGpzLkFQT1NfU1RSSU5HX01PREUsXG4gICAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREVcbiAgICAgIF1cbiAgICB9LFxuICAgIENTU19OVU1CRVJfTU9ERToge1xuICAgICAgc2NvcGU6ICdudW1iZXInLFxuICAgICAgYmVnaW46IGhsanMuTlVNQkVSX1JFICsgJygnICtcbiAgICAgICAgJyV8ZW18ZXh8Y2h8cmVtJyArXG4gICAgICAgICd8dnd8dmh8dm1pbnx2bWF4JyArXG4gICAgICAgICd8Y218bW18aW58cHR8cGN8cHgnICtcbiAgICAgICAgJ3xkZWd8Z3JhZHxyYWR8dHVybicgK1xuICAgICAgICAnfHN8bXMnICtcbiAgICAgICAgJ3xIenxrSHonICtcbiAgICAgICAgJ3xkcGl8ZHBjbXxkcHB4JyArXG4gICAgICAgICcpPycsXG4gICAgICByZWxldmFuY2U6IDBcbiAgICB9LFxuICAgIENTU19WQVJJQUJMRToge1xuICAgICAgY2xhc3NOYW1lOiBcImF0dHJcIixcbiAgICAgIGJlZ2luOiAvLS1bQS1aYS16X11bQS1aYS16MC05Xy1dKi9cbiAgICB9XG4gIH07XG59O1xuXG5jb25zdCBIVE1MX1RBR1MgPSBbXG4gICdhJyxcbiAgJ2FiYnInLFxuICAnYWRkcmVzcycsXG4gICdhcnRpY2xlJyxcbiAgJ2FzaWRlJyxcbiAgJ2F1ZGlvJyxcbiAgJ2InLFxuICAnYmxvY2txdW90ZScsXG4gICdib2R5JyxcbiAgJ2J1dHRvbicsXG4gICdjYW52YXMnLFxuICAnY2FwdGlvbicsXG4gICdjaXRlJyxcbiAgJ2NvZGUnLFxuICAnZGQnLFxuICAnZGVsJyxcbiAgJ2RldGFpbHMnLFxuICAnZGZuJyxcbiAgJ2RpdicsXG4gICdkbCcsXG4gICdkdCcsXG4gICdlbScsXG4gICdmaWVsZHNldCcsXG4gICdmaWdjYXB0aW9uJyxcbiAgJ2ZpZ3VyZScsXG4gICdmb290ZXInLFxuICAnZm9ybScsXG4gICdoMScsXG4gICdoMicsXG4gICdoMycsXG4gICdoNCcsXG4gICdoNScsXG4gICdoNicsXG4gICdoZWFkZXInLFxuICAnaGdyb3VwJyxcbiAgJ2h0bWwnLFxuICAnaScsXG4gICdpZnJhbWUnLFxuICAnaW1nJyxcbiAgJ2lucHV0JyxcbiAgJ2lucycsXG4gICdrYmQnLFxuICAnbGFiZWwnLFxuICAnbGVnZW5kJyxcbiAgJ2xpJyxcbiAgJ21haW4nLFxuICAnbWFyaycsXG4gICdtZW51JyxcbiAgJ25hdicsXG4gICdvYmplY3QnLFxuICAnb2wnLFxuICAnb3B0Z3JvdXAnLFxuICAnb3B0aW9uJyxcbiAgJ3AnLFxuICAncGljdHVyZScsXG4gICdxJyxcbiAgJ3F1b3RlJyxcbiAgJ3NhbXAnLFxuICAnc2VjdGlvbicsXG4gICdzZWxlY3QnLFxuICAnc291cmNlJyxcbiAgJ3NwYW4nLFxuICAnc3Ryb25nJyxcbiAgJ3N1bW1hcnknLFxuICAnc3VwJyxcbiAgJ3RhYmxlJyxcbiAgJ3Rib2R5JyxcbiAgJ3RkJyxcbiAgJ3RleHRhcmVhJyxcbiAgJ3Rmb290JyxcbiAgJ3RoJyxcbiAgJ3RoZWFkJyxcbiAgJ3RpbWUnLFxuICAndHInLFxuICAndWwnLFxuICAndmFyJyxcbiAgJ3ZpZGVvJ1xuXTtcblxuY29uc3QgU1ZHX1RBR1MgPSBbXG4gICdkZWZzJyxcbiAgJ2cnLFxuICAnbWFya2VyJyxcbiAgJ21hc2snLFxuICAncGF0dGVybicsXG4gICdzdmcnLFxuICAnc3dpdGNoJyxcbiAgJ3N5bWJvbCcsXG4gICdmZUJsZW5kJyxcbiAgJ2ZlQ29sb3JNYXRyaXgnLFxuICAnZmVDb21wb25lbnRUcmFuc2ZlcicsXG4gICdmZUNvbXBvc2l0ZScsXG4gICdmZUNvbnZvbHZlTWF0cml4JyxcbiAgJ2ZlRGlmZnVzZUxpZ2h0aW5nJyxcbiAgJ2ZlRGlzcGxhY2VtZW50TWFwJyxcbiAgJ2ZlRmxvb2QnLFxuICAnZmVHYXVzc2lhbkJsdXInLFxuICAnZmVJbWFnZScsXG4gICdmZU1lcmdlJyxcbiAgJ2ZlTW9ycGhvbG9neScsXG4gICdmZU9mZnNldCcsXG4gICdmZVNwZWN1bGFyTGlnaHRpbmcnLFxuICAnZmVUaWxlJyxcbiAgJ2ZlVHVyYnVsZW5jZScsXG4gICdsaW5lYXJHcmFkaWVudCcsXG4gICdyYWRpYWxHcmFkaWVudCcsXG4gICdzdG9wJyxcbiAgJ2NpcmNsZScsXG4gICdlbGxpcHNlJyxcbiAgJ2ltYWdlJyxcbiAgJ2xpbmUnLFxuICAncGF0aCcsXG4gICdwb2x5Z29uJyxcbiAgJ3BvbHlsaW5lJyxcbiAgJ3JlY3QnLFxuICAndGV4dCcsXG4gICd1c2UnLFxuICAndGV4dFBhdGgnLFxuICAndHNwYW4nLFxuICAnZm9yZWlnbk9iamVjdCcsXG4gICdjbGlwUGF0aCdcbl07XG5cbmNvbnN0IFRBR1MgPSBbXG4gIC4uLkhUTUxfVEFHUyxcbiAgLi4uU1ZHX1RBR1MsXG5dO1xuXG4vLyBTb3J0aW5nLCB0aGVuIHJldmVyc2luZyBtYWtlcyBzdXJlIGxvbmdlciBhdHRyaWJ1dGVzL2VsZW1lbnRzIGxpa2Vcbi8vIGBmb250LXdlaWdodGAgYXJlIG1hdGNoZWQgZnVsbHkgaW5zdGVhZCBvZiBnZXR0aW5nIGZhbHNlIHBvc2l0aXZlcyBvbiBzYXkgYGZvbnRgXG5cbmNvbnN0IE1FRElBX0ZFQVRVUkVTID0gW1xuICAnYW55LWhvdmVyJyxcbiAgJ2FueS1wb2ludGVyJyxcbiAgJ2FzcGVjdC1yYXRpbycsXG4gICdjb2xvcicsXG4gICdjb2xvci1nYW11dCcsXG4gICdjb2xvci1pbmRleCcsXG4gICdkZXZpY2UtYXNwZWN0LXJhdGlvJyxcbiAgJ2RldmljZS1oZWlnaHQnLFxuICAnZGV2aWNlLXdpZHRoJyxcbiAgJ2Rpc3BsYXktbW9kZScsXG4gICdmb3JjZWQtY29sb3JzJyxcbiAgJ2dyaWQnLFxuICAnaGVpZ2h0JyxcbiAgJ2hvdmVyJyxcbiAgJ2ludmVydGVkLWNvbG9ycycsXG4gICdtb25vY2hyb21lJyxcbiAgJ29yaWVudGF0aW9uJyxcbiAgJ292ZXJmbG93LWJsb2NrJyxcbiAgJ292ZXJmbG93LWlubGluZScsXG4gICdwb2ludGVyJyxcbiAgJ3ByZWZlcnMtY29sb3Itc2NoZW1lJyxcbiAgJ3ByZWZlcnMtY29udHJhc3QnLFxuICAncHJlZmVycy1yZWR1Y2VkLW1vdGlvbicsXG4gICdwcmVmZXJzLXJlZHVjZWQtdHJhbnNwYXJlbmN5JyxcbiAgJ3Jlc29sdXRpb24nLFxuICAnc2NhbicsXG4gICdzY3JpcHRpbmcnLFxuICAndXBkYXRlJyxcbiAgJ3dpZHRoJyxcbiAgLy8gVE9ETzogZmluZCBhIGJldHRlciBzb2x1dGlvbj9cbiAgJ21pbi13aWR0aCcsXG4gICdtYXgtd2lkdGgnLFxuICAnbWluLWhlaWdodCcsXG4gICdtYXgtaGVpZ2h0J1xuXS5zb3J0KCkucmV2ZXJzZSgpO1xuXG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvUHNldWRvLWNsYXNzZXNcbmNvbnN0IFBTRVVET19DTEFTU0VTID0gW1xuICAnYWN0aXZlJyxcbiAgJ2FueS1saW5rJyxcbiAgJ2JsYW5rJyxcbiAgJ2NoZWNrZWQnLFxuICAnY3VycmVudCcsXG4gICdkZWZhdWx0JyxcbiAgJ2RlZmluZWQnLFxuICAnZGlyJywgLy8gZGlyKClcbiAgJ2Rpc2FibGVkJyxcbiAgJ2Ryb3AnLFxuICAnZW1wdHknLFxuICAnZW5hYmxlZCcsXG4gICdmaXJzdCcsXG4gICdmaXJzdC1jaGlsZCcsXG4gICdmaXJzdC1vZi10eXBlJyxcbiAgJ2Z1bGxzY3JlZW4nLFxuICAnZnV0dXJlJyxcbiAgJ2ZvY3VzJyxcbiAgJ2ZvY3VzLXZpc2libGUnLFxuICAnZm9jdXMtd2l0aGluJyxcbiAgJ2hhcycsIC8vIGhhcygpXG4gICdob3N0JywgLy8gaG9zdCBvciBob3N0KClcbiAgJ2hvc3QtY29udGV4dCcsIC8vIGhvc3QtY29udGV4dCgpXG4gICdob3ZlcicsXG4gICdpbmRldGVybWluYXRlJyxcbiAgJ2luLXJhbmdlJyxcbiAgJ2ludmFsaWQnLFxuICAnaXMnLCAvLyBpcygpXG4gICdsYW5nJywgLy8gbGFuZygpXG4gICdsYXN0LWNoaWxkJyxcbiAgJ2xhc3Qtb2YtdHlwZScsXG4gICdsZWZ0JyxcbiAgJ2xpbmsnLFxuICAnbG9jYWwtbGluaycsXG4gICdub3QnLCAvLyBub3QoKVxuICAnbnRoLWNoaWxkJywgLy8gbnRoLWNoaWxkKClcbiAgJ250aC1jb2wnLCAvLyBudGgtY29sKClcbiAgJ250aC1sYXN0LWNoaWxkJywgLy8gbnRoLWxhc3QtY2hpbGQoKVxuICAnbnRoLWxhc3QtY29sJywgLy8gbnRoLWxhc3QtY29sKClcbiAgJ250aC1sYXN0LW9mLXR5cGUnLCAvL250aC1sYXN0LW9mLXR5cGUoKVxuICAnbnRoLW9mLXR5cGUnLCAvL250aC1vZi10eXBlKClcbiAgJ29ubHktY2hpbGQnLFxuICAnb25seS1vZi10eXBlJyxcbiAgJ29wdGlvbmFsJyxcbiAgJ291dC1vZi1yYW5nZScsXG4gICdwYXN0JyxcbiAgJ3BsYWNlaG9sZGVyLXNob3duJyxcbiAgJ3JlYWQtb25seScsXG4gICdyZWFkLXdyaXRlJyxcbiAgJ3JlcXVpcmVkJyxcbiAgJ3JpZ2h0JyxcbiAgJ3Jvb3QnLFxuICAnc2NvcGUnLFxuICAndGFyZ2V0JyxcbiAgJ3RhcmdldC13aXRoaW4nLFxuICAndXNlci1pbnZhbGlkJyxcbiAgJ3ZhbGlkJyxcbiAgJ3Zpc2l0ZWQnLFxuICAnd2hlcmUnIC8vIHdoZXJlKClcbl0uc29ydCgpLnJldmVyc2UoKTtcblxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL1BzZXVkby1lbGVtZW50c1xuY29uc3QgUFNFVURPX0VMRU1FTlRTID0gW1xuICAnYWZ0ZXInLFxuICAnYmFja2Ryb3AnLFxuICAnYmVmb3JlJyxcbiAgJ2N1ZScsXG4gICdjdWUtcmVnaW9uJyxcbiAgJ2ZpcnN0LWxldHRlcicsXG4gICdmaXJzdC1saW5lJyxcbiAgJ2dyYW1tYXItZXJyb3InLFxuICAnbWFya2VyJyxcbiAgJ3BhcnQnLFxuICAncGxhY2Vob2xkZXInLFxuICAnc2VsZWN0aW9uJyxcbiAgJ3Nsb3R0ZWQnLFxuICAnc3BlbGxpbmctZXJyb3InXG5dLnNvcnQoKS5yZXZlcnNlKCk7XG5cbmNvbnN0IEFUVFJJQlVURVMgPSBbXG4gICdhY2NlbnQtY29sb3InLFxuICAnYWxpZ24tY29udGVudCcsXG4gICdhbGlnbi1pdGVtcycsXG4gICdhbGlnbi1zZWxmJyxcbiAgJ2FsaWdubWVudC1iYXNlbGluZScsXG4gICdhbGwnLFxuICAnYW5jaG9yLW5hbWUnLFxuICAnYW5pbWF0aW9uJyxcbiAgJ2FuaW1hdGlvbi1jb21wb3NpdGlvbicsXG4gICdhbmltYXRpb24tZGVsYXknLFxuICAnYW5pbWF0aW9uLWRpcmVjdGlvbicsXG4gICdhbmltYXRpb24tZHVyYXRpb24nLFxuICAnYW5pbWF0aW9uLWZpbGwtbW9kZScsXG4gICdhbmltYXRpb24taXRlcmF0aW9uLWNvdW50JyxcbiAgJ2FuaW1hdGlvbi1uYW1lJyxcbiAgJ2FuaW1hdGlvbi1wbGF5LXN0YXRlJyxcbiAgJ2FuaW1hdGlvbi1yYW5nZScsXG4gICdhbmltYXRpb24tcmFuZ2UtZW5kJyxcbiAgJ2FuaW1hdGlvbi1yYW5nZS1zdGFydCcsXG4gICdhbmltYXRpb24tdGltZWxpbmUnLFxuICAnYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbicsXG4gICdhcHBlYXJhbmNlJyxcbiAgJ2FzcGVjdC1yYXRpbycsXG4gICdiYWNrZHJvcC1maWx0ZXInLFxuICAnYmFja2ZhY2UtdmlzaWJpbGl0eScsXG4gICdiYWNrZ3JvdW5kJyxcbiAgJ2JhY2tncm91bmQtYXR0YWNobWVudCcsXG4gICdiYWNrZ3JvdW5kLWJsZW5kLW1vZGUnLFxuICAnYmFja2dyb3VuZC1jbGlwJyxcbiAgJ2JhY2tncm91bmQtY29sb3InLFxuICAnYmFja2dyb3VuZC1pbWFnZScsXG4gICdiYWNrZ3JvdW5kLW9yaWdpbicsXG4gICdiYWNrZ3JvdW5kLXBvc2l0aW9uJyxcbiAgJ2JhY2tncm91bmQtcG9zaXRpb24teCcsXG4gICdiYWNrZ3JvdW5kLXBvc2l0aW9uLXknLFxuICAnYmFja2dyb3VuZC1yZXBlYXQnLFxuICAnYmFja2dyb3VuZC1zaXplJyxcbiAgJ2Jhc2VsaW5lLXNoaWZ0JyxcbiAgJ2Jsb2NrLXNpemUnLFxuICAnYm9yZGVyJyxcbiAgJ2JvcmRlci1ibG9jaycsXG4gICdib3JkZXItYmxvY2stY29sb3InLFxuICAnYm9yZGVyLWJsb2NrLWVuZCcsXG4gICdib3JkZXItYmxvY2stZW5kLWNvbG9yJyxcbiAgJ2JvcmRlci1ibG9jay1lbmQtc3R5bGUnLFxuICAnYm9yZGVyLWJsb2NrLWVuZC13aWR0aCcsXG4gICdib3JkZXItYmxvY2stc3RhcnQnLFxuICAnYm9yZGVyLWJsb2NrLXN0YXJ0LWNvbG9yJyxcbiAgJ2JvcmRlci1ibG9jay1zdGFydC1zdHlsZScsXG4gICdib3JkZXItYmxvY2stc3RhcnQtd2lkdGgnLFxuICAnYm9yZGVyLWJsb2NrLXN0eWxlJyxcbiAgJ2JvcmRlci1ibG9jay13aWR0aCcsXG4gICdib3JkZXItYm90dG9tJyxcbiAgJ2JvcmRlci1ib3R0b20tY29sb3InLFxuICAnYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1cycsXG4gICdib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1cycsXG4gICdib3JkZXItYm90dG9tLXN0eWxlJyxcbiAgJ2JvcmRlci1ib3R0b20td2lkdGgnLFxuICAnYm9yZGVyLWNvbGxhcHNlJyxcbiAgJ2JvcmRlci1jb2xvcicsXG4gICdib3JkZXItZW5kLWVuZC1yYWRpdXMnLFxuICAnYm9yZGVyLWVuZC1zdGFydC1yYWRpdXMnLFxuICAnYm9yZGVyLWltYWdlJyxcbiAgJ2JvcmRlci1pbWFnZS1vdXRzZXQnLFxuICAnYm9yZGVyLWltYWdlLXJlcGVhdCcsXG4gICdib3JkZXItaW1hZ2Utc2xpY2UnLFxuICAnYm9yZGVyLWltYWdlLXNvdXJjZScsXG4gICdib3JkZXItaW1hZ2Utd2lkdGgnLFxuICAnYm9yZGVyLWlubGluZScsXG4gICdib3JkZXItaW5saW5lLWNvbG9yJyxcbiAgJ2JvcmRlci1pbmxpbmUtZW5kJyxcbiAgJ2JvcmRlci1pbmxpbmUtZW5kLWNvbG9yJyxcbiAgJ2JvcmRlci1pbmxpbmUtZW5kLXN0eWxlJyxcbiAgJ2JvcmRlci1pbmxpbmUtZW5kLXdpZHRoJyxcbiAgJ2JvcmRlci1pbmxpbmUtc3RhcnQnLFxuICAnYm9yZGVyLWlubGluZS1zdGFydC1jb2xvcicsXG4gICdib3JkZXItaW5saW5lLXN0YXJ0LXN0eWxlJyxcbiAgJ2JvcmRlci1pbmxpbmUtc3RhcnQtd2lkdGgnLFxuICAnYm9yZGVyLWlubGluZS1zdHlsZScsXG4gICdib3JkZXItaW5saW5lLXdpZHRoJyxcbiAgJ2JvcmRlci1sZWZ0JyxcbiAgJ2JvcmRlci1sZWZ0LWNvbG9yJyxcbiAgJ2JvcmRlci1sZWZ0LXN0eWxlJyxcbiAgJ2JvcmRlci1sZWZ0LXdpZHRoJyxcbiAgJ2JvcmRlci1yYWRpdXMnLFxuICAnYm9yZGVyLXJpZ2h0JyxcbiAgJ2JvcmRlci1yaWdodC1jb2xvcicsXG4gICdib3JkZXItcmlnaHQtc3R5bGUnLFxuICAnYm9yZGVyLXJpZ2h0LXdpZHRoJyxcbiAgJ2JvcmRlci1zcGFjaW5nJyxcbiAgJ2JvcmRlci1zdGFydC1lbmQtcmFkaXVzJyxcbiAgJ2JvcmRlci1zdGFydC1zdGFydC1yYWRpdXMnLFxuICAnYm9yZGVyLXN0eWxlJyxcbiAgJ2JvcmRlci10b3AnLFxuICAnYm9yZGVyLXRvcC1jb2xvcicsXG4gICdib3JkZXItdG9wLWxlZnQtcmFkaXVzJyxcbiAgJ2JvcmRlci10b3AtcmlnaHQtcmFkaXVzJyxcbiAgJ2JvcmRlci10b3Atc3R5bGUnLFxuICAnYm9yZGVyLXRvcC13aWR0aCcsXG4gICdib3JkZXItd2lkdGgnLFxuICAnYm90dG9tJyxcbiAgJ2JveC1hbGlnbicsXG4gICdib3gtZGVjb3JhdGlvbi1icmVhaycsXG4gICdib3gtZGlyZWN0aW9uJyxcbiAgJ2JveC1mbGV4JyxcbiAgJ2JveC1mbGV4LWdyb3VwJyxcbiAgJ2JveC1saW5lcycsXG4gICdib3gtb3JkaW5hbC1ncm91cCcsXG4gICdib3gtb3JpZW50JyxcbiAgJ2JveC1wYWNrJyxcbiAgJ2JveC1zaGFkb3cnLFxuICAnYm94LXNpemluZycsXG4gICdicmVhay1hZnRlcicsXG4gICdicmVhay1iZWZvcmUnLFxuICAnYnJlYWstaW5zaWRlJyxcbiAgJ2NhcHRpb24tc2lkZScsXG4gICdjYXJldC1jb2xvcicsXG4gICdjbGVhcicsXG4gICdjbGlwJyxcbiAgJ2NsaXAtcGF0aCcsXG4gICdjbGlwLXJ1bGUnLFxuICAnY29sb3InLFxuICAnY29sb3ItaW50ZXJwb2xhdGlvbicsXG4gICdjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnMnLFxuICAnY29sb3ItcHJvZmlsZScsXG4gICdjb2xvci1yZW5kZXJpbmcnLFxuICAnY29sb3Itc2NoZW1lJyxcbiAgJ2NvbHVtbi1jb3VudCcsXG4gICdjb2x1bW4tZmlsbCcsXG4gICdjb2x1bW4tZ2FwJyxcbiAgJ2NvbHVtbi1ydWxlJyxcbiAgJ2NvbHVtbi1ydWxlLWNvbG9yJyxcbiAgJ2NvbHVtbi1ydWxlLXN0eWxlJyxcbiAgJ2NvbHVtbi1ydWxlLXdpZHRoJyxcbiAgJ2NvbHVtbi1zcGFuJyxcbiAgJ2NvbHVtbi13aWR0aCcsXG4gICdjb2x1bW5zJyxcbiAgJ2NvbnRhaW4nLFxuICAnY29udGFpbi1pbnRyaW5zaWMtYmxvY2stc2l6ZScsXG4gICdjb250YWluLWludHJpbnNpYy1oZWlnaHQnLFxuICAnY29udGFpbi1pbnRyaW5zaWMtaW5saW5lLXNpemUnLFxuICAnY29udGFpbi1pbnRyaW5zaWMtc2l6ZScsXG4gICdjb250YWluLWludHJpbnNpYy13aWR0aCcsXG4gICdjb250YWluZXInLFxuICAnY29udGFpbmVyLW5hbWUnLFxuICAnY29udGFpbmVyLXR5cGUnLFxuICAnY29udGVudCcsXG4gICdjb250ZW50LXZpc2liaWxpdHknLFxuICAnY291bnRlci1pbmNyZW1lbnQnLFxuICAnY291bnRlci1yZXNldCcsXG4gICdjb3VudGVyLXNldCcsXG4gICdjdWUnLFxuICAnY3VlLWFmdGVyJyxcbiAgJ2N1ZS1iZWZvcmUnLFxuICAnY3Vyc29yJyxcbiAgJ2N4JyxcbiAgJ2N5JyxcbiAgJ2RpcmVjdGlvbicsXG4gICdkaXNwbGF5JyxcbiAgJ2RvbWluYW50LWJhc2VsaW5lJyxcbiAgJ2VtcHR5LWNlbGxzJyxcbiAgJ2VuYWJsZS1iYWNrZ3JvdW5kJyxcbiAgJ2ZpZWxkLXNpemluZycsXG4gICdmaWxsJyxcbiAgJ2ZpbGwtb3BhY2l0eScsXG4gICdmaWxsLXJ1bGUnLFxuICAnZmlsdGVyJyxcbiAgJ2ZsZXgnLFxuICAnZmxleC1iYXNpcycsXG4gICdmbGV4LWRpcmVjdGlvbicsXG4gICdmbGV4LWZsb3cnLFxuICAnZmxleC1ncm93JyxcbiAgJ2ZsZXgtc2hyaW5rJyxcbiAgJ2ZsZXgtd3JhcCcsXG4gICdmbG9hdCcsXG4gICdmbG9vZC1jb2xvcicsXG4gICdmbG9vZC1vcGFjaXR5JyxcbiAgJ2Zsb3cnLFxuICAnZm9udCcsXG4gICdmb250LWRpc3BsYXknLFxuICAnZm9udC1mYW1pbHknLFxuICAnZm9udC1mZWF0dXJlLXNldHRpbmdzJyxcbiAgJ2ZvbnQta2VybmluZycsXG4gICdmb250LWxhbmd1YWdlLW92ZXJyaWRlJyxcbiAgJ2ZvbnQtb3B0aWNhbC1zaXppbmcnLFxuICAnZm9udC1wYWxldHRlJyxcbiAgJ2ZvbnQtc2l6ZScsXG4gICdmb250LXNpemUtYWRqdXN0JyxcbiAgJ2ZvbnQtc21vb3RoJyxcbiAgJ2ZvbnQtc21vb3RoaW5nJyxcbiAgJ2ZvbnQtc3RyZXRjaCcsXG4gICdmb250LXN0eWxlJyxcbiAgJ2ZvbnQtc3ludGhlc2lzJyxcbiAgJ2ZvbnQtc3ludGhlc2lzLXBvc2l0aW9uJyxcbiAgJ2ZvbnQtc3ludGhlc2lzLXNtYWxsLWNhcHMnLFxuICAnZm9udC1zeW50aGVzaXMtc3R5bGUnLFxuICAnZm9udC1zeW50aGVzaXMtd2VpZ2h0JyxcbiAgJ2ZvbnQtdmFyaWFudCcsXG4gICdmb250LXZhcmlhbnQtYWx0ZXJuYXRlcycsXG4gICdmb250LXZhcmlhbnQtY2FwcycsXG4gICdmb250LXZhcmlhbnQtZWFzdC1hc2lhbicsXG4gICdmb250LXZhcmlhbnQtZW1vamknLFxuICAnZm9udC12YXJpYW50LWxpZ2F0dXJlcycsXG4gICdmb250LXZhcmlhbnQtbnVtZXJpYycsXG4gICdmb250LXZhcmlhbnQtcG9zaXRpb24nLFxuICAnZm9udC12YXJpYXRpb24tc2V0dGluZ3MnLFxuICAnZm9udC13ZWlnaHQnLFxuICAnZm9yY2VkLWNvbG9yLWFkanVzdCcsXG4gICdnYXAnLFxuICAnZ2x5cGgtb3JpZW50YXRpb24taG9yaXpvbnRhbCcsXG4gICdnbHlwaC1vcmllbnRhdGlvbi12ZXJ0aWNhbCcsXG4gICdncmlkJyxcbiAgJ2dyaWQtYXJlYScsXG4gICdncmlkLWF1dG8tY29sdW1ucycsXG4gICdncmlkLWF1dG8tZmxvdycsXG4gICdncmlkLWF1dG8tcm93cycsXG4gICdncmlkLWNvbHVtbicsXG4gICdncmlkLWNvbHVtbi1lbmQnLFxuICAnZ3JpZC1jb2x1bW4tc3RhcnQnLFxuICAnZ3JpZC1nYXAnLFxuICAnZ3JpZC1yb3cnLFxuICAnZ3JpZC1yb3ctZW5kJyxcbiAgJ2dyaWQtcm93LXN0YXJ0JyxcbiAgJ2dyaWQtdGVtcGxhdGUnLFxuICAnZ3JpZC10ZW1wbGF0ZS1hcmVhcycsXG4gICdncmlkLXRlbXBsYXRlLWNvbHVtbnMnLFxuICAnZ3JpZC10ZW1wbGF0ZS1yb3dzJyxcbiAgJ2hhbmdpbmctcHVuY3R1YXRpb24nLFxuICAnaGVpZ2h0JyxcbiAgJ2h5cGhlbmF0ZS1jaGFyYWN0ZXInLFxuICAnaHlwaGVuYXRlLWxpbWl0LWNoYXJzJyxcbiAgJ2h5cGhlbnMnLFxuICAnaWNvbicsXG4gICdpbWFnZS1vcmllbnRhdGlvbicsXG4gICdpbWFnZS1yZW5kZXJpbmcnLFxuICAnaW1hZ2UtcmVzb2x1dGlvbicsXG4gICdpbWUtbW9kZScsXG4gICdpbml0aWFsLWxldHRlcicsXG4gICdpbml0aWFsLWxldHRlci1hbGlnbicsXG4gICdpbmxpbmUtc2l6ZScsXG4gICdpbnNldCcsXG4gICdpbnNldC1hcmVhJyxcbiAgJ2luc2V0LWJsb2NrJyxcbiAgJ2luc2V0LWJsb2NrLWVuZCcsXG4gICdpbnNldC1ibG9jay1zdGFydCcsXG4gICdpbnNldC1pbmxpbmUnLFxuICAnaW5zZXQtaW5saW5lLWVuZCcsXG4gICdpbnNldC1pbmxpbmUtc3RhcnQnLFxuICAnaXNvbGF0aW9uJyxcbiAgJ2p1c3RpZnktY29udGVudCcsXG4gICdqdXN0aWZ5LWl0ZW1zJyxcbiAgJ2p1c3RpZnktc2VsZicsXG4gICdrZXJuaW5nJyxcbiAgJ2xlZnQnLFxuICAnbGV0dGVyLXNwYWNpbmcnLFxuICAnbGlnaHRpbmctY29sb3InLFxuICAnbGluZS1icmVhaycsXG4gICdsaW5lLWhlaWdodCcsXG4gICdsaW5lLWhlaWdodC1zdGVwJyxcbiAgJ2xpc3Qtc3R5bGUnLFxuICAnbGlzdC1zdHlsZS1pbWFnZScsXG4gICdsaXN0LXN0eWxlLXBvc2l0aW9uJyxcbiAgJ2xpc3Qtc3R5bGUtdHlwZScsXG4gICdtYXJnaW4nLFxuICAnbWFyZ2luLWJsb2NrJyxcbiAgJ21hcmdpbi1ibG9jay1lbmQnLFxuICAnbWFyZ2luLWJsb2NrLXN0YXJ0JyxcbiAgJ21hcmdpbi1ib3R0b20nLFxuICAnbWFyZ2luLWlubGluZScsXG4gICdtYXJnaW4taW5saW5lLWVuZCcsXG4gICdtYXJnaW4taW5saW5lLXN0YXJ0JyxcbiAgJ21hcmdpbi1sZWZ0JyxcbiAgJ21hcmdpbi1yaWdodCcsXG4gICdtYXJnaW4tdG9wJyxcbiAgJ21hcmdpbi10cmltJyxcbiAgJ21hcmtlcicsXG4gICdtYXJrZXItZW5kJyxcbiAgJ21hcmtlci1taWQnLFxuICAnbWFya2VyLXN0YXJ0JyxcbiAgJ21hcmtzJyxcbiAgJ21hc2snLFxuICAnbWFzay1ib3JkZXInLFxuICAnbWFzay1ib3JkZXItbW9kZScsXG4gICdtYXNrLWJvcmRlci1vdXRzZXQnLFxuICAnbWFzay1ib3JkZXItcmVwZWF0JyxcbiAgJ21hc2stYm9yZGVyLXNsaWNlJyxcbiAgJ21hc2stYm9yZGVyLXNvdXJjZScsXG4gICdtYXNrLWJvcmRlci13aWR0aCcsXG4gICdtYXNrLWNsaXAnLFxuICAnbWFzay1jb21wb3NpdGUnLFxuICAnbWFzay1pbWFnZScsXG4gICdtYXNrLW1vZGUnLFxuICAnbWFzay1vcmlnaW4nLFxuICAnbWFzay1wb3NpdGlvbicsXG4gICdtYXNrLXJlcGVhdCcsXG4gICdtYXNrLXNpemUnLFxuICAnbWFzay10eXBlJyxcbiAgJ21hc29ucnktYXV0by1mbG93JyxcbiAgJ21hdGgtZGVwdGgnLFxuICAnbWF0aC1zaGlmdCcsXG4gICdtYXRoLXN0eWxlJyxcbiAgJ21heC1ibG9jay1zaXplJyxcbiAgJ21heC1oZWlnaHQnLFxuICAnbWF4LWlubGluZS1zaXplJyxcbiAgJ21heC13aWR0aCcsXG4gICdtaW4tYmxvY2stc2l6ZScsXG4gICdtaW4taGVpZ2h0JyxcbiAgJ21pbi1pbmxpbmUtc2l6ZScsXG4gICdtaW4td2lkdGgnLFxuICAnbWl4LWJsZW5kLW1vZGUnLFxuICAnbmF2LWRvd24nLFxuICAnbmF2LWluZGV4JyxcbiAgJ25hdi1sZWZ0JyxcbiAgJ25hdi1yaWdodCcsXG4gICduYXYtdXAnLFxuICAnbm9uZScsXG4gICdub3JtYWwnLFxuICAnb2JqZWN0LWZpdCcsXG4gICdvYmplY3QtcG9zaXRpb24nLFxuICAnb2Zmc2V0JyxcbiAgJ29mZnNldC1hbmNob3InLFxuICAnb2Zmc2V0LWRpc3RhbmNlJyxcbiAgJ29mZnNldC1wYXRoJyxcbiAgJ29mZnNldC1wb3NpdGlvbicsXG4gICdvZmZzZXQtcm90YXRlJyxcbiAgJ29wYWNpdHknLFxuICAnb3JkZXInLFxuICAnb3JwaGFucycsXG4gICdvdXRsaW5lJyxcbiAgJ291dGxpbmUtY29sb3InLFxuICAnb3V0bGluZS1vZmZzZXQnLFxuICAnb3V0bGluZS1zdHlsZScsXG4gICdvdXRsaW5lLXdpZHRoJyxcbiAgJ292ZXJmbG93JyxcbiAgJ292ZXJmbG93LWFuY2hvcicsXG4gICdvdmVyZmxvdy1ibG9jaycsXG4gICdvdmVyZmxvdy1jbGlwLW1hcmdpbicsXG4gICdvdmVyZmxvdy1pbmxpbmUnLFxuICAnb3ZlcmZsb3ctd3JhcCcsXG4gICdvdmVyZmxvdy14JyxcbiAgJ292ZXJmbG93LXknLFxuICAnb3ZlcmxheScsXG4gICdvdmVyc2Nyb2xsLWJlaGF2aW9yJyxcbiAgJ292ZXJzY3JvbGwtYmVoYXZpb3ItYmxvY2snLFxuICAnb3ZlcnNjcm9sbC1iZWhhdmlvci1pbmxpbmUnLFxuICAnb3ZlcnNjcm9sbC1iZWhhdmlvci14JyxcbiAgJ292ZXJzY3JvbGwtYmVoYXZpb3IteScsXG4gICdwYWRkaW5nJyxcbiAgJ3BhZGRpbmctYmxvY2snLFxuICAncGFkZGluZy1ibG9jay1lbmQnLFxuICAncGFkZGluZy1ibG9jay1zdGFydCcsXG4gICdwYWRkaW5nLWJvdHRvbScsXG4gICdwYWRkaW5nLWlubGluZScsXG4gICdwYWRkaW5nLWlubGluZS1lbmQnLFxuICAncGFkZGluZy1pbmxpbmUtc3RhcnQnLFxuICAncGFkZGluZy1sZWZ0JyxcbiAgJ3BhZGRpbmctcmlnaHQnLFxuICAncGFkZGluZy10b3AnLFxuICAncGFnZScsXG4gICdwYWdlLWJyZWFrLWFmdGVyJyxcbiAgJ3BhZ2UtYnJlYWstYmVmb3JlJyxcbiAgJ3BhZ2UtYnJlYWstaW5zaWRlJyxcbiAgJ3BhaW50LW9yZGVyJyxcbiAgJ3BhdXNlJyxcbiAgJ3BhdXNlLWFmdGVyJyxcbiAgJ3BhdXNlLWJlZm9yZScsXG4gICdwZXJzcGVjdGl2ZScsXG4gICdwZXJzcGVjdGl2ZS1vcmlnaW4nLFxuICAncGxhY2UtY29udGVudCcsXG4gICdwbGFjZS1pdGVtcycsXG4gICdwbGFjZS1zZWxmJyxcbiAgJ3BvaW50ZXItZXZlbnRzJyxcbiAgJ3Bvc2l0aW9uJyxcbiAgJ3Bvc2l0aW9uLWFuY2hvcicsXG4gICdwb3NpdGlvbi12aXNpYmlsaXR5JyxcbiAgJ3ByaW50LWNvbG9yLWFkanVzdCcsXG4gICdxdW90ZXMnLFxuICAncicsXG4gICdyZXNpemUnLFxuICAncmVzdCcsXG4gICdyZXN0LWFmdGVyJyxcbiAgJ3Jlc3QtYmVmb3JlJyxcbiAgJ3JpZ2h0JyxcbiAgJ3JvdGF0ZScsXG4gICdyb3ctZ2FwJyxcbiAgJ3J1YnktYWxpZ24nLFxuICAncnVieS1wb3NpdGlvbicsXG4gICdzY2FsZScsXG4gICdzY3JvbGwtYmVoYXZpb3InLFxuICAnc2Nyb2xsLW1hcmdpbicsXG4gICdzY3JvbGwtbWFyZ2luLWJsb2NrJyxcbiAgJ3Njcm9sbC1tYXJnaW4tYmxvY2stZW5kJyxcbiAgJ3Njcm9sbC1tYXJnaW4tYmxvY2stc3RhcnQnLFxuICAnc2Nyb2xsLW1hcmdpbi1ib3R0b20nLFxuICAnc2Nyb2xsLW1hcmdpbi1pbmxpbmUnLFxuICAnc2Nyb2xsLW1hcmdpbi1pbmxpbmUtZW5kJyxcbiAgJ3Njcm9sbC1tYXJnaW4taW5saW5lLXN0YXJ0JyxcbiAgJ3Njcm9sbC1tYXJnaW4tbGVmdCcsXG4gICdzY3JvbGwtbWFyZ2luLXJpZ2h0JyxcbiAgJ3Njcm9sbC1tYXJnaW4tdG9wJyxcbiAgJ3Njcm9sbC1wYWRkaW5nJyxcbiAgJ3Njcm9sbC1wYWRkaW5nLWJsb2NrJyxcbiAgJ3Njcm9sbC1wYWRkaW5nLWJsb2NrLWVuZCcsXG4gICdzY3JvbGwtcGFkZGluZy1ibG9jay1zdGFydCcsXG4gICdzY3JvbGwtcGFkZGluZy1ib3R0b20nLFxuICAnc2Nyb2xsLXBhZGRpbmctaW5saW5lJyxcbiAgJ3Njcm9sbC1wYWRkaW5nLWlubGluZS1lbmQnLFxuICAnc2Nyb2xsLXBhZGRpbmctaW5saW5lLXN0YXJ0JyxcbiAgJ3Njcm9sbC1wYWRkaW5nLWxlZnQnLFxuICAnc2Nyb2xsLXBhZGRpbmctcmlnaHQnLFxuICAnc2Nyb2xsLXBhZGRpbmctdG9wJyxcbiAgJ3Njcm9sbC1zbmFwLWFsaWduJyxcbiAgJ3Njcm9sbC1zbmFwLXN0b3AnLFxuICAnc2Nyb2xsLXNuYXAtdHlwZScsXG4gICdzY3JvbGwtdGltZWxpbmUnLFxuICAnc2Nyb2xsLXRpbWVsaW5lLWF4aXMnLFxuICAnc2Nyb2xsLXRpbWVsaW5lLW5hbWUnLFxuICAnc2Nyb2xsYmFyLWNvbG9yJyxcbiAgJ3Njcm9sbGJhci1ndXR0ZXInLFxuICAnc2Nyb2xsYmFyLXdpZHRoJyxcbiAgJ3NoYXBlLWltYWdlLXRocmVzaG9sZCcsXG4gICdzaGFwZS1tYXJnaW4nLFxuICAnc2hhcGUtb3V0c2lkZScsXG4gICdzaGFwZS1yZW5kZXJpbmcnLFxuICAnc3BlYWsnLFxuICAnc3BlYWstYXMnLFxuICAnc3JjJywgLy8gQGZvbnQtZmFjZVxuICAnc3RvcC1jb2xvcicsXG4gICdzdG9wLW9wYWNpdHknLFxuICAnc3Ryb2tlJyxcbiAgJ3N0cm9rZS1kYXNoYXJyYXknLFxuICAnc3Ryb2tlLWRhc2hvZmZzZXQnLFxuICAnc3Ryb2tlLWxpbmVjYXAnLFxuICAnc3Ryb2tlLWxpbmVqb2luJyxcbiAgJ3N0cm9rZS1taXRlcmxpbWl0JyxcbiAgJ3N0cm9rZS1vcGFjaXR5JyxcbiAgJ3N0cm9rZS13aWR0aCcsXG4gICd0YWItc2l6ZScsXG4gICd0YWJsZS1sYXlvdXQnLFxuICAndGV4dC1hbGlnbicsXG4gICd0ZXh0LWFsaWduLWFsbCcsXG4gICd0ZXh0LWFsaWduLWxhc3QnLFxuICAndGV4dC1hbmNob3InLFxuICAndGV4dC1jb21iaW5lLXVwcmlnaHQnLFxuICAndGV4dC1kZWNvcmF0aW9uJyxcbiAgJ3RleHQtZGVjb3JhdGlvbi1jb2xvcicsXG4gICd0ZXh0LWRlY29yYXRpb24tbGluZScsXG4gICd0ZXh0LWRlY29yYXRpb24tc2tpcCcsXG4gICd0ZXh0LWRlY29yYXRpb24tc2tpcC1pbmsnLFxuICAndGV4dC1kZWNvcmF0aW9uLXN0eWxlJyxcbiAgJ3RleHQtZGVjb3JhdGlvbi10aGlja25lc3MnLFxuICAndGV4dC1lbXBoYXNpcycsXG4gICd0ZXh0LWVtcGhhc2lzLWNvbG9yJyxcbiAgJ3RleHQtZW1waGFzaXMtcG9zaXRpb24nLFxuICAndGV4dC1lbXBoYXNpcy1zdHlsZScsXG4gICd0ZXh0LWluZGVudCcsXG4gICd0ZXh0LWp1c3RpZnknLFxuICAndGV4dC1vcmllbnRhdGlvbicsXG4gICd0ZXh0LW92ZXJmbG93JyxcbiAgJ3RleHQtcmVuZGVyaW5nJyxcbiAgJ3RleHQtc2hhZG93JyxcbiAgJ3RleHQtc2l6ZS1hZGp1c3QnLFxuICAndGV4dC10cmFuc2Zvcm0nLFxuICAndGV4dC11bmRlcmxpbmUtb2Zmc2V0JyxcbiAgJ3RleHQtdW5kZXJsaW5lLXBvc2l0aW9uJyxcbiAgJ3RleHQtd3JhcCcsXG4gICd0ZXh0LXdyYXAtbW9kZScsXG4gICd0ZXh0LXdyYXAtc3R5bGUnLFxuICAndGltZWxpbmUtc2NvcGUnLFxuICAndG9wJyxcbiAgJ3RvdWNoLWFjdGlvbicsXG4gICd0cmFuc2Zvcm0nLFxuICAndHJhbnNmb3JtLWJveCcsXG4gICd0cmFuc2Zvcm0tb3JpZ2luJyxcbiAgJ3RyYW5zZm9ybS1zdHlsZScsXG4gICd0cmFuc2l0aW9uJyxcbiAgJ3RyYW5zaXRpb24tYmVoYXZpb3InLFxuICAndHJhbnNpdGlvbi1kZWxheScsXG4gICd0cmFuc2l0aW9uLWR1cmF0aW9uJyxcbiAgJ3RyYW5zaXRpb24tcHJvcGVydHknLFxuICAndHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24nLFxuICAndHJhbnNsYXRlJyxcbiAgJ3VuaWNvZGUtYmlkaScsXG4gICd1c2VyLW1vZGlmeScsXG4gICd1c2VyLXNlbGVjdCcsXG4gICd2ZWN0b3ItZWZmZWN0JyxcbiAgJ3ZlcnRpY2FsLWFsaWduJyxcbiAgJ3ZpZXctdGltZWxpbmUnLFxuICAndmlldy10aW1lbGluZS1heGlzJyxcbiAgJ3ZpZXctdGltZWxpbmUtaW5zZXQnLFxuICAndmlldy10aW1lbGluZS1uYW1lJyxcbiAgJ3ZpZXctdHJhbnNpdGlvbi1uYW1lJyxcbiAgJ3Zpc2liaWxpdHknLFxuICAndm9pY2UtYmFsYW5jZScsXG4gICd2b2ljZS1kdXJhdGlvbicsXG4gICd2b2ljZS1mYW1pbHknLFxuICAndm9pY2UtcGl0Y2gnLFxuICAndm9pY2UtcmFuZ2UnLFxuICAndm9pY2UtcmF0ZScsXG4gICd2b2ljZS1zdHJlc3MnLFxuICAndm9pY2Utdm9sdW1lJyxcbiAgJ3doaXRlLXNwYWNlJyxcbiAgJ3doaXRlLXNwYWNlLWNvbGxhcHNlJyxcbiAgJ3dpZG93cycsXG4gICd3aWR0aCcsXG4gICd3aWxsLWNoYW5nZScsXG4gICd3b3JkLWJyZWFrJyxcbiAgJ3dvcmQtc3BhY2luZycsXG4gICd3b3JkLXdyYXAnLFxuICAnd3JpdGluZy1tb2RlJyxcbiAgJ3gnLFxuICAneScsXG4gICd6LWluZGV4JyxcbiAgJ3pvb20nXG5dLnNvcnQoKS5yZXZlcnNlKCk7XG5cbi8qXG5MYW5ndWFnZTogU0NTU1xuRGVzY3JpcHRpb246IFNjc3MgaXMgYW4gZXh0ZW5zaW9uIG9mIHRoZSBzeW50YXggb2YgQ1NTLlxuQXV0aG9yOiBLdXJ0IEVtY2ggPGt1cnRAa3VydGVtY2guY29tPlxuV2Vic2l0ZTogaHR0cHM6Ly9zYXNzLWxhbmcuY29tXG5DYXRlZ29yeTogY29tbW9uLCBjc3MsIHdlYlxuKi9cblxuXG4vKiogQHR5cGUgTGFuZ3VhZ2VGbiAqL1xuZnVuY3Rpb24gc2NzcyhobGpzKSB7XG4gIGNvbnN0IG1vZGVzID0gTU9ERVMoaGxqcyk7XG4gIGNvbnN0IFBTRVVET19FTEVNRU5UUyQxID0gUFNFVURPX0VMRU1FTlRTO1xuICBjb25zdCBQU0VVRE9fQ0xBU1NFUyQxID0gUFNFVURPX0NMQVNTRVM7XG5cbiAgY29uc3QgQVRfSURFTlRJRklFUiA9ICdAW2Etei1dKyc7IC8vIEBmb250LWZhY2VcbiAgY29uc3QgQVRfTU9ESUZJRVJTID0gXCJhbmQgb3Igbm90IG9ubHlcIjtcbiAgY29uc3QgSURFTlRfUkUgPSAnW2EtekEtWi1dW2EtekEtWjAtOV8tXSonO1xuICBjb25zdCBWQVJJQUJMRSA9IHtcbiAgICBjbGFzc05hbWU6ICd2YXJpYWJsZScsXG4gICAgYmVnaW46ICcoXFxcXCQnICsgSURFTlRfUkUgKyAnKVxcXFxiJyxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdTQ1NTJyxcbiAgICBjYXNlX2luc2Vuc2l0aXZlOiB0cnVlLFxuICAgIGlsbGVnYWw6ICdbPS98XFwnXScsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgICAvLyB0byByZWNvZ25pemUga2V5ZnJhbWUgNDAlIGV0YyB3aGljaCBhcmUgb3V0c2lkZSB0aGUgc2NvcGUgb2Ygb3VyXG4gICAgICAvLyBhdHRyaWJ1dGUgdmFsdWUgbW9kZVxuICAgICAgbW9kZXMuQ1NTX05VTUJFUl9NT0RFLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzZWxlY3Rvci1pZCcsXG4gICAgICAgIGJlZ2luOiAnI1tBLVphLXowLTlfLV0rJyxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzZWxlY3Rvci1jbGFzcycsXG4gICAgICAgIGJlZ2luOiAnXFxcXC5bQS1aYS16MC05Xy1dKycsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIG1vZGVzLkFUVFJJQlVURV9TRUxFQ1RPUl9NT0RFLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzZWxlY3Rvci10YWcnLFxuICAgICAgICBiZWdpbjogJ1xcXFxiKCcgKyBUQUdTLmpvaW4oJ3wnKSArICcpXFxcXGInLFxuICAgICAgICAvLyB3YXMgdGhlcmUsIGJlZm9yZSwgYnV0IHdoeT9cbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzZWxlY3Rvci1wc2V1ZG8nLFxuICAgICAgICBiZWdpbjogJzooJyArIFBTRVVET19DTEFTU0VTJDEuam9pbignfCcpICsgJyknXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzZWxlY3Rvci1wc2V1ZG8nLFxuICAgICAgICBiZWdpbjogJzooOik/KCcgKyBQU0VVRE9fRUxFTUVOVFMkMS5qb2luKCd8JykgKyAnKSdcbiAgICAgIH0sXG4gICAgICBWQVJJQUJMRSxcbiAgICAgIHsgLy8gcHNldWRvLXNlbGVjdG9yIHBhcmFtc1xuICAgICAgICBiZWdpbjogL1xcKC8sXG4gICAgICAgIGVuZDogL1xcKS8sXG4gICAgICAgIGNvbnRhaW5zOiBbIG1vZGVzLkNTU19OVU1CRVJfTU9ERSBdXG4gICAgICB9LFxuICAgICAgbW9kZXMuQ1NTX1ZBUklBQkxFLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdhdHRyaWJ1dGUnLFxuICAgICAgICBiZWdpbjogJ1xcXFxiKCcgKyBBVFRSSUJVVEVTLmpvaW4oJ3wnKSArICcpXFxcXGInXG4gICAgICB9LFxuICAgICAgeyBiZWdpbjogJ1xcXFxiKHdoaXRlc3BhY2V8d2FpdHx3LXJlc2l6ZXx2aXNpYmxlfHZlcnRpY2FsLXRleHR8dmVydGljYWwtaWRlb2dyYXBoaWN8dXBwZXJjYXNlfHVwcGVyLXJvbWFufHVwcGVyLWFscGhhfHVuZGVybGluZXx0cmFuc3BhcmVudHx0b3B8dGhpbnx0aGlja3x0ZXh0fHRleHQtdG9wfHRleHQtYm90dG9tfHRiLXJsfHRhYmxlLWhlYWRlci1ncm91cHx0YWJsZS1mb290ZXItZ3JvdXB8c3ctcmVzaXplfHN1cGVyfHN0cmljdHxzdGF0aWN8c3F1YXJlfHNvbGlkfHNtYWxsLWNhcHN8c2VwYXJhdGV8c2UtcmVzaXplfHNjcm9sbHxzLXJlc2l6ZXxydGx8cm93LXJlc2l6ZXxyaWRnZXxyaWdodHxyZXBlYXR8cmVwZWF0LXl8cmVwZWF0LXh8cmVsYXRpdmV8cHJvZ3Jlc3N8cG9pbnRlcnxvdmVybGluZXxvdXRzaWRlfG91dHNldHxvYmxpcXVlfG5vd3JhcHxub3QtYWxsb3dlZHxub3JtYWx8bm9uZXxudy1yZXNpemV8bm8tcmVwZWF0fG5vLWRyb3B8bmV3c3BhcGVyfG5lLXJlc2l6ZXxuLXJlc2l6ZXxtb3ZlfG1pZGRsZXxtZWRpdW18bHRyfGxyLXRifGxvd2VyY2FzZXxsb3dlci1yb21hbnxsb3dlci1hbHBoYXxsb29zZXxsaXN0LWl0ZW18bGluZXxsaW5lLXRocm91Z2h8bGluZS1lZGdlfGxpZ2h0ZXJ8bGVmdHxrZWVwLWFsbHxqdXN0aWZ5fGl0YWxpY3xpbnRlci13b3JkfGludGVyLWlkZW9ncmFwaHxpbnNpZGV8aW5zZXR8aW5saW5lfGlubGluZS1ibG9ja3xpbmhlcml0fGluYWN0aXZlfGlkZW9ncmFwaC1zcGFjZXxpZGVvZ3JhcGgtcGFyZW50aGVzaXN8aWRlb2dyYXBoLW51bWVyaWN8aWRlb2dyYXBoLWFscGhhfGhvcml6b250YWx8aGlkZGVufGhlbHB8aGFuZHxncm9vdmV8Zml4ZWR8ZWxsaXBzaXN8ZS1yZXNpemV8ZG91YmxlfGRvdHRlZHxkaXN0cmlidXRlfGRpc3RyaWJ1dGUtc3BhY2V8ZGlzdHJpYnV0ZS1sZXR0ZXJ8ZGlzdHJpYnV0ZS1hbGwtbGluZXN8ZGlzY3xkaXNhYmxlZHxkZWZhdWx0fGRlY2ltYWx8ZGFzaGVkfGNyb3NzaGFpcnxjb2xsYXBzZXxjb2wtcmVzaXplfGNpcmNsZXxjaGFyfGNlbnRlcnxjYXBpdGFsaXplfGJyZWFrLXdvcmR8YnJlYWstYWxsfGJvdHRvbXxib3RofGJvbGRlcnxib2xkfGJsb2NrfGJpZGktb3ZlcnJpZGV8YmVsb3d8YmFzZWxpbmV8YXV0b3xhbHdheXN8YWxsLXNjcm9sbHxhYnNvbHV0ZXx0YWJsZXx0YWJsZS1jZWxsKVxcXFxiJyB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogLzovLFxuICAgICAgICBlbmQ6IC9bO317XS8sXG4gICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBtb2Rlcy5CTE9DS19DT01NRU5ULFxuICAgICAgICAgIFZBUklBQkxFLFxuICAgICAgICAgIG1vZGVzLkhFWENPTE9SLFxuICAgICAgICAgIG1vZGVzLkNTU19OVU1CRVJfTU9ERSxcbiAgICAgICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAgICAgIGhsanMuQVBPU19TVFJJTkdfTU9ERSxcbiAgICAgICAgICBtb2Rlcy5JTVBPUlRBTlQsXG4gICAgICAgICAgbW9kZXMuRlVOQ1RJT05fRElTUEFUQ0hcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIC8vIG1hdGNoaW5nIHRoZXNlIGhlcmUgYWxsb3dzIHVzIHRvIHRyZWF0IHRoZW0gbW9yZSBsaWtlIHJlZ3VsYXIgQ1NTXG4gICAgICAvLyBydWxlcyBzbyBldmVyeXRoaW5nIGJldHdlZW4gdGhlIHt9IGdldHMgcmVndWxhciBydWxlIGhpZ2hsaWdodGluZyxcbiAgICAgIC8vIHdoaWNoIGlzIHdoYXQgd2Ugd2FudCBmb3IgcGFnZSBhbmQgZm9udC1mYWNlXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnQChwYWdlfGZvbnQtZmFjZSknLFxuICAgICAgICBrZXl3b3Jkczoge1xuICAgICAgICAgICRwYXR0ZXJuOiBBVF9JREVOVElGSUVSLFxuICAgICAgICAgIGtleXdvcmQ6ICdAcGFnZSBAZm9udC1mYWNlJ1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogJ0AnLFxuICAgICAgICBlbmQ6ICdbeztdJyxcbiAgICAgICAgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgICAgIGtleXdvcmRzOiB7XG4gICAgICAgICAgJHBhdHRlcm46IC9bYS16LV0rLyxcbiAgICAgICAgICBrZXl3b3JkOiBBVF9NT0RJRklFUlMsXG4gICAgICAgICAgYXR0cmlidXRlOiBNRURJQV9GRUFUVVJFUy5qb2luKFwiIFwiKVxuICAgICAgICB9LFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiBBVF9JREVOVElGSUVSLFxuICAgICAgICAgICAgY2xhc3NOYW1lOiBcImtleXdvcmRcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46IC9bYS16LV0rKD89OikvLFxuICAgICAgICAgICAgY2xhc3NOYW1lOiBcImF0dHJpYnV0ZVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBWQVJJQUJMRSxcbiAgICAgICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAgICAgIGhsanMuQVBPU19TVFJJTkdfTU9ERSxcbiAgICAgICAgICBtb2Rlcy5IRVhDT0xPUixcbiAgICAgICAgICBtb2Rlcy5DU1NfTlVNQkVSX01PREVcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIG1vZGVzLkZVTkNUSU9OX0RJU1BBVENIXG4gICAgXVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNjc3M7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2293\n")},2302:(module,__unused_webpack_exports,__webpack_require__)=>{"use strict";eval("\n\nvar typeOf = __webpack_require__(4480);\nvar extend = __webpack_require__(4972);\n\n/**\n * Parse sections in `input` with the given `options`.\n *\n * ```js\n * var sections = require('{%= name %}');\n * var result = sections(input, options);\n * // { content: 'Content before sections', sections: [] }\n * ```\n * @param {String|Buffer|Object} `input` If input is an object, it's `content` property must be a string or buffer.\n * @param {Object} options\n * @return {Object} Returns an object with a `content` string and an array of `sections` objects.\n * @api public\n */\n\nmodule.exports = function(input, options) {\n if (typeof options === 'function') {\n options = { parse: options };\n }\n\n var file = toObject(input);\n var defaults = {section_delimiter: '---', parse: identity};\n var opts = extend({}, defaults, options);\n var delim = opts.section_delimiter;\n var lines = file.content.split(/\\r?\\n/);\n var sections = null;\n var section = createSection();\n var content = [];\n var stack = [];\n\n function initSections(val) {\n file.content = val;\n sections = [];\n content = [];\n }\n\n function closeSection(val) {\n if (stack.length) {\n section.key = getKey(stack[0], delim);\n section.content = val;\n opts.parse(section, sections);\n sections.push(section);\n section = createSection();\n content = [];\n stack = [];\n }\n }\n\n for (var i = 0; i < lines.length; i++) {\n var line = lines[i];\n var len = stack.length;\n var ln = line.trim();\n\n if (isDelimiter(ln, delim)) {\n if (ln.length === 3 && i !== 0) {\n if (len === 0 || len === 2) {\n content.push(line);\n continue;\n }\n stack.push(ln);\n section.data = content.join('\\n');\n content = [];\n continue;\n }\n\n if (sections === null) {\n initSections(content.join('\\n'));\n }\n\n if (len === 2) {\n closeSection(content.join('\\n'));\n }\n\n stack.push(ln);\n continue;\n }\n\n content.push(line);\n }\n\n if (sections === null) {\n initSections(content.join('\\n'));\n } else {\n closeSection(content.join('\\n'));\n }\n\n file.sections = sections;\n return file;\n};\n\nfunction isDelimiter(line, delim) {\n if (line.slice(0, delim.length) !== delim) {\n return false;\n }\n if (line.charAt(delim.length + 1) === delim.slice(-1)) {\n return false;\n }\n return true;\n}\n\nfunction toObject(input) {\n if (typeOf(input) !== 'object') {\n input = { content: input };\n }\n\n if (typeof input.content !== 'string' && !isBuffer(input.content)) {\n throw new TypeError('expected a buffer or string');\n }\n\n input.content = input.content.toString();\n input.sections = [];\n return input;\n}\n\nfunction getKey(val, delim) {\n return val ? val.slice(delim.length).trim() : '';\n}\n\nfunction createSection() {\n return { key: '', data: '', content: '' };\n}\n\nfunction identity(val) {\n return val;\n}\n\nfunction isBuffer(val) {\n if (val && val.constructor && typeof val.constructor.isBuffer === 'function') {\n return val.constructor.isBuffer(val);\n }\n return false;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjMwMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixhQUFhLG1CQUFPLENBQUMsSUFBUztBQUM5QixhQUFhLG1CQUFPLENBQUMsSUFBZ0I7O0FBRXJDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLFVBQVU7QUFDdEM7QUFDQSxRQUFRO0FBQ1I7QUFDQSxXQUFXLHNCQUFzQjtBQUNqQyxXQUFXLFFBQVE7QUFDbkIsWUFBWSxRQUFRO0FBQ3BCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjs7QUFFQTtBQUNBLGtCQUFrQjtBQUNsQixzQkFBc0I7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxrQkFBa0Isa0JBQWtCO0FBQ3BDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGNBQWM7QUFDZDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsV0FBVztBQUNYOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9vYnNpZGlhbi1taW5kbWFwLW5leHRnZW4vLi9ub2RlX21vZHVsZXMvLnBucG0vc2VjdGlvbi1tYXR0ZXJAMS4wLjAvbm9kZV9tb2R1bGVzL3NlY3Rpb24tbWF0dGVyL2luZGV4LmpzP2JlMTEiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdHlwZU9mID0gcmVxdWlyZSgna2luZC1vZicpO1xudmFyIGV4dGVuZCA9IHJlcXVpcmUoJ2V4dGVuZC1zaGFsbG93Jyk7XG5cbi8qKlxuICogUGFyc2Ugc2VjdGlvbnMgaW4gYGlucHV0YCB3aXRoIHRoZSBnaXZlbiBgb3B0aW9uc2AuXG4gKlxuICogYGBganNcbiAqIHZhciBzZWN0aW9ucyA9IHJlcXVpcmUoJ3slPSBuYW1lICV9Jyk7XG4gKiB2YXIgcmVzdWx0ID0gc2VjdGlvbnMoaW5wdXQsIG9wdGlvbnMpO1xuICogLy8geyBjb250ZW50OiAnQ29udGVudCBiZWZvcmUgc2VjdGlvbnMnLCBzZWN0aW9uczogW10gfVxuICogYGBgXG4gKiBAcGFyYW0ge1N0cmluZ3xCdWZmZXJ8T2JqZWN0fSBgaW5wdXRgIElmIGlucHV0IGlzIGFuIG9iamVjdCwgaXQncyBgY29udGVudGAgcHJvcGVydHkgbXVzdCBiZSBhIHN0cmluZyBvciBidWZmZXIuXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICogQHJldHVybiB7T2JqZWN0fSBSZXR1cm5zIGFuIG9iamVjdCB3aXRoIGEgYGNvbnRlbnRgIHN0cmluZyBhbmQgYW4gYXJyYXkgb2YgYHNlY3Rpb25zYCBvYmplY3RzLlxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGlucHV0LCBvcHRpb25zKSB7XG4gIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIG9wdGlvbnMgPSB7IHBhcnNlOiBvcHRpb25zIH07XG4gIH1cblxuICB2YXIgZmlsZSA9IHRvT2JqZWN0KGlucHV0KTtcbiAgdmFyIGRlZmF1bHRzID0ge3NlY3Rpb25fZGVsaW1pdGVyOiAnLS0tJywgcGFyc2U6IGlkZW50aXR5fTtcbiAgdmFyIG9wdHMgPSBleHRlbmQoe30sIGRlZmF1bHRzLCBvcHRpb25zKTtcbiAgdmFyIGRlbGltID0gb3B0cy5zZWN0aW9uX2RlbGltaXRlcjtcbiAgdmFyIGxpbmVzID0gZmlsZS5jb250ZW50LnNwbGl0KC9cXHI/XFxuLyk7XG4gIHZhciBzZWN0aW9ucyA9IG51bGw7XG4gIHZhciBzZWN0aW9uID0gY3JlYXRlU2VjdGlvbigpO1xuICB2YXIgY29udGVudCA9IFtdO1xuICB2YXIgc3RhY2sgPSBbXTtcblxuICBmdW5jdGlvbiBpbml0U2VjdGlvbnModmFsKSB7XG4gICAgZmlsZS5jb250ZW50ID0gdmFsO1xuICAgIHNlY3Rpb25zID0gW107XG4gICAgY29udGVudCA9IFtdO1xuICB9XG5cbiAgZnVuY3Rpb24gY2xvc2VTZWN0aW9uKHZhbCkge1xuICAgIGlmIChzdGFjay5sZW5ndGgpIHtcbiAgICAgIHNlY3Rpb24ua2V5ID0gZ2V0S2V5KHN0YWNrWzBdLCBkZWxpbSk7XG4gICAgICBzZWN0aW9uLmNvbnRlbnQgPSB2YWw7XG4gICAgICBvcHRzLnBhcnNlKHNlY3Rpb24sIHNlY3Rpb25zKTtcbiAgICAgIHNlY3Rpb25zLnB1c2goc2VjdGlvbik7XG4gICAgICBzZWN0aW9uID0gY3JlYXRlU2VjdGlvbigpO1xuICAgICAgY29udGVudCA9IFtdO1xuICAgICAgc3RhY2sgPSBbXTtcbiAgICB9XG4gIH1cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGxpbmUgPSBsaW5lc1tpXTtcbiAgICB2YXIgbGVuID0gc3RhY2subGVuZ3RoO1xuICAgIHZhciBsbiA9IGxpbmUudHJpbSgpO1xuXG4gICAgaWYgKGlzRGVsaW1pdGVyKGxuLCBkZWxpbSkpIHtcbiAgICAgIGlmIChsbi5sZW5ndGggPT09IDMgJiYgaSAhPT0gMCkge1xuICAgICAgICBpZiAobGVuID09PSAwIHx8IGxlbiA9PT0gMikge1xuICAgICAgICAgIGNvbnRlbnQucHVzaChsaW5lKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBzdGFjay5wdXNoKGxuKTtcbiAgICAgICAgc2VjdGlvbi5kYXRhID0gY29udGVudC5qb2luKCdcXG4nKTtcbiAgICAgICAgY29udGVudCA9IFtdO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHNlY3Rpb25zID09PSBudWxsKSB7XG4gICAgICAgIGluaXRTZWN0aW9ucyhjb250ZW50LmpvaW4oJ1xcbicpKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGxlbiA9PT0gMikge1xuICAgICAgICBjbG9zZVNlY3Rpb24oY29udGVudC5qb2luKCdcXG4nKSk7XG4gICAgICB9XG5cbiAgICAgIHN0YWNrLnB1c2gobG4pO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29udGVudC5wdXNoKGxpbmUpO1xuICB9XG5cbiAgaWYgKHNlY3Rpb25zID09PSBudWxsKSB7XG4gICAgaW5pdFNlY3Rpb25zKGNvbnRlbnQuam9pbignXFxuJykpO1xuICB9IGVsc2Uge1xuICAgIGNsb3NlU2VjdGlvbihjb250ZW50LmpvaW4oJ1xcbicpKTtcbiAgfVxuXG4gIGZpbGUuc2VjdGlvbnMgPSBzZWN0aW9ucztcbiAgcmV0dXJuIGZpbGU7XG59O1xuXG5mdW5jdGlvbiBpc0RlbGltaXRlcihsaW5lLCBkZWxpbSkge1xuICBpZiAobGluZS5zbGljZSgwLCBkZWxpbS5sZW5ndGgpICE9PSBkZWxpbSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAobGluZS5jaGFyQXQoZGVsaW0ubGVuZ3RoICsgMSkgPT09IGRlbGltLnNsaWNlKC0xKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gdG9PYmplY3QoaW5wdXQpIHtcbiAgaWYgKHR5cGVPZihpbnB1dCkgIT09ICdvYmplY3QnKSB7XG4gICAgaW5wdXQgPSB7IGNvbnRlbnQ6IGlucHV0IH07XG4gIH1cblxuICBpZiAodHlwZW9mIGlucHV0LmNvbnRlbnQgIT09ICdzdHJpbmcnICYmICFpc0J1ZmZlcihpbnB1dC5jb250ZW50KSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2V4cGVjdGVkIGEgYnVmZmVyIG9yIHN0cmluZycpO1xuICB9XG5cbiAgaW5wdXQuY29udGVudCA9IGlucHV0LmNvbnRlbnQudG9TdHJpbmcoKTtcbiAgaW5wdXQuc2VjdGlvbnMgPSBbXTtcbiAgcmV0dXJuIGlucHV0O1xufVxuXG5mdW5jdGlvbiBnZXRLZXkodmFsLCBkZWxpbSkge1xuICByZXR1cm4gdmFsID8gdmFsLnNsaWNlKGRlbGltLmxlbmd0aCkudHJpbSgpIDogJyc7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVNlY3Rpb24oKSB7XG4gIHJldHVybiB7IGtleTogJycsIGRhdGE6ICcnLCBjb250ZW50OiAnJyB9O1xufVxuXG5mdW5jdGlvbiBpZGVudGl0eSh2YWwpIHtcbiAgcmV0dXJuIHZhbDtcbn1cblxuZnVuY3Rpb24gaXNCdWZmZXIodmFsKSB7XG4gIGlmICh2YWwgJiYgdmFsLmNvbnN0cnVjdG9yICYmIHR5cGVvZiB2YWwuY29uc3RydWN0b3IuaXNCdWZmZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gdmFsLmNvbnN0cnVjdG9yLmlzQnVmZmVyKHZhbCk7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2302\n")},2324:module=>{eval("/*\nLanguage: Intel x86 Assembly\nAuthor: innocenat \nDescription: x86 assembly language using Intel's mnemonic and NASM syntax\nWebsite: https://en.wikipedia.org/wiki/X86_assembly_language\nCategory: assembler\n*/\n\nfunction x86asm(hljs) {\n return {\n name: 'Intel x86 Assembly',\n case_insensitive: true,\n keywords: {\n $pattern: '[.%]?' + hljs.IDENT_RE,\n keyword:\n 'lock rep repe repz repne repnz xaquire xrelease bnd nobnd '\n + 'aaa aad aam aas adc add and arpl bb0_reset bb1_reset bound bsf bsr bswap bt btc btr bts call cbw cdq cdqe clc cld cli clts cmc cmp cmpsb cmpsd cmpsq cmpsw cmpxchg cmpxchg486 cmpxchg8b cmpxchg16b cpuid cpu_read cpu_write cqo cwd cwde daa das dec div dmint emms enter equ f2xm1 fabs fadd faddp fbld fbstp fchs fclex fcmovb fcmovbe fcmove fcmovnb fcmovnbe fcmovne fcmovnu fcmovu fcom fcomi fcomip fcomp fcompp fcos fdecstp fdisi fdiv fdivp fdivr fdivrp femms feni ffree ffreep fiadd ficom ficomp fidiv fidivr fild fimul fincstp finit fist fistp fisttp fisub fisubr fld fld1 fldcw fldenv fldl2e fldl2t fldlg2 fldln2 fldpi fldz fmul fmulp fnclex fndisi fneni fninit fnop fnsave fnstcw fnstenv fnstsw fpatan fprem fprem1 fptan frndint frstor fsave fscale fsetpm fsin fsincos fsqrt fst fstcw fstenv fstp fstsw fsub fsubp fsubr fsubrp ftst fucom fucomi fucomip fucomp fucompp fxam fxch fxtract fyl2x fyl2xp1 hlt ibts icebp idiv imul in inc incbin insb insd insw int int01 int1 int03 int3 into invd invpcid invlpg invlpga iret iretd iretq iretw jcxz jecxz jrcxz jmp jmpe lahf lar lds lea leave les lfence lfs lgdt lgs lidt lldt lmsw loadall loadall286 lodsb lodsd lodsq lodsw loop loope loopne loopnz loopz lsl lss ltr mfence monitor mov movd movq movsb movsd movsq movsw movsx movsxd movzx mul mwait neg nop not or out outsb outsd outsw packssdw packsswb packuswb paddb paddd paddsb paddsiw paddsw paddusb paddusw paddw pand pandn pause paveb pavgusb pcmpeqb pcmpeqd pcmpeqw pcmpgtb pcmpgtd pcmpgtw pdistib pf2id pfacc pfadd pfcmpeq pfcmpge pfcmpgt pfmax pfmin pfmul pfrcp pfrcpit1 pfrcpit2 pfrsqit1 pfrsqrt pfsub pfsubr pi2fd pmachriw pmaddwd pmagw pmulhriw pmulhrwa pmulhrwc pmulhw pmullw pmvgezb pmvlzb pmvnzb pmvzb pop popa popad popaw popf popfd popfq popfw por prefetch prefetchw pslld psllq psllw psrad psraw psrld psrlq psrlw psubb psubd psubsb psubsiw psubsw psubusb psubusw psubw punpckhbw punpckhdq punpckhwd punpcklbw punpckldq punpcklwd push pusha pushad pushaw pushf pushfd pushfq pushfw pxor rcl rcr rdshr rdmsr rdpmc rdtsc rdtscp ret retf retn rol ror rdm rsdc rsldt rsm rsts sahf sal salc sar sbb scasb scasd scasq scasw sfence sgdt shl shld shr shrd sidt sldt skinit smi smint smintold smsw stc std sti stosb stosd stosq stosw str sub svdc svldt svts swapgs syscall sysenter sysexit sysret test ud0 ud1 ud2b ud2 ud2a umov verr verw fwait wbinvd wrshr wrmsr xadd xbts xchg xlatb xlat xor cmove cmovz cmovne cmovnz cmova cmovnbe cmovae cmovnb cmovb cmovnae cmovbe cmovna cmovg cmovnle cmovge cmovnl cmovl cmovnge cmovle cmovng cmovc cmovnc cmovo cmovno cmovs cmovns cmovp cmovpe cmovnp cmovpo je jz jne jnz ja jnbe jae jnb jb jnae jbe jna jg jnle jge jnl jl jnge jle jng jc jnc jo jno js jns jpo jnp jpe jp sete setz setne setnz seta setnbe setae setnb setnc setb setnae setcset setbe setna setg setnle setge setnl setl setnge setle setng sets setns seto setno setpe setp setpo setnp addps addss andnps andps cmpeqps cmpeqss cmpleps cmpless cmpltps cmpltss cmpneqps cmpneqss cmpnleps cmpnless cmpnltps cmpnltss cmpordps cmpordss cmpunordps cmpunordss cmpps cmpss comiss cvtpi2ps cvtps2pi cvtsi2ss cvtss2si cvttps2pi cvttss2si divps divss ldmxcsr maxps maxss minps minss movaps movhps movlhps movlps movhlps movmskps movntps movss movups mulps mulss orps rcpps rcpss rsqrtps rsqrtss shufps sqrtps sqrtss stmxcsr subps subss ucomiss unpckhps unpcklps xorps fxrstor fxrstor64 fxsave fxsave64 xgetbv xsetbv xsave xsave64 xsaveopt xsaveopt64 xrstor xrstor64 prefetchnta prefetcht0 prefetcht1 prefetcht2 maskmovq movntq pavgb pavgw pextrw pinsrw pmaxsw pmaxub pminsw pminub pmovmskb pmulhuw psadbw pshufw pf2iw pfnacc pfpnacc pi2fw pswapd maskmovdqu clflush movntdq movnti movntpd movdqa movdqu movdq2q movq2dq paddq pmuludq pshufd pshufhw pshuflw pslldq psrldq psubq punpckhqdq punpcklqdq addpd addsd andnpd andpd cmpeqpd cmpeqsd cmplepd cmplesd cmpltpd cmpltsd cmpneqpd cmpneqsd cmpnlepd cmpnlesd cmpnltpd cmpnltsd cmpordpd cmpordsd cmpunordpd cmpunordsd cmppd comisd cvtdq2pd cvtdq2ps cvtpd2dq cvtpd2pi cvtpd2ps cvtpi2pd cvtps2dq cvtps2pd cvtsd2si cvtsd2ss cvtsi2sd cvtss2sd cvttpd2pi cvttpd2dq cvttps2dq cvttsd2si divpd divsd maxpd maxsd minpd minsd movapd movhpd movlpd movmskpd movupd mulpd mulsd orpd shufpd sqrtpd sqrtsd subpd subsd ucomisd unpckhpd unpcklpd xorpd addsubpd addsubps haddpd haddps hsubpd hsubps lddqu movddup movshdup movsldup clgi stgi vmcall vmclear vmfunc vmlaunch vmload vmmcall vmptrld vmptrst vmread vmresume vmrun vmsave vmwrite vmxoff vmxon invept invvpid pabsb pabsw pabsd palignr phaddw phaddd phaddsw phsubw phsubd phsubsw pmaddubsw pmulhrsw pshufb psignb psignw psignd extrq insertq movntsd movntss lzcnt blendpd blendps blendvpd blendvps dppd dpps extractps insertps movntdqa mpsadbw packusdw pblendvb pblendw pcmpeqq pextrb pextrd pextrq phminposuw pinsrb pinsrd pinsrq pmaxsb pmaxsd pmaxud pmaxuw pminsb pminsd pminud pminuw pmovsxbw pmovsxbd pmovsxbq pmovsxwd pmovsxwq pmovsxdq pmovzxbw pmovzxbd pmovzxbq pmovzxwd pmovzxwq pmovzxdq pmuldq pmulld ptest roundpd roundps roundsd roundss crc32 pcmpestri pcmpestrm pcmpistri pcmpistrm pcmpgtq popcnt getsec pfrcpv pfrsqrtv movbe aesenc aesenclast aesdec aesdeclast aesimc aeskeygenassist vaesenc vaesenclast vaesdec vaesdeclast vaesimc vaeskeygenassist vaddpd vaddps vaddsd vaddss vaddsubpd vaddsubps vandpd vandps vandnpd vandnps vblendpd vblendps vblendvpd vblendvps vbroadcastss vbroadcastsd vbroadcastf128 vcmpeq_ospd vcmpeqpd vcmplt_ospd vcmpltpd vcmple_ospd vcmplepd vcmpunord_qpd vcmpunordpd vcmpneq_uqpd vcmpneqpd vcmpnlt_uspd vcmpnltpd vcmpnle_uspd vcmpnlepd vcmpord_qpd vcmpordpd vcmpeq_uqpd vcmpnge_uspd vcmpngepd vcmpngt_uspd vcmpngtpd vcmpfalse_oqpd vcmpfalsepd vcmpneq_oqpd vcmpge_ospd vcmpgepd vcmpgt_ospd vcmpgtpd vcmptrue_uqpd vcmptruepd vcmplt_oqpd vcmple_oqpd vcmpunord_spd vcmpneq_uspd vcmpnlt_uqpd vcmpnle_uqpd vcmpord_spd vcmpeq_uspd vcmpnge_uqpd vcmpngt_uqpd vcmpfalse_ospd vcmpneq_ospd vcmpge_oqpd vcmpgt_oqpd vcmptrue_uspd vcmppd vcmpeq_osps vcmpeqps vcmplt_osps vcmpltps vcmple_osps vcmpleps vcmpunord_qps vcmpunordps vcmpneq_uqps vcmpneqps vcmpnlt_usps vcmpnltps vcmpnle_usps vcmpnleps vcmpord_qps vcmpordps vcmpeq_uqps vcmpnge_usps vcmpngeps vcmpngt_usps vcmpngtps vcmpfalse_oqps vcmpfalseps vcmpneq_oqps vcmpge_osps vcmpgeps vcmpgt_osps vcmpgtps vcmptrue_uqps vcmptrueps vcmplt_oqps vcmple_oqps vcmpunord_sps vcmpneq_usps vcmpnlt_uqps vcmpnle_uqps vcmpord_sps vcmpeq_usps vcmpnge_uqps vcmpngt_uqps vcmpfalse_osps vcmpneq_osps vcmpge_oqps vcmpgt_oqps vcmptrue_usps vcmpps vcmpeq_ossd vcmpeqsd vcmplt_ossd vcmpltsd vcmple_ossd vcmplesd vcmpunord_qsd vcmpunordsd vcmpneq_uqsd vcmpneqsd vcmpnlt_ussd vcmpnltsd vcmpnle_ussd vcmpnlesd vcmpord_qsd vcmpordsd vcmpeq_uqsd vcmpnge_ussd vcmpngesd vcmpngt_ussd vcmpngtsd vcmpfalse_oqsd vcmpfalsesd vcmpneq_oqsd vcmpge_ossd vcmpgesd vcmpgt_ossd vcmpgtsd vcmptrue_uqsd vcmptruesd vcmplt_oqsd vcmple_oqsd vcmpunord_ssd vcmpneq_ussd vcmpnlt_uqsd vcmpnle_uqsd vcmpord_ssd vcmpeq_ussd vcmpnge_uqsd vcmpngt_uqsd vcmpfalse_ossd vcmpneq_ossd vcmpge_oqsd vcmpgt_oqsd vcmptrue_ussd vcmpsd vcmpeq_osss vcmpeqss vcmplt_osss vcmpltss vcmple_osss vcmpless vcmpunord_qss vcmpunordss vcmpneq_uqss vcmpneqss vcmpnlt_usss vcmpnltss vcmpnle_usss vcmpnless vcmpord_qss vcmpordss vcmpeq_uqss vcmpnge_usss vcmpngess vcmpngt_usss vcmpngtss vcmpfalse_oqss vcmpfalsess vcmpneq_oqss vcmpge_osss vcmpgess vcmpgt_osss vcmpgtss vcmptrue_uqss vcmptruess vcmplt_oqss vcmple_oqss vcmpunord_sss vcmpneq_usss vcmpnlt_uqss vcmpnle_uqss vcmpord_sss vcmpeq_usss vcmpnge_uqss vcmpngt_uqss vcmpfalse_osss vcmpneq_osss vcmpge_oqss vcmpgt_oqss vcmptrue_usss vcmpss vcomisd vcomiss vcvtdq2pd vcvtdq2ps vcvtpd2dq vcvtpd2ps vcvtps2dq vcvtps2pd vcvtsd2si vcvtsd2ss vcvtsi2sd vcvtsi2ss vcvtss2sd vcvtss2si vcvttpd2dq vcvttps2dq vcvttsd2si vcvttss2si vdivpd vdivps vdivsd vdivss vdppd vdpps vextractf128 vextractps vhaddpd vhaddps vhsubpd vhsubps vinsertf128 vinsertps vlddqu vldqqu vldmxcsr vmaskmovdqu vmaskmovps vmaskmovpd vmaxpd vmaxps vmaxsd vmaxss vminpd vminps vminsd vminss vmovapd vmovaps vmovd vmovq vmovddup vmovdqa vmovqqa vmovdqu vmovqqu vmovhlps vmovhpd vmovhps vmovlhps vmovlpd vmovlps vmovmskpd vmovmskps vmovntdq vmovntqq vmovntdqa vmovntpd vmovntps vmovsd vmovshdup vmovsldup vmovss vmovupd vmovups vmpsadbw vmulpd vmulps vmulsd vmulss vorpd vorps vpabsb vpabsw vpabsd vpacksswb vpackssdw vpackuswb vpackusdw vpaddb vpaddw vpaddd vpaddq vpaddsb vpaddsw vpaddusb vpaddusw vpalignr vpand vpandn vpavgb vpavgw vpblendvb vpblendw vpcmpestri vpcmpestrm vpcmpistri vpcmpistrm vpcmpeqb vpcmpeqw vpcmpeqd vpcmpeqq vpcmpgtb vpcmpgtw vpcmpgtd vpcmpgtq vpermilpd vpermilps vperm2f128 vpextrb vpextrw vpextrd vpextrq vphaddw vphaddd vphaddsw vphminposuw vphsubw vphsubd vphsubsw vpinsrb vpinsrw vpinsrd vpinsrq vpmaddwd vpmaddubsw vpmaxsb vpmaxsw vpmaxsd vpmaxub vpmaxuw vpmaxud vpminsb vpminsw vpminsd vpminub vpminuw vpminud vpmovmskb vpmovsxbw vpmovsxbd vpmovsxbq vpmovsxwd vpmovsxwq vpmovsxdq vpmovzxbw vpmovzxbd vpmovzxbq vpmovzxwd vpmovzxwq vpmovzxdq vpmulhuw vpmulhrsw vpmulhw vpmullw vpmulld vpmuludq vpmuldq vpor vpsadbw vpshufb vpshufd vpshufhw vpshuflw vpsignb vpsignw vpsignd vpslldq vpsrldq vpsllw vpslld vpsllq vpsraw vpsrad vpsrlw vpsrld vpsrlq vptest vpsubb vpsubw vpsubd vpsubq vpsubsb vpsubsw vpsubusb vpsubusw vpunpckhbw vpunpckhwd vpunpckhdq vpunpckhqdq vpunpcklbw vpunpcklwd vpunpckldq vpunpcklqdq vpxor vrcpps vrcpss vrsqrtps vrsqrtss vroundpd vroundps vroundsd vroundss vshufpd vshufps vsqrtpd vsqrtps vsqrtsd vsqrtss vstmxcsr vsubpd vsubps vsubsd vsubss vtestps vtestpd vucomisd vucomiss vunpckhpd vunpckhps vunpcklpd vunpcklps vxorpd vxorps vzeroall vzeroupper pclmullqlqdq pclmulhqlqdq pclmullqhqdq pclmulhqhqdq pclmulqdq vpclmullqlqdq vpclmulhqlqdq vpclmullqhqdq vpclmulhqhqdq vpclmulqdq vfmadd132ps vfmadd132pd vfmadd312ps vfmadd312pd vfmadd213ps vfmadd213pd vfmadd123ps vfmadd123pd vfmadd231ps vfmadd231pd vfmadd321ps vfmadd321pd vfmaddsub132ps vfmaddsub132pd vfmaddsub312ps vfmaddsub312pd vfmaddsub213ps vfmaddsub213pd vfmaddsub123ps vfmaddsub123pd vfmaddsub231ps vfmaddsub231pd vfmaddsub321ps vfmaddsub321pd vfmsub132ps vfmsub132pd vfmsub312ps vfmsub312pd vfmsub213ps vfmsub213pd vfmsub123ps vfmsub123pd vfmsub231ps vfmsub231pd vfmsub321ps vfmsub321pd vfmsubadd132ps vfmsubadd132pd vfmsubadd312ps vfmsubadd312pd vfmsubadd213ps vfmsubadd213pd vfmsubadd123ps vfmsubadd123pd vfmsubadd231ps vfmsubadd231pd vfmsubadd321ps vfmsubadd321pd vfnmadd132ps vfnmadd132pd vfnmadd312ps vfnmadd312pd vfnmadd213ps vfnmadd213pd vfnmadd123ps vfnmadd123pd vfnmadd231ps vfnmadd231pd vfnmadd321ps vfnmadd321pd vfnmsub132ps vfnmsub132pd vfnmsub312ps vfnmsub312pd vfnmsub213ps vfnmsub213pd vfnmsub123ps vfnmsub123pd vfnmsub231ps vfnmsub231pd vfnmsub321ps vfnmsub321pd vfmadd132ss vfmadd132sd vfmadd312ss vfmadd312sd vfmadd213ss vfmadd213sd vfmadd123ss vfmadd123sd vfmadd231ss vfmadd231sd vfmadd321ss vfmadd321sd vfmsub132ss vfmsub132sd vfmsub312ss vfmsub312sd vfmsub213ss vfmsub213sd vfmsub123ss vfmsub123sd vfmsub231ss vfmsub231sd vfmsub321ss vfmsub321sd vfnmadd132ss vfnmadd132sd vfnmadd312ss vfnmadd312sd vfnmadd213ss vfnmadd213sd vfnmadd123ss vfnmadd123sd vfnmadd231ss vfnmadd231sd vfnmadd321ss vfnmadd321sd vfnmsub132ss vfnmsub132sd vfnmsub312ss vfnmsub312sd vfnmsub213ss vfnmsub213sd vfnmsub123ss vfnmsub123sd vfnmsub231ss vfnmsub231sd vfnmsub321ss vfnmsub321sd rdfsbase rdgsbase rdrand wrfsbase wrgsbase vcvtph2ps vcvtps2ph adcx adox rdseed clac stac xstore xcryptecb xcryptcbc xcryptctr xcryptcfb xcryptofb montmul xsha1 xsha256 llwpcb slwpcb lwpval lwpins vfmaddpd vfmaddps vfmaddsd vfmaddss vfmaddsubpd vfmaddsubps vfmsubaddpd vfmsubaddps vfmsubpd vfmsubps vfmsubsd vfmsubss vfnmaddpd vfnmaddps vfnmaddsd vfnmaddss vfnmsubpd vfnmsubps vfnmsubsd vfnmsubss vfrczpd vfrczps vfrczsd vfrczss vpcmov vpcomb vpcomd vpcomq vpcomub vpcomud vpcomuq vpcomuw vpcomw vphaddbd vphaddbq vphaddbw vphadddq vphaddubd vphaddubq vphaddubw vphaddudq vphadduwd vphadduwq vphaddwd vphaddwq vphsubbw vphsubdq vphsubwd vpmacsdd vpmacsdqh vpmacsdql vpmacssdd vpmacssdqh vpmacssdql vpmacsswd vpmacssww vpmacswd vpmacsww vpmadcsswd vpmadcswd vpperm vprotb vprotd vprotq vprotw vpshab vpshad vpshaq vpshaw vpshlb vpshld vpshlq vpshlw vbroadcasti128 vpblendd vpbroadcastb vpbroadcastw vpbroadcastd vpbroadcastq vpermd vpermpd vpermps vpermq vperm2i128 vextracti128 vinserti128 vpmaskmovd vpmaskmovq vpsllvd vpsllvq vpsravd vpsrlvd vpsrlvq vgatherdpd vgatherqpd vgatherdps vgatherqps vpgatherdd vpgatherqd vpgatherdq vpgatherqq xabort xbegin xend xtest andn bextr blci blcic blsi blsic blcfill blsfill blcmsk blsmsk blsr blcs bzhi mulx pdep pext rorx sarx shlx shrx tzcnt tzmsk t1mskc valignd valignq vblendmpd vblendmps vbroadcastf32x4 vbroadcastf64x4 vbroadcasti32x4 vbroadcasti64x4 vcompresspd vcompressps vcvtpd2udq vcvtps2udq vcvtsd2usi vcvtss2usi vcvttpd2udq vcvttps2udq vcvttsd2usi vcvttss2usi vcvtudq2pd vcvtudq2ps vcvtusi2sd vcvtusi2ss vexpandpd vexpandps vextractf32x4 vextractf64x4 vextracti32x4 vextracti64x4 vfixupimmpd vfixupimmps vfixupimmsd vfixupimmss vgetexppd vgetexpps vgetexpsd vgetexpss vgetmantpd vgetmantps vgetmantsd vgetmantss vinsertf32x4 vinsertf64x4 vinserti32x4 vinserti64x4 vmovdqa32 vmovdqa64 vmovdqu32 vmovdqu64 vpabsq vpandd vpandnd vpandnq vpandq vpblendmd vpblendmq vpcmpltd vpcmpled vpcmpneqd vpcmpnltd vpcmpnled vpcmpd vpcmpltq vpcmpleq vpcmpneqq vpcmpnltq vpcmpnleq vpcmpq vpcmpequd vpcmpltud vpcmpleud vpcmpnequd vpcmpnltud vpcmpnleud vpcmpud vpcmpequq vpcmpltuq vpcmpleuq vpcmpnequq vpcmpnltuq vpcmpnleuq vpcmpuq vpcompressd vpcompressq vpermi2d vpermi2pd vpermi2ps vpermi2q vpermt2d vpermt2pd vpermt2ps vpermt2q vpexpandd vpexpandq vpmaxsq vpmaxuq vpminsq vpminuq vpmovdb vpmovdw vpmovqb vpmovqd vpmovqw vpmovsdb vpmovsdw vpmovsqb vpmovsqd vpmovsqw vpmovusdb vpmovusdw vpmovusqb vpmovusqd vpmovusqw vpord vporq vprold vprolq vprolvd vprolvq vprord vprorq vprorvd vprorvq vpscatterdd vpscatterdq vpscatterqd vpscatterqq vpsraq vpsravq vpternlogd vpternlogq vptestmd vptestmq vptestnmd vptestnmq vpxord vpxorq vrcp14pd vrcp14ps vrcp14sd vrcp14ss vrndscalepd vrndscaleps vrndscalesd vrndscaless vrsqrt14pd vrsqrt14ps vrsqrt14sd vrsqrt14ss vscalefpd vscalefps vscalefsd vscalefss vscatterdpd vscatterdps vscatterqpd vscatterqps vshuff32x4 vshuff64x2 vshufi32x4 vshufi64x2 kandnw kandw kmovw knotw kortestw korw kshiftlw kshiftrw kunpckbw kxnorw kxorw vpbroadcastmb2q vpbroadcastmw2d vpconflictd vpconflictq vplzcntd vplzcntq vexp2pd vexp2ps vrcp28pd vrcp28ps vrcp28sd vrcp28ss vrsqrt28pd vrsqrt28ps vrsqrt28sd vrsqrt28ss vgatherpf0dpd vgatherpf0dps vgatherpf0qpd vgatherpf0qps vgatherpf1dpd vgatherpf1dps vgatherpf1qpd vgatherpf1qps vscatterpf0dpd vscatterpf0dps vscatterpf0qpd vscatterpf0qps vscatterpf1dpd vscatterpf1dps vscatterpf1qpd vscatterpf1qps prefetchwt1 bndmk bndcl bndcu bndcn bndmov bndldx bndstx sha1rnds4 sha1nexte sha1msg1 sha1msg2 sha256rnds2 sha256msg1 sha256msg2 hint_nop0 hint_nop1 hint_nop2 hint_nop3 hint_nop4 hint_nop5 hint_nop6 hint_nop7 hint_nop8 hint_nop9 hint_nop10 hint_nop11 hint_nop12 hint_nop13 hint_nop14 hint_nop15 hint_nop16 hint_nop17 hint_nop18 hint_nop19 hint_nop20 hint_nop21 hint_nop22 hint_nop23 hint_nop24 hint_nop25 hint_nop26 hint_nop27 hint_nop28 hint_nop29 hint_nop30 hint_nop31 hint_nop32 hint_nop33 hint_nop34 hint_nop35 hint_nop36 hint_nop37 hint_nop38 hint_nop39 hint_nop40 hint_nop41 hint_nop42 hint_nop43 hint_nop44 hint_nop45 hint_nop46 hint_nop47 hint_nop48 hint_nop49 hint_nop50 hint_nop51 hint_nop52 hint_nop53 hint_nop54 hint_nop55 hint_nop56 hint_nop57 hint_nop58 hint_nop59 hint_nop60 hint_nop61 hint_nop62 hint_nop63',\n built_in:\n // Instruction pointer\n 'ip eip rip '\n // 8-bit registers\n + 'al ah bl bh cl ch dl dh sil dil bpl spl r8b r9b r10b r11b r12b r13b r14b r15b '\n // 16-bit registers\n + 'ax bx cx dx si di bp sp r8w r9w r10w r11w r12w r13w r14w r15w '\n // 32-bit registers\n + 'eax ebx ecx edx esi edi ebp esp eip r8d r9d r10d r11d r12d r13d r14d r15d '\n // 64-bit registers\n + 'rax rbx rcx rdx rsi rdi rbp rsp r8 r9 r10 r11 r12 r13 r14 r15 '\n // Segment registers\n + 'cs ds es fs gs ss '\n // Floating point stack registers\n + 'st st0 st1 st2 st3 st4 st5 st6 st7 '\n // MMX Registers\n + 'mm0 mm1 mm2 mm3 mm4 mm5 mm6 mm7 '\n // SSE registers\n + 'xmm0 xmm1 xmm2 xmm3 xmm4 xmm5 xmm6 xmm7 xmm8 xmm9 xmm10 xmm11 xmm12 xmm13 xmm14 xmm15 '\n + 'xmm16 xmm17 xmm18 xmm19 xmm20 xmm21 xmm22 xmm23 xmm24 xmm25 xmm26 xmm27 xmm28 xmm29 xmm30 xmm31 '\n // AVX registers\n + 'ymm0 ymm1 ymm2 ymm3 ymm4 ymm5 ymm6 ymm7 ymm8 ymm9 ymm10 ymm11 ymm12 ymm13 ymm14 ymm15 '\n + 'ymm16 ymm17 ymm18 ymm19 ymm20 ymm21 ymm22 ymm23 ymm24 ymm25 ymm26 ymm27 ymm28 ymm29 ymm30 ymm31 '\n // AVX-512F registers\n + 'zmm0 zmm1 zmm2 zmm3 zmm4 zmm5 zmm6 zmm7 zmm8 zmm9 zmm10 zmm11 zmm12 zmm13 zmm14 zmm15 '\n + 'zmm16 zmm17 zmm18 zmm19 zmm20 zmm21 zmm22 zmm23 zmm24 zmm25 zmm26 zmm27 zmm28 zmm29 zmm30 zmm31 '\n // AVX-512F mask registers\n + 'k0 k1 k2 k3 k4 k5 k6 k7 '\n // Bound (MPX) register\n + 'bnd0 bnd1 bnd2 bnd3 '\n // Special register\n + 'cr0 cr1 cr2 cr3 cr4 cr8 dr0 dr1 dr2 dr3 dr8 tr3 tr4 tr5 tr6 tr7 '\n // NASM altreg package\n + 'r0 r1 r2 r3 r4 r5 r6 r7 r0b r1b r2b r3b r4b r5b r6b r7b '\n + 'r0w r1w r2w r3w r4w r5w r6w r7w r0d r1d r2d r3d r4d r5d r6d r7d '\n + 'r0h r1h r2h r3h '\n + 'r0l r1l r2l r3l r4l r5l r6l r7l r8l r9l r10l r11l r12l r13l r14l r15l '\n\n + 'db dw dd dq dt ddq do dy dz '\n + 'resb resw resd resq rest resdq reso resy resz '\n + 'incbin equ times '\n + 'byte word dword qword nosplit rel abs seg wrt strict near far a32 ptr',\n\n meta:\n '%define %xdefine %+ %undef %defstr %deftok %assign %strcat %strlen %substr %rotate %elif %else %endif '\n + '%if %ifmacro %ifctx %ifidn %ifidni %ifid %ifnum %ifstr %iftoken %ifempty %ifenv %error %warning %fatal %rep '\n + '%endrep %include %push %pop %repl %pathsearch %depend %use %arg %stacksize %local %line %comment %endcomment '\n + '.nolist '\n + '__FILE__ __LINE__ __SECT__ __BITS__ __OUTPUT_FORMAT__ __DATE__ __TIME__ __DATE_NUM__ __TIME_NUM__ '\n + '__UTC_DATE__ __UTC_TIME__ __UTC_DATE_NUM__ __UTC_TIME_NUM__ __PASS__ struc endstruc istruc at iend '\n + 'align alignb sectalign daz nodaz up down zero default option assume public '\n\n + 'bits use16 use32 use64 default section segment absolute extern global common cpu float '\n + '__utf16__ __utf16le__ __utf16be__ __utf32__ __utf32le__ __utf32be__ '\n + '__float8__ __float16__ __float32__ __float64__ __float80m__ __float80e__ __float128l__ __float128h__ '\n + '__Infinity__ __QNaN__ __SNaN__ Inf NaN QNaN SNaN float8 float16 float32 float64 float80m float80e '\n + 'float128l float128h __FLOAT_DAZ__ __FLOAT_ROUND__ __FLOAT__'\n },\n contains: [\n hljs.COMMENT(\n ';',\n '$',\n { relevance: 0 }\n ),\n {\n className: 'number',\n variants: [\n // Float number and x87 BCD\n {\n begin: '\\\\b(?:([0-9][0-9_]*)?\\\\.[0-9_]*(?:[eE][+-]?[0-9_]+)?|'\n + '(0[Xx])?[0-9][0-9_]*(\\\\.[0-9_]*)?(?:[pP](?:[+-]?[0-9_]+)?)?)\\\\b',\n relevance: 0\n },\n\n // Hex number in $\n {\n begin: '\\\\$[0-9][0-9A-Fa-f]*',\n relevance: 0\n },\n\n // Number in H,D,T,Q,O,B,Y suffix\n { begin: '\\\\b(?:[0-9A-Fa-f][0-9A-Fa-f_]*[Hh]|[0-9][0-9_]*[DdTt]?|[0-7][0-7_]*[QqOo]|[0-1][0-1_]*[BbYy])\\\\b' },\n\n // Number in X,D,T,Q,O,B,Y prefix\n { begin: '\\\\b(?:0[Xx][0-9A-Fa-f_]+|0[DdTt][0-9_]+|0[QqOo][0-7_]+|0[BbYy][0-1_]+)\\\\b' }\n ]\n },\n // Double quote string\n hljs.QUOTE_STRING_MODE,\n {\n className: 'string',\n variants: [\n // Single-quoted string\n {\n begin: '\\'',\n end: '[^\\\\\\\\]\\''\n },\n // Backquoted string\n {\n begin: '`',\n end: '[^\\\\\\\\]`'\n }\n ],\n relevance: 0\n },\n {\n className: 'symbol',\n variants: [\n // Global label and local label\n { begin: '^\\\\s*[A-Za-z._?][A-Za-z0-9_$#@~.?]*(:|\\\\s+label)' },\n // Macro-local label\n { begin: '^\\\\s*%%[A-Za-z0-9_$#@~.?]*:' }\n ],\n relevance: 0\n },\n // Macro parameter\n {\n className: 'subst',\n begin: '%[0-9]+',\n relevance: 0\n },\n // Macro parameter\n {\n className: 'subst',\n begin: '%!\\S+',\n relevance: 0\n },\n {\n className: 'meta',\n begin: /^\\s*\\.[\\w_-]+/\n }\n ]\n };\n}\n\nmodule.exports = x86asm;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjMyNC5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXOztBQUVYO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVzs7QUFFWDtBQUNBLFlBQVksMkdBQTJHOztBQUV2SDtBQUNBLFlBQVk7QUFDWjtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLDJEQUEyRDtBQUN2RTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL29ic2lkaWFuLW1pbmRtYXAtbmV4dGdlbi8uL25vZGVfbW9kdWxlcy8ucG5wbS9oaWdobGlnaHQuanNAMTEuMTEuMS9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMveDg2YXNtLmpzPzMzYzYiXSwic291cmNlc0NvbnRlbnQiOlsiLypcbkxhbmd1YWdlOiBJbnRlbCB4ODYgQXNzZW1ibHlcbkF1dGhvcjogaW5ub2NlbmF0IDxpbm5vY2VuYXRAZ21haWwuY29tPlxuRGVzY3JpcHRpb246IHg4NiBhc3NlbWJseSBsYW5ndWFnZSB1c2luZyBJbnRlbCdzIG1uZW1vbmljIGFuZCBOQVNNIHN5bnRheFxuV2Vic2l0ZTogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvWDg2X2Fzc2VtYmx5X2xhbmd1YWdlXG5DYXRlZ29yeTogYXNzZW1ibGVyXG4qL1xuXG5mdW5jdGlvbiB4ODZhc20oaGxqcykge1xuICByZXR1cm4ge1xuICAgIG5hbWU6ICdJbnRlbCB4ODYgQXNzZW1ibHknLFxuICAgIGNhc2VfaW5zZW5zaXRpdmU6IHRydWUsXG4gICAga2V5d29yZHM6IHtcbiAgICAgICRwYXR0ZXJuOiAnWy4lXT8nICsgaGxqcy5JREVOVF9SRSxcbiAgICAgIGtleXdvcmQ6XG4gICAgICAgICdsb2NrIHJlcCByZXBlIHJlcHogcmVwbmUgcmVwbnogeGFxdWlyZSB4cmVsZWFzZSBibmQgbm9ibmQgJ1xuICAgICAgICArICdhYWEgYWFkIGFhbSBhYXMgYWRjIGFkZCBhbmQgYXJwbCBiYjBfcmVzZXQgYmIxX3Jlc2V0IGJvdW5kIGJzZiBic3IgYnN3YXAgYnQgYnRjIGJ0ciBidHMgY2FsbCBjYncgY2RxIGNkcWUgY2xjIGNsZCBjbGkgY2x0cyBjbWMgY21wIGNtcHNiIGNtcHNkIGNtcHNxIGNtcHN3IGNtcHhjaGcgY21weGNoZzQ4NiBjbXB4Y2hnOGIgY21weGNoZzE2YiBjcHVpZCBjcHVfcmVhZCBjcHVfd3JpdGUgY3FvIGN3ZCBjd2RlIGRhYSBkYXMgZGVjIGRpdiBkbWludCBlbW1zIGVudGVyIGVxdSBmMnhtMSBmYWJzIGZhZGQgZmFkZHAgZmJsZCBmYnN0cCBmY2hzIGZjbGV4IGZjbW92YiBmY21vdmJlIGZjbW92ZSBmY21vdm5iIGZjbW92bmJlIGZjbW92bmUgZmNtb3ZudSBmY21vdnUgZmNvbSBmY29taSBmY29taXAgZmNvbXAgZmNvbXBwIGZjb3MgZmRlY3N0cCBmZGlzaSBmZGl2IGZkaXZwIGZkaXZyIGZkaXZycCBmZW1tcyBmZW5pIGZmcmVlIGZmcmVlcCBmaWFkZCBmaWNvbSBmaWNvbXAgZmlkaXYgZmlkaXZyIGZpbGQgZmltdWwgZmluY3N0cCBmaW5pdCBmaXN0IGZpc3RwIGZpc3R0cCBmaXN1YiBmaXN1YnIgZmxkIGZsZDEgZmxkY3cgZmxkZW52IGZsZGwyZSBmbGRsMnQgZmxkbGcyIGZsZGxuMiBmbGRwaSBmbGR6IGZtdWwgZm11bHAgZm5jbGV4IGZuZGlzaSBmbmVuaSBmbmluaXQgZm5vcCBmbnNhdmUgZm5zdGN3IGZuc3RlbnYgZm5zdHN3IGZwYXRhbiBmcHJlbSBmcHJlbTEgZnB0YW4gZnJuZGludCBmcnN0b3IgZnNhdmUgZnNjYWxlIGZzZXRwbSBmc2luIGZzaW5jb3MgZnNxcnQgZnN0IGZzdGN3IGZzdGVudiBmc3RwIGZzdHN3IGZzdWIgZnN1YnAgZnN1YnIgZnN1YnJwIGZ0c3QgZnVjb20gZnVjb21pIGZ1Y29taXAgZnVjb21wIGZ1Y29tcHAgZnhhbSBmeGNoIGZ4dHJhY3QgZnlsMnggZnlsMnhwMSBobHQgaWJ0cyBpY2VicCBpZGl2IGltdWwgaW4gaW5jIGluY2JpbiBpbnNiIGluc2QgaW5zdyBpbnQgaW50MDEgaW50MSBpbnQwMyBpbnQzIGludG8gaW52ZCBpbnZwY2lkIGludmxwZyBpbnZscGdhIGlyZXQgaXJldGQgaXJldHEgaXJldHcgamN4eiBqZWN4eiBqcmN4eiBqbXAgam1wZSBsYWhmIGxhciBsZHMgbGVhIGxlYXZlIGxlcyBsZmVuY2UgbGZzIGxnZHQgbGdzIGxpZHQgbGxkdCBsbXN3IGxvYWRhbGwgbG9hZGFsbDI4NiBsb2RzYiBsb2RzZCBsb2RzcSBsb2RzdyBsb29wIGxvb3BlIGxvb3BuZSBsb29wbnogbG9vcHogbHNsIGxzcyBsdHIgbWZlbmNlIG1vbml0b3IgbW92IG1vdmQgbW92cSBtb3ZzYiBtb3ZzZCBtb3ZzcSBtb3ZzdyBtb3ZzeCBtb3ZzeGQgbW92enggbXVsIG13YWl0IG5lZyBub3Agbm90IG9yIG91dCBvdXRzYiBvdXRzZCBvdXRzdyBwYWNrc3NkdyBwYWNrc3N3YiBwYWNrdXN3YiBwYWRkYiBwYWRkZCBwYWRkc2IgcGFkZHNpdyBwYWRkc3cgcGFkZHVzYiBwYWRkdXN3IHBhZGR3IHBhbmQgcGFuZG4gcGF1c2UgcGF2ZWIgcGF2Z3VzYiBwY21wZXFiIHBjbXBlcWQgcGNtcGVxdyBwY21wZ3RiIHBjbXBndGQgcGNtcGd0dyBwZGlzdGliIHBmMmlkIHBmYWNjIHBmYWRkIHBmY21wZXEgcGZjbXBnZSBwZmNtcGd0IHBmbWF4IHBmbWluIHBmbXVsIHBmcmNwIHBmcmNwaXQxIHBmcmNwaXQyIHBmcnNxaXQxIHBmcnNxcnQgcGZzdWIgcGZzdWJyIHBpMmZkIHBtYWNocml3IHBtYWRkd2QgcG1hZ3cgcG11bGhyaXcgcG11bGhyd2EgcG11bGhyd2MgcG11bGh3IHBtdWxsdyBwbXZnZXpiIHBtdmx6YiBwbXZuemIgcG12emIgcG9wIHBvcGEgcG9wYWQgcG9wYXcgcG9wZiBwb3BmZCBwb3BmcSBwb3BmdyBwb3IgcHJlZmV0Y2ggcHJlZmV0Y2h3IHBzbGxkIHBzbGxxIHBzbGx3IHBzcmFkIHBzcmF3IHBzcmxkIHBzcmxxIHBzcmx3IHBzdWJiIHBzdWJkIHBzdWJzYiBwc3Vic2l3IHBzdWJzdyBwc3VidXNiIHBzdWJ1c3cgcHN1YncgcHVucGNraGJ3IHB1bnBja2hkcSBwdW5wY2tod2QgcHVucGNrbGJ3IHB1bnBja2xkcSBwdW5wY2tsd2QgcHVzaCBwdXNoYSBwdXNoYWQgcHVzaGF3IHB1c2hmIHB1c2hmZCBwdXNoZnEgcHVzaGZ3IHB4b3IgcmNsIHJjciByZHNociByZG1zciByZHBtYyByZHRzYyByZHRzY3AgcmV0IHJldGYgcmV0biByb2wgcm9yIHJkbSByc2RjIHJzbGR0IHJzbSByc3RzIHNhaGYgc2FsIHNhbGMgc2FyIHNiYiBzY2FzYiBzY2FzZCBzY2FzcSBzY2FzdyBzZmVuY2Ugc2dkdCBzaGwgc2hsZCBzaHIgc2hyZCBzaWR0IHNsZHQgc2tpbml0IHNtaSBzbWludCBzbWludG9sZCBzbXN3IHN0YyBzdGQgc3RpIHN0b3NiIHN0b3NkIHN0b3NxIHN0b3N3IHN0ciBzdWIgc3ZkYyBzdmxkdCBzdnRzIHN3YXBncyBzeXNjYWxsIHN5c2VudGVyIHN5c2V4aXQgc3lzcmV0IHRlc3QgdWQwIHVkMSB1ZDJiIHVkMiB1ZDJhIHVtb3YgdmVyciB2ZXJ3IGZ3YWl0IHdiaW52ZCB3cnNociB3cm1zciB4YWRkIHhidHMgeGNoZyB4bGF0YiB4bGF0IHhvciBjbW92ZSBjbW92eiBjbW92bmUgY21vdm56IGNtb3ZhIGNtb3ZuYmUgY21vdmFlIGNtb3ZuYiBjbW92YiBjbW92bmFlIGNtb3ZiZSBjbW92bmEgY21vdmcgY21vdm5sZSBjbW92Z2UgY21vdm5sIGNtb3ZsIGNtb3ZuZ2UgY21vdmxlIGNtb3ZuZyBjbW92YyBjbW92bmMgY21vdm8gY21vdm5vIGNtb3ZzIGNtb3ZucyBjbW92cCBjbW92cGUgY21vdm5wIGNtb3ZwbyBqZSBqeiBqbmUgam56IGphIGpuYmUgamFlIGpuYiBqYiBqbmFlIGpiZSBqbmEgamcgam5sZSBqZ2Ugam5sIGpsIGpuZ2UgamxlIGpuZyBqYyBqbmMgam8gam5vIGpzIGpucyBqcG8gam5wIGpwZSBqcCBzZXRlIHNldHogc2V0bmUgc2V0bnogc2V0YSBzZXRuYmUgc2V0YWUgc2V0bmIgc2V0bmMgc2V0YiBzZXRuYWUgc2V0Y3NldCBzZXRiZSBzZXRuYSBzZXRnIHNldG5sZSBzZXRnZSBzZXRubCBzZXRsIHNldG5nZSBzZXRsZSBzZXRuZyBzZXRzIHNldG5zIHNldG8gc2V0bm8gc2V0cGUgc2V0cCBzZXRwbyBzZXRucCBhZGRwcyBhZGRzcyBhbmRucHMgYW5kcHMgY21wZXFwcyBjbXBlcXNzIGNtcGxlcHMgY21wbGVzcyBjbXBsdHBzIGNtcGx0c3MgY21wbmVxcHMgY21wbmVxc3MgY21wbmxlcHMgY21wbmxlc3MgY21wbmx0cHMgY21wbmx0c3MgY21wb3JkcHMgY21wb3Jkc3MgY21wdW5vcmRwcyBjbXB1bm9yZHNzIGNtcHBzIGNtcHNzIGNvbWlzcyBjdnRwaTJwcyBjdnRwczJwaSBjdnRzaTJzcyBjdnRzczJzaSBjdnR0cHMycGkgY3Z0dHNzMnNpIGRpdnBzIGRpdnNzIGxkbXhjc3IgbWF4cHMgbWF4c3MgbWlucHMgbWluc3MgbW92YXBzIG1vdmhwcyBtb3ZsaHBzIG1vdmxwcyBtb3ZobHBzIG1vdm1za3BzIG1vdm50cHMgbW92c3MgbW92dXBzIG11bHBzIG11bHNzIG9ycHMgcmNwcHMgcmNwc3MgcnNxcnRwcyByc3FydHNzIHNodWZwcyBzcXJ0cHMgc3FydHNzIHN0bXhjc3Igc3VicHMgc3Vic3MgdWNvbWlzcyB1bnBja2hwcyB1bnBja2xwcyB4b3JwcyBmeHJzdG9yIGZ4cnN0b3I2NCBmeHNhdmUgZnhzYXZlNjQgeGdldGJ2IHhzZXRidiB4c2F2ZSB4c2F2ZTY0IHhzYXZlb3B0IHhzYXZlb3B0NjQgeHJzdG9yIHhyc3RvcjY0IHByZWZldGNobnRhIHByZWZldGNodDAgcHJlZmV0Y2h0MSBwcmVmZXRjaHQyIG1hc2ttb3ZxIG1vdm50cSBwYXZnYiBwYXZndyBwZXh0cncgcGluc3J3IHBtYXhzdyBwbWF4dWIgcG1pbnN3IHBtaW51YiBwbW92bXNrYiBwbXVsaHV3IHBzYWRidyBwc2h1ZncgcGYyaXcgcGZuYWNjIHBmcG5hY2MgcGkyZncgcHN3YXBkIG1hc2ttb3ZkcXUgY2xmbHVzaCBtb3ZudGRxIG1vdm50aSBtb3ZudHBkIG1vdmRxYSBtb3ZkcXUgbW92ZHEycSBtb3ZxMmRxIHBhZGRxIHBtdWx1ZHEgcHNodWZkIHBzaHVmaHcgcHNodWZsdyBwc2xsZHEgcHNybGRxIHBzdWJxIHB1bnBja2hxZHEgcHVucGNrbHFkcSBhZGRwZCBhZGRzZCBhbmRucGQgYW5kcGQgY21wZXFwZCBjbXBlcXNkIGNtcGxlcGQgY21wbGVzZCBjbXBsdHBkIGNtcGx0c2QgY21wbmVxcGQgY21wbmVxc2QgY21wbmxlcGQgY21wbmxlc2QgY21wbmx0cGQgY21wbmx0c2QgY21wb3JkcGQgY21wb3Jkc2QgY21wdW5vcmRwZCBjbXB1bm9yZHNkIGNtcHBkIGNvbWlzZCBjdnRkcTJwZCBjdnRkcTJwcyBjdnRwZDJkcSBjdnRwZDJwaSBjdnRwZDJwcyBjdnRwaTJwZCBjdnRwczJkcSBjdnRwczJwZCBjdnRzZDJzaSBjdnRzZDJzcyBjdnRzaTJzZCBjdnRzczJzZCBjdnR0cGQycGkgY3Z0dHBkMmRxIGN2dHRwczJkcSBjdnR0c2Qyc2kgZGl2cGQgZGl2c2QgbWF4cGQgbWF4c2QgbWlucGQgbWluc2QgbW92YXBkIG1vdmhwZCBtb3ZscGQgbW92bXNrcGQgbW92dXBkIG11bHBkIG11bHNkIG9ycGQgc2h1ZnBkIHNxcnRwZCBzcXJ0c2Qgc3VicGQgc3Vic2QgdWNvbWlzZCB1bnBja2hwZCB1bnBja2xwZCB4b3JwZCBhZGRzdWJwZCBhZGRzdWJwcyBoYWRkcGQgaGFkZHBzIGhzdWJwZCBoc3VicHMgbGRkcXUgbW92ZGR1cCBtb3ZzaGR1cCBtb3ZzbGR1cCBjbGdpIHN0Z2kgdm1jYWxsIHZtY2xlYXIgdm1mdW5jIHZtbGF1bmNoIHZtbG9hZCB2bW1jYWxsIHZtcHRybGQgdm1wdHJzdCB2bXJlYWQgdm1yZXN1bWUgdm1ydW4gdm1zYXZlIHZtd3JpdGUgdm14b2ZmIHZteG9uIGludmVwdCBpbnZ2cGlkIHBhYnNiIHBhYnN3IHBhYnNkIHBhbGlnbnIgcGhhZGR3IHBoYWRkZCBwaGFkZHN3IHBoc3VidyBwaHN1YmQgcGhzdWJzdyBwbWFkZHVic3cgcG11bGhyc3cgcHNodWZiIHBzaWduYiBwc2lnbncgcHNpZ25kIGV4dHJxIGluc2VydHEgbW92bnRzZCBtb3ZudHNzIGx6Y250IGJsZW5kcGQgYmxlbmRwcyBibGVuZHZwZCBibGVuZHZwcyBkcHBkIGRwcHMgZXh0cmFjdHBzIGluc2VydHBzIG1vdm50ZHFhIG1wc2FkYncgcGFja3VzZHcgcGJsZW5kdmIgcGJsZW5kdyBwY21wZXFxIHBleHRyYiBwZXh0cmQgcGV4dHJxIHBobWlucG9zdXcgcGluc3JiIHBpbnNyZCBwaW5zcnEgcG1heHNiIHBtYXhzZCBwbWF4dWQgcG1heHV3IHBtaW5zYiBwbWluc2QgcG1pbnVkIHBtaW51dyBwbW92c3hidyBwbW92c3hiZCBwbW92c3hicSBwbW92c3h3ZCBwbW92c3h3cSBwbW92c3hkcSBwbW92enhidyBwbW92enhiZCBwbW92enhicSBwbW92enh3ZCBwbW92enh3cSBwbW92enhkcSBwbXVsZHEgcG11bGxkIHB0ZXN0IHJvdW5kcGQgcm91bmRwcyByb3VuZHNkIHJvdW5kc3MgY3JjMzIgcGNtcGVzdHJpIHBjbXBlc3RybSBwY21waXN0cmkgcGNtcGlzdHJtIHBjbXBndHEgcG9wY250IGdldHNlYyBwZnJjcHYgcGZyc3FydHYgbW92YmUgYWVzZW5jIGFlc2VuY2xhc3QgYWVzZGVjIGFlc2RlY2xhc3QgYWVzaW1jIGFlc2tleWdlbmFzc2lzdCB2YWVzZW5jIHZhZXNlbmNsYXN0IHZhZXNkZWMgdmFlc2RlY2xhc3QgdmFlc2ltYyB2YWVza2V5Z2VuYXNzaXN0IHZhZGRwZCB2YWRkcHMgdmFkZHNkIHZhZGRzcyB2YWRkc3VicGQgdmFkZHN1YnBzIHZhbmRwZCB2YW5kcHMgdmFuZG5wZCB2YW5kbnBzIHZibGVuZHBkIHZibGVuZHBzIHZibGVuZHZwZCB2YmxlbmR2cHMgdmJyb2FkY2FzdHNzIHZicm9hZGNhc3RzZCB2YnJvYWRjYXN0ZjEyOCB2Y21wZXFfb3NwZCB2Y21wZXFwZCB2Y21wbHRfb3NwZCB2Y21wbHRwZCB2Y21wbGVfb3NwZCB2Y21wbGVwZCB2Y21wdW5vcmRfcXBkIHZjbXB1bm9yZHBkIHZjbXBuZXFfdXFwZCB2Y21wbmVxcGQgdmNtcG5sdF91c3BkIHZjbXBubHRwZCB2Y21wbmxlX3VzcGQgdmNtcG5sZXBkIHZjbXBvcmRfcXBkIHZjbXBvcmRwZCB2Y21wZXFfdXFwZCB2Y21wbmdlX3VzcGQgdmNtcG5nZXBkIHZjbXBuZ3RfdXNwZCB2Y21wbmd0cGQgdmNtcGZhbHNlX29xcGQgdmNtcGZhbHNlcGQgdmNtcG5lcV9vcXBkIHZjbXBnZV9vc3BkIHZjbXBnZXBkIHZjbXBndF9vc3BkIHZjbXBndHBkIHZjbXB0cnVlX3VxcGQgdmNtcHRydWVwZCB2Y21wbHRfb3FwZCB2Y21wbGVfb3FwZCB2Y21wdW5vcmRfc3BkIHZjbXBuZXFfdXNwZCB2Y21wbmx0X3VxcGQgdmNtcG5sZV91cXBkIHZjbXBvcmRfc3BkIHZjbXBlcV91c3BkIHZjbXBuZ2VfdXFwZCB2Y21wbmd0X3VxcGQgdmNtcGZhbHNlX29zcGQgdmNtcG5lcV9vc3BkIHZjbXBnZV9vcXBkIHZjbXBndF9vcXBkIHZjbXB0cnVlX3VzcGQgdmNtcHBkIHZjbXBlcV9vc3BzIHZjbXBlcXBzIHZjbXBsdF9vc3BzIHZjbXBsdHBzIHZjbXBsZV9vc3BzIHZjbXBsZXBzIHZjbXB1bm9yZF9xcHMgdmNtcHVub3JkcHMgdmNtcG5lcV91cXBzIHZjbXBuZXFwcyB2Y21wbmx0X3VzcHMgdmNtcG5sdHBzIHZjbXBubGVfdXNwcyB2Y21wbmxlcHMgdmNtcG9yZF9xcHMgdmNtcG9yZHBzIHZjbXBlcV91cXBzIHZjbXBuZ2VfdXNwcyB2Y21wbmdlcHMgdmNtcG5ndF91c3BzIHZjbXBuZ3RwcyB2Y21wZmFsc2Vfb3FwcyB2Y21wZmFsc2VwcyB2Y21wbmVxX29xcHMgdmNtcGdlX29zcHMgdmNtcGdlcHMgdmNtcGd0X29zcHMgdmNtcGd0cHMgdmNtcHRydWVfdXFwcyB2Y21wdHJ1ZXBzIHZjbXBsdF9vcXBzIHZjbXBsZV9vcXBzIHZjbXB1bm9yZF9zcHMgdmNtcG5lcV91c3BzIHZjbXBubHRfdXFwcyB2Y21wbmxlX3VxcHMgdmNtcG9yZF9zcHMgdmNtcGVxX3VzcHMgdmNtcG5nZV91cXBzIHZjbXBuZ3RfdXFwcyB2Y21wZmFsc2Vfb3NwcyB2Y21wbmVxX29zcHMgdmNtcGdlX29xcHMgdmNtcGd0X29xcHMgdmNtcHRydWVfdXNwcyB2Y21wcHMgdmNtcGVxX29zc2QgdmNtcGVxc2QgdmNtcGx0X29zc2QgdmNtcGx0c2QgdmNtcGxlX29zc2QgdmNtcGxlc2QgdmNtcHVub3JkX3FzZCB2Y21wdW5vcmRzZCB2Y21wbmVxX3Vxc2QgdmNtcG5lcXNkIHZjbXBubHRfdXNzZCB2Y21wbmx0c2QgdmNtcG5sZV91c3NkIHZjbXBubGVzZCB2Y21wb3JkX3FzZCB2Y21wb3Jkc2QgdmNtcGVxX3Vxc2QgdmNtcG5nZV91c3NkIHZjbXBuZ2VzZCB2Y21wbmd0X3Vzc2QgdmNtcG5ndHNkIHZjbXBmYWxzZV9vcXNkIHZjbXBmYWxzZXNkIHZjbXBuZXFfb3FzZCB2Y21wZ2Vfb3NzZCB2Y21wZ2VzZCB2Y21wZ3Rfb3NzZCB2Y21wZ3RzZCB2Y21wdHJ1ZV91cXNkIHZjbXB0cnVlc2QgdmNtcGx0X29xc2QgdmNtcGxlX29xc2QgdmNtcHVub3JkX3NzZCB2Y21wbmVxX3Vzc2QgdmNtcG5sdF91cXNkIHZjbXBubGVfdXFzZCB2Y21wb3JkX3NzZCB2Y21wZXFfdXNzZCB2Y21wbmdlX3Vxc2QgdmNtcG5ndF91cXNkIHZjbXBmYWxzZV9vc3NkIHZjbXBuZXFfb3NzZCB2Y21wZ2Vfb3FzZCB2Y21wZ3Rfb3FzZCB2Y21wdHJ1ZV91c3NkIHZjbXBzZCB2Y21wZXFfb3NzcyB2Y21wZXFzcyB2Y21wbHRfb3NzcyB2Y21wbHRzcyB2Y21wbGVfb3NzcyB2Y21wbGVzcyB2Y21wdW5vcmRfcXNzIHZjbXB1bm9yZHNzIHZjbXBuZXFfdXFzcyB2Y21wbmVxc3MgdmNtcG5sdF91c3NzIHZjbXBubHRzcyB2Y21wbmxlX3Vzc3MgdmNtcG5sZXNzIHZjbXBvcmRfcXNzIHZjbXBvcmRzcyB2Y21wZXFfdXFzcyB2Y21wbmdlX3Vzc3MgdmNtcG5nZXNzIHZjbXBuZ3RfdXNzcyB2Y21wbmd0c3MgdmNtcGZhbHNlX29xc3MgdmNtcGZhbHNlc3MgdmNtcG5lcV9vcXNzIHZjbXBnZV9vc3NzIHZjbXBnZXNzIHZjbXBndF9vc3NzIHZjbXBndHNzIHZjbXB0cnVlX3Vxc3MgdmNtcHRydWVzcyB2Y21wbHRfb3FzcyB2Y21wbGVfb3FzcyB2Y21wdW5vcmRfc3NzIHZjbXBuZXFfdXNzcyB2Y21wbmx0X3Vxc3MgdmNtcG5sZV91cXNzIHZjbXBvcmRfc3NzIHZjbXBlcV91c3NzIHZjbXBuZ2VfdXFzcyB2Y21wbmd0X3Vxc3MgdmNtcGZhbHNlX29zc3MgdmNtcG5lcV9vc3NzIHZjbXBnZV9vcXNzIHZjbXBndF9vcXNzIHZjbXB0cnVlX3Vzc3MgdmNtcHNzIHZjb21pc2QgdmNvbWlzcyB2Y3Z0ZHEycGQgdmN2dGRxMnBzIHZjdnRwZDJkcSB2Y3Z0cGQycHMgdmN2dHBzMmRxIHZjdnRwczJwZCB2Y3Z0c2Qyc2kgdmN2dHNkMnNzIHZjdnRzaTJzZCB2Y3Z0c2kyc3MgdmN2dHNzMnNkIHZjdnRzczJzaSB2Y3Z0dHBkMmRxIHZjdnR0cHMyZHEgdmN2dHRzZDJzaSB2Y3Z0dHNzMnNpIHZkaXZwZCB2ZGl2cHMgdmRpdnNkIHZkaXZzcyB2ZHBwZCB2ZHBwcyB2ZXh0cmFjdGYxMjggdmV4dHJhY3RwcyB2aGFkZHBkIHZoYWRkcHMgdmhzdWJwZCB2aHN1YnBzIHZpbnNlcnRmMTI4IHZpbnNlcnRwcyB2bGRkcXUgdmxkcXF1IHZsZG14Y3NyIHZtYXNrbW92ZHF1IHZtYXNrbW92cHMgdm1hc2ttb3ZwZCB2bWF4cGQgdm1heHBzIHZtYXhzZCB2bWF4c3Mgdm1pbnBkIHZtaW5wcyB2bWluc2Qgdm1pbnNzIHZtb3ZhcGQgdm1vdmFwcyB2bW92ZCB2bW92cSB2bW92ZGR1cCB2bW92ZHFhIHZtb3ZxcWEgdm1vdmRxdSB2bW92cXF1IHZtb3ZobHBzIHZtb3ZocGQgdm1vdmhwcyB2bW92bGhwcyB2bW92bHBkIHZtb3ZscHMgdm1vdm1za3BkIHZtb3Ztc2twcyB2bW92bnRkcSB2bW92bnRxcSB2bW92bnRkcWEgdm1vdm50cGQgdm1vdm50cHMgdm1vdnNkIHZtb3ZzaGR1cCB2bW92c2xkdXAgdm1vdnNzIHZtb3Z1cGQgdm1vdnVwcyB2bXBzYWRidyB2bXVscGQgdm11bHBzIHZtdWxzZCB2bXVsc3Mgdm9ycGQgdm9ycHMgdnBhYnNiIHZwYWJzdyB2cGFic2QgdnBhY2tzc3diIHZwYWNrc3NkdyB2cGFja3Vzd2IgdnBhY2t1c2R3IHZwYWRkYiB2cGFkZHcgdnBhZGRkIHZwYWRkcSB2cGFkZHNiIHZwYWRkc3cgdnBhZGR1c2IgdnBhZGR1c3cgdnBhbGlnbnIgdnBhbmQgdnBhbmRuIHZwYXZnYiB2cGF2Z3cgdnBibGVuZHZiIHZwYmxlbmR3IHZwY21wZXN0cmkgdnBjbXBlc3RybSB2cGNtcGlzdHJpIHZwY21waXN0cm0gdnBjbXBlcWIgdnBjbXBlcXcgdnBjbXBlcWQgdnBjbXBlcXEgdnBjbXBndGIgdnBjbXBndHcgdnBjbXBndGQgdnBjbXBndHEgdnBlcm1pbHBkIHZwZXJtaWxwcyB2cGVybTJmMTI4IHZwZXh0cmIgdnBleHRydyB2cGV4dHJkIHZwZXh0cnEgdnBoYWRkdyB2cGhhZGRkIHZwaGFkZHN3IHZwaG1pbnBvc3V3IHZwaHN1YncgdnBoc3ViZCB2cGhzdWJzdyB2cGluc3JiIHZwaW5zcncgdnBpbnNyZCB2cGluc3JxIHZwbWFkZHdkIHZwbWFkZHVic3cgdnBtYXhzYiB2cG1heHN3IHZwbWF4c2QgdnBtYXh1YiB2cG1heHV3IHZwbWF4dWQgdnBtaW5zYiB2cG1pbnN3IHZwbWluc2QgdnBtaW51YiB2cG1pbnV3IHZwbWludWQgdnBtb3Ztc2tiIHZwbW92c3hidyB2cG1vdnN4YmQgdnBtb3ZzeGJxIHZwbW92c3h3ZCB2cG1vdnN4d3EgdnBtb3ZzeGRxIHZwbW92enhidyB2cG1vdnp4YmQgdnBtb3Z6eGJxIHZwbW92enh3ZCB2cG1vdnp4d3EgdnBtb3Z6eGRxIHZwbXVsaHV3IHZwbXVsaHJzdyB2cG11bGh3IHZwbXVsbHcgdnBtdWxsZCB2cG11bHVkcSB2cG11bGRxIHZwb3IgdnBzYWRidyB2cHNodWZiIHZwc2h1ZmQgdnBzaHVmaHcgdnBzaHVmbHcgdnBzaWduYiB2cHNpZ253IHZwc2lnbmQgdnBzbGxkcSB2cHNybGRxIHZwc2xsdyB2cHNsbGQgdnBzbGxxIHZwc3JhdyB2cHNyYWQgdnBzcmx3IHZwc3JsZCB2cHNybHEgdnB0ZXN0IHZwc3ViYiB2cHN1YncgdnBzdWJkIHZwc3VicSB2cHN1YnNiIHZwc3Vic3cgdnBzdWJ1c2IgdnBzdWJ1c3cgdnB1bnBja2hidyB2cHVucGNraHdkIHZwdW5wY2toZHEgdnB1bnBja2hxZHEgdnB1bnBja2xidyB2cHVucGNrbHdkIHZwdW5wY2tsZHEgdnB1bnBja2xxZHEgdnB4b3IgdnJjcHBzIHZyY3BzcyB2cnNxcnRwcyB2cnNxcnRzcyB2cm91bmRwZCB2cm91bmRwcyB2cm91bmRzZCB2cm91bmRzcyB2c2h1ZnBkIHZzaHVmcHMgdnNxcnRwZCB2c3FydHBzIHZzcXJ0c2QgdnNxcnRzcyB2c3RteGNzciB2c3VicGQgdnN1YnBzIHZzdWJzZCB2c3Vic3MgdnRlc3RwcyB2dGVzdHBkIHZ1Y29taXNkIHZ1Y29taXNzIHZ1bnBja2hwZCB2dW5wY2tocHMgdnVucGNrbHBkIHZ1bnBja2xwcyB2eG9ycGQgdnhvcnBzIHZ6ZXJvYWxsIHZ6ZXJvdXBwZXIgcGNsbXVsbHFscWRxIHBjbG11bGhxbHFkcSBwY2xtdWxscWhxZHEgcGNsbXVsaHFocWRxIHBjbG11bHFkcSB2cGNsbXVsbHFscWRxIHZwY2xtdWxocWxxZHEgdnBjbG11bGxxaHFkcSB2cGNsbXVsaHFocWRxIHZwY2xtdWxxZHEgdmZtYWRkMTMycHMgdmZtYWRkMTMycGQgdmZtYWRkMzEycHMgdmZtYWRkMzEycGQgdmZtYWRkMjEzcHMgdmZtYWRkMjEzcGQgdmZtYWRkMTIzcHMgdmZtYWRkMTIzcGQgdmZtYWRkMjMxcHMgdmZtYWRkMjMxcGQgdmZtYWRkMzIxcHMgdmZtYWRkMzIxcGQgdmZtYWRkc3ViMTMycHMgdmZtYWRkc3ViMTMycGQgdmZtYWRkc3ViMzEycHMgdmZtYWRkc3ViMzEycGQgdmZtYWRkc3ViMjEzcHMgdmZtYWRkc3ViMjEzcGQgdmZtYWRkc3ViMTIzcHMgdmZtYWRkc3ViMTIzcGQgdmZtYWRkc3ViMjMxcHMgdmZtYWRkc3ViMjMxcGQgdmZtYWRkc3ViMzIxcHMgdmZtYWRkc3ViMzIxcGQgdmZtc3ViMTMycHMgdmZtc3ViMTMycGQgdmZtc3ViMzEycHMgdmZtc3ViMzEycGQgdmZtc3ViMjEzcHMgdmZtc3ViMjEzcGQgdmZtc3ViMTIzcHMgdmZtc3ViMTIzcGQgdmZtc3ViMjMxcHMgdmZtc3ViMjMxcGQgdmZtc3ViMzIxcHMgdmZtc3ViMzIxcGQgdmZtc3ViYWRkMTMycHMgdmZtc3ViYWRkMTMycGQgdmZtc3ViYWRkMzEycHMgdmZtc3ViYWRkMzEycGQgdmZtc3ViYWRkMjEzcHMgdmZtc3ViYWRkMjEzcGQgdmZtc3ViYWRkMTIzcHMgdmZtc3ViYWRkMTIzcGQgdmZtc3ViYWRkMjMxcHMgdmZtc3ViYWRkMjMxcGQgdmZtc3ViYWRkMzIxcHMgdmZtc3ViYWRkMzIxcGQgdmZubWFkZDEzMnBzIHZmbm1hZGQxMzJwZCB2Zm5tYWRkMzEycHMgdmZubWFkZDMxMnBkIHZmbm1hZGQyMTNwcyB2Zm5tYWRkMjEzcGQgdmZubWFkZDEyM3BzIHZmbm1hZGQxMjNwZCB2Zm5tYWRkMjMxcHMgdmZubWFkZDIzMXBkIHZmbm1hZGQzMjFwcyB2Zm5tYWRkMzIxcGQgdmZubXN1YjEzMnBzIHZmbm1zdWIxMzJwZCB2Zm5tc3ViMzEycHMgdmZubXN1YjMxMnBkIHZmbm1zdWIyMTNwcyB2Zm5tc3ViMjEzcGQgdmZubXN1YjEyM3BzIHZmbm1zdWIxMjNwZCB2Zm5tc3ViMjMxcHMgdmZubXN1YjIzMXBkIHZmbm1zdWIzMjFwcyB2Zm5tc3ViMzIxcGQgdmZtYWRkMTMyc3MgdmZtYWRkMTMyc2QgdmZtYWRkMzEyc3MgdmZtYWRkMzEyc2QgdmZtYWRkMjEzc3MgdmZtYWRkMjEzc2QgdmZtYWRkMTIzc3MgdmZtYWRkMTIzc2QgdmZtYWRkMjMxc3MgdmZtYWRkMjMxc2QgdmZtYWRkMzIxc3MgdmZtYWRkMzIxc2QgdmZtc3ViMTMyc3MgdmZtc3ViMTMyc2QgdmZtc3ViMzEyc3MgdmZtc3ViMzEyc2QgdmZtc3ViMjEzc3MgdmZtc3ViMjEzc2QgdmZtc3ViMTIzc3MgdmZtc3ViMTIzc2QgdmZtc3ViMjMxc3MgdmZtc3ViMjMxc2QgdmZtc3ViMzIxc3MgdmZtc3ViMzIxc2QgdmZubWFkZDEzMnNzIHZmbm1hZGQxMzJzZCB2Zm5tYWRkMzEyc3MgdmZubWFkZDMxMnNkIHZmbm1hZGQyMTNzcyB2Zm5tYWRkMjEzc2QgdmZubWFkZDEyM3NzIHZmbm1hZGQxMjNzZCB2Zm5tYWRkMjMxc3MgdmZubWFkZDIzMXNkIHZmbm1hZGQzMjFzcyB2Zm5tYWRkMzIxc2QgdmZubXN1YjEzMnNzIHZmbm1zdWIxMzJzZCB2Zm5tc3ViMzEyc3MgdmZubXN1YjMxMnNkIHZmbm1zdWIyMTNzcyB2Zm5tc3ViMjEzc2QgdmZubXN1YjEyM3NzIHZmbm1zdWIxMjNzZCB2Zm5tc3ViMjMxc3MgdmZubXN1YjIzMXNkIHZmbm1zdWIzMjFzcyB2Zm5tc3ViMzIxc2QgcmRmc2Jhc2UgcmRnc2Jhc2UgcmRyYW5kIHdyZnNiYXNlIHdyZ3NiYXNlIHZjdnRwaDJwcyB2Y3Z0cHMycGggYWRjeCBhZG94IHJkc2VlZCBjbGFjIHN0YWMgeHN0b3JlIHhjcnlwdGVjYiB4Y3J5cHRjYmMgeGNyeXB0Y3RyIHhjcnlwdGNmYiB4Y3J5cHRvZmIgbW9udG11bCB4c2hhMSB4c2hhMjU2IGxsd3BjYiBzbHdwY2IgbHdwdmFsIGx3cGlucyB2Zm1hZGRwZCB2Zm1hZGRwcyB2Zm1hZGRzZCB2Zm1hZGRzcyB2Zm1hZGRzdWJwZCB2Zm1hZGRzdWJwcyB2Zm1zdWJhZGRwZCB2Zm1zdWJhZGRwcyB2Zm1zdWJwZCB2Zm1zdWJwcyB2Zm1zdWJzZCB2Zm1zdWJzcyB2Zm5tYWRkcGQgdmZubWFkZHBzIHZmbm1hZGRzZCB2Zm5tYWRkc3MgdmZubXN1YnBkIHZmbm1zdWJwcyB2Zm5tc3Vic2QgdmZubXN1YnNzIHZmcmN6cGQgdmZyY3pwcyB2ZnJjenNkIHZmcmN6c3MgdnBjbW92IHZwY29tYiB2cGNvbWQgdnBjb21xIHZwY29tdWIgdnBjb211ZCB2cGNvbXVxIHZwY29tdXcgdnBjb213IHZwaGFkZGJkIHZwaGFkZGJxIHZwaGFkZGJ3IHZwaGFkZGRxIHZwaGFkZHViZCB2cGhhZGR1YnEgdnBoYWRkdWJ3IHZwaGFkZHVkcSB2cGhhZGR1d2QgdnBoYWRkdXdxIHZwaGFkZHdkIHZwaGFkZHdxIHZwaHN1YmJ3IHZwaHN1YmRxIHZwaHN1YndkIHZwbWFjc2RkIHZwbWFjc2RxaCB2cG1hY3NkcWwgdnBtYWNzc2RkIHZwbWFjc3NkcWggdnBtYWNzc2RxbCB2cG1hY3Nzd2QgdnBtYWNzc3d3IHZwbWFjc3dkIHZwbWFjc3d3IHZwbWFkY3Nzd2QgdnBtYWRjc3dkIHZwcGVybSB2cHJvdGIgdnByb3RkIHZwcm90cSB2cHJvdHcgdnBzaGFiIHZwc2hhZCB2cHNoYXEgdnBzaGF3IHZwc2hsYiB2cHNobGQgdnBzaGxxIHZwc2hsdyB2YnJvYWRjYXN0aTEyOCB2cGJsZW5kZCB2cGJyb2FkY2FzdGIgdnBicm9hZGNhc3R3IHZwYnJvYWRjYXN0ZCB2cGJyb2FkY2FzdHEgdnBlcm1kIHZwZXJtcGQgdnBlcm1wcyB2cGVybXEgdnBlcm0yaTEyOCB2ZXh0cmFjdGkxMjggdmluc2VydGkxMjggdnBtYXNrbW92ZCB2cG1hc2ttb3ZxIHZwc2xsdmQgdnBzbGx2cSB2cHNyYXZkIHZwc3JsdmQgdnBzcmx2cSB2Z2F0aGVyZHBkIHZnYXRoZXJxcGQgdmdhdGhlcmRwcyB2Z2F0aGVycXBzIHZwZ2F0aGVyZGQgdnBnYXRoZXJxZCB2cGdhdGhlcmRxIHZwZ2F0aGVycXEgeGFib3J0IHhiZWdpbiB4ZW5kIHh0ZXN0IGFuZG4gYmV4dHIgYmxjaSBibGNpYyBibHNpIGJsc2ljIGJsY2ZpbGwgYmxzZmlsbCBibGNtc2sgYmxzbXNrIGJsc3IgYmxjcyBiemhpIG11bHggcGRlcCBwZXh0IHJvcnggc2FyeCBzaGx4IHNocnggdHpjbnQgdHptc2sgdDFtc2tjIHZhbGlnbmQgdmFsaWducSB2YmxlbmRtcGQgdmJsZW5kbXBzIHZicm9hZGNhc3RmMzJ4NCB2YnJvYWRjYXN0ZjY0eDQgdmJyb2FkY2FzdGkzMng0IHZicm9hZGNhc3RpNjR4NCB2Y29tcHJlc3NwZCB2Y29tcHJlc3NwcyB2Y3Z0cGQydWRxIHZjdnRwczJ1ZHEgdmN2dHNkMnVzaSB2Y3Z0c3MydXNpIHZjdnR0cGQydWRxIHZjdnR0cHMydWRxIHZjdnR0c2QydXNpIHZjdnR0c3MydXNpIHZjdnR1ZHEycGQgdmN2dHVkcTJwcyB2Y3Z0dXNpMnNkIHZjdnR1c2kyc3MgdmV4cGFuZHBkIHZleHBhbmRwcyB2ZXh0cmFjdGYzMng0IHZleHRyYWN0ZjY0eDQgdmV4dHJhY3RpMzJ4NCB2ZXh0cmFjdGk2NHg0IHZmaXh1cGltbXBkIHZmaXh1cGltbXBzIHZmaXh1cGltbXNkIHZmaXh1cGltbXNzIHZnZXRleHBwZCB2Z2V0ZXhwcHMgdmdldGV4cHNkIHZnZXRleHBzcyB2Z2V0bWFudHBkIHZnZXRtYW50cHMgdmdldG1hbnRzZCB2Z2V0bWFudHNzIHZpbnNlcnRmMzJ4NCB2aW5zZXJ0ZjY0eDQgdmluc2VydGkzMng0IHZpbnNlcnRpNjR4NCB2bW92ZHFhMzIgdm1vdmRxYTY0IHZtb3ZkcXUzMiB2bW92ZHF1NjQgdnBhYnNxIHZwYW5kZCB2cGFuZG5kIHZwYW5kbnEgdnBhbmRxIHZwYmxlbmRtZCB2cGJsZW5kbXEgdnBjbXBsdGQgdnBjbXBsZWQgdnBjbXBuZXFkIHZwY21wbmx0ZCB2cGNtcG5sZWQgdnBjbXBkIHZwY21wbHRxIHZwY21wbGVxIHZwY21wbmVxcSB2cGNtcG5sdHEgdnBjbXBubGVxIHZwY21wcSB2cGNtcGVxdWQgdnBjbXBsdHVkIHZwY21wbGV1ZCB2cGNtcG5lcXVkIHZwY21wbmx0dWQgdnBjbXBubGV1ZCB2cGNtcHVkIHZwY21wZXF1cSB2cGNtcGx0dXEgdnBjbXBsZXVxIHZwY21wbmVxdXEgdnBjbXBubHR1cSB2cGNtcG5sZXVxIHZwY21wdXEgdnBjb21wcmVzc2QgdnBjb21wcmVzc3EgdnBlcm1pMmQgdnBlcm1pMnBkIHZwZXJtaTJwcyB2cGVybWkycSB2cGVybXQyZCB2cGVybXQycGQgdnBlcm10MnBzIHZwZXJtdDJxIHZwZXhwYW5kZCB2cGV4cGFuZHEgdnBtYXhzcSB2cG1heHVxIHZwbWluc3EgdnBtaW51cSB2cG1vdmRiIHZwbW92ZHcgdnBtb3ZxYiB2cG1vdnFkIHZwbW92cXcgdnBtb3ZzZGIgdnBtb3ZzZHcgdnBtb3ZzcWIgdnBtb3ZzcWQgdnBtb3ZzcXcgdnBtb3Z1c2RiIHZwbW92dXNkdyB2cG1vdnVzcWIgdnBtb3Z1c3FkIHZwbW92dXNxdyB2cG9yZCB2cG9ycSB2cHJvbGQgdnByb2xxIHZwcm9sdmQgdnByb2x2cSB2cHJvcmQgdnByb3JxIHZwcm9ydmQgdnByb3J2cSB2cHNjYXR0ZXJkZCB2cHNjYXR0ZXJkcSB2cHNjYXR0ZXJxZCB2cHNjYXR0ZXJxcSB2cHNyYXEgdnBzcmF2cSB2cHRlcm5sb2dkIHZwdGVybmxvZ3EgdnB0ZXN0bWQgdnB0ZXN0bXEgdnB0ZXN0bm1kIHZwdGVzdG5tcSB2cHhvcmQgdnB4b3JxIHZyY3AxNHBkIHZyY3AxNHBzIHZyY3AxNHNkIHZyY3AxNHNzIHZybmRzY2FsZXBkIHZybmRzY2FsZXBzIHZybmRzY2FsZXNkIHZybmRzY2FsZXNzIHZyc3FydDE0cGQgdnJzcXJ0MTRwcyB2cnNxcnQxNHNkIHZyc3FydDE0c3MgdnNjYWxlZnBkIHZzY2FsZWZwcyB2c2NhbGVmc2QgdnNjYWxlZnNzIHZzY2F0dGVyZHBkIHZzY2F0dGVyZHBzIHZzY2F0dGVycXBkIHZzY2F0dGVycXBzIHZzaHVmZjMyeDQgdnNodWZmNjR4MiB2c2h1ZmkzMng0IHZzaHVmaTY0eDIga2FuZG53IGthbmR3IGttb3Z3IGtub3R3IGtvcnRlc3R3IGtvcncga3NoaWZ0bHcga3NoaWZ0cncga3VucGNrYncga3hub3J3IGt4b3J3IHZwYnJvYWRjYXN0bWIycSB2cGJyb2FkY2FzdG13MmQgdnBjb25mbGljdGQgdnBjb25mbGljdHEgdnBsemNudGQgdnBsemNudHEgdmV4cDJwZCB2ZXhwMnBzIHZyY3AyOHBkIHZyY3AyOHBzIHZyY3AyOHNkIHZyY3AyOHNzIHZyc3FydDI4cGQgdnJzcXJ0MjhwcyB2cnNxcnQyOHNkIHZyc3FydDI4c3MgdmdhdGhlcnBmMGRwZCB2Z2F0aGVycGYwZHBzIHZnYXRoZXJwZjBxcGQgdmdhdGhlcnBmMHFwcyB2Z2F0aGVycGYxZHBkIHZnYXRoZXJwZjFkcHMgdmdhdGhlcnBmMXFwZCB2Z2F0aGVycGYxcXBzIHZzY2F0dGVycGYwZHBkIHZzY2F0dGVycGYwZHBzIHZzY2F0dGVycGYwcXBkIHZzY2F0dGVycGYwcXBzIHZzY2F0dGVycGYxZHBkIHZzY2F0dGVycGYxZHBzIHZzY2F0dGVycGYxcXBkIHZzY2F0dGVycGYxcXBzIHByZWZldGNod3QxIGJuZG1rIGJuZGNsIGJuZGN1IGJuZGNuIGJuZG1vdiBibmRsZHggYm5kc3R4IHNoYTFybmRzNCBzaGExbmV4dGUgc2hhMW1zZzEgc2hhMW1zZzIgc2hhMjU2cm5kczIgc2hhMjU2bXNnMSBzaGEyNTZtc2cyIGhpbnRfbm9wMCBoaW50X25vcDEgaGludF9ub3AyIGhpbnRfbm9wMyBoaW50X25vcDQgaGludF9ub3A1IGhpbnRfbm9wNiBoaW50X25vcDcgaGludF9ub3A4IGhpbnRfbm9wOSBoaW50X25vcDEwIGhpbnRfbm9wMTEgaGludF9ub3AxMiBoaW50X25vcDEzIGhpbnRfbm9wMTQgaGludF9ub3AxNSBoaW50X25vcDE2IGhpbnRfbm9wMTcgaGludF9ub3AxOCBoaW50X25vcDE5IGhpbnRfbm9wMjAgaGludF9ub3AyMSBoaW50X25vcDIyIGhpbnRfbm9wMjMgaGludF9ub3AyNCBoaW50X25vcDI1IGhpbnRfbm9wMjYgaGludF9ub3AyNyBoaW50X25vcDI4IGhpbnRfbm9wMjkgaGludF9ub3AzMCBoaW50X25vcDMxIGhpbnRfbm9wMzIgaGludF9ub3AzMyBoaW50X25vcDM0IGhpbnRfbm9wMzUgaGludF9ub3AzNiBoaW50X25vcDM3IGhpbnRfbm9wMzggaGludF9ub3AzOSBoaW50X25vcDQwIGhpbnRfbm9wNDEgaGludF9ub3A0MiBoaW50X25vcDQzIGhpbnRfbm9wNDQgaGludF9ub3A0NSBoaW50X25vcDQ2IGhpbnRfbm9wNDcgaGludF9ub3A0OCBoaW50X25vcDQ5IGhpbnRfbm9wNTAgaGludF9ub3A1MSBoaW50X25vcDUyIGhpbnRfbm9wNTMgaGludF9ub3A1NCBoaW50X25vcDU1IGhpbnRfbm9wNTYgaGludF9ub3A1NyBoaW50X25vcDU4IGhpbnRfbm9wNTkgaGludF9ub3A2MCBoaW50X25vcDYxIGhpbnRfbm9wNjIgaGludF9ub3A2MycsXG4gICAgICBidWlsdF9pbjpcbiAgICAgICAgLy8gSW5zdHJ1Y3Rpb24gcG9pbnRlclxuICAgICAgICAnaXAgZWlwIHJpcCAnXG4gICAgICAgIC8vIDgtYml0IHJlZ2lzdGVyc1xuICAgICAgICArICdhbCBhaCBibCBiaCBjbCBjaCBkbCBkaCBzaWwgZGlsIGJwbCBzcGwgcjhiIHI5YiByMTBiIHIxMWIgcjEyYiByMTNiIHIxNGIgcjE1YiAnXG4gICAgICAgIC8vIDE2LWJpdCByZWdpc3RlcnNcbiAgICAgICAgKyAnYXggYnggY3ggZHggc2kgZGkgYnAgc3Agcjh3IHI5dyByMTB3IHIxMXcgcjEydyByMTN3IHIxNHcgcjE1dyAnXG4gICAgICAgIC8vIDMyLWJpdCByZWdpc3RlcnNcbiAgICAgICAgKyAnZWF4IGVieCBlY3ggZWR4IGVzaSBlZGkgZWJwIGVzcCBlaXAgcjhkIHI5ZCByMTBkIHIxMWQgcjEyZCByMTNkIHIxNGQgcjE1ZCAnXG4gICAgICAgIC8vIDY0LWJpdCByZWdpc3RlcnNcbiAgICAgICAgKyAncmF4IHJieCByY3ggcmR4IHJzaSByZGkgcmJwIHJzcCByOCByOSByMTAgcjExIHIxMiByMTMgcjE0IHIxNSAnXG4gICAgICAgIC8vIFNlZ21lbnQgcmVnaXN0ZXJzXG4gICAgICAgICsgJ2NzIGRzIGVzIGZzIGdzIHNzICdcbiAgICAgICAgLy8gRmxvYXRpbmcgcG9pbnQgc3RhY2sgcmVnaXN0ZXJzXG4gICAgICAgICsgJ3N0IHN0MCBzdDEgc3QyIHN0MyBzdDQgc3Q1IHN0NiBzdDcgJ1xuICAgICAgICAvLyBNTVggUmVnaXN0ZXJzXG4gICAgICAgICsgJ21tMCBtbTEgbW0yIG1tMyBtbTQgbW01IG1tNiBtbTcgJ1xuICAgICAgICAvLyBTU0UgcmVnaXN0ZXJzXG4gICAgICAgICsgJ3htbTAgIHhtbTEgIHhtbTIgIHhtbTMgIHhtbTQgIHhtbTUgIHhtbTYgIHhtbTcgIHhtbTggIHhtbTkgeG1tMTAgIHhtbTExIHhtbTEyIHhtbTEzIHhtbTE0IHhtbTE1ICdcbiAgICAgICAgKyAneG1tMTYgeG1tMTcgeG1tMTggeG1tMTkgeG1tMjAgeG1tMjEgeG1tMjIgeG1tMjMgeG1tMjQgeG1tMjUgeG1tMjYgeG1tMjcgeG1tMjggeG1tMjkgeG1tMzAgeG1tMzEgJ1xuICAgICAgICAvLyBBVlggcmVnaXN0ZXJzXG4gICAgICAgICsgJ3ltbTAgIHltbTEgIHltbTIgIHltbTMgIHltbTQgIHltbTUgIHltbTYgIHltbTcgIHltbTggIHltbTkgeW1tMTAgIHltbTExIHltbTEyIHltbTEzIHltbTE0IHltbTE1ICdcbiAgICAgICAgKyAneW1tMTYgeW1tMTcgeW1tMTggeW1tMTkgeW1tMjAgeW1tMjEgeW1tMjIgeW1tMjMgeW1tMjQgeW1tMjUgeW1tMjYgeW1tMjcgeW1tMjggeW1tMjkgeW1tMzAgeW1tMzEgJ1xuICAgICAgICAvLyBBVlgtNTEyRiByZWdpc3RlcnNcbiAgICAgICAgKyAnem1tMCAgem1tMSAgem1tMiAgem1tMyAgem1tNCAgem1tNSAgem1tNiAgem1tNyAgem1tOCAgem1tOSB6bW0xMCAgem1tMTEgem1tMTIgem1tMTMgem1tMTQgem1tMTUgJ1xuICAgICAgICArICd6bW0xNiB6bW0xNyB6bW0xOCB6bW0xOSB6bW0yMCB6bW0yMSB6bW0yMiB6bW0yMyB6bW0yNCB6bW0yNSB6bW0yNiB6bW0yNyB6bW0yOCB6bW0yOSB6bW0zMCB6bW0zMSAnXG4gICAgICAgIC8vIEFWWC01MTJGIG1hc2sgcmVnaXN0ZXJzXG4gICAgICAgICsgJ2swIGsxIGsyIGszIGs0IGs1IGs2IGs3ICdcbiAgICAgICAgLy8gQm91bmQgKE1QWCkgcmVnaXN0ZXJcbiAgICAgICAgKyAnYm5kMCBibmQxIGJuZDIgYm5kMyAnXG4gICAgICAgIC8vIFNwZWNpYWwgcmVnaXN0ZXJcbiAgICAgICAgKyAnY3IwIGNyMSBjcjIgY3IzIGNyNCBjcjggZHIwIGRyMSBkcjIgZHIzIGRyOCB0cjMgdHI0IHRyNSB0cjYgdHI3ICdcbiAgICAgICAgLy8gTkFTTSBhbHRyZWcgcGFja2FnZVxuICAgICAgICArICdyMCByMSByMiByMyByNCByNSByNiByNyByMGIgcjFiIHIyYiByM2IgcjRiIHI1YiByNmIgcjdiICdcbiAgICAgICAgKyAncjB3IHIxdyByMncgcjN3IHI0dyByNXcgcjZ3IHI3dyByMGQgcjFkIHIyZCByM2QgcjRkIHI1ZCByNmQgcjdkICdcbiAgICAgICAgKyAncjBoIHIxaCByMmggcjNoICdcbiAgICAgICAgKyAncjBsIHIxbCByMmwgcjNsIHI0bCByNWwgcjZsIHI3bCByOGwgcjlsIHIxMGwgcjExbCByMTJsIHIxM2wgcjE0bCByMTVsICdcblxuICAgICAgICArICdkYiBkdyBkZCBkcSBkdCBkZHEgZG8gZHkgZHogJ1xuICAgICAgICArICdyZXNiIHJlc3cgcmVzZCByZXNxIHJlc3QgcmVzZHEgcmVzbyByZXN5IHJlc3ogJ1xuICAgICAgICArICdpbmNiaW4gZXF1IHRpbWVzICdcbiAgICAgICAgKyAnYnl0ZSB3b3JkIGR3b3JkIHF3b3JkIG5vc3BsaXQgcmVsIGFicyBzZWcgd3J0IHN0cmljdCBuZWFyIGZhciBhMzIgcHRyJyxcblxuICAgICAgbWV0YTpcbiAgICAgICAgJyVkZWZpbmUgJXhkZWZpbmUgJSsgJXVuZGVmICVkZWZzdHIgJWRlZnRvayAlYXNzaWduICVzdHJjYXQgJXN0cmxlbiAlc3Vic3RyICVyb3RhdGUgJWVsaWYgJWVsc2UgJWVuZGlmICdcbiAgICAgICAgKyAnJWlmICVpZm1hY3JvICVpZmN0eCAlaWZpZG4gJWlmaWRuaSAlaWZpZCAlaWZudW0gJWlmc3RyICVpZnRva2VuICVpZmVtcHR5ICVpZmVudiAlZXJyb3IgJXdhcm5pbmcgJWZhdGFsICVyZXAgJ1xuICAgICAgICArICclZW5kcmVwICVpbmNsdWRlICVwdXNoICVwb3AgJXJlcGwgJXBhdGhzZWFyY2ggJWRlcGVuZCAldXNlICVhcmcgJXN0YWNrc2l6ZSAlbG9jYWwgJWxpbmUgJWNvbW1lbnQgJWVuZGNvbW1lbnQgJ1xuICAgICAgICArICcubm9saXN0ICdcbiAgICAgICAgKyAnX19GSUxFX18gX19MSU5FX18gX19TRUNUX18gIF9fQklUU19fIF9fT1VUUFVUX0ZPUk1BVF9fIF9fREFURV9fIF9fVElNRV9fIF9fREFURV9OVU1fXyBfX1RJTUVfTlVNX18gJ1xuICAgICAgICArICdfX1VUQ19EQVRFX18gX19VVENfVElNRV9fIF9fVVRDX0RBVEVfTlVNX18gX19VVENfVElNRV9OVU1fXyAgX19QQVNTX18gc3RydWMgZW5kc3RydWMgaXN0cnVjIGF0IGllbmQgJ1xuICAgICAgICArICdhbGlnbiBhbGlnbmIgc2VjdGFsaWduIGRheiBub2RheiB1cCBkb3duIHplcm8gZGVmYXVsdCBvcHRpb24gYXNzdW1lIHB1YmxpYyAnXG5cbiAgICAgICAgKyAnYml0cyB1c2UxNiB1c2UzMiB1c2U2NCBkZWZhdWx0IHNlY3Rpb24gc2VnbWVudCBhYnNvbHV0ZSBleHRlcm4gZ2xvYmFsIGNvbW1vbiBjcHUgZmxvYXQgJ1xuICAgICAgICArICdfX3V0ZjE2X18gX191dGYxNmxlX18gX191dGYxNmJlX18gX191dGYzMl9fIF9fdXRmMzJsZV9fIF9fdXRmMzJiZV9fICdcbiAgICAgICAgKyAnX19mbG9hdDhfXyBfX2Zsb2F0MTZfXyBfX2Zsb2F0MzJfXyBfX2Zsb2F0NjRfXyBfX2Zsb2F0ODBtX18gX19mbG9hdDgwZV9fIF9fZmxvYXQxMjhsX18gX19mbG9hdDEyOGhfXyAnXG4gICAgICAgICsgJ19fSW5maW5pdHlfXyBfX1FOYU5fXyBfX1NOYU5fXyBJbmYgTmFOIFFOYU4gU05hTiBmbG9hdDggZmxvYXQxNiBmbG9hdDMyIGZsb2F0NjQgZmxvYXQ4MG0gZmxvYXQ4MGUgJ1xuICAgICAgICArICdmbG9hdDEyOGwgZmxvYXQxMjhoIF9fRkxPQVRfREFaX18gX19GTE9BVF9ST1VORF9fIF9fRkxPQVRfXydcbiAgICB9LFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkNPTU1FTlQoXG4gICAgICAgICc7JyxcbiAgICAgICAgJyQnLFxuICAgICAgICB7IHJlbGV2YW5jZTogMCB9XG4gICAgICApLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgIC8vIEZsb2F0IG51bWJlciBhbmQgeDg3IEJDRFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiAnXFxcXGIoPzooWzAtOV1bMC05X10qKT9cXFxcLlswLTlfXSooPzpbZUVdWystXT9bMC05X10rKT98J1xuICAgICAgICAgICAgICAgICAgICsgJygwW1h4XSk/WzAtOV1bMC05X10qKFxcXFwuWzAtOV9dKik/KD86W3BQXSg/OlsrLV0/WzAtOV9dKyk/KT8pXFxcXGInLFxuICAgICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgICAgfSxcblxuICAgICAgICAgIC8vIEhleCBudW1iZXIgaW4gJFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiAnXFxcXCRbMC05XVswLTlBLUZhLWZdKicsXG4gICAgICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgICAgICB9LFxuXG4gICAgICAgICAgLy8gTnVtYmVyIGluIEgsRCxULFEsTyxCLFkgc3VmZml4XG4gICAgICAgICAgeyBiZWdpbjogJ1xcXFxiKD86WzAtOUEtRmEtZl1bMC05QS1GYS1mX10qW0hoXXxbMC05XVswLTlfXSpbRGRUdF0/fFswLTddWzAtN19dKltRcU9vXXxbMC0xXVswLTFfXSpbQmJZeV0pXFxcXGInIH0sXG5cbiAgICAgICAgICAvLyBOdW1iZXIgaW4gWCxELFQsUSxPLEIsWSBwcmVmaXhcbiAgICAgICAgICB7IGJlZ2luOiAnXFxcXGIoPzowW1h4XVswLTlBLUZhLWZfXSt8MFtEZFR0XVswLTlfXSt8MFtRcU9vXVswLTdfXSt8MFtCYll5XVswLTFfXSspXFxcXGInIH1cbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIC8vIERvdWJsZSBxdW90ZSBzdHJpbmdcbiAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAgLy8gU2luZ2xlLXF1b3RlZCBzdHJpbmdcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogJ1xcJycsXG4gICAgICAgICAgICBlbmQ6ICdbXlxcXFxcXFxcXVxcJydcbiAgICAgICAgICB9LFxuICAgICAgICAgIC8vIEJhY2txdW90ZWQgc3RyaW5nXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46ICdgJyxcbiAgICAgICAgICAgIGVuZDogJ1teXFxcXFxcXFxdYCdcbiAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc3ltYm9sJyxcbiAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICAvLyBHbG9iYWwgbGFiZWwgYW5kIGxvY2FsIGxhYmVsXG4gICAgICAgICAgeyBiZWdpbjogJ15cXFxccypbQS1aYS16Ll8/XVtBLVphLXowLTlfJCNAfi4/XSooOnxcXFxccytsYWJlbCknIH0sXG4gICAgICAgICAgLy8gTWFjcm8tbG9jYWwgbGFiZWxcbiAgICAgICAgICB7IGJlZ2luOiAnXlxcXFxzKiUlW0EtWmEtejAtOV8kI0B+Lj9dKjonIH1cbiAgICAgICAgXSxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAgLy8gTWFjcm8gcGFyYW1ldGVyXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3N1YnN0JyxcbiAgICAgICAgYmVnaW46ICclWzAtOV0rJyxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAgLy8gTWFjcm8gcGFyYW1ldGVyXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3N1YnN0JyxcbiAgICAgICAgYmVnaW46ICclIVxcUysnLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgICBiZWdpbjogL15cXHMqXFwuW1xcd18tXSsvXG4gICAgICB9XG4gICAgXVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHg4NmFzbTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2324\n")},2336:function(module){eval('(function webpackUniversalModuleDefinition(root, factory) {\n\tif(true)\n\t\tmodule.exports = factory();\n\telse // removed by dead control flow\n{}\n})((typeof self !== \'undefined\' ? self : this), function() {\nreturn /******/ (function() { // webpackBootstrap\n/******/ \t"use strict";\n/******/ \t// The require scope\n/******/ \tvar __nested_webpack_require_514__ = {};\n/******/ \t\n/************************************************************************/\n/******/ \t/* webpack/runtime/define property getters */\n/******/ \t!function() {\n/******/ \t\t// define getter functions for harmony exports\n/******/ \t\t__nested_webpack_require_514__.d = function(exports, definition) {\n/******/ \t\t\tfor(var key in definition) {\n/******/ \t\t\t\tif(__nested_webpack_require_514__.o(definition, key) && !__nested_webpack_require_514__.o(exports, key)) {\n/******/ \t\t\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n/******/ \t\t\t\t}\n/******/ \t\t\t}\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/hasOwnProperty shorthand */\n/******/ \t!function() {\n/******/ \t\t__nested_webpack_require_514__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }\n/******/ \t}();\n/******/ \t\n/************************************************************************/\nvar __nested_webpack_exports__ = {};\n\n// EXPORTS\n__nested_webpack_require_514__.d(__nested_webpack_exports__, {\n "default": function() { return /* binding */ katex_webpack; }\n});\n\n;// CONCATENATED MODULE: ./src/ParseError.js\n\n\n/**\n * This is the ParseError class, which is the main error thrown by KaTeX\n * functions when something has gone wrong. This is used to distinguish internal\n * errors from errors in the expression that the user provided.\n *\n * If possible, a caller should provide a Token or ParseNode with information\n * about where in the source string the problem occurred.\n */\nclass ParseError {\n // Error start position based on passed-in Token or ParseNode.\n // Length of affected text based on passed-in Token or ParseNode.\n // The underlying error message without any context added.\n constructor(message, // The error message\n token // An object providing position information\n ) {\n this.name = void 0;\n this.position = void 0;\n this.length = void 0;\n this.rawMessage = void 0;\n let error = "KaTeX parse error: " + message;\n let start;\n let end;\n const loc = token && token.loc;\n\n if (loc && loc.start <= loc.end) {\n // If we have the input and a position, make the error a bit fancier\n // Get the input\n const input = loc.lexer.input; // Prepend some information\n\n start = loc.start;\n end = loc.end;\n\n if (start === input.length) {\n error += " at end of input: ";\n } else {\n error += " at position " + (start + 1) + ": ";\n } // Underline token in question using combining underscores\n\n\n const underlined = input.slice(start, end).replace(/[^]/g, "$&\\u0332"); // Extract some context from the input and add it to the error\n\n let left;\n\n if (start > 15) {\n left = "…" + input.slice(start - 15, start);\n } else {\n left = input.slice(0, start);\n }\n\n let right;\n\n if (end + 15 < input.length) {\n right = input.slice(end, end + 15) + "…";\n } else {\n right = input.slice(end);\n }\n\n error += left + underlined + right;\n } // Some hackery to make ParseError a prototype of Error\n // See http://stackoverflow.com/a/8460753\n // $FlowFixMe\n\n\n const self = new Error(error);\n self.name = "ParseError"; // $FlowFixMe\n\n self.__proto__ = ParseError.prototype;\n self.position = start;\n\n if (start != null && end != null) {\n self.length = end - start;\n }\n\n self.rawMessage = message;\n return self;\n }\n\n} // $FlowFixMe More hackery\n\n\nParseError.prototype.__proto__ = Error.prototype;\n/* harmony default export */ var src_ParseError = (ParseError);\n;// CONCATENATED MODULE: ./src/utils.js\n/**\n * This file contains a list of utility functions which are useful in other\n * files.\n */\n\n/**\n * Return whether an element is contained in a list\n */\nconst contains = function (list, elem) {\n return list.indexOf(elem) !== -1;\n};\n/**\n * Provide a default value if a setting is undefined\n * NOTE: Couldn\'t use `T` as the output type due to facebook/flow#5022.\n */\n\n\nconst deflt = function (setting, defaultIfUndefined) {\n return setting === undefined ? defaultIfUndefined : setting;\n}; // hyphenate and escape adapted from Facebook\'s React under Apache 2 license\n\n\nconst uppercase = /([A-Z])/g;\n\nconst hyphenate = function (str) {\n return str.replace(uppercase, "-$1").toLowerCase();\n};\n\nconst ESCAPE_LOOKUP = {\n "&": "&",\n ">": ">",\n "<": "<",\n "\\"": """,\n "\'": "'"\n};\nconst ESCAPE_REGEX = /[&><"\']/g;\n/**\n * Escapes text to prevent scripting attacks.\n */\n\nfunction utils_escape(text) {\n return String(text).replace(ESCAPE_REGEX, match => ESCAPE_LOOKUP[match]);\n}\n/**\n * Sometimes we want to pull out the innermost element of a group. In most\n * cases, this will just be the group itself, but when ordgroups and colors have\n * a single element, we want to pull that out.\n */\n\n\nconst getBaseElem = function (group) {\n if (group.type === "ordgroup") {\n if (group.body.length === 1) {\n return getBaseElem(group.body[0]);\n } else {\n return group;\n }\n } else if (group.type === "color") {\n if (group.body.length === 1) {\n return getBaseElem(group.body[0]);\n } else {\n return group;\n }\n } else if (group.type === "font") {\n return getBaseElem(group.body);\n } else {\n return group;\n }\n};\n/**\n * TeXbook algorithms often reference "character boxes", which are simply groups\n * with a single character in them. To decide if something is a character box,\n * we find its innermost group, and see if it is a single character.\n */\n\n\nconst isCharacterBox = function (group) {\n const baseElem = getBaseElem(group); // These are all they types of groups which hold single characters\n\n return baseElem.type === "mathord" || baseElem.type === "textord" || baseElem.type === "atom";\n};\n\nconst assert = function (value) {\n if (!value) {\n throw new Error(\'Expected non-null, but got \' + String(value));\n }\n\n return value;\n};\n/**\n * Return the protocol of a URL, or "_relative" if the URL does not specify a\n * protocol (and thus is relative), or `null` if URL has invalid protocol\n * (so should be outright rejected).\n */\n\nconst protocolFromUrl = function (url) {\n // Check for possible leading protocol.\n // https://url.spec.whatwg.org/#url-parsing strips leading whitespace\n // (U+20) or C0 control (U+00-U+1F) characters.\n // eslint-disable-next-line no-control-regex\n const protocol = /^[\\x00-\\x20]*([^\\\\/#?]*?)(:|�*58|�*3a|&colon)/i.exec(url);\n\n if (!protocol) {\n return "_relative";\n } // Reject weird colons\n\n\n if (protocol[2] !== ":") {\n return null;\n } // Reject invalid characters in scheme according to\n // https://datatracker.ietf.org/doc/html/rfc3986#section-3.1\n\n\n if (!/^[a-zA-Z][a-zA-Z0-9+\\-.]*$/.test(protocol[1])) {\n return null;\n } // Lowercase the protocol\n\n\n return protocol[1].toLowerCase();\n};\n/* harmony default export */ var utils = ({\n contains,\n deflt,\n escape: utils_escape,\n hyphenate,\n getBaseElem,\n isCharacterBox,\n protocolFromUrl\n});\n;// CONCATENATED MODULE: ./src/Settings.js\n/* eslint no-console:0 */\n\n/**\n * This is a module for storing settings passed into KaTeX. It correctly handles\n * default settings.\n */\n\n\n\n// TODO: automatically generate documentation\n// TODO: check all properties on Settings exist\n// TODO: check the type of a property on Settings matches\nconst SETTINGS_SCHEMA = {\n displayMode: {\n type: "boolean",\n description: "Render math in display mode, which puts the math in " + "display style (so \\\\int and \\\\sum are large, for example), and " + "centers the math on the page on its own line.",\n cli: "-d, --display-mode"\n },\n output: {\n type: {\n enum: ["htmlAndMathml", "html", "mathml"]\n },\n description: "Determines the markup language of the output.",\n cli: "-F, --format "\n },\n leqno: {\n type: "boolean",\n description: "Render display math in leqno style (left-justified tags)."\n },\n fleqn: {\n type: "boolean",\n description: "Render display math flush left."\n },\n throwOnError: {\n type: "boolean",\n default: true,\n cli: "-t, --no-throw-on-error",\n cliDescription: "Render errors (in the color given by --error-color) ins" + "tead of throwing a ParseError exception when encountering an error."\n },\n errorColor: {\n type: "string",\n default: "#cc0000",\n cli: "-c, --error-color ",\n cliDescription: "A color string given in the format \'rgb\' or \'rrggbb\' " + "(no #). This option determines the color of errors rendered by the " + "-t option.",\n cliProcessor: color => "#" + color\n },\n macros: {\n type: "object",\n cli: "-m, --macro ",\n cliDescription: "Define custom macro of the form \'\\\\foo:expansion\' (use " + "multiple -m arguments for multiple macros).",\n cliDefault: [],\n cliProcessor: (def, defs) => {\n defs.push(def);\n return defs;\n }\n },\n minRuleThickness: {\n type: "number",\n description: "Specifies a minimum thickness, in ems, for fraction lines," + " `\\\\sqrt` top lines, `{array}` vertical lines, `\\\\hline`, " + "`\\\\hdashline`, `\\\\underline`, `\\\\overline`, and the borders of " + "`\\\\fbox`, `\\\\boxed`, and `\\\\fcolorbox`.",\n processor: t => Math.max(0, t),\n cli: "--min-rule-thickness ",\n cliProcessor: parseFloat\n },\n colorIsTextColor: {\n type: "boolean",\n description: "Makes \\\\color behave like LaTeX\'s 2-argument \\\\textcolor, " + "instead of LaTeX\'s one-argument \\\\color mode change.",\n cli: "-b, --color-is-text-color"\n },\n strict: {\n type: [{\n enum: ["warn", "ignore", "error"]\n }, "boolean", "function"],\n description: "Turn on strict / LaTeX faithfulness mode, which throws an " + "error if the input uses features that are not supported by LaTeX.",\n cli: "-S, --strict",\n cliDefault: false\n },\n trust: {\n type: ["boolean", "function"],\n description: "Trust the input, enabling all HTML features such as \\\\url.",\n cli: "-T, --trust"\n },\n maxSize: {\n type: "number",\n default: Infinity,\n description: "If non-zero, all user-specified sizes, e.g. in " + "\\\\rule{500em}{500em}, will be capped to maxSize ems. Otherwise, " + "elements and spaces can be arbitrarily large",\n processor: s => Math.max(0, s),\n cli: "-s, --max-size ",\n cliProcessor: parseInt\n },\n maxExpand: {\n type: "number",\n default: 1000,\n description: "Limit the number of macro expansions to the specified " + "number, to prevent e.g. infinite macro loops. If set to Infinity, " + "the macro expander will try to fully expand as in LaTeX.",\n processor: n => Math.max(0, n),\n cli: "-e, --max-expand ",\n cliProcessor: n => n === "Infinity" ? Infinity : parseInt(n)\n },\n globalGroup: {\n type: "boolean",\n cli: false\n }\n};\n\nfunction getDefaultValue(schema) {\n if (schema.default) {\n return schema.default;\n }\n\n const type = schema.type;\n const defaultType = Array.isArray(type) ? type[0] : type;\n\n if (typeof defaultType !== \'string\') {\n return defaultType.enum[0];\n }\n\n switch (defaultType) {\n case \'boolean\':\n return false;\n\n case \'string\':\n return \'\';\n\n case \'number\':\n return 0;\n\n case \'object\':\n return {};\n }\n}\n/**\n * The main Settings object\n *\n * The current options stored are:\n * - displayMode: Whether the expression should be typeset as inline math\n * (false, the default), meaning that the math starts in\n * \\textstyle and is placed in an inline-block); or as display\n * math (true), meaning that the math starts in \\displaystyle\n * and is placed in a block with vertical margin.\n */\n\n\nclass Settings {\n constructor(options) {\n this.displayMode = void 0;\n this.output = void 0;\n this.leqno = void 0;\n this.fleqn = void 0;\n this.throwOnError = void 0;\n this.errorColor = void 0;\n this.macros = void 0;\n this.minRuleThickness = void 0;\n this.colorIsTextColor = void 0;\n this.strict = void 0;\n this.trust = void 0;\n this.maxSize = void 0;\n this.maxExpand = void 0;\n this.globalGroup = void 0;\n // allow null options\n options = options || {};\n\n for (const prop in SETTINGS_SCHEMA) {\n if (SETTINGS_SCHEMA.hasOwnProperty(prop)) {\n // $FlowFixMe\n const schema = SETTINGS_SCHEMA[prop]; // TODO: validate options\n // $FlowFixMe\n\n this[prop] = options[prop] !== undefined ? schema.processor ? schema.processor(options[prop]) : options[prop] : getDefaultValue(schema);\n }\n }\n }\n /**\n * Report nonstrict (non-LaTeX-compatible) input.\n * Can safely not be called if `this.strict` is false in JavaScript.\n */\n\n\n reportNonstrict(errorCode, errorMsg, token) {\n let strict = this.strict;\n\n if (typeof strict === "function") {\n // Allow return value of strict function to be boolean or string\n // (or null/undefined, meaning no further processing).\n strict = strict(errorCode, errorMsg, token);\n }\n\n if (!strict || strict === "ignore") {\n return;\n } else if (strict === true || strict === "error") {\n throw new src_ParseError("LaTeX-incompatible input and strict mode is set to \'error\': " + (errorMsg + " [" + errorCode + "]"), token);\n } else if (strict === "warn") {\n typeof console !== "undefined" && console.warn("LaTeX-incompatible input and strict mode is set to \'warn\': " + (errorMsg + " [" + errorCode + "]"));\n } else {\n // won\'t happen in type-safe code\n typeof console !== "undefined" && console.warn("LaTeX-incompatible input and strict mode is set to " + ("unrecognized \'" + strict + "\': " + errorMsg + " [" + errorCode + "]"));\n }\n }\n /**\n * Check whether to apply strict (LaTeX-adhering) behavior for unusual\n * input (like `\\\\`). Unlike `nonstrict`, will not throw an error;\n * instead, "error" translates to a return value of `true`, while "ignore"\n * translates to a return value of `false`. May still print a warning:\n * "warn" prints a warning and returns `false`.\n * This is for the second category of `errorCode`s listed in the README.\n */\n\n\n useStrictBehavior(errorCode, errorMsg, token) {\n let strict = this.strict;\n\n if (typeof strict === "function") {\n // Allow return value of strict function to be boolean or string\n // (or null/undefined, meaning no further processing).\n // But catch any exceptions thrown by function, treating them\n // like "error".\n try {\n strict = strict(errorCode, errorMsg, token);\n } catch (error) {\n strict = "error";\n }\n }\n\n if (!strict || strict === "ignore") {\n return false;\n } else if (strict === true || strict === "error") {\n return true;\n } else if (strict === "warn") {\n typeof console !== "undefined" && console.warn("LaTeX-incompatible input and strict mode is set to \'warn\': " + (errorMsg + " [" + errorCode + "]"));\n return false;\n } else {\n // won\'t happen in type-safe code\n typeof console !== "undefined" && console.warn("LaTeX-incompatible input and strict mode is set to " + ("unrecognized \'" + strict + "\': " + errorMsg + " [" + errorCode + "]"));\n return false;\n }\n }\n /**\n * Check whether to test potentially dangerous input, and return\n * `true` (trusted) or `false` (untrusted). The sole argument `context`\n * should be an object with `command` field specifying the relevant LaTeX\n * command (as a string starting with `\\`), and any other arguments, etc.\n * If `context` has a `url` field, a `protocol` field will automatically\n * get added by this function (changing the specified object).\n */\n\n\n isTrusted(context) {\n if (context.url && !context.protocol) {\n const protocol = utils.protocolFromUrl(context.url);\n\n if (protocol == null) {\n return false;\n }\n\n context.protocol = protocol;\n }\n\n const trust = typeof this.trust === "function" ? this.trust(context) : this.trust;\n return Boolean(trust);\n }\n\n}\n;// CONCATENATED MODULE: ./src/Style.js\n/**\n * This file contains information and classes for the various kinds of styles\n * used in TeX. It provides a generic `Style` class, which holds information\n * about a specific style. It then provides instances of all the different kinds\n * of styles possible, and provides functions to move between them and get\n * information about them.\n */\n\n/**\n * The main style class. Contains a unique id for the style, a size (which is\n * the same for cramped and uncramped version of a style), and a cramped flag.\n */\nclass Style {\n constructor(id, size, cramped) {\n this.id = void 0;\n this.size = void 0;\n this.cramped = void 0;\n this.id = id;\n this.size = size;\n this.cramped = cramped;\n }\n /**\n * Get the style of a superscript given a base in the current style.\n */\n\n\n sup() {\n return styles[sup[this.id]];\n }\n /**\n * Get the style of a subscript given a base in the current style.\n */\n\n\n sub() {\n return styles[sub[this.id]];\n }\n /**\n * Get the style of a fraction numerator given the fraction in the current\n * style.\n */\n\n\n fracNum() {\n return styles[fracNum[this.id]];\n }\n /**\n * Get the style of a fraction denominator given the fraction in the current\n * style.\n */\n\n\n fracDen() {\n return styles[fracDen[this.id]];\n }\n /**\n * Get the cramped version of a style (in particular, cramping a cramped style\n * doesn\'t change the style).\n */\n\n\n cramp() {\n return styles[cramp[this.id]];\n }\n /**\n * Get a text or display version of this style.\n */\n\n\n text() {\n return styles[Style_text[this.id]];\n }\n /**\n * Return true if this style is tightly spaced (scriptstyle/scriptscriptstyle)\n */\n\n\n isTight() {\n return this.size >= 2;\n }\n\n} // Export an interface for type checking, but don\'t expose the implementation.\n// This way, no more styles can be generated.\n\n\n// IDs of the different styles\nconst D = 0;\nconst Dc = 1;\nconst T = 2;\nconst Tc = 3;\nconst S = 4;\nconst Sc = 5;\nconst SS = 6;\nconst SSc = 7; // Instances of the different styles\n\nconst styles = [new Style(D, 0, false), new Style(Dc, 0, true), new Style(T, 1, false), new Style(Tc, 1, true), new Style(S, 2, false), new Style(Sc, 2, true), new Style(SS, 3, false), new Style(SSc, 3, true)]; // Lookup tables for switching from one style to another\n\nconst sup = [S, Sc, S, Sc, SS, SSc, SS, SSc];\nconst sub = [Sc, Sc, Sc, Sc, SSc, SSc, SSc, SSc];\nconst fracNum = [T, Tc, S, Sc, SS, SSc, SS, SSc];\nconst fracDen = [Tc, Tc, Sc, Sc, SSc, SSc, SSc, SSc];\nconst cramp = [Dc, Dc, Tc, Tc, Sc, Sc, SSc, SSc];\nconst Style_text = [D, Dc, T, Tc, T, Tc, T, Tc]; // We only export some of the styles.\n\n/* harmony default export */ var src_Style = ({\n DISPLAY: styles[D],\n TEXT: styles[T],\n SCRIPT: styles[S],\n SCRIPTSCRIPT: styles[SS]\n});\n;// CONCATENATED MODULE: ./src/unicodeScripts.js\n/*\n * This file defines the Unicode scripts and script families that we\n * support. To add new scripts or families, just add a new entry to the\n * scriptData array below. Adding scripts to the scriptData array allows\n * characters from that script to appear in \\text{} environments.\n */\n\n/**\n * Each script or script family has a name and an array of blocks.\n * Each block is an array of two numbers which specify the start and\n * end points (inclusive) of a block of Unicode codepoints.\n */\n\n/**\n * Unicode block data for the families of scripts we support in \\text{}.\n * Scripts only need to appear here if they do not have font metrics.\n */\nconst scriptData = [{\n // Latin characters beyond the Latin-1 characters we have metrics for.\n // Needed for Czech, Hungarian and Turkish text, for example.\n name: \'latin\',\n blocks: [[0x0100, 0x024f], // Latin Extended-A and Latin Extended-B\n [0x0300, 0x036f] // Combining Diacritical marks\n ]\n}, {\n // The Cyrillic script used by Russian and related languages.\n // A Cyrillic subset used to be supported as explicitly defined\n // symbols in symbols.js\n name: \'cyrillic\',\n blocks: [[0x0400, 0x04ff]]\n}, {\n // Armenian\n name: \'armenian\',\n blocks: [[0x0530, 0x058F]]\n}, {\n // The Brahmic scripts of South and Southeast Asia\n // Devanagari (0900–097F)\n // Bengali (0980–09FF)\n // Gurmukhi (0A00–0A7F)\n // Gujarati (0A80–0AFF)\n // Oriya (0B00–0B7F)\n // Tamil (0B80–0BFF)\n // Telugu (0C00–0C7F)\n // Kannada (0C80–0CFF)\n // Malayalam (0D00–0D7F)\n // Sinhala (0D80–0DFF)\n // Thai (0E00–0E7F)\n // Lao (0E80–0EFF)\n // Tibetan (0F00–0FFF)\n // Myanmar (1000–109F)\n name: \'brahmic\',\n blocks: [[0x0900, 0x109F]]\n}, {\n name: \'georgian\',\n blocks: [[0x10A0, 0x10ff]]\n}, {\n // Chinese and Japanese.\n // The "k" in cjk is for Korean, but we\'ve separated Korean out\n name: "cjk",\n blocks: [[0x3000, 0x30FF], // CJK symbols and punctuation, Hiragana, Katakana\n [0x4E00, 0x9FAF], // CJK ideograms\n [0xFF00, 0xFF60] // Fullwidth punctuation\n // TODO: add halfwidth Katakana and Romanji glyphs\n ]\n}, {\n // Korean\n name: \'hangul\',\n blocks: [[0xAC00, 0xD7AF]]\n}];\n/**\n * Given a codepoint, return the name of the script or script family\n * it is from, or null if it is not part of a known block\n */\n\nfunction scriptFromCodepoint(codepoint) {\n for (let i = 0; i < scriptData.length; i++) {\n const script = scriptData[i];\n\n for (let i = 0; i < script.blocks.length; i++) {\n const block = script.blocks[i];\n\n if (codepoint >= block[0] && codepoint <= block[1]) {\n return script.name;\n }\n }\n }\n\n return null;\n}\n/**\n * A flattened version of all the supported blocks in a single array.\n * This is an optimization to make supportedCodepoint() fast.\n */\n\nconst allBlocks = [];\nscriptData.forEach(s => s.blocks.forEach(b => allBlocks.push(...b)));\n/**\n * Given a codepoint, return true if it falls within one of the\n * scripts or script families defined above and false otherwise.\n *\n * Micro benchmarks shows that this is faster than\n * /[\\u3000-\\u30FF\\u4E00-\\u9FAF\\uFF00-\\uFF60\\uAC00-\\uD7AF\\u0900-\\u109F]/.test()\n * in Firefox, Chrome and Node.\n */\n\nfunction supportedCodepoint(codepoint) {\n for (let i = 0; i < allBlocks.length; i += 2) {\n if (codepoint >= allBlocks[i] && codepoint <= allBlocks[i + 1]) {\n return true;\n }\n }\n\n return false;\n}\n;// CONCATENATED MODULE: ./src/svgGeometry.js\n/**\n * This file provides support to domTree.js and delimiter.js.\n * It\'s a storehouse of path geometry for SVG images.\n */\n// In all paths below, the viewBox-to-em scale is 1000:1.\nconst hLinePad = 80; // padding above a sqrt vinculum. Prevents image cropping.\n// The vinculum of a \\sqrt can be made thicker by a KaTeX rendering option.\n// Think of variable extraVinculum as two detours in the SVG path.\n// The detour begins at the lower left of the area labeled extraVinculum below.\n// The detour proceeds one extraVinculum distance up and slightly to the right,\n// displacing the radiused corner between surd and vinculum. The radius is\n// traversed as usual, then the detour resumes. It goes right, to the end of\n// the very long vinculum, then down one extraVinculum distance,\n// after which it resumes regular path geometry for the radical.\n\n/* vinculum\n /\n /▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒←extraVinculum\n / █████████████████████←0.04em (40 unit) std vinculum thickness\n / /\n / /\n / /\\\n / / surd\n*/\n\nconst sqrtMain = function (extraVinculum, hLinePad) {\n // sqrtMain path geometry is from glyph U221A in the font KaTeX Main\n return "M95," + (622 + extraVinculum + hLinePad) + "\\nc-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14\\nc0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54\\nc44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10\\ns173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429\\nc69,-144,104.5,-217.7,106.5,-221\\nl" + extraVinculum / 2.075 + " -" + extraVinculum + "\\nc5.3,-9.3,12,-14,20,-14\\nH400000v" + (40 + extraVinculum) + "H845.2724\\ns-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7\\nc-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47z\\nM" + (834 + extraVinculum) + " " + hLinePad + "h400000v" + (40 + extraVinculum) + "h-400000z";\n};\n\nconst sqrtSize1 = function (extraVinculum, hLinePad) {\n // size1 is from glyph U221A in the font KaTeX_Size1-Regular\n return "M263," + (601 + extraVinculum + hLinePad) + "c0.7,0,18,39.7,52,119\\nc34,79.3,68.167,158.7,102.5,238c34.3,79.3,51.8,119.3,52.5,120\\nc340,-704.7,510.7,-1060.3,512,-1067\\nl" + extraVinculum / 2.084 + " -" + extraVinculum + "\\nc4.7,-7.3,11,-11,19,-11\\nH40000v" + (40 + extraVinculum) + "H1012.3\\ns-271.3,567,-271.3,567c-38.7,80.7,-84,175,-136,283c-52,108,-89.167,185.3,-111.5,232\\nc-22.3,46.7,-33.8,70.3,-34.5,71c-4.7,4.7,-12.3,7,-23,7s-12,-1,-12,-1\\ns-109,-253,-109,-253c-72.7,-168,-109.3,-252,-110,-252c-10.7,8,-22,16.7,-34,26\\nc-22,17.3,-33.3,26,-34,26s-26,-26,-26,-26s76,-59,76,-59s76,-60,76,-60z\\nM" + (1001 + extraVinculum) + " " + hLinePad + "h400000v" + (40 + extraVinculum) + "h-400000z";\n};\n\nconst sqrtSize2 = function (extraVinculum, hLinePad) {\n // size2 is from glyph U221A in the font KaTeX_Size2-Regular\n return "M983 " + (10 + extraVinculum + hLinePad) + "\\nl" + extraVinculum / 3.13 + " -" + extraVinculum + "\\nc4,-6.7,10,-10,18,-10 H400000v" + (40 + extraVinculum) + "\\nH1013.1s-83.4,268,-264.1,840c-180.7,572,-277,876.3,-289,913c-4.7,4.7,-12.7,7,-24,7\\ns-12,0,-12,0c-1.3,-3.3,-3.7,-11.7,-7,-25c-35.3,-125.3,-106.7,-373.3,-214,-744\\nc-10,12,-21,25,-33,39s-32,39,-32,39c-6,-5.3,-15,-14,-27,-26s25,-30,25,-30\\nc26.7,-32.7,52,-63,76,-91s52,-60,52,-60s208,722,208,722\\nc56,-175.3,126.3,-397.3,211,-666c84.7,-268.7,153.8,-488.2,207.5,-658.5\\nc53.7,-170.3,84.5,-266.8,92.5,-289.5z\\nM" + (1001 + extraVinculum) + " " + hLinePad + "h400000v" + (40 + extraVinculum) + "h-400000z";\n};\n\nconst sqrtSize3 = function (extraVinculum, hLinePad) {\n // size3 is from glyph U221A in the font KaTeX_Size3-Regular\n return "M424," + (2398 + extraVinculum + hLinePad) + "\\nc-1.3,-0.7,-38.5,-172,-111.5,-514c-73,-342,-109.8,-513.3,-110.5,-514\\nc0,-2,-10.7,14.3,-32,49c-4.7,7.3,-9.8,15.7,-15.5,25c-5.7,9.3,-9.8,16,-12.5,20\\ns-5,7,-5,7c-4,-3.3,-8.3,-7.7,-13,-13s-13,-13,-13,-13s76,-122,76,-122s77,-121,77,-121\\ns209,968,209,968c0,-2,84.7,-361.7,254,-1079c169.3,-717.3,254.7,-1077.7,256,-1081\\nl" + extraVinculum / 4.223 + " -" + extraVinculum + "c4,-6.7,10,-10,18,-10 H400000\\nv" + (40 + extraVinculum) + "H1014.6\\ns-87.3,378.7,-272.6,1166c-185.3,787.3,-279.3,1182.3,-282,1185\\nc-2,6,-10,9,-24,9\\nc-8,0,-12,-0.7,-12,-2z M" + (1001 + extraVinculum) + " " + hLinePad + "\\nh400000v" + (40 + extraVinculum) + "h-400000z";\n};\n\nconst sqrtSize4 = function (extraVinculum, hLinePad) {\n // size4 is from glyph U221A in the font KaTeX_Size4-Regular\n return "M473," + (2713 + extraVinculum + hLinePad) + "\\nc339.3,-1799.3,509.3,-2700,510,-2702 l" + extraVinculum / 5.298 + " -" + extraVinculum + "\\nc3.3,-7.3,9.3,-11,18,-11 H400000v" + (40 + extraVinculum) + "H1017.7\\ns-90.5,478,-276.2,1466c-185.7,988,-279.5,1483,-281.5,1485c-2,6,-10,9,-24,9\\nc-8,0,-12,-0.7,-12,-2c0,-1.3,-5.3,-32,-16,-92c-50.7,-293.3,-119.7,-693.3,-207,-1200\\nc0,-1.3,-5.3,8.7,-16,30c-10.7,21.3,-21.3,42.7,-32,64s-16,33,-16,33s-26,-26,-26,-26\\ns76,-153,76,-153s77,-151,77,-151c0.7,0.7,35.7,202,105,604c67.3,400.7,102,602.7,104,\\n606zM" + (1001 + extraVinculum) + " " + hLinePad + "h400000v" + (40 + extraVinculum) + "H1017.7z";\n};\n\nconst phasePath = function (y) {\n const x = y / 2; // x coordinate at top of angle\n\n return "M400000 " + y + " H0 L" + x + " 0 l65 45 L145 " + (y - 80) + " H400000z";\n};\n\nconst sqrtTall = function (extraVinculum, hLinePad, viewBoxHeight) {\n // sqrtTall is from glyph U23B7 in the font KaTeX_Size4-Regular\n // One path edge has a variable length. It runs vertically from the vinculum\n // to a point near (14 units) the bottom of the surd. The vinculum\n // is normally 40 units thick. So the length of the line in question is:\n const vertSegment = viewBoxHeight - 54 - hLinePad - extraVinculum;\n return "M702 " + (extraVinculum + hLinePad) + "H400000" + (40 + extraVinculum) + "\\nH742v" + vertSegment + "l-4 4-4 4c-.667.7 -2 1.5-4 2.5s-4.167 1.833-6.5 2.5-5.5 1-9.5 1\\nh-12l-28-84c-16.667-52-96.667 -294.333-240-727l-212 -643 -85 170\\nc-4-3.333-8.333-7.667-13 -13l-13-13l77-155 77-156c66 199.333 139 419.667\\n219 661 l218 661zM702 " + hLinePad + "H400000v" + (40 + extraVinculum) + "H742z";\n};\n\nconst sqrtPath = function (size, extraVinculum, viewBoxHeight) {\n extraVinculum = 1000 * extraVinculum; // Convert from document ems to viewBox.\n\n let path = "";\n\n switch (size) {\n case "sqrtMain":\n path = sqrtMain(extraVinculum, hLinePad);\n break;\n\n case "sqrtSize1":\n path = sqrtSize1(extraVinculum, hLinePad);\n break;\n\n case "sqrtSize2":\n path = sqrtSize2(extraVinculum, hLinePad);\n break;\n\n case "sqrtSize3":\n path = sqrtSize3(extraVinculum, hLinePad);\n break;\n\n case "sqrtSize4":\n path = sqrtSize4(extraVinculum, hLinePad);\n break;\n\n case "sqrtTall":\n path = sqrtTall(extraVinculum, hLinePad, viewBoxHeight);\n }\n\n return path;\n};\nconst innerPath = function (name, height) {\n // The inner part of stretchy tall delimiters\n switch (name) {\n case "\\u239c":\n return "M291 0 H417 V" + height + " H291z M291 0 H417 V" + height + " H291z";\n\n case "\\u2223":\n return "M145 0 H188 V" + height + " H145z M145 0 H188 V" + height + " H145z";\n\n case "\\u2225":\n return "M145 0 H188 V" + height + " H145z M145 0 H188 V" + height + " H145z" + ("M367 0 H410 V" + height + " H367z M367 0 H410 V" + height + " H367z");\n\n case "\\u239f":\n return "M457 0 H583 V" + height + " H457z M457 0 H583 V" + height + " H457z";\n\n case "\\u23a2":\n return "M319 0 H403 V" + height + " H319z M319 0 H403 V" + height + " H319z";\n\n case "\\u23a5":\n return "M263 0 H347 V" + height + " H263z M263 0 H347 V" + height + " H263z";\n\n case "\\u23aa":\n return "M384 0 H504 V" + height + " H384z M384 0 H504 V" + height + " H384z";\n\n case "\\u23d0":\n return "M312 0 H355 V" + height + " H312z M312 0 H355 V" + height + " H312z";\n\n case "\\u2016":\n return "M257 0 H300 V" + height + " H257z M257 0 H300 V" + height + " H257z" + ("M478 0 H521 V" + height + " H478z M478 0 H521 V" + height + " H478z");\n\n default:\n return "";\n }\n};\nconst path = {\n // The doubleleftarrow geometry is from glyph U+21D0 in the font KaTeX Main\n doubleleftarrow: "M262 157\\nl10-10c34-36 62.7-77 86-123 3.3-8 5-13.3 5-16 0-5.3-6.7-8-20-8-7.3\\n 0-12.2.5-14.5 1.5-2.3 1-4.8 4.5-7.5 10.5-49.3 97.3-121.7 169.3-217 216-28\\n 14-57.3 25-88 33-6.7 2-11 3.8-13 5.5-2 1.7-3 4.2-3 7.5s1 5.8 3 7.5\\nc2 1.7 6.3 3.5 13 5.5 68 17.3 128.2 47.8 180.5 91.5 52.3 43.7 93.8 96.2 124.5\\n 157.5 9.3 8 15.3 12.3 18 13h6c12-.7 18-4 18-10 0-2-1.7-7-5-15-23.3-46-52-87\\n-86-123l-10-10h399738v-40H218c328 0 0 0 0 0l-10-8c-26.7-20-65.7-43-117-69 2.7\\n-2 6-3.7 10-5 36.7-16 72.3-37.3 107-64l10-8h399782v-40z\\nm8 0v40h399730v-40zm0 194v40h399730v-40z",\n // doublerightarrow is from glyph U+21D2 in font KaTeX Main\n doublerightarrow: "M399738 392l\\n-10 10c-34 36-62.7 77-86 123-3.3 8-5 13.3-5 16 0 5.3 6.7 8 20 8 7.3 0 12.2-.5\\n 14.5-1.5 2.3-1 4.8-4.5 7.5-10.5 49.3-97.3 121.7-169.3 217-216 28-14 57.3-25 88\\n-33 6.7-2 11-3.8 13-5.5 2-1.7 3-4.2 3-7.5s-1-5.8-3-7.5c-2-1.7-6.3-3.5-13-5.5-68\\n-17.3-128.2-47.8-180.5-91.5-52.3-43.7-93.8-96.2-124.5-157.5-9.3-8-15.3-12.3-18\\n-13h-6c-12 .7-18 4-18 10 0 2 1.7 7 5 15 23.3 46 52 87 86 123l10 10H0v40h399782\\nc-328 0 0 0 0 0l10 8c26.7 20 65.7 43 117 69-2.7 2-6 3.7-10 5-36.7 16-72.3 37.3\\n-107 64l-10 8H0v40zM0 157v40h399730v-40zm0 194v40h399730v-40z",\n // leftarrow is from glyph U+2190 in font KaTeX Main\n leftarrow: "M400000 241H110l3-3c68.7-52.7 113.7-120\\n 135-202 4-14.7 6-23 6-25 0-7.3-7-11-21-11-8 0-13.2.8-15.5 2.5-2.3 1.7-4.2 5.8\\n-5.5 12.5-1.3 4.7-2.7 10.3-4 17-12 48.7-34.8 92-68.5 130S65.3 228.3 18 247\\nc-10 4-16 7.7-18 11 0 8.7 6 14.3 18 17 47.3 18.7 87.8 47 121.5 85S196 441.3 208\\n 490c.7 2 1.3 5 2 9s1.2 6.7 1.5 8c.3 1.3 1 3.3 2 6s2.2 4.5 3.5 5.5c1.3 1 3.3\\n 1.8 6 2.5s6 1 10 1c14 0 21-3.7 21-11 0-2-2-10.3-6-25-20-79.3-65-146.7-135-202\\n l-3-3h399890zM100 241v40h399900v-40z",\n // overbrace is from glyphs U+23A9/23A8/23A7 in font KaTeX_Size4-Regular\n leftbrace: "M6 548l-6-6v-35l6-11c56-104 135.3-181.3 238-232 57.3-28.7 117\\n-45 179-50h399577v120H403c-43.3 7-81 15-113 26-100.7 33-179.7 91-237 174-2.7\\n 5-6 9-10 13-.7 1-7.3 1-20 1H6z",\n leftbraceunder: "M0 6l6-6h17c12.688 0 19.313.3 20 1 4 4 7.313 8.3 10 13\\n 35.313 51.3 80.813 93.8 136.5 127.5 55.688 33.7 117.188 55.8 184.5 66.5.688\\n 0 2 .3 4 1 18.688 2.7 76 4.3 172 5h399450v120H429l-6-1c-124.688-8-235-61.7\\n-331-161C60.687 138.7 32.312 99.3 7 54L0 41V6z",\n // overgroup is from the MnSymbol package (public domain)\n leftgroup: "M400000 80\\nH435C64 80 168.3 229.4 21 260c-5.9 1.2-18 0-18 0-2 0-3-1-3-3v-38C76 61 257 0\\n 435 0h399565z",\n leftgroupunder: "M400000 262\\nH435C64 262 168.3 112.6 21 82c-5.9-1.2-18 0-18 0-2 0-3 1-3 3v38c76 158 257 219\\n 435 219h399565z",\n // Harpoons are from glyph U+21BD in font KaTeX Main\n leftharpoon: "M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3\\n-3.3 10.2-9.5 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5\\n-18.3 3-21-1.3-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7\\n-196 228-6.7 4.7-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40z",\n leftharpoonplus: "M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3-3.3 10.2-9.5\\n 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5-18.3 3-21-1.3\\n-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7-196 228-6.7 4.7\\n-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40zM0 435v40h400000v-40z\\nm0 0v40h400000v-40z",\n leftharpoondown: "M7 241c-4 4-6.333 8.667-7 14 0 5.333.667 9 2 11s5.333\\n 5.333 12 10c90.667 54 156 130 196 228 3.333 10.667 6.333 16.333 9 17 2 .667 5\\n 1 9 1h5c10.667 0 16.667-2 18-6 2-2.667 1-9.667-3-21-32-87.333-82.667-157.667\\n-152-211l-3-3h399907v-40zM93 281 H400000 v-40L7 241z",\n leftharpoondownplus: "M7 435c-4 4-6.3 8.7-7 14 0 5.3.7 9 2 11s5.3 5.3 12\\n 10c90.7 54 156 130 196 228 3.3 10.7 6.3 16.3 9 17 2 .7 5 1 9 1h5c10.7 0 16.7\\n-2 18-6 2-2.7 1-9.7-3-21-32-87.3-82.7-157.7-152-211l-3-3h399907v-40H7zm93 0\\nv40h399900v-40zM0 241v40h399900v-40zm0 0v40h399900v-40z",\n // hook is from glyph U+21A9 in font KaTeX Main\n lefthook: "M400000 281 H103s-33-11.2-61-33.5S0 197.3 0 164s14.2-61.2 42.5\\n-83.5C70.8 58.2 104 47 142 47 c16.7 0 25 6.7 25 20 0 12-8.7 18.7-26 20-40 3.3\\n-68.7 15.7-86 37-10 12-15 25.3-15 40 0 22.7 9.8 40.7 29.5 54 19.7 13.3 43.5 21\\n 71.5 23h399859zM103 281v-40h399897v40z",\n leftlinesegment: "M40 281 V428 H0 V94 H40 V241 H400000 v40z\\nM40 281 V428 H0 V94 H40 V241 H400000 v40z",\n leftmapsto: "M40 281 V448H0V74H40V241H400000v40z\\nM40 281 V448H0V74H40V241H400000v40z",\n // tofrom is from glyph U+21C4 in font KaTeX AMS Regular\n leftToFrom: "M0 147h400000v40H0zm0 214c68 40 115.7 95.7 143 167h22c15.3 0 23\\n-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69-70-101l-7-8h399905v-40H95l7-8\\nc28.7-32 52-65.7 70-101 10.7-23.3 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 265.3\\n 68 321 0 361zm0-174v-40h399900v40zm100 154v40h399900v-40z",\n longequal: "M0 50 h400000 v40H0z m0 194h40000v40H0z\\nM0 50 h400000 v40H0z m0 194h40000v40H0z",\n midbrace: "M200428 334\\nc-100.7-8.3-195.3-44-280-108-55.3-42-101.7-93-139-153l-9-14c-2.7 4-5.7 8.7-9 14\\n-53.3 86.7-123.7 153-211 199-66.7 36-137.3 56.3-212 62H0V214h199568c178.3-11.7\\n 311.7-78.3 403-201 6-8 9.7-12 11-12 .7-.7 6.7-1 18-1s17.3.3 18 1c1.3 0 5 4 11\\n 12 44.7 59.3 101.3 106.3 170 141s145.3 54.3 229 60h199572v120z",\n midbraceunder: "M199572 214\\nc100.7 8.3 195.3 44 280 108 55.3 42 101.7 93 139 153l9 14c2.7-4 5.7-8.7 9-14\\n 53.3-86.7 123.7-153 211-199 66.7-36 137.3-56.3 212-62h199568v120H200432c-178.3\\n 11.7-311.7 78.3-403 201-6 8-9.7 12-11 12-.7.7-6.7 1-18 1s-17.3-.3-18-1c-1.3 0\\n-5-4-11-12-44.7-59.3-101.3-106.3-170-141s-145.3-54.3-229-60H0V214z",\n oiintSize1: "M512.6 71.6c272.6 0 320.3 106.8 320.3 178.2 0 70.8-47.7 177.6\\n-320.3 177.6S193.1 320.6 193.1 249.8c0-71.4 46.9-178.2 319.5-178.2z\\nm368.1 178.2c0-86.4-60.9-215.4-368.1-215.4-306.4 0-367.3 129-367.3 215.4 0 85.8\\n60.9 214.8 367.3 214.8 307.2 0 368.1-129 368.1-214.8z",\n oiintSize2: "M757.8 100.1c384.7 0 451.1 137.6 451.1 230 0 91.3-66.4 228.8\\n-451.1 228.8-386.3 0-452.7-137.5-452.7-228.8 0-92.4 66.4-230 452.7-230z\\nm502.4 230c0-111.2-82.4-277.2-502.4-277.2s-504 166-504 277.2\\nc0 110 84 276 504 276s502.4-166 502.4-276z",\n oiiintSize1: "M681.4 71.6c408.9 0 480.5 106.8 480.5 178.2 0 70.8-71.6 177.6\\n-480.5 177.6S202.1 320.6 202.1 249.8c0-71.4 70.5-178.2 479.3-178.2z\\nm525.8 178.2c0-86.4-86.8-215.4-525.7-215.4-437.9 0-524.7 129-524.7 215.4 0\\n85.8 86.8 214.8 524.7 214.8 438.9 0 525.7-129 525.7-214.8z",\n oiiintSize2: "M1021.2 53c603.6 0 707.8 165.8 707.8 277.2 0 110-104.2 275.8\\n-707.8 275.8-606 0-710.2-165.8-710.2-275.8C311 218.8 415.2 53 1021.2 53z\\nm770.4 277.1c0-131.2-126.4-327.6-770.5-327.6S248.4 198.9 248.4 330.1\\nc0 130 128.8 326.4 772.7 326.4s770.5-196.4 770.5-326.4z",\n rightarrow: "M0 241v40h399891c-47.3 35.3-84 78-110 128\\n-16.7 32-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20\\n 11 8 0 13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7\\n 39-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85\\n-40.5-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5\\n-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67\\n 151.7 139 205zm0 0v40h399900v-40z",\n rightbrace: "M400000 542l\\n-6 6h-17c-12.7 0-19.3-.3-20-1-4-4-7.3-8.3-10-13-35.3-51.3-80.8-93.8-136.5-127.5\\ns-117.2-55.8-184.5-66.5c-.7 0-2-.3-4-1-18.7-2.7-76-4.3-172-5H0V214h399571l6 1\\nc124.7 8 235 61.7 331 161 31.3 33.3 59.7 72.7 85 118l7 13v35z",\n rightbraceunder: "M399994 0l6 6v35l-6 11c-56 104-135.3 181.3-238 232-57.3\\n 28.7-117 45-179 50H-300V214h399897c43.3-7 81-15 113-26 100.7-33 179.7-91 237\\n-174 2.7-5 6-9 10-13 .7-1 7.3-1 20-1h17z",\n rightgroup: "M0 80h399565c371 0 266.7 149.4 414 180 5.9 1.2 18 0 18 0 2 0\\n 3-1 3-3v-38c-76-158-257-219-435-219H0z",\n rightgroupunder: "M0 262h399565c371 0 266.7-149.4 414-180 5.9-1.2 18 0 18\\n 0 2 0 3 1 3 3v38c-76 158-257 219-435 219H0z",\n rightharpoon: "M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3\\n-3.7-15.3-11-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2\\n-10.7 0-16.7 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58\\n 69.2 92 94.5zm0 0v40h399900v-40z",\n rightharpoonplus: "M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3-3.7-15.3-11\\n-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2-10.7 0-16.7\\n 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58 69.2 92 94.5z\\nm0 0v40h399900v-40z m100 194v40h399900v-40zm0 0v40h399900v-40z",\n rightharpoondown: "M399747 511c0 7.3 6.7 11 20 11 8 0 13-.8 15-2.5s4.7-6.8\\n 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3 8.5-5.8 9.5\\n-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3-64.7 57-92 95\\n-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 241v40h399900v-40z",\n rightharpoondownplus: "M399747 705c0 7.3 6.7 11 20 11 8 0 13-.8\\n 15-2.5s4.7-6.8 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3\\n 8.5-5.8 9.5-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3\\n-64.7 57-92 95-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 435v40h399900v-40z\\nm0-194v40h400000v-40zm0 0v40h400000v-40z",\n righthook: "M399859 241c-764 0 0 0 0 0 40-3.3 68.7-15.7 86-37 10-12 15-25.3\\n 15-40 0-22.7-9.8-40.7-29.5-54-19.7-13.3-43.5-21-71.5-23-17.3-1.3-26-8-26-20 0\\n-13.3 8.7-20 26-20 38 0 71 11.2 99 33.5 0 0 7 5.6 21 16.7 14 11.2 21 33.5 21\\n 66.8s-14 61.2-42 83.5c-28 22.3-61 33.5-99 33.5L0 241z M0 281v-40h399859v40z",\n rightlinesegment: "M399960 241 V94 h40 V428 h-40 V281 H0 v-40z\\nM399960 241 V94 h40 V428 h-40 V281 H0 v-40z",\n rightToFrom: "M400000 167c-70.7-42-118-97.7-142-167h-23c-15.3 0-23 .3-23\\n 1 0 1.3 5.3 13.7 16 37 18 35.3 41.3 69 70 101l7 8H0v40h399905l-7 8c-28.7 32\\n-52 65.7-70 101-10.7 23.3-16 35.7-16 37 0 .7 7.7 1 23 1h23c24-69.3 71.3-125 142\\n-167z M100 147v40h399900v-40zM0 341v40h399900v-40z",\n // twoheadleftarrow is from glyph U+219E in font KaTeX AMS Regular\n twoheadleftarrow: "M0 167c68 40\\n 115.7 95.7 143 167h22c15.3 0 23-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69\\n-70-101l-7-8h125l9 7c50.7 39.3 85 86 103 140h46c0-4.7-6.3-18.7-19-42-18-35.3\\n-40-67.3-66-96l-9-9h399716v-40H284l9-9c26-28.7 48-60.7 66-96 12.7-23.333 19\\n-37.333 19-42h-46c-18 54-52.3 100.7-103 140l-9 7H95l7-8c28.7-32 52-65.7 70-101\\n 10.7-23.333 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 71.3 68 127 0 167z",\n twoheadrightarrow: "M400000 167\\nc-68-40-115.7-95.7-143-167h-22c-15.3 0-23 .3-23 1 0 1.3 5.3 13.7 16 37 18 35.3\\n 41.3 69 70 101l7 8h-125l-9-7c-50.7-39.3-85-86-103-140h-46c0 4.7 6.3 18.7 19 42\\n 18 35.3 40 67.3 66 96l9 9H0v40h399716l-9 9c-26 28.7-48 60.7-66 96-12.7 23.333\\n-19 37.333-19 42h46c18-54 52.3-100.7 103-140l9-7h125l-7 8c-28.7 32-52 65.7-70\\n 101-10.7 23.333-16 35.7-16 37 0 .7 7.7 1 23 1h22c27.3-71.3 75-127 143-167z",\n // tilde1 is a modified version of a glyph from the MnSymbol package\n tilde1: "M200 55.538c-77 0-168 73.953-177 73.953-3 0-7\\n-2.175-9-5.437L2 97c-1-2-2-4-2-6 0-4 2-7 5-9l20-12C116 12 171 0 207 0c86 0\\n 114 68 191 68 78 0 168-68 177-68 4 0 7 2 9 5l12 19c1 2.175 2 4.35 2 6.525 0\\n 4.35-2 7.613-5 9.788l-19 13.05c-92 63.077-116.937 75.308-183 76.128\\n-68.267.847-113-73.952-191-73.952z",\n // ditto tilde2, tilde3, & tilde4\n tilde2: "M344 55.266c-142 0-300.638 81.316-311.5 86.418\\n-8.01 3.762-22.5 10.91-23.5 5.562L1 120c-1-2-1-3-1-4 0-5 3-9 8-10l18.4-9C160.9\\n 31.9 283 0 358 0c148 0 188 122 331 122s314-97 326-97c4 0 8 2 10 7l7 21.114\\nc1 2.14 1 3.21 1 4.28 0 5.347-3 9.626-7 10.696l-22.3 12.622C852.6 158.372 751\\n 181.476 676 181.476c-149 0-189-126.21-332-126.21z",\n tilde3: "M786 59C457 59 32 175.242 13 175.242c-6 0-10-3.457\\n-11-10.37L.15 138c-1-7 3-12 10-13l19.2-6.4C378.4 40.7 634.3 0 804.3 0c337 0\\n 411.8 157 746.8 157 328 0 754-112 773-112 5 0 10 3 11 9l1 14.075c1 8.066-.697\\n 16.595-6.697 17.492l-21.052 7.31c-367.9 98.146-609.15 122.696-778.15 122.696\\n -338 0-409-156.573-744-156.573z",\n tilde4: "M786 58C457 58 32 177.487 13 177.487c-6 0-10-3.345\\n-11-10.035L.15 143c-1-7 3-12 10-13l22-6.7C381.2 35 637.15 0 807.15 0c337 0 409\\n 177 744 177 328 0 754-127 773-127 5 0 10 3 11 9l1 14.794c1 7.805-3 13.38-9\\n 14.495l-20.7 5.574c-366.85 99.79-607.3 139.372-776.3 139.372-338 0-409\\n -175.236-744-175.236z",\n // vec is from glyph U+20D7 in font KaTeX Main\n vec: "M377 20c0-5.333 1.833-10 5.5-14S391 0 397 0c4.667 0 8.667 1.667 12 5\\n3.333 2.667 6.667 9 10 19 6.667 24.667 20.333 43.667 41 57 7.333 4.667 11\\n10.667 11 18 0 6-1 10-3 12s-6.667 5-14 9c-28.667 14.667-53.667 35.667-75 63\\n-1.333 1.333-3.167 3.5-5.5 6.5s-4 4.833-5 5.5c-1 .667-2.5 1.333-4.5 2s-4.333 1\\n-7 1c-4.667 0-9.167-1.833-13.5-5.5S337 184 337 178c0-12.667 15.667-32.333 47-59\\nH213l-171-1c-8.667-6-13-12.333-13-19 0-4.667 4.333-11.333 13-20h359\\nc-16-25.333-24-45-24-59z",\n // widehat1 is a modified version of a glyph from the MnSymbol package\n widehat1: "M529 0h5l519 115c5 1 9 5 9 10 0 1-1 2-1 3l-4 22\\nc-1 5-5 9-11 9h-2L532 67 19 159h-2c-5 0-9-4-11-9l-5-22c-1-6 2-12 8-13z",\n // ditto widehat2, widehat3, & widehat4\n widehat2: "M1181 0h2l1171 176c6 0 10 5 10 11l-2 23c-1 6-5 10\\n-11 10h-1L1182 67 15 220h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z",\n widehat3: "M1181 0h2l1171 236c6 0 10 5 10 11l-2 23c-1 6-5 10\\n-11 10h-1L1182 67 15 280h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z",\n widehat4: "M1181 0h2l1171 296c6 0 10 5 10 11l-2 23c-1 6-5 10\\n-11 10h-1L1182 67 15 340h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z",\n // widecheck paths are all inverted versions of widehat\n widecheck1: "M529,159h5l519,-115c5,-1,9,-5,9,-10c0,-1,-1,-2,-1,-3l-4,-22c-1,\\n-5,-5,-9,-11,-9h-2l-512,92l-513,-92h-2c-5,0,-9,4,-11,9l-5,22c-1,6,2,12,8,13z",\n widecheck2: "M1181,220h2l1171,-176c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\\n-11,-10h-1l-1168,153l-1167,-153h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z",\n widecheck3: "M1181,280h2l1171,-236c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\\n-11,-10h-1l-1168,213l-1167,-213h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z",\n widecheck4: "M1181,340h2l1171,-296c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\\n-11,-10h-1l-1168,273l-1167,-273h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z",\n // The next ten paths support reaction arrows from the mhchem package.\n // Arrows for \\ce{<--\x3e} are offset from xAxis by 0.22ex, per mhchem in LaTeX\n // baraboveleftarrow is mostly from glyph U+2190 in font KaTeX Main\n baraboveleftarrow: "M400000 620h-399890l3 -3c68.7 -52.7 113.7 -120 135 -202\\nc4 -14.7 6 -23 6 -25c0 -7.3 -7 -11 -21 -11c-8 0 -13.2 0.8 -15.5 2.5\\nc-2.3 1.7 -4.2 5.8 -5.5 12.5c-1.3 4.7 -2.7 10.3 -4 17c-12 48.7 -34.8 92 -68.5 130\\ns-74.2 66.3 -121.5 85c-10 4 -16 7.7 -18 11c0 8.7 6 14.3 18 17c47.3 18.7 87.8 47\\n121.5 85s56.5 81.3 68.5 130c0.7 2 1.3 5 2 9s1.2 6.7 1.5 8c0.3 1.3 1 3.3 2 6\\ns2.2 4.5 3.5 5.5c1.3 1 3.3 1.8 6 2.5s6 1 10 1c14 0 21 -3.7 21 -11\\nc0 -2 -2 -10.3 -6 -25c-20 -79.3 -65 -146.7 -135 -202l-3 -3h399890z\\nM100 620v40h399900v-40z M0 241v40h399900v-40zM0 241v40h399900v-40z",\n // rightarrowabovebar is mostly from glyph U+2192, KaTeX Main\n rightarrowabovebar: "M0 241v40h399891c-47.3 35.3-84 78-110 128-16.7 32\\n-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20 11 8 0\\n13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7 39\\n-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85-40.5\\n-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5\\n-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67\\n151.7 139 205zm96 379h399894v40H0zm0 0h399904v40H0z",\n // The short left harpoon has 0.5em (i.e. 500 units) kern on the left end.\n // Ref from mhchem.sty: \\rlap{\\raisebox{-.22ex}{$\\kern0.5em\n baraboveshortleftharpoon: "M507,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11\\nc1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17\\nc2,0.7,5,1,9,1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21\\nc-32,-87.3,-82.7,-157.7,-152,-211c0,0,-3,-3,-3,-3l399351,0l0,-40\\nc-398570,0,-399437,0,-399437,0z M593 435 v40 H399500 v-40z\\nM0 281 v-40 H399908 v40z M0 281 v-40 H399908 v40z",\n rightharpoonaboveshortbar: "M0,241 l0,40c399126,0,399993,0,399993,0\\nc4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199,\\n-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6\\nc-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z\\nM0 241 v40 H399908 v-40z M0 475 v-40 H399500 v40z M0 475 v-40 H399500 v40z",\n shortbaraboveleftharpoon: "M7,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11\\nc1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17c2,0.7,5,1,9,\\n1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21c-32,-87.3,-82.7,-157.7,\\n-152,-211c0,0,-3,-3,-3,-3l399907,0l0,-40c-399126,0,-399993,0,-399993,0z\\nM93 435 v40 H400000 v-40z M500 241 v40 H400000 v-40z M500 241 v40 H400000 v-40z",\n shortrightharpoonabovebar: "M53,241l0,40c398570,0,399437,0,399437,0\\nc4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199,\\n-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6\\nc-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z\\nM500 241 v40 H399408 v-40z M500 435 v40 H400000 v-40z"\n};\nconst tallDelim = function (label, midHeight) {\n switch (label) {\n case "lbrack":\n return "M403 1759 V84 H666 V0 H319 V1759 v" + midHeight + " v1759 h347 v-84\\nH403z M403 1759 V0 H319 V1759 v" + midHeight + " v1759 h84z";\n\n case "rbrack":\n return "M347 1759 V0 H0 V84 H263 V1759 v" + midHeight + " v1759 H0 v84 H347z\\nM347 1759 V0 H263 V1759 v" + midHeight + " v1759 h84z";\n\n case "vert":\n return "M145 15 v585 v" + midHeight + " v585 c2.667,10,9.667,15,21,15\\nc10,0,16.667,-5,20,-15 v-585 v" + -midHeight + " v-585 c-2.667,-10,-9.667,-15,-21,-15\\nc-10,0,-16.667,5,-20,15z M188 15 H145 v585 v" + midHeight + " v585 h43z";\n\n case "doublevert":\n return "M145 15 v585 v" + midHeight + " v585 c2.667,10,9.667,15,21,15\\nc10,0,16.667,-5,20,-15 v-585 v" + -midHeight + " v-585 c-2.667,-10,-9.667,-15,-21,-15\\nc-10,0,-16.667,5,-20,15z M188 15 H145 v585 v" + midHeight + " v585 h43z\\nM367 15 v585 v" + midHeight + " v585 c2.667,10,9.667,15,21,15\\nc10,0,16.667,-5,20,-15 v-585 v" + -midHeight + " v-585 c-2.667,-10,-9.667,-15,-21,-15\\nc-10,0,-16.667,5,-20,15z M410 15 H367 v585 v" + midHeight + " v585 h43z";\n\n case "lfloor":\n return "M319 602 V0 H403 V602 v" + midHeight + " v1715 h263 v84 H319z\\nMM319 602 V0 H403 V602 v" + midHeight + " v1715 H319z";\n\n case "rfloor":\n return "M319 602 V0 H403 V602 v" + midHeight + " v1799 H0 v-84 H319z\\nMM319 602 V0 H403 V602 v" + midHeight + " v1715 H319z";\n\n case "lceil":\n return "M403 1759 V84 H666 V0 H319 V1759 v" + midHeight + " v602 h84z\\nM403 1759 V0 H319 V1759 v" + midHeight + " v602 h84z";\n\n case "rceil":\n return "M347 1759 V0 H0 V84 H263 V1759 v" + midHeight + " v602 h84z\\nM347 1759 V0 h-84 V1759 v" + midHeight + " v602 h84z";\n\n case "lparen":\n return "M863,9c0,-2,-2,-5,-6,-9c0,0,-17,0,-17,0c-12.7,0,-19.3,0.3,-20,1\\nc-5.3,5.3,-10.3,11,-15,17c-242.7,294.7,-395.3,682,-458,1162c-21.3,163.3,-33.3,349,\\n-36,557 l0," + (midHeight + 84) + "c0.2,6,0,26,0,60c2,159.3,10,310.7,24,454c53.3,528,210,\\n949.7,470,1265c4.7,6,9.7,11.7,15,17c0.7,0.7,7,1,19,1c0,0,18,0,18,0c4,-4,6,-7,6,-9\\nc0,-2.7,-3.3,-8.7,-10,-18c-135.3,-192.7,-235.5,-414.3,-300.5,-665c-65,-250.7,-102.5,\\n-544.7,-112.5,-882c-2,-104,-3,-167,-3,-189\\nl0,-" + (midHeight + 92) + "c0,-162.7,5.7,-314,17,-454c20.7,-272,63.7,-513,129,-723c65.3,\\n-210,155.3,-396.3,270,-559c6.7,-9.3,10,-15.3,10,-18z";\n\n case "rparen":\n return "M76,0c-16.7,0,-25,3,-25,9c0,2,2,6.3,6,13c21.3,28.7,42.3,60.3,\\n63,95c96.7,156.7,172.8,332.5,228.5,527.5c55.7,195,92.8,416.5,111.5,664.5\\nc11.3,139.3,17,290.7,17,454c0,28,1.7,43,3.3,45l0," + (midHeight + 9) + "\\nc-3,4,-3.3,16.7,-3.3,38c0,162,-5.7,313.7,-17,455c-18.7,248,-55.8,469.3,-111.5,664\\nc-55.7,194.7,-131.8,370.3,-228.5,527c-20.7,34.7,-41.7,66.3,-63,95c-2,3.3,-4,7,-6,11\\nc0,7.3,5.7,11,17,11c0,0,11,0,11,0c9.3,0,14.3,-0.3,15,-1c5.3,-5.3,10.3,-11,15,-17\\nc242.7,-294.7,395.3,-681.7,458,-1161c21.3,-164.7,33.3,-350.7,36,-558\\nl0,-" + (midHeight + 144) + "c-2,-159.3,-10,-310.7,-24,-454c-53.3,-528,-210,-949.7,\\n-470,-1265c-4.7,-6,-9.7,-11.7,-15,-17c-0.7,-0.7,-6.7,-1,-18,-1z";\n\n default:\n // We should not ever get here.\n throw new Error("Unknown stretchy delimiter.");\n }\n};\n;// CONCATENATED MODULE: ./src/tree.js\n\n\n/**\n * This node represents a document fragment, which contains elements, but when\n * placed into the DOM doesn\'t have any representation itself. It only contains\n * children and doesn\'t have any DOM node properties.\n */\nclass DocumentFragment {\n // HtmlDomNode\n // Never used; needed for satisfying interface.\n constructor(children) {\n this.children = void 0;\n this.classes = void 0;\n this.height = void 0;\n this.depth = void 0;\n this.maxFontSize = void 0;\n this.style = void 0;\n this.children = children;\n this.classes = [];\n this.height = 0;\n this.depth = 0;\n this.maxFontSize = 0;\n this.style = {};\n }\n\n hasClass(className) {\n return utils.contains(this.classes, className);\n }\n /** Convert the fragment into a node. */\n\n\n toNode() {\n const frag = document.createDocumentFragment();\n\n for (let i = 0; i < this.children.length; i++) {\n frag.appendChild(this.children[i].toNode());\n }\n\n return frag;\n }\n /** Convert the fragment into HTML markup. */\n\n\n toMarkup() {\n let markup = ""; // Simply concatenate the markup for the children together.\n\n for (let i = 0; i < this.children.length; i++) {\n markup += this.children[i].toMarkup();\n }\n\n return markup;\n }\n /**\n * Converts the math node into a string, similar to innerText. Applies to\n * MathDomNode\'s only.\n */\n\n\n toText() {\n // To avoid this, we would subclass documentFragment separately for\n // MathML, but polyfills for subclassing is expensive per PR 1469.\n // $FlowFixMe: Only works for ChildType = MathDomNode.\n const toText = child => child.toText();\n\n return this.children.map(toText).join("");\n }\n\n}\n;// CONCATENATED MODULE: ./src/fontMetricsData.js\n// This file is GENERATED by buildMetrics.sh. DO NOT MODIFY.\n/* harmony default export */ var fontMetricsData = ({\n "AMS-Regular": {\n "32": [0, 0, 0, 0, 0.25],\n "65": [0, 0.68889, 0, 0, 0.72222],\n "66": [0, 0.68889, 0, 0, 0.66667],\n "67": [0, 0.68889, 0, 0, 0.72222],\n "68": [0, 0.68889, 0, 0, 0.72222],\n "69": [0, 0.68889, 0, 0, 0.66667],\n "70": [0, 0.68889, 0, 0, 0.61111],\n "71": [0, 0.68889, 0, 0, 0.77778],\n "72": [0, 0.68889, 0, 0, 0.77778],\n "73": [0, 0.68889, 0, 0, 0.38889],\n "74": [0.16667, 0.68889, 0, 0, 0.5],\n "75": [0, 0.68889, 0, 0, 0.77778],\n "76": [0, 0.68889, 0, 0, 0.66667],\n "77": [0, 0.68889, 0, 0, 0.94445],\n "78": [0, 0.68889, 0, 0, 0.72222],\n "79": [0.16667, 0.68889, 0, 0, 0.77778],\n "80": [0, 0.68889, 0, 0, 0.61111],\n "81": [0.16667, 0.68889, 0, 0, 0.77778],\n "82": [0, 0.68889, 0, 0, 0.72222],\n "83": [0, 0.68889, 0, 0, 0.55556],\n "84": [0, 0.68889, 0, 0, 0.66667],\n "85": [0, 0.68889, 0, 0, 0.72222],\n "86": [0, 0.68889, 0, 0, 0.72222],\n "87": [0, 0.68889, 0, 0, 1.0],\n "88": [0, 0.68889, 0, 0, 0.72222],\n "89": [0, 0.68889, 0, 0, 0.72222],\n "90": [0, 0.68889, 0, 0, 0.66667],\n "107": [0, 0.68889, 0, 0, 0.55556],\n "160": [0, 0, 0, 0, 0.25],\n "165": [0, 0.675, 0.025, 0, 0.75],\n "174": [0.15559, 0.69224, 0, 0, 0.94666],\n "240": [0, 0.68889, 0, 0, 0.55556],\n "295": [0, 0.68889, 0, 0, 0.54028],\n "710": [0, 0.825, 0, 0, 2.33334],\n "732": [0, 0.9, 0, 0, 2.33334],\n "770": [0, 0.825, 0, 0, 2.33334],\n "771": [0, 0.9, 0, 0, 2.33334],\n "989": [0.08167, 0.58167, 0, 0, 0.77778],\n "1008": [0, 0.43056, 0.04028, 0, 0.66667],\n "8245": [0, 0.54986, 0, 0, 0.275],\n "8463": [0, 0.68889, 0, 0, 0.54028],\n "8487": [0, 0.68889, 0, 0, 0.72222],\n "8498": [0, 0.68889, 0, 0, 0.55556],\n "8502": [0, 0.68889, 0, 0, 0.66667],\n "8503": [0, 0.68889, 0, 0, 0.44445],\n "8504": [0, 0.68889, 0, 0, 0.66667],\n "8513": [0, 0.68889, 0, 0, 0.63889],\n "8592": [-0.03598, 0.46402, 0, 0, 0.5],\n "8594": [-0.03598, 0.46402, 0, 0, 0.5],\n "8602": [-0.13313, 0.36687, 0, 0, 1.0],\n "8603": [-0.13313, 0.36687, 0, 0, 1.0],\n "8606": [0.01354, 0.52239, 0, 0, 1.0],\n "8608": [0.01354, 0.52239, 0, 0, 1.0],\n "8610": [0.01354, 0.52239, 0, 0, 1.11111],\n "8611": [0.01354, 0.52239, 0, 0, 1.11111],\n "8619": [0, 0.54986, 0, 0, 1.0],\n "8620": [0, 0.54986, 0, 0, 1.0],\n "8621": [-0.13313, 0.37788, 0, 0, 1.38889],\n "8622": [-0.13313, 0.36687, 0, 0, 1.0],\n "8624": [0, 0.69224, 0, 0, 0.5],\n "8625": [0, 0.69224, 0, 0, 0.5],\n "8630": [0, 0.43056, 0, 0, 1.0],\n "8631": [0, 0.43056, 0, 0, 1.0],\n "8634": [0.08198, 0.58198, 0, 0, 0.77778],\n "8635": [0.08198, 0.58198, 0, 0, 0.77778],\n "8638": [0.19444, 0.69224, 0, 0, 0.41667],\n "8639": [0.19444, 0.69224, 0, 0, 0.41667],\n "8642": [0.19444, 0.69224, 0, 0, 0.41667],\n "8643": [0.19444, 0.69224, 0, 0, 0.41667],\n "8644": [0.1808, 0.675, 0, 0, 1.0],\n "8646": [0.1808, 0.675, 0, 0, 1.0],\n "8647": [0.1808, 0.675, 0, 0, 1.0],\n "8648": [0.19444, 0.69224, 0, 0, 0.83334],\n "8649": [0.1808, 0.675, 0, 0, 1.0],\n "8650": [0.19444, 0.69224, 0, 0, 0.83334],\n "8651": [0.01354, 0.52239, 0, 0, 1.0],\n "8652": [0.01354, 0.52239, 0, 0, 1.0],\n "8653": [-0.13313, 0.36687, 0, 0, 1.0],\n "8654": [-0.13313, 0.36687, 0, 0, 1.0],\n "8655": [-0.13313, 0.36687, 0, 0, 1.0],\n "8666": [0.13667, 0.63667, 0, 0, 1.0],\n "8667": [0.13667, 0.63667, 0, 0, 1.0],\n "8669": [-0.13313, 0.37788, 0, 0, 1.0],\n "8672": [-0.064, 0.437, 0, 0, 1.334],\n "8674": [-0.064, 0.437, 0, 0, 1.334],\n "8705": [0, 0.825, 0, 0, 0.5],\n "8708": [0, 0.68889, 0, 0, 0.55556],\n "8709": [0.08167, 0.58167, 0, 0, 0.77778],\n "8717": [0, 0.43056, 0, 0, 0.42917],\n "8722": [-0.03598, 0.46402, 0, 0, 0.5],\n "8724": [0.08198, 0.69224, 0, 0, 0.77778],\n "8726": [0.08167, 0.58167, 0, 0, 0.77778],\n "8733": [0, 0.69224, 0, 0, 0.77778],\n "8736": [0, 0.69224, 0, 0, 0.72222],\n "8737": [0, 0.69224, 0, 0, 0.72222],\n "8738": [0.03517, 0.52239, 0, 0, 0.72222],\n "8739": [0.08167, 0.58167, 0, 0, 0.22222],\n "8740": [0.25142, 0.74111, 0, 0, 0.27778],\n "8741": [0.08167, 0.58167, 0, 0, 0.38889],\n "8742": [0.25142, 0.74111, 0, 0, 0.5],\n "8756": [0, 0.69224, 0, 0, 0.66667],\n "8757": [0, 0.69224, 0, 0, 0.66667],\n "8764": [-0.13313, 0.36687, 0, 0, 0.77778],\n "8765": [-0.13313, 0.37788, 0, 0, 0.77778],\n "8769": [-0.13313, 0.36687, 0, 0, 0.77778],\n "8770": [-0.03625, 0.46375, 0, 0, 0.77778],\n "8774": [0.30274, 0.79383, 0, 0, 0.77778],\n "8776": [-0.01688, 0.48312, 0, 0, 0.77778],\n "8778": [0.08167, 0.58167, 0, 0, 0.77778],\n "8782": [0.06062, 0.54986, 0, 0, 0.77778],\n "8783": [0.06062, 0.54986, 0, 0, 0.77778],\n "8785": [0.08198, 0.58198, 0, 0, 0.77778],\n "8786": [0.08198, 0.58198, 0, 0, 0.77778],\n "8787": [0.08198, 0.58198, 0, 0, 0.77778],\n "8790": [0, 0.69224, 0, 0, 0.77778],\n "8791": [0.22958, 0.72958, 0, 0, 0.77778],\n "8796": [0.08198, 0.91667, 0, 0, 0.77778],\n "8806": [0.25583, 0.75583, 0, 0, 0.77778],\n "8807": [0.25583, 0.75583, 0, 0, 0.77778],\n "8808": [0.25142, 0.75726, 0, 0, 0.77778],\n "8809": [0.25142, 0.75726, 0, 0, 0.77778],\n "8812": [0.25583, 0.75583, 0, 0, 0.5],\n "8814": [0.20576, 0.70576, 0, 0, 0.77778],\n "8815": [0.20576, 0.70576, 0, 0, 0.77778],\n "8816": [0.30274, 0.79383, 0, 0, 0.77778],\n "8817": [0.30274, 0.79383, 0, 0, 0.77778],\n "8818": [0.22958, 0.72958, 0, 0, 0.77778],\n "8819": [0.22958, 0.72958, 0, 0, 0.77778],\n "8822": [0.1808, 0.675, 0, 0, 0.77778],\n "8823": [0.1808, 0.675, 0, 0, 0.77778],\n "8828": [0.13667, 0.63667, 0, 0, 0.77778],\n "8829": [0.13667, 0.63667, 0, 0, 0.77778],\n "8830": [0.22958, 0.72958, 0, 0, 0.77778],\n "8831": [0.22958, 0.72958, 0, 0, 0.77778],\n "8832": [0.20576, 0.70576, 0, 0, 0.77778],\n "8833": [0.20576, 0.70576, 0, 0, 0.77778],\n "8840": [0.30274, 0.79383, 0, 0, 0.77778],\n "8841": [0.30274, 0.79383, 0, 0, 0.77778],\n "8842": [0.13597, 0.63597, 0, 0, 0.77778],\n "8843": [0.13597, 0.63597, 0, 0, 0.77778],\n "8847": [0.03517, 0.54986, 0, 0, 0.77778],\n "8848": [0.03517, 0.54986, 0, 0, 0.77778],\n "8858": [0.08198, 0.58198, 0, 0, 0.77778],\n "8859": [0.08198, 0.58198, 0, 0, 0.77778],\n "8861": [0.08198, 0.58198, 0, 0, 0.77778],\n "8862": [0, 0.675, 0, 0, 0.77778],\n "8863": [0, 0.675, 0, 0, 0.77778],\n "8864": [0, 0.675, 0, 0, 0.77778],\n "8865": [0, 0.675, 0, 0, 0.77778],\n "8872": [0, 0.69224, 0, 0, 0.61111],\n "8873": [0, 0.69224, 0, 0, 0.72222],\n "8874": [0, 0.69224, 0, 0, 0.88889],\n "8876": [0, 0.68889, 0, 0, 0.61111],\n "8877": [0, 0.68889, 0, 0, 0.61111],\n "8878": [0, 0.68889, 0, 0, 0.72222],\n "8879": [0, 0.68889, 0, 0, 0.72222],\n "8882": [0.03517, 0.54986, 0, 0, 0.77778],\n "8883": [0.03517, 0.54986, 0, 0, 0.77778],\n "8884": [0.13667, 0.63667, 0, 0, 0.77778],\n "8885": [0.13667, 0.63667, 0, 0, 0.77778],\n "8888": [0, 0.54986, 0, 0, 1.11111],\n "8890": [0.19444, 0.43056, 0, 0, 0.55556],\n "8891": [0.19444, 0.69224, 0, 0, 0.61111],\n "8892": [0.19444, 0.69224, 0, 0, 0.61111],\n "8901": [0, 0.54986, 0, 0, 0.27778],\n "8903": [0.08167, 0.58167, 0, 0, 0.77778],\n "8905": [0.08167, 0.58167, 0, 0, 0.77778],\n "8906": [0.08167, 0.58167, 0, 0, 0.77778],\n "8907": [0, 0.69224, 0, 0, 0.77778],\n "8908": [0, 0.69224, 0, 0, 0.77778],\n "8909": [-0.03598, 0.46402, 0, 0, 0.77778],\n "8910": [0, 0.54986, 0, 0, 0.76042],\n "8911": [0, 0.54986, 0, 0, 0.76042],\n "8912": [0.03517, 0.54986, 0, 0, 0.77778],\n "8913": [0.03517, 0.54986, 0, 0, 0.77778],\n "8914": [0, 0.54986, 0, 0, 0.66667],\n "8915": [0, 0.54986, 0, 0, 0.66667],\n "8916": [0, 0.69224, 0, 0, 0.66667],\n "8918": [0.0391, 0.5391, 0, 0, 0.77778],\n "8919": [0.0391, 0.5391, 0, 0, 0.77778],\n "8920": [0.03517, 0.54986, 0, 0, 1.33334],\n "8921": [0.03517, 0.54986, 0, 0, 1.33334],\n "8922": [0.38569, 0.88569, 0, 0, 0.77778],\n "8923": [0.38569, 0.88569, 0, 0, 0.77778],\n "8926": [0.13667, 0.63667, 0, 0, 0.77778],\n "8927": [0.13667, 0.63667, 0, 0, 0.77778],\n "8928": [0.30274, 0.79383, 0, 0, 0.77778],\n "8929": [0.30274, 0.79383, 0, 0, 0.77778],\n "8934": [0.23222, 0.74111, 0, 0, 0.77778],\n "8935": [0.23222, 0.74111, 0, 0, 0.77778],\n "8936": [0.23222, 0.74111, 0, 0, 0.77778],\n "8937": [0.23222, 0.74111, 0, 0, 0.77778],\n "8938": [0.20576, 0.70576, 0, 0, 0.77778],\n "8939": [0.20576, 0.70576, 0, 0, 0.77778],\n "8940": [0.30274, 0.79383, 0, 0, 0.77778],\n "8941": [0.30274, 0.79383, 0, 0, 0.77778],\n "8994": [0.19444, 0.69224, 0, 0, 0.77778],\n "8995": [0.19444, 0.69224, 0, 0, 0.77778],\n "9416": [0.15559, 0.69224, 0, 0, 0.90222],\n "9484": [0, 0.69224, 0, 0, 0.5],\n "9488": [0, 0.69224, 0, 0, 0.5],\n "9492": [0, 0.37788, 0, 0, 0.5],\n "9496": [0, 0.37788, 0, 0, 0.5],\n "9585": [0.19444, 0.68889, 0, 0, 0.88889],\n "9586": [0.19444, 0.74111, 0, 0, 0.88889],\n "9632": [0, 0.675, 0, 0, 0.77778],\n "9633": [0, 0.675, 0, 0, 0.77778],\n "9650": [0, 0.54986, 0, 0, 0.72222],\n "9651": [0, 0.54986, 0, 0, 0.72222],\n "9654": [0.03517, 0.54986, 0, 0, 0.77778],\n "9660": [0, 0.54986, 0, 0, 0.72222],\n "9661": [0, 0.54986, 0, 0, 0.72222],\n "9664": [0.03517, 0.54986, 0, 0, 0.77778],\n "9674": [0.11111, 0.69224, 0, 0, 0.66667],\n "9733": [0.19444, 0.69224, 0, 0, 0.94445],\n "10003": [0, 0.69224, 0, 0, 0.83334],\n "10016": [0, 0.69224, 0, 0, 0.83334],\n "10731": [0.11111, 0.69224, 0, 0, 0.66667],\n "10846": [0.19444, 0.75583, 0, 0, 0.61111],\n "10877": [0.13667, 0.63667, 0, 0, 0.77778],\n "10878": [0.13667, 0.63667, 0, 0, 0.77778],\n "10885": [0.25583, 0.75583, 0, 0, 0.77778],\n "10886": [0.25583, 0.75583, 0, 0, 0.77778],\n "10887": [0.13597, 0.63597, 0, 0, 0.77778],\n "10888": [0.13597, 0.63597, 0, 0, 0.77778],\n "10889": [0.26167, 0.75726, 0, 0, 0.77778],\n "10890": [0.26167, 0.75726, 0, 0, 0.77778],\n "10891": [0.48256, 0.98256, 0, 0, 0.77778],\n "10892": [0.48256, 0.98256, 0, 0, 0.77778],\n "10901": [0.13667, 0.63667, 0, 0, 0.77778],\n "10902": [0.13667, 0.63667, 0, 0, 0.77778],\n "10933": [0.25142, 0.75726, 0, 0, 0.77778],\n "10934": [0.25142, 0.75726, 0, 0, 0.77778],\n "10935": [0.26167, 0.75726, 0, 0, 0.77778],\n "10936": [0.26167, 0.75726, 0, 0, 0.77778],\n "10937": [0.26167, 0.75726, 0, 0, 0.77778],\n "10938": [0.26167, 0.75726, 0, 0, 0.77778],\n "10949": [0.25583, 0.75583, 0, 0, 0.77778],\n "10950": [0.25583, 0.75583, 0, 0, 0.77778],\n "10955": [0.28481, 0.79383, 0, 0, 0.77778],\n "10956": [0.28481, 0.79383, 0, 0, 0.77778],\n "57350": [0.08167, 0.58167, 0, 0, 0.22222],\n "57351": [0.08167, 0.58167, 0, 0, 0.38889],\n "57352": [0.08167, 0.58167, 0, 0, 0.77778],\n "57353": [0, 0.43056, 0.04028, 0, 0.66667],\n "57356": [0.25142, 0.75726, 0, 0, 0.77778],\n "57357": [0.25142, 0.75726, 0, 0, 0.77778],\n "57358": [0.41951, 0.91951, 0, 0, 0.77778],\n "57359": [0.30274, 0.79383, 0, 0, 0.77778],\n "57360": [0.30274, 0.79383, 0, 0, 0.77778],\n "57361": [0.41951, 0.91951, 0, 0, 0.77778],\n "57366": [0.25142, 0.75726, 0, 0, 0.77778],\n "57367": [0.25142, 0.75726, 0, 0, 0.77778],\n "57368": [0.25142, 0.75726, 0, 0, 0.77778],\n "57369": [0.25142, 0.75726, 0, 0, 0.77778],\n "57370": [0.13597, 0.63597, 0, 0, 0.77778],\n "57371": [0.13597, 0.63597, 0, 0, 0.77778]\n },\n "Caligraphic-Regular": {\n "32": [0, 0, 0, 0, 0.25],\n "65": [0, 0.68333, 0, 0.19445, 0.79847],\n "66": [0, 0.68333, 0.03041, 0.13889, 0.65681],\n "67": [0, 0.68333, 0.05834, 0.13889, 0.52653],\n "68": [0, 0.68333, 0.02778, 0.08334, 0.77139],\n "69": [0, 0.68333, 0.08944, 0.11111, 0.52778],\n "70": [0, 0.68333, 0.09931, 0.11111, 0.71875],\n "71": [0.09722, 0.68333, 0.0593, 0.11111, 0.59487],\n "72": [0, 0.68333, 0.00965, 0.11111, 0.84452],\n "73": [0, 0.68333, 0.07382, 0, 0.54452],\n "74": [0.09722, 0.68333, 0.18472, 0.16667, 0.67778],\n "75": [0, 0.68333, 0.01445, 0.05556, 0.76195],\n "76": [0, 0.68333, 0, 0.13889, 0.68972],\n "77": [0, 0.68333, 0, 0.13889, 1.2009],\n "78": [0, 0.68333, 0.14736, 0.08334, 0.82049],\n "79": [0, 0.68333, 0.02778, 0.11111, 0.79611],\n "80": [0, 0.68333, 0.08222, 0.08334, 0.69556],\n "81": [0.09722, 0.68333, 0, 0.11111, 0.81667],\n "82": [0, 0.68333, 0, 0.08334, 0.8475],\n "83": [0, 0.68333, 0.075, 0.13889, 0.60556],\n "84": [0, 0.68333, 0.25417, 0, 0.54464],\n "85": [0, 0.68333, 0.09931, 0.08334, 0.62583],\n "86": [0, 0.68333, 0.08222, 0, 0.61278],\n "87": [0, 0.68333, 0.08222, 0.08334, 0.98778],\n "88": [0, 0.68333, 0.14643, 0.13889, 0.7133],\n "89": [0.09722, 0.68333, 0.08222, 0.08334, 0.66834],\n "90": [0, 0.68333, 0.07944, 0.13889, 0.72473],\n "160": [0, 0, 0, 0, 0.25]\n },\n "Fraktur-Regular": {\n "32": [0, 0, 0, 0, 0.25],\n "33": [0, 0.69141, 0, 0, 0.29574],\n "34": [0, 0.69141, 0, 0, 0.21471],\n "38": [0, 0.69141, 0, 0, 0.73786],\n "39": [0, 0.69141, 0, 0, 0.21201],\n "40": [0.24982, 0.74947, 0, 0, 0.38865],\n "41": [0.24982, 0.74947, 0, 0, 0.38865],\n "42": [0, 0.62119, 0, 0, 0.27764],\n "43": [0.08319, 0.58283, 0, 0, 0.75623],\n "44": [0, 0.10803, 0, 0, 0.27764],\n "45": [0.08319, 0.58283, 0, 0, 0.75623],\n "46": [0, 0.10803, 0, 0, 0.27764],\n "47": [0.24982, 0.74947, 0, 0, 0.50181],\n "48": [0, 0.47534, 0, 0, 0.50181],\n "49": [0, 0.47534, 0, 0, 0.50181],\n "50": [0, 0.47534, 0, 0, 0.50181],\n "51": [0.18906, 0.47534, 0, 0, 0.50181],\n "52": [0.18906, 0.47534, 0, 0, 0.50181],\n "53": [0.18906, 0.47534, 0, 0, 0.50181],\n "54": [0, 0.69141, 0, 0, 0.50181],\n "55": [0.18906, 0.47534, 0, 0, 0.50181],\n "56": [0, 0.69141, 0, 0, 0.50181],\n "57": [0.18906, 0.47534, 0, 0, 0.50181],\n "58": [0, 0.47534, 0, 0, 0.21606],\n "59": [0.12604, 0.47534, 0, 0, 0.21606],\n "61": [-0.13099, 0.36866, 0, 0, 0.75623],\n "63": [0, 0.69141, 0, 0, 0.36245],\n "65": [0, 0.69141, 0, 0, 0.7176],\n "66": [0, 0.69141, 0, 0, 0.88397],\n "67": [0, 0.69141, 0, 0, 0.61254],\n "68": [0, 0.69141, 0, 0, 0.83158],\n "69": [0, 0.69141, 0, 0, 0.66278],\n "70": [0.12604, 0.69141, 0, 0, 0.61119],\n "71": [0, 0.69141, 0, 0, 0.78539],\n "72": [0.06302, 0.69141, 0, 0, 0.7203],\n "73": [0, 0.69141, 0, 0, 0.55448],\n "74": [0.12604, 0.69141, 0, 0, 0.55231],\n "75": [0, 0.69141, 0, 0, 0.66845],\n "76": [0, 0.69141, 0, 0, 0.66602],\n "77": [0, 0.69141, 0, 0, 1.04953],\n "78": [0, 0.69141, 0, 0, 0.83212],\n "79": [0, 0.69141, 0, 0, 0.82699],\n "80": [0.18906, 0.69141, 0, 0, 0.82753],\n "81": [0.03781, 0.69141, 0, 0, 0.82699],\n "82": [0, 0.69141, 0, 0, 0.82807],\n "83": [0, 0.69141, 0, 0, 0.82861],\n "84": [0, 0.69141, 0, 0, 0.66899],\n "85": [0, 0.69141, 0, 0, 0.64576],\n "86": [0, 0.69141, 0, 0, 0.83131],\n "87": [0, 0.69141, 0, 0, 1.04602],\n "88": [0, 0.69141, 0, 0, 0.71922],\n "89": [0.18906, 0.69141, 0, 0, 0.83293],\n "90": [0.12604, 0.69141, 0, 0, 0.60201],\n "91": [0.24982, 0.74947, 0, 0, 0.27764],\n "93": [0.24982, 0.74947, 0, 0, 0.27764],\n "94": [0, 0.69141, 0, 0, 0.49965],\n "97": [0, 0.47534, 0, 0, 0.50046],\n "98": [0, 0.69141, 0, 0, 0.51315],\n "99": [0, 0.47534, 0, 0, 0.38946],\n "100": [0, 0.62119, 0, 0, 0.49857],\n "101": [0, 0.47534, 0, 0, 0.40053],\n "102": [0.18906, 0.69141, 0, 0, 0.32626],\n "103": [0.18906, 0.47534, 0, 0, 0.5037],\n "104": [0.18906, 0.69141, 0, 0, 0.52126],\n "105": [0, 0.69141, 0, 0, 0.27899],\n "106": [0, 0.69141, 0, 0, 0.28088],\n "107": [0, 0.69141, 0, 0, 0.38946],\n "108": [0, 0.69141, 0, 0, 0.27953],\n "109": [0, 0.47534, 0, 0, 0.76676],\n "110": [0, 0.47534, 0, 0, 0.52666],\n "111": [0, 0.47534, 0, 0, 0.48885],\n "112": [0.18906, 0.52396, 0, 0, 0.50046],\n "113": [0.18906, 0.47534, 0, 0, 0.48912],\n "114": [0, 0.47534, 0, 0, 0.38919],\n "115": [0, 0.47534, 0, 0, 0.44266],\n "116": [0, 0.62119, 0, 0, 0.33301],\n "117": [0, 0.47534, 0, 0, 0.5172],\n "118": [0, 0.52396, 0, 0, 0.5118],\n "119": [0, 0.52396, 0, 0, 0.77351],\n "120": [0.18906, 0.47534, 0, 0, 0.38865],\n "121": [0.18906, 0.47534, 0, 0, 0.49884],\n "122": [0.18906, 0.47534, 0, 0, 0.39054],\n "160": [0, 0, 0, 0, 0.25],\n "8216": [0, 0.69141, 0, 0, 0.21471],\n "8217": [0, 0.69141, 0, 0, 0.21471],\n "58112": [0, 0.62119, 0, 0, 0.49749],\n "58113": [0, 0.62119, 0, 0, 0.4983],\n "58114": [0.18906, 0.69141, 0, 0, 0.33328],\n "58115": [0.18906, 0.69141, 0, 0, 0.32923],\n "58116": [0.18906, 0.47534, 0, 0, 0.50343],\n "58117": [0, 0.69141, 0, 0, 0.33301],\n "58118": [0, 0.62119, 0, 0, 0.33409],\n "58119": [0, 0.47534, 0, 0, 0.50073]\n },\n "Main-Bold": {\n "32": [0, 0, 0, 0, 0.25],\n "33": [0, 0.69444, 0, 0, 0.35],\n "34": [0, 0.69444, 0, 0, 0.60278],\n "35": [0.19444, 0.69444, 0, 0, 0.95833],\n "36": [0.05556, 0.75, 0, 0, 0.575],\n "37": [0.05556, 0.75, 0, 0, 0.95833],\n "38": [0, 0.69444, 0, 0, 0.89444],\n "39": [0, 0.69444, 0, 0, 0.31944],\n "40": [0.25, 0.75, 0, 0, 0.44722],\n "41": [0.25, 0.75, 0, 0, 0.44722],\n "42": [0, 0.75, 0, 0, 0.575],\n "43": [0.13333, 0.63333, 0, 0, 0.89444],\n "44": [0.19444, 0.15556, 0, 0, 0.31944],\n "45": [0, 0.44444, 0, 0, 0.38333],\n "46": [0, 0.15556, 0, 0, 0.31944],\n "47": [0.25, 0.75, 0, 0, 0.575],\n "48": [0, 0.64444, 0, 0, 0.575],\n "49": [0, 0.64444, 0, 0, 0.575],\n "50": [0, 0.64444, 0, 0, 0.575],\n "51": [0, 0.64444, 0, 0, 0.575],\n "52": [0, 0.64444, 0, 0, 0.575],\n "53": [0, 0.64444, 0, 0, 0.575],\n "54": [0, 0.64444, 0, 0, 0.575],\n "55": [0, 0.64444, 0, 0, 0.575],\n "56": [0, 0.64444, 0, 0, 0.575],\n "57": [0, 0.64444, 0, 0, 0.575],\n "58": [0, 0.44444, 0, 0, 0.31944],\n "59": [0.19444, 0.44444, 0, 0, 0.31944],\n "60": [0.08556, 0.58556, 0, 0, 0.89444],\n "61": [-0.10889, 0.39111, 0, 0, 0.89444],\n "62": [0.08556, 0.58556, 0, 0, 0.89444],\n "63": [0, 0.69444, 0, 0, 0.54305],\n "64": [0, 0.69444, 0, 0, 0.89444],\n "65": [0, 0.68611, 0, 0, 0.86944],\n "66": [0, 0.68611, 0, 0, 0.81805],\n "67": [0, 0.68611, 0, 0, 0.83055],\n "68": [0, 0.68611, 0, 0, 0.88194],\n "69": [0, 0.68611, 0, 0, 0.75555],\n "70": [0, 0.68611, 0, 0, 0.72361],\n "71": [0, 0.68611, 0, 0, 0.90416],\n "72": [0, 0.68611, 0, 0, 0.9],\n "73": [0, 0.68611, 0, 0, 0.43611],\n "74": [0, 0.68611, 0, 0, 0.59444],\n "75": [0, 0.68611, 0, 0, 0.90138],\n "76": [0, 0.68611, 0, 0, 0.69166],\n "77": [0, 0.68611, 0, 0, 1.09166],\n "78": [0, 0.68611, 0, 0, 0.9],\n "79": [0, 0.68611, 0, 0, 0.86388],\n "80": [0, 0.68611, 0, 0, 0.78611],\n "81": [0.19444, 0.68611, 0, 0, 0.86388],\n "82": [0, 0.68611, 0, 0, 0.8625],\n "83": [0, 0.68611, 0, 0, 0.63889],\n "84": [0, 0.68611, 0, 0, 0.8],\n "85": [0, 0.68611, 0, 0, 0.88472],\n "86": [0, 0.68611, 0.01597, 0, 0.86944],\n "87": [0, 0.68611, 0.01597, 0, 1.18888],\n "88": [0, 0.68611, 0, 0, 0.86944],\n "89": [0, 0.68611, 0.02875, 0, 0.86944],\n "90": [0, 0.68611, 0, 0, 0.70277],\n "91": [0.25, 0.75, 0, 0, 0.31944],\n "92": [0.25, 0.75, 0, 0, 0.575],\n "93": [0.25, 0.75, 0, 0, 0.31944],\n "94": [0, 0.69444, 0, 0, 0.575],\n "95": [0.31, 0.13444, 0.03194, 0, 0.575],\n "97": [0, 0.44444, 0, 0, 0.55902],\n "98": [0, 0.69444, 0, 0, 0.63889],\n "99": [0, 0.44444, 0, 0, 0.51111],\n "100": [0, 0.69444, 0, 0, 0.63889],\n "101": [0, 0.44444, 0, 0, 0.52708],\n "102": [0, 0.69444, 0.10903, 0, 0.35139],\n "103": [0.19444, 0.44444, 0.01597, 0, 0.575],\n "104": [0, 0.69444, 0, 0, 0.63889],\n "105": [0, 0.69444, 0, 0, 0.31944],\n "106": [0.19444, 0.69444, 0, 0, 0.35139],\n "107": [0, 0.69444, 0, 0, 0.60694],\n "108": [0, 0.69444, 0, 0, 0.31944],\n "109": [0, 0.44444, 0, 0, 0.95833],\n "110": [0, 0.44444, 0, 0, 0.63889],\n "111": [0, 0.44444, 0, 0, 0.575],\n "112": [0.19444, 0.44444, 0, 0, 0.63889],\n "113": [0.19444, 0.44444, 0, 0, 0.60694],\n "114": [0, 0.44444, 0, 0, 0.47361],\n "115": [0, 0.44444, 0, 0, 0.45361],\n "116": [0, 0.63492, 0, 0, 0.44722],\n "117": [0, 0.44444, 0, 0, 0.63889],\n "118": [0, 0.44444, 0.01597, 0, 0.60694],\n "119": [0, 0.44444, 0.01597, 0, 0.83055],\n "120": [0, 0.44444, 0, 0, 0.60694],\n "121": [0.19444, 0.44444, 0.01597, 0, 0.60694],\n "122": [0, 0.44444, 0, 0, 0.51111],\n "123": [0.25, 0.75, 0, 0, 0.575],\n "124": [0.25, 0.75, 0, 0, 0.31944],\n "125": [0.25, 0.75, 0, 0, 0.575],\n "126": [0.35, 0.34444, 0, 0, 0.575],\n "160": [0, 0, 0, 0, 0.25],\n "163": [0, 0.69444, 0, 0, 0.86853],\n "168": [0, 0.69444, 0, 0, 0.575],\n "172": [0, 0.44444, 0, 0, 0.76666],\n "176": [0, 0.69444, 0, 0, 0.86944],\n "177": [0.13333, 0.63333, 0, 0, 0.89444],\n "184": [0.17014, 0, 0, 0, 0.51111],\n "198": [0, 0.68611, 0, 0, 1.04166],\n "215": [0.13333, 0.63333, 0, 0, 0.89444],\n "216": [0.04861, 0.73472, 0, 0, 0.89444],\n "223": [0, 0.69444, 0, 0, 0.59722],\n "230": [0, 0.44444, 0, 0, 0.83055],\n "247": [0.13333, 0.63333, 0, 0, 0.89444],\n "248": [0.09722, 0.54167, 0, 0, 0.575],\n "305": [0, 0.44444, 0, 0, 0.31944],\n "338": [0, 0.68611, 0, 0, 1.16944],\n "339": [0, 0.44444, 0, 0, 0.89444],\n "567": [0.19444, 0.44444, 0, 0, 0.35139],\n "710": [0, 0.69444, 0, 0, 0.575],\n "711": [0, 0.63194, 0, 0, 0.575],\n "713": [0, 0.59611, 0, 0, 0.575],\n "714": [0, 0.69444, 0, 0, 0.575],\n "715": [0, 0.69444, 0, 0, 0.575],\n "728": [0, 0.69444, 0, 0, 0.575],\n "729": [0, 0.69444, 0, 0, 0.31944],\n "730": [0, 0.69444, 0, 0, 0.86944],\n "732": [0, 0.69444, 0, 0, 0.575],\n "733": [0, 0.69444, 0, 0, 0.575],\n "915": [0, 0.68611, 0, 0, 0.69166],\n "916": [0, 0.68611, 0, 0, 0.95833],\n "920": [0, 0.68611, 0, 0, 0.89444],\n "923": [0, 0.68611, 0, 0, 0.80555],\n "926": [0, 0.68611, 0, 0, 0.76666],\n "928": [0, 0.68611, 0, 0, 0.9],\n "931": [0, 0.68611, 0, 0, 0.83055],\n "933": [0, 0.68611, 0, 0, 0.89444],\n "934": [0, 0.68611, 0, 0, 0.83055],\n "936": [0, 0.68611, 0, 0, 0.89444],\n "937": [0, 0.68611, 0, 0, 0.83055],\n "8211": [0, 0.44444, 0.03194, 0, 0.575],\n "8212": [0, 0.44444, 0.03194, 0, 1.14999],\n "8216": [0, 0.69444, 0, 0, 0.31944],\n "8217": [0, 0.69444, 0, 0, 0.31944],\n "8220": [0, 0.69444, 0, 0, 0.60278],\n "8221": [0, 0.69444, 0, 0, 0.60278],\n "8224": [0.19444, 0.69444, 0, 0, 0.51111],\n "8225": [0.19444, 0.69444, 0, 0, 0.51111],\n "8242": [0, 0.55556, 0, 0, 0.34444],\n "8407": [0, 0.72444, 0.15486, 0, 0.575],\n "8463": [0, 0.69444, 0, 0, 0.66759],\n "8465": [0, 0.69444, 0, 0, 0.83055],\n "8467": [0, 0.69444, 0, 0, 0.47361],\n "8472": [0.19444, 0.44444, 0, 0, 0.74027],\n "8476": [0, 0.69444, 0, 0, 0.83055],\n "8501": [0, 0.69444, 0, 0, 0.70277],\n "8592": [-0.10889, 0.39111, 0, 0, 1.14999],\n "8593": [0.19444, 0.69444, 0, 0, 0.575],\n "8594": [-0.10889, 0.39111, 0, 0, 1.14999],\n "8595": [0.19444, 0.69444, 0, 0, 0.575],\n "8596": [-0.10889, 0.39111, 0, 0, 1.14999],\n "8597": [0.25, 0.75, 0, 0, 0.575],\n "8598": [0.19444, 0.69444, 0, 0, 1.14999],\n "8599": [0.19444, 0.69444, 0, 0, 1.14999],\n "8600": [0.19444, 0.69444, 0, 0, 1.14999],\n "8601": [0.19444, 0.69444, 0, 0, 1.14999],\n "8636": [-0.10889, 0.39111, 0, 0, 1.14999],\n "8637": [-0.10889, 0.39111, 0, 0, 1.14999],\n "8640": [-0.10889, 0.39111, 0, 0, 1.14999],\n "8641": [-0.10889, 0.39111, 0, 0, 1.14999],\n "8656": [-0.10889, 0.39111, 0, 0, 1.14999],\n "8657": [0.19444, 0.69444, 0, 0, 0.70277],\n "8658": [-0.10889, 0.39111, 0, 0, 1.14999],\n "8659": [0.19444, 0.69444, 0, 0, 0.70277],\n "8660": [-0.10889, 0.39111, 0, 0, 1.14999],\n "8661": [0.25, 0.75, 0, 0, 0.70277],\n "8704": [0, 0.69444, 0, 0, 0.63889],\n "8706": [0, 0.69444, 0.06389, 0, 0.62847],\n "8707": [0, 0.69444, 0, 0, 0.63889],\n "8709": [0.05556, 0.75, 0, 0, 0.575],\n "8711": [0, 0.68611, 0, 0, 0.95833],\n "8712": [0.08556, 0.58556, 0, 0, 0.76666],\n "8715": [0.08556, 0.58556, 0, 0, 0.76666],\n "8722": [0.13333, 0.63333, 0, 0, 0.89444],\n "8723": [0.13333, 0.63333, 0, 0, 0.89444],\n "8725": [0.25, 0.75, 0, 0, 0.575],\n "8726": [0.25, 0.75, 0, 0, 0.575],\n "8727": [-0.02778, 0.47222, 0, 0, 0.575],\n "8728": [-0.02639, 0.47361, 0, 0, 0.575],\n "8729": [-0.02639, 0.47361, 0, 0, 0.575],\n "8730": [0.18, 0.82, 0, 0, 0.95833],\n "8733": [0, 0.44444, 0, 0, 0.89444],\n "8734": [0, 0.44444, 0, 0, 1.14999],\n "8736": [0, 0.69224, 0, 0, 0.72222],\n "8739": [0.25, 0.75, 0, 0, 0.31944],\n "8741": [0.25, 0.75, 0, 0, 0.575],\n "8743": [0, 0.55556, 0, 0, 0.76666],\n "8744": [0, 0.55556, 0, 0, 0.76666],\n "8745": [0, 0.55556, 0, 0, 0.76666],\n "8746": [0, 0.55556, 0, 0, 0.76666],\n "8747": [0.19444, 0.69444, 0.12778, 0, 0.56875],\n "8764": [-0.10889, 0.39111, 0, 0, 0.89444],\n "8768": [0.19444, 0.69444, 0, 0, 0.31944],\n "8771": [0.00222, 0.50222, 0, 0, 0.89444],\n "8773": [0.027, 0.638, 0, 0, 0.894],\n "8776": [0.02444, 0.52444, 0, 0, 0.89444],\n "8781": [0.00222, 0.50222, 0, 0, 0.89444],\n "8801": [0.00222, 0.50222, 0, 0, 0.89444],\n "8804": [0.19667, 0.69667, 0, 0, 0.89444],\n "8805": [0.19667, 0.69667, 0, 0, 0.89444],\n "8810": [0.08556, 0.58556, 0, 0, 1.14999],\n "8811": [0.08556, 0.58556, 0, 0, 1.14999],\n "8826": [0.08556, 0.58556, 0, 0, 0.89444],\n "8827": [0.08556, 0.58556, 0, 0, 0.89444],\n "8834": [0.08556, 0.58556, 0, 0, 0.89444],\n "8835": [0.08556, 0.58556, 0, 0, 0.89444],\n "8838": [0.19667, 0.69667, 0, 0, 0.89444],\n "8839": [0.19667, 0.69667, 0, 0, 0.89444],\n "8846": [0, 0.55556, 0, 0, 0.76666],\n "8849": [0.19667, 0.69667, 0, 0, 0.89444],\n "8850": [0.19667, 0.69667, 0, 0, 0.89444],\n "8851": [0, 0.55556, 0, 0, 0.76666],\n "8852": [0, 0.55556, 0, 0, 0.76666],\n "8853": [0.13333, 0.63333, 0, 0, 0.89444],\n "8854": [0.13333, 0.63333, 0, 0, 0.89444],\n "8855": [0.13333, 0.63333, 0, 0, 0.89444],\n "8856": [0.13333, 0.63333, 0, 0, 0.89444],\n "8857": [0.13333, 0.63333, 0, 0, 0.89444],\n "8866": [0, 0.69444, 0, 0, 0.70277],\n "8867": [0, 0.69444, 0, 0, 0.70277],\n "8868": [0, 0.69444, 0, 0, 0.89444],\n "8869": [0, 0.69444, 0, 0, 0.89444],\n "8900": [-0.02639, 0.47361, 0, 0, 0.575],\n "8901": [-0.02639, 0.47361, 0, 0, 0.31944],\n "8902": [-0.02778, 0.47222, 0, 0, 0.575],\n "8968": [0.25, 0.75, 0, 0, 0.51111],\n "8969": [0.25, 0.75, 0, 0, 0.51111],\n "8970": [0.25, 0.75, 0, 0, 0.51111],\n "8971": [0.25, 0.75, 0, 0, 0.51111],\n "8994": [-0.13889, 0.36111, 0, 0, 1.14999],\n "8995": [-0.13889, 0.36111, 0, 0, 1.14999],\n "9651": [0.19444, 0.69444, 0, 0, 1.02222],\n "9657": [-0.02778, 0.47222, 0, 0, 0.575],\n "9661": [0.19444, 0.69444, 0, 0, 1.02222],\n "9667": [-0.02778, 0.47222, 0, 0, 0.575],\n "9711": [0.19444, 0.69444, 0, 0, 1.14999],\n "9824": [0.12963, 0.69444, 0, 0, 0.89444],\n "9825": [0.12963, 0.69444, 0, 0, 0.89444],\n "9826": [0.12963, 0.69444, 0, 0, 0.89444],\n "9827": [0.12963, 0.69444, 0, 0, 0.89444],\n "9837": [0, 0.75, 0, 0, 0.44722],\n "9838": [0.19444, 0.69444, 0, 0, 0.44722],\n "9839": [0.19444, 0.69444, 0, 0, 0.44722],\n "10216": [0.25, 0.75, 0, 0, 0.44722],\n "10217": [0.25, 0.75, 0, 0, 0.44722],\n "10815": [0, 0.68611, 0, 0, 0.9],\n "10927": [0.19667, 0.69667, 0, 0, 0.89444],\n "10928": [0.19667, 0.69667, 0, 0, 0.89444],\n "57376": [0.19444, 0.69444, 0, 0, 0]\n },\n "Main-BoldItalic": {\n "32": [0, 0, 0, 0, 0.25],\n "33": [0, 0.69444, 0.11417, 0, 0.38611],\n "34": [0, 0.69444, 0.07939, 0, 0.62055],\n "35": [0.19444, 0.69444, 0.06833, 0, 0.94444],\n "37": [0.05556, 0.75, 0.12861, 0, 0.94444],\n "38": [0, 0.69444, 0.08528, 0, 0.88555],\n "39": [0, 0.69444, 0.12945, 0, 0.35555],\n "40": [0.25, 0.75, 0.15806, 0, 0.47333],\n "41": [0.25, 0.75, 0.03306, 0, 0.47333],\n "42": [0, 0.75, 0.14333, 0, 0.59111],\n "43": [0.10333, 0.60333, 0.03306, 0, 0.88555],\n "44": [0.19444, 0.14722, 0, 0, 0.35555],\n "45": [0, 0.44444, 0.02611, 0, 0.41444],\n "46": [0, 0.14722, 0, 0, 0.35555],\n "47": [0.25, 0.75, 0.15806, 0, 0.59111],\n "48": [0, 0.64444, 0.13167, 0, 0.59111],\n "49": [0, 0.64444, 0.13167, 0, 0.59111],\n "50": [0, 0.64444, 0.13167, 0, 0.59111],\n "51": [0, 0.64444, 0.13167, 0, 0.59111],\n "52": [0.19444, 0.64444, 0.13167, 0, 0.59111],\n "53": [0, 0.64444, 0.13167, 0, 0.59111],\n "54": [0, 0.64444, 0.13167, 0, 0.59111],\n "55": [0.19444, 0.64444, 0.13167, 0, 0.59111],\n "56": [0, 0.64444, 0.13167, 0, 0.59111],\n "57": [0, 0.64444, 0.13167, 0, 0.59111],\n "58": [0, 0.44444, 0.06695, 0, 0.35555],\n "59": [0.19444, 0.44444, 0.06695, 0, 0.35555],\n "61": [-0.10889, 0.39111, 0.06833, 0, 0.88555],\n "63": [0, 0.69444, 0.11472, 0, 0.59111],\n "64": [0, 0.69444, 0.09208, 0, 0.88555],\n "65": [0, 0.68611, 0, 0, 0.86555],\n "66": [0, 0.68611, 0.0992, 0, 0.81666],\n "67": [0, 0.68611, 0.14208, 0, 0.82666],\n "68": [0, 0.68611, 0.09062, 0, 0.87555],\n "69": [0, 0.68611, 0.11431, 0, 0.75666],\n "70": [0, 0.68611, 0.12903, 0, 0.72722],\n "71": [0, 0.68611, 0.07347, 0, 0.89527],\n "72": [0, 0.68611, 0.17208, 0, 0.8961],\n "73": [0, 0.68611, 0.15681, 0, 0.47166],\n "74": [0, 0.68611, 0.145, 0, 0.61055],\n "75": [0, 0.68611, 0.14208, 0, 0.89499],\n "76": [0, 0.68611, 0, 0, 0.69777],\n "77": [0, 0.68611, 0.17208, 0, 1.07277],\n "78": [0, 0.68611, 0.17208, 0, 0.8961],\n "79": [0, 0.68611, 0.09062, 0, 0.85499],\n "80": [0, 0.68611, 0.0992, 0, 0.78721],\n "81": [0.19444, 0.68611, 0.09062, 0, 0.85499],\n "82": [0, 0.68611, 0.02559, 0, 0.85944],\n "83": [0, 0.68611, 0.11264, 0, 0.64999],\n "84": [0, 0.68611, 0.12903, 0, 0.7961],\n "85": [0, 0.68611, 0.17208, 0, 0.88083],\n "86": [0, 0.68611, 0.18625, 0, 0.86555],\n "87": [0, 0.68611, 0.18625, 0, 1.15999],\n "88": [0, 0.68611, 0.15681, 0, 0.86555],\n "89": [0, 0.68611, 0.19803, 0, 0.86555],\n "90": [0, 0.68611, 0.14208, 0, 0.70888],\n "91": [0.25, 0.75, 0.1875, 0, 0.35611],\n "93": [0.25, 0.75, 0.09972, 0, 0.35611],\n "94": [0, 0.69444, 0.06709, 0, 0.59111],\n "95": [0.31, 0.13444, 0.09811, 0, 0.59111],\n "97": [0, 0.44444, 0.09426, 0, 0.59111],\n "98": [0, 0.69444, 0.07861, 0, 0.53222],\n "99": [0, 0.44444, 0.05222, 0, 0.53222],\n "100": [0, 0.69444, 0.10861, 0, 0.59111],\n "101": [0, 0.44444, 0.085, 0, 0.53222],\n "102": [0.19444, 0.69444, 0.21778, 0, 0.4],\n "103": [0.19444, 0.44444, 0.105, 0, 0.53222],\n "104": [0, 0.69444, 0.09426, 0, 0.59111],\n "105": [0, 0.69326, 0.11387, 0, 0.35555],\n "106": [0.19444, 0.69326, 0.1672, 0, 0.35555],\n "107": [0, 0.69444, 0.11111, 0, 0.53222],\n "108": [0, 0.69444, 0.10861, 0, 0.29666],\n "109": [0, 0.44444, 0.09426, 0, 0.94444],\n "110": [0, 0.44444, 0.09426, 0, 0.64999],\n "111": [0, 0.44444, 0.07861, 0, 0.59111],\n "112": [0.19444, 0.44444, 0.07861, 0, 0.59111],\n "113": [0.19444, 0.44444, 0.105, 0, 0.53222],\n "114": [0, 0.44444, 0.11111, 0, 0.50167],\n "115": [0, 0.44444, 0.08167, 0, 0.48694],\n "116": [0, 0.63492, 0.09639, 0, 0.385],\n "117": [0, 0.44444, 0.09426, 0, 0.62055],\n "118": [0, 0.44444, 0.11111, 0, 0.53222],\n "119": [0, 0.44444, 0.11111, 0, 0.76777],\n "120": [0, 0.44444, 0.12583, 0, 0.56055],\n "121": [0.19444, 0.44444, 0.105, 0, 0.56166],\n "122": [0, 0.44444, 0.13889, 0, 0.49055],\n "126": [0.35, 0.34444, 0.11472, 0, 0.59111],\n "160": [0, 0, 0, 0, 0.25],\n "168": [0, 0.69444, 0.11473, 0, 0.59111],\n "176": [0, 0.69444, 0, 0, 0.94888],\n "184": [0.17014, 0, 0, 0, 0.53222],\n "198": [0, 0.68611, 0.11431, 0, 1.02277],\n "216": [0.04861, 0.73472, 0.09062, 0, 0.88555],\n "223": [0.19444, 0.69444, 0.09736, 0, 0.665],\n "230": [0, 0.44444, 0.085, 0, 0.82666],\n "248": [0.09722, 0.54167, 0.09458, 0, 0.59111],\n "305": [0, 0.44444, 0.09426, 0, 0.35555],\n "338": [0, 0.68611, 0.11431, 0, 1.14054],\n "339": [0, 0.44444, 0.085, 0, 0.82666],\n "567": [0.19444, 0.44444, 0.04611, 0, 0.385],\n "710": [0, 0.69444, 0.06709, 0, 0.59111],\n "711": [0, 0.63194, 0.08271, 0, 0.59111],\n "713": [0, 0.59444, 0.10444, 0, 0.59111],\n "714": [0, 0.69444, 0.08528, 0, 0.59111],\n "715": [0, 0.69444, 0, 0, 0.59111],\n "728": [0, 0.69444, 0.10333, 0, 0.59111],\n "729": [0, 0.69444, 0.12945, 0, 0.35555],\n "730": [0, 0.69444, 0, 0, 0.94888],\n "732": [0, 0.69444, 0.11472, 0, 0.59111],\n "733": [0, 0.69444, 0.11472, 0, 0.59111],\n "915": [0, 0.68611, 0.12903, 0, 0.69777],\n "916": [0, 0.68611, 0, 0, 0.94444],\n "920": [0, 0.68611, 0.09062, 0, 0.88555],\n "923": [0, 0.68611, 0, 0, 0.80666],\n "926": [0, 0.68611, 0.15092, 0, 0.76777],\n "928": [0, 0.68611, 0.17208, 0, 0.8961],\n "931": [0, 0.68611, 0.11431, 0, 0.82666],\n "933": [0, 0.68611, 0.10778, 0, 0.88555],\n "934": [0, 0.68611, 0.05632, 0, 0.82666],\n "936": [0, 0.68611, 0.10778, 0, 0.88555],\n "937": [0, 0.68611, 0.0992, 0, 0.82666],\n "8211": [0, 0.44444, 0.09811, 0, 0.59111],\n "8212": [0, 0.44444, 0.09811, 0, 1.18221],\n "8216": [0, 0.69444, 0.12945, 0, 0.35555],\n "8217": [0, 0.69444, 0.12945, 0, 0.35555],\n "8220": [0, 0.69444, 0.16772, 0, 0.62055],\n "8221": [0, 0.69444, 0.07939, 0, 0.62055]\n },\n "Main-Italic": {\n "32": [0, 0, 0, 0, 0.25],\n "33": [0, 0.69444, 0.12417, 0, 0.30667],\n "34": [0, 0.69444, 0.06961, 0, 0.51444],\n "35": [0.19444, 0.69444, 0.06616, 0, 0.81777],\n "37": [0.05556, 0.75, 0.13639, 0, 0.81777],\n "38": [0, 0.69444, 0.09694, 0, 0.76666],\n "39": [0, 0.69444, 0.12417, 0, 0.30667],\n "40": [0.25, 0.75, 0.16194, 0, 0.40889],\n "41": [0.25, 0.75, 0.03694, 0, 0.40889],\n "42": [0, 0.75, 0.14917, 0, 0.51111],\n "43": [0.05667, 0.56167, 0.03694, 0, 0.76666],\n "44": [0.19444, 0.10556, 0, 0, 0.30667],\n "45": [0, 0.43056, 0.02826, 0, 0.35778],\n "46": [0, 0.10556, 0, 0, 0.30667],\n "47": [0.25, 0.75, 0.16194, 0, 0.51111],\n "48": [0, 0.64444, 0.13556, 0, 0.51111],\n "49": [0, 0.64444, 0.13556, 0, 0.51111],\n "50": [0, 0.64444, 0.13556, 0, 0.51111],\n "51": [0, 0.64444, 0.13556, 0, 0.51111],\n "52": [0.19444, 0.64444, 0.13556, 0, 0.51111],\n "53": [0, 0.64444, 0.13556, 0, 0.51111],\n "54": [0, 0.64444, 0.13556, 0, 0.51111],\n "55": [0.19444, 0.64444, 0.13556, 0, 0.51111],\n "56": [0, 0.64444, 0.13556, 0, 0.51111],\n "57": [0, 0.64444, 0.13556, 0, 0.51111],\n "58": [0, 0.43056, 0.0582, 0, 0.30667],\n "59": [0.19444, 0.43056, 0.0582, 0, 0.30667],\n "61": [-0.13313, 0.36687, 0.06616, 0, 0.76666],\n "63": [0, 0.69444, 0.1225, 0, 0.51111],\n "64": [0, 0.69444, 0.09597, 0, 0.76666],\n "65": [0, 0.68333, 0, 0, 0.74333],\n "66": [0, 0.68333, 0.10257, 0, 0.70389],\n "67": [0, 0.68333, 0.14528, 0, 0.71555],\n "68": [0, 0.68333, 0.09403, 0, 0.755],\n "69": [0, 0.68333, 0.12028, 0, 0.67833],\n "70": [0, 0.68333, 0.13305, 0, 0.65277],\n "71": [0, 0.68333, 0.08722, 0, 0.77361],\n "72": [0, 0.68333, 0.16389, 0, 0.74333],\n "73": [0, 0.68333, 0.15806, 0, 0.38555],\n "74": [0, 0.68333, 0.14028, 0, 0.525],\n "75": [0, 0.68333, 0.14528, 0, 0.76888],\n "76": [0, 0.68333, 0, 0, 0.62722],\n "77": [0, 0.68333, 0.16389, 0, 0.89666],\n "78": [0, 0.68333, 0.16389, 0, 0.74333],\n "79": [0, 0.68333, 0.09403, 0, 0.76666],\n "80": [0, 0.68333, 0.10257, 0, 0.67833],\n "81": [0.19444, 0.68333, 0.09403, 0, 0.76666],\n "82": [0, 0.68333, 0.03868, 0, 0.72944],\n "83": [0, 0.68333, 0.11972, 0, 0.56222],\n "84": [0, 0.68333, 0.13305, 0, 0.71555],\n "85": [0, 0.68333, 0.16389, 0, 0.74333],\n "86": [0, 0.68333, 0.18361, 0, 0.74333],\n "87": [0, 0.68333, 0.18361, 0, 0.99888],\n "88": [0, 0.68333, 0.15806, 0, 0.74333],\n "89": [0, 0.68333, 0.19383, 0, 0.74333],\n "90": [0, 0.68333, 0.14528, 0, 0.61333],\n "91": [0.25, 0.75, 0.1875, 0, 0.30667],\n "93": [0.25, 0.75, 0.10528, 0, 0.30667],\n "94": [0, 0.69444, 0.06646, 0, 0.51111],\n "95": [0.31, 0.12056, 0.09208, 0, 0.51111],\n "97": [0, 0.43056, 0.07671, 0, 0.51111],\n "98": [0, 0.69444, 0.06312, 0, 0.46],\n "99": [0, 0.43056, 0.05653, 0, 0.46],\n "100": [0, 0.69444, 0.10333, 0, 0.51111],\n "101": [0, 0.43056, 0.07514, 0, 0.46],\n "102": [0.19444, 0.69444, 0.21194, 0, 0.30667],\n "103": [0.19444, 0.43056, 0.08847, 0, 0.46],\n "104": [0, 0.69444, 0.07671, 0, 0.51111],\n "105": [0, 0.65536, 0.1019, 0, 0.30667],\n "106": [0.19444, 0.65536, 0.14467, 0, 0.30667],\n "107": [0, 0.69444, 0.10764, 0, 0.46],\n "108": [0, 0.69444, 0.10333, 0, 0.25555],\n "109": [0, 0.43056, 0.07671, 0, 0.81777],\n "110": [0, 0.43056, 0.07671, 0, 0.56222],\n "111": [0, 0.43056, 0.06312, 0, 0.51111],\n "112": [0.19444, 0.43056, 0.06312, 0, 0.51111],\n "113": [0.19444, 0.43056, 0.08847, 0, 0.46],\n "114": [0, 0.43056, 0.10764, 0, 0.42166],\n "115": [0, 0.43056, 0.08208, 0, 0.40889],\n "116": [0, 0.61508, 0.09486, 0, 0.33222],\n "117": [0, 0.43056, 0.07671, 0, 0.53666],\n "118": [0, 0.43056, 0.10764, 0, 0.46],\n "119": [0, 0.43056, 0.10764, 0, 0.66444],\n "120": [0, 0.43056, 0.12042, 0, 0.46389],\n "121": [0.19444, 0.43056, 0.08847, 0, 0.48555],\n "122": [0, 0.43056, 0.12292, 0, 0.40889],\n "126": [0.35, 0.31786, 0.11585, 0, 0.51111],\n "160": [0, 0, 0, 0, 0.25],\n "168": [0, 0.66786, 0.10474, 0, 0.51111],\n "176": [0, 0.69444, 0, 0, 0.83129],\n "184": [0.17014, 0, 0, 0, 0.46],\n "198": [0, 0.68333, 0.12028, 0, 0.88277],\n "216": [0.04861, 0.73194, 0.09403, 0, 0.76666],\n "223": [0.19444, 0.69444, 0.10514, 0, 0.53666],\n "230": [0, 0.43056, 0.07514, 0, 0.71555],\n "248": [0.09722, 0.52778, 0.09194, 0, 0.51111],\n "338": [0, 0.68333, 0.12028, 0, 0.98499],\n "339": [0, 0.43056, 0.07514, 0, 0.71555],\n "710": [0, 0.69444, 0.06646, 0, 0.51111],\n "711": [0, 0.62847, 0.08295, 0, 0.51111],\n "713": [0, 0.56167, 0.10333, 0, 0.51111],\n "714": [0, 0.69444, 0.09694, 0, 0.51111],\n "715": [0, 0.69444, 0, 0, 0.51111],\n "728": [0, 0.69444, 0.10806, 0, 0.51111],\n "729": [0, 0.66786, 0.11752, 0, 0.30667],\n "730": [0, 0.69444, 0, 0, 0.83129],\n "732": [0, 0.66786, 0.11585, 0, 0.51111],\n "733": [0, 0.69444, 0.1225, 0, 0.51111],\n "915": [0, 0.68333, 0.13305, 0, 0.62722],\n "916": [0, 0.68333, 0, 0, 0.81777],\n "920": [0, 0.68333, 0.09403, 0, 0.76666],\n "923": [0, 0.68333, 0, 0, 0.69222],\n "926": [0, 0.68333, 0.15294, 0, 0.66444],\n "928": [0, 0.68333, 0.16389, 0, 0.74333],\n "931": [0, 0.68333, 0.12028, 0, 0.71555],\n "933": [0, 0.68333, 0.11111, 0, 0.76666],\n "934": [0, 0.68333, 0.05986, 0, 0.71555],\n "936": [0, 0.68333, 0.11111, 0, 0.76666],\n "937": [0, 0.68333, 0.10257, 0, 0.71555],\n "8211": [0, 0.43056, 0.09208, 0, 0.51111],\n "8212": [0, 0.43056, 0.09208, 0, 1.02222],\n "8216": [0, 0.69444, 0.12417, 0, 0.30667],\n "8217": [0, 0.69444, 0.12417, 0, 0.30667],\n "8220": [0, 0.69444, 0.1685, 0, 0.51444],\n "8221": [0, 0.69444, 0.06961, 0, 0.51444],\n "8463": [0, 0.68889, 0, 0, 0.54028]\n },\n "Main-Regular": {\n "32": [0, 0, 0, 0, 0.25],\n "33": [0, 0.69444, 0, 0, 0.27778],\n "34": [0, 0.69444, 0, 0, 0.5],\n "35": [0.19444, 0.69444, 0, 0, 0.83334],\n "36": [0.05556, 0.75, 0, 0, 0.5],\n "37": [0.05556, 0.75, 0, 0, 0.83334],\n "38": [0, 0.69444, 0, 0, 0.77778],\n "39": [0, 0.69444, 0, 0, 0.27778],\n "40": [0.25, 0.75, 0, 0, 0.38889],\n "41": [0.25, 0.75, 0, 0, 0.38889],\n "42": [0, 0.75, 0, 0, 0.5],\n "43": [0.08333, 0.58333, 0, 0, 0.77778],\n "44": [0.19444, 0.10556, 0, 0, 0.27778],\n "45": [0, 0.43056, 0, 0, 0.33333],\n "46": [0, 0.10556, 0, 0, 0.27778],\n "47": [0.25, 0.75, 0, 0, 0.5],\n "48": [0, 0.64444, 0, 0, 0.5],\n "49": [0, 0.64444, 0, 0, 0.5],\n "50": [0, 0.64444, 0, 0, 0.5],\n "51": [0, 0.64444, 0, 0, 0.5],\n "52": [0, 0.64444, 0, 0, 0.5],\n "53": [0, 0.64444, 0, 0, 0.5],\n "54": [0, 0.64444, 0, 0, 0.5],\n "55": [0, 0.64444, 0, 0, 0.5],\n "56": [0, 0.64444, 0, 0, 0.5],\n "57": [0, 0.64444, 0, 0, 0.5],\n "58": [0, 0.43056, 0, 0, 0.27778],\n "59": [0.19444, 0.43056, 0, 0, 0.27778],\n "60": [0.0391, 0.5391, 0, 0, 0.77778],\n "61": [-0.13313, 0.36687, 0, 0, 0.77778],\n "62": [0.0391, 0.5391, 0, 0, 0.77778],\n "63": [0, 0.69444, 0, 0, 0.47222],\n "64": [0, 0.69444, 0, 0, 0.77778],\n "65": [0, 0.68333, 0, 0, 0.75],\n "66": [0, 0.68333, 0, 0, 0.70834],\n "67": [0, 0.68333, 0, 0, 0.72222],\n "68": [0, 0.68333, 0, 0, 0.76389],\n "69": [0, 0.68333, 0, 0, 0.68056],\n "70": [0, 0.68333, 0, 0, 0.65278],\n "71": [0, 0.68333, 0, 0, 0.78472],\n "72": [0, 0.68333, 0, 0, 0.75],\n "73": [0, 0.68333, 0, 0, 0.36111],\n "74": [0, 0.68333, 0, 0, 0.51389],\n "75": [0, 0.68333, 0, 0, 0.77778],\n "76": [0, 0.68333, 0, 0, 0.625],\n "77": [0, 0.68333, 0, 0, 0.91667],\n "78": [0, 0.68333, 0, 0, 0.75],\n "79": [0, 0.68333, 0, 0, 0.77778],\n "80": [0, 0.68333, 0, 0, 0.68056],\n "81": [0.19444, 0.68333, 0, 0, 0.77778],\n "82": [0, 0.68333, 0, 0, 0.73611],\n "83": [0, 0.68333, 0, 0, 0.55556],\n "84": [0, 0.68333, 0, 0, 0.72222],\n "85": [0, 0.68333, 0, 0, 0.75],\n "86": [0, 0.68333, 0.01389, 0, 0.75],\n "87": [0, 0.68333, 0.01389, 0, 1.02778],\n "88": [0, 0.68333, 0, 0, 0.75],\n "89": [0, 0.68333, 0.025, 0, 0.75],\n "90": [0, 0.68333, 0, 0, 0.61111],\n "91": [0.25, 0.75, 0, 0, 0.27778],\n "92": [0.25, 0.75, 0, 0, 0.5],\n "93": [0.25, 0.75, 0, 0, 0.27778],\n "94": [0, 0.69444, 0, 0, 0.5],\n "95": [0.31, 0.12056, 0.02778, 0, 0.5],\n "97": [0, 0.43056, 0, 0, 0.5],\n "98": [0, 0.69444, 0, 0, 0.55556],\n "99": [0, 0.43056, 0, 0, 0.44445],\n "100": [0, 0.69444, 0, 0, 0.55556],\n "101": [0, 0.43056, 0, 0, 0.44445],\n "102": [0, 0.69444, 0.07778, 0, 0.30556],\n "103": [0.19444, 0.43056, 0.01389, 0, 0.5],\n "104": [0, 0.69444, 0, 0, 0.55556],\n "105": [0, 0.66786, 0, 0, 0.27778],\n "106": [0.19444, 0.66786, 0, 0, 0.30556],\n "107": [0, 0.69444, 0, 0, 0.52778],\n "108": [0, 0.69444, 0, 0, 0.27778],\n "109": [0, 0.43056, 0, 0, 0.83334],\n "110": [0, 0.43056, 0, 0, 0.55556],\n "111": [0, 0.43056, 0, 0, 0.5],\n "112": [0.19444, 0.43056, 0, 0, 0.55556],\n "113": [0.19444, 0.43056, 0, 0, 0.52778],\n "114": [0, 0.43056, 0, 0, 0.39167],\n "115": [0, 0.43056, 0, 0, 0.39445],\n "116": [0, 0.61508, 0, 0, 0.38889],\n "117": [0, 0.43056, 0, 0, 0.55556],\n "118": [0, 0.43056, 0.01389, 0, 0.52778],\n "119": [0, 0.43056, 0.01389, 0, 0.72222],\n "120": [0, 0.43056, 0, 0, 0.52778],\n "121": [0.19444, 0.43056, 0.01389, 0, 0.52778],\n "122": [0, 0.43056, 0, 0, 0.44445],\n "123": [0.25, 0.75, 0, 0, 0.5],\n "124": [0.25, 0.75, 0, 0, 0.27778],\n "125": [0.25, 0.75, 0, 0, 0.5],\n "126": [0.35, 0.31786, 0, 0, 0.5],\n "160": [0, 0, 0, 0, 0.25],\n "163": [0, 0.69444, 0, 0, 0.76909],\n "167": [0.19444, 0.69444, 0, 0, 0.44445],\n "168": [0, 0.66786, 0, 0, 0.5],\n "172": [0, 0.43056, 0, 0, 0.66667],\n "176": [0, 0.69444, 0, 0, 0.75],\n "177": [0.08333, 0.58333, 0, 0, 0.77778],\n "182": [0.19444, 0.69444, 0, 0, 0.61111],\n "184": [0.17014, 0, 0, 0, 0.44445],\n "198": [0, 0.68333, 0, 0, 0.90278],\n "215": [0.08333, 0.58333, 0, 0, 0.77778],\n "216": [0.04861, 0.73194, 0, 0, 0.77778],\n "223": [0, 0.69444, 0, 0, 0.5],\n "230": [0, 0.43056, 0, 0, 0.72222],\n "247": [0.08333, 0.58333, 0, 0, 0.77778],\n "248": [0.09722, 0.52778, 0, 0, 0.5],\n "305": [0, 0.43056, 0, 0, 0.27778],\n "338": [0, 0.68333, 0, 0, 1.01389],\n "339": [0, 0.43056, 0, 0, 0.77778],\n "567": [0.19444, 0.43056, 0, 0, 0.30556],\n "710": [0, 0.69444, 0, 0, 0.5],\n "711": [0, 0.62847, 0, 0, 0.5],\n "713": [0, 0.56778, 0, 0, 0.5],\n "714": [0, 0.69444, 0, 0, 0.5],\n "715": [0, 0.69444, 0, 0, 0.5],\n "728": [0, 0.69444, 0, 0, 0.5],\n "729": [0, 0.66786, 0, 0, 0.27778],\n "730": [0, 0.69444, 0, 0, 0.75],\n "732": [0, 0.66786, 0, 0, 0.5],\n "733": [0, 0.69444, 0, 0, 0.5],\n "915": [0, 0.68333, 0, 0, 0.625],\n "916": [0, 0.68333, 0, 0, 0.83334],\n "920": [0, 0.68333, 0, 0, 0.77778],\n "923": [0, 0.68333, 0, 0, 0.69445],\n "926": [0, 0.68333, 0, 0, 0.66667],\n "928": [0, 0.68333, 0, 0, 0.75],\n "931": [0, 0.68333, 0, 0, 0.72222],\n "933": [0, 0.68333, 0, 0, 0.77778],\n "934": [0, 0.68333, 0, 0, 0.72222],\n "936": [0, 0.68333, 0, 0, 0.77778],\n "937": [0, 0.68333, 0, 0, 0.72222],\n "8211": [0, 0.43056, 0.02778, 0, 0.5],\n "8212": [0, 0.43056, 0.02778, 0, 1.0],\n "8216": [0, 0.69444, 0, 0, 0.27778],\n "8217": [0, 0.69444, 0, 0, 0.27778],\n "8220": [0, 0.69444, 0, 0, 0.5],\n "8221": [0, 0.69444, 0, 0, 0.5],\n "8224": [0.19444, 0.69444, 0, 0, 0.44445],\n "8225": [0.19444, 0.69444, 0, 0, 0.44445],\n "8230": [0, 0.123, 0, 0, 1.172],\n "8242": [0, 0.55556, 0, 0, 0.275],\n "8407": [0, 0.71444, 0.15382, 0, 0.5],\n "8463": [0, 0.68889, 0, 0, 0.54028],\n "8465": [0, 0.69444, 0, 0, 0.72222],\n "8467": [0, 0.69444, 0, 0.11111, 0.41667],\n "8472": [0.19444, 0.43056, 0, 0.11111, 0.63646],\n "8476": [0, 0.69444, 0, 0, 0.72222],\n "8501": [0, 0.69444, 0, 0, 0.61111],\n "8592": [-0.13313, 0.36687, 0, 0, 1.0],\n "8593": [0.19444, 0.69444, 0, 0, 0.5],\n "8594": [-0.13313, 0.36687, 0, 0, 1.0],\n "8595": [0.19444, 0.69444, 0, 0, 0.5],\n "8596": [-0.13313, 0.36687, 0, 0, 1.0],\n "8597": [0.25, 0.75, 0, 0, 0.5],\n "8598": [0.19444, 0.69444, 0, 0, 1.0],\n "8599": [0.19444, 0.69444, 0, 0, 1.0],\n "8600": [0.19444, 0.69444, 0, 0, 1.0],\n "8601": [0.19444, 0.69444, 0, 0, 1.0],\n "8614": [0.011, 0.511, 0, 0, 1.0],\n "8617": [0.011, 0.511, 0, 0, 1.126],\n "8618": [0.011, 0.511, 0, 0, 1.126],\n "8636": [-0.13313, 0.36687, 0, 0, 1.0],\n "8637": [-0.13313, 0.36687, 0, 0, 1.0],\n "8640": [-0.13313, 0.36687, 0, 0, 1.0],\n "8641": [-0.13313, 0.36687, 0, 0, 1.0],\n "8652": [0.011, 0.671, 0, 0, 1.0],\n "8656": [-0.13313, 0.36687, 0, 0, 1.0],\n "8657": [0.19444, 0.69444, 0, 0, 0.61111],\n "8658": [-0.13313, 0.36687, 0, 0, 1.0],\n "8659": [0.19444, 0.69444, 0, 0, 0.61111],\n "8660": [-0.13313, 0.36687, 0, 0, 1.0],\n "8661": [0.25, 0.75, 0, 0, 0.61111],\n "8704": [0, 0.69444, 0, 0, 0.55556],\n "8706": [0, 0.69444, 0.05556, 0.08334, 0.5309],\n "8707": [0, 0.69444, 0, 0, 0.55556],\n "8709": [0.05556, 0.75, 0, 0, 0.5],\n "8711": [0, 0.68333, 0, 0, 0.83334],\n "8712": [0.0391, 0.5391, 0, 0, 0.66667],\n "8715": [0.0391, 0.5391, 0, 0, 0.66667],\n "8722": [0.08333, 0.58333, 0, 0, 0.77778],\n "8723": [0.08333, 0.58333, 0, 0, 0.77778],\n "8725": [0.25, 0.75, 0, 0, 0.5],\n "8726": [0.25, 0.75, 0, 0, 0.5],\n "8727": [-0.03472, 0.46528, 0, 0, 0.5],\n "8728": [-0.05555, 0.44445, 0, 0, 0.5],\n "8729": [-0.05555, 0.44445, 0, 0, 0.5],\n "8730": [0.2, 0.8, 0, 0, 0.83334],\n "8733": [0, 0.43056, 0, 0, 0.77778],\n "8734": [0, 0.43056, 0, 0, 1.0],\n "8736": [0, 0.69224, 0, 0, 0.72222],\n "8739": [0.25, 0.75, 0, 0, 0.27778],\n "8741": [0.25, 0.75, 0, 0, 0.5],\n "8743": [0, 0.55556, 0, 0, 0.66667],\n "8744": [0, 0.55556, 0, 0, 0.66667],\n "8745": [0, 0.55556, 0, 0, 0.66667],\n "8746": [0, 0.55556, 0, 0, 0.66667],\n "8747": [0.19444, 0.69444, 0.11111, 0, 0.41667],\n "8764": [-0.13313, 0.36687, 0, 0, 0.77778],\n "8768": [0.19444, 0.69444, 0, 0, 0.27778],\n "8771": [-0.03625, 0.46375, 0, 0, 0.77778],\n "8773": [-0.022, 0.589, 0, 0, 0.778],\n "8776": [-0.01688, 0.48312, 0, 0, 0.77778],\n "8781": [-0.03625, 0.46375, 0, 0, 0.77778],\n "8784": [-0.133, 0.673, 0, 0, 0.778],\n "8801": [-0.03625, 0.46375, 0, 0, 0.77778],\n "8804": [0.13597, 0.63597, 0, 0, 0.77778],\n "8805": [0.13597, 0.63597, 0, 0, 0.77778],\n "8810": [0.0391, 0.5391, 0, 0, 1.0],\n "8811": [0.0391, 0.5391, 0, 0, 1.0],\n "8826": [0.0391, 0.5391, 0, 0, 0.77778],\n "8827": [0.0391, 0.5391, 0, 0, 0.77778],\n "8834": [0.0391, 0.5391, 0, 0, 0.77778],\n "8835": [0.0391, 0.5391, 0, 0, 0.77778],\n "8838": [0.13597, 0.63597, 0, 0, 0.77778],\n "8839": [0.13597, 0.63597, 0, 0, 0.77778],\n "8846": [0, 0.55556, 0, 0, 0.66667],\n "8849": [0.13597, 0.63597, 0, 0, 0.77778],\n "8850": [0.13597, 0.63597, 0, 0, 0.77778],\n "8851": [0, 0.55556, 0, 0, 0.66667],\n "8852": [0, 0.55556, 0, 0, 0.66667],\n "8853": [0.08333, 0.58333, 0, 0, 0.77778],\n "8854": [0.08333, 0.58333, 0, 0, 0.77778],\n "8855": [0.08333, 0.58333, 0, 0, 0.77778],\n "8856": [0.08333, 0.58333, 0, 0, 0.77778],\n "8857": [0.08333, 0.58333, 0, 0, 0.77778],\n "8866": [0, 0.69444, 0, 0, 0.61111],\n "8867": [0, 0.69444, 0, 0, 0.61111],\n "8868": [0, 0.69444, 0, 0, 0.77778],\n "8869": [0, 0.69444, 0, 0, 0.77778],\n "8872": [0.249, 0.75, 0, 0, 0.867],\n "8900": [-0.05555, 0.44445, 0, 0, 0.5],\n "8901": [-0.05555, 0.44445, 0, 0, 0.27778],\n "8902": [-0.03472, 0.46528, 0, 0, 0.5],\n "8904": [0.005, 0.505, 0, 0, 0.9],\n "8942": [0.03, 0.903, 0, 0, 0.278],\n "8943": [-0.19, 0.313, 0, 0, 1.172],\n "8945": [-0.1, 0.823, 0, 0, 1.282],\n "8968": [0.25, 0.75, 0, 0, 0.44445],\n "8969": [0.25, 0.75, 0, 0, 0.44445],\n "8970": [0.25, 0.75, 0, 0, 0.44445],\n "8971": [0.25, 0.75, 0, 0, 0.44445],\n "8994": [-0.14236, 0.35764, 0, 0, 1.0],\n "8995": [-0.14236, 0.35764, 0, 0, 1.0],\n "9136": [0.244, 0.744, 0, 0, 0.412],\n "9137": [0.244, 0.745, 0, 0, 0.412],\n "9651": [0.19444, 0.69444, 0, 0, 0.88889],\n "9657": [-0.03472, 0.46528, 0, 0, 0.5],\n "9661": [0.19444, 0.69444, 0, 0, 0.88889],\n "9667": [-0.03472, 0.46528, 0, 0, 0.5],\n "9711": [0.19444, 0.69444, 0, 0, 1.0],\n "9824": [0.12963, 0.69444, 0, 0, 0.77778],\n "9825": [0.12963, 0.69444, 0, 0, 0.77778],\n "9826": [0.12963, 0.69444, 0, 0, 0.77778],\n "9827": [0.12963, 0.69444, 0, 0, 0.77778],\n "9837": [0, 0.75, 0, 0, 0.38889],\n "9838": [0.19444, 0.69444, 0, 0, 0.38889],\n "9839": [0.19444, 0.69444, 0, 0, 0.38889],\n "10216": [0.25, 0.75, 0, 0, 0.38889],\n "10217": [0.25, 0.75, 0, 0, 0.38889],\n "10222": [0.244, 0.744, 0, 0, 0.412],\n "10223": [0.244, 0.745, 0, 0, 0.412],\n "10229": [0.011, 0.511, 0, 0, 1.609],\n "10230": [0.011, 0.511, 0, 0, 1.638],\n "10231": [0.011, 0.511, 0, 0, 1.859],\n "10232": [0.024, 0.525, 0, 0, 1.609],\n "10233": [0.024, 0.525, 0, 0, 1.638],\n "10234": [0.024, 0.525, 0, 0, 1.858],\n "10236": [0.011, 0.511, 0, 0, 1.638],\n "10815": [0, 0.68333, 0, 0, 0.75],\n "10927": [0.13597, 0.63597, 0, 0, 0.77778],\n "10928": [0.13597, 0.63597, 0, 0, 0.77778],\n "57376": [0.19444, 0.69444, 0, 0, 0]\n },\n "Math-BoldItalic": {\n "32": [0, 0, 0, 0, 0.25],\n "48": [0, 0.44444, 0, 0, 0.575],\n "49": [0, 0.44444, 0, 0, 0.575],\n "50": [0, 0.44444, 0, 0, 0.575],\n "51": [0.19444, 0.44444, 0, 0, 0.575],\n "52": [0.19444, 0.44444, 0, 0, 0.575],\n "53": [0.19444, 0.44444, 0, 0, 0.575],\n "54": [0, 0.64444, 0, 0, 0.575],\n "55": [0.19444, 0.44444, 0, 0, 0.575],\n "56": [0, 0.64444, 0, 0, 0.575],\n "57": [0.19444, 0.44444, 0, 0, 0.575],\n "65": [0, 0.68611, 0, 0, 0.86944],\n "66": [0, 0.68611, 0.04835, 0, 0.8664],\n "67": [0, 0.68611, 0.06979, 0, 0.81694],\n "68": [0, 0.68611, 0.03194, 0, 0.93812],\n "69": [0, 0.68611, 0.05451, 0, 0.81007],\n "70": [0, 0.68611, 0.15972, 0, 0.68889],\n "71": [0, 0.68611, 0, 0, 0.88673],\n "72": [0, 0.68611, 0.08229, 0, 0.98229],\n "73": [0, 0.68611, 0.07778, 0, 0.51111],\n "74": [0, 0.68611, 0.10069, 0, 0.63125],\n "75": [0, 0.68611, 0.06979, 0, 0.97118],\n "76": [0, 0.68611, 0, 0, 0.75555],\n "77": [0, 0.68611, 0.11424, 0, 1.14201],\n "78": [0, 0.68611, 0.11424, 0, 0.95034],\n "79": [0, 0.68611, 0.03194, 0, 0.83666],\n "80": [0, 0.68611, 0.15972, 0, 0.72309],\n "81": [0.19444, 0.68611, 0, 0, 0.86861],\n "82": [0, 0.68611, 0.00421, 0, 0.87235],\n "83": [0, 0.68611, 0.05382, 0, 0.69271],\n "84": [0, 0.68611, 0.15972, 0, 0.63663],\n "85": [0, 0.68611, 0.11424, 0, 0.80027],\n "86": [0, 0.68611, 0.25555, 0, 0.67778],\n "87": [0, 0.68611, 0.15972, 0, 1.09305],\n "88": [0, 0.68611, 0.07778, 0, 0.94722],\n "89": [0, 0.68611, 0.25555, 0, 0.67458],\n "90": [0, 0.68611, 0.06979, 0, 0.77257],\n "97": [0, 0.44444, 0, 0, 0.63287],\n "98": [0, 0.69444, 0, 0, 0.52083],\n "99": [0, 0.44444, 0, 0, 0.51342],\n "100": [0, 0.69444, 0, 0, 0.60972],\n "101": [0, 0.44444, 0, 0, 0.55361],\n "102": [0.19444, 0.69444, 0.11042, 0, 0.56806],\n "103": [0.19444, 0.44444, 0.03704, 0, 0.5449],\n "104": [0, 0.69444, 0, 0, 0.66759],\n "105": [0, 0.69326, 0, 0, 0.4048],\n "106": [0.19444, 0.69326, 0.0622, 0, 0.47083],\n "107": [0, 0.69444, 0.01852, 0, 0.6037],\n "108": [0, 0.69444, 0.0088, 0, 0.34815],\n "109": [0, 0.44444, 0, 0, 1.0324],\n "110": [0, 0.44444, 0, 0, 0.71296],\n "111": [0, 0.44444, 0, 0, 0.58472],\n "112": [0.19444, 0.44444, 0, 0, 0.60092],\n "113": [0.19444, 0.44444, 0.03704, 0, 0.54213],\n "114": [0, 0.44444, 0.03194, 0, 0.5287],\n "115": [0, 0.44444, 0, 0, 0.53125],\n "116": [0, 0.63492, 0, 0, 0.41528],\n "117": [0, 0.44444, 0, 0, 0.68102],\n "118": [0, 0.44444, 0.03704, 0, 0.56666],\n "119": [0, 0.44444, 0.02778, 0, 0.83148],\n "120": [0, 0.44444, 0, 0, 0.65903],\n "121": [0.19444, 0.44444, 0.03704, 0, 0.59028],\n "122": [0, 0.44444, 0.04213, 0, 0.55509],\n "160": [0, 0, 0, 0, 0.25],\n "915": [0, 0.68611, 0.15972, 0, 0.65694],\n "916": [0, 0.68611, 0, 0, 0.95833],\n "920": [0, 0.68611, 0.03194, 0, 0.86722],\n "923": [0, 0.68611, 0, 0, 0.80555],\n "926": [0, 0.68611, 0.07458, 0, 0.84125],\n "928": [0, 0.68611, 0.08229, 0, 0.98229],\n "931": [0, 0.68611, 0.05451, 0, 0.88507],\n "933": [0, 0.68611, 0.15972, 0, 0.67083],\n "934": [0, 0.68611, 0, 0, 0.76666],\n "936": [0, 0.68611, 0.11653, 0, 0.71402],\n "937": [0, 0.68611, 0.04835, 0, 0.8789],\n "945": [0, 0.44444, 0, 0, 0.76064],\n "946": [0.19444, 0.69444, 0.03403, 0, 0.65972],\n "947": [0.19444, 0.44444, 0.06389, 0, 0.59003],\n "948": [0, 0.69444, 0.03819, 0, 0.52222],\n "949": [0, 0.44444, 0, 0, 0.52882],\n "950": [0.19444, 0.69444, 0.06215, 0, 0.50833],\n "951": [0.19444, 0.44444, 0.03704, 0, 0.6],\n "952": [0, 0.69444, 0.03194, 0, 0.5618],\n "953": [0, 0.44444, 0, 0, 0.41204],\n "954": [0, 0.44444, 0, 0, 0.66759],\n "955": [0, 0.69444, 0, 0, 0.67083],\n "956": [0.19444, 0.44444, 0, 0, 0.70787],\n "957": [0, 0.44444, 0.06898, 0, 0.57685],\n "958": [0.19444, 0.69444, 0.03021, 0, 0.50833],\n "959": [0, 0.44444, 0, 0, 0.58472],\n "960": [0, 0.44444, 0.03704, 0, 0.68241],\n "961": [0.19444, 0.44444, 0, 0, 0.6118],\n "962": [0.09722, 0.44444, 0.07917, 0, 0.42361],\n "963": [0, 0.44444, 0.03704, 0, 0.68588],\n "964": [0, 0.44444, 0.13472, 0, 0.52083],\n "965": [0, 0.44444, 0.03704, 0, 0.63055],\n "966": [0.19444, 0.44444, 0, 0, 0.74722],\n "967": [0.19444, 0.44444, 0, 0, 0.71805],\n "968": [0.19444, 0.69444, 0.03704, 0, 0.75833],\n "969": [0, 0.44444, 0.03704, 0, 0.71782],\n "977": [0, 0.69444, 0, 0, 0.69155],\n "981": [0.19444, 0.69444, 0, 0, 0.7125],\n "982": [0, 0.44444, 0.03194, 0, 0.975],\n "1009": [0.19444, 0.44444, 0, 0, 0.6118],\n "1013": [0, 0.44444, 0, 0, 0.48333],\n "57649": [0, 0.44444, 0, 0, 0.39352],\n "57911": [0.19444, 0.44444, 0, 0, 0.43889]\n },\n "Math-Italic": {\n "32": [0, 0, 0, 0, 0.25],\n "48": [0, 0.43056, 0, 0, 0.5],\n "49": [0, 0.43056, 0, 0, 0.5],\n "50": [0, 0.43056, 0, 0, 0.5],\n "51": [0.19444, 0.43056, 0, 0, 0.5],\n "52": [0.19444, 0.43056, 0, 0, 0.5],\n "53": [0.19444, 0.43056, 0, 0, 0.5],\n "54": [0, 0.64444, 0, 0, 0.5],\n "55": [0.19444, 0.43056, 0, 0, 0.5],\n "56": [0, 0.64444, 0, 0, 0.5],\n "57": [0.19444, 0.43056, 0, 0, 0.5],\n "65": [0, 0.68333, 0, 0.13889, 0.75],\n "66": [0, 0.68333, 0.05017, 0.08334, 0.75851],\n "67": [0, 0.68333, 0.07153, 0.08334, 0.71472],\n "68": [0, 0.68333, 0.02778, 0.05556, 0.82792],\n "69": [0, 0.68333, 0.05764, 0.08334, 0.7382],\n "70": [0, 0.68333, 0.13889, 0.08334, 0.64306],\n "71": [0, 0.68333, 0, 0.08334, 0.78625],\n "72": [0, 0.68333, 0.08125, 0.05556, 0.83125],\n "73": [0, 0.68333, 0.07847, 0.11111, 0.43958],\n "74": [0, 0.68333, 0.09618, 0.16667, 0.55451],\n "75": [0, 0.68333, 0.07153, 0.05556, 0.84931],\n "76": [0, 0.68333, 0, 0.02778, 0.68056],\n "77": [0, 0.68333, 0.10903, 0.08334, 0.97014],\n "78": [0, 0.68333, 0.10903, 0.08334, 0.80347],\n "79": [0, 0.68333, 0.02778, 0.08334, 0.76278],\n "80": [0, 0.68333, 0.13889, 0.08334, 0.64201],\n "81": [0.19444, 0.68333, 0, 0.08334, 0.79056],\n "82": [0, 0.68333, 0.00773, 0.08334, 0.75929],\n "83": [0, 0.68333, 0.05764, 0.08334, 0.6132],\n "84": [0, 0.68333, 0.13889, 0.08334, 0.58438],\n "85": [0, 0.68333, 0.10903, 0.02778, 0.68278],\n "86": [0, 0.68333, 0.22222, 0, 0.58333],\n "87": [0, 0.68333, 0.13889, 0, 0.94445],\n "88": [0, 0.68333, 0.07847, 0.08334, 0.82847],\n "89": [0, 0.68333, 0.22222, 0, 0.58056],\n "90": [0, 0.68333, 0.07153, 0.08334, 0.68264],\n "97": [0, 0.43056, 0, 0, 0.52859],\n "98": [0, 0.69444, 0, 0, 0.42917],\n "99": [0, 0.43056, 0, 0.05556, 0.43276],\n "100": [0, 0.69444, 0, 0.16667, 0.52049],\n "101": [0, 0.43056, 0, 0.05556, 0.46563],\n "102": [0.19444, 0.69444, 0.10764, 0.16667, 0.48959],\n "103": [0.19444, 0.43056, 0.03588, 0.02778, 0.47697],\n "104": [0, 0.69444, 0, 0, 0.57616],\n "105": [0, 0.65952, 0, 0, 0.34451],\n "106": [0.19444, 0.65952, 0.05724, 0, 0.41181],\n "107": [0, 0.69444, 0.03148, 0, 0.5206],\n "108": [0, 0.69444, 0.01968, 0.08334, 0.29838],\n "109": [0, 0.43056, 0, 0, 0.87801],\n "110": [0, 0.43056, 0, 0, 0.60023],\n "111": [0, 0.43056, 0, 0.05556, 0.48472],\n "112": [0.19444, 0.43056, 0, 0.08334, 0.50313],\n "113": [0.19444, 0.43056, 0.03588, 0.08334, 0.44641],\n "114": [0, 0.43056, 0.02778, 0.05556, 0.45116],\n "115": [0, 0.43056, 0, 0.05556, 0.46875],\n "116": [0, 0.61508, 0, 0.08334, 0.36111],\n "117": [0, 0.43056, 0, 0.02778, 0.57246],\n "118": [0, 0.43056, 0.03588, 0.02778, 0.48472],\n "119": [0, 0.43056, 0.02691, 0.08334, 0.71592],\n "120": [0, 0.43056, 0, 0.02778, 0.57153],\n "121": [0.19444, 0.43056, 0.03588, 0.05556, 0.49028],\n "122": [0, 0.43056, 0.04398, 0.05556, 0.46505],\n "160": [0, 0, 0, 0, 0.25],\n "915": [0, 0.68333, 0.13889, 0.08334, 0.61528],\n "916": [0, 0.68333, 0, 0.16667, 0.83334],\n "920": [0, 0.68333, 0.02778, 0.08334, 0.76278],\n "923": [0, 0.68333, 0, 0.16667, 0.69445],\n "926": [0, 0.68333, 0.07569, 0.08334, 0.74236],\n "928": [0, 0.68333, 0.08125, 0.05556, 0.83125],\n "931": [0, 0.68333, 0.05764, 0.08334, 0.77986],\n "933": [0, 0.68333, 0.13889, 0.05556, 0.58333],\n "934": [0, 0.68333, 0, 0.08334, 0.66667],\n "936": [0, 0.68333, 0.11, 0.05556, 0.61222],\n "937": [0, 0.68333, 0.05017, 0.08334, 0.7724],\n "945": [0, 0.43056, 0.0037, 0.02778, 0.6397],\n "946": [0.19444, 0.69444, 0.05278, 0.08334, 0.56563],\n "947": [0.19444, 0.43056, 0.05556, 0, 0.51773],\n "948": [0, 0.69444, 0.03785, 0.05556, 0.44444],\n "949": [0, 0.43056, 0, 0.08334, 0.46632],\n "950": [0.19444, 0.69444, 0.07378, 0.08334, 0.4375],\n "951": [0.19444, 0.43056, 0.03588, 0.05556, 0.49653],\n "952": [0, 0.69444, 0.02778, 0.08334, 0.46944],\n "953": [0, 0.43056, 0, 0.05556, 0.35394],\n "954": [0, 0.43056, 0, 0, 0.57616],\n "955": [0, 0.69444, 0, 0, 0.58334],\n "956": [0.19444, 0.43056, 0, 0.02778, 0.60255],\n "957": [0, 0.43056, 0.06366, 0.02778, 0.49398],\n "958": [0.19444, 0.69444, 0.04601, 0.11111, 0.4375],\n "959": [0, 0.43056, 0, 0.05556, 0.48472],\n "960": [0, 0.43056, 0.03588, 0, 0.57003],\n "961": [0.19444, 0.43056, 0, 0.08334, 0.51702],\n "962": [0.09722, 0.43056, 0.07986, 0.08334, 0.36285],\n "963": [0, 0.43056, 0.03588, 0, 0.57141],\n "964": [0, 0.43056, 0.1132, 0.02778, 0.43715],\n "965": [0, 0.43056, 0.03588, 0.02778, 0.54028],\n "966": [0.19444, 0.43056, 0, 0.08334, 0.65417],\n "967": [0.19444, 0.43056, 0, 0.05556, 0.62569],\n "968": [0.19444, 0.69444, 0.03588, 0.11111, 0.65139],\n "969": [0, 0.43056, 0.03588, 0, 0.62245],\n "977": [0, 0.69444, 0, 0.08334, 0.59144],\n "981": [0.19444, 0.69444, 0, 0.08334, 0.59583],\n "982": [0, 0.43056, 0.02778, 0, 0.82813],\n "1009": [0.19444, 0.43056, 0, 0.08334, 0.51702],\n "1013": [0, 0.43056, 0, 0.05556, 0.4059],\n "57649": [0, 0.43056, 0, 0.02778, 0.32246],\n "57911": [0.19444, 0.43056, 0, 0.08334, 0.38403]\n },\n "SansSerif-Bold": {\n "32": [0, 0, 0, 0, 0.25],\n "33": [0, 0.69444, 0, 0, 0.36667],\n "34": [0, 0.69444, 0, 0, 0.55834],\n "35": [0.19444, 0.69444, 0, 0, 0.91667],\n "36": [0.05556, 0.75, 0, 0, 0.55],\n "37": [0.05556, 0.75, 0, 0, 1.02912],\n "38": [0, 0.69444, 0, 0, 0.83056],\n "39": [0, 0.69444, 0, 0, 0.30556],\n "40": [0.25, 0.75, 0, 0, 0.42778],\n "41": [0.25, 0.75, 0, 0, 0.42778],\n "42": [0, 0.75, 0, 0, 0.55],\n "43": [0.11667, 0.61667, 0, 0, 0.85556],\n "44": [0.10556, 0.13056, 0, 0, 0.30556],\n "45": [0, 0.45833, 0, 0, 0.36667],\n "46": [0, 0.13056, 0, 0, 0.30556],\n "47": [0.25, 0.75, 0, 0, 0.55],\n "48": [0, 0.69444, 0, 0, 0.55],\n "49": [0, 0.69444, 0, 0, 0.55],\n "50": [0, 0.69444, 0, 0, 0.55],\n "51": [0, 0.69444, 0, 0, 0.55],\n "52": [0, 0.69444, 0, 0, 0.55],\n "53": [0, 0.69444, 0, 0, 0.55],\n "54": [0, 0.69444, 0, 0, 0.55],\n "55": [0, 0.69444, 0, 0, 0.55],\n "56": [0, 0.69444, 0, 0, 0.55],\n "57": [0, 0.69444, 0, 0, 0.55],\n "58": [0, 0.45833, 0, 0, 0.30556],\n "59": [0.10556, 0.45833, 0, 0, 0.30556],\n "61": [-0.09375, 0.40625, 0, 0, 0.85556],\n "63": [0, 0.69444, 0, 0, 0.51945],\n "64": [0, 0.69444, 0, 0, 0.73334],\n "65": [0, 0.69444, 0, 0, 0.73334],\n "66": [0, 0.69444, 0, 0, 0.73334],\n "67": [0, 0.69444, 0, 0, 0.70278],\n "68": [0, 0.69444, 0, 0, 0.79445],\n "69": [0, 0.69444, 0, 0, 0.64167],\n "70": [0, 0.69444, 0, 0, 0.61111],\n "71": [0, 0.69444, 0, 0, 0.73334],\n "72": [0, 0.69444, 0, 0, 0.79445],\n "73": [0, 0.69444, 0, 0, 0.33056],\n "74": [0, 0.69444, 0, 0, 0.51945],\n "75": [0, 0.69444, 0, 0, 0.76389],\n "76": [0, 0.69444, 0, 0, 0.58056],\n "77": [0, 0.69444, 0, 0, 0.97778],\n "78": [0, 0.69444, 0, 0, 0.79445],\n "79": [0, 0.69444, 0, 0, 0.79445],\n "80": [0, 0.69444, 0, 0, 0.70278],\n "81": [0.10556, 0.69444, 0, 0, 0.79445],\n "82": [0, 0.69444, 0, 0, 0.70278],\n "83": [0, 0.69444, 0, 0, 0.61111],\n "84": [0, 0.69444, 0, 0, 0.73334],\n "85": [0, 0.69444, 0, 0, 0.76389],\n "86": [0, 0.69444, 0.01528, 0, 0.73334],\n "87": [0, 0.69444, 0.01528, 0, 1.03889],\n "88": [0, 0.69444, 0, 0, 0.73334],\n "89": [0, 0.69444, 0.0275, 0, 0.73334],\n "90": [0, 0.69444, 0, 0, 0.67223],\n "91": [0.25, 0.75, 0, 0, 0.34306],\n "93": [0.25, 0.75, 0, 0, 0.34306],\n "94": [0, 0.69444, 0, 0, 0.55],\n "95": [0.35, 0.10833, 0.03056, 0, 0.55],\n "97": [0, 0.45833, 0, 0, 0.525],\n "98": [0, 0.69444, 0, 0, 0.56111],\n "99": [0, 0.45833, 0, 0, 0.48889],\n "100": [0, 0.69444, 0, 0, 0.56111],\n "101": [0, 0.45833, 0, 0, 0.51111],\n "102": [0, 0.69444, 0.07639, 0, 0.33611],\n "103": [0.19444, 0.45833, 0.01528, 0, 0.55],\n "104": [0, 0.69444, 0, 0, 0.56111],\n "105": [0, 0.69444, 0, 0, 0.25556],\n "106": [0.19444, 0.69444, 0, 0, 0.28611],\n "107": [0, 0.69444, 0, 0, 0.53056],\n "108": [0, 0.69444, 0, 0, 0.25556],\n "109": [0, 0.45833, 0, 0, 0.86667],\n "110": [0, 0.45833, 0, 0, 0.56111],\n "111": [0, 0.45833, 0, 0, 0.55],\n "112": [0.19444, 0.45833, 0, 0, 0.56111],\n "113": [0.19444, 0.45833, 0, 0, 0.56111],\n "114": [0, 0.45833, 0.01528, 0, 0.37222],\n "115": [0, 0.45833, 0, 0, 0.42167],\n "116": [0, 0.58929, 0, 0, 0.40417],\n "117": [0, 0.45833, 0, 0, 0.56111],\n "118": [0, 0.45833, 0.01528, 0, 0.5],\n "119": [0, 0.45833, 0.01528, 0, 0.74445],\n "120": [0, 0.45833, 0, 0, 0.5],\n "121": [0.19444, 0.45833, 0.01528, 0, 0.5],\n "122": [0, 0.45833, 0, 0, 0.47639],\n "126": [0.35, 0.34444, 0, 0, 0.55],\n "160": [0, 0, 0, 0, 0.25],\n "168": [0, 0.69444, 0, 0, 0.55],\n "176": [0, 0.69444, 0, 0, 0.73334],\n "180": [0, 0.69444, 0, 0, 0.55],\n "184": [0.17014, 0, 0, 0, 0.48889],\n "305": [0, 0.45833, 0, 0, 0.25556],\n "567": [0.19444, 0.45833, 0, 0, 0.28611],\n "710": [0, 0.69444, 0, 0, 0.55],\n "711": [0, 0.63542, 0, 0, 0.55],\n "713": [0, 0.63778, 0, 0, 0.55],\n "728": [0, 0.69444, 0, 0, 0.55],\n "729": [0, 0.69444, 0, 0, 0.30556],\n "730": [0, 0.69444, 0, 0, 0.73334],\n "732": [0, 0.69444, 0, 0, 0.55],\n "733": [0, 0.69444, 0, 0, 0.55],\n "915": [0, 0.69444, 0, 0, 0.58056],\n "916": [0, 0.69444, 0, 0, 0.91667],\n "920": [0, 0.69444, 0, 0, 0.85556],\n "923": [0, 0.69444, 0, 0, 0.67223],\n "926": [0, 0.69444, 0, 0, 0.73334],\n "928": [0, 0.69444, 0, 0, 0.79445],\n "931": [0, 0.69444, 0, 0, 0.79445],\n "933": [0, 0.69444, 0, 0, 0.85556],\n "934": [0, 0.69444, 0, 0, 0.79445],\n "936": [0, 0.69444, 0, 0, 0.85556],\n "937": [0, 0.69444, 0, 0, 0.79445],\n "8211": [0, 0.45833, 0.03056, 0, 0.55],\n "8212": [0, 0.45833, 0.03056, 0, 1.10001],\n "8216": [0, 0.69444, 0, 0, 0.30556],\n "8217": [0, 0.69444, 0, 0, 0.30556],\n "8220": [0, 0.69444, 0, 0, 0.55834],\n "8221": [0, 0.69444, 0, 0, 0.55834]\n },\n "SansSerif-Italic": {\n "32": [0, 0, 0, 0, 0.25],\n "33": [0, 0.69444, 0.05733, 0, 0.31945],\n "34": [0, 0.69444, 0.00316, 0, 0.5],\n "35": [0.19444, 0.69444, 0.05087, 0, 0.83334],\n "36": [0.05556, 0.75, 0.11156, 0, 0.5],\n "37": [0.05556, 0.75, 0.03126, 0, 0.83334],\n "38": [0, 0.69444, 0.03058, 0, 0.75834],\n "39": [0, 0.69444, 0.07816, 0, 0.27778],\n "40": [0.25, 0.75, 0.13164, 0, 0.38889],\n "41": [0.25, 0.75, 0.02536, 0, 0.38889],\n "42": [0, 0.75, 0.11775, 0, 0.5],\n "43": [0.08333, 0.58333, 0.02536, 0, 0.77778],\n "44": [0.125, 0.08333, 0, 0, 0.27778],\n "45": [0, 0.44444, 0.01946, 0, 0.33333],\n "46": [0, 0.08333, 0, 0, 0.27778],\n "47": [0.25, 0.75, 0.13164, 0, 0.5],\n "48": [0, 0.65556, 0.11156, 0, 0.5],\n "49": [0, 0.65556, 0.11156, 0, 0.5],\n "50": [0, 0.65556, 0.11156, 0, 0.5],\n "51": [0, 0.65556, 0.11156, 0, 0.5],\n "52": [0, 0.65556, 0.11156, 0, 0.5],\n "53": [0, 0.65556, 0.11156, 0, 0.5],\n "54": [0, 0.65556, 0.11156, 0, 0.5],\n "55": [0, 0.65556, 0.11156, 0, 0.5],\n "56": [0, 0.65556, 0.11156, 0, 0.5],\n "57": [0, 0.65556, 0.11156, 0, 0.5],\n "58": [0, 0.44444, 0.02502, 0, 0.27778],\n "59": [0.125, 0.44444, 0.02502, 0, 0.27778],\n "61": [-0.13, 0.37, 0.05087, 0, 0.77778],\n "63": [0, 0.69444, 0.11809, 0, 0.47222],\n "64": [0, 0.69444, 0.07555, 0, 0.66667],\n "65": [0, 0.69444, 0, 0, 0.66667],\n "66": [0, 0.69444, 0.08293, 0, 0.66667],\n "67": [0, 0.69444, 0.11983, 0, 0.63889],\n "68": [0, 0.69444, 0.07555, 0, 0.72223],\n "69": [0, 0.69444, 0.11983, 0, 0.59722],\n "70": [0, 0.69444, 0.13372, 0, 0.56945],\n "71": [0, 0.69444, 0.11983, 0, 0.66667],\n "72": [0, 0.69444, 0.08094, 0, 0.70834],\n "73": [0, 0.69444, 0.13372, 0, 0.27778],\n "74": [0, 0.69444, 0.08094, 0, 0.47222],\n "75": [0, 0.69444, 0.11983, 0, 0.69445],\n "76": [0, 0.69444, 0, 0, 0.54167],\n "77": [0, 0.69444, 0.08094, 0, 0.875],\n "78": [0, 0.69444, 0.08094, 0, 0.70834],\n "79": [0, 0.69444, 0.07555, 0, 0.73611],\n "80": [0, 0.69444, 0.08293, 0, 0.63889],\n "81": [0.125, 0.69444, 0.07555, 0, 0.73611],\n "82": [0, 0.69444, 0.08293, 0, 0.64584],\n "83": [0, 0.69444, 0.09205, 0, 0.55556],\n "84": [0, 0.69444, 0.13372, 0, 0.68056],\n "85": [0, 0.69444, 0.08094, 0, 0.6875],\n "86": [0, 0.69444, 0.1615, 0, 0.66667],\n "87": [0, 0.69444, 0.1615, 0, 0.94445],\n "88": [0, 0.69444, 0.13372, 0, 0.66667],\n "89": [0, 0.69444, 0.17261, 0, 0.66667],\n "90": [0, 0.69444, 0.11983, 0, 0.61111],\n "91": [0.25, 0.75, 0.15942, 0, 0.28889],\n "93": [0.25, 0.75, 0.08719, 0, 0.28889],\n "94": [0, 0.69444, 0.0799, 0, 0.5],\n "95": [0.35, 0.09444, 0.08616, 0, 0.5],\n "97": [0, 0.44444, 0.00981, 0, 0.48056],\n "98": [0, 0.69444, 0.03057, 0, 0.51667],\n "99": [0, 0.44444, 0.08336, 0, 0.44445],\n "100": [0, 0.69444, 0.09483, 0, 0.51667],\n "101": [0, 0.44444, 0.06778, 0, 0.44445],\n "102": [0, 0.69444, 0.21705, 0, 0.30556],\n "103": [0.19444, 0.44444, 0.10836, 0, 0.5],\n "104": [0, 0.69444, 0.01778, 0, 0.51667],\n "105": [0, 0.67937, 0.09718, 0, 0.23889],\n "106": [0.19444, 0.67937, 0.09162, 0, 0.26667],\n "107": [0, 0.69444, 0.08336, 0, 0.48889],\n "108": [0, 0.69444, 0.09483, 0, 0.23889],\n "109": [0, 0.44444, 0.01778, 0, 0.79445],\n "110": [0, 0.44444, 0.01778, 0, 0.51667],\n "111": [0, 0.44444, 0.06613, 0, 0.5],\n "112": [0.19444, 0.44444, 0.0389, 0, 0.51667],\n "113": [0.19444, 0.44444, 0.04169, 0, 0.51667],\n "114": [0, 0.44444, 0.10836, 0, 0.34167],\n "115": [0, 0.44444, 0.0778, 0, 0.38333],\n "116": [0, 0.57143, 0.07225, 0, 0.36111],\n "117": [0, 0.44444, 0.04169, 0, 0.51667],\n "118": [0, 0.44444, 0.10836, 0, 0.46111],\n "119": [0, 0.44444, 0.10836, 0, 0.68334],\n "120": [0, 0.44444, 0.09169, 0, 0.46111],\n "121": [0.19444, 0.44444, 0.10836, 0, 0.46111],\n "122": [0, 0.44444, 0.08752, 0, 0.43472],\n "126": [0.35, 0.32659, 0.08826, 0, 0.5],\n "160": [0, 0, 0, 0, 0.25],\n "168": [0, 0.67937, 0.06385, 0, 0.5],\n "176": [0, 0.69444, 0, 0, 0.73752],\n "184": [0.17014, 0, 0, 0, 0.44445],\n "305": [0, 0.44444, 0.04169, 0, 0.23889],\n "567": [0.19444, 0.44444, 0.04169, 0, 0.26667],\n "710": [0, 0.69444, 0.0799, 0, 0.5],\n "711": [0, 0.63194, 0.08432, 0, 0.5],\n "713": [0, 0.60889, 0.08776, 0, 0.5],\n "714": [0, 0.69444, 0.09205, 0, 0.5],\n "715": [0, 0.69444, 0, 0, 0.5],\n "728": [0, 0.69444, 0.09483, 0, 0.5],\n "729": [0, 0.67937, 0.07774, 0, 0.27778],\n "730": [0, 0.69444, 0, 0, 0.73752],\n "732": [0, 0.67659, 0.08826, 0, 0.5],\n "733": [0, 0.69444, 0.09205, 0, 0.5],\n "915": [0, 0.69444, 0.13372, 0, 0.54167],\n "916": [0, 0.69444, 0, 0, 0.83334],\n "920": [0, 0.69444, 0.07555, 0, 0.77778],\n "923": [0, 0.69444, 0, 0, 0.61111],\n "926": [0, 0.69444, 0.12816, 0, 0.66667],\n "928": [0, 0.69444, 0.08094, 0, 0.70834],\n "931": [0, 0.69444, 0.11983, 0, 0.72222],\n "933": [0, 0.69444, 0.09031, 0, 0.77778],\n "934": [0, 0.69444, 0.04603, 0, 0.72222],\n "936": [0, 0.69444, 0.09031, 0, 0.77778],\n "937": [0, 0.69444, 0.08293, 0, 0.72222],\n "8211": [0, 0.44444, 0.08616, 0, 0.5],\n "8212": [0, 0.44444, 0.08616, 0, 1.0],\n "8216": [0, 0.69444, 0.07816, 0, 0.27778],\n "8217": [0, 0.69444, 0.07816, 0, 0.27778],\n "8220": [0, 0.69444, 0.14205, 0, 0.5],\n "8221": [0, 0.69444, 0.00316, 0, 0.5]\n },\n "SansSerif-Regular": {\n "32": [0, 0, 0, 0, 0.25],\n "33": [0, 0.69444, 0, 0, 0.31945],\n "34": [0, 0.69444, 0, 0, 0.5],\n "35": [0.19444, 0.69444, 0, 0, 0.83334],\n "36": [0.05556, 0.75, 0, 0, 0.5],\n "37": [0.05556, 0.75, 0, 0, 0.83334],\n "38": [0, 0.69444, 0, 0, 0.75834],\n "39": [0, 0.69444, 0, 0, 0.27778],\n "40": [0.25, 0.75, 0, 0, 0.38889],\n "41": [0.25, 0.75, 0, 0, 0.38889],\n "42": [0, 0.75, 0, 0, 0.5],\n "43": [0.08333, 0.58333, 0, 0, 0.77778],\n "44": [0.125, 0.08333, 0, 0, 0.27778],\n "45": [0, 0.44444, 0, 0, 0.33333],\n "46": [0, 0.08333, 0, 0, 0.27778],\n "47": [0.25, 0.75, 0, 0, 0.5],\n "48": [0, 0.65556, 0, 0, 0.5],\n "49": [0, 0.65556, 0, 0, 0.5],\n "50": [0, 0.65556, 0, 0, 0.5],\n "51": [0, 0.65556, 0, 0, 0.5],\n "52": [0, 0.65556, 0, 0, 0.5],\n "53": [0, 0.65556, 0, 0, 0.5],\n "54": [0, 0.65556, 0, 0, 0.5],\n "55": [0, 0.65556, 0, 0, 0.5],\n "56": [0, 0.65556, 0, 0, 0.5],\n "57": [0, 0.65556, 0, 0, 0.5],\n "58": [0, 0.44444, 0, 0, 0.27778],\n "59": [0.125, 0.44444, 0, 0, 0.27778],\n "61": [-0.13, 0.37, 0, 0, 0.77778],\n "63": [0, 0.69444, 0, 0, 0.47222],\n "64": [0, 0.69444, 0, 0, 0.66667],\n "65": [0, 0.69444, 0, 0, 0.66667],\n "66": [0, 0.69444, 0, 0, 0.66667],\n "67": [0, 0.69444, 0, 0, 0.63889],\n "68": [0, 0.69444, 0, 0, 0.72223],\n "69": [0, 0.69444, 0, 0, 0.59722],\n "70": [0, 0.69444, 0, 0, 0.56945],\n "71": [0, 0.69444, 0, 0, 0.66667],\n "72": [0, 0.69444, 0, 0, 0.70834],\n "73": [0, 0.69444, 0, 0, 0.27778],\n "74": [0, 0.69444, 0, 0, 0.47222],\n "75": [0, 0.69444, 0, 0, 0.69445],\n "76": [0, 0.69444, 0, 0, 0.54167],\n "77": [0, 0.69444, 0, 0, 0.875],\n "78": [0, 0.69444, 0, 0, 0.70834],\n "79": [0, 0.69444, 0, 0, 0.73611],\n "80": [0, 0.69444, 0, 0, 0.63889],\n "81": [0.125, 0.69444, 0, 0, 0.73611],\n "82": [0, 0.69444, 0, 0, 0.64584],\n "83": [0, 0.69444, 0, 0, 0.55556],\n "84": [0, 0.69444, 0, 0, 0.68056],\n "85": [0, 0.69444, 0, 0, 0.6875],\n "86": [0, 0.69444, 0.01389, 0, 0.66667],\n "87": [0, 0.69444, 0.01389, 0, 0.94445],\n "88": [0, 0.69444, 0, 0, 0.66667],\n "89": [0, 0.69444, 0.025, 0, 0.66667],\n "90": [0, 0.69444, 0, 0, 0.61111],\n "91": [0.25, 0.75, 0, 0, 0.28889],\n "93": [0.25, 0.75, 0, 0, 0.28889],\n "94": [0, 0.69444, 0, 0, 0.5],\n "95": [0.35, 0.09444, 0.02778, 0, 0.5],\n "97": [0, 0.44444, 0, 0, 0.48056],\n "98": [0, 0.69444, 0, 0, 0.51667],\n "99": [0, 0.44444, 0, 0, 0.44445],\n "100": [0, 0.69444, 0, 0, 0.51667],\n "101": [0, 0.44444, 0, 0, 0.44445],\n "102": [0, 0.69444, 0.06944, 0, 0.30556],\n "103": [0.19444, 0.44444, 0.01389, 0, 0.5],\n "104": [0, 0.69444, 0, 0, 0.51667],\n "105": [0, 0.67937, 0, 0, 0.23889],\n "106": [0.19444, 0.67937, 0, 0, 0.26667],\n "107": [0, 0.69444, 0, 0, 0.48889],\n "108": [0, 0.69444, 0, 0, 0.23889],\n "109": [0, 0.44444, 0, 0, 0.79445],\n "110": [0, 0.44444, 0, 0, 0.51667],\n "111": [0, 0.44444, 0, 0, 0.5],\n "112": [0.19444, 0.44444, 0, 0, 0.51667],\n "113": [0.19444, 0.44444, 0, 0, 0.51667],\n "114": [0, 0.44444, 0.01389, 0, 0.34167],\n "115": [0, 0.44444, 0, 0, 0.38333],\n "116": [0, 0.57143, 0, 0, 0.36111],\n "117": [0, 0.44444, 0, 0, 0.51667],\n "118": [0, 0.44444, 0.01389, 0, 0.46111],\n "119": [0, 0.44444, 0.01389, 0, 0.68334],\n "120": [0, 0.44444, 0, 0, 0.46111],\n "121": [0.19444, 0.44444, 0.01389, 0, 0.46111],\n "122": [0, 0.44444, 0, 0, 0.43472],\n "126": [0.35, 0.32659, 0, 0, 0.5],\n "160": [0, 0, 0, 0, 0.25],\n "168": [0, 0.67937, 0, 0, 0.5],\n "176": [0, 0.69444, 0, 0, 0.66667],\n "184": [0.17014, 0, 0, 0, 0.44445],\n "305": [0, 0.44444, 0, 0, 0.23889],\n "567": [0.19444, 0.44444, 0, 0, 0.26667],\n "710": [0, 0.69444, 0, 0, 0.5],\n "711": [0, 0.63194, 0, 0, 0.5],\n "713": [0, 0.60889, 0, 0, 0.5],\n "714": [0, 0.69444, 0, 0, 0.5],\n "715": [0, 0.69444, 0, 0, 0.5],\n "728": [0, 0.69444, 0, 0, 0.5],\n "729": [0, 0.67937, 0, 0, 0.27778],\n "730": [0, 0.69444, 0, 0, 0.66667],\n "732": [0, 0.67659, 0, 0, 0.5],\n "733": [0, 0.69444, 0, 0, 0.5],\n "915": [0, 0.69444, 0, 0, 0.54167],\n "916": [0, 0.69444, 0, 0, 0.83334],\n "920": [0, 0.69444, 0, 0, 0.77778],\n "923": [0, 0.69444, 0, 0, 0.61111],\n "926": [0, 0.69444, 0, 0, 0.66667],\n "928": [0, 0.69444, 0, 0, 0.70834],\n "931": [0, 0.69444, 0, 0, 0.72222],\n "933": [0, 0.69444, 0, 0, 0.77778],\n "934": [0, 0.69444, 0, 0, 0.72222],\n "936": [0, 0.69444, 0, 0, 0.77778],\n "937": [0, 0.69444, 0, 0, 0.72222],\n "8211": [0, 0.44444, 0.02778, 0, 0.5],\n "8212": [0, 0.44444, 0.02778, 0, 1.0],\n "8216": [0, 0.69444, 0, 0, 0.27778],\n "8217": [0, 0.69444, 0, 0, 0.27778],\n "8220": [0, 0.69444, 0, 0, 0.5],\n "8221": [0, 0.69444, 0, 0, 0.5]\n },\n "Script-Regular": {\n "32": [0, 0, 0, 0, 0.25],\n "65": [0, 0.7, 0.22925, 0, 0.80253],\n "66": [0, 0.7, 0.04087, 0, 0.90757],\n "67": [0, 0.7, 0.1689, 0, 0.66619],\n "68": [0, 0.7, 0.09371, 0, 0.77443],\n "69": [0, 0.7, 0.18583, 0, 0.56162],\n "70": [0, 0.7, 0.13634, 0, 0.89544],\n "71": [0, 0.7, 0.17322, 0, 0.60961],\n "72": [0, 0.7, 0.29694, 0, 0.96919],\n "73": [0, 0.7, 0.19189, 0, 0.80907],\n "74": [0.27778, 0.7, 0.19189, 0, 1.05159],\n "75": [0, 0.7, 0.31259, 0, 0.91364],\n "76": [0, 0.7, 0.19189, 0, 0.87373],\n "77": [0, 0.7, 0.15981, 0, 1.08031],\n "78": [0, 0.7, 0.3525, 0, 0.9015],\n "79": [0, 0.7, 0.08078, 0, 0.73787],\n "80": [0, 0.7, 0.08078, 0, 1.01262],\n "81": [0, 0.7, 0.03305, 0, 0.88282],\n "82": [0, 0.7, 0.06259, 0, 0.85],\n "83": [0, 0.7, 0.19189, 0, 0.86767],\n "84": [0, 0.7, 0.29087, 0, 0.74697],\n "85": [0, 0.7, 0.25815, 0, 0.79996],\n "86": [0, 0.7, 0.27523, 0, 0.62204],\n "87": [0, 0.7, 0.27523, 0, 0.80532],\n "88": [0, 0.7, 0.26006, 0, 0.94445],\n "89": [0, 0.7, 0.2939, 0, 0.70961],\n "90": [0, 0.7, 0.24037, 0, 0.8212],\n "160": [0, 0, 0, 0, 0.25]\n },\n "Size1-Regular": {\n "32": [0, 0, 0, 0, 0.25],\n "40": [0.35001, 0.85, 0, 0, 0.45834],\n "41": [0.35001, 0.85, 0, 0, 0.45834],\n "47": [0.35001, 0.85, 0, 0, 0.57778],\n "91": [0.35001, 0.85, 0, 0, 0.41667],\n "92": [0.35001, 0.85, 0, 0, 0.57778],\n "93": [0.35001, 0.85, 0, 0, 0.41667],\n "123": [0.35001, 0.85, 0, 0, 0.58334],\n "125": [0.35001, 0.85, 0, 0, 0.58334],\n "160": [0, 0, 0, 0, 0.25],\n "710": [0, 0.72222, 0, 0, 0.55556],\n "732": [0, 0.72222, 0, 0, 0.55556],\n "770": [0, 0.72222, 0, 0, 0.55556],\n "771": [0, 0.72222, 0, 0, 0.55556],\n "8214": [-0.00099, 0.601, 0, 0, 0.77778],\n "8593": [1e-05, 0.6, 0, 0, 0.66667],\n "8595": [1e-05, 0.6, 0, 0, 0.66667],\n "8657": [1e-05, 0.6, 0, 0, 0.77778],\n "8659": [1e-05, 0.6, 0, 0, 0.77778],\n "8719": [0.25001, 0.75, 0, 0, 0.94445],\n "8720": [0.25001, 0.75, 0, 0, 0.94445],\n "8721": [0.25001, 0.75, 0, 0, 1.05556],\n "8730": [0.35001, 0.85, 0, 0, 1.0],\n "8739": [-0.00599, 0.606, 0, 0, 0.33333],\n "8741": [-0.00599, 0.606, 0, 0, 0.55556],\n "8747": [0.30612, 0.805, 0.19445, 0, 0.47222],\n "8748": [0.306, 0.805, 0.19445, 0, 0.47222],\n "8749": [0.306, 0.805, 0.19445, 0, 0.47222],\n "8750": [0.30612, 0.805, 0.19445, 0, 0.47222],\n "8896": [0.25001, 0.75, 0, 0, 0.83334],\n "8897": [0.25001, 0.75, 0, 0, 0.83334],\n "8898": [0.25001, 0.75, 0, 0, 0.83334],\n "8899": [0.25001, 0.75, 0, 0, 0.83334],\n "8968": [0.35001, 0.85, 0, 0, 0.47222],\n "8969": [0.35001, 0.85, 0, 0, 0.47222],\n "8970": [0.35001, 0.85, 0, 0, 0.47222],\n "8971": [0.35001, 0.85, 0, 0, 0.47222],\n "9168": [-0.00099, 0.601, 0, 0, 0.66667],\n "10216": [0.35001, 0.85, 0, 0, 0.47222],\n "10217": [0.35001, 0.85, 0, 0, 0.47222],\n "10752": [0.25001, 0.75, 0, 0, 1.11111],\n "10753": [0.25001, 0.75, 0, 0, 1.11111],\n "10754": [0.25001, 0.75, 0, 0, 1.11111],\n "10756": [0.25001, 0.75, 0, 0, 0.83334],\n "10758": [0.25001, 0.75, 0, 0, 0.83334]\n },\n "Size2-Regular": {\n "32": [0, 0, 0, 0, 0.25],\n "40": [0.65002, 1.15, 0, 0, 0.59722],\n "41": [0.65002, 1.15, 0, 0, 0.59722],\n "47": [0.65002, 1.15, 0, 0, 0.81111],\n "91": [0.65002, 1.15, 0, 0, 0.47222],\n "92": [0.65002, 1.15, 0, 0, 0.81111],\n "93": [0.65002, 1.15, 0, 0, 0.47222],\n "123": [0.65002, 1.15, 0, 0, 0.66667],\n "125": [0.65002, 1.15, 0, 0, 0.66667],\n "160": [0, 0, 0, 0, 0.25],\n "710": [0, 0.75, 0, 0, 1.0],\n "732": [0, 0.75, 0, 0, 1.0],\n "770": [0, 0.75, 0, 0, 1.0],\n "771": [0, 0.75, 0, 0, 1.0],\n "8719": [0.55001, 1.05, 0, 0, 1.27778],\n "8720": [0.55001, 1.05, 0, 0, 1.27778],\n "8721": [0.55001, 1.05, 0, 0, 1.44445],\n "8730": [0.65002, 1.15, 0, 0, 1.0],\n "8747": [0.86225, 1.36, 0.44445, 0, 0.55556],\n "8748": [0.862, 1.36, 0.44445, 0, 0.55556],\n "8749": [0.862, 1.36, 0.44445, 0, 0.55556],\n "8750": [0.86225, 1.36, 0.44445, 0, 0.55556],\n "8896": [0.55001, 1.05, 0, 0, 1.11111],\n "8897": [0.55001, 1.05, 0, 0, 1.11111],\n "8898": [0.55001, 1.05, 0, 0, 1.11111],\n "8899": [0.55001, 1.05, 0, 0, 1.11111],\n "8968": [0.65002, 1.15, 0, 0, 0.52778],\n "8969": [0.65002, 1.15, 0, 0, 0.52778],\n "8970": [0.65002, 1.15, 0, 0, 0.52778],\n "8971": [0.65002, 1.15, 0, 0, 0.52778],\n "10216": [0.65002, 1.15, 0, 0, 0.61111],\n "10217": [0.65002, 1.15, 0, 0, 0.61111],\n "10752": [0.55001, 1.05, 0, 0, 1.51112],\n "10753": [0.55001, 1.05, 0, 0, 1.51112],\n "10754": [0.55001, 1.05, 0, 0, 1.51112],\n "10756": [0.55001, 1.05, 0, 0, 1.11111],\n "10758": [0.55001, 1.05, 0, 0, 1.11111]\n },\n "Size3-Regular": {\n "32": [0, 0, 0, 0, 0.25],\n "40": [0.95003, 1.45, 0, 0, 0.73611],\n "41": [0.95003, 1.45, 0, 0, 0.73611],\n "47": [0.95003, 1.45, 0, 0, 1.04445],\n "91": [0.95003, 1.45, 0, 0, 0.52778],\n "92": [0.95003, 1.45, 0, 0, 1.04445],\n "93": [0.95003, 1.45, 0, 0, 0.52778],\n "123": [0.95003, 1.45, 0, 0, 0.75],\n "125": [0.95003, 1.45, 0, 0, 0.75],\n "160": [0, 0, 0, 0, 0.25],\n "710": [0, 0.75, 0, 0, 1.44445],\n "732": [0, 0.75, 0, 0, 1.44445],\n "770": [0, 0.75, 0, 0, 1.44445],\n "771": [0, 0.75, 0, 0, 1.44445],\n "8730": [0.95003, 1.45, 0, 0, 1.0],\n "8968": [0.95003, 1.45, 0, 0, 0.58334],\n "8969": [0.95003, 1.45, 0, 0, 0.58334],\n "8970": [0.95003, 1.45, 0, 0, 0.58334],\n "8971": [0.95003, 1.45, 0, 0, 0.58334],\n "10216": [0.95003, 1.45, 0, 0, 0.75],\n "10217": [0.95003, 1.45, 0, 0, 0.75]\n },\n "Size4-Regular": {\n "32": [0, 0, 0, 0, 0.25],\n "40": [1.25003, 1.75, 0, 0, 0.79167],\n "41": [1.25003, 1.75, 0, 0, 0.79167],\n "47": [1.25003, 1.75, 0, 0, 1.27778],\n "91": [1.25003, 1.75, 0, 0, 0.58334],\n "92": [1.25003, 1.75, 0, 0, 1.27778],\n "93": [1.25003, 1.75, 0, 0, 0.58334],\n "123": [1.25003, 1.75, 0, 0, 0.80556],\n "125": [1.25003, 1.75, 0, 0, 0.80556],\n "160": [0, 0, 0, 0, 0.25],\n "710": [0, 0.825, 0, 0, 1.8889],\n "732": [0, 0.825, 0, 0, 1.8889],\n "770": [0, 0.825, 0, 0, 1.8889],\n "771": [0, 0.825, 0, 0, 1.8889],\n "8730": [1.25003, 1.75, 0, 0, 1.0],\n "8968": [1.25003, 1.75, 0, 0, 0.63889],\n "8969": [1.25003, 1.75, 0, 0, 0.63889],\n "8970": [1.25003, 1.75, 0, 0, 0.63889],\n "8971": [1.25003, 1.75, 0, 0, 0.63889],\n "9115": [0.64502, 1.155, 0, 0, 0.875],\n "9116": [1e-05, 0.6, 0, 0, 0.875],\n "9117": [0.64502, 1.155, 0, 0, 0.875],\n "9118": [0.64502, 1.155, 0, 0, 0.875],\n "9119": [1e-05, 0.6, 0, 0, 0.875],\n "9120": [0.64502, 1.155, 0, 0, 0.875],\n "9121": [0.64502, 1.155, 0, 0, 0.66667],\n "9122": [-0.00099, 0.601, 0, 0, 0.66667],\n "9123": [0.64502, 1.155, 0, 0, 0.66667],\n "9124": [0.64502, 1.155, 0, 0, 0.66667],\n "9125": [-0.00099, 0.601, 0, 0, 0.66667],\n "9126": [0.64502, 1.155, 0, 0, 0.66667],\n "9127": [1e-05, 0.9, 0, 0, 0.88889],\n "9128": [0.65002, 1.15, 0, 0, 0.88889],\n "9129": [0.90001, 0, 0, 0, 0.88889],\n "9130": [0, 0.3, 0, 0, 0.88889],\n "9131": [1e-05, 0.9, 0, 0, 0.88889],\n "9132": [0.65002, 1.15, 0, 0, 0.88889],\n "9133": [0.90001, 0, 0, 0, 0.88889],\n "9143": [0.88502, 0.915, 0, 0, 1.05556],\n "10216": [1.25003, 1.75, 0, 0, 0.80556],\n "10217": [1.25003, 1.75, 0, 0, 0.80556],\n "57344": [-0.00499, 0.605, 0, 0, 1.05556],\n "57345": [-0.00499, 0.605, 0, 0, 1.05556],\n "57680": [0, 0.12, 0, 0, 0.45],\n "57681": [0, 0.12, 0, 0, 0.45],\n "57682": [0, 0.12, 0, 0, 0.45],\n "57683": [0, 0.12, 0, 0, 0.45]\n },\n "Typewriter-Regular": {\n "32": [0, 0, 0, 0, 0.525],\n "33": [0, 0.61111, 0, 0, 0.525],\n "34": [0, 0.61111, 0, 0, 0.525],\n "35": [0, 0.61111, 0, 0, 0.525],\n "36": [0.08333, 0.69444, 0, 0, 0.525],\n "37": [0.08333, 0.69444, 0, 0, 0.525],\n "38": [0, 0.61111, 0, 0, 0.525],\n "39": [0, 0.61111, 0, 0, 0.525],\n "40": [0.08333, 0.69444, 0, 0, 0.525],\n "41": [0.08333, 0.69444, 0, 0, 0.525],\n "42": [0, 0.52083, 0, 0, 0.525],\n "43": [-0.08056, 0.53055, 0, 0, 0.525],\n "44": [0.13889, 0.125, 0, 0, 0.525],\n "45": [-0.08056, 0.53055, 0, 0, 0.525],\n "46": [0, 0.125, 0, 0, 0.525],\n "47": [0.08333, 0.69444, 0, 0, 0.525],\n "48": [0, 0.61111, 0, 0, 0.525],\n "49": [0, 0.61111, 0, 0, 0.525],\n "50": [0, 0.61111, 0, 0, 0.525],\n "51": [0, 0.61111, 0, 0, 0.525],\n "52": [0, 0.61111, 0, 0, 0.525],\n "53": [0, 0.61111, 0, 0, 0.525],\n "54": [0, 0.61111, 0, 0, 0.525],\n "55": [0, 0.61111, 0, 0, 0.525],\n "56": [0, 0.61111, 0, 0, 0.525],\n "57": [0, 0.61111, 0, 0, 0.525],\n "58": [0, 0.43056, 0, 0, 0.525],\n "59": [0.13889, 0.43056, 0, 0, 0.525],\n "60": [-0.05556, 0.55556, 0, 0, 0.525],\n "61": [-0.19549, 0.41562, 0, 0, 0.525],\n "62": [-0.05556, 0.55556, 0, 0, 0.525],\n "63": [0, 0.61111, 0, 0, 0.525],\n "64": [0, 0.61111, 0, 0, 0.525],\n "65": [0, 0.61111, 0, 0, 0.525],\n "66": [0, 0.61111, 0, 0, 0.525],\n "67": [0, 0.61111, 0, 0, 0.525],\n "68": [0, 0.61111, 0, 0, 0.525],\n "69": [0, 0.61111, 0, 0, 0.525],\n "70": [0, 0.61111, 0, 0, 0.525],\n "71": [0, 0.61111, 0, 0, 0.525],\n "72": [0, 0.61111, 0, 0, 0.525],\n "73": [0, 0.61111, 0, 0, 0.525],\n "74": [0, 0.61111, 0, 0, 0.525],\n "75": [0, 0.61111, 0, 0, 0.525],\n "76": [0, 0.61111, 0, 0, 0.525],\n "77": [0, 0.61111, 0, 0, 0.525],\n "78": [0, 0.61111, 0, 0, 0.525],\n "79": [0, 0.61111, 0, 0, 0.525],\n "80": [0, 0.61111, 0, 0, 0.525],\n "81": [0.13889, 0.61111, 0, 0, 0.525],\n "82": [0, 0.61111, 0, 0, 0.525],\n "83": [0, 0.61111, 0, 0, 0.525],\n "84": [0, 0.61111, 0, 0, 0.525],\n "85": [0, 0.61111, 0, 0, 0.525],\n "86": [0, 0.61111, 0, 0, 0.525],\n "87": [0, 0.61111, 0, 0, 0.525],\n "88": [0, 0.61111, 0, 0, 0.525],\n "89": [0, 0.61111, 0, 0, 0.525],\n "90": [0, 0.61111, 0, 0, 0.525],\n "91": [0.08333, 0.69444, 0, 0, 0.525],\n "92": [0.08333, 0.69444, 0, 0, 0.525],\n "93": [0.08333, 0.69444, 0, 0, 0.525],\n "94": [0, 0.61111, 0, 0, 0.525],\n "95": [0.09514, 0, 0, 0, 0.525],\n "96": [0, 0.61111, 0, 0, 0.525],\n "97": [0, 0.43056, 0, 0, 0.525],\n "98": [0, 0.61111, 0, 0, 0.525],\n "99": [0, 0.43056, 0, 0, 0.525],\n "100": [0, 0.61111, 0, 0, 0.525],\n "101": [0, 0.43056, 0, 0, 0.525],\n "102": [0, 0.61111, 0, 0, 0.525],\n "103": [0.22222, 0.43056, 0, 0, 0.525],\n "104": [0, 0.61111, 0, 0, 0.525],\n "105": [0, 0.61111, 0, 0, 0.525],\n "106": [0.22222, 0.61111, 0, 0, 0.525],\n "107": [0, 0.61111, 0, 0, 0.525],\n "108": [0, 0.61111, 0, 0, 0.525],\n "109": [0, 0.43056, 0, 0, 0.525],\n "110": [0, 0.43056, 0, 0, 0.525],\n "111": [0, 0.43056, 0, 0, 0.525],\n "112": [0.22222, 0.43056, 0, 0, 0.525],\n "113": [0.22222, 0.43056, 0, 0, 0.525],\n "114": [0, 0.43056, 0, 0, 0.525],\n "115": [0, 0.43056, 0, 0, 0.525],\n "116": [0, 0.55358, 0, 0, 0.525],\n "117": [0, 0.43056, 0, 0, 0.525],\n "118": [0, 0.43056, 0, 0, 0.525],\n "119": [0, 0.43056, 0, 0, 0.525],\n "120": [0, 0.43056, 0, 0, 0.525],\n "121": [0.22222, 0.43056, 0, 0, 0.525],\n "122": [0, 0.43056, 0, 0, 0.525],\n "123": [0.08333, 0.69444, 0, 0, 0.525],\n "124": [0.08333, 0.69444, 0, 0, 0.525],\n "125": [0.08333, 0.69444, 0, 0, 0.525],\n "126": [0, 0.61111, 0, 0, 0.525],\n "127": [0, 0.61111, 0, 0, 0.525],\n "160": [0, 0, 0, 0, 0.525],\n "176": [0, 0.61111, 0, 0, 0.525],\n "184": [0.19445, 0, 0, 0, 0.525],\n "305": [0, 0.43056, 0, 0, 0.525],\n "567": [0.22222, 0.43056, 0, 0, 0.525],\n "711": [0, 0.56597, 0, 0, 0.525],\n "713": [0, 0.56555, 0, 0, 0.525],\n "714": [0, 0.61111, 0, 0, 0.525],\n "715": [0, 0.61111, 0, 0, 0.525],\n "728": [0, 0.61111, 0, 0, 0.525],\n "730": [0, 0.61111, 0, 0, 0.525],\n "770": [0, 0.61111, 0, 0, 0.525],\n "771": [0, 0.61111, 0, 0, 0.525],\n "776": [0, 0.61111, 0, 0, 0.525],\n "915": [0, 0.61111, 0, 0, 0.525],\n "916": [0, 0.61111, 0, 0, 0.525],\n "920": [0, 0.61111, 0, 0, 0.525],\n "923": [0, 0.61111, 0, 0, 0.525],\n "926": [0, 0.61111, 0, 0, 0.525],\n "928": [0, 0.61111, 0, 0, 0.525],\n "931": [0, 0.61111, 0, 0, 0.525],\n "933": [0, 0.61111, 0, 0, 0.525],\n "934": [0, 0.61111, 0, 0, 0.525],\n "936": [0, 0.61111, 0, 0, 0.525],\n "937": [0, 0.61111, 0, 0, 0.525],\n "8216": [0, 0.61111, 0, 0, 0.525],\n "8217": [0, 0.61111, 0, 0, 0.525],\n "8242": [0, 0.61111, 0, 0, 0.525],\n "9251": [0.11111, 0.21944, 0, 0, 0.525]\n }\n});\n;// CONCATENATED MODULE: ./src/fontMetrics.js\n\n\n/**\n * This file contains metrics regarding fonts and individual symbols. The sigma\n * and xi variables, as well as the metricMap map contain data extracted from\n * TeX, TeX font metrics, and the TTF files. These data are then exposed via the\n * `metrics` variable and the getCharacterMetrics function.\n */\n// In TeX, there are actually three sets of dimensions, one for each of\n// textstyle (size index 5 and higher: >=9pt), scriptstyle (size index 3 and 4:\n// 7-8pt), and scriptscriptstyle (size index 1 and 2: 5-6pt). These are\n// provided in the arrays below, in that order.\n//\n// The font metrics are stored in fonts cmsy10, cmsy7, and cmsy5 respectively.\n// This was determined by running the following script:\n//\n// latex -interaction=nonstopmode \\\n// \'\\documentclass{article}\\usepackage{amsmath}\\begin{document}\' \\\n// \'$a$ \\expandafter\\show\\the\\textfont2\' \\\n// \'\\expandafter\\show\\the\\scriptfont2\' \\\n// \'\\expandafter\\show\\the\\scriptscriptfont2\' \\\n// \'\\stop\'\n//\n// The metrics themselves were retrieved using the following commands:\n//\n// tftopl cmsy10\n// tftopl cmsy7\n// tftopl cmsy5\n//\n// The output of each of these commands is quite lengthy. The only part we\n// care about is the FONTDIMEN section. Each value is measured in EMs.\nconst sigmasAndXis = {\n slant: [0.250, 0.250, 0.250],\n // sigma1\n space: [0.000, 0.000, 0.000],\n // sigma2\n stretch: [0.000, 0.000, 0.000],\n // sigma3\n shrink: [0.000, 0.000, 0.000],\n // sigma4\n xHeight: [0.431, 0.431, 0.431],\n // sigma5\n quad: [1.000, 1.171, 1.472],\n // sigma6\n extraSpace: [0.000, 0.000, 0.000],\n // sigma7\n num1: [0.677, 0.732, 0.925],\n // sigma8\n num2: [0.394, 0.384, 0.387],\n // sigma9\n num3: [0.444, 0.471, 0.504],\n // sigma10\n denom1: [0.686, 0.752, 1.025],\n // sigma11\n denom2: [0.345, 0.344, 0.532],\n // sigma12\n sup1: [0.413, 0.503, 0.504],\n // sigma13\n sup2: [0.363, 0.431, 0.404],\n // sigma14\n sup3: [0.289, 0.286, 0.294],\n // sigma15\n sub1: [0.150, 0.143, 0.200],\n // sigma16\n sub2: [0.247, 0.286, 0.400],\n // sigma17\n supDrop: [0.386, 0.353, 0.494],\n // sigma18\n subDrop: [0.050, 0.071, 0.100],\n // sigma19\n delim1: [2.390, 1.700, 1.980],\n // sigma20\n delim2: [1.010, 1.157, 1.420],\n // sigma21\n axisHeight: [0.250, 0.250, 0.250],\n // sigma22\n // These font metrics are extracted from TeX by using tftopl on cmex10.tfm;\n // they correspond to the font parameters of the extension fonts (family 3).\n // See the TeXbook, page 441. In AMSTeX, the extension fonts scale; to\n // match cmex7, we\'d use cmex7.tfm values for script and scriptscript\n // values.\n defaultRuleThickness: [0.04, 0.049, 0.049],\n // xi8; cmex7: 0.049\n bigOpSpacing1: [0.111, 0.111, 0.111],\n // xi9\n bigOpSpacing2: [0.166, 0.166, 0.166],\n // xi10\n bigOpSpacing3: [0.2, 0.2, 0.2],\n // xi11\n bigOpSpacing4: [0.6, 0.611, 0.611],\n // xi12; cmex7: 0.611\n bigOpSpacing5: [0.1, 0.143, 0.143],\n // xi13; cmex7: 0.143\n // The \\sqrt rule width is taken from the height of the surd character.\n // Since we use the same font at all sizes, this thickness doesn\'t scale.\n sqrtRuleThickness: [0.04, 0.04, 0.04],\n // This value determines how large a pt is, for metrics which are defined\n // in terms of pts.\n // This value is also used in katex.scss; if you change it make sure the\n // values match.\n ptPerEm: [10.0, 10.0, 10.0],\n // The space between adjacent `|` columns in an array definition. From\n // `\\showthe\\doublerulesep` in LaTeX. Equals 2.0 / ptPerEm.\n doubleRuleSep: [0.2, 0.2, 0.2],\n // The width of separator lines in {array} environments. From\n // `\\showthe\\arrayrulewidth` in LaTeX. Equals 0.4 / ptPerEm.\n arrayRuleWidth: [0.04, 0.04, 0.04],\n // Two values from LaTeX source2e:\n fboxsep: [0.3, 0.3, 0.3],\n // 3 pt / ptPerEm\n fboxrule: [0.04, 0.04, 0.04] // 0.4 pt / ptPerEm\n\n}; // This map contains a mapping from font name and character code to character\n// metrics, including height, depth, italic correction, and skew (kern from the\n// character to the corresponding \\skewchar)\n// This map is generated via `make metrics`. It should not be changed manually.\n\n // These are very rough approximations. We default to Times New Roman which\n// should have Latin-1 and Cyrillic characters, but may not depending on the\n// operating system. The metrics do not account for extra height from the\n// accents. In the case of Cyrillic characters which have both ascenders and\n// descenders we prefer approximations with ascenders, primarily to prevent\n// the fraction bar or root line from intersecting the glyph.\n// TODO(kevinb) allow union of multiple glyph metrics for better accuracy.\n\nconst extraCharacterMap = {\n // Latin-1\n \'Å\': \'A\',\n \'Ð\': \'D\',\n \'Þ\': \'o\',\n \'å\': \'a\',\n \'ð\': \'d\',\n \'þ\': \'o\',\n // Cyrillic\n \'А\': \'A\',\n \'Б\': \'B\',\n \'В\': \'B\',\n \'Г\': \'F\',\n \'Д\': \'A\',\n \'Е\': \'E\',\n \'Ж\': \'K\',\n \'З\': \'3\',\n \'И\': \'N\',\n \'Й\': \'N\',\n \'К\': \'K\',\n \'Л\': \'N\',\n \'М\': \'M\',\n \'Н\': \'H\',\n \'О\': \'O\',\n \'П\': \'N\',\n \'Р\': \'P\',\n \'С\': \'C\',\n \'Т\': \'T\',\n \'У\': \'y\',\n \'Ф\': \'O\',\n \'Х\': \'X\',\n \'Ц\': \'U\',\n \'Ч\': \'h\',\n \'Ш\': \'W\',\n \'Щ\': \'W\',\n \'Ъ\': \'B\',\n \'Ы\': \'X\',\n \'Ь\': \'B\',\n \'Э\': \'3\',\n \'Ю\': \'X\',\n \'Я\': \'R\',\n \'а\': \'a\',\n \'б\': \'b\',\n \'в\': \'a\',\n \'г\': \'r\',\n \'д\': \'y\',\n \'е\': \'e\',\n \'ж\': \'m\',\n \'з\': \'e\',\n \'и\': \'n\',\n \'й\': \'n\',\n \'к\': \'n\',\n \'л\': \'n\',\n \'м\': \'m\',\n \'н\': \'n\',\n \'о\': \'o\',\n \'п\': \'n\',\n \'р\': \'p\',\n \'с\': \'c\',\n \'т\': \'o\',\n \'у\': \'y\',\n \'ф\': \'b\',\n \'х\': \'x\',\n \'ц\': \'n\',\n \'ч\': \'n\',\n \'ш\': \'w\',\n \'щ\': \'w\',\n \'ъ\': \'a\',\n \'ы\': \'m\',\n \'ь\': \'a\',\n \'э\': \'e\',\n \'ю\': \'m\',\n \'я\': \'r\'\n};\n\n/**\n * This function adds new font metrics to default metricMap\n * It can also override existing metrics\n */\nfunction setFontMetrics(fontName, metrics) {\n fontMetricsData[fontName] = metrics;\n}\n/**\n * This function is a convenience function for looking up information in the\n * metricMap table. It takes a character as a string, and a font.\n *\n * Note: the `width` property may be undefined if fontMetricsData.js wasn\'t\n * built using `Make extended_metrics`.\n */\n\nfunction getCharacterMetrics(character, font, mode) {\n if (!fontMetricsData[font]) {\n throw new Error("Font metrics not found for font: " + font + ".");\n }\n\n let ch = character.charCodeAt(0);\n let metrics = fontMetricsData[font][ch];\n\n if (!metrics && character[0] in extraCharacterMap) {\n ch = extraCharacterMap[character[0]].charCodeAt(0);\n metrics = fontMetricsData[font][ch];\n }\n\n if (!metrics && mode === \'text\') {\n // We don\'t typically have font metrics for Asian scripts.\n // But since we support them in text mode, we need to return\n // some sort of metrics.\n // So if the character is in a script we support but we\n // don\'t have metrics for it, just use the metrics for\n // the Latin capital letter M. This is close enough because\n // we (currently) only care about the height of the glyph\n // not its width.\n if (supportedCodepoint(ch)) {\n metrics = fontMetricsData[font][77]; // 77 is the charcode for \'M\'\n }\n }\n\n if (metrics) {\n return {\n depth: metrics[0],\n height: metrics[1],\n italic: metrics[2],\n skew: metrics[3],\n width: metrics[4]\n };\n }\n}\nconst fontMetricsBySizeIndex = {};\n/**\n * Get the font metrics for a given size.\n */\n\nfunction getGlobalMetrics(size) {\n let sizeIndex;\n\n if (size >= 5) {\n sizeIndex = 0;\n } else if (size >= 3) {\n sizeIndex = 1;\n } else {\n sizeIndex = 2;\n }\n\n if (!fontMetricsBySizeIndex[sizeIndex]) {\n const metrics = fontMetricsBySizeIndex[sizeIndex] = {\n cssEmPerMu: sigmasAndXis.quad[sizeIndex] / 18\n };\n\n for (const key in sigmasAndXis) {\n if (sigmasAndXis.hasOwnProperty(key)) {\n metrics[key] = sigmasAndXis[key][sizeIndex];\n }\n }\n }\n\n return fontMetricsBySizeIndex[sizeIndex];\n}\n;// CONCATENATED MODULE: ./src/Options.js\n/**\n * This file contains information about the options that the Parser carries\n * around with it while parsing. Data is held in an `Options` object, and when\n * recursing, a new `Options` object can be created with the `.with*` and\n * `.reset` functions.\n */\n\nconst sizeStyleMap = [// Each element contains [textsize, scriptsize, scriptscriptsize].\n// The size mappings are taken from TeX with \\normalsize=10pt.\n[1, 1, 1], // size1: [5, 5, 5] \\tiny\n[2, 1, 1], // size2: [6, 5, 5]\n[3, 1, 1], // size3: [7, 5, 5] \\scriptsize\n[4, 2, 1], // size4: [8, 6, 5] \\footnotesize\n[5, 2, 1], // size5: [9, 6, 5] \\small\n[6, 3, 1], // size6: [10, 7, 5] \\normalsize\n[7, 4, 2], // size7: [12, 8, 6] \\large\n[8, 6, 3], // size8: [14.4, 10, 7] \\Large\n[9, 7, 6], // size9: [17.28, 12, 10] \\LARGE\n[10, 8, 7], // size10: [20.74, 14.4, 12] \\huge\n[11, 10, 9] // size11: [24.88, 20.74, 17.28] \\HUGE\n];\nconst sizeMultipliers = [// fontMetrics.js:getGlobalMetrics also uses size indexes, so if\n// you change size indexes, change that function.\n0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.2, 1.44, 1.728, 2.074, 2.488];\n\nconst sizeAtStyle = function (size, style) {\n return style.size < 2 ? size : sizeStyleMap[size - 1][style.size - 1];\n}; // In these types, "" (empty string) means "no change".\n\n\n/**\n * This is the main options class. It contains the current style, size, color,\n * and font.\n *\n * Options objects should not be modified. To create a new Options with\n * different properties, call a `.having*` method.\n */\nclass Options {\n // A font family applies to a group of fonts (i.e. SansSerif), while a font\n // represents a specific font (i.e. SansSerif Bold).\n // See: https://tex.stackexchange.com/questions/22350/difference-between-textrm-and-mathrm\n\n /**\n * The base size index.\n */\n constructor(data) {\n this.style = void 0;\n this.color = void 0;\n this.size = void 0;\n this.textSize = void 0;\n this.phantom = void 0;\n this.font = void 0;\n this.fontFamily = void 0;\n this.fontWeight = void 0;\n this.fontShape = void 0;\n this.sizeMultiplier = void 0;\n this.maxSize = void 0;\n this.minRuleThickness = void 0;\n this._fontMetrics = void 0;\n this.style = data.style;\n this.color = data.color;\n this.size = data.size || Options.BASESIZE;\n this.textSize = data.textSize || this.size;\n this.phantom = !!data.phantom;\n this.font = data.font || "";\n this.fontFamily = data.fontFamily || "";\n this.fontWeight = data.fontWeight || \'\';\n this.fontShape = data.fontShape || \'\';\n this.sizeMultiplier = sizeMultipliers[this.size - 1];\n this.maxSize = data.maxSize;\n this.minRuleThickness = data.minRuleThickness;\n this._fontMetrics = undefined;\n }\n /**\n * Returns a new options object with the same properties as "this". Properties\n * from "extension" will be copied to the new options object.\n */\n\n\n extend(extension) {\n const data = {\n style: this.style,\n size: this.size,\n textSize: this.textSize,\n color: this.color,\n phantom: this.phantom,\n font: this.font,\n fontFamily: this.fontFamily,\n fontWeight: this.fontWeight,\n fontShape: this.fontShape,\n maxSize: this.maxSize,\n minRuleThickness: this.minRuleThickness\n };\n\n for (const key in extension) {\n if (extension.hasOwnProperty(key)) {\n data[key] = extension[key];\n }\n }\n\n return new Options(data);\n }\n /**\n * Return an options object with the given style. If `this.style === style`,\n * returns `this`.\n */\n\n\n havingStyle(style) {\n if (this.style === style) {\n return this;\n } else {\n return this.extend({\n style: style,\n size: sizeAtStyle(this.textSize, style)\n });\n }\n }\n /**\n * Return an options object with a cramped version of the current style. If\n * the current style is cramped, returns `this`.\n */\n\n\n havingCrampedStyle() {\n return this.havingStyle(this.style.cramp());\n }\n /**\n * Return an options object with the given size and in at least `\\textstyle`.\n * Returns `this` if appropriate.\n */\n\n\n havingSize(size) {\n if (this.size === size && this.textSize === size) {\n return this;\n } else {\n return this.extend({\n style: this.style.text(),\n size: size,\n textSize: size,\n sizeMultiplier: sizeMultipliers[size - 1]\n });\n }\n }\n /**\n * Like `this.havingSize(BASESIZE).havingStyle(style)`. If `style` is omitted,\n * changes to at least `\\textstyle`.\n */\n\n\n havingBaseStyle(style) {\n style = style || this.style.text();\n const wantSize = sizeAtStyle(Options.BASESIZE, style);\n\n if (this.size === wantSize && this.textSize === Options.BASESIZE && this.style === style) {\n return this;\n } else {\n return this.extend({\n style: style,\n size: wantSize\n });\n }\n }\n /**\n * Remove the effect of sizing changes such as \\Huge.\n * Keep the effect of the current style, such as \\scriptstyle.\n */\n\n\n havingBaseSizing() {\n let size;\n\n switch (this.style.id) {\n case 4:\n case 5:\n size = 3; // normalsize in scriptstyle\n\n break;\n\n case 6:\n case 7:\n size = 1; // normalsize in scriptscriptstyle\n\n break;\n\n default:\n size = 6;\n // normalsize in textstyle or displaystyle\n }\n\n return this.extend({\n style: this.style.text(),\n size: size\n });\n }\n /**\n * Create a new options object with the given color.\n */\n\n\n withColor(color) {\n return this.extend({\n color: color\n });\n }\n /**\n * Create a new options object with "phantom" set to true.\n */\n\n\n withPhantom() {\n return this.extend({\n phantom: true\n });\n }\n /**\n * Creates a new options object with the given math font or old text font.\n * @type {[type]}\n */\n\n\n withFont(font) {\n return this.extend({\n font\n });\n }\n /**\n * Create a new options objects with the given fontFamily.\n */\n\n\n withTextFontFamily(fontFamily) {\n return this.extend({\n fontFamily,\n font: ""\n });\n }\n /**\n * Creates a new options object with the given font weight\n */\n\n\n withTextFontWeight(fontWeight) {\n return this.extend({\n fontWeight,\n font: ""\n });\n }\n /**\n * Creates a new options object with the given font weight\n */\n\n\n withTextFontShape(fontShape) {\n return this.extend({\n fontShape,\n font: ""\n });\n }\n /**\n * Return the CSS sizing classes required to switch from enclosing options\n * `oldOptions` to `this`. Returns an array of classes.\n */\n\n\n sizingClasses(oldOptions) {\n if (oldOptions.size !== this.size) {\n return ["sizing", "reset-size" + oldOptions.size, "size" + this.size];\n } else {\n return [];\n }\n }\n /**\n * Return the CSS sizing classes required to switch to the base size. Like\n * `this.havingSize(BASESIZE).sizingClasses(this)`.\n */\n\n\n baseSizingClasses() {\n if (this.size !== Options.BASESIZE) {\n return ["sizing", "reset-size" + this.size, "size" + Options.BASESIZE];\n } else {\n return [];\n }\n }\n /**\n * Return the font metrics for this size.\n */\n\n\n fontMetrics() {\n if (!this._fontMetrics) {\n this._fontMetrics = getGlobalMetrics(this.size);\n }\n\n return this._fontMetrics;\n }\n /**\n * Gets the CSS color of the current options object\n */\n\n\n getColor() {\n if (this.phantom) {\n return "transparent";\n } else {\n return this.color;\n }\n }\n\n}\n\nOptions.BASESIZE = 6;\n/* harmony default export */ var src_Options = (Options);\n;// CONCATENATED MODULE: ./src/units.js\n/**\n * This file does conversion between units. In particular, it provides\n * calculateSize to convert other units into ems.\n */\n\n // This table gives the number of TeX pts in one of each *absolute* TeX unit.\n// Thus, multiplying a length by this number converts the length from units\n// into pts. Dividing the result by ptPerEm gives the number of ems\n// *assuming* a font size of ptPerEm (normal size, normal style).\n\nconst ptPerUnit = {\n // https://en.wikibooks.org/wiki/LaTeX/Lengths and\n // https://tex.stackexchange.com/a/8263\n "pt": 1,\n // TeX point\n "mm": 7227 / 2540,\n // millimeter\n "cm": 7227 / 254,\n // centimeter\n "in": 72.27,\n // inch\n "bp": 803 / 800,\n // big (PostScript) points\n "pc": 12,\n // pica\n "dd": 1238 / 1157,\n // didot\n "cc": 14856 / 1157,\n // cicero (12 didot)\n "nd": 685 / 642,\n // new didot\n "nc": 1370 / 107,\n // new cicero (12 new didot)\n "sp": 1 / 65536,\n // scaled point (TeX\'s internal smallest unit)\n // https://tex.stackexchange.com/a/41371\n "px": 803 / 800 // \\pdfpxdimen defaults to 1 bp in pdfTeX and LuaTeX\n\n}; // Dictionary of relative units, for fast validity testing.\n\nconst relativeUnit = {\n "ex": true,\n "em": true,\n "mu": true\n};\n\n/**\n * Determine whether the specified unit (either a string defining the unit\n * or a "size" parse node containing a unit field) is valid.\n */\nconst validUnit = function (unit) {\n if (typeof unit !== "string") {\n unit = unit.unit;\n }\n\n return unit in ptPerUnit || unit in relativeUnit || unit === "ex";\n};\n/*\n * Convert a "size" parse node (with numeric "number" and string "unit" fields,\n * as parsed by functions.js argType "size") into a CSS em value for the\n * current style/scale. `options` gives the current options.\n */\n\nconst calculateSize = function (sizeValue, options) {\n let scale;\n\n if (sizeValue.unit in ptPerUnit) {\n // Absolute units\n scale = ptPerUnit[sizeValue.unit] // Convert unit to pt\n / options.fontMetrics().ptPerEm // Convert pt to CSS em\n / options.sizeMultiplier; // Unscale to make absolute units\n } else if (sizeValue.unit === "mu") {\n // `mu` units scale with scriptstyle/scriptscriptstyle.\n scale = options.fontMetrics().cssEmPerMu;\n } else {\n // Other relative units always refer to the *textstyle* font\n // in the current size.\n let unitOptions;\n\n if (options.style.isTight()) {\n // isTight() means current style is script/scriptscript.\n unitOptions = options.havingStyle(options.style.text());\n } else {\n unitOptions = options;\n } // TODO: In TeX these units are relative to the quad of the current\n // *text* font, e.g. cmr10. KaTeX instead uses values from the\n // comparably-sized *Computer Modern symbol* font. At 10pt, these\n // match. At 7pt and 5pt, they differ: cmr7=1.138894, cmsy7=1.170641;\n // cmr5=1.361133, cmsy5=1.472241. Consider $\\scriptsize a\\kern1emb$.\n // TeX \\showlists shows a kern of 1.13889 * fontsize;\n // KaTeX shows a kern of 1.171 * fontsize.\n\n\n if (sizeValue.unit === "ex") {\n scale = unitOptions.fontMetrics().xHeight;\n } else if (sizeValue.unit === "em") {\n scale = unitOptions.fontMetrics().quad;\n } else {\n throw new src_ParseError("Invalid unit: \'" + sizeValue.unit + "\'");\n }\n\n if (unitOptions !== options) {\n scale *= unitOptions.sizeMultiplier / options.sizeMultiplier;\n }\n }\n\n return Math.min(sizeValue.number * scale, options.maxSize);\n};\n/**\n * Round `n` to 4 decimal places, or to the nearest 1/10,000th em. See\n * https://github.com/KaTeX/KaTeX/pull/2460.\n */\n\nconst makeEm = function (n) {\n return +n.toFixed(4) + "em";\n};\n;// CONCATENATED MODULE: ./src/domTree.js\n/**\n * These objects store the data about the DOM nodes we create, as well as some\n * extra data. They can then be transformed into real DOM nodes with the\n * `toNode` function or HTML markup using `toMarkup`. They are useful for both\n * storing extra properties on the nodes, as well as providing a way to easily\n * work with the DOM.\n *\n * Similar functions for working with MathML nodes exist in mathMLTree.js.\n *\n * TODO: refactor `span` and `anchor` into common superclass when\n * target environments support class inheritance\n */\n\n\n\n\n\n\n\n/**\n * Create an HTML className based on a list of classes. In addition to joining\n * with spaces, we also remove empty classes.\n */\nconst createClass = function (classes) {\n return classes.filter(cls => cls).join(" ");\n};\n\nconst initNode = function (classes, options, style) {\n this.classes = classes || [];\n this.attributes = {};\n this.height = 0;\n this.depth = 0;\n this.maxFontSize = 0;\n this.style = style || {};\n\n if (options) {\n if (options.style.isTight()) {\n this.classes.push("mtight");\n }\n\n const color = options.getColor();\n\n if (color) {\n this.style.color = color;\n }\n }\n};\n/**\n * Convert into an HTML node\n */\n\n\nconst toNode = function (tagName) {\n const node = document.createElement(tagName); // Apply the class\n\n node.className = createClass(this.classes); // Apply inline styles\n\n for (const style in this.style) {\n if (this.style.hasOwnProperty(style)) {\n // $FlowFixMe Flow doesn\'t seem to understand span.style\'s type.\n node.style[style] = this.style[style];\n }\n } // Apply attributes\n\n\n for (const attr in this.attributes) {\n if (this.attributes.hasOwnProperty(attr)) {\n node.setAttribute(attr, this.attributes[attr]);\n }\n } // Append the children, also as HTML nodes\n\n\n for (let i = 0; i < this.children.length; i++) {\n node.appendChild(this.children[i].toNode());\n }\n\n return node;\n};\n/**\n * https://w3c.github.io/html-reference/syntax.html#syntax-attributes\n *\n * > Attribute Names must consist of one or more characters\n * other than the space characters, U+0000 NULL,\n * \'"\', "\'", ">", "/", "=", the control characters,\n * and any characters that are not defined by Unicode.\n */\n\n\nconst invalidAttributeNameRegex = /[\\s"\'>/=\\x00-\\x1f]/;\n/**\n * Convert into an HTML markup string\n */\n\nconst toMarkup = function (tagName) {\n let markup = "<" + tagName; // Add the class\n\n if (this.classes.length) {\n markup += " class=\\"" + utils.escape(createClass(this.classes)) + "\\"";\n }\n\n let styles = ""; // Add the styles, after hyphenation\n\n for (const style in this.style) {\n if (this.style.hasOwnProperty(style)) {\n styles += utils.hyphenate(style) + ":" + this.style[style] + ";";\n }\n }\n\n if (styles) {\n markup += " style=\\"" + utils.escape(styles) + "\\"";\n } // Add the attributes\n\n\n for (const attr in this.attributes) {\n if (this.attributes.hasOwnProperty(attr)) {\n if (invalidAttributeNameRegex.test(attr)) {\n throw new src_ParseError("Invalid attribute name \'" + attr + "\'");\n }\n\n markup += " " + attr + "=\\"" + utils.escape(this.attributes[attr]) + "\\"";\n }\n }\n\n markup += ">"; // Add the markup of the children, also as markup\n\n for (let i = 0; i < this.children.length; i++) {\n markup += this.children[i].toMarkup();\n }\n\n markup += "";\n return markup;\n}; // Making the type below exact with all optional fields doesn\'t work due to\n// - https://github.com/facebook/flow/issues/4582\n// - https://github.com/facebook/flow/issues/5688\n// However, since *all* fields are optional, $Shape<> works as suggested in 5688\n// above.\n// This type does not include all CSS properties. Additional properties should\n// be added as needed.\n\n\n/**\n * This node represents a span node, with a className, a list of children, and\n * an inline style. It also contains information about its height, depth, and\n * maxFontSize.\n *\n * Represents two types with different uses: SvgSpan to wrap an SVG and DomSpan\n * otherwise. This typesafety is important when HTML builders access a span\'s\n * children.\n */\nclass Span {\n constructor(classes, children, options, style) {\n this.children = void 0;\n this.attributes = void 0;\n this.classes = void 0;\n this.height = void 0;\n this.depth = void 0;\n this.width = void 0;\n this.maxFontSize = void 0;\n this.style = void 0;\n initNode.call(this, classes, options, style);\n this.children = children || [];\n }\n /**\n * Sets an arbitrary attribute on the span. Warning: use this wisely. Not\n * all browsers support attributes the same, and having too many custom\n * attributes is probably bad.\n */\n\n\n setAttribute(attribute, value) {\n this.attributes[attribute] = value;\n }\n\n hasClass(className) {\n return utils.contains(this.classes, className);\n }\n\n toNode() {\n return toNode.call(this, "span");\n }\n\n toMarkup() {\n return toMarkup.call(this, "span");\n }\n\n}\n/**\n * This node represents an anchor () element with a hyperlink. See `span`\n * for further details.\n */\n\nclass Anchor {\n constructor(href, classes, children, options) {\n this.children = void 0;\n this.attributes = void 0;\n this.classes = void 0;\n this.height = void 0;\n this.depth = void 0;\n this.maxFontSize = void 0;\n this.style = void 0;\n initNode.call(this, classes, options);\n this.children = children || [];\n this.setAttribute(\'href\', href);\n }\n\n setAttribute(attribute, value) {\n this.attributes[attribute] = value;\n }\n\n hasClass(className) {\n return utils.contains(this.classes, className);\n }\n\n toNode() {\n return toNode.call(this, "a");\n }\n\n toMarkup() {\n return toMarkup.call(this, "a");\n }\n\n}\n/**\n * This node represents an image embed () element.\n */\n\nclass Img {\n constructor(src, alt, style) {\n this.src = void 0;\n this.alt = void 0;\n this.classes = void 0;\n this.height = void 0;\n this.depth = void 0;\n this.maxFontSize = void 0;\n this.style = void 0;\n this.alt = alt;\n this.src = src;\n this.classes = ["mord"];\n this.style = style;\n }\n\n hasClass(className) {\n return utils.contains(this.classes, className);\n }\n\n toNode() {\n const node = document.createElement("img");\n node.src = this.src;\n node.alt = this.alt;\n node.className = "mord"; // Apply inline styles\n\n for (const style in this.style) {\n if (this.style.hasOwnProperty(style)) {\n // $FlowFixMe\n node.style[style] = this.style[style];\n }\n }\n\n return node;\n }\n\n toMarkup() {\n let markup = "\\"" 0) {\n span = document.createElement("span");\n span.style.marginRight = makeEm(this.italic);\n }\n\n if (this.classes.length > 0) {\n span = span || document.createElement("span");\n span.className = createClass(this.classes);\n }\n\n for (const style in this.style) {\n if (this.style.hasOwnProperty(style)) {\n span = span || document.createElement("span"); // $FlowFixMe Flow doesn\'t seem to understand span.style\'s type.\n\n span.style[style] = this.style[style];\n }\n }\n\n if (span) {\n span.appendChild(node);\n return span;\n } else {\n return node;\n }\n }\n /**\n * Creates markup for a symbol node.\n */\n\n\n toMarkup() {\n // TODO(alpert): More duplication than I\'d like from\n // span.prototype.toMarkup and symbolNode.prototype.toNode...\n let needsSpan = false;\n let markup = " 0) {\n styles += "margin-right:" + this.italic + "em;";\n }\n\n for (const style in this.style) {\n if (this.style.hasOwnProperty(style)) {\n styles += utils.hyphenate(style) + ":" + this.style[style] + ";";\n }\n }\n\n if (styles) {\n needsSpan = true;\n markup += " style=\\"" + utils.escape(styles) + "\\"";\n }\n\n const escaped = utils.escape(this.text);\n\n if (needsSpan) {\n markup += ">";\n markup += escaped;\n markup += "";\n return markup;\n } else {\n return escaped;\n }\n }\n\n}\n/**\n * SVG nodes are used to render stretchy wide elements.\n */\n\nclass SvgNode {\n constructor(children, attributes) {\n this.children = void 0;\n this.attributes = void 0;\n this.children = children || [];\n this.attributes = attributes || {};\n }\n\n toNode() {\n const svgNS = "http://www.w3.org/2000/svg";\n const node = document.createElementNS(svgNS, "svg"); // Apply attributes\n\n for (const attr in this.attributes) {\n if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) {\n node.setAttribute(attr, this.attributes[attr]);\n }\n }\n\n for (let i = 0; i < this.children.length; i++) {\n node.appendChild(this.children[i].toNode());\n }\n\n return node;\n }\n\n toMarkup() {\n let markup = "";\n } else {\n return "";\n }\n }\n\n}\nclass LineNode {\n constructor(attributes) {\n this.attributes = void 0;\n this.attributes = attributes || {};\n }\n\n toNode() {\n const svgNS = "http://www.w3.org/2000/svg";\n const node = document.createElementNS(svgNS, "line"); // Apply attributes\n\n for (const attr in this.attributes) {\n if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) {\n node.setAttribute(attr, this.attributes[attr]);\n }\n }\n\n return node;\n }\n\n toMarkup() {\n let markup = " but got " + String(group) + ".");\n }\n}\n;// CONCATENATED MODULE: ./src/symbols.js\n/**\n * This file holds a list of all no-argument functions and single-character\n * symbols (like \'a\' or \';\').\n *\n * For each of the symbols, there are three properties they can have:\n * - font (required): the font to be used for this symbol. Either "main" (the\n normal font), or "ams" (the ams fonts).\n * - group (required): the ParseNode group type the symbol should have (i.e.\n "textord", "mathord", etc).\n See https://github.com/KaTeX/KaTeX/wiki/Examining-TeX#group-types\n * - replace: the character that this symbol or function should be\n * replaced with (i.e. "\\phi" has a replace value of "\\u03d5", the phi\n * character in the main font).\n *\n * The outermost map in the table indicates what mode the symbols should be\n * accepted in (e.g. "math" or "text").\n */\n// Some of these have a "-token" suffix since these are also used as `ParseNode`\n// types for raw text tokens, and we want to avoid conflicts with higher-level\n// `ParseNode` types. These `ParseNode`s are constructed within `Parser` by\n// looking up the `symbols` map.\nconst ATOMS = {\n "bin": 1,\n "close": 1,\n "inner": 1,\n "open": 1,\n "punct": 1,\n "rel": 1\n};\nconst NON_ATOMS = {\n "accent-token": 1,\n "mathord": 1,\n "op-token": 1,\n "spacing": 1,\n "textord": 1\n};\nconst symbols = {\n "math": {},\n "text": {}\n};\n/* harmony default export */ var src_symbols = (symbols);\n/** `acceptUnicodeChar = true` is only applicable if `replace` is set. */\n\nfunction defineSymbol(mode, font, group, replace, name, acceptUnicodeChar) {\n symbols[mode][name] = {\n font,\n group,\n replace\n };\n\n if (acceptUnicodeChar && replace) {\n symbols[mode][replace] = symbols[mode][name];\n }\n} // Some abbreviations for commonly used strings.\n// This helps minify the code, and also spotting typos using jshint.\n// modes:\n\nconst math = "math";\nconst symbols_text = "text"; // fonts:\n\nconst main = "main";\nconst ams = "ams"; // groups:\n\nconst accent = "accent-token";\nconst bin = "bin";\nconst symbols_close = "close";\nconst inner = "inner";\nconst mathord = "mathord";\nconst op = "op-token";\nconst symbols_open = "open";\nconst punct = "punct";\nconst rel = "rel";\nconst spacing = "spacing";\nconst textord = "textord"; // Now comes the symbol table\n// Relation Symbols\n\ndefineSymbol(math, main, rel, "\\u2261", "\\\\equiv", true);\ndefineSymbol(math, main, rel, "\\u227a", "\\\\prec", true);\ndefineSymbol(math, main, rel, "\\u227b", "\\\\succ", true);\ndefineSymbol(math, main, rel, "\\u223c", "\\\\sim", true);\ndefineSymbol(math, main, rel, "\\u22a5", "\\\\perp");\ndefineSymbol(math, main, rel, "\\u2aaf", "\\\\preceq", true);\ndefineSymbol(math, main, rel, "\\u2ab0", "\\\\succeq", true);\ndefineSymbol(math, main, rel, "\\u2243", "\\\\simeq", true);\ndefineSymbol(math, main, rel, "\\u2223", "\\\\mid", true);\ndefineSymbol(math, main, rel, "\\u226a", "\\\\ll", true);\ndefineSymbol(math, main, rel, "\\u226b", "\\\\gg", true);\ndefineSymbol(math, main, rel, "\\u224d", "\\\\asymp", true);\ndefineSymbol(math, main, rel, "\\u2225", "\\\\parallel");\ndefineSymbol(math, main, rel, "\\u22c8", "\\\\bowtie", true);\ndefineSymbol(math, main, rel, "\\u2323", "\\\\smile", true);\ndefineSymbol(math, main, rel, "\\u2291", "\\\\sqsubseteq", true);\ndefineSymbol(math, main, rel, "\\u2292", "\\\\sqsupseteq", true);\ndefineSymbol(math, main, rel, "\\u2250", "\\\\doteq", true);\ndefineSymbol(math, main, rel, "\\u2322", "\\\\frown", true);\ndefineSymbol(math, main, rel, "\\u220b", "\\\\ni", true);\ndefineSymbol(math, main, rel, "\\u221d", "\\\\propto", true);\ndefineSymbol(math, main, rel, "\\u22a2", "\\\\vdash", true);\ndefineSymbol(math, main, rel, "\\u22a3", "\\\\dashv", true);\ndefineSymbol(math, main, rel, "\\u220b", "\\\\owns"); // Punctuation\n\ndefineSymbol(math, main, punct, "\\u002e", "\\\\ldotp");\ndefineSymbol(math, main, punct, "\\u22c5", "\\\\cdotp"); // Misc Symbols\n\ndefineSymbol(math, main, textord, "\\u0023", "\\\\#");\ndefineSymbol(symbols_text, main, textord, "\\u0023", "\\\\#");\ndefineSymbol(math, main, textord, "\\u0026", "\\\\&");\ndefineSymbol(symbols_text, main, textord, "\\u0026", "\\\\&");\ndefineSymbol(math, main, textord, "\\u2135", "\\\\aleph", true);\ndefineSymbol(math, main, textord, "\\u2200", "\\\\forall", true);\ndefineSymbol(math, main, textord, "\\u210f", "\\\\hbar", true);\ndefineSymbol(math, main, textord, "\\u2203", "\\\\exists", true);\ndefineSymbol(math, main, textord, "\\u2207", "\\\\nabla", true);\ndefineSymbol(math, main, textord, "\\u266d", "\\\\flat", true);\ndefineSymbol(math, main, textord, "\\u2113", "\\\\ell", true);\ndefineSymbol(math, main, textord, "\\u266e", "\\\\natural", true);\ndefineSymbol(math, main, textord, "\\u2663", "\\\\clubsuit", true);\ndefineSymbol(math, main, textord, "\\u2118", "\\\\wp", true);\ndefineSymbol(math, main, textord, "\\u266f", "\\\\sharp", true);\ndefineSymbol(math, main, textord, "\\u2662", "\\\\diamondsuit", true);\ndefineSymbol(math, main, textord, "\\u211c", "\\\\Re", true);\ndefineSymbol(math, main, textord, "\\u2661", "\\\\heartsuit", true);\ndefineSymbol(math, main, textord, "\\u2111", "\\\\Im", true);\ndefineSymbol(math, main, textord, "\\u2660", "\\\\spadesuit", true);\ndefineSymbol(math, main, textord, "\\u00a7", "\\\\S", true);\ndefineSymbol(symbols_text, main, textord, "\\u00a7", "\\\\S");\ndefineSymbol(math, main, textord, "\\u00b6", "\\\\P", true);\ndefineSymbol(symbols_text, main, textord, "\\u00b6", "\\\\P"); // Math and Text\n\ndefineSymbol(math, main, textord, "\\u2020", "\\\\dag");\ndefineSymbol(symbols_text, main, textord, "\\u2020", "\\\\dag");\ndefineSymbol(symbols_text, main, textord, "\\u2020", "\\\\textdagger");\ndefineSymbol(math, main, textord, "\\u2021", "\\\\ddag");\ndefineSymbol(symbols_text, main, textord, "\\u2021", "\\\\ddag");\ndefineSymbol(symbols_text, main, textord, "\\u2021", "\\\\textdaggerdbl"); // Large Delimiters\n\ndefineSymbol(math, main, symbols_close, "\\u23b1", "\\\\rmoustache", true);\ndefineSymbol(math, main, symbols_open, "\\u23b0", "\\\\lmoustache", true);\ndefineSymbol(math, main, symbols_close, "\\u27ef", "\\\\rgroup", true);\ndefineSymbol(math, main, symbols_open, "\\u27ee", "\\\\lgroup", true); // Binary Operators\n\ndefineSymbol(math, main, bin, "\\u2213", "\\\\mp", true);\ndefineSymbol(math, main, bin, "\\u2296", "\\\\ominus", true);\ndefineSymbol(math, main, bin, "\\u228e", "\\\\uplus", true);\ndefineSymbol(math, main, bin, "\\u2293", "\\\\sqcap", true);\ndefineSymbol(math, main, bin, "\\u2217", "\\\\ast");\ndefineSymbol(math, main, bin, "\\u2294", "\\\\sqcup", true);\ndefineSymbol(math, main, bin, "\\u25ef", "\\\\bigcirc", true);\ndefineSymbol(math, main, bin, "\\u2219", "\\\\bullet", true);\ndefineSymbol(math, main, bin, "\\u2021", "\\\\ddagger");\ndefineSymbol(math, main, bin, "\\u2240", "\\\\wr", true);\ndefineSymbol(math, main, bin, "\\u2a3f", "\\\\amalg");\ndefineSymbol(math, main, bin, "\\u0026", "\\\\And"); // from amsmath\n// Arrow Symbols\n\ndefineSymbol(math, main, rel, "\\u27f5", "\\\\longleftarrow", true);\ndefineSymbol(math, main, rel, "\\u21d0", "\\\\Leftarrow", true);\ndefineSymbol(math, main, rel, "\\u27f8", "\\\\Longleftarrow", true);\ndefineSymbol(math, main, rel, "\\u27f6", "\\\\longrightarrow", true);\ndefineSymbol(math, main, rel, "\\u21d2", "\\\\Rightarrow", true);\ndefineSymbol(math, main, rel, "\\u27f9", "\\\\Longrightarrow", true);\ndefineSymbol(math, main, rel, "\\u2194", "\\\\leftrightarrow", true);\ndefineSymbol(math, main, rel, "\\u27f7", "\\\\longleftrightarrow", true);\ndefineSymbol(math, main, rel, "\\u21d4", "\\\\Leftrightarrow", true);\ndefineSymbol(math, main, rel, "\\u27fa", "\\\\Longleftrightarrow", true);\ndefineSymbol(math, main, rel, "\\u21a6", "\\\\mapsto", true);\ndefineSymbol(math, main, rel, "\\u27fc", "\\\\longmapsto", true);\ndefineSymbol(math, main, rel, "\\u2197", "\\\\nearrow", true);\ndefineSymbol(math, main, rel, "\\u21a9", "\\\\hookleftarrow", true);\ndefineSymbol(math, main, rel, "\\u21aa", "\\\\hookrightarrow", true);\ndefineSymbol(math, main, rel, "\\u2198", "\\\\searrow", true);\ndefineSymbol(math, main, rel, "\\u21bc", "\\\\leftharpoonup", true);\ndefineSymbol(math, main, rel, "\\u21c0", "\\\\rightharpoonup", true);\ndefineSymbol(math, main, rel, "\\u2199", "\\\\swarrow", true);\ndefineSymbol(math, main, rel, "\\u21bd", "\\\\leftharpoondown", true);\ndefineSymbol(math, main, rel, "\\u21c1", "\\\\rightharpoondown", true);\ndefineSymbol(math, main, rel, "\\u2196", "\\\\nwarrow", true);\ndefineSymbol(math, main, rel, "\\u21cc", "\\\\rightleftharpoons", true); // AMS Negated Binary Relations\n\ndefineSymbol(math, ams, rel, "\\u226e", "\\\\nless", true); // Symbol names preceded by "@" each have a corresponding macro.\n\ndefineSymbol(math, ams, rel, "\\ue010", "\\\\@nleqslant");\ndefineSymbol(math, ams, rel, "\\ue011", "\\\\@nleqq");\ndefineSymbol(math, ams, rel, "\\u2a87", "\\\\lneq", true);\ndefineSymbol(math, ams, rel, "\\u2268", "\\\\lneqq", true);\ndefineSymbol(math, ams, rel, "\\ue00c", "\\\\@lvertneqq");\ndefineSymbol(math, ams, rel, "\\u22e6", "\\\\lnsim", true);\ndefineSymbol(math, ams, rel, "\\u2a89", "\\\\lnapprox", true);\ndefineSymbol(math, ams, rel, "\\u2280", "\\\\nprec", true); // unicode-math maps \\u22e0 to \\npreccurlyeq. We\'ll use the AMS synonym.\n\ndefineSymbol(math, ams, rel, "\\u22e0", "\\\\npreceq", true);\ndefineSymbol(math, ams, rel, "\\u22e8", "\\\\precnsim", true);\ndefineSymbol(math, ams, rel, "\\u2ab9", "\\\\precnapprox", true);\ndefineSymbol(math, ams, rel, "\\u2241", "\\\\nsim", true);\ndefineSymbol(math, ams, rel, "\\ue006", "\\\\@nshortmid");\ndefineSymbol(math, ams, rel, "\\u2224", "\\\\nmid", true);\ndefineSymbol(math, ams, rel, "\\u22ac", "\\\\nvdash", true);\ndefineSymbol(math, ams, rel, "\\u22ad", "\\\\nvDash", true);\ndefineSymbol(math, ams, rel, "\\u22ea", "\\\\ntriangleleft");\ndefineSymbol(math, ams, rel, "\\u22ec", "\\\\ntrianglelefteq", true);\ndefineSymbol(math, ams, rel, "\\u228a", "\\\\subsetneq", true);\ndefineSymbol(math, ams, rel, "\\ue01a", "\\\\@varsubsetneq");\ndefineSymbol(math, ams, rel, "\\u2acb", "\\\\subsetneqq", true);\ndefineSymbol(math, ams, rel, "\\ue017", "\\\\@varsubsetneqq");\ndefineSymbol(math, ams, rel, "\\u226f", "\\\\ngtr", true);\ndefineSymbol(math, ams, rel, "\\ue00f", "\\\\@ngeqslant");\ndefineSymbol(math, ams, rel, "\\ue00e", "\\\\@ngeqq");\ndefineSymbol(math, ams, rel, "\\u2a88", "\\\\gneq", true);\ndefineSymbol(math, ams, rel, "\\u2269", "\\\\gneqq", true);\ndefineSymbol(math, ams, rel, "\\ue00d", "\\\\@gvertneqq");\ndefineSymbol(math, ams, rel, "\\u22e7", "\\\\gnsim", true);\ndefineSymbol(math, ams, rel, "\\u2a8a", "\\\\gnapprox", true);\ndefineSymbol(math, ams, rel, "\\u2281", "\\\\nsucc", true); // unicode-math maps \\u22e1 to \\nsucccurlyeq. We\'ll use the AMS synonym.\n\ndefineSymbol(math, ams, rel, "\\u22e1", "\\\\nsucceq", true);\ndefineSymbol(math, ams, rel, "\\u22e9", "\\\\succnsim", true);\ndefineSymbol(math, ams, rel, "\\u2aba", "\\\\succnapprox", true); // unicode-math maps \\u2246 to \\simneqq. We\'ll use the AMS synonym.\n\ndefineSymbol(math, ams, rel, "\\u2246", "\\\\ncong", true);\ndefineSymbol(math, ams, rel, "\\ue007", "\\\\@nshortparallel");\ndefineSymbol(math, ams, rel, "\\u2226", "\\\\nparallel", true);\ndefineSymbol(math, ams, rel, "\\u22af", "\\\\nVDash", true);\ndefineSymbol(math, ams, rel, "\\u22eb", "\\\\ntriangleright");\ndefineSymbol(math, ams, rel, "\\u22ed", "\\\\ntrianglerighteq", true);\ndefineSymbol(math, ams, rel, "\\ue018", "\\\\@nsupseteqq");\ndefineSymbol(math, ams, rel, "\\u228b", "\\\\supsetneq", true);\ndefineSymbol(math, ams, rel, "\\ue01b", "\\\\@varsupsetneq");\ndefineSymbol(math, ams, rel, "\\u2acc", "\\\\supsetneqq", true);\ndefineSymbol(math, ams, rel, "\\ue019", "\\\\@varsupsetneqq");\ndefineSymbol(math, ams, rel, "\\u22ae", "\\\\nVdash", true);\ndefineSymbol(math, ams, rel, "\\u2ab5", "\\\\precneqq", true);\ndefineSymbol(math, ams, rel, "\\u2ab6", "\\\\succneqq", true);\ndefineSymbol(math, ams, rel, "\\ue016", "\\\\@nsubseteqq");\ndefineSymbol(math, ams, bin, "\\u22b4", "\\\\unlhd");\ndefineSymbol(math, ams, bin, "\\u22b5", "\\\\unrhd"); // AMS Negated Arrows\n\ndefineSymbol(math, ams, rel, "\\u219a", "\\\\nleftarrow", true);\ndefineSymbol(math, ams, rel, "\\u219b", "\\\\nrightarrow", true);\ndefineSymbol(math, ams, rel, "\\u21cd", "\\\\nLeftarrow", true);\ndefineSymbol(math, ams, rel, "\\u21cf", "\\\\nRightarrow", true);\ndefineSymbol(math, ams, rel, "\\u21ae", "\\\\nleftrightarrow", true);\ndefineSymbol(math, ams, rel, "\\u21ce", "\\\\nLeftrightarrow", true); // AMS Misc\n\ndefineSymbol(math, ams, rel, "\\u25b3", "\\\\vartriangle");\ndefineSymbol(math, ams, textord, "\\u210f", "\\\\hslash");\ndefineSymbol(math, ams, textord, "\\u25bd", "\\\\triangledown");\ndefineSymbol(math, ams, textord, "\\u25ca", "\\\\lozenge");\ndefineSymbol(math, ams, textord, "\\u24c8", "\\\\circledS");\ndefineSymbol(math, ams, textord, "\\u00ae", "\\\\circledR");\ndefineSymbol(symbols_text, ams, textord, "\\u00ae", "\\\\circledR");\ndefineSymbol(math, ams, textord, "\\u2221", "\\\\measuredangle", true);\ndefineSymbol(math, ams, textord, "\\u2204", "\\\\nexists");\ndefineSymbol(math, ams, textord, "\\u2127", "\\\\mho");\ndefineSymbol(math, ams, textord, "\\u2132", "\\\\Finv", true);\ndefineSymbol(math, ams, textord, "\\u2141", "\\\\Game", true);\ndefineSymbol(math, ams, textord, "\\u2035", "\\\\backprime");\ndefineSymbol(math, ams, textord, "\\u25b2", "\\\\blacktriangle");\ndefineSymbol(math, ams, textord, "\\u25bc", "\\\\blacktriangledown");\ndefineSymbol(math, ams, textord, "\\u25a0", "\\\\blacksquare");\ndefineSymbol(math, ams, textord, "\\u29eb", "\\\\blacklozenge");\ndefineSymbol(math, ams, textord, "\\u2605", "\\\\bigstar");\ndefineSymbol(math, ams, textord, "\\u2222", "\\\\sphericalangle", true);\ndefineSymbol(math, ams, textord, "\\u2201", "\\\\complement", true); // unicode-math maps U+F0 to \\matheth. We map to AMS function \\eth\n\ndefineSymbol(math, ams, textord, "\\u00f0", "\\\\eth", true);\ndefineSymbol(symbols_text, main, textord, "\\u00f0", "\\u00f0");\ndefineSymbol(math, ams, textord, "\\u2571", "\\\\diagup");\ndefineSymbol(math, ams, textord, "\\u2572", "\\\\diagdown");\ndefineSymbol(math, ams, textord, "\\u25a1", "\\\\square");\ndefineSymbol(math, ams, textord, "\\u25a1", "\\\\Box");\ndefineSymbol(math, ams, textord, "\\u25ca", "\\\\Diamond"); // unicode-math maps U+A5 to \\mathyen. We map to AMS function \\yen\n\ndefineSymbol(math, ams, textord, "\\u00a5", "\\\\yen", true);\ndefineSymbol(symbols_text, ams, textord, "\\u00a5", "\\\\yen", true);\ndefineSymbol(math, ams, textord, "\\u2713", "\\\\checkmark", true);\ndefineSymbol(symbols_text, ams, textord, "\\u2713", "\\\\checkmark"); // AMS Hebrew\n\ndefineSymbol(math, ams, textord, "\\u2136", "\\\\beth", true);\ndefineSymbol(math, ams, textord, "\\u2138", "\\\\daleth", true);\ndefineSymbol(math, ams, textord, "\\u2137", "\\\\gimel", true); // AMS Greek\n\ndefineSymbol(math, ams, textord, "\\u03dd", "\\\\digamma", true);\ndefineSymbol(math, ams, textord, "\\u03f0", "\\\\varkappa"); // AMS Delimiters\n\ndefineSymbol(math, ams, symbols_open, "\\u250c", "\\\\@ulcorner", true);\ndefineSymbol(math, ams, symbols_close, "\\u2510", "\\\\@urcorner", true);\ndefineSymbol(math, ams, symbols_open, "\\u2514", "\\\\@llcorner", true);\ndefineSymbol(math, ams, symbols_close, "\\u2518", "\\\\@lrcorner", true); // AMS Binary Relations\n\ndefineSymbol(math, ams, rel, "\\u2266", "\\\\leqq", true);\ndefineSymbol(math, ams, rel, "\\u2a7d", "\\\\leqslant", true);\ndefineSymbol(math, ams, rel, "\\u2a95", "\\\\eqslantless", true);\ndefineSymbol(math, ams, rel, "\\u2272", "\\\\lesssim", true);\ndefineSymbol(math, ams, rel, "\\u2a85", "\\\\lessapprox", true);\ndefineSymbol(math, ams, rel, "\\u224a", "\\\\approxeq", true);\ndefineSymbol(math, ams, bin, "\\u22d6", "\\\\lessdot");\ndefineSymbol(math, ams, rel, "\\u22d8", "\\\\lll", true);\ndefineSymbol(math, ams, rel, "\\u2276", "\\\\lessgtr", true);\ndefineSymbol(math, ams, rel, "\\u22da", "\\\\lesseqgtr", true);\ndefineSymbol(math, ams, rel, "\\u2a8b", "\\\\lesseqqgtr", true);\ndefineSymbol(math, ams, rel, "\\u2251", "\\\\doteqdot");\ndefineSymbol(math, ams, rel, "\\u2253", "\\\\risingdotseq", true);\ndefineSymbol(math, ams, rel, "\\u2252", "\\\\fallingdotseq", true);\ndefineSymbol(math, ams, rel, "\\u223d", "\\\\backsim", true);\ndefineSymbol(math, ams, rel, "\\u22cd", "\\\\backsimeq", true);\ndefineSymbol(math, ams, rel, "\\u2ac5", "\\\\subseteqq", true);\ndefineSymbol(math, ams, rel, "\\u22d0", "\\\\Subset", true);\ndefineSymbol(math, ams, rel, "\\u228f", "\\\\sqsubset", true);\ndefineSymbol(math, ams, rel, "\\u227c", "\\\\preccurlyeq", true);\ndefineSymbol(math, ams, rel, "\\u22de", "\\\\curlyeqprec", true);\ndefineSymbol(math, ams, rel, "\\u227e", "\\\\precsim", true);\ndefineSymbol(math, ams, rel, "\\u2ab7", "\\\\precapprox", true);\ndefineSymbol(math, ams, rel, "\\u22b2", "\\\\vartriangleleft");\ndefineSymbol(math, ams, rel, "\\u22b4", "\\\\trianglelefteq");\ndefineSymbol(math, ams, rel, "\\u22a8", "\\\\vDash", true);\ndefineSymbol(math, ams, rel, "\\u22aa", "\\\\Vvdash", true);\ndefineSymbol(math, ams, rel, "\\u2323", "\\\\smallsmile");\ndefineSymbol(math, ams, rel, "\\u2322", "\\\\smallfrown");\ndefineSymbol(math, ams, rel, "\\u224f", "\\\\bumpeq", true);\ndefineSymbol(math, ams, rel, "\\u224e", "\\\\Bumpeq", true);\ndefineSymbol(math, ams, rel, "\\u2267", "\\\\geqq", true);\ndefineSymbol(math, ams, rel, "\\u2a7e", "\\\\geqslant", true);\ndefineSymbol(math, ams, rel, "\\u2a96", "\\\\eqslantgtr", true);\ndefineSymbol(math, ams, rel, "\\u2273", "\\\\gtrsim", true);\ndefineSymbol(math, ams, rel, "\\u2a86", "\\\\gtrapprox", true);\ndefineSymbol(math, ams, bin, "\\u22d7", "\\\\gtrdot");\ndefineSymbol(math, ams, rel, "\\u22d9", "\\\\ggg", true);\ndefineSymbol(math, ams, rel, "\\u2277", "\\\\gtrless", true);\ndefineSymbol(math, ams, rel, "\\u22db", "\\\\gtreqless", true);\ndefineSymbol(math, ams, rel, "\\u2a8c", "\\\\gtreqqless", true);\ndefineSymbol(math, ams, rel, "\\u2256", "\\\\eqcirc", true);\ndefineSymbol(math, ams, rel, "\\u2257", "\\\\circeq", true);\ndefineSymbol(math, ams, rel, "\\u225c", "\\\\triangleq", true);\ndefineSymbol(math, ams, rel, "\\u223c", "\\\\thicksim");\ndefineSymbol(math, ams, rel, "\\u2248", "\\\\thickapprox");\ndefineSymbol(math, ams, rel, "\\u2ac6", "\\\\supseteqq", true);\ndefineSymbol(math, ams, rel, "\\u22d1", "\\\\Supset", true);\ndefineSymbol(math, ams, rel, "\\u2290", "\\\\sqsupset", true);\ndefineSymbol(math, ams, rel, "\\u227d", "\\\\succcurlyeq", true);\ndefineSymbol(math, ams, rel, "\\u22df", "\\\\curlyeqsucc", true);\ndefineSymbol(math, ams, rel, "\\u227f", "\\\\succsim", true);\ndefineSymbol(math, ams, rel, "\\u2ab8", "\\\\succapprox", true);\ndefineSymbol(math, ams, rel, "\\u22b3", "\\\\vartriangleright");\ndefineSymbol(math, ams, rel, "\\u22b5", "\\\\trianglerighteq");\ndefineSymbol(math, ams, rel, "\\u22a9", "\\\\Vdash", true);\ndefineSymbol(math, ams, rel, "\\u2223", "\\\\shortmid");\ndefineSymbol(math, ams, rel, "\\u2225", "\\\\shortparallel");\ndefineSymbol(math, ams, rel, "\\u226c", "\\\\between", true);\ndefineSymbol(math, ams, rel, "\\u22d4", "\\\\pitchfork", true);\ndefineSymbol(math, ams, rel, "\\u221d", "\\\\varpropto");\ndefineSymbol(math, ams, rel, "\\u25c0", "\\\\blacktriangleleft"); // unicode-math says that \\therefore is a mathord atom.\n// We kept the amssymb atom type, which is rel.\n\ndefineSymbol(math, ams, rel, "\\u2234", "\\\\therefore", true);\ndefineSymbol(math, ams, rel, "\\u220d", "\\\\backepsilon");\ndefineSymbol(math, ams, rel, "\\u25b6", "\\\\blacktriangleright"); // unicode-math says that \\because is a mathord atom.\n// We kept the amssymb atom type, which is rel.\n\ndefineSymbol(math, ams, rel, "\\u2235", "\\\\because", true);\ndefineSymbol(math, ams, rel, "\\u22d8", "\\\\llless");\ndefineSymbol(math, ams, rel, "\\u22d9", "\\\\gggtr");\ndefineSymbol(math, ams, bin, "\\u22b2", "\\\\lhd");\ndefineSymbol(math, ams, bin, "\\u22b3", "\\\\rhd");\ndefineSymbol(math, ams, rel, "\\u2242", "\\\\eqsim", true);\ndefineSymbol(math, main, rel, "\\u22c8", "\\\\Join");\ndefineSymbol(math, ams, rel, "\\u2251", "\\\\Doteq", true); // AMS Binary Operators\n\ndefineSymbol(math, ams, bin, "\\u2214", "\\\\dotplus", true);\ndefineSymbol(math, ams, bin, "\\u2216", "\\\\smallsetminus");\ndefineSymbol(math, ams, bin, "\\u22d2", "\\\\Cap", true);\ndefineSymbol(math, ams, bin, "\\u22d3", "\\\\Cup", true);\ndefineSymbol(math, ams, bin, "\\u2a5e", "\\\\doublebarwedge", true);\ndefineSymbol(math, ams, bin, "\\u229f", "\\\\boxminus", true);\ndefineSymbol(math, ams, bin, "\\u229e", "\\\\boxplus", true);\ndefineSymbol(math, ams, bin, "\\u22c7", "\\\\divideontimes", true);\ndefineSymbol(math, ams, bin, "\\u22c9", "\\\\ltimes", true);\ndefineSymbol(math, ams, bin, "\\u22ca", "\\\\rtimes", true);\ndefineSymbol(math, ams, bin, "\\u22cb", "\\\\leftthreetimes", true);\ndefineSymbol(math, ams, bin, "\\u22cc", "\\\\rightthreetimes", true);\ndefineSymbol(math, ams, bin, "\\u22cf", "\\\\curlywedge", true);\ndefineSymbol(math, ams, bin, "\\u22ce", "\\\\curlyvee", true);\ndefineSymbol(math, ams, bin, "\\u229d", "\\\\circleddash", true);\ndefineSymbol(math, ams, bin, "\\u229b", "\\\\circledast", true);\ndefineSymbol(math, ams, bin, "\\u22c5", "\\\\centerdot");\ndefineSymbol(math, ams, bin, "\\u22ba", "\\\\intercal", true);\ndefineSymbol(math, ams, bin, "\\u22d2", "\\\\doublecap");\ndefineSymbol(math, ams, bin, "\\u22d3", "\\\\doublecup");\ndefineSymbol(math, ams, bin, "\\u22a0", "\\\\boxtimes", true); // AMS Arrows\n// Note: unicode-math maps \\u21e2 to their own function \\rightdasharrow.\n// We\'ll map it to AMS function \\dashrightarrow. It produces the same atom.\n\ndefineSymbol(math, ams, rel, "\\u21e2", "\\\\dashrightarrow", true); // unicode-math maps \\u21e0 to \\leftdasharrow. We\'ll use the AMS synonym.\n\ndefineSymbol(math, ams, rel, "\\u21e0", "\\\\dashleftarrow", true);\ndefineSymbol(math, ams, rel, "\\u21c7", "\\\\leftleftarrows", true);\ndefineSymbol(math, ams, rel, "\\u21c6", "\\\\leftrightarrows", true);\ndefineSymbol(math, ams, rel, "\\u21da", "\\\\Lleftarrow", true);\ndefineSymbol(math, ams, rel, "\\u219e", "\\\\twoheadleftarrow", true);\ndefineSymbol(math, ams, rel, "\\u21a2", "\\\\leftarrowtail", true);\ndefineSymbol(math, ams, rel, "\\u21ab", "\\\\looparrowleft", true);\ndefineSymbol(math, ams, rel, "\\u21cb", "\\\\leftrightharpoons", true);\ndefineSymbol(math, ams, rel, "\\u21b6", "\\\\curvearrowleft", true); // unicode-math maps \\u21ba to \\acwopencirclearrow. We\'ll use the AMS synonym.\n\ndefineSymbol(math, ams, rel, "\\u21ba", "\\\\circlearrowleft", true);\ndefineSymbol(math, ams, rel, "\\u21b0", "\\\\Lsh", true);\ndefineSymbol(math, ams, rel, "\\u21c8", "\\\\upuparrows", true);\ndefineSymbol(math, ams, rel, "\\u21bf", "\\\\upharpoonleft", true);\ndefineSymbol(math, ams, rel, "\\u21c3", "\\\\downharpoonleft", true);\ndefineSymbol(math, main, rel, "\\u22b6", "\\\\origof", true); // not in font\n\ndefineSymbol(math, main, rel, "\\u22b7", "\\\\imageof", true); // not in font\n\ndefineSymbol(math, ams, rel, "\\u22b8", "\\\\multimap", true);\ndefineSymbol(math, ams, rel, "\\u21ad", "\\\\leftrightsquigarrow", true);\ndefineSymbol(math, ams, rel, "\\u21c9", "\\\\rightrightarrows", true);\ndefineSymbol(math, ams, rel, "\\u21c4", "\\\\rightleftarrows", true);\ndefineSymbol(math, ams, rel, "\\u21a0", "\\\\twoheadrightarrow", true);\ndefineSymbol(math, ams, rel, "\\u21a3", "\\\\rightarrowtail", true);\ndefineSymbol(math, ams, rel, "\\u21ac", "\\\\looparrowright", true);\ndefineSymbol(math, ams, rel, "\\u21b7", "\\\\curvearrowright", true); // unicode-math maps \\u21bb to \\cwopencirclearrow. We\'ll use the AMS synonym.\n\ndefineSymbol(math, ams, rel, "\\u21bb", "\\\\circlearrowright", true);\ndefineSymbol(math, ams, rel, "\\u21b1", "\\\\Rsh", true);\ndefineSymbol(math, ams, rel, "\\u21ca", "\\\\downdownarrows", true);\ndefineSymbol(math, ams, rel, "\\u21be", "\\\\upharpoonright", true);\ndefineSymbol(math, ams, rel, "\\u21c2", "\\\\downharpoonright", true);\ndefineSymbol(math, ams, rel, "\\u21dd", "\\\\rightsquigarrow", true);\ndefineSymbol(math, ams, rel, "\\u21dd", "\\\\leadsto");\ndefineSymbol(math, ams, rel, "\\u21db", "\\\\Rrightarrow", true);\ndefineSymbol(math, ams, rel, "\\u21be", "\\\\restriction");\ndefineSymbol(math, main, textord, "\\u2018", "`");\ndefineSymbol(math, main, textord, "$", "\\\\$");\ndefineSymbol(symbols_text, main, textord, "$", "\\\\$");\ndefineSymbol(symbols_text, main, textord, "$", "\\\\textdollar");\ndefineSymbol(math, main, textord, "%", "\\\\%");\ndefineSymbol(symbols_text, main, textord, "%", "\\\\%");\ndefineSymbol(math, main, textord, "_", "\\\\_");\ndefineSymbol(symbols_text, main, textord, "_", "\\\\_");\ndefineSymbol(symbols_text, main, textord, "_", "\\\\textunderscore");\ndefineSymbol(math, main, textord, "\\u2220", "\\\\angle", true);\ndefineSymbol(math, main, textord, "\\u221e", "\\\\infty", true);\ndefineSymbol(math, main, textord, "\\u2032", "\\\\prime");\ndefineSymbol(math, main, textord, "\\u25b3", "\\\\triangle");\ndefineSymbol(math, main, textord, "\\u0393", "\\\\Gamma", true);\ndefineSymbol(math, main, textord, "\\u0394", "\\\\Delta", true);\ndefineSymbol(math, main, textord, "\\u0398", "\\\\Theta", true);\ndefineSymbol(math, main, textord, "\\u039b", "\\\\Lambda", true);\ndefineSymbol(math, main, textord, "\\u039e", "\\\\Xi", true);\ndefineSymbol(math, main, textord, "\\u03a0", "\\\\Pi", true);\ndefineSymbol(math, main, textord, "\\u03a3", "\\\\Sigma", true);\ndefineSymbol(math, main, textord, "\\u03a5", "\\\\Upsilon", true);\ndefineSymbol(math, main, textord, "\\u03a6", "\\\\Phi", true);\ndefineSymbol(math, main, textord, "\\u03a8", "\\\\Psi", true);\ndefineSymbol(math, main, textord, "\\u03a9", "\\\\Omega", true);\ndefineSymbol(math, main, textord, "A", "\\u0391");\ndefineSymbol(math, main, textord, "B", "\\u0392");\ndefineSymbol(math, main, textord, "E", "\\u0395");\ndefineSymbol(math, main, textord, "Z", "\\u0396");\ndefineSymbol(math, main, textord, "H", "\\u0397");\ndefineSymbol(math, main, textord, "I", "\\u0399");\ndefineSymbol(math, main, textord, "K", "\\u039A");\ndefineSymbol(math, main, textord, "M", "\\u039C");\ndefineSymbol(math, main, textord, "N", "\\u039D");\ndefineSymbol(math, main, textord, "O", "\\u039F");\ndefineSymbol(math, main, textord, "P", "\\u03A1");\ndefineSymbol(math, main, textord, "T", "\\u03A4");\ndefineSymbol(math, main, textord, "X", "\\u03A7");\ndefineSymbol(math, main, textord, "\\u00ac", "\\\\neg", true);\ndefineSymbol(math, main, textord, "\\u00ac", "\\\\lnot");\ndefineSymbol(math, main, textord, "\\u22a4", "\\\\top");\ndefineSymbol(math, main, textord, "\\u22a5", "\\\\bot");\ndefineSymbol(math, main, textord, "\\u2205", "\\\\emptyset");\ndefineSymbol(math, ams, textord, "\\u2205", "\\\\varnothing");\ndefineSymbol(math, main, mathord, "\\u03b1", "\\\\alpha", true);\ndefineSymbol(math, main, mathord, "\\u03b2", "\\\\beta", true);\ndefineSymbol(math, main, mathord, "\\u03b3", "\\\\gamma", true);\ndefineSymbol(math, main, mathord, "\\u03b4", "\\\\delta", true);\ndefineSymbol(math, main, mathord, "\\u03f5", "\\\\epsilon", true);\ndefineSymbol(math, main, mathord, "\\u03b6", "\\\\zeta", true);\ndefineSymbol(math, main, mathord, "\\u03b7", "\\\\eta", true);\ndefineSymbol(math, main, mathord, "\\u03b8", "\\\\theta", true);\ndefineSymbol(math, main, mathord, "\\u03b9", "\\\\iota", true);\ndefineSymbol(math, main, mathord, "\\u03ba", "\\\\kappa", true);\ndefineSymbol(math, main, mathord, "\\u03bb", "\\\\lambda", true);\ndefineSymbol(math, main, mathord, "\\u03bc", "\\\\mu", true);\ndefineSymbol(math, main, mathord, "\\u03bd", "\\\\nu", true);\ndefineSymbol(math, main, mathord, "\\u03be", "\\\\xi", true);\ndefineSymbol(math, main, mathord, "\\u03bf", "\\\\omicron", true);\ndefineSymbol(math, main, mathord, "\\u03c0", "\\\\pi", true);\ndefineSymbol(math, main, mathord, "\\u03c1", "\\\\rho", true);\ndefineSymbol(math, main, mathord, "\\u03c3", "\\\\sigma", true);\ndefineSymbol(math, main, mathord, "\\u03c4", "\\\\tau", true);\ndefineSymbol(math, main, mathord, "\\u03c5", "\\\\upsilon", true);\ndefineSymbol(math, main, mathord, "\\u03d5", "\\\\phi", true);\ndefineSymbol(math, main, mathord, "\\u03c7", "\\\\chi", true);\ndefineSymbol(math, main, mathord, "\\u03c8", "\\\\psi", true);\ndefineSymbol(math, main, mathord, "\\u03c9", "\\\\omega", true);\ndefineSymbol(math, main, mathord, "\\u03b5", "\\\\varepsilon", true);\ndefineSymbol(math, main, mathord, "\\u03d1", "\\\\vartheta", true);\ndefineSymbol(math, main, mathord, "\\u03d6", "\\\\varpi", true);\ndefineSymbol(math, main, mathord, "\\u03f1", "\\\\varrho", true);\ndefineSymbol(math, main, mathord, "\\u03c2", "\\\\varsigma", true);\ndefineSymbol(math, main, mathord, "\\u03c6", "\\\\varphi", true);\ndefineSymbol(math, main, bin, "\\u2217", "*", true);\ndefineSymbol(math, main, bin, "+", "+");\ndefineSymbol(math, main, bin, "\\u2212", "-", true);\ndefineSymbol(math, main, bin, "\\u22c5", "\\\\cdot", true);\ndefineSymbol(math, main, bin, "\\u2218", "\\\\circ", true);\ndefineSymbol(math, main, bin, "\\u00f7", "\\\\div", true);\ndefineSymbol(math, main, bin, "\\u00b1", "\\\\pm", true);\ndefineSymbol(math, main, bin, "\\u00d7", "\\\\times", true);\ndefineSymbol(math, main, bin, "\\u2229", "\\\\cap", true);\ndefineSymbol(math, main, bin, "\\u222a", "\\\\cup", true);\ndefineSymbol(math, main, bin, "\\u2216", "\\\\setminus", true);\ndefineSymbol(math, main, bin, "\\u2227", "\\\\land");\ndefineSymbol(math, main, bin, "\\u2228", "\\\\lor");\ndefineSymbol(math, main, bin, "\\u2227", "\\\\wedge", true);\ndefineSymbol(math, main, bin, "\\u2228", "\\\\vee", true);\ndefineSymbol(math, main, textord, "\\u221a", "\\\\surd");\ndefineSymbol(math, main, symbols_open, "\\u27e8", "\\\\langle", true);\ndefineSymbol(math, main, symbols_open, "\\u2223", "\\\\lvert");\ndefineSymbol(math, main, symbols_open, "\\u2225", "\\\\lVert");\ndefineSymbol(math, main, symbols_close, "?", "?");\ndefineSymbol(math, main, symbols_close, "!", "!");\ndefineSymbol(math, main, symbols_close, "\\u27e9", "\\\\rangle", true);\ndefineSymbol(math, main, symbols_close, "\\u2223", "\\\\rvert");\ndefineSymbol(math, main, symbols_close, "\\u2225", "\\\\rVert");\ndefineSymbol(math, main, rel, "=", "=");\ndefineSymbol(math, main, rel, ":", ":");\ndefineSymbol(math, main, rel, "\\u2248", "\\\\approx", true);\ndefineSymbol(math, main, rel, "\\u2245", "\\\\cong", true);\ndefineSymbol(math, main, rel, "\\u2265", "\\\\ge");\ndefineSymbol(math, main, rel, "\\u2265", "\\\\geq", true);\ndefineSymbol(math, main, rel, "\\u2190", "\\\\gets");\ndefineSymbol(math, main, rel, ">", "\\\\gt", true);\ndefineSymbol(math, main, rel, "\\u2208", "\\\\in", true);\ndefineSymbol(math, main, rel, "\\ue020", "\\\\@not");\ndefineSymbol(math, main, rel, "\\u2282", "\\\\subset", true);\ndefineSymbol(math, main, rel, "\\u2283", "\\\\supset", true);\ndefineSymbol(math, main, rel, "\\u2286", "\\\\subseteq", true);\ndefineSymbol(math, main, rel, "\\u2287", "\\\\supseteq", true);\ndefineSymbol(math, ams, rel, "\\u2288", "\\\\nsubseteq", true);\ndefineSymbol(math, ams, rel, "\\u2289", "\\\\nsupseteq", true);\ndefineSymbol(math, main, rel, "\\u22a8", "\\\\models");\ndefineSymbol(math, main, rel, "\\u2190", "\\\\leftarrow", true);\ndefineSymbol(math, main, rel, "\\u2264", "\\\\le");\ndefineSymbol(math, main, rel, "\\u2264", "\\\\leq", true);\ndefineSymbol(math, main, rel, "<", "\\\\lt", true);\ndefineSymbol(math, main, rel, "\\u2192", "\\\\rightarrow", true);\ndefineSymbol(math, main, rel, "\\u2192", "\\\\to");\ndefineSymbol(math, ams, rel, "\\u2271", "\\\\ngeq", true);\ndefineSymbol(math, ams, rel, "\\u2270", "\\\\nleq", true);\ndefineSymbol(math, main, spacing, "\\u00a0", "\\\\ ");\ndefineSymbol(math, main, spacing, "\\u00a0", "\\\\space"); // Ref: LaTeX Source 2e: \\DeclareRobustCommand{\\nobreakspace}{%\n\ndefineSymbol(math, main, spacing, "\\u00a0", "\\\\nobreakspace");\ndefineSymbol(symbols_text, main, spacing, "\\u00a0", "\\\\ ");\ndefineSymbol(symbols_text, main, spacing, "\\u00a0", " ");\ndefineSymbol(symbols_text, main, spacing, "\\u00a0", "\\\\space");\ndefineSymbol(symbols_text, main, spacing, "\\u00a0", "\\\\nobreakspace");\ndefineSymbol(math, main, spacing, null, "\\\\nobreak");\ndefineSymbol(math, main, spacing, null, "\\\\allowbreak");\ndefineSymbol(math, main, punct, ",", ",");\ndefineSymbol(math, main, punct, ";", ";");\ndefineSymbol(math, ams, bin, "\\u22bc", "\\\\barwedge", true);\ndefineSymbol(math, ams, bin, "\\u22bb", "\\\\veebar", true);\ndefineSymbol(math, main, bin, "\\u2299", "\\\\odot", true);\ndefineSymbol(math, main, bin, "\\u2295", "\\\\oplus", true);\ndefineSymbol(math, main, bin, "\\u2297", "\\\\otimes", true);\ndefineSymbol(math, main, textord, "\\u2202", "\\\\partial", true);\ndefineSymbol(math, main, bin, "\\u2298", "\\\\oslash", true);\ndefineSymbol(math, ams, bin, "\\u229a", "\\\\circledcirc", true);\ndefineSymbol(math, ams, bin, "\\u22a1", "\\\\boxdot", true);\ndefineSymbol(math, main, bin, "\\u25b3", "\\\\bigtriangleup");\ndefineSymbol(math, main, bin, "\\u25bd", "\\\\bigtriangledown");\ndefineSymbol(math, main, bin, "\\u2020", "\\\\dagger");\ndefineSymbol(math, main, bin, "\\u22c4", "\\\\diamond");\ndefineSymbol(math, main, bin, "\\u22c6", "\\\\star");\ndefineSymbol(math, main, bin, "\\u25c3", "\\\\triangleleft");\ndefineSymbol(math, main, bin, "\\u25b9", "\\\\triangleright");\ndefineSymbol(math, main, symbols_open, "{", "\\\\{");\ndefineSymbol(symbols_text, main, textord, "{", "\\\\{");\ndefineSymbol(symbols_text, main, textord, "{", "\\\\textbraceleft");\ndefineSymbol(math, main, symbols_close, "}", "\\\\}");\ndefineSymbol(symbols_text, main, textord, "}", "\\\\}");\ndefineSymbol(symbols_text, main, textord, "}", "\\\\textbraceright");\ndefineSymbol(math, main, symbols_open, "{", "\\\\lbrace");\ndefineSymbol(math, main, symbols_close, "}", "\\\\rbrace");\ndefineSymbol(math, main, symbols_open, "[", "\\\\lbrack", true);\ndefineSymbol(symbols_text, main, textord, "[", "\\\\lbrack", true);\ndefineSymbol(math, main, symbols_close, "]", "\\\\rbrack", true);\ndefineSymbol(symbols_text, main, textord, "]", "\\\\rbrack", true);\ndefineSymbol(math, main, symbols_open, "(", "\\\\lparen", true);\ndefineSymbol(math, main, symbols_close, ")", "\\\\rparen", true);\ndefineSymbol(symbols_text, main, textord, "<", "\\\\textless", true); // in T1 fontenc\n\ndefineSymbol(symbols_text, main, textord, ">", "\\\\textgreater", true); // in T1 fontenc\n\ndefineSymbol(math, main, symbols_open, "\\u230a", "\\\\lfloor", true);\ndefineSymbol(math, main, symbols_close, "\\u230b", "\\\\rfloor", true);\ndefineSymbol(math, main, symbols_open, "\\u2308", "\\\\lceil", true);\ndefineSymbol(math, main, symbols_close, "\\u2309", "\\\\rceil", true);\ndefineSymbol(math, main, textord, "\\\\", "\\\\backslash");\ndefineSymbol(math, main, textord, "\\u2223", "|");\ndefineSymbol(math, main, textord, "\\u2223", "\\\\vert");\ndefineSymbol(symbols_text, main, textord, "|", "\\\\textbar", true); // in T1 fontenc\n\ndefineSymbol(math, main, textord, "\\u2225", "\\\\|");\ndefineSymbol(math, main, textord, "\\u2225", "\\\\Vert");\ndefineSymbol(symbols_text, main, textord, "\\u2225", "\\\\textbardbl");\ndefineSymbol(symbols_text, main, textord, "~", "\\\\textasciitilde");\ndefineSymbol(symbols_text, main, textord, "\\\\", "\\\\textbackslash");\ndefineSymbol(symbols_text, main, textord, "^", "\\\\textasciicircum");\ndefineSymbol(math, main, rel, "\\u2191", "\\\\uparrow", true);\ndefineSymbol(math, main, rel, "\\u21d1", "\\\\Uparrow", true);\ndefineSymbol(math, main, rel, "\\u2193", "\\\\downarrow", true);\ndefineSymbol(math, main, rel, "\\u21d3", "\\\\Downarrow", true);\ndefineSymbol(math, main, rel, "\\u2195", "\\\\updownarrow", true);\ndefineSymbol(math, main, rel, "\\u21d5", "\\\\Updownarrow", true);\ndefineSymbol(math, main, op, "\\u2210", "\\\\coprod");\ndefineSymbol(math, main, op, "\\u22c1", "\\\\bigvee");\ndefineSymbol(math, main, op, "\\u22c0", "\\\\bigwedge");\ndefineSymbol(math, main, op, "\\u2a04", "\\\\biguplus");\ndefineSymbol(math, main, op, "\\u22c2", "\\\\bigcap");\ndefineSymbol(math, main, op, "\\u22c3", "\\\\bigcup");\ndefineSymbol(math, main, op, "\\u222b", "\\\\int");\ndefineSymbol(math, main, op, "\\u222b", "\\\\intop");\ndefineSymbol(math, main, op, "\\u222c", "\\\\iint");\ndefineSymbol(math, main, op, "\\u222d", "\\\\iiint");\ndefineSymbol(math, main, op, "\\u220f", "\\\\prod");\ndefineSymbol(math, main, op, "\\u2211", "\\\\sum");\ndefineSymbol(math, main, op, "\\u2a02", "\\\\bigotimes");\ndefineSymbol(math, main, op, "\\u2a01", "\\\\bigoplus");\ndefineSymbol(math, main, op, "\\u2a00", "\\\\bigodot");\ndefineSymbol(math, main, op, "\\u222e", "\\\\oint");\ndefineSymbol(math, main, op, "\\u222f", "\\\\oiint");\ndefineSymbol(math, main, op, "\\u2230", "\\\\oiiint");\ndefineSymbol(math, main, op, "\\u2a06", "\\\\bigsqcup");\ndefineSymbol(math, main, op, "\\u222b", "\\\\smallint");\ndefineSymbol(symbols_text, main, inner, "\\u2026", "\\\\textellipsis");\ndefineSymbol(math, main, inner, "\\u2026", "\\\\mathellipsis");\ndefineSymbol(symbols_text, main, inner, "\\u2026", "\\\\ldots", true);\ndefineSymbol(math, main, inner, "\\u2026", "\\\\ldots", true);\ndefineSymbol(math, main, inner, "\\u22ef", "\\\\@cdots", true);\ndefineSymbol(math, main, inner, "\\u22f1", "\\\\ddots", true); // \\vdots is a macro that uses one of these two symbols (with made-up names):\n\ndefineSymbol(math, main, textord, "\\u22ee", "\\\\varvdots");\ndefineSymbol(symbols_text, main, textord, "\\u22ee", "\\\\varvdots");\ndefineSymbol(math, main, accent, "\\u02ca", "\\\\acute");\ndefineSymbol(math, main, accent, "\\u02cb", "\\\\grave");\ndefineSymbol(math, main, accent, "\\u00a8", "\\\\ddot");\ndefineSymbol(math, main, accent, "\\u007e", "\\\\tilde");\ndefineSymbol(math, main, accent, "\\u02c9", "\\\\bar");\ndefineSymbol(math, main, accent, "\\u02d8", "\\\\breve");\ndefineSymbol(math, main, accent, "\\u02c7", "\\\\check");\ndefineSymbol(math, main, accent, "\\u005e", "\\\\hat");\ndefineSymbol(math, main, accent, "\\u20d7", "\\\\vec");\ndefineSymbol(math, main, accent, "\\u02d9", "\\\\dot");\ndefineSymbol(math, main, accent, "\\u02da", "\\\\mathring"); // \\imath and \\jmath should be invariant to \\mathrm, \\mathbf, etc., so use PUA\n\ndefineSymbol(math, main, mathord, "\\ue131", "\\\\@imath");\ndefineSymbol(math, main, mathord, "\\ue237", "\\\\@jmath");\ndefineSymbol(math, main, textord, "\\u0131", "\\u0131");\ndefineSymbol(math, main, textord, "\\u0237", "\\u0237");\ndefineSymbol(symbols_text, main, textord, "\\u0131", "\\\\i", true);\ndefineSymbol(symbols_text, main, textord, "\\u0237", "\\\\j", true);\ndefineSymbol(symbols_text, main, textord, "\\u00df", "\\\\ss", true);\ndefineSymbol(symbols_text, main, textord, "\\u00e6", "\\\\ae", true);\ndefineSymbol(symbols_text, main, textord, "\\u0153", "\\\\oe", true);\ndefineSymbol(symbols_text, main, textord, "\\u00f8", "\\\\o", true);\ndefineSymbol(symbols_text, main, textord, "\\u00c6", "\\\\AE", true);\ndefineSymbol(symbols_text, main, textord, "\\u0152", "\\\\OE", true);\ndefineSymbol(symbols_text, main, textord, "\\u00d8", "\\\\O", true);\ndefineSymbol(symbols_text, main, accent, "\\u02ca", "\\\\\'"); // acute\n\ndefineSymbol(symbols_text, main, accent, "\\u02cb", "\\\\`"); // grave\n\ndefineSymbol(symbols_text, main, accent, "\\u02c6", "\\\\^"); // circumflex\n\ndefineSymbol(symbols_text, main, accent, "\\u02dc", "\\\\~"); // tilde\n\ndefineSymbol(symbols_text, main, accent, "\\u02c9", "\\\\="); // macron\n\ndefineSymbol(symbols_text, main, accent, "\\u02d8", "\\\\u"); // breve\n\ndefineSymbol(symbols_text, main, accent, "\\u02d9", "\\\\."); // dot above\n\ndefineSymbol(symbols_text, main, accent, "\\u00b8", "\\\\c"); // cedilla\n\ndefineSymbol(symbols_text, main, accent, "\\u02da", "\\\\r"); // ring above\n\ndefineSymbol(symbols_text, main, accent, "\\u02c7", "\\\\v"); // caron\n\ndefineSymbol(symbols_text, main, accent, "\\u00a8", \'\\\\"\'); // diaeresis\n\ndefineSymbol(symbols_text, main, accent, "\\u02dd", "\\\\H"); // double acute\n\ndefineSymbol(symbols_text, main, accent, "\\u25ef", "\\\\textcircled"); // \\bigcirc glyph\n// These ligatures are detected and created in Parser.js\'s `formLigatures`.\n\nconst ligatures = {\n "--": true,\n "---": true,\n "``": true,\n "\'\'": true\n};\ndefineSymbol(symbols_text, main, textord, "\\u2013", "--", true);\ndefineSymbol(symbols_text, main, textord, "\\u2013", "\\\\textendash");\ndefineSymbol(symbols_text, main, textord, "\\u2014", "---", true);\ndefineSymbol(symbols_text, main, textord, "\\u2014", "\\\\textemdash");\ndefineSymbol(symbols_text, main, textord, "\\u2018", "`", true);\ndefineSymbol(symbols_text, main, textord, "\\u2018", "\\\\textquoteleft");\ndefineSymbol(symbols_text, main, textord, "\\u2019", "\'", true);\ndefineSymbol(symbols_text, main, textord, "\\u2019", "\\\\textquoteright");\ndefineSymbol(symbols_text, main, textord, "\\u201c", "``", true);\ndefineSymbol(symbols_text, main, textord, "\\u201c", "\\\\textquotedblleft");\ndefineSymbol(symbols_text, main, textord, "\\u201d", "\'\'", true);\ndefineSymbol(symbols_text, main, textord, "\\u201d", "\\\\textquotedblright"); // \\degree from gensymb package\n\ndefineSymbol(math, main, textord, "\\u00b0", "\\\\degree", true);\ndefineSymbol(symbols_text, main, textord, "\\u00b0", "\\\\degree"); // \\textdegree from inputenc package\n\ndefineSymbol(symbols_text, main, textord, "\\u00b0", "\\\\textdegree", true); // TODO: In LaTeX, \\pounds can generate a different character in text and math\n// mode, but among our fonts, only Main-Regular defines this character "163".\n\ndefineSymbol(math, main, textord, "\\u00a3", "\\\\pounds");\ndefineSymbol(math, main, textord, "\\u00a3", "\\\\mathsterling", true);\ndefineSymbol(symbols_text, main, textord, "\\u00a3", "\\\\pounds");\ndefineSymbol(symbols_text, main, textord, "\\u00a3", "\\\\textsterling", true);\ndefineSymbol(math, ams, textord, "\\u2720", "\\\\maltese");\ndefineSymbol(symbols_text, ams, textord, "\\u2720", "\\\\maltese"); // There are lots of symbols which are the same, so we add them in afterwards.\n// All of these are textords in math mode\n\nconst mathTextSymbols = "0123456789/@.\\"";\n\nfor (let i = 0; i < mathTextSymbols.length; i++) {\n const ch = mathTextSymbols.charAt(i);\n defineSymbol(math, main, textord, ch, ch);\n} // All of these are textords in text mode\n\n\nconst textSymbols = "0123456789!@*()-=+\\";:?/.,";\n\nfor (let i = 0; i < textSymbols.length; i++) {\n const ch = textSymbols.charAt(i);\n defineSymbol(symbols_text, main, textord, ch, ch);\n} // All of these are textords in text mode, and mathords in math mode\n\n\nconst letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";\n\nfor (let i = 0; i < letters.length; i++) {\n const ch = letters.charAt(i);\n defineSymbol(math, main, mathord, ch, ch);\n defineSymbol(symbols_text, main, textord, ch, ch);\n} // Blackboard bold and script letters in Unicode range\n\n\ndefineSymbol(math, ams, textord, "C", "\\u2102"); // blackboard bold\n\ndefineSymbol(symbols_text, ams, textord, "C", "\\u2102");\ndefineSymbol(math, ams, textord, "H", "\\u210D");\ndefineSymbol(symbols_text, ams, textord, "H", "\\u210D");\ndefineSymbol(math, ams, textord, "N", "\\u2115");\ndefineSymbol(symbols_text, ams, textord, "N", "\\u2115");\ndefineSymbol(math, ams, textord, "P", "\\u2119");\ndefineSymbol(symbols_text, ams, textord, "P", "\\u2119");\ndefineSymbol(math, ams, textord, "Q", "\\u211A");\ndefineSymbol(symbols_text, ams, textord, "Q", "\\u211A");\ndefineSymbol(math, ams, textord, "R", "\\u211D");\ndefineSymbol(symbols_text, ams, textord, "R", "\\u211D");\ndefineSymbol(math, ams, textord, "Z", "\\u2124");\ndefineSymbol(symbols_text, ams, textord, "Z", "\\u2124");\ndefineSymbol(math, main, mathord, "h", "\\u210E"); // italic h, Planck constant\n\ndefineSymbol(symbols_text, main, mathord, "h", "\\u210E"); // The next loop loads wide (surrogate pair) characters.\n// We support some letters in the Unicode range U+1D400 to U+1D7FF,\n// Mathematical Alphanumeric Symbols.\n// Some editors do not deal well with wide characters. So don\'t write the\n// string into this file. Instead, create the string from the surrogate pair.\n\nlet wideChar = "";\n\nfor (let i = 0; i < letters.length; i++) {\n const ch = letters.charAt(i); // The hex numbers in the next line are a surrogate pair.\n // 0xD835 is the high surrogate for all letters in the range we support.\n // 0xDC00 is the low surrogate for bold A.\n\n wideChar = String.fromCharCode(0xD835, 0xDC00 + i); // A-Z a-z bold\n\n defineSymbol(math, main, mathord, ch, wideChar);\n defineSymbol(symbols_text, main, textord, ch, wideChar);\n wideChar = String.fromCharCode(0xD835, 0xDC34 + i); // A-Z a-z italic\n\n defineSymbol(math, main, mathord, ch, wideChar);\n defineSymbol(symbols_text, main, textord, ch, wideChar);\n wideChar = String.fromCharCode(0xD835, 0xDC68 + i); // A-Z a-z bold italic\n\n defineSymbol(math, main, mathord, ch, wideChar);\n defineSymbol(symbols_text, main, textord, ch, wideChar);\n wideChar = String.fromCharCode(0xD835, 0xDD04 + i); // A-Z a-z Fraktur\n\n defineSymbol(math, main, mathord, ch, wideChar);\n defineSymbol(symbols_text, main, textord, ch, wideChar);\n wideChar = String.fromCharCode(0xD835, 0xDD6C + i); // A-Z a-z bold Fraktur\n\n defineSymbol(math, main, mathord, ch, wideChar);\n defineSymbol(symbols_text, main, textord, ch, wideChar);\n wideChar = String.fromCharCode(0xD835, 0xDDA0 + i); // A-Z a-z sans-serif\n\n defineSymbol(math, main, mathord, ch, wideChar);\n defineSymbol(symbols_text, main, textord, ch, wideChar);\n wideChar = String.fromCharCode(0xD835, 0xDDD4 + i); // A-Z a-z sans bold\n\n defineSymbol(math, main, mathord, ch, wideChar);\n defineSymbol(symbols_text, main, textord, ch, wideChar);\n wideChar = String.fromCharCode(0xD835, 0xDE08 + i); // A-Z a-z sans italic\n\n defineSymbol(math, main, mathord, ch, wideChar);\n defineSymbol(symbols_text, main, textord, ch, wideChar);\n wideChar = String.fromCharCode(0xD835, 0xDE70 + i); // A-Z a-z monospace\n\n defineSymbol(math, main, mathord, ch, wideChar);\n defineSymbol(symbols_text, main, textord, ch, wideChar);\n\n if (i < 26) {\n // KaTeX fonts have only capital letters for blackboard bold and script.\n // See exception for k below.\n wideChar = String.fromCharCode(0xD835, 0xDD38 + i); // A-Z double struck\n\n defineSymbol(math, main, mathord, ch, wideChar);\n defineSymbol(symbols_text, main, textord, ch, wideChar);\n wideChar = String.fromCharCode(0xD835, 0xDC9C + i); // A-Z script\n\n defineSymbol(math, main, mathord, ch, wideChar);\n defineSymbol(symbols_text, main, textord, ch, wideChar);\n } // TODO: Add bold script when it is supported by a KaTeX font.\n\n} // "k" is the only double struck lower case letter in the KaTeX fonts.\n\n\nwideChar = String.fromCharCode(0xD835, 0xDD5C); // k double struck\n\ndefineSymbol(math, main, mathord, "k", wideChar);\ndefineSymbol(symbols_text, main, textord, "k", wideChar); // Next, some wide character numerals\n\nfor (let i = 0; i < 10; i++) {\n const ch = i.toString();\n wideChar = String.fromCharCode(0xD835, 0xDFCE + i); // 0-9 bold\n\n defineSymbol(math, main, mathord, ch, wideChar);\n defineSymbol(symbols_text, main, textord, ch, wideChar);\n wideChar = String.fromCharCode(0xD835, 0xDFE2 + i); // 0-9 sans serif\n\n defineSymbol(math, main, mathord, ch, wideChar);\n defineSymbol(symbols_text, main, textord, ch, wideChar);\n wideChar = String.fromCharCode(0xD835, 0xDFEC + i); // 0-9 bold sans\n\n defineSymbol(math, main, mathord, ch, wideChar);\n defineSymbol(symbols_text, main, textord, ch, wideChar);\n wideChar = String.fromCharCode(0xD835, 0xDFF6 + i); // 0-9 monospace\n\n defineSymbol(math, main, mathord, ch, wideChar);\n defineSymbol(symbols_text, main, textord, ch, wideChar);\n} // We add these Latin-1 letters as symbols for backwards-compatibility,\n// but they are not actually in the font, nor are they supported by the\n// Unicode accent mechanism, so they fall back to Times font and look ugly.\n// TODO(edemaine): Fix this.\n\n\nconst extraLatin = "\\u00d0\\u00de\\u00fe";\n\nfor (let i = 0; i < extraLatin.length; i++) {\n const ch = extraLatin.charAt(i);\n defineSymbol(math, main, mathord, ch, ch);\n defineSymbol(symbols_text, main, textord, ch, ch);\n}\n;// CONCATENATED MODULE: ./src/wide-character.js\n/**\n * This file provides support for Unicode range U+1D400 to U+1D7FF,\n * Mathematical Alphanumeric Symbols.\n *\n * Function wideCharacterFont takes a wide character as input and returns\n * the font information necessary to render it properly.\n */\n\n/**\n * Data below is from https://www.unicode.org/charts/PDF/U1D400.pdf\n * That document sorts characters into groups by font type, say bold or italic.\n *\n * In the arrays below, each subarray consists three elements:\n * * The CSS class of that group when in math mode.\n * * The CSS class of that group when in text mode.\n * * The font name, so that KaTeX can get font metrics.\n */\n\nconst wideLatinLetterData = [["mathbf", "textbf", "Main-Bold"], // A-Z bold upright\n["mathbf", "textbf", "Main-Bold"], // a-z bold upright\n["mathnormal", "textit", "Math-Italic"], // A-Z italic\n["mathnormal", "textit", "Math-Italic"], // a-z italic\n["boldsymbol", "boldsymbol", "Main-BoldItalic"], // A-Z bold italic\n["boldsymbol", "boldsymbol", "Main-BoldItalic"], // a-z bold italic\n// Map fancy A-Z letters to script, not calligraphic.\n// This aligns with unicode-math and math fonts (except Cambria Math).\n["mathscr", "textscr", "Script-Regular"], // A-Z script\n["", "", ""], // a-z script. No font\n["", "", ""], // A-Z bold script. No font\n["", "", ""], // a-z bold script. No font\n["mathfrak", "textfrak", "Fraktur-Regular"], // A-Z Fraktur\n["mathfrak", "textfrak", "Fraktur-Regular"], // a-z Fraktur\n["mathbb", "textbb", "AMS-Regular"], // A-Z double-struck\n["mathbb", "textbb", "AMS-Regular"], // k double-struck\n// Note that we are using a bold font, but font metrics for regular Fraktur.\n["mathboldfrak", "textboldfrak", "Fraktur-Regular"], // A-Z bold Fraktur\n["mathboldfrak", "textboldfrak", "Fraktur-Regular"], // a-z bold Fraktur\n["mathsf", "textsf", "SansSerif-Regular"], // A-Z sans-serif\n["mathsf", "textsf", "SansSerif-Regular"], // a-z sans-serif\n["mathboldsf", "textboldsf", "SansSerif-Bold"], // A-Z bold sans-serif\n["mathboldsf", "textboldsf", "SansSerif-Bold"], // a-z bold sans-serif\n["mathitsf", "textitsf", "SansSerif-Italic"], // A-Z italic sans-serif\n["mathitsf", "textitsf", "SansSerif-Italic"], // a-z italic sans-serif\n["", "", ""], // A-Z bold italic sans. No font\n["", "", ""], // a-z bold italic sans. No font\n["mathtt", "texttt", "Typewriter-Regular"], // A-Z monospace\n["mathtt", "texttt", "Typewriter-Regular"] // a-z monospace\n];\nconst wideNumeralData = [["mathbf", "textbf", "Main-Bold"], // 0-9 bold\n["", "", ""], // 0-9 double-struck. No KaTeX font.\n["mathsf", "textsf", "SansSerif-Regular"], // 0-9 sans-serif\n["mathboldsf", "textboldsf", "SansSerif-Bold"], // 0-9 bold sans-serif\n["mathtt", "texttt", "Typewriter-Regular"] // 0-9 monospace\n];\nconst wideCharacterFont = function (wideChar, mode) {\n // IE doesn\'t support codePointAt(). So work with the surrogate pair.\n const H = wideChar.charCodeAt(0); // high surrogate\n\n const L = wideChar.charCodeAt(1); // low surrogate\n\n const codePoint = (H - 0xD800) * 0x400 + (L - 0xDC00) + 0x10000;\n const j = mode === "math" ? 0 : 1; // column index for CSS class.\n\n if (0x1D400 <= codePoint && codePoint < 0x1D6A4) {\n // wideLatinLetterData contains exactly 26 chars on each row.\n // So we can calculate the relevant row. No traverse necessary.\n const i = Math.floor((codePoint - 0x1D400) / 26);\n return [wideLatinLetterData[i][2], wideLatinLetterData[i][j]];\n } else if (0x1D7CE <= codePoint && codePoint <= 0x1D7FF) {\n // Numerals, ten per row.\n const i = Math.floor((codePoint - 0x1D7CE) / 10);\n return [wideNumeralData[i][2], wideNumeralData[i][j]];\n } else if (codePoint === 0x1D6A5 || codePoint === 0x1D6A6) {\n // dotless i or j\n return [wideLatinLetterData[0][2], wideLatinLetterData[0][j]];\n } else if (0x1D6A6 < codePoint && codePoint < 0x1D7CE) {\n // Greek letters. Not supported, yet.\n return ["", ""];\n } else {\n // We don\'t support any wide characters outside 1D400–1D7FF.\n throw new src_ParseError("Unsupported character: " + wideChar);\n }\n};\n;// CONCATENATED MODULE: ./src/buildCommon.js\n/* eslint no-console:0 */\n\n/**\n * This module contains general functions that can be used for building\n * different kinds of domTree nodes in a consistent manner.\n */\n\n\n\n\n\n\n\n/**\n * Looks up the given symbol in fontMetrics, after applying any symbol\n * replacements defined in symbol.js\n */\nconst lookupSymbol = function (value, // TODO(#963): Use a union type for this.\nfontName, mode) {\n // Replace the value with its replaced value from symbol.js\n if (src_symbols[mode][value] && src_symbols[mode][value].replace) {\n value = src_symbols[mode][value].replace;\n }\n\n return {\n value: value,\n metrics: getCharacterMetrics(value, fontName, mode)\n };\n};\n/**\n * Makes a symbolNode after translation via the list of symbols in symbols.js.\n * Correctly pulls out metrics for the character, and optionally takes a list of\n * classes to be attached to the node.\n *\n * TODO: make argument order closer to makeSpan\n * TODO: add a separate argument for math class (e.g. `mop`, `mbin`), which\n * should if present come first in `classes`.\n * TODO(#953): Make `options` mandatory and always pass it in.\n */\n\n\nconst makeSymbol = function (value, fontName, mode, options, classes) {\n const lookup = lookupSymbol(value, fontName, mode);\n const metrics = lookup.metrics;\n value = lookup.value;\n let symbolNode;\n\n if (metrics) {\n let italic = metrics.italic;\n\n if (mode === "text" || options && options.font === "mathit") {\n italic = 0;\n }\n\n symbolNode = new SymbolNode(value, metrics.height, metrics.depth, italic, metrics.skew, metrics.width, classes);\n } else {\n // TODO(emily): Figure out a good way to only print this in development\n typeof console !== "undefined" && console.warn("No character metrics " + ("for \'" + value + "\' in style \'" + fontName + "\' and mode \'" + mode + "\'"));\n symbolNode = new SymbolNode(value, 0, 0, 0, 0, 0, classes);\n }\n\n if (options) {\n symbolNode.maxFontSize = options.sizeMultiplier;\n\n if (options.style.isTight()) {\n symbolNode.classes.push("mtight");\n }\n\n const color = options.getColor();\n\n if (color) {\n symbolNode.style.color = color;\n }\n }\n\n return symbolNode;\n};\n/**\n * Makes a symbol in Main-Regular or AMS-Regular.\n * Used for rel, bin, open, close, inner, and punct.\n */\n\n\nconst mathsym = function (value, mode, options, classes) {\n if (classes === void 0) {\n classes = [];\n }\n\n // Decide what font to render the symbol in by its entry in the symbols\n // table.\n // Have a special case for when the value = \\ because the \\ is used as a\n // textord in unsupported command errors but cannot be parsed as a regular\n // text ordinal and is therefore not present as a symbol in the symbols\n // table for text, as well as a special case for boldsymbol because it\n // can be used for bold + and -\n if (options.font === "boldsymbol" && lookupSymbol(value, "Main-Bold", mode).metrics) {\n return makeSymbol(value, "Main-Bold", mode, options, classes.concat(["mathbf"]));\n } else if (value === "\\\\" || src_symbols[mode][value].font === "main") {\n return makeSymbol(value, "Main-Regular", mode, options, classes);\n } else {\n return makeSymbol(value, "AMS-Regular", mode, options, classes.concat(["amsrm"]));\n }\n};\n/**\n * Determines which of the two font names (Main-Bold and Math-BoldItalic) and\n * corresponding style tags (mathbf or boldsymbol) to use for font "boldsymbol",\n * depending on the symbol. Use this function instead of fontMap for font\n * "boldsymbol".\n */\n\n\nconst boldsymbol = function (value, mode, options, classes, type) {\n if (type !== "textord" && lookupSymbol(value, "Math-BoldItalic", mode).metrics) {\n return {\n fontName: "Math-BoldItalic",\n fontClass: "boldsymbol"\n };\n } else {\n // Some glyphs do not exist in Math-BoldItalic so we need to use\n // Main-Bold instead.\n return {\n fontName: "Main-Bold",\n fontClass: "mathbf"\n };\n }\n};\n/**\n * Makes either a mathord or textord in the correct font and color.\n */\n\n\nconst makeOrd = function (group, options, type) {\n const mode = group.mode;\n const text = group.text;\n const classes = ["mord"]; // Math mode or Old font (i.e. \\rm)\n\n const isFont = mode === "math" || mode === "text" && options.font;\n const fontOrFamily = isFont ? options.font : options.fontFamily;\n let wideFontName = "";\n let wideFontClass = "";\n\n if (text.charCodeAt(0) === 0xD835) {\n [wideFontName, wideFontClass] = wideCharacterFont(text, mode);\n }\n\n if (wideFontName.length > 0) {\n // surrogate pairs get special treatment\n return makeSymbol(text, wideFontName, mode, options, classes.concat(wideFontClass));\n } else if (fontOrFamily) {\n let fontName;\n let fontClasses;\n\n if (fontOrFamily === "boldsymbol") {\n const fontData = boldsymbol(text, mode, options, classes, type);\n fontName = fontData.fontName;\n fontClasses = [fontData.fontClass];\n } else if (isFont) {\n fontName = fontMap[fontOrFamily].fontName;\n fontClasses = [fontOrFamily];\n } else {\n fontName = retrieveTextFontName(fontOrFamily, options.fontWeight, options.fontShape);\n fontClasses = [fontOrFamily, options.fontWeight, options.fontShape];\n }\n\n if (lookupSymbol(text, fontName, mode).metrics) {\n return makeSymbol(text, fontName, mode, options, classes.concat(fontClasses));\n } else if (ligatures.hasOwnProperty(text) && fontName.slice(0, 10) === "Typewriter") {\n // Deconstruct ligatures in monospace fonts (\\texttt, \\tt).\n const parts = [];\n\n for (let i = 0; i < text.length; i++) {\n parts.push(makeSymbol(text[i], fontName, mode, options, classes.concat(fontClasses)));\n }\n\n return makeFragment(parts);\n }\n } // Makes a symbol in the default font for mathords and textords.\n\n\n if (type === "mathord") {\n return makeSymbol(text, "Math-Italic", mode, options, classes.concat(["mathnormal"]));\n } else if (type === "textord") {\n const font = src_symbols[mode][text] && src_symbols[mode][text].font;\n\n if (font === "ams") {\n const fontName = retrieveTextFontName("amsrm", options.fontWeight, options.fontShape);\n return makeSymbol(text, fontName, mode, options, classes.concat("amsrm", options.fontWeight, options.fontShape));\n } else if (font === "main" || !font) {\n const fontName = retrieveTextFontName("textrm", options.fontWeight, options.fontShape);\n return makeSymbol(text, fontName, mode, options, classes.concat(options.fontWeight, options.fontShape));\n } else {\n // fonts added by plugins\n const fontName = retrieveTextFontName(font, options.fontWeight, options.fontShape); // We add font name as a css class\n\n return makeSymbol(text, fontName, mode, options, classes.concat(fontName, options.fontWeight, options.fontShape));\n }\n } else {\n throw new Error("unexpected type: " + type + " in makeOrd");\n }\n};\n/**\n * Returns true if subsequent symbolNodes have the same classes, skew, maxFont,\n * and styles.\n */\n\n\nconst canCombine = (prev, next) => {\n if (createClass(prev.classes) !== createClass(next.classes) || prev.skew !== next.skew || prev.maxFontSize !== next.maxFontSize) {\n return false;\n } // If prev and next both are just "mbin"s or "mord"s we don\'t combine them\n // so that the proper spacing can be preserved.\n\n\n if (prev.classes.length === 1) {\n const cls = prev.classes[0];\n\n if (cls === "mbin" || cls === "mord") {\n return false;\n }\n }\n\n for (const style in prev.style) {\n if (prev.style.hasOwnProperty(style) && prev.style[style] !== next.style[style]) {\n return false;\n }\n }\n\n for (const style in next.style) {\n if (next.style.hasOwnProperty(style) && prev.style[style] !== next.style[style]) {\n return false;\n }\n }\n\n return true;\n};\n/**\n * Combine consecutive domTree.symbolNodes into a single symbolNode.\n * Note: this function mutates the argument.\n */\n\n\nconst tryCombineChars = chars => {\n for (let i = 0; i < chars.length - 1; i++) {\n const prev = chars[i];\n const next = chars[i + 1];\n\n if (prev instanceof SymbolNode && next instanceof SymbolNode && canCombine(prev, next)) {\n prev.text += next.text;\n prev.height = Math.max(prev.height, next.height);\n prev.depth = Math.max(prev.depth, next.depth); // Use the last character\'s italic correction since we use\n // it to add padding to the right of the span created from\n // the combined characters.\n\n prev.italic = next.italic;\n chars.splice(i + 1, 1);\n i--;\n }\n }\n\n return chars;\n};\n/**\n * Calculate the height, depth, and maxFontSize of an element based on its\n * children.\n */\n\n\nconst sizeElementFromChildren = function (elem) {\n let height = 0;\n let depth = 0;\n let maxFontSize = 0;\n\n for (let i = 0; i < elem.children.length; i++) {\n const child = elem.children[i];\n\n if (child.height > height) {\n height = child.height;\n }\n\n if (child.depth > depth) {\n depth = child.depth;\n }\n\n if (child.maxFontSize > maxFontSize) {\n maxFontSize = child.maxFontSize;\n }\n }\n\n elem.height = height;\n elem.depth = depth;\n elem.maxFontSize = maxFontSize;\n};\n/**\n * Makes a span with the given list of classes, list of children, and options.\n *\n * TODO(#953): Ensure that `options` is always provided (currently some call\n * sites don\'t pass it) and make the type below mandatory.\n * TODO: add a separate argument for math class (e.g. `mop`, `mbin`), which\n * should if present come first in `classes`.\n */\n\n\nconst makeSpan = function (classes, children, options, style) {\n const span = new Span(classes, children, options, style);\n sizeElementFromChildren(span);\n return span;\n}; // SVG one is simpler -- doesn\'t require height, depth, max-font setting.\n// This is also a separate method for typesafety.\n\n\nconst makeSvgSpan = (classes, children, options, style) => new Span(classes, children, options, style);\n\nconst makeLineSpan = function (className, options, thickness) {\n const line = makeSpan([className], [], options);\n line.height = Math.max(thickness || options.fontMetrics().defaultRuleThickness, options.minRuleThickness);\n line.style.borderBottomWidth = makeEm(line.height);\n line.maxFontSize = 1.0;\n return line;\n};\n/**\n * Makes an anchor with the given href, list of classes, list of children,\n * and options.\n */\n\n\nconst makeAnchor = function (href, classes, children, options) {\n const anchor = new Anchor(href, classes, children, options);\n sizeElementFromChildren(anchor);\n return anchor;\n};\n/**\n * Makes a document fragment with the given list of children.\n */\n\n\nconst makeFragment = function (children) {\n const fragment = new DocumentFragment(children);\n sizeElementFromChildren(fragment);\n return fragment;\n};\n/**\n * Wraps group in a span if it\'s a document fragment, allowing to apply classes\n * and styles\n */\n\n\nconst wrapFragment = function (group, options) {\n if (group instanceof DocumentFragment) {\n return makeSpan([], [group], options);\n }\n\n return group;\n}; // These are exact object types to catch typos in the names of the optional fields.\n\n\n// Computes the updated `children` list and the overall depth.\n//\n// This helper function for makeVList makes it easier to enforce type safety by\n// allowing early exits (returns) in the logic.\nconst getVListChildrenAndDepth = function (params) {\n if (params.positionType === "individualShift") {\n const oldChildren = params.children;\n const children = [oldChildren[0]]; // Add in kerns to the list of params.children to get each element to be\n // shifted to the correct specified shift\n\n const depth = -oldChildren[0].shift - oldChildren[0].elem.depth;\n let currPos = depth;\n\n for (let i = 1; i < oldChildren.length; i++) {\n const diff = -oldChildren[i].shift - currPos - oldChildren[i].elem.depth;\n const size = diff - (oldChildren[i - 1].elem.height + oldChildren[i - 1].elem.depth);\n currPos = currPos + diff;\n children.push({\n type: "kern",\n size\n });\n children.push(oldChildren[i]);\n }\n\n return {\n children,\n depth\n };\n }\n\n let depth;\n\n if (params.positionType === "top") {\n // We always start at the bottom, so calculate the bottom by adding up\n // all the sizes\n let bottom = params.positionData;\n\n for (let i = 0; i < params.children.length; i++) {\n const child = params.children[i];\n bottom -= child.type === "kern" ? child.size : child.elem.height + child.elem.depth;\n }\n\n depth = bottom;\n } else if (params.positionType === "bottom") {\n depth = -params.positionData;\n } else {\n const firstChild = params.children[0];\n\n if (firstChild.type !== "elem") {\n throw new Error(\'First child must have type "elem".\');\n }\n\n if (params.positionType === "shift") {\n depth = -firstChild.elem.depth - params.positionData;\n } else if (params.positionType === "firstBaseline") {\n depth = -firstChild.elem.depth;\n } else {\n throw new Error("Invalid positionType " + params.positionType + ".");\n }\n }\n\n return {\n children: params.children,\n depth\n };\n};\n/**\n * Makes a vertical list by stacking elements and kerns on top of each other.\n * Allows for many different ways of specifying the positioning method.\n *\n * See VListParam documentation above.\n */\n\n\nconst makeVList = function (params, options) {\n const {\n children,\n depth\n } = getVListChildrenAndDepth(params); // Create a strut that is taller than any list item. The strut is added to\n // each item, where it will determine the item\'s baseline. Since it has\n // `overflow:hidden`, the strut\'s top edge will sit on the item\'s line box\'s\n // top edge and the strut\'s bottom edge will sit on the item\'s baseline,\n // with no additional line-height spacing. This allows the item baseline to\n // be positioned precisely without worrying about font ascent and\n // line-height.\n\n let pstrutSize = 0;\n\n for (let i = 0; i < children.length; i++) {\n const child = children[i];\n\n if (child.type === "elem") {\n const elem = child.elem;\n pstrutSize = Math.max(pstrutSize, elem.maxFontSize, elem.height);\n }\n }\n\n pstrutSize += 2;\n const pstrut = makeSpan(["pstrut"], []);\n pstrut.style.height = makeEm(pstrutSize); // Create a new list of actual children at the correct offsets\n\n const realChildren = [];\n let minPos = depth;\n let maxPos = depth;\n let currPos = depth;\n\n for (let i = 0; i < children.length; i++) {\n const child = children[i];\n\n if (child.type === "kern") {\n currPos += child.size;\n } else {\n const elem = child.elem;\n const classes = child.wrapperClasses || [];\n const style = child.wrapperStyle || {};\n const childWrap = makeSpan(classes, [pstrut, elem], undefined, style);\n childWrap.style.top = makeEm(-pstrutSize - currPos - elem.depth);\n\n if (child.marginLeft) {\n childWrap.style.marginLeft = child.marginLeft;\n }\n\n if (child.marginRight) {\n childWrap.style.marginRight = child.marginRight;\n }\n\n realChildren.push(childWrap);\n currPos += elem.height + elem.depth;\n }\n\n minPos = Math.min(minPos, currPos);\n maxPos = Math.max(maxPos, currPos);\n } // The vlist contents go in a table-cell with `vertical-align:bottom`.\n // This cell\'s bottom edge will determine the containing table\'s baseline\n // without overly expanding the containing line-box.\n\n\n const vlist = makeSpan(["vlist"], realChildren);\n vlist.style.height = makeEm(maxPos); // A second row is used if necessary to represent the vlist\'s depth.\n\n let rows;\n\n if (minPos < 0) {\n // We will define depth in an empty span with display: table-cell.\n // It should render with the height that we define. But Chrome, in\n // contenteditable mode only, treats that span as if it contains some\n // text content. And that min-height over-rides our desired height.\n // So we put another empty span inside the depth strut span.\n const emptySpan = makeSpan([], []);\n const depthStrut = makeSpan(["vlist"], [emptySpan]);\n depthStrut.style.height = makeEm(-minPos); // Safari wants the first row to have inline content; otherwise it\n // puts the bottom of the *second* row on the baseline.\n\n const topStrut = makeSpan(["vlist-s"], [new SymbolNode("\\u200b")]);\n rows = [makeSpan(["vlist-r"], [vlist, topStrut]), makeSpan(["vlist-r"], [depthStrut])];\n } else {\n rows = [makeSpan(["vlist-r"], [vlist])];\n }\n\n const vtable = makeSpan(["vlist-t"], rows);\n\n if (rows.length === 2) {\n vtable.classes.push("vlist-t2");\n }\n\n vtable.height = maxPos;\n vtable.depth = -minPos;\n return vtable;\n}; // Glue is a concept from TeX which is a flexible space between elements in\n// either a vertical or horizontal list. In KaTeX, at least for now, it\'s\n// static space between elements in a horizontal layout.\n\n\nconst makeGlue = (measurement, options) => {\n // Make an empty span for the space\n const rule = makeSpan(["mspace"], [], options);\n const size = calculateSize(measurement, options);\n rule.style.marginRight = makeEm(size);\n return rule;\n}; // Takes font options, and returns the appropriate fontLookup name\n\n\nconst retrieveTextFontName = function (fontFamily, fontWeight, fontShape) {\n let baseFontName = "";\n\n switch (fontFamily) {\n case "amsrm":\n baseFontName = "AMS";\n break;\n\n case "textrm":\n baseFontName = "Main";\n break;\n\n case "textsf":\n baseFontName = "SansSerif";\n break;\n\n case "texttt":\n baseFontName = "Typewriter";\n break;\n\n default:\n baseFontName = fontFamily;\n // use fonts added by a plugin\n }\n\n let fontStylesName;\n\n if (fontWeight === "textbf" && fontShape === "textit") {\n fontStylesName = "BoldItalic";\n } else if (fontWeight === "textbf") {\n fontStylesName = "Bold";\n } else if (fontWeight === "textit") {\n fontStylesName = "Italic";\n } else {\n fontStylesName = "Regular";\n }\n\n return baseFontName + "-" + fontStylesName;\n};\n/**\n * Maps TeX font commands to objects containing:\n * - variant: string used for "mathvariant" attribute in buildMathML.js\n * - fontName: the "style" parameter to fontMetrics.getCharacterMetrics\n */\n// A map between tex font commands an MathML mathvariant attribute values\n\n\nconst fontMap = {\n // styles\n "mathbf": {\n variant: "bold",\n fontName: "Main-Bold"\n },\n "mathrm": {\n variant: "normal",\n fontName: "Main-Regular"\n },\n "textit": {\n variant: "italic",\n fontName: "Main-Italic"\n },\n "mathit": {\n variant: "italic",\n fontName: "Main-Italic"\n },\n "mathnormal": {\n variant: "italic",\n fontName: "Math-Italic"\n },\n "mathsfit": {\n variant: "sans-serif-italic",\n fontName: "SansSerif-Italic"\n },\n // "boldsymbol" is missing because they require the use of multiple fonts:\n // Math-BoldItalic and Main-Bold. This is handled by a special case in\n // makeOrd which ends up calling boldsymbol.\n // families\n "mathbb": {\n variant: "double-struck",\n fontName: "AMS-Regular"\n },\n "mathcal": {\n variant: "script",\n fontName: "Caligraphic-Regular"\n },\n "mathfrak": {\n variant: "fraktur",\n fontName: "Fraktur-Regular"\n },\n "mathscr": {\n variant: "script",\n fontName: "Script-Regular"\n },\n "mathsf": {\n variant: "sans-serif",\n fontName: "SansSerif-Regular"\n },\n "mathtt": {\n variant: "monospace",\n fontName: "Typewriter-Regular"\n }\n};\nconst svgData = {\n // path, width, height\n vec: ["vec", 0.471, 0.714],\n // values from the font glyph\n oiintSize1: ["oiintSize1", 0.957, 0.499],\n // oval to overlay the integrand\n oiintSize2: ["oiintSize2", 1.472, 0.659],\n oiiintSize1: ["oiiintSize1", 1.304, 0.499],\n oiiintSize2: ["oiiintSize2", 1.98, 0.659]\n};\n\nconst staticSvg = function (value, options) {\n // Create a span with inline SVG for the element.\n const [pathName, width, height] = svgData[value];\n const path = new PathNode(pathName);\n const svgNode = new SvgNode([path], {\n "width": makeEm(width),\n "height": makeEm(height),\n // Override CSS rule `.katex svg { width: 100% }`\n "style": "width:" + makeEm(width),\n "viewBox": "0 0 " + 1000 * width + " " + 1000 * height,\n "preserveAspectRatio": "xMinYMin"\n });\n const span = makeSvgSpan(["overlay"], [svgNode], options);\n span.height = height;\n span.style.height = makeEm(height);\n span.style.width = makeEm(width);\n return span;\n};\n\n/* harmony default export */ var buildCommon = ({\n fontMap,\n makeSymbol,\n mathsym,\n makeSpan,\n makeSvgSpan,\n makeLineSpan,\n makeAnchor,\n makeFragment,\n wrapFragment,\n makeVList,\n makeOrd,\n makeGlue,\n staticSvg,\n svgData,\n tryCombineChars\n});\n;// CONCATENATED MODULE: ./src/spacingData.js\n/**\n * Describes spaces between different classes of atoms.\n */\nconst thinspace = {\n number: 3,\n unit: "mu"\n};\nconst mediumspace = {\n number: 4,\n unit: "mu"\n};\nconst thickspace = {\n number: 5,\n unit: "mu"\n}; // Making the type below exact with all optional fields doesn\'t work due to\n// - https://github.com/facebook/flow/issues/4582\n// - https://github.com/facebook/flow/issues/5688\n// However, since *all* fields are optional, $Shape<> works as suggested in 5688\n// above.\n\n// Spacing relationships for display and text styles\nconst spacings = {\n mord: {\n mop: thinspace,\n mbin: mediumspace,\n mrel: thickspace,\n minner: thinspace\n },\n mop: {\n mord: thinspace,\n mop: thinspace,\n mrel: thickspace,\n minner: thinspace\n },\n mbin: {\n mord: mediumspace,\n mop: mediumspace,\n mopen: mediumspace,\n minner: mediumspace\n },\n mrel: {\n mord: thickspace,\n mop: thickspace,\n mopen: thickspace,\n minner: thickspace\n },\n mopen: {},\n mclose: {\n mop: thinspace,\n mbin: mediumspace,\n mrel: thickspace,\n minner: thinspace\n },\n mpunct: {\n mord: thinspace,\n mop: thinspace,\n mrel: thickspace,\n mopen: thinspace,\n mclose: thinspace,\n mpunct: thinspace,\n minner: thinspace\n },\n minner: {\n mord: thinspace,\n mop: thinspace,\n mbin: mediumspace,\n mrel: thickspace,\n mopen: thinspace,\n mpunct: thinspace,\n minner: thinspace\n }\n}; // Spacing relationships for script and scriptscript styles\n\nconst tightSpacings = {\n mord: {\n mop: thinspace\n },\n mop: {\n mord: thinspace,\n mop: thinspace\n },\n mbin: {},\n mrel: {},\n mopen: {},\n mclose: {\n mop: thinspace\n },\n mpunct: {},\n minner: {\n mop: thinspace\n }\n};\n;// CONCATENATED MODULE: ./src/defineFunction.js\n/** Context provided to function handlers for error messages. */\n// Note: reverse the order of the return type union will cause a flow error.\n// See https://github.com/facebook/flow/issues/3663.\n// More general version of `HtmlBuilder` for nodes (e.g. \\sum, accent types)\n// whose presence impacts super/subscripting. In this case, ParseNode<"supsub">\n// delegates its HTML building to the HtmlBuilder corresponding to these nodes.\n\n/**\n * Final function spec for use at parse time.\n * This is almost identical to `FunctionPropSpec`, except it\n * 1. includes the function handler, and\n * 2. requires all arguments except argTypes.\n * It is generated by `defineFunction()` below.\n */\n\n/**\n * All registered functions.\n * `functions.js` just exports this same dictionary again and makes it public.\n * `Parser.js` requires this dictionary.\n */\nconst _functions = {};\n/**\n * All HTML builders. Should be only used in the `define*` and the `build*ML`\n * functions.\n */\n\nconst _htmlGroupBuilders = {};\n/**\n * All MathML builders. Should be only used in the `define*` and the `build*ML`\n * functions.\n */\n\nconst _mathmlGroupBuilders = {};\nfunction defineFunction(_ref) {\n let {\n type,\n names,\n props,\n handler,\n htmlBuilder,\n mathmlBuilder\n } = _ref;\n // Set default values of functions\n const data = {\n type,\n numArgs: props.numArgs,\n argTypes: props.argTypes,\n allowedInArgument: !!props.allowedInArgument,\n allowedInText: !!props.allowedInText,\n allowedInMath: props.allowedInMath === undefined ? true : props.allowedInMath,\n numOptionalArgs: props.numOptionalArgs || 0,\n infix: !!props.infix,\n primitive: !!props.primitive,\n handler: handler\n };\n\n for (let i = 0; i < names.length; ++i) {\n _functions[names[i]] = data;\n }\n\n if (type) {\n if (htmlBuilder) {\n _htmlGroupBuilders[type] = htmlBuilder;\n }\n\n if (mathmlBuilder) {\n _mathmlGroupBuilders[type] = mathmlBuilder;\n }\n }\n}\n/**\n * Use this to register only the HTML and MathML builders for a function (e.g.\n * if the function\'s ParseNode is generated in Parser.js rather than via a\n * stand-alone handler provided to `defineFunction`).\n */\n\nfunction defineFunctionBuilders(_ref2) {\n let {\n type,\n htmlBuilder,\n mathmlBuilder\n } = _ref2;\n defineFunction({\n type,\n names: [],\n props: {\n numArgs: 0\n },\n\n handler() {\n throw new Error(\'Should never be called.\');\n },\n\n htmlBuilder,\n mathmlBuilder\n });\n}\nconst normalizeArgument = function (arg) {\n return arg.type === "ordgroup" && arg.body.length === 1 ? arg.body[0] : arg;\n}; // Since the corresponding buildHTML/buildMathML function expects a\n// list of elements, we normalize for different kinds of arguments\n\nconst ordargument = function (arg) {\n return arg.type === "ordgroup" ? arg.body : [arg];\n};\n;// CONCATENATED MODULE: ./src/buildHTML.js\n/**\n * This file does the main work of building a domTree structure from a parse\n * tree. The entry point is the `buildHTML` function, which takes a parse tree.\n * Then, the buildExpression, buildGroup, and various groupBuilders functions\n * are called, to produce a final HTML tree.\n */\n\n\n\n\n\n\n\n\n\nconst buildHTML_makeSpan = buildCommon.makeSpan; // Binary atoms (first class `mbin`) change into ordinary atoms (`mord`)\n// depending on their surroundings. See TeXbook pg. 442-446, Rules 5 and 6,\n// and the text before Rule 19.\n\nconst binLeftCanceller = ["leftmost", "mbin", "mopen", "mrel", "mop", "mpunct"];\nconst binRightCanceller = ["rightmost", "mrel", "mclose", "mpunct"];\nconst styleMap = {\n "display": src_Style.DISPLAY,\n "text": src_Style.TEXT,\n "script": src_Style.SCRIPT,\n "scriptscript": src_Style.SCRIPTSCRIPT\n};\nconst DomEnum = {\n mord: "mord",\n mop: "mop",\n mbin: "mbin",\n mrel: "mrel",\n mopen: "mopen",\n mclose: "mclose",\n mpunct: "mpunct",\n minner: "minner"\n};\n\n/**\n * Take a list of nodes, build them in order, and return a list of the built\n * nodes. documentFragments are flattened into their contents, so the\n * returned list contains no fragments. `isRealGroup` is true if `expression`\n * is a real group (no atoms will be added on either side), as opposed to\n * a partial group (e.g. one created by \\color). `surrounding` is an array\n * consisting type of nodes that will be added to the left and right.\n */\nconst buildExpression = function (expression, options, isRealGroup, surrounding) {\n if (surrounding === void 0) {\n surrounding = [null, null];\n }\n\n // Parse expressions into `groups`.\n const groups = [];\n\n for (let i = 0; i < expression.length; i++) {\n const output = buildGroup(expression[i], options);\n\n if (output instanceof DocumentFragment) {\n const children = output.children;\n groups.push(...children);\n } else {\n groups.push(output);\n }\n } // Combine consecutive domTree.symbolNodes into a single symbolNode.\n\n\n buildCommon.tryCombineChars(groups); // If `expression` is a partial group, let the parent handle spacings\n // to avoid processing groups multiple times.\n\n if (!isRealGroup) {\n return groups;\n }\n\n let glueOptions = options;\n\n if (expression.length === 1) {\n const node = expression[0];\n\n if (node.type === "sizing") {\n glueOptions = options.havingSize(node.size);\n } else if (node.type === "styling") {\n glueOptions = options.havingStyle(styleMap[node.style]);\n }\n } // Dummy spans for determining spacings between surrounding atoms.\n // If `expression` has no atoms on the left or right, class "leftmost"\n // or "rightmost", respectively, is used to indicate it.\n\n\n const dummyPrev = buildHTML_makeSpan([surrounding[0] || "leftmost"], [], options);\n const dummyNext = buildHTML_makeSpan([surrounding[1] || "rightmost"], [], options); // TODO: These code assumes that a node\'s math class is the first element\n // of its `classes` array. A later cleanup should ensure this, for\n // instance by changing the signature of `makeSpan`.\n // Before determining what spaces to insert, perform bin cancellation.\n // Binary operators change to ordinary symbols in some contexts.\n\n const isRoot = isRealGroup === "root";\n traverseNonSpaceNodes(groups, (node, prev) => {\n const prevType = prev.classes[0];\n const type = node.classes[0];\n\n if (prevType === "mbin" && utils.contains(binRightCanceller, type)) {\n prev.classes[0] = "mord";\n } else if (type === "mbin" && utils.contains(binLeftCanceller, prevType)) {\n node.classes[0] = "mord";\n }\n }, {\n node: dummyPrev\n }, dummyNext, isRoot);\n traverseNonSpaceNodes(groups, (node, prev) => {\n const prevType = getTypeOfDomTree(prev);\n const type = getTypeOfDomTree(node); // \'mtight\' indicates that the node is script or scriptscript style.\n\n const space = prevType && type ? node.hasClass("mtight") ? tightSpacings[prevType][type] : spacings[prevType][type] : null;\n\n if (space) {\n // Insert glue (spacing) after the `prev`.\n return buildCommon.makeGlue(space, glueOptions);\n }\n }, {\n node: dummyPrev\n }, dummyNext, isRoot);\n return groups;\n}; // Depth-first traverse non-space `nodes`, calling `callback` with the current and\n// previous node as arguments, optionally returning a node to insert after the\n// previous node. `prev` is an object with the previous node and `insertAfter`\n// function to insert after it. `next` is a node that will be added to the right.\n// Used for bin cancellation and inserting spacings.\n\nconst traverseNonSpaceNodes = function (nodes, callback, prev, next, isRoot) {\n if (next) {\n // temporarily append the right node, if exists\n nodes.push(next);\n }\n\n let i = 0;\n\n for (; i < nodes.length; i++) {\n const node = nodes[i];\n const partialGroup = checkPartialGroup(node);\n\n if (partialGroup) {\n // Recursive DFS\n // $FlowFixMe: make nodes a $ReadOnlyArray by returning a new array\n traverseNonSpaceNodes(partialGroup.children, callback, prev, null, isRoot);\n continue;\n } // Ignore explicit spaces (e.g., \\;, \\,) when determining what implicit\n // spacing should go between atoms of different classes\n\n\n const nonspace = !node.hasClass("mspace");\n\n if (nonspace) {\n const result = callback(node, prev.node);\n\n if (result) {\n if (prev.insertAfter) {\n prev.insertAfter(result);\n } else {\n // insert at front\n nodes.unshift(result);\n i++;\n }\n }\n }\n\n if (nonspace) {\n prev.node = node;\n } else if (isRoot && node.hasClass("newline")) {\n prev.node = buildHTML_makeSpan(["leftmost"]); // treat like beginning of line\n }\n\n prev.insertAfter = (index => n => {\n nodes.splice(index + 1, 0, n);\n i++;\n })(i);\n }\n\n if (next) {\n nodes.pop();\n }\n}; // Check if given node is a partial group, i.e., does not affect spacing around.\n\n\nconst checkPartialGroup = function (node) {\n if (node instanceof DocumentFragment || node instanceof Anchor || node instanceof Span && node.hasClass("enclosing")) {\n return node;\n }\n\n return null;\n}; // Return the outermost node of a domTree.\n\n\nconst getOutermostNode = function (node, side) {\n const partialGroup = checkPartialGroup(node);\n\n if (partialGroup) {\n const children = partialGroup.children;\n\n if (children.length) {\n if (side === "right") {\n return getOutermostNode(children[children.length - 1], "right");\n } else if (side === "left") {\n return getOutermostNode(children[0], "left");\n }\n }\n }\n\n return node;\n}; // Return math atom class (mclass) of a domTree.\n// If `side` is given, it will get the type of the outermost node at given side.\n\n\nconst getTypeOfDomTree = function (node, side) {\n if (!node) {\n return null;\n }\n\n if (side) {\n node = getOutermostNode(node, side);\n } // This makes a lot of assumptions as to where the type of atom\n // appears. We should do a better job of enforcing this.\n\n\n return DomEnum[node.classes[0]] || null;\n};\nconst makeNullDelimiter = function (options, classes) {\n const moreClasses = ["nulldelimiter"].concat(options.baseSizingClasses());\n return buildHTML_makeSpan(classes.concat(moreClasses));\n};\n/**\n * buildGroup is the function that takes a group and calls the correct groupType\n * function for it. It also handles the interaction of size and style changes\n * between parents and children.\n */\n\nconst buildGroup = function (group, options, baseOptions) {\n if (!group) {\n return buildHTML_makeSpan();\n }\n\n if (_htmlGroupBuilders[group.type]) {\n // Call the groupBuilders function\n // $FlowFixMe\n let groupNode = _htmlGroupBuilders[group.type](group, options); // If the size changed between the parent and the current group, account\n // for that size difference.\n\n if (baseOptions && options.size !== baseOptions.size) {\n groupNode = buildHTML_makeSpan(options.sizingClasses(baseOptions), [groupNode], options);\n const multiplier = options.sizeMultiplier / baseOptions.sizeMultiplier;\n groupNode.height *= multiplier;\n groupNode.depth *= multiplier;\n }\n\n return groupNode;\n } else {\n throw new src_ParseError("Got group of unknown type: \'" + group.type + "\'");\n }\n};\n/**\n * Combine an array of HTML DOM nodes (e.g., the output of `buildExpression`)\n * into an unbreakable HTML node of class .base, with proper struts to\n * guarantee correct vertical extent. `buildHTML` calls this repeatedly to\n * make up the entire expression as a sequence of unbreakable units.\n */\n\nfunction buildHTMLUnbreakable(children, options) {\n // Compute height and depth of this chunk.\n const body = buildHTML_makeSpan(["base"], children, options); // Add strut, which ensures that the top of the HTML element falls at\n // the height of the expression, and the bottom of the HTML element\n // falls at the depth of the expression.\n\n const strut = buildHTML_makeSpan(["strut"]);\n strut.style.height = makeEm(body.height + body.depth);\n\n if (body.depth) {\n strut.style.verticalAlign = makeEm(-body.depth);\n }\n\n body.children.unshift(strut);\n return body;\n}\n/**\n * Take an entire parse tree, and build it into an appropriate set of HTML\n * nodes.\n */\n\n\nfunction buildHTML(tree, options) {\n // Strip off outer tag wrapper for processing below.\n let tag = null;\n\n if (tree.length === 1 && tree[0].type === "tag") {\n tag = tree[0].tag;\n tree = tree[0].body;\n } // Build the expression contained in the tree\n\n\n const expression = buildExpression(tree, options, "root");\n let eqnNum;\n\n if (expression.length === 2 && expression[1].hasClass("tag")) {\n // An environment with automatic equation numbers, e.g. {gather}.\n eqnNum = expression.pop();\n }\n\n const children = []; // Create one base node for each chunk between potential line breaks.\n // The TeXBook [p.173] says "A formula will be broken only after a\n // relation symbol like $=$ or $<$ or $\\rightarrow$, or after a binary\n // operation symbol like $+$ or $-$ or $\\times$, where the relation or\n // binary operation is on the ``outer level\'\' of the formula (i.e., not\n // enclosed in {...} and not part of an \\over construction)."\n\n let parts = [];\n\n for (let i = 0; i < expression.length; i++) {\n parts.push(expression[i]);\n\n if (expression[i].hasClass("mbin") || expression[i].hasClass("mrel") || expression[i].hasClass("allowbreak")) {\n // Put any post-operator glue on same line as operator.\n // Watch for \\nobreak along the way, and stop at \\newline.\n let nobreak = false;\n\n while (i < expression.length - 1 && expression[i + 1].hasClass("mspace") && !expression[i + 1].hasClass("newline")) {\n i++;\n parts.push(expression[i]);\n\n if (expression[i].hasClass("nobreak")) {\n nobreak = true;\n }\n } // Don\'t allow break if \\nobreak among the post-operator glue.\n\n\n if (!nobreak) {\n children.push(buildHTMLUnbreakable(parts, options));\n parts = [];\n }\n } else if (expression[i].hasClass("newline")) {\n // Write the line except the newline\n parts.pop();\n\n if (parts.length > 0) {\n children.push(buildHTMLUnbreakable(parts, options));\n parts = [];\n } // Put the newline at the top level\n\n\n children.push(expression[i]);\n }\n }\n\n if (parts.length > 0) {\n children.push(buildHTMLUnbreakable(parts, options));\n } // Now, if there was a tag, build it too and append it as a final child.\n\n\n let tagChild;\n\n if (tag) {\n tagChild = buildHTMLUnbreakable(buildExpression(tag, options, true));\n tagChild.classes = ["tag"];\n children.push(tagChild);\n } else if (eqnNum) {\n children.push(eqnNum);\n }\n\n const htmlNode = buildHTML_makeSpan(["katex-html"], children);\n htmlNode.setAttribute("aria-hidden", "true"); // Adjust the strut of the tag to be the maximum height of all children\n // (the height of the enclosing htmlNode) for proper vertical alignment.\n\n if (tagChild) {\n const strut = tagChild.children[0];\n strut.style.height = makeEm(htmlNode.height + htmlNode.depth);\n\n if (htmlNode.depth) {\n strut.style.verticalAlign = makeEm(-htmlNode.depth);\n }\n }\n\n return htmlNode;\n}\n;// CONCATENATED MODULE: ./src/mathMLTree.js\n/**\n * These objects store data about MathML nodes. This is the MathML equivalent\n * of the types in domTree.js. Since MathML handles its own rendering, and\n * since we\'re mainly using MathML to improve accessibility, we don\'t manage\n * any of the styling state that the plain DOM nodes do.\n *\n * The `toNode` and `toMarkup` functions work similarly to how they do in\n * domTree.js, creating namespaced DOM nodes and HTML text markup respectively.\n */\n\n\n\n\nfunction newDocumentFragment(children) {\n return new DocumentFragment(children);\n}\n/**\n * This node represents a general purpose MathML node of any type. The\n * constructor requires the type of node to create (for example, `"mo"` or\n * `"mspace"`, corresponding to `` and `` tags).\n */\n\nclass MathNode {\n constructor(type, children, classes) {\n this.type = void 0;\n this.attributes = void 0;\n this.children = void 0;\n this.classes = void 0;\n this.type = type;\n this.attributes = {};\n this.children = children || [];\n this.classes = classes || [];\n }\n /**\n * Sets an attribute on a MathML node. MathML depends on attributes to convey a\n * semantic content, so this is used heavily.\n */\n\n\n setAttribute(name, value) {\n this.attributes[name] = value;\n }\n /**\n * Gets an attribute on a MathML node.\n */\n\n\n getAttribute(name) {\n return this.attributes[name];\n }\n /**\n * Converts the math node into a MathML-namespaced DOM element.\n */\n\n\n toNode() {\n const node = document.createElementNS("http://www.w3.org/1998/Math/MathML", this.type);\n\n for (const attr in this.attributes) {\n if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) {\n node.setAttribute(attr, this.attributes[attr]);\n }\n }\n\n if (this.classes.length > 0) {\n node.className = createClass(this.classes);\n }\n\n for (let i = 0; i < this.children.length; i++) {\n // Combine multiple TextNodes into one TextNode, to prevent\n // screen readers from reading each as a separate word [#3995]\n if (this.children[i] instanceof TextNode && this.children[i + 1] instanceof TextNode) {\n let text = this.children[i].toText() + this.children[++i].toText();\n\n while (this.children[i + 1] instanceof TextNode) {\n text += this.children[++i].toText();\n }\n\n node.appendChild(new TextNode(text).toNode());\n } else {\n node.appendChild(this.children[i].toNode());\n }\n }\n\n return node;\n }\n /**\n * Converts the math node into an HTML markup string.\n */\n\n\n toMarkup() {\n let markup = "<" + this.type; // Add the attributes\n\n for (const attr in this.attributes) {\n if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) {\n markup += " " + attr + "=\\"";\n markup += utils.escape(this.attributes[attr]);\n markup += "\\"";\n }\n }\n\n if (this.classes.length > 0) {\n markup += " class =\\"" + utils.escape(createClass(this.classes)) + "\\"";\n }\n\n markup += ">";\n\n for (let i = 0; i < this.children.length; i++) {\n markup += this.children[i].toMarkup();\n }\n\n markup += "";\n return markup;\n }\n /**\n * Converts the math node into a string, similar to innerText, but escaped.\n */\n\n\n toText() {\n return this.children.map(child => child.toText()).join("");\n }\n\n}\n/**\n * This node represents a piece of text.\n */\n\nclass TextNode {\n constructor(text) {\n this.text = void 0;\n this.text = text;\n }\n /**\n * Converts the text node into a DOM text node.\n */\n\n\n toNode() {\n return document.createTextNode(this.text);\n }\n /**\n * Converts the text node into escaped HTML markup\n * (representing the text itself).\n */\n\n\n toMarkup() {\n return utils.escape(this.toText());\n }\n /**\n * Converts the text node into a string\n * (representing the text itself).\n */\n\n\n toText() {\n return this.text;\n }\n\n}\n/**\n * This node represents a space, but may render as or as text,\n * depending on the width.\n */\n\nclass SpaceNode {\n /**\n * Create a Space node with width given in CSS ems.\n */\n constructor(width) {\n this.width = void 0;\n this.character = void 0;\n this.width = width; // See https://www.w3.org/TR/2000/WD-MathML2-20000328/chapter6.html\n // for a table of space-like characters. We use Unicode\n // representations instead of &LongNames; as it\'s not clear how to\n // make the latter via document.createTextNode.\n\n if (width >= 0.05555 && width <= 0.05556) {\n this.character = "\\u200a"; //  \n } else if (width >= 0.1666 && width <= 0.1667) {\n this.character = "\\u2009"; //  \n } else if (width >= 0.2222 && width <= 0.2223) {\n this.character = "\\u2005"; //  \n } else if (width >= 0.2777 && width <= 0.2778) {\n this.character = "\\u2005\\u200a"; //   \n } else if (width >= -0.05556 && width <= -0.05555) {\n this.character = "\\u200a\\u2063"; // ​\n } else if (width >= -0.1667 && width <= -0.1666) {\n this.character = "\\u2009\\u2063"; // ​\n } else if (width >= -0.2223 && width <= -0.2222) {\n this.character = "\\u205f\\u2063"; // ​\n } else if (width >= -0.2778 && width <= -0.2777) {\n this.character = "\\u2005\\u2063"; // ​\n } else {\n this.character = null;\n }\n }\n /**\n * Converts the math node into a MathML-namespaced DOM element.\n */\n\n\n toNode() {\n if (this.character) {\n return document.createTextNode(this.character);\n } else {\n const node = document.createElementNS("http://www.w3.org/1998/Math/MathML", "mspace");\n node.setAttribute("width", makeEm(this.width));\n return node;\n }\n }\n /**\n * Converts the math node into an HTML markup string.\n */\n\n\n toMarkup() {\n if (this.character) {\n return "" + this.character + "";\n } else {\n return "";\n }\n }\n /**\n * Converts the math node into a string, similar to innerText.\n */\n\n\n toText() {\n if (this.character) {\n return this.character;\n } else {\n return " ";\n }\n }\n\n}\n\n/* harmony default export */ var mathMLTree = ({\n MathNode,\n TextNode,\n SpaceNode,\n newDocumentFragment\n});\n;// CONCATENATED MODULE: ./src/buildMathML.js\n/**\n * This file converts a parse tree into a corresponding MathML tree. The main\n * entry point is the `buildMathML` function, which takes a parse tree from the\n * parser.\n */\n\n\n\n\n\n\n\n\n\n/**\n * Takes a symbol and converts it into a MathML text node after performing\n * optional replacement from symbols.js.\n */\nconst makeText = function (text, mode, options) {\n if (src_symbols[mode][text] && src_symbols[mode][text].replace && text.charCodeAt(0) !== 0xD835 && !(ligatures.hasOwnProperty(text) && options && (options.fontFamily && options.fontFamily.slice(4, 6) === "tt" || options.font && options.font.slice(4, 6) === "tt"))) {\n text = src_symbols[mode][text].replace;\n }\n\n return new mathMLTree.TextNode(text);\n};\n/**\n * Wrap the given array of nodes in an node if needed, i.e.,\n * unless the array has length 1. Always returns a single node.\n */\n\nconst makeRow = function (body) {\n if (body.length === 1) {\n return body[0];\n } else {\n return new mathMLTree.MathNode("mrow", body);\n }\n};\n/**\n * Returns the math variant as a string or null if none is required.\n */\n\nconst getVariant = function (group, options) {\n // Handle \\text... font specifiers as best we can.\n // MathML has a limited list of allowable mathvariant specifiers; see\n // https://www.w3.org/TR/MathML3/chapter3.html#presm.commatt\n if (options.fontFamily === "texttt") {\n return "monospace";\n } else if (options.fontFamily === "textsf") {\n if (options.fontShape === "textit" && options.fontWeight === "textbf") {\n return "sans-serif-bold-italic";\n } else if (options.fontShape === "textit") {\n return "sans-serif-italic";\n } else if (options.fontWeight === "textbf") {\n return "bold-sans-serif";\n } else {\n return "sans-serif";\n }\n } else if (options.fontShape === "textit" && options.fontWeight === "textbf") {\n return "bold-italic";\n } else if (options.fontShape === "textit") {\n return "italic";\n } else if (options.fontWeight === "textbf") {\n return "bold";\n }\n\n const font = options.font;\n\n if (!font || font === "mathnormal") {\n return null;\n }\n\n const mode = group.mode;\n\n if (font === "mathit") {\n return "italic";\n } else if (font === "boldsymbol") {\n return group.type === "textord" ? "bold" : "bold-italic";\n } else if (font === "mathbf") {\n return "bold";\n } else if (font === "mathbb") {\n return "double-struck";\n } else if (font === "mathsfit") {\n return "sans-serif-italic";\n } else if (font === "mathfrak") {\n return "fraktur";\n } else if (font === "mathscr" || font === "mathcal") {\n // MathML makes no distinction between script and calligraphic\n return "script";\n } else if (font === "mathsf") {\n return "sans-serif";\n } else if (font === "mathtt") {\n return "monospace";\n }\n\n let text = group.text;\n\n if (utils.contains(["\\\\imath", "\\\\jmath"], text)) {\n return null;\n }\n\n if (src_symbols[mode][text] && src_symbols[mode][text].replace) {\n text = src_symbols[mode][text].replace;\n }\n\n const fontName = buildCommon.fontMap[font].fontName;\n\n if (getCharacterMetrics(text, fontName, mode)) {\n return buildCommon.fontMap[font].variant;\n }\n\n return null;\n};\n/**\n * Check for . which is how a dot renders in MathML,\n * or ,\n * which is how a braced comma {,} renders in MathML\n */\n\nfunction isNumberPunctuation(group) {\n if (!group) {\n return false;\n }\n\n if (group.type === \'mi\' && group.children.length === 1) {\n const child = group.children[0];\n return child instanceof TextNode && child.text === \'.\';\n } else if (group.type === \'mo\' && group.children.length === 1 && group.getAttribute(\'separator\') === \'true\' && group.getAttribute(\'lspace\') === \'0em\' && group.getAttribute(\'rspace\') === \'0em\') {\n const child = group.children[0];\n return child instanceof TextNode && child.text === \',\';\n } else {\n return false;\n }\n}\n/**\n * Takes a list of nodes, builds them, and returns a list of the generated\n * MathML nodes. Also combine consecutive outputs into a single\n * tag.\n */\n\n\nconst buildMathML_buildExpression = function (expression, options, isOrdgroup) {\n if (expression.length === 1) {\n const group = buildMathML_buildGroup(expression[0], options);\n\n if (isOrdgroup && group instanceof MathNode && group.type === "mo") {\n // When TeX writers want to suppress spacing on an operator,\n // they often put the operator by itself inside braces.\n group.setAttribute("lspace", "0em");\n group.setAttribute("rspace", "0em");\n }\n\n return [group];\n }\n\n const groups = [];\n let lastGroup;\n\n for (let i = 0; i < expression.length; i++) {\n const group = buildMathML_buildGroup(expression[i], options);\n\n if (group instanceof MathNode && lastGroup instanceof MathNode) {\n // Concatenate adjacent s\n if (group.type === \'mtext\' && lastGroup.type === \'mtext\' && group.getAttribute(\'mathvariant\') === lastGroup.getAttribute(\'mathvariant\')) {\n lastGroup.children.push(...group.children);\n continue; // Concatenate adjacent s\n } else if (group.type === \'mn\' && lastGroup.type === \'mn\') {\n lastGroup.children.push(...group.children);\n continue; // Concatenate ... followed by .\n } else if (isNumberPunctuation(group) && lastGroup.type === \'mn\') {\n lastGroup.children.push(...group.children);\n continue; // Concatenate . followed by ...\n } else if (group.type === \'mn\' && isNumberPunctuation(lastGroup)) {\n group.children = [...lastGroup.children, ...group.children];\n groups.pop(); // Put preceding ... or . inside base of\n // ...base......exponent... (or )\n } else if ((group.type === \'msup\' || group.type === \'msub\') && group.children.length >= 1 && (lastGroup.type === \'mn\' || isNumberPunctuation(lastGroup))) {\n const base = group.children[0];\n\n if (base instanceof MathNode && base.type === \'mn\') {\n base.children = [...lastGroup.children, ...base.children];\n groups.pop();\n } // \\not\n\n } else if (lastGroup.type === \'mi\' && lastGroup.children.length === 1) {\n const lastChild = lastGroup.children[0];\n\n if (lastChild instanceof TextNode && lastChild.text === \'\\u0338\' && (group.type === \'mo\' || group.type === \'mi\' || group.type === \'mn\')) {\n const child = group.children[0];\n\n if (child instanceof TextNode && child.text.length > 0) {\n // Overlay with combining character long solidus\n child.text = child.text.slice(0, 1) + "\\u0338" + child.text.slice(1);\n groups.pop();\n }\n }\n }\n }\n\n groups.push(group);\n lastGroup = group;\n }\n\n return groups;\n};\n/**\n * Equivalent to buildExpression, but wraps the elements in an \n * if there\'s more than one. Returns a single node instead of an array.\n */\n\nconst buildExpressionRow = function (expression, options, isOrdgroup) {\n return makeRow(buildMathML_buildExpression(expression, options, isOrdgroup));\n};\n/**\n * Takes a group from the parser and calls the appropriate groupBuilders function\n * on it to produce a MathML node.\n */\n\nconst buildMathML_buildGroup = function (group, options) {\n if (!group) {\n return new mathMLTree.MathNode("mrow");\n }\n\n if (_mathmlGroupBuilders[group.type]) {\n // Call the groupBuilders function\n // $FlowFixMe\n const result = _mathmlGroupBuilders[group.type](group, options); // $FlowFixMe\n\n return result;\n } else {\n throw new src_ParseError("Got group of unknown type: \'" + group.type + "\'");\n }\n};\n/**\n * Takes a full parse tree and settings and builds a MathML representation of\n * it. In particular, we put the elements from building the parse tree into a\n * tag so we can also include that TeX source as an annotation.\n *\n * Note that we actually return a domTree element with a `` inside it so\n * we can do appropriate styling.\n */\n\nfunction buildMathML(tree, texExpression, options, isDisplayMode, forMathmlOnly) {\n const expression = buildMathML_buildExpression(tree, options); // TODO: Make a pass thru the MathML similar to buildHTML.traverseNonSpaceNodes\n // and add spacing nodes. This is necessary only adjacent to math operators\n // like \\sin or \\lim or to subsup elements that contain math operators.\n // MathML takes care of the other spacing issues.\n // Wrap up the expression in an mrow so it is presented in the semantics\n // tag correctly, unless it\'s a single or .\n\n let wrapper;\n\n if (expression.length === 1 && expression[0] instanceof MathNode && utils.contains(["mrow", "mtable"], expression[0].type)) {\n wrapper = expression[0];\n } else {\n wrapper = new mathMLTree.MathNode("mrow", expression);\n } // Build a TeX annotation of the source\n\n\n const annotation = new mathMLTree.MathNode("annotation", [new mathMLTree.TextNode(texExpression)]);\n annotation.setAttribute("encoding", "application/x-tex");\n const semantics = new mathMLTree.MathNode("semantics", [wrapper, annotation]);\n const math = new mathMLTree.MathNode("math", [semantics]);\n math.setAttribute("xmlns", "http://www.w3.org/1998/Math/MathML");\n\n if (isDisplayMode) {\n math.setAttribute("display", "block");\n } // You can\'t style nodes, so we wrap the node in a span.\n // NOTE: The span class is not typed to have nodes as children, and\n // we don\'t want to make the children type more generic since the children\n // of span are expected to have more fields in `buildHtml` contexts.\n\n\n const wrapperClass = forMathmlOnly ? "katex" : "katex-mathml"; // $FlowFixMe\n\n return buildCommon.makeSpan([wrapperClass], [math]);\n}\n;// CONCATENATED MODULE: ./src/buildTree.js\n\n\n\n\n\n\n\nconst optionsFromSettings = function (settings) {\n return new src_Options({\n style: settings.displayMode ? src_Style.DISPLAY : src_Style.TEXT,\n maxSize: settings.maxSize,\n minRuleThickness: settings.minRuleThickness\n });\n};\n\nconst displayWrap = function (node, settings) {\n if (settings.displayMode) {\n const classes = ["katex-display"];\n\n if (settings.leqno) {\n classes.push("leqno");\n }\n\n if (settings.fleqn) {\n classes.push("fleqn");\n }\n\n node = buildCommon.makeSpan(classes, [node]);\n }\n\n return node;\n};\n\nconst buildTree = function (tree, expression, settings) {\n const options = optionsFromSettings(settings);\n let katexNode;\n\n if (settings.output === "mathml") {\n return buildMathML(tree, expression, options, settings.displayMode, true);\n } else if (settings.output === "html") {\n const htmlNode = buildHTML(tree, options);\n katexNode = buildCommon.makeSpan(["katex"], [htmlNode]);\n } else {\n const mathMLNode = buildMathML(tree, expression, options, settings.displayMode, false);\n const htmlNode = buildHTML(tree, options);\n katexNode = buildCommon.makeSpan(["katex"], [mathMLNode, htmlNode]);\n }\n\n return displayWrap(katexNode, settings);\n};\nconst buildHTMLTree = function (tree, expression, settings) {\n const options = optionsFromSettings(settings);\n const htmlNode = buildHTML(tree, options);\n const katexNode = buildCommon.makeSpan(["katex"], [htmlNode]);\n return displayWrap(katexNode, settings);\n};\n/* harmony default export */ var src_buildTree = ((/* unused pure expression or super */ null && (0)));\n;// CONCATENATED MODULE: ./src/stretchy.js\n/**\n * This file provides support to buildMathML.js and buildHTML.js\n * for stretchy wide elements rendered from SVG files\n * and other CSS trickery.\n */\n\n\n\n\n\nconst stretchyCodePoint = {\n widehat: "^",\n widecheck: "ˇ",\n widetilde: "~",\n utilde: "~",\n overleftarrow: "\\u2190",\n underleftarrow: "\\u2190",\n xleftarrow: "\\u2190",\n overrightarrow: "\\u2192",\n underrightarrow: "\\u2192",\n xrightarrow: "\\u2192",\n underbrace: "\\u23df",\n overbrace: "\\u23de",\n overgroup: "\\u23e0",\n undergroup: "\\u23e1",\n overleftrightarrow: "\\u2194",\n underleftrightarrow: "\\u2194",\n xleftrightarrow: "\\u2194",\n Overrightarrow: "\\u21d2",\n xRightarrow: "\\u21d2",\n overleftharpoon: "\\u21bc",\n xleftharpoonup: "\\u21bc",\n overrightharpoon: "\\u21c0",\n xrightharpoonup: "\\u21c0",\n xLeftarrow: "\\u21d0",\n xLeftrightarrow: "\\u21d4",\n xhookleftarrow: "\\u21a9",\n xhookrightarrow: "\\u21aa",\n xmapsto: "\\u21a6",\n xrightharpoondown: "\\u21c1",\n xleftharpoondown: "\\u21bd",\n xrightleftharpoons: "\\u21cc",\n xleftrightharpoons: "\\u21cb",\n xtwoheadleftarrow: "\\u219e",\n xtwoheadrightarrow: "\\u21a0",\n xlongequal: "=",\n xtofrom: "\\u21c4",\n xrightleftarrows: "\\u21c4",\n xrightequilibrium: "\\u21cc",\n // Not a perfect match.\n xleftequilibrium: "\\u21cb",\n // None better available.\n "\\\\cdrightarrow": "\\u2192",\n "\\\\cdleftarrow": "\\u2190",\n "\\\\cdlongequal": "="\n};\n\nconst mathMLnode = function (label) {\n const node = new mathMLTree.MathNode("mo", [new mathMLTree.TextNode(stretchyCodePoint[label.replace(/^\\\\/, \'\')])]);\n node.setAttribute("stretchy", "true");\n return node;\n}; // Many of the KaTeX SVG images have been adapted from glyphs in KaTeX fonts.\n// Copyright (c) 2009-2010, Design Science, Inc. ()\n// Copyright (c) 2014-2017 Khan Academy ()\n// Licensed under the SIL Open Font License, Version 1.1.\n// See \\nhttp://scripts.sil.org/OFL\n// Very Long SVGs\n// Many of the KaTeX stretchy wide elements use a long SVG image and an\n// overflow: hidden tactic to achieve a stretchy image while avoiding\n// distortion of arrowheads or brace corners.\n// The SVG typically contains a very long (400 em) arrow.\n// The SVG is in a container span that has overflow: hidden, so the span\n// acts like a window that exposes only part of the SVG.\n// The SVG always has a longer, thinner aspect ratio than the container span.\n// After the SVG fills 100% of the height of the container span,\n// there is a long arrow shaft left over. That left-over shaft is not shown.\n// Instead, it is sliced off because the span\'s CSS has overflow: hidden.\n// Thus, the reader sees an arrow that matches the subject matter width\n// without distortion.\n// Some functions, such as \\cancel, need to vary their aspect ratio. These\n// functions do not get the overflow SVG treatment.\n// Second Brush Stroke\n// Low resolution monitors struggle to display images in fine detail.\n// So browsers apply anti-aliasing. A long straight arrow shaft therefore\n// will sometimes appear as if it has a blurred edge.\n// To mitigate this, these SVG files contain a second "brush-stroke" on the\n// arrow shafts. That is, a second long thin rectangular SVG path has been\n// written directly on top of each arrow shaft. This reinforcement causes\n// some of the screen pixels to display as black instead of the anti-aliased\n// gray pixel that a single path would generate. So we get arrow shafts\n// whose edges appear to be sharper.\n// In the katexImagesData object just below, the dimensions all\n// correspond to path geometry inside the relevant SVG.\n// For example, \\overrightarrow uses the same arrowhead as glyph U+2192\n// from the KaTeX Main font. The scaling factor is 1000.\n// That is, inside the font, that arrowhead is 522 units tall, which\n// corresponds to 0.522 em inside the document.\n\n\nconst katexImagesData = {\n // path(s), minWidth, height, align\n overrightarrow: [["rightarrow"], 0.888, 522, "xMaxYMin"],\n overleftarrow: [["leftarrow"], 0.888, 522, "xMinYMin"],\n underrightarrow: [["rightarrow"], 0.888, 522, "xMaxYMin"],\n underleftarrow: [["leftarrow"], 0.888, 522, "xMinYMin"],\n xrightarrow: [["rightarrow"], 1.469, 522, "xMaxYMin"],\n "\\\\cdrightarrow": [["rightarrow"], 3.0, 522, "xMaxYMin"],\n // CD minwwidth2.5pc\n xleftarrow: [["leftarrow"], 1.469, 522, "xMinYMin"],\n "\\\\cdleftarrow": [["leftarrow"], 3.0, 522, "xMinYMin"],\n Overrightarrow: [["doublerightarrow"], 0.888, 560, "xMaxYMin"],\n xRightarrow: [["doublerightarrow"], 1.526, 560, "xMaxYMin"],\n xLeftarrow: [["doubleleftarrow"], 1.526, 560, "xMinYMin"],\n overleftharpoon: [["leftharpoon"], 0.888, 522, "xMinYMin"],\n xleftharpoonup: [["leftharpoon"], 0.888, 522, "xMinYMin"],\n xleftharpoondown: [["leftharpoondown"], 0.888, 522, "xMinYMin"],\n overrightharpoon: [["rightharpoon"], 0.888, 522, "xMaxYMin"],\n xrightharpoonup: [["rightharpoon"], 0.888, 522, "xMaxYMin"],\n xrightharpoondown: [["rightharpoondown"], 0.888, 522, "xMaxYMin"],\n xlongequal: [["longequal"], 0.888, 334, "xMinYMin"],\n "\\\\cdlongequal": [["longequal"], 3.0, 334, "xMinYMin"],\n xtwoheadleftarrow: [["twoheadleftarrow"], 0.888, 334, "xMinYMin"],\n xtwoheadrightarrow: [["twoheadrightarrow"], 0.888, 334, "xMaxYMin"],\n overleftrightarrow: [["leftarrow", "rightarrow"], 0.888, 522],\n overbrace: [["leftbrace", "midbrace", "rightbrace"], 1.6, 548],\n underbrace: [["leftbraceunder", "midbraceunder", "rightbraceunder"], 1.6, 548],\n underleftrightarrow: [["leftarrow", "rightarrow"], 0.888, 522],\n xleftrightarrow: [["leftarrow", "rightarrow"], 1.75, 522],\n xLeftrightarrow: [["doubleleftarrow", "doublerightarrow"], 1.75, 560],\n xrightleftharpoons: [["leftharpoondownplus", "rightharpoonplus"], 1.75, 716],\n xleftrightharpoons: [["leftharpoonplus", "rightharpoondownplus"], 1.75, 716],\n xhookleftarrow: [["leftarrow", "righthook"], 1.08, 522],\n xhookrightarrow: [["lefthook", "rightarrow"], 1.08, 522],\n overlinesegment: [["leftlinesegment", "rightlinesegment"], 0.888, 522],\n underlinesegment: [["leftlinesegment", "rightlinesegment"], 0.888, 522],\n overgroup: [["leftgroup", "rightgroup"], 0.888, 342],\n undergroup: [["leftgroupunder", "rightgroupunder"], 0.888, 342],\n xmapsto: [["leftmapsto", "rightarrow"], 1.5, 522],\n xtofrom: [["leftToFrom", "rightToFrom"], 1.75, 528],\n // The next three arrows are from the mhchem package.\n // In mhchem.sty, min-length is 2.0em. But these arrows might appear in the\n // document as \\xrightarrow or \\xrightleftharpoons. Those have\n // min-length = 1.75em, so we set min-length on these next three to match.\n xrightleftarrows: [["baraboveleftarrow", "rightarrowabovebar"], 1.75, 901],\n xrightequilibrium: [["baraboveshortleftharpoon", "rightharpoonaboveshortbar"], 1.75, 716],\n xleftequilibrium: [["shortbaraboveleftharpoon", "shortrightharpoonabovebar"], 1.75, 716]\n};\n\nconst groupLength = function (arg) {\n if (arg.type === "ordgroup") {\n return arg.body.length;\n } else {\n return 1;\n }\n};\n\nconst svgSpan = function (group, options) {\n // Create a span with inline SVG for the element.\n function buildSvgSpan_() {\n let viewBoxWidth = 400000; // default\n\n const label = group.label.slice(1);\n\n if (utils.contains(["widehat", "widecheck", "widetilde", "utilde"], label)) {\n // Each type in the `if` statement corresponds to one of the ParseNode\n // types below. This narrowing is required to access `grp.base`.\n // $FlowFixMe\n const grp = group; // There are four SVG images available for each function.\n // Choose a taller image when there are more characters.\n\n const numChars = groupLength(grp.base);\n let viewBoxHeight;\n let pathName;\n let height;\n\n if (numChars > 5) {\n if (label === "widehat" || label === "widecheck") {\n viewBoxHeight = 420;\n viewBoxWidth = 2364;\n height = 0.42;\n pathName = label + "4";\n } else {\n viewBoxHeight = 312;\n viewBoxWidth = 2340;\n height = 0.34;\n pathName = "tilde4";\n }\n } else {\n const imgIndex = [1, 1, 2, 2, 3, 3][numChars];\n\n if (label === "widehat" || label === "widecheck") {\n viewBoxWidth = [0, 1062, 2364, 2364, 2364][imgIndex];\n viewBoxHeight = [0, 239, 300, 360, 420][imgIndex];\n height = [0, 0.24, 0.3, 0.3, 0.36, 0.42][imgIndex];\n pathName = label + imgIndex;\n } else {\n viewBoxWidth = [0, 600, 1033, 2339, 2340][imgIndex];\n viewBoxHeight = [0, 260, 286, 306, 312][imgIndex];\n height = [0, 0.26, 0.286, 0.3, 0.306, 0.34][imgIndex];\n pathName = "tilde" + imgIndex;\n }\n }\n\n const path = new PathNode(pathName);\n const svgNode = new SvgNode([path], {\n "width": "100%",\n "height": makeEm(height),\n "viewBox": "0 0 " + viewBoxWidth + " " + viewBoxHeight,\n "preserveAspectRatio": "none"\n });\n return {\n span: buildCommon.makeSvgSpan([], [svgNode], options),\n minWidth: 0,\n height\n };\n } else {\n const spans = [];\n const data = katexImagesData[label];\n const [paths, minWidth, viewBoxHeight] = data;\n const height = viewBoxHeight / 1000;\n const numSvgChildren = paths.length;\n let widthClasses;\n let aligns;\n\n if (numSvgChildren === 1) {\n // $FlowFixMe: All these cases must be of the 4-tuple type.\n const align1 = data[3];\n widthClasses = ["hide-tail"];\n aligns = [align1];\n } else if (numSvgChildren === 2) {\n widthClasses = ["halfarrow-left", "halfarrow-right"];\n aligns = ["xMinYMin", "xMaxYMin"];\n } else if (numSvgChildren === 3) {\n widthClasses = ["brace-left", "brace-center", "brace-right"];\n aligns = ["xMinYMin", "xMidYMin", "xMaxYMin"];\n } else {\n throw new Error("Correct katexImagesData or update code here to support\\n " + numSvgChildren + " children.");\n }\n\n for (let i = 0; i < numSvgChildren; i++) {\n const path = new PathNode(paths[i]);\n const svgNode = new SvgNode([path], {\n "width": "400em",\n "height": makeEm(height),\n "viewBox": "0 0 " + viewBoxWidth + " " + viewBoxHeight,\n "preserveAspectRatio": aligns[i] + " slice"\n });\n const span = buildCommon.makeSvgSpan([widthClasses[i]], [svgNode], options);\n\n if (numSvgChildren === 1) {\n return {\n span,\n minWidth,\n height\n };\n } else {\n span.style.height = makeEm(height);\n spans.push(span);\n }\n }\n\n return {\n span: buildCommon.makeSpan(["stretchy"], spans, options),\n minWidth,\n height\n };\n }\n } // buildSvgSpan_()\n\n\n const {\n span,\n minWidth,\n height\n } = buildSvgSpan_(); // Note that we are returning span.depth = 0.\n // Any adjustments relative to the baseline must be done in buildHTML.\n\n span.height = height;\n span.style.height = makeEm(height);\n\n if (minWidth > 0) {\n span.style.minWidth = makeEm(minWidth);\n }\n\n return span;\n};\n\nconst encloseSpan = function (inner, label, topPad, bottomPad, options) {\n // Return an image span for \\cancel, \\bcancel, \\xcancel, \\fbox, or \\angl\n let img;\n const totalHeight = inner.height + inner.depth + topPad + bottomPad;\n\n if (/fbox|color|angl/.test(label)) {\n img = buildCommon.makeSpan(["stretchy", label], [], options);\n\n if (label === "fbox") {\n const color = options.color && options.getColor();\n\n if (color) {\n img.style.borderColor = color;\n }\n }\n } else {\n // \\cancel, \\bcancel, or \\xcancel\n // Since \\cancel\'s SVG is inline and it omits the viewBox attribute,\n // its stroke-width will not vary with span area.\n const lines = [];\n\n if (/^[bx]cancel$/.test(label)) {\n lines.push(new LineNode({\n "x1": "0",\n "y1": "0",\n "x2": "100%",\n "y2": "100%",\n "stroke-width": "0.046em"\n }));\n }\n\n if (/^x?cancel$/.test(label)) {\n lines.push(new LineNode({\n "x1": "0",\n "y1": "100%",\n "x2": "100%",\n "y2": "0",\n "stroke-width": "0.046em"\n }));\n }\n\n const svgNode = new SvgNode(lines, {\n "width": "100%",\n "height": makeEm(totalHeight)\n });\n img = buildCommon.makeSvgSpan([], [svgNode], options);\n }\n\n img.height = totalHeight;\n img.style.height = makeEm(totalHeight);\n return img;\n};\n\n/* harmony default export */ var stretchy = ({\n encloseSpan,\n mathMLnode,\n svgSpan\n});\n;// CONCATENATED MODULE: ./src/parseNode.js\n\n\n/**\n * Asserts that the node is of the given type and returns it with stricter\n * typing. Throws if the node\'s type does not match.\n */\nfunction assertNodeType(node, type) {\n if (!node || node.type !== type) {\n throw new Error("Expected node of type " + type + ", but got " + (node ? "node of type " + node.type : String(node)));\n } // $FlowFixMe, >=0.125\n\n\n return node;\n}\n/**\n * Returns the node more strictly typed iff it is of the given type. Otherwise,\n * returns null.\n */\n\nfunction assertSymbolNodeType(node) {\n const typedNode = checkSymbolNodeType(node);\n\n if (!typedNode) {\n throw new Error("Expected node of symbol group type, but got " + (node ? "node of type " + node.type : String(node)));\n }\n\n return typedNode;\n}\n/**\n * Returns the node more strictly typed iff it is of the given type. Otherwise,\n * returns null.\n */\n\nfunction checkSymbolNodeType(node) {\n if (node && (node.type === "atom" || NON_ATOMS.hasOwnProperty(node.type))) {\n // $FlowFixMe\n return node;\n }\n\n return null;\n}\n;// CONCATENATED MODULE: ./src/functions/accent.js\n\n\n\n\n\n\n\n\n\n\n// NOTE: Unlike most `htmlBuilder`s, this one handles not only "accent", but\n// also "supsub" since an accent can affect super/subscripting.\nconst htmlBuilder = (grp, options) => {\n // Accents are handled in the TeXbook pg. 443, rule 12.\n let base;\n let group;\n let supSubGroup;\n\n if (grp && grp.type === "supsub") {\n // If our base is a character box, and we have superscripts and\n // subscripts, the supsub will defer to us. In particular, we want\n // to attach the superscripts and subscripts to the inner body (so\n // that the position of the superscripts and subscripts won\'t be\n // affected by the height of the accent). We accomplish this by\n // sticking the base of the accent into the base of the supsub, and\n // rendering that, while keeping track of where the accent is.\n // The real accent group is the base of the supsub group\n group = assertNodeType(grp.base, "accent"); // The character box is the base of the accent group\n\n base = group.base; // Stick the character box into the base of the supsub group\n\n grp.base = base; // Rerender the supsub group with its new base, and store that\n // result.\n\n supSubGroup = assertSpan(buildGroup(grp, options)); // reset original base\n\n grp.base = group;\n } else {\n group = assertNodeType(grp, "accent");\n base = group.base;\n } // Build the base group\n\n\n const body = buildGroup(base, options.havingCrampedStyle()); // Does the accent need to shift for the skew of a character?\n\n const mustShift = group.isShifty && utils.isCharacterBox(base); // Calculate the skew of the accent. This is based on the line "If the\n // nucleus is not a single character, let s = 0; otherwise set s to the\n // kern amount for the nucleus followed by the \\skewchar of its font."\n // Note that our skew metrics are just the kern between each character\n // and the skewchar.\n\n let skew = 0;\n\n if (mustShift) {\n // If the base is a character box, then we want the skew of the\n // innermost character. To do that, we find the innermost character:\n const baseChar = utils.getBaseElem(base); // Then, we render its group to get the symbol inside it\n\n const baseGroup = buildGroup(baseChar, options.havingCrampedStyle()); // Finally, we pull the skew off of the symbol.\n\n skew = assertSymbolDomNode(baseGroup).skew; // Note that we now throw away baseGroup, because the layers we\n // removed with getBaseElem might contain things like \\color which\n // we can\'t get rid of.\n // TODO(emily): Find a better way to get the skew\n }\n\n const accentBelow = group.label === "\\\\c"; // calculate the amount of space between the body and the accent\n\n let clearance = accentBelow ? body.height + body.depth : Math.min(body.height, options.fontMetrics().xHeight); // Build the accent\n\n let accentBody;\n\n if (!group.isStretchy) {\n let accent;\n let width;\n\n if (group.label === "\\\\vec") {\n // Before version 0.9, \\vec used the combining font glyph U+20D7.\n // But browsers, especially Safari, are not consistent in how they\n // render combining characters when not preceded by a character.\n // So now we use an SVG.\n // If Safari reforms, we should consider reverting to the glyph.\n accent = buildCommon.staticSvg("vec", options);\n width = buildCommon.svgData.vec[1];\n } else {\n accent = buildCommon.makeOrd({\n mode: group.mode,\n text: group.label\n }, options, "textord");\n accent = assertSymbolDomNode(accent); // Remove the italic correction of the accent, because it only serves to\n // shift the accent over to a place we don\'t want.\n\n accent.italic = 0;\n width = accent.width;\n\n if (accentBelow) {\n clearance += accent.depth;\n }\n }\n\n accentBody = buildCommon.makeSpan(["accent-body"], [accent]); // "Full" accents expand the width of the resulting symbol to be\n // at least the width of the accent, and overlap directly onto the\n // character without any vertical offset.\n\n const accentFull = group.label === "\\\\textcircled";\n\n if (accentFull) {\n accentBody.classes.push(\'accent-full\');\n clearance = body.height;\n } // Shift the accent over by the skew.\n\n\n let left = skew; // CSS defines `.katex .accent .accent-body:not(.accent-full) { width: 0 }`\n // so that the accent doesn\'t contribute to the bounding box.\n // We need to shift the character by its width (effectively half\n // its width) to compensate.\n\n if (!accentFull) {\n left -= width / 2;\n }\n\n accentBody.style.left = makeEm(left); // \\textcircled uses the \\bigcirc glyph, so it needs some\n // vertical adjustment to match LaTeX.\n\n if (group.label === "\\\\textcircled") {\n accentBody.style.top = ".2em";\n }\n\n accentBody = buildCommon.makeVList({\n positionType: "firstBaseline",\n children: [{\n type: "elem",\n elem: body\n }, {\n type: "kern",\n size: -clearance\n }, {\n type: "elem",\n elem: accentBody\n }]\n }, options);\n } else {\n accentBody = stretchy.svgSpan(group, options);\n accentBody = buildCommon.makeVList({\n positionType: "firstBaseline",\n children: [{\n type: "elem",\n elem: body\n }, {\n type: "elem",\n elem: accentBody,\n wrapperClasses: ["svg-align"],\n wrapperStyle: skew > 0 ? {\n width: "calc(100% - " + makeEm(2 * skew) + ")",\n marginLeft: makeEm(2 * skew)\n } : undefined\n }]\n }, options);\n }\n\n const accentWrap = buildCommon.makeSpan(["mord", "accent"], [accentBody], options);\n\n if (supSubGroup) {\n // Here, we replace the "base" child of the supsub with our newly\n // generated accent.\n supSubGroup.children[0] = accentWrap; // Since we don\'t rerun the height calculation after replacing the\n // accent, we manually recalculate height.\n\n supSubGroup.height = Math.max(accentWrap.height, supSubGroup.height); // Accents should always be ords, even when their innards are not.\n\n supSubGroup.classes[0] = "mord";\n return supSubGroup;\n } else {\n return accentWrap;\n }\n};\n\nconst mathmlBuilder = (group, options) => {\n const accentNode = group.isStretchy ? stretchy.mathMLnode(group.label) : new mathMLTree.MathNode("mo", [makeText(group.label, group.mode)]);\n const node = new mathMLTree.MathNode("mover", [buildMathML_buildGroup(group.base, options), accentNode]);\n node.setAttribute("accent", "true");\n return node;\n};\n\nconst NON_STRETCHY_ACCENT_REGEX = new RegExp(["\\\\acute", "\\\\grave", "\\\\ddot", "\\\\tilde", "\\\\bar", "\\\\breve", "\\\\check", "\\\\hat", "\\\\vec", "\\\\dot", "\\\\mathring"].map(accent => "\\\\" + accent).join("|")); // Accents\n\ndefineFunction({\n type: "accent",\n names: ["\\\\acute", "\\\\grave", "\\\\ddot", "\\\\tilde", "\\\\bar", "\\\\breve", "\\\\check", "\\\\hat", "\\\\vec", "\\\\dot", "\\\\mathring", "\\\\widecheck", "\\\\widehat", "\\\\widetilde", "\\\\overrightarrow", "\\\\overleftarrow", "\\\\Overrightarrow", "\\\\overleftrightarrow", "\\\\overgroup", "\\\\overlinesegment", "\\\\overleftharpoon", "\\\\overrightharpoon"],\n props: {\n numArgs: 1\n },\n handler: (context, args) => {\n const base = normalizeArgument(args[0]);\n const isStretchy = !NON_STRETCHY_ACCENT_REGEX.test(context.funcName);\n const isShifty = !isStretchy || context.funcName === "\\\\widehat" || context.funcName === "\\\\widetilde" || context.funcName === "\\\\widecheck";\n return {\n type: "accent",\n mode: context.parser.mode,\n label: context.funcName,\n isStretchy: isStretchy,\n isShifty: isShifty,\n base: base\n };\n },\n htmlBuilder,\n mathmlBuilder\n}); // Text-mode accents\n\ndefineFunction({\n type: "accent",\n names: ["\\\\\'", "\\\\`", "\\\\^", "\\\\~", "\\\\=", "\\\\u", "\\\\.", \'\\\\"\', "\\\\c", "\\\\r", "\\\\H", "\\\\v", "\\\\textcircled"],\n props: {\n numArgs: 1,\n allowedInText: true,\n allowedInMath: true,\n // unless in strict mode\n argTypes: ["primitive"]\n },\n handler: (context, args) => {\n const base = args[0];\n let mode = context.parser.mode;\n\n if (mode === "math") {\n context.parser.settings.reportNonstrict("mathVsTextAccents", "LaTeX\'s accent " + context.funcName + " works only in text mode");\n mode = "text";\n }\n\n return {\n type: "accent",\n mode: mode,\n label: context.funcName,\n isStretchy: false,\n isShifty: true,\n base: base\n };\n },\n htmlBuilder,\n mathmlBuilder\n});\n;// CONCATENATED MODULE: ./src/functions/accentunder.js\n// Horizontal overlap functions\n\n\n\n\n\n\ndefineFunction({\n type: "accentUnder",\n names: ["\\\\underleftarrow", "\\\\underrightarrow", "\\\\underleftrightarrow", "\\\\undergroup", "\\\\underlinesegment", "\\\\utilde"],\n props: {\n numArgs: 1\n },\n handler: (_ref, args) => {\n let {\n parser,\n funcName\n } = _ref;\n const base = args[0];\n return {\n type: "accentUnder",\n mode: parser.mode,\n label: funcName,\n base: base\n };\n },\n htmlBuilder: (group, options) => {\n // Treat under accents much like underlines.\n const innerGroup = buildGroup(group.base, options);\n const accentBody = stretchy.svgSpan(group, options);\n const kern = group.label === "\\\\utilde" ? 0.12 : 0; // Generate the vlist, with the appropriate kerns\n\n const vlist = buildCommon.makeVList({\n positionType: "top",\n positionData: innerGroup.height,\n children: [{\n type: "elem",\n elem: accentBody,\n wrapperClasses: ["svg-align"]\n }, {\n type: "kern",\n size: kern\n }, {\n type: "elem",\n elem: innerGroup\n }]\n }, options);\n return buildCommon.makeSpan(["mord", "accentunder"], [vlist], options);\n },\n mathmlBuilder: (group, options) => {\n const accentNode = stretchy.mathMLnode(group.label);\n const node = new mathMLTree.MathNode("munder", [buildMathML_buildGroup(group.base, options), accentNode]);\n node.setAttribute("accentunder", "true");\n return node;\n }\n});\n;// CONCATENATED MODULE: ./src/functions/arrow.js\n\n\n\n\n\n\n\n// Helper function\nconst paddedNode = group => {\n const node = new mathMLTree.MathNode("mpadded", group ? [group] : []);\n node.setAttribute("width", "+0.6em");\n node.setAttribute("lspace", "0.3em");\n return node;\n}; // Stretchy arrows with an optional argument\n\n\ndefineFunction({\n type: "xArrow",\n names: ["\\\\xleftarrow", "\\\\xrightarrow", "\\\\xLeftarrow", "\\\\xRightarrow", "\\\\xleftrightarrow", "\\\\xLeftrightarrow", "\\\\xhookleftarrow", "\\\\xhookrightarrow", "\\\\xmapsto", "\\\\xrightharpoondown", "\\\\xrightharpoonup", "\\\\xleftharpoondown", "\\\\xleftharpoonup", "\\\\xrightleftharpoons", "\\\\xleftrightharpoons", "\\\\xlongequal", "\\\\xtwoheadrightarrow", "\\\\xtwoheadleftarrow", "\\\\xtofrom", // The next 3 functions are here to support the mhchem extension.\n // Direct use of these functions is discouraged and may break someday.\n "\\\\xrightleftarrows", "\\\\xrightequilibrium", "\\\\xleftequilibrium", // The next 3 functions are here only to support the {CD} environment.\n "\\\\\\\\cdrightarrow", "\\\\\\\\cdleftarrow", "\\\\\\\\cdlongequal"],\n props: {\n numArgs: 1,\n numOptionalArgs: 1\n },\n\n handler(_ref, args, optArgs) {\n let {\n parser,\n funcName\n } = _ref;\n return {\n type: "xArrow",\n mode: parser.mode,\n label: funcName,\n body: args[0],\n below: optArgs[0]\n };\n },\n\n // Flow is unable to correctly infer the type of `group`, even though it\'s\n // unambiguously determined from the passed-in `type` above.\n htmlBuilder(group, options) {\n const style = options.style; // Build the argument groups in the appropriate style.\n // Ref: amsmath.dtx: \\hbox{$\\scriptstyle\\mkern#3mu{#6}\\mkern#4mu$}%\n // Some groups can return document fragments. Handle those by wrapping\n // them in a span.\n\n let newOptions = options.havingStyle(style.sup());\n const upperGroup = buildCommon.wrapFragment(buildGroup(group.body, newOptions, options), options);\n const arrowPrefix = group.label.slice(0, 2) === "\\\\x" ? "x" : "cd";\n upperGroup.classes.push(arrowPrefix + "-arrow-pad");\n let lowerGroup;\n\n if (group.below) {\n // Build the lower group\n newOptions = options.havingStyle(style.sub());\n lowerGroup = buildCommon.wrapFragment(buildGroup(group.below, newOptions, options), options);\n lowerGroup.classes.push(arrowPrefix + "-arrow-pad");\n }\n\n const arrowBody = stretchy.svgSpan(group, options); // Re shift: Note that stretchy.svgSpan returned arrowBody.depth = 0.\n // The point we want on the math axis is at 0.5 * arrowBody.height.\n\n const arrowShift = -options.fontMetrics().axisHeight + 0.5 * arrowBody.height; // 2 mu kern. Ref: amsmath.dtx: #7\\if0#2\\else\\mkern#2mu\\fi\n\n let upperShift = -options.fontMetrics().axisHeight - 0.5 * arrowBody.height - 0.111; // 0.111 em = 2 mu\n\n if (upperGroup.depth > 0.25 || group.label === "\\\\xleftequilibrium") {\n upperShift -= upperGroup.depth; // shift up if depth encroaches\n } // Generate the vlist\n\n\n let vlist;\n\n if (lowerGroup) {\n const lowerShift = -options.fontMetrics().axisHeight + lowerGroup.height + 0.5 * arrowBody.height + 0.111;\n vlist = buildCommon.makeVList({\n positionType: "individualShift",\n children: [{\n type: "elem",\n elem: upperGroup,\n shift: upperShift\n }, {\n type: "elem",\n elem: arrowBody,\n shift: arrowShift\n }, {\n type: "elem",\n elem: lowerGroup,\n shift: lowerShift\n }]\n }, options);\n } else {\n vlist = buildCommon.makeVList({\n positionType: "individualShift",\n children: [{\n type: "elem",\n elem: upperGroup,\n shift: upperShift\n }, {\n type: "elem",\n elem: arrowBody,\n shift: arrowShift\n }]\n }, options);\n } // $FlowFixMe: Replace this with passing "svg-align" into makeVList.\n\n\n vlist.children[0].children[0].children[1].classes.push("svg-align");\n return buildCommon.makeSpan(["mrel", "x-arrow"], [vlist], options);\n },\n\n mathmlBuilder(group, options) {\n const arrowNode = stretchy.mathMLnode(group.label);\n arrowNode.setAttribute("minsize", group.label.charAt(0) === "x" ? "1.75em" : "3.0em");\n let node;\n\n if (group.body) {\n const upperNode = paddedNode(buildMathML_buildGroup(group.body, options));\n\n if (group.below) {\n const lowerNode = paddedNode(buildMathML_buildGroup(group.below, options));\n node = new mathMLTree.MathNode("munderover", [arrowNode, lowerNode, upperNode]);\n } else {\n node = new mathMLTree.MathNode("mover", [arrowNode, upperNode]);\n }\n } else if (group.below) {\n const lowerNode = paddedNode(buildMathML_buildGroup(group.below, options));\n node = new mathMLTree.MathNode("munder", [arrowNode, lowerNode]);\n } else {\n // This should never happen.\n // Parser.js throws an error if there is no argument.\n node = paddedNode();\n node = new mathMLTree.MathNode("mover", [arrowNode, node]);\n }\n\n return node;\n }\n\n});\n;// CONCATENATED MODULE: ./src/functions/mclass.js\n\n\n\n\n\n\nconst mclass_makeSpan = buildCommon.makeSpan;\n\nfunction mclass_htmlBuilder(group, options) {\n const elements = buildExpression(group.body, options, true);\n return mclass_makeSpan([group.mclass], elements, options);\n}\n\nfunction mclass_mathmlBuilder(group, options) {\n let node;\n const inner = buildMathML_buildExpression(group.body, options);\n\n if (group.mclass === "minner") {\n node = new mathMLTree.MathNode("mpadded", inner);\n } else if (group.mclass === "mord") {\n if (group.isCharacterBox) {\n node = inner[0];\n node.type = "mi";\n } else {\n node = new mathMLTree.MathNode("mi", inner);\n }\n } else {\n if (group.isCharacterBox) {\n node = inner[0];\n node.type = "mo";\n } else {\n node = new mathMLTree.MathNode("mo", inner);\n } // Set spacing based on what is the most likely adjacent atom type.\n // See TeXbook p170.\n\n\n if (group.mclass === "mbin") {\n node.attributes.lspace = "0.22em"; // medium space\n\n node.attributes.rspace = "0.22em";\n } else if (group.mclass === "mpunct") {\n node.attributes.lspace = "0em";\n node.attributes.rspace = "0.17em"; // thinspace\n } else if (group.mclass === "mopen" || group.mclass === "mclose") {\n node.attributes.lspace = "0em";\n node.attributes.rspace = "0em";\n } else if (group.mclass === "minner") {\n node.attributes.lspace = "0.0556em"; // 1 mu is the most likely option\n\n node.attributes.width = "+0.1111em";\n } // MathML default space is 5/18 em, so needs no action.\n // Ref: https://developer.mozilla.org/en-US/docs/Web/MathML/Element/mo\n\n }\n\n return node;\n} // Math class commands except \\mathop\n\n\ndefineFunction({\n type: "mclass",\n names: ["\\\\mathord", "\\\\mathbin", "\\\\mathrel", "\\\\mathopen", "\\\\mathclose", "\\\\mathpunct", "\\\\mathinner"],\n props: {\n numArgs: 1,\n primitive: true\n },\n\n handler(_ref, args) {\n let {\n parser,\n funcName\n } = _ref;\n const body = args[0];\n return {\n type: "mclass",\n mode: parser.mode,\n mclass: "m" + funcName.slice(5),\n // TODO(kevinb): don\'t prefix with \'m\'\n body: ordargument(body),\n isCharacterBox: utils.isCharacterBox(body)\n };\n },\n\n htmlBuilder: mclass_htmlBuilder,\n mathmlBuilder: mclass_mathmlBuilder\n});\nconst binrelClass = arg => {\n // \\binrel@ spacing varies with (bin|rel|ord) of the atom in the argument.\n // (by rendering separately and with {}s before and after, and measuring\n // the change in spacing). We\'ll do roughly the same by detecting the\n // atom type directly.\n const atom = arg.type === "ordgroup" && arg.body.length ? arg.body[0] : arg;\n\n if (atom.type === "atom" && (atom.family === "bin" || atom.family === "rel")) {\n return "m" + atom.family;\n } else {\n return "mord";\n }\n}; // \\@binrel{x}{y} renders like y but as mbin/mrel/mord if x is mbin/mrel/mord.\n// This is equivalent to \\binrel@{x}\\binrel@@{y} in AMSTeX.\n\ndefineFunction({\n type: "mclass",\n names: ["\\\\@binrel"],\n props: {\n numArgs: 2\n },\n\n handler(_ref2, args) {\n let {\n parser\n } = _ref2;\n return {\n type: "mclass",\n mode: parser.mode,\n mclass: binrelClass(args[0]),\n body: ordargument(args[1]),\n isCharacterBox: utils.isCharacterBox(args[1])\n };\n }\n\n}); // Build a relation or stacked op by placing one symbol on top of another\n\ndefineFunction({\n type: "mclass",\n names: ["\\\\stackrel", "\\\\overset", "\\\\underset"],\n props: {\n numArgs: 2\n },\n\n handler(_ref3, args) {\n let {\n parser,\n funcName\n } = _ref3;\n const baseArg = args[1];\n const shiftedArg = args[0];\n let mclass;\n\n if (funcName !== "\\\\stackrel") {\n // LaTeX applies \\binrel spacing to \\overset and \\underset.\n mclass = binrelClass(baseArg);\n } else {\n mclass = "mrel"; // for \\stackrel\n }\n\n const baseOp = {\n type: "op",\n mode: baseArg.mode,\n limits: true,\n alwaysHandleSupSub: true,\n parentIsSupSub: false,\n symbol: false,\n suppressBaseShift: funcName !== "\\\\stackrel",\n body: ordargument(baseArg)\n };\n const supsub = {\n type: "supsub",\n mode: shiftedArg.mode,\n base: baseOp,\n sup: funcName === "\\\\underset" ? null : shiftedArg,\n sub: funcName === "\\\\underset" ? shiftedArg : null\n };\n return {\n type: "mclass",\n mode: parser.mode,\n mclass,\n body: [supsub],\n isCharacterBox: utils.isCharacterBox(supsub)\n };\n },\n\n htmlBuilder: mclass_htmlBuilder,\n mathmlBuilder: mclass_mathmlBuilder\n});\n;// CONCATENATED MODULE: ./src/functions/pmb.js\n\n\n\n\n\n\n// \\pmb is a simulation of bold font.\n// The version of \\pmb in ambsy.sty works by typesetting three copies\n// with small offsets. We use CSS text-shadow.\n// It\'s a hack. Not as good as a real bold font. Better than nothing.\ndefineFunction({\n type: "pmb",\n names: ["\\\\pmb"],\n props: {\n numArgs: 1,\n allowedInText: true\n },\n\n handler(_ref, args) {\n let {\n parser\n } = _ref;\n return {\n type: "pmb",\n mode: parser.mode,\n mclass: binrelClass(args[0]),\n body: ordargument(args[0])\n };\n },\n\n htmlBuilder(group, options) {\n const elements = buildExpression(group.body, options, true);\n const node = buildCommon.makeSpan([group.mclass], elements, options);\n node.style.textShadow = "0.02em 0.01em 0.04px";\n return node;\n },\n\n mathmlBuilder(group, style) {\n const inner = buildMathML_buildExpression(group.body, style); // Wrap with an element.\n\n const node = new mathMLTree.MathNode("mstyle", inner);\n node.setAttribute("style", "text-shadow: 0.02em 0.01em 0.04px");\n return node;\n }\n\n});\n;// CONCATENATED MODULE: ./src/environments/cd.js\n\n\n\n\n\n\n\n\nconst cdArrowFunctionName = {\n ">": "\\\\\\\\cdrightarrow",\n "<": "\\\\\\\\cdleftarrow",\n "=": "\\\\\\\\cdlongequal",\n "A": "\\\\uparrow",\n "V": "\\\\downarrow",\n "|": "\\\\Vert",\n ".": "no arrow"\n};\n\nconst newCell = () => {\n // Create an empty cell, to be filled below with parse nodes.\n // The parseTree from this module must be constructed like the\n // one created by parseArray(), so an empty CD cell must\n // be a ParseNode<"styling">. And CD is always displaystyle.\n // So these values are fixed and flow can do implicit typing.\n return {\n type: "styling",\n body: [],\n mode: "math",\n style: "display"\n };\n};\n\nconst isStartOfArrow = node => {\n return node.type === "textord" && node.text === "@";\n};\n\nconst isLabelEnd = (node, endChar) => {\n return (node.type === "mathord" || node.type === "atom") && node.text === endChar;\n};\n\nfunction cdArrow(arrowChar, labels, parser) {\n // Return a parse tree of an arrow and its labels.\n // This acts in a way similar to a macro expansion.\n const funcName = cdArrowFunctionName[arrowChar];\n\n switch (funcName) {\n case "\\\\\\\\cdrightarrow":\n case "\\\\\\\\cdleftarrow":\n return parser.callFunction(funcName, [labels[0]], [labels[1]]);\n\n case "\\\\uparrow":\n case "\\\\downarrow":\n {\n const leftLabel = parser.callFunction("\\\\\\\\cdleft", [labels[0]], []);\n const bareArrow = {\n type: "atom",\n text: funcName,\n mode: "math",\n family: "rel"\n };\n const sizedArrow = parser.callFunction("\\\\Big", [bareArrow], []);\n const rightLabel = parser.callFunction("\\\\\\\\cdright", [labels[1]], []);\n const arrowGroup = {\n type: "ordgroup",\n mode: "math",\n body: [leftLabel, sizedArrow, rightLabel]\n };\n return parser.callFunction("\\\\\\\\cdparent", [arrowGroup], []);\n }\n\n case "\\\\\\\\cdlongequal":\n return parser.callFunction("\\\\\\\\cdlongequal", [], []);\n\n case "\\\\Vert":\n {\n const arrow = {\n type: "textord",\n text: "\\\\Vert",\n mode: "math"\n };\n return parser.callFunction("\\\\Big", [arrow], []);\n }\n\n default:\n return {\n type: "textord",\n text: " ",\n mode: "math"\n };\n }\n}\n\nfunction parseCD(parser) {\n // Get the array\'s parse nodes with \\\\ temporarily mapped to \\cr.\n const parsedRows = [];\n parser.gullet.beginGroup();\n parser.gullet.macros.set("\\\\cr", "\\\\\\\\\\\\relax");\n parser.gullet.beginGroup();\n\n while (true) {\n // eslint-disable-line no-constant-condition\n // Get the parse nodes for the next row.\n parsedRows.push(parser.parseExpression(false, "\\\\\\\\"));\n parser.gullet.endGroup();\n parser.gullet.beginGroup();\n const next = parser.fetch().text;\n\n if (next === "&" || next === "\\\\\\\\") {\n parser.consume();\n } else if (next === "\\\\end") {\n if (parsedRows[parsedRows.length - 1].length === 0) {\n parsedRows.pop(); // final row ended in \\\\\n }\n\n break;\n } else {\n throw new src_ParseError("Expected \\\\\\\\ or \\\\cr or \\\\end", parser.nextToken);\n }\n }\n\n let row = [];\n const body = [row]; // Loop thru the parse nodes. Collect them into cells and arrows.\n\n for (let i = 0; i < parsedRows.length; i++) {\n // Start a new row.\n const rowNodes = parsedRows[i]; // Create the first cell.\n\n let cell = newCell();\n\n for (let j = 0; j < rowNodes.length; j++) {\n if (!isStartOfArrow(rowNodes[j])) {\n // If a parseNode is not an arrow, it goes into a cell.\n cell.body.push(rowNodes[j]);\n } else {\n // Parse node j is an "@", the start of an arrow.\n // Before starting on the arrow, push the cell into `row`.\n row.push(cell); // Now collect parseNodes into an arrow.\n // The character after "@" defines the arrow type.\n\n j += 1;\n const arrowChar = assertSymbolNodeType(rowNodes[j]).text; // Create two empty label nodes. We may or may not use them.\n\n const labels = new Array(2);\n labels[0] = {\n type: "ordgroup",\n mode: "math",\n body: []\n };\n labels[1] = {\n type: "ordgroup",\n mode: "math",\n body: []\n }; // Process the arrow.\n\n if ("=|.".indexOf(arrowChar) > -1) {// Three "arrows", ``@=`, `@|`, and `@.`, do not take labels.\n // Do nothing here.\n } else if ("<>AV".indexOf(arrowChar) > -1) {\n // Four arrows, `@>>>`, `@<<<`, `@AAA`, and `@VVV`, each take\n // two optional labels. E.g. the right-point arrow syntax is\n // really: @>{optional label}>{optional label}>\n // Collect parseNodes into labels.\n for (let labelNum = 0; labelNum < 2; labelNum++) {\n let inLabel = true;\n\n for (let k = j + 1; k < rowNodes.length; k++) {\n if (isLabelEnd(rowNodes[k], arrowChar)) {\n inLabel = false;\n j = k;\n break;\n }\n\n if (isStartOfArrow(rowNodes[k])) {\n throw new src_ParseError("Missing a " + arrowChar + " character to complete a CD arrow.", rowNodes[k]);\n }\n\n labels[labelNum].body.push(rowNodes[k]);\n }\n\n if (inLabel) {\n // isLabelEnd never returned a true.\n throw new src_ParseError("Missing a " + arrowChar + " character to complete a CD arrow.", rowNodes[j]);\n }\n }\n } else {\n throw new src_ParseError("Expected one of \\"<>AV=|.\\" after @", rowNodes[j]);\n } // Now join the arrow to its labels.\n\n\n const arrow = cdArrow(arrowChar, labels, parser); // Wrap the arrow in ParseNode<"styling">.\n // This is done to match parseArray() behavior.\n\n const wrappedArrow = {\n type: "styling",\n body: [arrow],\n mode: "math",\n style: "display" // CD is always displaystyle.\n\n };\n row.push(wrappedArrow); // In CD\'s syntax, cells are implicit. That is, everything that\n // is not an arrow gets collected into a cell. So create an empty\n // cell now. It will collect upcoming parseNodes.\n\n cell = newCell();\n }\n }\n\n if (i % 2 === 0) {\n // Even-numbered rows consist of: cell, arrow, cell, arrow, ... cell\n // The last cell is not yet pushed into `row`, so:\n row.push(cell);\n } else {\n // Odd-numbered rows consist of: vert arrow, empty cell, ... vert arrow\n // Remove the empty cell that was placed at the beginning of `row`.\n row.shift();\n }\n\n row = [];\n body.push(row);\n } // End row group\n\n\n parser.gullet.endGroup(); // End array group defining \\\\\n\n parser.gullet.endGroup(); // define column separation.\n\n const cols = new Array(body[0].length).fill({\n type: "align",\n align: "c",\n pregap: 0.25,\n // CD package sets \\enskip between columns.\n postgap: 0.25 // So pre and post each get half an \\enskip, i.e. 0.25em.\n\n });\n return {\n type: "array",\n mode: "math",\n body,\n arraystretch: 1,\n addJot: true,\n rowGaps: [null],\n cols,\n colSeparationType: "CD",\n hLinesBeforeRow: new Array(body.length + 1).fill([])\n };\n} // The functions below are not available for general use.\n// They are here only for internal use by the {CD} environment in placing labels\n// next to vertical arrows.\n// We don\'t need any such functions for horizontal arrows because we can reuse\n// the functionality that already exists for extensible arrows.\n\ndefineFunction({\n type: "cdlabel",\n names: ["\\\\\\\\cdleft", "\\\\\\\\cdright"],\n props: {\n numArgs: 1\n },\n\n handler(_ref, args) {\n let {\n parser,\n funcName\n } = _ref;\n return {\n type: "cdlabel",\n mode: parser.mode,\n side: funcName.slice(4),\n label: args[0]\n };\n },\n\n htmlBuilder(group, options) {\n const newOptions = options.havingStyle(options.style.sup());\n const label = buildCommon.wrapFragment(buildGroup(group.label, newOptions, options), options);\n label.classes.push("cd-label-" + group.side);\n label.style.bottom = makeEm(0.8 - label.depth); // Zero out label height & depth, so vertical align of arrow is set\n // by the arrow height, not by the label.\n\n label.height = 0;\n label.depth = 0;\n return label;\n },\n\n mathmlBuilder(group, options) {\n let label = new mathMLTree.MathNode("mrow", [buildMathML_buildGroup(group.label, options)]);\n label = new mathMLTree.MathNode("mpadded", [label]);\n label.setAttribute("width", "0");\n\n if (group.side === "left") {\n label.setAttribute("lspace", "-1width");\n } // We have to guess at vertical alignment. We know the arrow is 1.8em tall,\n // But we don\'t know the height or depth of the label.\n\n\n label.setAttribute("voffset", "0.7em");\n label = new mathMLTree.MathNode("mstyle", [label]);\n label.setAttribute("displaystyle", "false");\n label.setAttribute("scriptlevel", "1");\n return label;\n }\n\n});\ndefineFunction({\n type: "cdlabelparent",\n names: ["\\\\\\\\cdparent"],\n props: {\n numArgs: 1\n },\n\n handler(_ref2, args) {\n let {\n parser\n } = _ref2;\n return {\n type: "cdlabelparent",\n mode: parser.mode,\n fragment: args[0]\n };\n },\n\n htmlBuilder(group, options) {\n // Wrap the vertical arrow and its labels.\n // The parent gets position: relative. The child gets position: absolute.\n // So CSS can locate the label correctly.\n const parent = buildCommon.wrapFragment(buildGroup(group.fragment, options), options);\n parent.classes.push("cd-vert-arrow");\n return parent;\n },\n\n mathmlBuilder(group, options) {\n return new mathMLTree.MathNode("mrow", [buildMathML_buildGroup(group.fragment, options)]);\n }\n\n});\n;// CONCATENATED MODULE: ./src/functions/char.js\n\n\n // \\@char is an internal function that takes a grouped decimal argument like\n// {123} and converts into symbol with code 123. It is used by the *macro*\n// \\char defined in macros.js.\n\ndefineFunction({\n type: "textord",\n names: ["\\\\@char"],\n props: {\n numArgs: 1,\n allowedInText: true\n },\n\n handler(_ref, args) {\n let {\n parser\n } = _ref;\n const arg = assertNodeType(args[0], "ordgroup");\n const group = arg.body;\n let number = "";\n\n for (let i = 0; i < group.length; i++) {\n const node = assertNodeType(group[i], "textord");\n number += node.text;\n }\n\n let code = parseInt(number);\n let text;\n\n if (isNaN(code)) {\n throw new src_ParseError("\\\\@char has non-numeric argument " + number); // If we drop IE support, the following code could be replaced with\n // text = String.fromCodePoint(code)\n } else if (code < 0 || code >= 0x10ffff) {\n throw new src_ParseError("\\\\@char with invalid code point " + number);\n } else if (code <= 0xffff) {\n text = String.fromCharCode(code);\n } else {\n // Astral code point; split into surrogate halves\n code -= 0x10000;\n text = String.fromCharCode((code >> 10) + 0xd800, (code & 0x3ff) + 0xdc00);\n }\n\n return {\n type: "textord",\n mode: parser.mode,\n text: text\n };\n }\n\n});\n;// CONCATENATED MODULE: ./src/functions/color.js\n\n\n\n\n\n\n\nconst color_htmlBuilder = (group, options) => {\n const elements = buildExpression(group.body, options.withColor(group.color), false); // \\color isn\'t supposed to affect the type of the elements it contains.\n // To accomplish this, we wrap the results in a fragment, so the inner\n // elements will be able to directly interact with their neighbors. For\n // example, `\\color{red}{2 +} 3` has the same spacing as `2 + 3`\n\n return buildCommon.makeFragment(elements);\n};\n\nconst color_mathmlBuilder = (group, options) => {\n const inner = buildMathML_buildExpression(group.body, options.withColor(group.color));\n const node = new mathMLTree.MathNode("mstyle", inner);\n node.setAttribute("mathcolor", group.color);\n return node;\n};\n\ndefineFunction({\n type: "color",\n names: ["\\\\textcolor"],\n props: {\n numArgs: 2,\n allowedInText: true,\n argTypes: ["color", "original"]\n },\n\n handler(_ref, args) {\n let {\n parser\n } = _ref;\n const color = assertNodeType(args[0], "color-token").color;\n const body = args[1];\n return {\n type: "color",\n mode: parser.mode,\n color,\n body: ordargument(body)\n };\n },\n\n htmlBuilder: color_htmlBuilder,\n mathmlBuilder: color_mathmlBuilder\n});\ndefineFunction({\n type: "color",\n names: ["\\\\color"],\n props: {\n numArgs: 1,\n allowedInText: true,\n argTypes: ["color"]\n },\n\n handler(_ref2, args) {\n let {\n parser,\n breakOnTokenText\n } = _ref2;\n const color = assertNodeType(args[0], "color-token").color; // Set macro \\current@color in current namespace to store the current\n // color, mimicking the behavior of color.sty.\n // This is currently used just to correctly color a \\right\n // that follows a \\color command.\n\n parser.gullet.macros.set("\\\\current@color", color); // Parse out the implicit body that should be colored.\n\n const body = parser.parseExpression(true, breakOnTokenText);\n return {\n type: "color",\n mode: parser.mode,\n color,\n body\n };\n },\n\n htmlBuilder: color_htmlBuilder,\n mathmlBuilder: color_mathmlBuilder\n});\n;// CONCATENATED MODULE: ./src/functions/cr.js\n// Row breaks within tabular environments, and line breaks at top level\n\n\n\n\n // \\DeclareRobustCommand\\\\{...\\@xnewline}\n\ndefineFunction({\n type: "cr",\n names: ["\\\\\\\\"],\n props: {\n numArgs: 0,\n numOptionalArgs: 0,\n allowedInText: true\n },\n\n handler(_ref, args, optArgs) {\n let {\n parser\n } = _ref;\n const size = parser.gullet.future().text === "[" ? parser.parseSizeGroup(true) : null;\n const newLine = !parser.settings.displayMode || !parser.settings.useStrictBehavior("newLineInDisplayMode", "In LaTeX, \\\\\\\\ or \\\\newline " + "does nothing in display mode");\n return {\n type: "cr",\n mode: parser.mode,\n newLine,\n size: size && assertNodeType(size, "size").value\n };\n },\n\n // The following builders are called only at the top level,\n // not within tabular/array environments.\n htmlBuilder(group, options) {\n const span = buildCommon.makeSpan(["mspace"], [], options);\n\n if (group.newLine) {\n span.classes.push("newline");\n\n if (group.size) {\n span.style.marginTop = makeEm(calculateSize(group.size, options));\n }\n }\n\n return span;\n },\n\n mathmlBuilder(group, options) {\n const node = new mathMLTree.MathNode("mspace");\n\n if (group.newLine) {\n node.setAttribute("linebreak", "newline");\n\n if (group.size) {\n node.setAttribute("height", makeEm(calculateSize(group.size, options)));\n }\n }\n\n return node;\n }\n\n});\n;// CONCATENATED MODULE: ./src/functions/def.js\n\n\n\nconst globalMap = {\n "\\\\global": "\\\\global",\n "\\\\long": "\\\\\\\\globallong",\n "\\\\\\\\globallong": "\\\\\\\\globallong",\n "\\\\def": "\\\\gdef",\n "\\\\gdef": "\\\\gdef",\n "\\\\edef": "\\\\xdef",\n "\\\\xdef": "\\\\xdef",\n "\\\\let": "\\\\\\\\globallet",\n "\\\\futurelet": "\\\\\\\\globalfuture"\n};\n\nconst checkControlSequence = tok => {\n const name = tok.text;\n\n if (/^(?:[\\\\{}$&#^_]|EOF)$/.test(name)) {\n throw new src_ParseError("Expected a control sequence", tok);\n }\n\n return name;\n};\n\nconst getRHS = parser => {\n let tok = parser.gullet.popToken();\n\n if (tok.text === "=") {\n // consume optional equals\n tok = parser.gullet.popToken();\n\n if (tok.text === " ") {\n // consume one optional space\n tok = parser.gullet.popToken();\n }\n }\n\n return tok;\n};\n\nconst letCommand = (parser, name, tok, global) => {\n let macro = parser.gullet.macros.get(tok.text);\n\n if (macro == null) {\n // don\'t expand it later even if a macro with the same name is defined\n // e.g., \\let\\foo=\\frac \\def\\frac{\\relax} \\frac12\n tok.noexpand = true;\n macro = {\n tokens: [tok],\n numArgs: 0,\n // reproduce the same behavior in expansion\n unexpandable: !parser.gullet.isExpandable(tok.text)\n };\n }\n\n parser.gullet.macros.set(name, macro, global);\n}; // -> |\n// -> |\\global\n// -> |\n// -> \\global|\\long|\\outer\n\n\ndefineFunction({\n type: "internal",\n names: ["\\\\global", "\\\\long", "\\\\\\\\globallong" // can’t be entered directly\n ],\n props: {\n numArgs: 0,\n allowedInText: true\n },\n\n handler(_ref) {\n let {\n parser,\n funcName\n } = _ref;\n parser.consumeSpaces();\n const token = parser.fetch();\n\n if (globalMap[token.text]) {\n // KaTeX doesn\'t have \\par, so ignore \\long\n if (funcName === "\\\\global" || funcName === "\\\\\\\\globallong") {\n token.text = globalMap[token.text];\n }\n\n return assertNodeType(parser.parseFunction(), "internal");\n }\n\n throw new src_ParseError("Invalid token after macro prefix", token);\n }\n\n}); // Basic support for macro definitions: \\def, \\gdef, \\edef, \\xdef\n// -> \n// -> \\def|\\gdef|\\edef|\\xdef\n// -> \n\ndefineFunction({\n type: "internal",\n names: ["\\\\def", "\\\\gdef", "\\\\edef", "\\\\xdef"],\n props: {\n numArgs: 0,\n allowedInText: true,\n primitive: true\n },\n\n handler(_ref2) {\n let {\n parser,\n funcName\n } = _ref2;\n let tok = parser.gullet.popToken();\n const name = tok.text;\n\n if (/^(?:[\\\\{}$&#^_]|EOF)$/.test(name)) {\n throw new src_ParseError("Expected a control sequence", tok);\n }\n\n let numArgs = 0;\n let insert;\n const delimiters = [[]]; // contains no braces\n\n while (parser.gullet.future().text !== "{") {\n tok = parser.gullet.popToken();\n\n if (tok.text === "#") {\n // If the very last character of the is #, so that\n // this # is immediately followed by {, TeX will behave as if the {\n // had been inserted at the right end of both the parameter text\n // and the replacement text.\n if (parser.gullet.future().text === "{") {\n insert = parser.gullet.future();\n delimiters[numArgs].push("{");\n break;\n } // A parameter, the first appearance of # must be followed by 1,\n // the next by 2, and so on; up to nine #’s are allowed\n\n\n tok = parser.gullet.popToken();\n\n if (!/^[1-9]$/.test(tok.text)) {\n throw new src_ParseError("Invalid argument number \\"" + tok.text + "\\"");\n }\n\n if (parseInt(tok.text) !== numArgs + 1) {\n throw new src_ParseError("Argument number \\"" + tok.text + "\\" out of order");\n }\n\n numArgs++;\n delimiters.push([]);\n } else if (tok.text === "EOF") {\n throw new src_ParseError("Expected a macro definition");\n } else {\n delimiters[numArgs].push(tok.text);\n }\n } // replacement text, enclosed in \'{\' and \'}\' and properly nested\n\n\n let {\n tokens\n } = parser.gullet.consumeArg();\n\n if (insert) {\n tokens.unshift(insert);\n }\n\n if (funcName === "\\\\edef" || funcName === "\\\\xdef") {\n tokens = parser.gullet.expandTokens(tokens);\n tokens.reverse(); // to fit in with stack order\n } // Final arg is the expansion of the macro\n\n\n parser.gullet.macros.set(name, {\n tokens,\n numArgs,\n delimiters\n }, funcName === globalMap[funcName]);\n return {\n type: "internal",\n mode: parser.mode\n };\n }\n\n}); // -> \n// -> \\futurelet\n// | \\let\n// -> |=\n\ndefineFunction({\n type: "internal",\n names: ["\\\\let", "\\\\\\\\globallet" // can’t be entered directly\n ],\n props: {\n numArgs: 0,\n allowedInText: true,\n primitive: true\n },\n\n handler(_ref3) {\n let {\n parser,\n funcName\n } = _ref3;\n const name = checkControlSequence(parser.gullet.popToken());\n parser.gullet.consumeSpaces();\n const tok = getRHS(parser);\n letCommand(parser, name, tok, funcName === "\\\\\\\\globallet");\n return {\n type: "internal",\n mode: parser.mode\n };\n }\n\n}); // ref: https://www.tug.org/TUGboat/tb09-3/tb22bechtolsheim.pdf\n\ndefineFunction({\n type: "internal",\n names: ["\\\\futurelet", "\\\\\\\\globalfuture" // can’t be entered directly\n ],\n props: {\n numArgs: 0,\n allowedInText: true,\n primitive: true\n },\n\n handler(_ref4) {\n let {\n parser,\n funcName\n } = _ref4;\n const name = checkControlSequence(parser.gullet.popToken());\n const middle = parser.gullet.popToken();\n const tok = parser.gullet.popToken();\n letCommand(parser, name, tok, funcName === "\\\\\\\\globalfuture");\n parser.gullet.pushToken(tok);\n parser.gullet.pushToken(middle);\n return {\n type: "internal",\n mode: parser.mode\n };\n }\n\n});\n;// CONCATENATED MODULE: ./src/delimiter.js\n/**\n * This file deals with creating delimiters of various sizes. The TeXbook\n * discusses these routines on page 441-442, in the "Another subroutine sets box\n * x to a specified variable delimiter" paragraph.\n *\n * There are three main routines here. `makeSmallDelim` makes a delimiter in the\n * normal font, but in either text, script, or scriptscript style.\n * `makeLargeDelim` makes a delimiter in textstyle, but in one of the Size1,\n * Size2, Size3, or Size4 fonts. `makeStackedDelim` makes a delimiter out of\n * smaller pieces that are stacked on top of one another.\n *\n * The functions take a parameter `center`, which determines if the delimiter\n * should be centered around the axis.\n *\n * Then, there are three exposed functions. `sizedDelim` makes a delimiter in\n * one of the given sizes. This is used for things like `\\bigl`.\n * `customSizedDelim` makes a delimiter with a given total height+depth. It is\n * called in places like `\\sqrt`. `leftRightDelim` makes an appropriate\n * delimiter which surrounds an expression of a given height an depth. It is\n * used in `\\left` and `\\right`.\n */\n\n\n\n\n\n\n\n\n\n\n\n/**\n * Get the metrics for a given symbol and font, after transformation (i.e.\n * after following replacement from symbols.js)\n */\nconst getMetrics = function (symbol, font, mode) {\n const replace = src_symbols.math[symbol] && src_symbols.math[symbol].replace;\n const metrics = getCharacterMetrics(replace || symbol, font, mode);\n\n if (!metrics) {\n throw new Error("Unsupported symbol " + symbol + " and font size " + font + ".");\n }\n\n return metrics;\n};\n/**\n * Puts a delimiter span in a given style, and adds appropriate height, depth,\n * and maxFontSizes.\n */\n\n\nconst styleWrap = function (delim, toStyle, options, classes) {\n const newOptions = options.havingBaseStyle(toStyle);\n const span = buildCommon.makeSpan(classes.concat(newOptions.sizingClasses(options)), [delim], options);\n const delimSizeMultiplier = newOptions.sizeMultiplier / options.sizeMultiplier;\n span.height *= delimSizeMultiplier;\n span.depth *= delimSizeMultiplier;\n span.maxFontSize = newOptions.sizeMultiplier;\n return span;\n};\n\nconst centerSpan = function (span, options, style) {\n const newOptions = options.havingBaseStyle(style);\n const shift = (1 - options.sizeMultiplier / newOptions.sizeMultiplier) * options.fontMetrics().axisHeight;\n span.classes.push("delimcenter");\n span.style.top = makeEm(shift);\n span.height -= shift;\n span.depth += shift;\n};\n/**\n * Makes a small delimiter. This is a delimiter that comes in the Main-Regular\n * font, but is restyled to either be in textstyle, scriptstyle, or\n * scriptscriptstyle.\n */\n\n\nconst makeSmallDelim = function (delim, style, center, options, mode, classes) {\n const text = buildCommon.makeSymbol(delim, "Main-Regular", mode, options);\n const span = styleWrap(text, style, options, classes);\n\n if (center) {\n centerSpan(span, options, style);\n }\n\n return span;\n};\n/**\n * Builds a symbol in the given font size (note size is an integer)\n */\n\n\nconst mathrmSize = function (value, size, mode, options) {\n return buildCommon.makeSymbol(value, "Size" + size + "-Regular", mode, options);\n};\n/**\n * Makes a large delimiter. This is a delimiter that comes in the Size1, Size2,\n * Size3, or Size4 fonts. It is always rendered in textstyle.\n */\n\n\nconst makeLargeDelim = function (delim, size, center, options, mode, classes) {\n const inner = mathrmSize(delim, size, mode, options);\n const span = styleWrap(buildCommon.makeSpan(["delimsizing", "size" + size], [inner], options), src_Style.TEXT, options, classes);\n\n if (center) {\n centerSpan(span, options, src_Style.TEXT);\n }\n\n return span;\n};\n/**\n * Make a span from a font glyph with the given offset and in the given font.\n * This is used in makeStackedDelim to make the stacking pieces for the delimiter.\n */\n\n\nconst makeGlyphSpan = function (symbol, font, mode) {\n let sizeClass; // Apply the correct CSS class to choose the right font.\n\n if (font === "Size1-Regular") {\n sizeClass = "delim-size1";\n } else\n /* if (font === "Size4-Regular") */\n {\n sizeClass = "delim-size4";\n }\n\n const corner = buildCommon.makeSpan(["delimsizinginner", sizeClass], [buildCommon.makeSpan([], [buildCommon.makeSymbol(symbol, font, mode)])]); // Since this will be passed into `makeVList` in the end, wrap the element\n // in the appropriate tag that VList uses.\n\n return {\n type: "elem",\n elem: corner\n };\n};\n\nconst makeInner = function (ch, height, options) {\n // Create a span with inline SVG for the inner part of a tall stacked delimiter.\n const width = fontMetricsData[\'Size4-Regular\'][ch.charCodeAt(0)] ? fontMetricsData[\'Size4-Regular\'][ch.charCodeAt(0)][4] : fontMetricsData[\'Size1-Regular\'][ch.charCodeAt(0)][4];\n const path = new PathNode("inner", innerPath(ch, Math.round(1000 * height)));\n const svgNode = new SvgNode([path], {\n "width": makeEm(width),\n "height": makeEm(height),\n // Override CSS rule `.katex svg { width: 100% }`\n "style": "width:" + makeEm(width),\n "viewBox": "0 0 " + 1000 * width + " " + Math.round(1000 * height),\n "preserveAspectRatio": "xMinYMin"\n });\n const span = buildCommon.makeSvgSpan([], [svgNode], options);\n span.height = height;\n span.style.height = makeEm(height);\n span.style.width = makeEm(width);\n return {\n type: "elem",\n elem: span\n };\n}; // Helpers for makeStackedDelim\n\n\nconst lapInEms = 0.008;\nconst lap = {\n type: "kern",\n size: -1 * lapInEms\n};\nconst verts = ["|", "\\\\lvert", "\\\\rvert", "\\\\vert"];\nconst doubleVerts = ["\\\\|", "\\\\lVert", "\\\\rVert", "\\\\Vert"];\n/**\n * Make a stacked delimiter out of a given delimiter, with the total height at\n * least `heightTotal`. This routine is mentioned on page 442 of the TeXbook.\n */\n\nconst makeStackedDelim = function (delim, heightTotal, center, options, mode, classes) {\n // There are four parts, the top, an optional middle, a repeated part, and a\n // bottom.\n let top;\n let middle;\n let repeat;\n let bottom;\n let svgLabel = "";\n let viewBoxWidth = 0;\n top = repeat = bottom = delim;\n middle = null; // Also keep track of what font the delimiters are in\n\n let font = "Size1-Regular"; // We set the parts and font based on the symbol. Note that we use\n // \'\\u23d0\' instead of \'|\' and \'\\u2016\' instead of \'\\\\|\' for the\n // repeats of the arrows\n\n if (delim === "\\\\uparrow") {\n repeat = bottom = "\\u23d0";\n } else if (delim === "\\\\Uparrow") {\n repeat = bottom = "\\u2016";\n } else if (delim === "\\\\downarrow") {\n top = repeat = "\\u23d0";\n } else if (delim === "\\\\Downarrow") {\n top = repeat = "\\u2016";\n } else if (delim === "\\\\updownarrow") {\n top = "\\\\uparrow";\n repeat = "\\u23d0";\n bottom = "\\\\downarrow";\n } else if (delim === "\\\\Updownarrow") {\n top = "\\\\Uparrow";\n repeat = "\\u2016";\n bottom = "\\\\Downarrow";\n } else if (utils.contains(verts, delim)) {\n repeat = "\\u2223";\n svgLabel = "vert";\n viewBoxWidth = 333;\n } else if (utils.contains(doubleVerts, delim)) {\n repeat = "\\u2225";\n svgLabel = "doublevert";\n viewBoxWidth = 556;\n } else if (delim === "[" || delim === "\\\\lbrack") {\n top = "\\u23a1";\n repeat = "\\u23a2";\n bottom = "\\u23a3";\n font = "Size4-Regular";\n svgLabel = "lbrack";\n viewBoxWidth = 667;\n } else if (delim === "]" || delim === "\\\\rbrack") {\n top = "\\u23a4";\n repeat = "\\u23a5";\n bottom = "\\u23a6";\n font = "Size4-Regular";\n svgLabel = "rbrack";\n viewBoxWidth = 667;\n } else if (delim === "\\\\lfloor" || delim === "\\u230a") {\n repeat = top = "\\u23a2";\n bottom = "\\u23a3";\n font = "Size4-Regular";\n svgLabel = "lfloor";\n viewBoxWidth = 667;\n } else if (delim === "\\\\lceil" || delim === "\\u2308") {\n top = "\\u23a1";\n repeat = bottom = "\\u23a2";\n font = "Size4-Regular";\n svgLabel = "lceil";\n viewBoxWidth = 667;\n } else if (delim === "\\\\rfloor" || delim === "\\u230b") {\n repeat = top = "\\u23a5";\n bottom = "\\u23a6";\n font = "Size4-Regular";\n svgLabel = "rfloor";\n viewBoxWidth = 667;\n } else if (delim === "\\\\rceil" || delim === "\\u2309") {\n top = "\\u23a4";\n repeat = bottom = "\\u23a5";\n font = "Size4-Regular";\n svgLabel = "rceil";\n viewBoxWidth = 667;\n } else if (delim === "(" || delim === "\\\\lparen") {\n top = "\\u239b";\n repeat = "\\u239c";\n bottom = "\\u239d";\n font = "Size4-Regular";\n svgLabel = "lparen";\n viewBoxWidth = 875;\n } else if (delim === ")" || delim === "\\\\rparen") {\n top = "\\u239e";\n repeat = "\\u239f";\n bottom = "\\u23a0";\n font = "Size4-Regular";\n svgLabel = "rparen";\n viewBoxWidth = 875;\n } else if (delim === "\\\\{" || delim === "\\\\lbrace") {\n top = "\\u23a7";\n middle = "\\u23a8";\n bottom = "\\u23a9";\n repeat = "\\u23aa";\n font = "Size4-Regular";\n } else if (delim === "\\\\}" || delim === "\\\\rbrace") {\n top = "\\u23ab";\n middle = "\\u23ac";\n bottom = "\\u23ad";\n repeat = "\\u23aa";\n font = "Size4-Regular";\n } else if (delim === "\\\\lgroup" || delim === "\\u27ee") {\n top = "\\u23a7";\n bottom = "\\u23a9";\n repeat = "\\u23aa";\n font = "Size4-Regular";\n } else if (delim === "\\\\rgroup" || delim === "\\u27ef") {\n top = "\\u23ab";\n bottom = "\\u23ad";\n repeat = "\\u23aa";\n font = "Size4-Regular";\n } else if (delim === "\\\\lmoustache" || delim === "\\u23b0") {\n top = "\\u23a7";\n bottom = "\\u23ad";\n repeat = "\\u23aa";\n font = "Size4-Regular";\n } else if (delim === "\\\\rmoustache" || delim === "\\u23b1") {\n top = "\\u23ab";\n bottom = "\\u23a9";\n repeat = "\\u23aa";\n font = "Size4-Regular";\n } // Get the metrics of the four sections\n\n\n const topMetrics = getMetrics(top, font, mode);\n const topHeightTotal = topMetrics.height + topMetrics.depth;\n const repeatMetrics = getMetrics(repeat, font, mode);\n const repeatHeightTotal = repeatMetrics.height + repeatMetrics.depth;\n const bottomMetrics = getMetrics(bottom, font, mode);\n const bottomHeightTotal = bottomMetrics.height + bottomMetrics.depth;\n let middleHeightTotal = 0;\n let middleFactor = 1;\n\n if (middle !== null) {\n const middleMetrics = getMetrics(middle, font, mode);\n middleHeightTotal = middleMetrics.height + middleMetrics.depth;\n middleFactor = 2; // repeat symmetrically above and below middle\n } // Calculate the minimal height that the delimiter can have.\n // It is at least the size of the top, bottom, and optional middle combined.\n\n\n const minHeight = topHeightTotal + bottomHeightTotal + middleHeightTotal; // Compute the number of copies of the repeat symbol we will need\n\n const repeatCount = Math.max(0, Math.ceil((heightTotal - minHeight) / (middleFactor * repeatHeightTotal))); // Compute the total height of the delimiter including all the symbols\n\n const realHeightTotal = minHeight + repeatCount * middleFactor * repeatHeightTotal; // The center of the delimiter is placed at the center of the axis. Note\n // that in this context, "center" means that the delimiter should be\n // centered around the axis in the current style, while normally it is\n // centered around the axis in textstyle.\n\n let axisHeight = options.fontMetrics().axisHeight;\n\n if (center) {\n axisHeight *= options.sizeMultiplier;\n } // Calculate the depth\n\n\n const depth = realHeightTotal / 2 - axisHeight; // Now, we start building the pieces that will go into the vlist\n // Keep a list of the pieces of the stacked delimiter\n\n const stack = [];\n\n if (svgLabel.length > 0) {\n // Instead of stacking glyphs, create a single SVG.\n // This evades browser problems with imprecise positioning of spans.\n const midHeight = realHeightTotal - topHeightTotal - bottomHeightTotal;\n const viewBoxHeight = Math.round(realHeightTotal * 1000);\n const pathStr = tallDelim(svgLabel, Math.round(midHeight * 1000));\n const path = new PathNode(svgLabel, pathStr);\n const width = (viewBoxWidth / 1000).toFixed(3) + "em";\n const height = (viewBoxHeight / 1000).toFixed(3) + "em";\n const svg = new SvgNode([path], {\n "width": width,\n "height": height,\n "viewBox": "0 0 " + viewBoxWidth + " " + viewBoxHeight\n });\n const wrapper = buildCommon.makeSvgSpan([], [svg], options);\n wrapper.height = viewBoxHeight / 1000;\n wrapper.style.width = width;\n wrapper.style.height = height;\n stack.push({\n type: "elem",\n elem: wrapper\n });\n } else {\n // Stack glyphs\n // Start by adding the bottom symbol\n stack.push(makeGlyphSpan(bottom, font, mode));\n stack.push(lap); // overlap\n\n if (middle === null) {\n // The middle section will be an SVG. Make it an extra 0.016em tall.\n // We\'ll overlap by 0.008em at top and bottom.\n const innerHeight = realHeightTotal - topHeightTotal - bottomHeightTotal + 2 * lapInEms;\n stack.push(makeInner(repeat, innerHeight, options));\n } else {\n // When there is a middle bit, we need the middle part and two repeated\n // sections\n const innerHeight = (realHeightTotal - topHeightTotal - bottomHeightTotal - middleHeightTotal) / 2 + 2 * lapInEms;\n stack.push(makeInner(repeat, innerHeight, options)); // Now insert the middle of the brace.\n\n stack.push(lap);\n stack.push(makeGlyphSpan(middle, font, mode));\n stack.push(lap);\n stack.push(makeInner(repeat, innerHeight, options));\n } // Add the top symbol\n\n\n stack.push(lap);\n stack.push(makeGlyphSpan(top, font, mode));\n } // Finally, build the vlist\n\n\n const newOptions = options.havingBaseStyle(src_Style.TEXT);\n const inner = buildCommon.makeVList({\n positionType: "bottom",\n positionData: depth,\n children: stack\n }, newOptions);\n return styleWrap(buildCommon.makeSpan(["delimsizing", "mult"], [inner], newOptions), src_Style.TEXT, options, classes);\n}; // All surds have 0.08em padding above the vinculum inside the SVG.\n// That keeps browser span height rounding error from pinching the line.\n\n\nconst vbPad = 80; // padding above the surd, measured inside the viewBox.\n\nconst emPad = 0.08; // padding, in ems, measured in the document.\n\nconst sqrtSvg = function (sqrtName, height, viewBoxHeight, extraVinculum, options) {\n const path = sqrtPath(sqrtName, extraVinculum, viewBoxHeight);\n const pathNode = new PathNode(sqrtName, path);\n const svg = new SvgNode([pathNode], {\n // Note: 1000:1 ratio of viewBox to document em width.\n "width": "400em",\n "height": makeEm(height),\n "viewBox": "0 0 400000 " + viewBoxHeight,\n "preserveAspectRatio": "xMinYMin slice"\n });\n return buildCommon.makeSvgSpan(["hide-tail"], [svg], options);\n};\n/**\n * Make a sqrt image of the given height,\n */\n\n\nconst makeSqrtImage = function (height, options) {\n // Define a newOptions that removes the effect of size changes such as \\Huge.\n // We don\'t pick different a height surd for \\Huge. For it, we scale up.\n const newOptions = options.havingBaseSizing(); // Pick the desired surd glyph from a sequence of surds.\n\n const delim = traverseSequence("\\\\surd", height * newOptions.sizeMultiplier, stackLargeDelimiterSequence, newOptions);\n let sizeMultiplier = newOptions.sizeMultiplier; // default\n // The standard sqrt SVGs each have a 0.04em thick vinculum.\n // If Settings.minRuleThickness is larger than that, we add extraVinculum.\n\n const extraVinculum = Math.max(0, options.minRuleThickness - options.fontMetrics().sqrtRuleThickness); // Create a span containing an SVG image of a sqrt symbol.\n\n let span;\n let spanHeight = 0;\n let texHeight = 0;\n let viewBoxHeight = 0;\n let advanceWidth; // We create viewBoxes with 80 units of "padding" above each surd.\n // Then browser rounding error on the parent span height will not\n // encroach on the ink of the vinculum. But that padding is not\n // included in the TeX-like `height` used for calculation of\n // vertical alignment. So texHeight = span.height < span.style.height.\n\n if (delim.type === "small") {\n // Get an SVG that is derived from glyph U+221A in font KaTeX-Main.\n // 1000 unit normal glyph height.\n viewBoxHeight = 1000 + 1000 * extraVinculum + vbPad;\n\n if (height < 1.0) {\n sizeMultiplier = 1.0; // mimic a \\textfont radical\n } else if (height < 1.4) {\n sizeMultiplier = 0.7; // mimic a \\scriptfont radical\n }\n\n spanHeight = (1.0 + extraVinculum + emPad) / sizeMultiplier;\n texHeight = (1.00 + extraVinculum) / sizeMultiplier;\n span = sqrtSvg("sqrtMain", spanHeight, viewBoxHeight, extraVinculum, options);\n span.style.minWidth = "0.853em";\n advanceWidth = 0.833 / sizeMultiplier; // from the font.\n } else if (delim.type === "large") {\n // These SVGs come from fonts: KaTeX_Size1, _Size2, etc.\n viewBoxHeight = (1000 + vbPad) * sizeToMaxHeight[delim.size];\n texHeight = (sizeToMaxHeight[delim.size] + extraVinculum) / sizeMultiplier;\n spanHeight = (sizeToMaxHeight[delim.size] + extraVinculum + emPad) / sizeMultiplier;\n span = sqrtSvg("sqrtSize" + delim.size, spanHeight, viewBoxHeight, extraVinculum, options);\n span.style.minWidth = "1.02em";\n advanceWidth = 1.0 / sizeMultiplier; // 1.0 from the font.\n } else {\n // Tall sqrt. In TeX, this would be stacked using multiple glyphs.\n // We\'ll use a single SVG to accomplish the same thing.\n spanHeight = height + extraVinculum + emPad;\n texHeight = height + extraVinculum;\n viewBoxHeight = Math.floor(1000 * height + extraVinculum) + vbPad;\n span = sqrtSvg("sqrtTall", spanHeight, viewBoxHeight, extraVinculum, options);\n span.style.minWidth = "0.742em";\n advanceWidth = 1.056;\n }\n\n span.height = texHeight;\n span.style.height = makeEm(spanHeight);\n return {\n span,\n advanceWidth,\n // Calculate the actual line width.\n // This actually should depend on the chosen font -- e.g. \\boldmath\n // should use the thicker surd symbols from e.g. KaTeX_Main-Bold, and\n // have thicker rules.\n ruleWidth: (options.fontMetrics().sqrtRuleThickness + extraVinculum) * sizeMultiplier\n };\n}; // There are three kinds of delimiters, delimiters that stack when they become\n// too large\n\n\nconst stackLargeDelimiters = ["(", "\\\\lparen", ")", "\\\\rparen", "[", "\\\\lbrack", "]", "\\\\rbrack", "\\\\{", "\\\\lbrace", "\\\\}", "\\\\rbrace", "\\\\lfloor", "\\\\rfloor", "\\u230a", "\\u230b", "\\\\lceil", "\\\\rceil", "\\u2308", "\\u2309", "\\\\surd"]; // delimiters that always stack\n\nconst stackAlwaysDelimiters = ["\\\\uparrow", "\\\\downarrow", "\\\\updownarrow", "\\\\Uparrow", "\\\\Downarrow", "\\\\Updownarrow", "|", "\\\\|", "\\\\vert", "\\\\Vert", "\\\\lvert", "\\\\rvert", "\\\\lVert", "\\\\rVert", "\\\\lgroup", "\\\\rgroup", "\\u27ee", "\\u27ef", "\\\\lmoustache", "\\\\rmoustache", "\\u23b0", "\\u23b1"]; // and delimiters that never stack\n\nconst stackNeverDelimiters = ["<", ">", "\\\\langle", "\\\\rangle", "/", "\\\\backslash", "\\\\lt", "\\\\gt"]; // Metrics of the different sizes. Found by looking at TeX\'s output of\n// $\\bigl| // \\Bigl| \\biggl| \\Biggl| \\showlists$\n// Used to create stacked delimiters of appropriate sizes in makeSizedDelim.\n\nconst sizeToMaxHeight = [0, 1.2, 1.8, 2.4, 3.0];\n/**\n * Used to create a delimiter of a specific size, where `size` is 1, 2, 3, or 4.\n */\n\nconst makeSizedDelim = function (delim, size, options, mode, classes) {\n // < and > turn into \\langle and \\rangle in delimiters\n if (delim === "<" || delim === "\\\\lt" || delim === "\\u27e8") {\n delim = "\\\\langle";\n } else if (delim === ">" || delim === "\\\\gt" || delim === "\\u27e9") {\n delim = "\\\\rangle";\n } // Sized delimiters are never centered.\n\n\n if (utils.contains(stackLargeDelimiters, delim) || utils.contains(stackNeverDelimiters, delim)) {\n return makeLargeDelim(delim, size, false, options, mode, classes);\n } else if (utils.contains(stackAlwaysDelimiters, delim)) {\n return makeStackedDelim(delim, sizeToMaxHeight[size], false, options, mode, classes);\n } else {\n throw new src_ParseError("Illegal delimiter: \'" + delim + "\'");\n }\n};\n/**\n * There are three different sequences of delimiter sizes that the delimiters\n * follow depending on the kind of delimiter. This is used when creating custom\n * sized delimiters to decide whether to create a small, large, or stacked\n * delimiter.\n *\n * In real TeX, these sequences aren\'t explicitly defined, but are instead\n * defined inside the font metrics. Since there are only three sequences that\n * are possible for the delimiters that TeX defines, it is easier to just encode\n * them explicitly here.\n */\n\n\n// Delimiters that never stack try small delimiters and large delimiters only\nconst stackNeverDelimiterSequence = [{\n type: "small",\n style: src_Style.SCRIPTSCRIPT\n}, {\n type: "small",\n style: src_Style.SCRIPT\n}, {\n type: "small",\n style: src_Style.TEXT\n}, {\n type: "large",\n size: 1\n}, {\n type: "large",\n size: 2\n}, {\n type: "large",\n size: 3\n}, {\n type: "large",\n size: 4\n}]; // Delimiters that always stack try the small delimiters first, then stack\n\nconst stackAlwaysDelimiterSequence = [{\n type: "small",\n style: src_Style.SCRIPTSCRIPT\n}, {\n type: "small",\n style: src_Style.SCRIPT\n}, {\n type: "small",\n style: src_Style.TEXT\n}, {\n type: "stack"\n}]; // Delimiters that stack when large try the small and then large delimiters, and\n// stack afterwards\n\nconst stackLargeDelimiterSequence = [{\n type: "small",\n style: src_Style.SCRIPTSCRIPT\n}, {\n type: "small",\n style: src_Style.SCRIPT\n}, {\n type: "small",\n style: src_Style.TEXT\n}, {\n type: "large",\n size: 1\n}, {\n type: "large",\n size: 2\n}, {\n type: "large",\n size: 3\n}, {\n type: "large",\n size: 4\n}, {\n type: "stack"\n}];\n/**\n * Get the font used in a delimiter based on what kind of delimiter it is.\n * TODO(#963) Use more specific font family return type once that is introduced.\n */\n\nconst delimTypeToFont = function (type) {\n if (type.type === "small") {\n return "Main-Regular";\n } else if (type.type === "large") {\n return "Size" + type.size + "-Regular";\n } else if (type.type === "stack") {\n return "Size4-Regular";\n } else {\n throw new Error("Add support for delim type \'" + type.type + "\' here.");\n }\n};\n/**\n * Traverse a sequence of types of delimiters to decide what kind of delimiter\n * should be used to create a delimiter of the given height+depth.\n */\n\n\nconst traverseSequence = function (delim, height, sequence, options) {\n // Here, we choose the index we should start at in the sequences. In smaller\n // sizes (which correspond to larger numbers in style.size) we start earlier\n // in the sequence. Thus, scriptscript starts at index 3-3=0, script starts\n // at index 3-2=1, text starts at 3-1=2, and display starts at min(2,3-0)=2\n const start = Math.min(2, 3 - options.style.size);\n\n for (let i = start; i < sequence.length; i++) {\n if (sequence[i].type === "stack") {\n // This is always the last delimiter, so we just break the loop now.\n break;\n }\n\n const metrics = getMetrics(delim, delimTypeToFont(sequence[i]), "math");\n let heightDepth = metrics.height + metrics.depth; // Small delimiters are scaled down versions of the same font, so we\n // account for the style change size.\n\n if (sequence[i].type === "small") {\n const newOptions = options.havingBaseStyle(sequence[i].style);\n heightDepth *= newOptions.sizeMultiplier;\n } // Check if the delimiter at this size works for the given height.\n\n\n if (heightDepth > height) {\n return sequence[i];\n }\n } // If we reached the end of the sequence, return the last sequence element.\n\n\n return sequence[sequence.length - 1];\n};\n/**\n * Make a delimiter of a given height+depth, with optional centering. Here, we\n * traverse the sequences, and create a delimiter that the sequence tells us to.\n */\n\n\nconst makeCustomSizedDelim = function (delim, height, center, options, mode, classes) {\n if (delim === "<" || delim === "\\\\lt" || delim === "\\u27e8") {\n delim = "\\\\langle";\n } else if (delim === ">" || delim === "\\\\gt" || delim === "\\u27e9") {\n delim = "\\\\rangle";\n } // Decide what sequence to use\n\n\n let sequence;\n\n if (utils.contains(stackNeverDelimiters, delim)) {\n sequence = stackNeverDelimiterSequence;\n } else if (utils.contains(stackLargeDelimiters, delim)) {\n sequence = stackLargeDelimiterSequence;\n } else {\n sequence = stackAlwaysDelimiterSequence;\n } // Look through the sequence\n\n\n const delimType = traverseSequence(delim, height, sequence, options); // Get the delimiter from font glyphs.\n // Depending on the sequence element we decided on, call the\n // appropriate function.\n\n if (delimType.type === "small") {\n return makeSmallDelim(delim, delimType.style, center, options, mode, classes);\n } else if (delimType.type === "large") {\n return makeLargeDelim(delim, delimType.size, center, options, mode, classes);\n } else\n /* if (delimType.type === "stack") */\n {\n return makeStackedDelim(delim, height, center, options, mode, classes);\n }\n};\n/**\n * Make a delimiter for use with `\\left` and `\\right`, given a height and depth\n * of an expression that the delimiters surround.\n */\n\n\nconst makeLeftRightDelim = function (delim, height, depth, options, mode, classes) {\n // We always center \\left/\\right delimiters, so the axis is always shifted\n const axisHeight = options.fontMetrics().axisHeight * options.sizeMultiplier; // Taken from TeX source, tex.web, function make_left_right\n\n const delimiterFactor = 901;\n const delimiterExtend = 5.0 / options.fontMetrics().ptPerEm;\n const maxDistFromAxis = Math.max(height - axisHeight, depth + axisHeight);\n const totalHeight = Math.max( // In real TeX, calculations are done using integral values which are\n // 65536 per pt, or 655360 per em. So, the division here truncates in\n // TeX but doesn\'t here, producing different results. If we wanted to\n // exactly match TeX\'s calculation, we could do\n // Math.floor(655360 * maxDistFromAxis / 500) *\n // delimiterFactor / 655360\n // (To see the difference, compare\n // x^{x^{\\left(\\rule{0.1em}{0.68em}\\right)}}\n // in TeX and KaTeX)\n maxDistFromAxis / 500 * delimiterFactor, 2 * maxDistFromAxis - delimiterExtend); // Finally, we defer to `makeCustomSizedDelim` with our calculated total\n // height\n\n return makeCustomSizedDelim(delim, totalHeight, true, options, mode, classes);\n};\n\n/* harmony default export */ var delimiter = ({\n sqrtImage: makeSqrtImage,\n sizedDelim: makeSizedDelim,\n sizeToMaxHeight: sizeToMaxHeight,\n customSizedDelim: makeCustomSizedDelim,\n leftRightDelim: makeLeftRightDelim\n});\n;// CONCATENATED MODULE: ./src/functions/delimsizing.js\n\n\n\n\n\n\n\n\n\n\n// Extra data needed for the delimiter handler down below\nconst delimiterSizes = {\n "\\\\bigl": {\n mclass: "mopen",\n size: 1\n },\n "\\\\Bigl": {\n mclass: "mopen",\n size: 2\n },\n "\\\\biggl": {\n mclass: "mopen",\n size: 3\n },\n "\\\\Biggl": {\n mclass: "mopen",\n size: 4\n },\n "\\\\bigr": {\n mclass: "mclose",\n size: 1\n },\n "\\\\Bigr": {\n mclass: "mclose",\n size: 2\n },\n "\\\\biggr": {\n mclass: "mclose",\n size: 3\n },\n "\\\\Biggr": {\n mclass: "mclose",\n size: 4\n },\n "\\\\bigm": {\n mclass: "mrel",\n size: 1\n },\n "\\\\Bigm": {\n mclass: "mrel",\n size: 2\n },\n "\\\\biggm": {\n mclass: "mrel",\n size: 3\n },\n "\\\\Biggm": {\n mclass: "mrel",\n size: 4\n },\n "\\\\big": {\n mclass: "mord",\n size: 1\n },\n "\\\\Big": {\n mclass: "mord",\n size: 2\n },\n "\\\\bigg": {\n mclass: "mord",\n size: 3\n },\n "\\\\Bigg": {\n mclass: "mord",\n size: 4\n }\n};\nconst delimiters = ["(", "\\\\lparen", ")", "\\\\rparen", "[", "\\\\lbrack", "]", "\\\\rbrack", "\\\\{", "\\\\lbrace", "\\\\}", "\\\\rbrace", "\\\\lfloor", "\\\\rfloor", "\\u230a", "\\u230b", "\\\\lceil", "\\\\rceil", "\\u2308", "\\u2309", "<", ">", "\\\\langle", "\\u27e8", "\\\\rangle", "\\u27e9", "\\\\lt", "\\\\gt", "\\\\lvert", "\\\\rvert", "\\\\lVert", "\\\\rVert", "\\\\lgroup", "\\\\rgroup", "\\u27ee", "\\u27ef", "\\\\lmoustache", "\\\\rmoustache", "\\u23b0", "\\u23b1", "/", "\\\\backslash", "|", "\\\\vert", "\\\\|", "\\\\Vert", "\\\\uparrow", "\\\\Uparrow", "\\\\downarrow", "\\\\Downarrow", "\\\\updownarrow", "\\\\Updownarrow", "."];\n\n// Delimiter functions\nfunction checkDelimiter(delim, context) {\n const symDelim = checkSymbolNodeType(delim);\n\n if (symDelim && utils.contains(delimiters, symDelim.text)) {\n return symDelim;\n } else if (symDelim) {\n throw new src_ParseError("Invalid delimiter \'" + symDelim.text + "\' after \'" + context.funcName + "\'", delim);\n } else {\n throw new src_ParseError("Invalid delimiter type \'" + delim.type + "\'", delim);\n }\n}\n\ndefineFunction({\n type: "delimsizing",\n names: ["\\\\bigl", "\\\\Bigl", "\\\\biggl", "\\\\Biggl", "\\\\bigr", "\\\\Bigr", "\\\\biggr", "\\\\Biggr", "\\\\bigm", "\\\\Bigm", "\\\\biggm", "\\\\Biggm", "\\\\big", "\\\\Big", "\\\\bigg", "\\\\Bigg"],\n props: {\n numArgs: 1,\n argTypes: ["primitive"]\n },\n handler: (context, args) => {\n const delim = checkDelimiter(args[0], context);\n return {\n type: "delimsizing",\n mode: context.parser.mode,\n size: delimiterSizes[context.funcName].size,\n mclass: delimiterSizes[context.funcName].mclass,\n delim: delim.text\n };\n },\n htmlBuilder: (group, options) => {\n if (group.delim === ".") {\n // Empty delimiters still count as elements, even though they don\'t\n // show anything.\n return buildCommon.makeSpan([group.mclass]);\n } // Use delimiter.sizedDelim to generate the delimiter.\n\n\n return delimiter.sizedDelim(group.delim, group.size, options, group.mode, [group.mclass]);\n },\n mathmlBuilder: group => {\n const children = [];\n\n if (group.delim !== ".") {\n children.push(makeText(group.delim, group.mode));\n }\n\n const node = new mathMLTree.MathNode("mo", children);\n\n if (group.mclass === "mopen" || group.mclass === "mclose") {\n // Only some of the delimsizing functions act as fences, and they\n // return "mopen" or "mclose" mclass.\n node.setAttribute("fence", "true");\n } else {\n // Explicitly disable fencing if it\'s not a fence, to override the\n // defaults.\n node.setAttribute("fence", "false");\n }\n\n node.setAttribute("stretchy", "true");\n const size = makeEm(delimiter.sizeToMaxHeight[group.size]);\n node.setAttribute("minsize", size);\n node.setAttribute("maxsize", size);\n return node;\n }\n});\n\nfunction assertParsed(group) {\n if (!group.body) {\n throw new Error("Bug: The leftright ParseNode wasn\'t fully parsed.");\n }\n}\n\ndefineFunction({\n type: "leftright-right",\n names: ["\\\\right"],\n props: {\n numArgs: 1,\n primitive: true\n },\n handler: (context, args) => {\n // \\left case below triggers parsing of \\right in\n // `const right = parser.parseFunction();`\n // uses this return value.\n const color = context.parser.gullet.macros.get("\\\\current@color");\n\n if (color && typeof color !== "string") {\n throw new src_ParseError("\\\\current@color set to non-string in \\\\right");\n }\n\n return {\n type: "leftright-right",\n mode: context.parser.mode,\n delim: checkDelimiter(args[0], context).text,\n color // undefined if not set via \\color\n\n };\n }\n});\ndefineFunction({\n type: "leftright",\n names: ["\\\\left"],\n props: {\n numArgs: 1,\n primitive: true\n },\n handler: (context, args) => {\n const delim = checkDelimiter(args[0], context);\n const parser = context.parser; // Parse out the implicit body\n\n ++parser.leftrightDepth; // parseExpression stops before \'\\\\right\'\n\n const body = parser.parseExpression(false);\n --parser.leftrightDepth; // Check the next token\n\n parser.expect("\\\\right", false);\n const right = assertNodeType(parser.parseFunction(), "leftright-right");\n return {\n type: "leftright",\n mode: parser.mode,\n body,\n left: delim.text,\n right: right.delim,\n rightColor: right.color\n };\n },\n htmlBuilder: (group, options) => {\n assertParsed(group); // Build the inner expression\n\n const inner = buildExpression(group.body, options, true, ["mopen", "mclose"]);\n let innerHeight = 0;\n let innerDepth = 0;\n let hadMiddle = false; // Calculate its height and depth\n\n for (let i = 0; i < inner.length; i++) {\n // Property `isMiddle` not defined on `span`. See comment in\n // "middle"\'s htmlBuilder.\n // $FlowFixMe\n if (inner[i].isMiddle) {\n hadMiddle = true;\n } else {\n innerHeight = Math.max(inner[i].height, innerHeight);\n innerDepth = Math.max(inner[i].depth, innerDepth);\n }\n } // The size of delimiters is the same, regardless of what style we are\n // in. Thus, to correctly calculate the size of delimiter we need around\n // a group, we scale down the inner size based on the size.\n\n\n innerHeight *= options.sizeMultiplier;\n innerDepth *= options.sizeMultiplier;\n let leftDelim;\n\n if (group.left === ".") {\n // Empty delimiters in \\left and \\right make null delimiter spaces.\n leftDelim = makeNullDelimiter(options, ["mopen"]);\n } else {\n // Otherwise, use leftRightDelim to generate the correct sized\n // delimiter.\n leftDelim = delimiter.leftRightDelim(group.left, innerHeight, innerDepth, options, group.mode, ["mopen"]);\n } // Add it to the beginning of the expression\n\n\n inner.unshift(leftDelim); // Handle middle delimiters\n\n if (hadMiddle) {\n for (let i = 1; i < inner.length; i++) {\n const middleDelim = inner[i]; // Property `isMiddle` not defined on `span`. See comment in\n // "middle"\'s htmlBuilder.\n // $FlowFixMe\n\n const isMiddle = middleDelim.isMiddle;\n\n if (isMiddle) {\n // Apply the options that were active when \\middle was called\n inner[i] = delimiter.leftRightDelim(isMiddle.delim, innerHeight, innerDepth, isMiddle.options, group.mode, []);\n }\n }\n }\n\n let rightDelim; // Same for the right delimiter, but using color specified by \\color\n\n if (group.right === ".") {\n rightDelim = makeNullDelimiter(options, ["mclose"]);\n } else {\n const colorOptions = group.rightColor ? options.withColor(group.rightColor) : options;\n rightDelim = delimiter.leftRightDelim(group.right, innerHeight, innerDepth, colorOptions, group.mode, ["mclose"]);\n } // Add it to the end of the expression.\n\n\n inner.push(rightDelim);\n return buildCommon.makeSpan(["minner"], inner, options);\n },\n mathmlBuilder: (group, options) => {\n assertParsed(group);\n const inner = buildMathML_buildExpression(group.body, options);\n\n if (group.left !== ".") {\n const leftNode = new mathMLTree.MathNode("mo", [makeText(group.left, group.mode)]);\n leftNode.setAttribute("fence", "true");\n inner.unshift(leftNode);\n }\n\n if (group.right !== ".") {\n const rightNode = new mathMLTree.MathNode("mo", [makeText(group.right, group.mode)]);\n rightNode.setAttribute("fence", "true");\n\n if (group.rightColor) {\n rightNode.setAttribute("mathcolor", group.rightColor);\n }\n\n inner.push(rightNode);\n }\n\n return makeRow(inner);\n }\n});\ndefineFunction({\n type: "middle",\n names: ["\\\\middle"],\n props: {\n numArgs: 1,\n primitive: true\n },\n handler: (context, args) => {\n const delim = checkDelimiter(args[0], context);\n\n if (!context.parser.leftrightDepth) {\n throw new src_ParseError("\\\\middle without preceding \\\\left", delim);\n }\n\n return {\n type: "middle",\n mode: context.parser.mode,\n delim: delim.text\n };\n },\n htmlBuilder: (group, options) => {\n let middleDelim;\n\n if (group.delim === ".") {\n middleDelim = makeNullDelimiter(options, []);\n } else {\n middleDelim = delimiter.sizedDelim(group.delim, 1, options, group.mode, []);\n const isMiddle = {\n delim: group.delim,\n options\n }; // Property `isMiddle` not defined on `span`. It is only used in\n // this file above.\n // TODO: Fix this violation of the `span` type and possibly rename\n // things since `isMiddle` sounds like a boolean, but is a struct.\n // $FlowFixMe\n\n middleDelim.isMiddle = isMiddle;\n }\n\n return middleDelim;\n },\n mathmlBuilder: (group, options) => {\n // A Firefox \\middle will stretch a character vertically only if it\n // is in the fence part of the operator dictionary at:\n // https://www.w3.org/TR/MathML3/appendixc.html.\n // So we need to avoid U+2223 and use plain "|" instead.\n const textNode = group.delim === "\\\\vert" || group.delim === "|" ? makeText("|", "text") : makeText(group.delim, group.mode);\n const middleNode = new mathMLTree.MathNode("mo", [textNode]);\n middleNode.setAttribute("fence", "true"); // MathML gives 5/18em spacing to each element.\n // \\middle should get delimiter spacing instead.\n\n middleNode.setAttribute("lspace", "0.05em");\n middleNode.setAttribute("rspace", "0.05em");\n return middleNode;\n }\n});\n;// CONCATENATED MODULE: ./src/functions/enclose.js\n\n\n\n\n\n\n\n\n\n\n\n\nconst enclose_htmlBuilder = (group, options) => {\n // \\cancel, \\bcancel, \\xcancel, \\sout, \\fbox, \\colorbox, \\fcolorbox, \\phase\n // Some groups can return document fragments. Handle those by wrapping\n // them in a span.\n const inner = buildCommon.wrapFragment(buildGroup(group.body, options), options);\n const label = group.label.slice(1);\n let scale = options.sizeMultiplier;\n let img;\n let imgShift = 0; // In the LaTeX cancel package, line geometry is slightly different\n // depending on whether the subject is wider than it is tall, or vice versa.\n // We don\'t know the width of a group, so as a proxy, we test if\n // the subject is a single character. This captures most of the\n // subjects that should get the "tall" treatment.\n\n const isSingleChar = utils.isCharacterBox(group.body);\n\n if (label === "sout") {\n img = buildCommon.makeSpan(["stretchy", "sout"]);\n img.height = options.fontMetrics().defaultRuleThickness / scale;\n imgShift = -0.5 * options.fontMetrics().xHeight;\n } else if (label === "phase") {\n // Set a couple of dimensions from the steinmetz package.\n const lineWeight = calculateSize({\n number: 0.6,\n unit: "pt"\n }, options);\n const clearance = calculateSize({\n number: 0.35,\n unit: "ex"\n }, options); // Prevent size changes like \\Huge from affecting line thickness\n\n const newOptions = options.havingBaseSizing();\n scale = scale / newOptions.sizeMultiplier;\n const angleHeight = inner.height + inner.depth + lineWeight + clearance; // Reserve a left pad for the angle.\n\n inner.style.paddingLeft = makeEm(angleHeight / 2 + lineWeight); // Create an SVG\n\n const viewBoxHeight = Math.floor(1000 * angleHeight * scale);\n const path = phasePath(viewBoxHeight);\n const svgNode = new SvgNode([new PathNode("phase", path)], {\n "width": "400em",\n "height": makeEm(viewBoxHeight / 1000),\n "viewBox": "0 0 400000 " + viewBoxHeight,\n "preserveAspectRatio": "xMinYMin slice"\n }); // Wrap it in a span with overflow: hidden.\n\n img = buildCommon.makeSvgSpan(["hide-tail"], [svgNode], options);\n img.style.height = makeEm(angleHeight);\n imgShift = inner.depth + lineWeight + clearance;\n } else {\n // Add horizontal padding\n if (/cancel/.test(label)) {\n if (!isSingleChar) {\n inner.classes.push("cancel-pad");\n }\n } else if (label === "angl") {\n inner.classes.push("anglpad");\n } else {\n inner.classes.push("boxpad");\n } // Add vertical padding\n\n\n let topPad = 0;\n let bottomPad = 0;\n let ruleThickness = 0; // ref: cancel package: \\advance\\totalheight2\\p@ % "+2"\n\n if (/box/.test(label)) {\n ruleThickness = Math.max(options.fontMetrics().fboxrule, // default\n options.minRuleThickness // User override.\n );\n topPad = options.fontMetrics().fboxsep + (label === "colorbox" ? 0 : ruleThickness);\n bottomPad = topPad;\n } else if (label === "angl") {\n ruleThickness = Math.max(options.fontMetrics().defaultRuleThickness, options.minRuleThickness);\n topPad = 4 * ruleThickness; // gap = 3 × line, plus the line itself.\n\n bottomPad = Math.max(0, 0.25 - inner.depth);\n } else {\n topPad = isSingleChar ? 0.2 : 0;\n bottomPad = topPad;\n }\n\n img = stretchy.encloseSpan(inner, label, topPad, bottomPad, options);\n\n if (/fbox|boxed|fcolorbox/.test(label)) {\n img.style.borderStyle = "solid";\n img.style.borderWidth = makeEm(ruleThickness);\n } else if (label === "angl" && ruleThickness !== 0.049) {\n img.style.borderTopWidth = makeEm(ruleThickness);\n img.style.borderRightWidth = makeEm(ruleThickness);\n }\n\n imgShift = inner.depth + bottomPad;\n\n if (group.backgroundColor) {\n img.style.backgroundColor = group.backgroundColor;\n\n if (group.borderColor) {\n img.style.borderColor = group.borderColor;\n }\n }\n }\n\n let vlist;\n\n if (group.backgroundColor) {\n vlist = buildCommon.makeVList({\n positionType: "individualShift",\n children: [// Put the color background behind inner;\n {\n type: "elem",\n elem: img,\n shift: imgShift\n }, {\n type: "elem",\n elem: inner,\n shift: 0\n }]\n }, options);\n } else {\n const classes = /cancel|phase/.test(label) ? ["svg-align"] : [];\n vlist = buildCommon.makeVList({\n positionType: "individualShift",\n children: [// Write the \\cancel stroke on top of inner.\n {\n type: "elem",\n elem: inner,\n shift: 0\n }, {\n type: "elem",\n elem: img,\n shift: imgShift,\n wrapperClasses: classes\n }]\n }, options);\n }\n\n if (/cancel/.test(label)) {\n // The cancel package documentation says that cancel lines add their height\n // to the expression, but tests show that isn\'t how it actually works.\n vlist.height = inner.height;\n vlist.depth = inner.depth;\n }\n\n if (/cancel/.test(label) && !isSingleChar) {\n // cancel does not create horiz space for its line extension.\n return buildCommon.makeSpan(["mord", "cancel-lap"], [vlist], options);\n } else {\n return buildCommon.makeSpan(["mord"], [vlist], options);\n }\n};\n\nconst enclose_mathmlBuilder = (group, options) => {\n let fboxsep = 0;\n const node = new mathMLTree.MathNode(group.label.indexOf("colorbox") > -1 ? "mpadded" : "menclose", [buildMathML_buildGroup(group.body, options)]);\n\n switch (group.label) {\n case "\\\\cancel":\n node.setAttribute("notation", "updiagonalstrike");\n break;\n\n case "\\\\bcancel":\n node.setAttribute("notation", "downdiagonalstrike");\n break;\n\n case "\\\\phase":\n node.setAttribute("notation", "phasorangle");\n break;\n\n case "\\\\sout":\n node.setAttribute("notation", "horizontalstrike");\n break;\n\n case "\\\\fbox":\n node.setAttribute("notation", "box");\n break;\n\n case "\\\\angl":\n node.setAttribute("notation", "actuarial");\n break;\n\n case "\\\\fcolorbox":\n case "\\\\colorbox":\n // doesn\'t have a good notation option. So use \n // instead. Set some attributes that come included with .\n fboxsep = options.fontMetrics().fboxsep * options.fontMetrics().ptPerEm;\n node.setAttribute("width", "+" + 2 * fboxsep + "pt");\n node.setAttribute("height", "+" + 2 * fboxsep + "pt");\n node.setAttribute("lspace", fboxsep + "pt"); //\n\n node.setAttribute("voffset", fboxsep + "pt");\n\n if (group.label === "\\\\fcolorbox") {\n const thk = Math.max(options.fontMetrics().fboxrule, // default\n options.minRuleThickness // user override\n );\n node.setAttribute("style", "border: " + thk + "em solid " + String(group.borderColor));\n }\n\n break;\n\n case "\\\\xcancel":\n node.setAttribute("notation", "updiagonalstrike downdiagonalstrike");\n break;\n }\n\n if (group.backgroundColor) {\n node.setAttribute("mathbackground", group.backgroundColor);\n }\n\n return node;\n};\n\ndefineFunction({\n type: "enclose",\n names: ["\\\\colorbox"],\n props: {\n numArgs: 2,\n allowedInText: true,\n argTypes: ["color", "text"]\n },\n\n handler(_ref, args, optArgs) {\n let {\n parser,\n funcName\n } = _ref;\n const color = assertNodeType(args[0], "color-token").color;\n const body = args[1];\n return {\n type: "enclose",\n mode: parser.mode,\n label: funcName,\n backgroundColor: color,\n body\n };\n },\n\n htmlBuilder: enclose_htmlBuilder,\n mathmlBuilder: enclose_mathmlBuilder\n});\ndefineFunction({\n type: "enclose",\n names: ["\\\\fcolorbox"],\n props: {\n numArgs: 3,\n allowedInText: true,\n argTypes: ["color", "color", "text"]\n },\n\n handler(_ref2, args, optArgs) {\n let {\n parser,\n funcName\n } = _ref2;\n const borderColor = assertNodeType(args[0], "color-token").color;\n const backgroundColor = assertNodeType(args[1], "color-token").color;\n const body = args[2];\n return {\n type: "enclose",\n mode: parser.mode,\n label: funcName,\n backgroundColor,\n borderColor,\n body\n };\n },\n\n htmlBuilder: enclose_htmlBuilder,\n mathmlBuilder: enclose_mathmlBuilder\n});\ndefineFunction({\n type: "enclose",\n names: ["\\\\fbox"],\n props: {\n numArgs: 1,\n argTypes: ["hbox"],\n allowedInText: true\n },\n\n handler(_ref3, args) {\n let {\n parser\n } = _ref3;\n return {\n type: "enclose",\n mode: parser.mode,\n label: "\\\\fbox",\n body: args[0]\n };\n }\n\n});\ndefineFunction({\n type: "enclose",\n names: ["\\\\cancel", "\\\\bcancel", "\\\\xcancel", "\\\\sout", "\\\\phase"],\n props: {\n numArgs: 1\n },\n\n handler(_ref4, args) {\n let {\n parser,\n funcName\n } = _ref4;\n const body = args[0];\n return {\n type: "enclose",\n mode: parser.mode,\n label: funcName,\n body\n };\n },\n\n htmlBuilder: enclose_htmlBuilder,\n mathmlBuilder: enclose_mathmlBuilder\n});\ndefineFunction({\n type: "enclose",\n names: ["\\\\angl"],\n props: {\n numArgs: 1,\n argTypes: ["hbox"],\n allowedInText: false\n },\n\n handler(_ref5, args) {\n let {\n parser\n } = _ref5;\n return {\n type: "enclose",\n mode: parser.mode,\n label: "\\\\angl",\n body: args[0]\n };\n }\n\n});\n;// CONCATENATED MODULE: ./src/defineEnvironment.js\n\n\n/**\n * All registered environments.\n * `environments.js` exports this same dictionary again and makes it public.\n * `Parser.js` requires this dictionary via `environments.js`.\n */\nconst _environments = {};\nfunction defineEnvironment(_ref) {\n let {\n type,\n names,\n props,\n handler,\n htmlBuilder,\n mathmlBuilder\n } = _ref;\n // Set default values of environments.\n const data = {\n type,\n numArgs: props.numArgs || 0,\n allowedInText: false,\n numOptionalArgs: 0,\n handler\n };\n\n for (let i = 0; i < names.length; ++i) {\n // TODO: The value type of _environments should be a type union of all\n // possible `EnvSpec<>` possibilities instead of `EnvSpec<*>`, which is\n // an existential type.\n _environments[names[i]] = data;\n }\n\n if (htmlBuilder) {\n _htmlGroupBuilders[type] = htmlBuilder;\n }\n\n if (mathmlBuilder) {\n _mathmlGroupBuilders[type] = mathmlBuilder;\n }\n}\n;// CONCATENATED MODULE: ./src/defineMacro.js\n\n\n/**\n * All registered global/built-in macros.\n * `macros.js` exports this same dictionary again and makes it public.\n * `Parser.js` requires this dictionary via `macros.js`.\n */\nconst _macros = {}; // This function might one day accept an additional argument and do more things.\n\nfunction defineMacro(name, body) {\n _macros[name] = body;\n}\n;// CONCATENATED MODULE: ./src/SourceLocation.js\n/**\n * Lexing or parsing positional information for error reporting.\n * This object is immutable.\n */\nclass SourceLocation {\n // The + prefix indicates that these fields aren\'t writeable\n // Lexer holding the input string.\n // Start offset, zero-based inclusive.\n // End offset, zero-based exclusive.\n constructor(lexer, start, end) {\n this.lexer = void 0;\n this.start = void 0;\n this.end = void 0;\n this.lexer = lexer;\n this.start = start;\n this.end = end;\n }\n /**\n * Merges two `SourceLocation`s from location providers, given they are\n * provided in order of appearance.\n * - Returns the first one\'s location if only the first is provided.\n * - Returns a merged range of the first and the last if both are provided\n * and their lexers match.\n * - Otherwise, returns null.\n */\n\n\n static range(first, second) {\n if (!second) {\n return first && first.loc;\n } else if (!first || !first.loc || !second.loc || first.loc.lexer !== second.loc.lexer) {\n return null;\n } else {\n return new SourceLocation(first.loc.lexer, first.loc.start, second.loc.end);\n }\n }\n\n}\n;// CONCATENATED MODULE: ./src/Token.js\n\n/**\n * Interface required to break circular dependency between Token, Lexer, and\n * ParseError.\n */\n\n/**\n * The resulting token returned from `lex`.\n *\n * It consists of the token text plus some position information.\n * The position information is essentially a range in an input string,\n * but instead of referencing the bare input string, we refer to the lexer.\n * That way it is possible to attach extra metadata to the input string,\n * like for example a file name or similar.\n *\n * The position information is optional, so it is OK to construct synthetic\n * tokens if appropriate. Not providing available position information may\n * lead to degraded error reporting, though.\n */\nclass Token {\n // don\'t expand the token\n // used in \\noexpand\n constructor(text, // the text of this token\n loc) {\n this.text = void 0;\n this.loc = void 0;\n this.noexpand = void 0;\n this.treatAsRelax = void 0;\n this.text = text;\n this.loc = loc;\n }\n /**\n * Given a pair of tokens (this and endToken), compute a `Token` encompassing\n * the whole input range enclosed by these two.\n */\n\n\n range(endToken, // last token of the range, inclusive\n text // the text of the newly constructed token\n ) {\n return new Token(text, SourceLocation.range(this, endToken));\n }\n\n}\n;// CONCATENATED MODULE: ./src/environments/array.js\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n// Helper functions\nfunction getHLines(parser) {\n // Return an array. The array length = number of hlines.\n // Each element in the array tells if the line is dashed.\n const hlineInfo = [];\n parser.consumeSpaces();\n let nxt = parser.fetch().text;\n\n if (nxt === "\\\\relax") {\n // \\relax is an artifact of the \\cr macro below\n parser.consume();\n parser.consumeSpaces();\n nxt = parser.fetch().text;\n }\n\n while (nxt === "\\\\hline" || nxt === "\\\\hdashline") {\n parser.consume();\n hlineInfo.push(nxt === "\\\\hdashline");\n parser.consumeSpaces();\n nxt = parser.fetch().text;\n }\n\n return hlineInfo;\n}\n\nconst validateAmsEnvironmentContext = context => {\n const settings = context.parser.settings;\n\n if (!settings.displayMode) {\n throw new src_ParseError("{" + context.envName + "} can be used only in" + " display mode.");\n }\n}; // autoTag (an argument to parseArray) can be one of three values:\n// * undefined: Regular (not-top-level) array; no tags on each row\n// * true: Automatic equation numbering, overridable by \\tag\n// * false: Tags allowed on each row, but no automatic numbering\n// This function *doesn\'t* work with the "split" environment name.\n\n\nfunction getAutoTag(name) {\n if (name.indexOf("ed") === -1) {\n return name.indexOf("*") === -1;\n } // return undefined;\n\n}\n/**\n * Parse the body of the environment, with rows delimited by \\\\ and\n * columns delimited by &, and create a nested list in row-major order\n * with one group per cell. If given an optional argument style\n * ("text", "display", etc.), then each cell is cast into that style.\n */\n\n\nfunction parseArray(parser, _ref, style) {\n let {\n hskipBeforeAndAfter,\n addJot,\n cols,\n arraystretch,\n colSeparationType,\n autoTag,\n singleRow,\n emptySingleRow,\n maxNumCols,\n leqno\n } = _ref;\n parser.gullet.beginGroup();\n\n if (!singleRow) {\n // \\cr is equivalent to \\\\ without the optional size argument (see below)\n // TODO: provide helpful error when \\cr is used outside array environment\n parser.gullet.macros.set("\\\\cr", "\\\\\\\\\\\\relax");\n } // Get current arraystretch if it\'s not set by the environment\n\n\n if (!arraystretch) {\n const stretch = parser.gullet.expandMacroAsText("\\\\arraystretch");\n\n if (stretch == null) {\n // Default \\arraystretch from lttab.dtx\n arraystretch = 1;\n } else {\n arraystretch = parseFloat(stretch);\n\n if (!arraystretch || arraystretch < 0) {\n throw new src_ParseError("Invalid \\\\arraystretch: " + stretch);\n }\n }\n } // Start group for first cell\n\n\n parser.gullet.beginGroup();\n let row = [];\n const body = [row];\n const rowGaps = [];\n const hLinesBeforeRow = [];\n const tags = autoTag != null ? [] : undefined; // amsmath uses \\global\\@eqnswtrue and \\global\\@eqnswfalse to represent\n // whether this row should have an equation number. Simulate this with\n // a \\@eqnsw macro set to 1 or 0.\n\n function beginRow() {\n if (autoTag) {\n parser.gullet.macros.set("\\\\@eqnsw", "1", true);\n }\n }\n\n function endRow() {\n if (tags) {\n if (parser.gullet.macros.get("\\\\df@tag")) {\n tags.push(parser.subparse([new Token("\\\\df@tag")]));\n parser.gullet.macros.set("\\\\df@tag", undefined, true);\n } else {\n tags.push(Boolean(autoTag) && parser.gullet.macros.get("\\\\@eqnsw") === "1");\n }\n }\n }\n\n beginRow(); // Test for \\hline at the top of the array.\n\n hLinesBeforeRow.push(getHLines(parser));\n\n while (true) {\n // eslint-disable-line no-constant-condition\n // Parse each cell in its own group (namespace)\n let cell = parser.parseExpression(false, singleRow ? "\\\\end" : "\\\\\\\\");\n parser.gullet.endGroup();\n parser.gullet.beginGroup();\n cell = {\n type: "ordgroup",\n mode: parser.mode,\n body: cell\n };\n\n if (style) {\n cell = {\n type: "styling",\n mode: parser.mode,\n style,\n body: [cell]\n };\n }\n\n row.push(cell);\n const next = parser.fetch().text;\n\n if (next === "&") {\n if (maxNumCols && row.length === maxNumCols) {\n if (singleRow || colSeparationType) {\n // {equation} or {split}\n throw new src_ParseError("Too many tab characters: &", parser.nextToken);\n } else {\n // {array} environment\n parser.settings.reportNonstrict("textEnv", "Too few columns " + "specified in the {array} column argument.");\n }\n }\n\n parser.consume();\n } else if (next === "\\\\end") {\n endRow(); // Arrays terminate newlines with `\\crcr` which consumes a `\\cr` if\n // the last line is empty. However, AMS environments keep the\n // empty row if it\'s the only one.\n // NOTE: Currently, `cell` is the last item added into `row`.\n\n if (row.length === 1 && cell.type === "styling" && cell.body[0].body.length === 0 && (body.length > 1 || !emptySingleRow)) {\n body.pop();\n }\n\n if (hLinesBeforeRow.length < body.length + 1) {\n hLinesBeforeRow.push([]);\n }\n\n break;\n } else if (next === "\\\\\\\\") {\n parser.consume();\n let size; // \\def\\Let@{\\let\\\\\\math@cr}\n // \\def\\math@cr{...\\math@cr@}\n // \\def\\math@cr@{\\new@ifnextchar[\\math@cr@@{\\math@cr@@[\\z@]}}\n // \\def\\math@cr@@[#1]{...\\math@cr@@@...}\n // \\def\\math@cr@@@{\\cr}\n\n if (parser.gullet.future().text !== " ") {\n size = parser.parseSizeGroup(true);\n }\n\n rowGaps.push(size ? size.value : null);\n endRow(); // check for \\hline(s) following the row separator\n\n hLinesBeforeRow.push(getHLines(parser));\n row = [];\n body.push(row);\n beginRow();\n } else {\n throw new src_ParseError("Expected & or \\\\\\\\ or \\\\cr or \\\\end", parser.nextToken);\n }\n } // End cell group\n\n\n parser.gullet.endGroup(); // End array group defining \\cr\n\n parser.gullet.endGroup();\n return {\n type: "array",\n mode: parser.mode,\n addJot,\n arraystretch,\n body,\n cols,\n rowGaps,\n hskipBeforeAndAfter,\n hLinesBeforeRow,\n colSeparationType,\n tags,\n leqno\n };\n} // Decides on a style for cells in an array according to whether the given\n// environment name starts with the letter \'d\'.\n\n\nfunction dCellStyle(envName) {\n if (envName.slice(0, 1) === "d") {\n return "display";\n } else {\n return "text";\n }\n}\n\nconst array_htmlBuilder = function (group, options) {\n let r;\n let c;\n const nr = group.body.length;\n const hLinesBeforeRow = group.hLinesBeforeRow;\n let nc = 0;\n let body = new Array(nr);\n const hlines = [];\n const ruleThickness = Math.max( // From LaTeX \\showthe\\arrayrulewidth. Equals 0.04 em.\n options.fontMetrics().arrayRuleWidth, options.minRuleThickness // User override.\n ); // Horizontal spacing\n\n const pt = 1 / options.fontMetrics().ptPerEm;\n let arraycolsep = 5 * pt; // default value, i.e. \\arraycolsep in article.cls\n\n if (group.colSeparationType && group.colSeparationType === "small") {\n // We\'re in a {smallmatrix}. Default column space is \\thickspace,\n // i.e. 5/18em = 0.2778em, per amsmath.dtx for {smallmatrix}.\n // But that needs adjustment because LaTeX applies \\scriptstyle to the\n // entire array, including the colspace, but this function applies\n // \\scriptstyle only inside each element.\n const localMultiplier = options.havingStyle(src_Style.SCRIPT).sizeMultiplier;\n arraycolsep = 0.2778 * (localMultiplier / options.sizeMultiplier);\n } // Vertical spacing\n\n\n const baselineskip = group.colSeparationType === "CD" ? calculateSize({\n number: 3,\n unit: "ex"\n }, options) : 12 * pt; // see size10.clo\n // Default \\jot from ltmath.dtx\n // TODO(edemaine): allow overriding \\jot via \\setlength (#687)\n\n const jot = 3 * pt;\n const arrayskip = group.arraystretch * baselineskip;\n const arstrutHeight = 0.7 * arrayskip; // \\strutbox in ltfsstrc.dtx and\n\n const arstrutDepth = 0.3 * arrayskip; // \\@arstrutbox in lttab.dtx\n\n let totalHeight = 0; // Set a position for \\hline(s) at the top of the array, if any.\n\n function setHLinePos(hlinesInGap) {\n for (let i = 0; i < hlinesInGap.length; ++i) {\n if (i > 0) {\n totalHeight += 0.25;\n }\n\n hlines.push({\n pos: totalHeight,\n isDashed: hlinesInGap[i]\n });\n }\n }\n\n setHLinePos(hLinesBeforeRow[0]);\n\n for (r = 0; r < group.body.length; ++r) {\n const inrow = group.body[r];\n let height = arstrutHeight; // \\@array adds an \\@arstrut\n\n let depth = arstrutDepth; // to each tow (via the template)\n\n if (nc < inrow.length) {\n nc = inrow.length;\n }\n\n const outrow = new Array(inrow.length);\n\n for (c = 0; c < inrow.length; ++c) {\n const elt = buildGroup(inrow[c], options);\n\n if (depth < elt.depth) {\n depth = elt.depth;\n }\n\n if (height < elt.height) {\n height = elt.height;\n }\n\n outrow[c] = elt;\n }\n\n const rowGap = group.rowGaps[r];\n let gap = 0;\n\n if (rowGap) {\n gap = calculateSize(rowGap, options);\n\n if (gap > 0) {\n // \\@argarraycr\n gap += arstrutDepth;\n\n if (depth < gap) {\n depth = gap; // \\@xargarraycr\n }\n\n gap = 0;\n }\n } // In AMS multiline environments such as aligned and gathered, rows\n // correspond to lines that have additional \\jot added to the\n // \\baselineskip via \\openup.\n\n\n if (group.addJot) {\n depth += jot;\n }\n\n outrow.height = height;\n outrow.depth = depth;\n totalHeight += height;\n outrow.pos = totalHeight;\n totalHeight += depth + gap; // \\@yargarraycr\n\n body[r] = outrow; // Set a position for \\hline(s), if any.\n\n setHLinePos(hLinesBeforeRow[r + 1]);\n }\n\n const offset = totalHeight / 2 + options.fontMetrics().axisHeight;\n const colDescriptions = group.cols || [];\n const cols = [];\n let colSep;\n let colDescrNum;\n const tagSpans = [];\n\n if (group.tags && group.tags.some(tag => tag)) {\n // An environment with manual tags and/or automatic equation numbers.\n // Create node(s), the latter of which trigger CSS counter increment.\n for (r = 0; r < nr; ++r) {\n const rw = body[r];\n const shift = rw.pos - offset;\n const tag = group.tags[r];\n let tagSpan;\n\n if (tag === true) {\n // automatic numbering\n tagSpan = buildCommon.makeSpan(["eqn-num"], [], options);\n } else if (tag === false) {\n // \\nonumber/\\notag or starred environment\n tagSpan = buildCommon.makeSpan([], [], options);\n } else {\n // manual \\tag\n tagSpan = buildCommon.makeSpan([], buildExpression(tag, options, true), options);\n }\n\n tagSpan.depth = rw.depth;\n tagSpan.height = rw.height;\n tagSpans.push({\n type: "elem",\n elem: tagSpan,\n shift\n });\n }\n }\n\n for (c = 0, colDescrNum = 0; // Continue while either there are more columns or more column\n // descriptions, so trailing separators don\'t get lost.\n c < nc || colDescrNum < colDescriptions.length; ++c, ++colDescrNum) {\n let colDescr = colDescriptions[colDescrNum] || {};\n let firstSeparator = true;\n\n while (colDescr.type === "separator") {\n // If there is more than one separator in a row, add a space\n // between them.\n if (!firstSeparator) {\n colSep = buildCommon.makeSpan(["arraycolsep"], []);\n colSep.style.width = makeEm(options.fontMetrics().doubleRuleSep);\n cols.push(colSep);\n }\n\n if (colDescr.separator === "|" || colDescr.separator === ":") {\n const lineType = colDescr.separator === "|" ? "solid" : "dashed";\n const separator = buildCommon.makeSpan(["vertical-separator"], [], options);\n separator.style.height = makeEm(totalHeight);\n separator.style.borderRightWidth = makeEm(ruleThickness);\n separator.style.borderRightStyle = lineType;\n separator.style.margin = "0 " + makeEm(-ruleThickness / 2);\n const shift = totalHeight - offset;\n\n if (shift) {\n separator.style.verticalAlign = makeEm(-shift);\n }\n\n cols.push(separator);\n } else {\n throw new src_ParseError("Invalid separator type: " + colDescr.separator);\n }\n\n colDescrNum++;\n colDescr = colDescriptions[colDescrNum] || {};\n firstSeparator = false;\n }\n\n if (c >= nc) {\n continue;\n }\n\n let sepwidth;\n\n if (c > 0 || group.hskipBeforeAndAfter) {\n sepwidth = utils.deflt(colDescr.pregap, arraycolsep);\n\n if (sepwidth !== 0) {\n colSep = buildCommon.makeSpan(["arraycolsep"], []);\n colSep.style.width = makeEm(sepwidth);\n cols.push(colSep);\n }\n }\n\n let col = [];\n\n for (r = 0; r < nr; ++r) {\n const row = body[r];\n const elem = row[c];\n\n if (!elem) {\n continue;\n }\n\n const shift = row.pos - offset;\n elem.depth = row.depth;\n elem.height = row.height;\n col.push({\n type: "elem",\n elem: elem,\n shift: shift\n });\n }\n\n col = buildCommon.makeVList({\n positionType: "individualShift",\n children: col\n }, options);\n col = buildCommon.makeSpan(["col-align-" + (colDescr.align || "c")], [col]);\n cols.push(col);\n\n if (c < nc - 1 || group.hskipBeforeAndAfter) {\n sepwidth = utils.deflt(colDescr.postgap, arraycolsep);\n\n if (sepwidth !== 0) {\n colSep = buildCommon.makeSpan(["arraycolsep"], []);\n colSep.style.width = makeEm(sepwidth);\n cols.push(colSep);\n }\n }\n }\n\n body = buildCommon.makeSpan(["mtable"], cols); // Add \\hline(s), if any.\n\n if (hlines.length > 0) {\n const line = buildCommon.makeLineSpan("hline", options, ruleThickness);\n const dashes = buildCommon.makeLineSpan("hdashline", options, ruleThickness);\n const vListElems = [{\n type: "elem",\n elem: body,\n shift: 0\n }];\n\n while (hlines.length > 0) {\n const hline = hlines.pop();\n const lineShift = hline.pos - offset;\n\n if (hline.isDashed) {\n vListElems.push({\n type: "elem",\n elem: dashes,\n shift: lineShift\n });\n } else {\n vListElems.push({\n type: "elem",\n elem: line,\n shift: lineShift\n });\n }\n }\n\n body = buildCommon.makeVList({\n positionType: "individualShift",\n children: vListElems\n }, options);\n }\n\n if (tagSpans.length === 0) {\n return buildCommon.makeSpan(["mord"], [body], options);\n } else {\n let eqnNumCol = buildCommon.makeVList({\n positionType: "individualShift",\n children: tagSpans\n }, options);\n eqnNumCol = buildCommon.makeSpan(["tag"], [eqnNumCol], options);\n return buildCommon.makeFragment([body, eqnNumCol]);\n }\n};\n\nconst alignMap = {\n c: "center ",\n l: "left ",\n r: "right "\n};\n\nconst array_mathmlBuilder = function (group, options) {\n const tbl = [];\n const glue = new mathMLTree.MathNode("mtd", [], ["mtr-glue"]);\n const tag = new mathMLTree.MathNode("mtd", [], ["mml-eqn-num"]);\n\n for (let i = 0; i < group.body.length; i++) {\n const rw = group.body[i];\n const row = [];\n\n for (let j = 0; j < rw.length; j++) {\n row.push(new mathMLTree.MathNode("mtd", [buildMathML_buildGroup(rw[j], options)]));\n }\n\n if (group.tags && group.tags[i]) {\n row.unshift(glue);\n row.push(glue);\n\n if (group.leqno) {\n row.unshift(tag);\n } else {\n row.push(tag);\n }\n }\n\n tbl.push(new mathMLTree.MathNode("mtr", row));\n }\n\n let table = new mathMLTree.MathNode("mtable", tbl); // Set column alignment, row spacing, column spacing, and\n // array lines by setting attributes on the table element.\n // Set the row spacing. In MathML, we specify a gap distance.\n // We do not use rowGap[] because MathML automatically increases\n // cell height with the height/depth of the element content.\n // LaTeX \\arraystretch multiplies the row baseline-to-baseline distance.\n // We simulate this by adding (arraystretch - 1)em to the gap. This\n // does a reasonable job of adjusting arrays containing 1 em tall content.\n // The 0.16 and 0.09 values are found empirically. They produce an array\n // similar to LaTeX and in which content does not interfere with \\hlines.\n\n const gap = group.arraystretch === 0.5 ? 0.1 // {smallmatrix}, {subarray}\n : 0.16 + group.arraystretch - 1 + (group.addJot ? 0.09 : 0);\n table.setAttribute("rowspacing", makeEm(gap)); // MathML table lines go only between cells.\n // To place a line on an edge we\'ll use , if necessary.\n\n let menclose = "";\n let align = "";\n\n if (group.cols && group.cols.length > 0) {\n // Find column alignment, column spacing, and vertical lines.\n const cols = group.cols;\n let columnLines = "";\n let prevTypeWasAlign = false;\n let iStart = 0;\n let iEnd = cols.length;\n\n if (cols[0].type === "separator") {\n menclose += "top ";\n iStart = 1;\n }\n\n if (cols[cols.length - 1].type === "separator") {\n menclose += "bottom ";\n iEnd -= 1;\n }\n\n for (let i = iStart; i < iEnd; i++) {\n if (cols[i].type === "align") {\n align += alignMap[cols[i].align];\n\n if (prevTypeWasAlign) {\n columnLines += "none ";\n }\n\n prevTypeWasAlign = true;\n } else if (cols[i].type === "separator") {\n // MathML accepts only single lines between cells.\n // So we read only the first of consecutive separators.\n if (prevTypeWasAlign) {\n columnLines += cols[i].separator === "|" ? "solid " : "dashed ";\n prevTypeWasAlign = false;\n }\n }\n }\n\n table.setAttribute("columnalign", align.trim());\n\n if (/[sd]/.test(columnLines)) {\n table.setAttribute("columnlines", columnLines.trim());\n }\n } // Set column spacing.\n\n\n if (group.colSeparationType === "align") {\n const cols = group.cols || [];\n let spacing = "";\n\n for (let i = 1; i < cols.length; i++) {\n spacing += i % 2 ? "0em " : "1em ";\n }\n\n table.setAttribute("columnspacing", spacing.trim());\n } else if (group.colSeparationType === "alignat" || group.colSeparationType === "gather") {\n table.setAttribute("columnspacing", "0em");\n } else if (group.colSeparationType === "small") {\n table.setAttribute("columnspacing", "0.2778em");\n } else if (group.colSeparationType === "CD") {\n table.setAttribute("columnspacing", "0.5em");\n } else {\n table.setAttribute("columnspacing", "1em");\n } // Address \\hline and \\hdashline\n\n\n let rowLines = "";\n const hlines = group.hLinesBeforeRow;\n menclose += hlines[0].length > 0 ? "left " : "";\n menclose += hlines[hlines.length - 1].length > 0 ? "right " : "";\n\n for (let i = 1; i < hlines.length - 1; i++) {\n rowLines += hlines[i].length === 0 ? "none " // MathML accepts only a single line between rows. Read one element.\n : hlines[i][0] ? "dashed " : "solid ";\n }\n\n if (/[sd]/.test(rowLines)) {\n table.setAttribute("rowlines", rowLines.trim());\n }\n\n if (menclose !== "") {\n table = new mathMLTree.MathNode("menclose", [table]);\n table.setAttribute("notation", menclose.trim());\n }\n\n if (group.arraystretch && group.arraystretch < 1) {\n // A small array. Wrap in scriptstyle so row gap is not too large.\n table = new mathMLTree.MathNode("mstyle", [table]);\n table.setAttribute("scriptlevel", "1");\n }\n\n return table;\n}; // Convenience function for align, align*, aligned, alignat, alignat*, alignedat.\n\n\nconst alignedHandler = function (context, args) {\n if (context.envName.indexOf("ed") === -1) {\n validateAmsEnvironmentContext(context);\n }\n\n const cols = [];\n const separationType = context.envName.indexOf("at") > -1 ? "alignat" : "align";\n const isSplit = context.envName === "split";\n const res = parseArray(context.parser, {\n cols,\n addJot: true,\n autoTag: isSplit ? undefined : getAutoTag(context.envName),\n emptySingleRow: true,\n colSeparationType: separationType,\n maxNumCols: isSplit ? 2 : undefined,\n leqno: context.parser.settings.leqno\n }, "display"); // Determining number of columns.\n // 1. If the first argument is given, we use it as a number of columns,\n // and makes sure that each row doesn\'t exceed that number.\n // 2. Otherwise, just count number of columns = maximum number\n // of cells in each row ("aligned" mode -- isAligned will be true).\n //\n // At the same time, prepend empty group {} at beginning of every second\n // cell in each row (starting with second cell) so that operators become\n // binary. This behavior is implemented in amsmath\'s \\start@aligned.\n\n let numMaths;\n let numCols = 0;\n const emptyGroup = {\n type: "ordgroup",\n mode: context.mode,\n body: []\n };\n\n if (args[0] && args[0].type === "ordgroup") {\n let arg0 = "";\n\n for (let i = 0; i < args[0].body.length; i++) {\n const textord = assertNodeType(args[0].body[i], "textord");\n arg0 += textord.text;\n }\n\n numMaths = Number(arg0);\n numCols = numMaths * 2;\n }\n\n const isAligned = !numCols;\n res.body.forEach(function (row) {\n for (let i = 1; i < row.length; i += 2) {\n // Modify ordgroup node within styling node\n const styling = assertNodeType(row[i], "styling");\n const ordgroup = assertNodeType(styling.body[0], "ordgroup");\n ordgroup.body.unshift(emptyGroup);\n }\n\n if (!isAligned) {\n // Case 1\n const curMaths = row.length / 2;\n\n if (numMaths < curMaths) {\n throw new src_ParseError("Too many math in a row: " + ("expected " + numMaths + ", but got " + curMaths), row[0]);\n }\n } else if (numCols < row.length) {\n // Case 2\n numCols = row.length;\n }\n }); // Adjusting alignment.\n // In aligned mode, we add one \\qquad between columns;\n // otherwise we add nothing.\n\n for (let i = 0; i < numCols; ++i) {\n let align = "r";\n let pregap = 0;\n\n if (i % 2 === 1) {\n align = "l";\n } else if (i > 0 && isAligned) {\n // "aligned" mode.\n pregap = 1; // add one \\quad\n }\n\n cols[i] = {\n type: "align",\n align: align,\n pregap: pregap,\n postgap: 0\n };\n }\n\n res.colSeparationType = isAligned ? "align" : "alignat";\n return res;\n}; // Arrays are part of LaTeX, defined in lttab.dtx so its documentation\n// is part of the source2e.pdf file of LaTeX2e source documentation.\n// {darray} is an {array} environment where cells are set in \\displaystyle,\n// as defined in nccmath.sty.\n\n\ndefineEnvironment({\n type: "array",\n names: ["array", "darray"],\n props: {\n numArgs: 1\n },\n\n handler(context, args) {\n // Since no types are specified above, the two possibilities are\n // - The argument is wrapped in {} or [], in which case Parser\'s\n // parseGroup() returns an "ordgroup" wrapping some symbol node.\n // - The argument is a bare symbol node.\n const symNode = checkSymbolNodeType(args[0]);\n const colalign = symNode ? [args[0]] : assertNodeType(args[0], "ordgroup").body;\n const cols = colalign.map(function (nde) {\n const node = assertSymbolNodeType(nde);\n const ca = node.text;\n\n if ("lcr".indexOf(ca) !== -1) {\n return {\n type: "align",\n align: ca\n };\n } else if (ca === "|") {\n return {\n type: "separator",\n separator: "|"\n };\n } else if (ca === ":") {\n return {\n type: "separator",\n separator: ":"\n };\n }\n\n throw new src_ParseError("Unknown column alignment: " + ca, nde);\n });\n const res = {\n cols,\n hskipBeforeAndAfter: true,\n // \\@preamble in lttab.dtx\n maxNumCols: cols.length\n };\n return parseArray(context.parser, res, dCellStyle(context.envName));\n },\n\n htmlBuilder: array_htmlBuilder,\n mathmlBuilder: array_mathmlBuilder\n}); // The matrix environments of amsmath builds on the array environment\n// of LaTeX, which is discussed above.\n// The mathtools package adds starred versions of the same environments.\n// These have an optional argument to choose left|center|right justification.\n\ndefineEnvironment({\n type: "array",\n names: ["matrix", "pmatrix", "bmatrix", "Bmatrix", "vmatrix", "Vmatrix", "matrix*", "pmatrix*", "bmatrix*", "Bmatrix*", "vmatrix*", "Vmatrix*"],\n props: {\n numArgs: 0\n },\n\n handler(context) {\n const delimiters = {\n "matrix": null,\n "pmatrix": ["(", ")"],\n "bmatrix": ["[", "]"],\n "Bmatrix": ["\\\\{", "\\\\}"],\n "vmatrix": ["|", "|"],\n "Vmatrix": ["\\\\Vert", "\\\\Vert"]\n }[context.envName.replace("*", "")]; // \\hskip -\\arraycolsep in amsmath\n\n let colAlign = "c";\n const payload = {\n hskipBeforeAndAfter: false,\n cols: [{\n type: "align",\n align: colAlign\n }]\n };\n\n if (context.envName.charAt(context.envName.length - 1) === "*") {\n // It\'s one of the mathtools starred functions.\n // Parse the optional alignment argument.\n const parser = context.parser;\n parser.consumeSpaces();\n\n if (parser.fetch().text === "[") {\n parser.consume();\n parser.consumeSpaces();\n colAlign = parser.fetch().text;\n\n if ("lcr".indexOf(colAlign) === -1) {\n throw new src_ParseError("Expected l or c or r", parser.nextToken);\n }\n\n parser.consume();\n parser.consumeSpaces();\n parser.expect("]");\n parser.consume();\n payload.cols = [{\n type: "align",\n align: colAlign\n }];\n }\n }\n\n const res = parseArray(context.parser, payload, dCellStyle(context.envName)); // Populate cols with the correct number of column alignment specs.\n\n const numCols = Math.max(0, ...res.body.map(row => row.length));\n res.cols = new Array(numCols).fill({\n type: "align",\n align: colAlign\n });\n return delimiters ? {\n type: "leftright",\n mode: context.mode,\n body: [res],\n left: delimiters[0],\n right: delimiters[1],\n rightColor: undefined // \\right uninfluenced by \\color in array\n\n } : res;\n },\n\n htmlBuilder: array_htmlBuilder,\n mathmlBuilder: array_mathmlBuilder\n});\ndefineEnvironment({\n type: "array",\n names: ["smallmatrix"],\n props: {\n numArgs: 0\n },\n\n handler(context) {\n const payload = {\n arraystretch: 0.5\n };\n const res = parseArray(context.parser, payload, "script");\n res.colSeparationType = "small";\n return res;\n },\n\n htmlBuilder: array_htmlBuilder,\n mathmlBuilder: array_mathmlBuilder\n});\ndefineEnvironment({\n type: "array",\n names: ["subarray"],\n props: {\n numArgs: 1\n },\n\n handler(context, args) {\n // Parsing of {subarray} is similar to {array}\n const symNode = checkSymbolNodeType(args[0]);\n const colalign = symNode ? [args[0]] : assertNodeType(args[0], "ordgroup").body;\n const cols = colalign.map(function (nde) {\n const node = assertSymbolNodeType(nde);\n const ca = node.text; // {subarray} only recognizes "l" & "c"\n\n if ("lc".indexOf(ca) !== -1) {\n return {\n type: "align",\n align: ca\n };\n }\n\n throw new src_ParseError("Unknown column alignment: " + ca, nde);\n });\n\n if (cols.length > 1) {\n throw new src_ParseError("{subarray} can contain only one column");\n }\n\n let res = {\n cols,\n hskipBeforeAndAfter: false,\n arraystretch: 0.5\n };\n res = parseArray(context.parser, res, "script");\n\n if (res.body.length > 0 && res.body[0].length > 1) {\n throw new src_ParseError("{subarray} can contain only one column");\n }\n\n return res;\n },\n\n htmlBuilder: array_htmlBuilder,\n mathmlBuilder: array_mathmlBuilder\n}); // A cases environment (in amsmath.sty) is almost equivalent to\n// \\def\\arraystretch{1.2}%\n// \\left\\{\\begin{array}{@{}l@{\\quad}l@{}} … \\end{array}\\right.\n// {dcases} is a {cases} environment where cells are set in \\displaystyle,\n// as defined in mathtools.sty.\n// {rcases} is another mathtools environment. It\'s brace is on the right side.\n\ndefineEnvironment({\n type: "array",\n names: ["cases", "dcases", "rcases", "drcases"],\n props: {\n numArgs: 0\n },\n\n handler(context) {\n const payload = {\n arraystretch: 1.2,\n cols: [{\n type: "align",\n align: "l",\n pregap: 0,\n // TODO(kevinb) get the current style.\n // For now we use the metrics for TEXT style which is what we were\n // doing before. Before attempting to get the current style we\n // should look at TeX\'s behavior especially for \\over and matrices.\n postgap: 1.0\n /* 1em quad */\n\n }, {\n type: "align",\n align: "l",\n pregap: 0,\n postgap: 0\n }]\n };\n const res = parseArray(context.parser, payload, dCellStyle(context.envName));\n return {\n type: "leftright",\n mode: context.mode,\n body: [res],\n left: context.envName.indexOf("r") > -1 ? "." : "\\\\{",\n right: context.envName.indexOf("r") > -1 ? "\\\\}" : ".",\n rightColor: undefined\n };\n },\n\n htmlBuilder: array_htmlBuilder,\n mathmlBuilder: array_mathmlBuilder\n}); // In the align environment, one uses ampersands, &, to specify number of\n// columns in each row, and to locate spacing between each column.\n// align gets automatic numbering. align* and aligned do not.\n// The alignedat environment can be used in math mode.\n// Note that we assume \\nomallineskiplimit to be zero,\n// so that \\strut@ is the same as \\strut.\n\ndefineEnvironment({\n type: "array",\n names: ["align", "align*", "aligned", "split"],\n props: {\n numArgs: 0\n },\n handler: alignedHandler,\n htmlBuilder: array_htmlBuilder,\n mathmlBuilder: array_mathmlBuilder\n}); // A gathered environment is like an array environment with one centered\n// column, but where rows are considered lines so get \\jot line spacing\n// and contents are set in \\displaystyle.\n\ndefineEnvironment({\n type: "array",\n names: ["gathered", "gather", "gather*"],\n props: {\n numArgs: 0\n },\n\n handler(context) {\n if (utils.contains(["gather", "gather*"], context.envName)) {\n validateAmsEnvironmentContext(context);\n }\n\n const res = {\n cols: [{\n type: "align",\n align: "c"\n }],\n addJot: true,\n colSeparationType: "gather",\n autoTag: getAutoTag(context.envName),\n emptySingleRow: true,\n leqno: context.parser.settings.leqno\n };\n return parseArray(context.parser, res, "display");\n },\n\n htmlBuilder: array_htmlBuilder,\n mathmlBuilder: array_mathmlBuilder\n}); // alignat environment is like an align environment, but one must explicitly\n// specify maximum number of columns in each row, and can adjust spacing between\n// each columns.\n\ndefineEnvironment({\n type: "array",\n names: ["alignat", "alignat*", "alignedat"],\n props: {\n numArgs: 1\n },\n handler: alignedHandler,\n htmlBuilder: array_htmlBuilder,\n mathmlBuilder: array_mathmlBuilder\n});\ndefineEnvironment({\n type: "array",\n names: ["equation", "equation*"],\n props: {\n numArgs: 0\n },\n\n handler(context) {\n validateAmsEnvironmentContext(context);\n const res = {\n autoTag: getAutoTag(context.envName),\n emptySingleRow: true,\n singleRow: true,\n maxNumCols: 1,\n leqno: context.parser.settings.leqno\n };\n return parseArray(context.parser, res, "display");\n },\n\n htmlBuilder: array_htmlBuilder,\n mathmlBuilder: array_mathmlBuilder\n});\ndefineEnvironment({\n type: "array",\n names: ["CD"],\n props: {\n numArgs: 0\n },\n\n handler(context) {\n validateAmsEnvironmentContext(context);\n return parseCD(context.parser);\n },\n\n htmlBuilder: array_htmlBuilder,\n mathmlBuilder: array_mathmlBuilder\n});\ndefineMacro("\\\\nonumber", "\\\\gdef\\\\@eqnsw{0}");\ndefineMacro("\\\\notag", "\\\\nonumber"); // Catch \\hline outside array environment\n\ndefineFunction({\n type: "text",\n // Doesn\'t matter what this is.\n names: ["\\\\hline", "\\\\hdashline"],\n props: {\n numArgs: 0,\n allowedInText: true,\n allowedInMath: true\n },\n\n handler(context, args) {\n throw new src_ParseError(context.funcName + " valid only within array environment");\n }\n\n});\n;// CONCATENATED MODULE: ./src/environments.js\n\nconst environments = _environments;\n/* harmony default export */ var src_environments = (environments); // All environment definitions should be imported below\n\n\n;// CONCATENATED MODULE: ./src/functions/environment.js\n\n\n\n // Environment delimiters. HTML/MathML rendering is defined in the corresponding\n// defineEnvironment definitions.\n\ndefineFunction({\n type: "environment",\n names: ["\\\\begin", "\\\\end"],\n props: {\n numArgs: 1,\n argTypes: ["text"]\n },\n\n handler(_ref, args) {\n let {\n parser,\n funcName\n } = _ref;\n const nameGroup = args[0];\n\n if (nameGroup.type !== "ordgroup") {\n throw new src_ParseError("Invalid environment name", nameGroup);\n }\n\n let envName = "";\n\n for (let i = 0; i < nameGroup.body.length; ++i) {\n envName += assertNodeType(nameGroup.body[i], "textord").text;\n }\n\n if (funcName === "\\\\begin") {\n // begin...end is similar to left...right\n if (!src_environments.hasOwnProperty(envName)) {\n throw new src_ParseError("No such environment: " + envName, nameGroup);\n } // Build the environment object. Arguments and other information will\n // be made available to the begin and end methods using properties.\n\n\n const env = src_environments[envName];\n const {\n args,\n optArgs\n } = parser.parseArguments("\\\\begin{" + envName + "}", env);\n const context = {\n mode: parser.mode,\n envName,\n parser\n };\n const result = env.handler(context, args, optArgs);\n parser.expect("\\\\end", false);\n const endNameToken = parser.nextToken;\n const end = assertNodeType(parser.parseFunction(), "environment");\n\n if (end.name !== envName) {\n throw new src_ParseError("Mismatch: \\\\begin{" + envName + "} matched by \\\\end{" + end.name + "}", endNameToken);\n } // $FlowFixMe, "environment" handler returns an environment ParseNode\n\n\n return result;\n }\n\n return {\n type: "environment",\n mode: parser.mode,\n name: envName,\n nameGroup\n };\n }\n\n});\n;// CONCATENATED MODULE: ./src/functions/font.js\n// TODO(kevinb): implement \\\\sl and \\\\sc\n\n\n\n\n\n\nconst font_htmlBuilder = (group, options) => {\n const font = group.font;\n const newOptions = options.withFont(font);\n return buildGroup(group.body, newOptions);\n};\n\nconst font_mathmlBuilder = (group, options) => {\n const font = group.font;\n const newOptions = options.withFont(font);\n return buildMathML_buildGroup(group.body, newOptions);\n};\n\nconst fontAliases = {\n "\\\\Bbb": "\\\\mathbb",\n "\\\\bold": "\\\\mathbf",\n "\\\\frak": "\\\\mathfrak",\n "\\\\bm": "\\\\boldsymbol"\n};\ndefineFunction({\n type: "font",\n names: [// styles, except \\boldsymbol defined below\n "\\\\mathrm", "\\\\mathit", "\\\\mathbf", "\\\\mathnormal", "\\\\mathsfit", // families\n "\\\\mathbb", "\\\\mathcal", "\\\\mathfrak", "\\\\mathscr", "\\\\mathsf", "\\\\mathtt", // aliases, except \\bm defined below\n "\\\\Bbb", "\\\\bold", "\\\\frak"],\n props: {\n numArgs: 1,\n allowedInArgument: true\n },\n handler: (_ref, args) => {\n let {\n parser,\n funcName\n } = _ref;\n const body = normalizeArgument(args[0]);\n let func = funcName;\n\n if (func in fontAliases) {\n func = fontAliases[func];\n }\n\n return {\n type: "font",\n mode: parser.mode,\n font: func.slice(1),\n body\n };\n },\n htmlBuilder: font_htmlBuilder,\n mathmlBuilder: font_mathmlBuilder\n});\ndefineFunction({\n type: "mclass",\n names: ["\\\\boldsymbol", "\\\\bm"],\n props: {\n numArgs: 1\n },\n handler: (_ref2, args) => {\n let {\n parser\n } = _ref2;\n const body = args[0];\n const isCharacterBox = utils.isCharacterBox(body); // amsbsy.sty\'s \\boldsymbol uses \\binrel spacing to inherit the\n // argument\'s bin|rel|ord status\n\n return {\n type: "mclass",\n mode: parser.mode,\n mclass: binrelClass(body),\n body: [{\n type: "font",\n mode: parser.mode,\n font: "boldsymbol",\n body\n }],\n isCharacterBox: isCharacterBox\n };\n }\n}); // Old font changing functions\n\ndefineFunction({\n type: "font",\n names: ["\\\\rm", "\\\\sf", "\\\\tt", "\\\\bf", "\\\\it", "\\\\cal"],\n props: {\n numArgs: 0,\n allowedInText: true\n },\n handler: (_ref3, args) => {\n let {\n parser,\n funcName,\n breakOnTokenText\n } = _ref3;\n const {\n mode\n } = parser;\n const body = parser.parseExpression(true, breakOnTokenText);\n const style = "math" + funcName.slice(1);\n return {\n type: "font",\n mode: mode,\n font: style,\n body: {\n type: "ordgroup",\n mode: parser.mode,\n body\n }\n };\n },\n htmlBuilder: font_htmlBuilder,\n mathmlBuilder: font_mathmlBuilder\n});\n;// CONCATENATED MODULE: ./src/functions/genfrac.js\n\n\n\n\n\n\n\n\n\n\n\nconst adjustStyle = (size, originalStyle) => {\n // Figure out what style this fraction should be in based on the\n // function used\n let style = originalStyle;\n\n if (size === "display") {\n // Get display style as a default.\n // If incoming style is sub/sup, use style.text() to get correct size.\n style = style.id >= src_Style.SCRIPT.id ? style.text() : src_Style.DISPLAY;\n } else if (size === "text" && style.size === src_Style.DISPLAY.size) {\n // We\'re in a \\tfrac but incoming style is displaystyle, so:\n style = src_Style.TEXT;\n } else if (size === "script") {\n style = src_Style.SCRIPT;\n } else if (size === "scriptscript") {\n style = src_Style.SCRIPTSCRIPT;\n }\n\n return style;\n};\n\nconst genfrac_htmlBuilder = (group, options) => {\n // Fractions are handled in the TeXbook on pages 444-445, rules 15(a-e).\n const style = adjustStyle(group.size, options.style);\n const nstyle = style.fracNum();\n const dstyle = style.fracDen();\n let newOptions;\n newOptions = options.havingStyle(nstyle);\n const numerm = buildGroup(group.numer, newOptions, options);\n\n if (group.continued) {\n // \\cfrac inserts a \\strut into the numerator.\n // Get \\strut dimensions from TeXbook page 353.\n const hStrut = 8.5 / options.fontMetrics().ptPerEm;\n const dStrut = 3.5 / options.fontMetrics().ptPerEm;\n numerm.height = numerm.height < hStrut ? hStrut : numerm.height;\n numerm.depth = numerm.depth < dStrut ? dStrut : numerm.depth;\n }\n\n newOptions = options.havingStyle(dstyle);\n const denomm = buildGroup(group.denom, newOptions, options);\n let rule;\n let ruleWidth;\n let ruleSpacing;\n\n if (group.hasBarLine) {\n if (group.barSize) {\n ruleWidth = calculateSize(group.barSize, options);\n rule = buildCommon.makeLineSpan("frac-line", options, ruleWidth);\n } else {\n rule = buildCommon.makeLineSpan("frac-line", options);\n }\n\n ruleWidth = rule.height;\n ruleSpacing = rule.height;\n } else {\n rule = null;\n ruleWidth = 0;\n ruleSpacing = options.fontMetrics().defaultRuleThickness;\n } // Rule 15b\n\n\n let numShift;\n let clearance;\n let denomShift;\n\n if (style.size === src_Style.DISPLAY.size || group.size === "display") {\n numShift = options.fontMetrics().num1;\n\n if (ruleWidth > 0) {\n clearance = 3 * ruleSpacing;\n } else {\n clearance = 7 * ruleSpacing;\n }\n\n denomShift = options.fontMetrics().denom1;\n } else {\n if (ruleWidth > 0) {\n numShift = options.fontMetrics().num2;\n clearance = ruleSpacing;\n } else {\n numShift = options.fontMetrics().num3;\n clearance = 3 * ruleSpacing;\n }\n\n denomShift = options.fontMetrics().denom2;\n }\n\n let frac;\n\n if (!rule) {\n // Rule 15c\n const candidateClearance = numShift - numerm.depth - (denomm.height - denomShift);\n\n if (candidateClearance < clearance) {\n numShift += 0.5 * (clearance - candidateClearance);\n denomShift += 0.5 * (clearance - candidateClearance);\n }\n\n frac = buildCommon.makeVList({\n positionType: "individualShift",\n children: [{\n type: "elem",\n elem: denomm,\n shift: denomShift\n }, {\n type: "elem",\n elem: numerm,\n shift: -numShift\n }]\n }, options);\n } else {\n // Rule 15d\n const axisHeight = options.fontMetrics().axisHeight;\n\n if (numShift - numerm.depth - (axisHeight + 0.5 * ruleWidth) < clearance) {\n numShift += clearance - (numShift - numerm.depth - (axisHeight + 0.5 * ruleWidth));\n }\n\n if (axisHeight - 0.5 * ruleWidth - (denomm.height - denomShift) < clearance) {\n denomShift += clearance - (axisHeight - 0.5 * ruleWidth - (denomm.height - denomShift));\n }\n\n const midShift = -(axisHeight - 0.5 * ruleWidth);\n frac = buildCommon.makeVList({\n positionType: "individualShift",\n children: [{\n type: "elem",\n elem: denomm,\n shift: denomShift\n }, {\n type: "elem",\n elem: rule,\n shift: midShift\n }, {\n type: "elem",\n elem: numerm,\n shift: -numShift\n }]\n }, options);\n } // Since we manually change the style sometimes (with \\dfrac or \\tfrac),\n // account for the possible size change here.\n\n\n newOptions = options.havingStyle(style);\n frac.height *= newOptions.sizeMultiplier / options.sizeMultiplier;\n frac.depth *= newOptions.sizeMultiplier / options.sizeMultiplier; // Rule 15e\n\n let delimSize;\n\n if (style.size === src_Style.DISPLAY.size) {\n delimSize = options.fontMetrics().delim1;\n } else if (style.size === src_Style.SCRIPTSCRIPT.size) {\n delimSize = options.havingStyle(src_Style.SCRIPT).fontMetrics().delim2;\n } else {\n delimSize = options.fontMetrics().delim2;\n }\n\n let leftDelim;\n let rightDelim;\n\n if (group.leftDelim == null) {\n leftDelim = makeNullDelimiter(options, ["mopen"]);\n } else {\n leftDelim = delimiter.customSizedDelim(group.leftDelim, delimSize, true, options.havingStyle(style), group.mode, ["mopen"]);\n }\n\n if (group.continued) {\n rightDelim = buildCommon.makeSpan([]); // zero width for \\cfrac\n } else if (group.rightDelim == null) {\n rightDelim = makeNullDelimiter(options, ["mclose"]);\n } else {\n rightDelim = delimiter.customSizedDelim(group.rightDelim, delimSize, true, options.havingStyle(style), group.mode, ["mclose"]);\n }\n\n return buildCommon.makeSpan(["mord"].concat(newOptions.sizingClasses(options)), [leftDelim, buildCommon.makeSpan(["mfrac"], [frac]), rightDelim], options);\n};\n\nconst genfrac_mathmlBuilder = (group, options) => {\n let node = new mathMLTree.MathNode("mfrac", [buildMathML_buildGroup(group.numer, options), buildMathML_buildGroup(group.denom, options)]);\n\n if (!group.hasBarLine) {\n node.setAttribute("linethickness", "0px");\n } else if (group.barSize) {\n const ruleWidth = calculateSize(group.barSize, options);\n node.setAttribute("linethickness", makeEm(ruleWidth));\n }\n\n const style = adjustStyle(group.size, options.style);\n\n if (style.size !== options.style.size) {\n node = new mathMLTree.MathNode("mstyle", [node]);\n const isDisplay = style.size === src_Style.DISPLAY.size ? "true" : "false";\n node.setAttribute("displaystyle", isDisplay);\n node.setAttribute("scriptlevel", "0");\n }\n\n if (group.leftDelim != null || group.rightDelim != null) {\n const withDelims = [];\n\n if (group.leftDelim != null) {\n const leftOp = new mathMLTree.MathNode("mo", [new mathMLTree.TextNode(group.leftDelim.replace("\\\\", ""))]);\n leftOp.setAttribute("fence", "true");\n withDelims.push(leftOp);\n }\n\n withDelims.push(node);\n\n if (group.rightDelim != null) {\n const rightOp = new mathMLTree.MathNode("mo", [new mathMLTree.TextNode(group.rightDelim.replace("\\\\", ""))]);\n rightOp.setAttribute("fence", "true");\n withDelims.push(rightOp);\n }\n\n return makeRow(withDelims);\n }\n\n return node;\n};\n\ndefineFunction({\n type: "genfrac",\n names: ["\\\\dfrac", "\\\\frac", "\\\\tfrac", "\\\\dbinom", "\\\\binom", "\\\\tbinom", "\\\\\\\\atopfrac", // can’t be entered directly\n "\\\\\\\\bracefrac", "\\\\\\\\brackfrac" // ditto\n ],\n props: {\n numArgs: 2,\n allowedInArgument: true\n },\n handler: (_ref, args) => {\n let {\n parser,\n funcName\n } = _ref;\n const numer = args[0];\n const denom = args[1];\n let hasBarLine;\n let leftDelim = null;\n let rightDelim = null;\n let size = "auto";\n\n switch (funcName) {\n case "\\\\dfrac":\n case "\\\\frac":\n case "\\\\tfrac":\n hasBarLine = true;\n break;\n\n case "\\\\\\\\atopfrac":\n hasBarLine = false;\n break;\n\n case "\\\\dbinom":\n case "\\\\binom":\n case "\\\\tbinom":\n hasBarLine = false;\n leftDelim = "(";\n rightDelim = ")";\n break;\n\n case "\\\\\\\\bracefrac":\n hasBarLine = false;\n leftDelim = "\\\\{";\n rightDelim = "\\\\}";\n break;\n\n case "\\\\\\\\brackfrac":\n hasBarLine = false;\n leftDelim = "[";\n rightDelim = "]";\n break;\n\n default:\n throw new Error("Unrecognized genfrac command");\n }\n\n switch (funcName) {\n case "\\\\dfrac":\n case "\\\\dbinom":\n size = "display";\n break;\n\n case "\\\\tfrac":\n case "\\\\tbinom":\n size = "text";\n break;\n }\n\n return {\n type: "genfrac",\n mode: parser.mode,\n continued: false,\n numer,\n denom,\n hasBarLine,\n leftDelim,\n rightDelim,\n size,\n barSize: null\n };\n },\n htmlBuilder: genfrac_htmlBuilder,\n mathmlBuilder: genfrac_mathmlBuilder\n});\ndefineFunction({\n type: "genfrac",\n names: ["\\\\cfrac"],\n props: {\n numArgs: 2\n },\n handler: (_ref2, args) => {\n let {\n parser,\n funcName\n } = _ref2;\n const numer = args[0];\n const denom = args[1];\n return {\n type: "genfrac",\n mode: parser.mode,\n continued: true,\n numer,\n denom,\n hasBarLine: true,\n leftDelim: null,\n rightDelim: null,\n size: "display",\n barSize: null\n };\n }\n}); // Infix generalized fractions -- these are not rendered directly, but replaced\n// immediately by one of the variants above.\n\ndefineFunction({\n type: "infix",\n names: ["\\\\over", "\\\\choose", "\\\\atop", "\\\\brace", "\\\\brack"],\n props: {\n numArgs: 0,\n infix: true\n },\n\n handler(_ref3) {\n let {\n parser,\n funcName,\n token\n } = _ref3;\n let replaceWith;\n\n switch (funcName) {\n case "\\\\over":\n replaceWith = "\\\\frac";\n break;\n\n case "\\\\choose":\n replaceWith = "\\\\binom";\n break;\n\n case "\\\\atop":\n replaceWith = "\\\\\\\\atopfrac";\n break;\n\n case "\\\\brace":\n replaceWith = "\\\\\\\\bracefrac";\n break;\n\n case "\\\\brack":\n replaceWith = "\\\\\\\\brackfrac";\n break;\n\n default:\n throw new Error("Unrecognized infix genfrac command");\n }\n\n return {\n type: "infix",\n mode: parser.mode,\n replaceWith,\n token\n };\n }\n\n});\nconst stylArray = ["display", "text", "script", "scriptscript"];\n\nconst delimFromValue = function (delimString) {\n let delim = null;\n\n if (delimString.length > 0) {\n delim = delimString;\n delim = delim === "." ? null : delim;\n }\n\n return delim;\n};\n\ndefineFunction({\n type: "genfrac",\n names: ["\\\\genfrac"],\n props: {\n numArgs: 6,\n allowedInArgument: true,\n argTypes: ["math", "math", "size", "text", "math", "math"]\n },\n\n handler(_ref4, args) {\n let {\n parser\n } = _ref4;\n const numer = args[4];\n const denom = args[5]; // Look into the parse nodes to get the desired delimiters.\n\n const leftNode = normalizeArgument(args[0]);\n const leftDelim = leftNode.type === "atom" && leftNode.family === "open" ? delimFromValue(leftNode.text) : null;\n const rightNode = normalizeArgument(args[1]);\n const rightDelim = rightNode.type === "atom" && rightNode.family === "close" ? delimFromValue(rightNode.text) : null;\n const barNode = assertNodeType(args[2], "size");\n let hasBarLine;\n let barSize = null;\n\n if (barNode.isBlank) {\n // \\genfrac acts differently than \\above.\n // \\genfrac treats an empty size group as a signal to use a\n // standard bar size. \\above would see size = 0 and omit the bar.\n hasBarLine = true;\n } else {\n barSize = barNode.value;\n hasBarLine = barSize.number > 0;\n } // Find out if we want displaystyle, textstyle, etc.\n\n\n let size = "auto";\n let styl = args[3];\n\n if (styl.type === "ordgroup") {\n if (styl.body.length > 0) {\n const textOrd = assertNodeType(styl.body[0], "textord");\n size = stylArray[Number(textOrd.text)];\n }\n } else {\n styl = assertNodeType(styl, "textord");\n size = stylArray[Number(styl.text)];\n }\n\n return {\n type: "genfrac",\n mode: parser.mode,\n numer,\n denom,\n continued: false,\n hasBarLine,\n barSize,\n leftDelim,\n rightDelim,\n size\n };\n },\n\n htmlBuilder: genfrac_htmlBuilder,\n mathmlBuilder: genfrac_mathmlBuilder\n}); // \\above is an infix fraction that also defines a fraction bar size.\n\ndefineFunction({\n type: "infix",\n names: ["\\\\above"],\n props: {\n numArgs: 1,\n argTypes: ["size"],\n infix: true\n },\n\n handler(_ref5, args) {\n let {\n parser,\n funcName,\n token\n } = _ref5;\n return {\n type: "infix",\n mode: parser.mode,\n replaceWith: "\\\\\\\\abovefrac",\n size: assertNodeType(args[0], "size").value,\n token\n };\n }\n\n});\ndefineFunction({\n type: "genfrac",\n names: ["\\\\\\\\abovefrac"],\n props: {\n numArgs: 3,\n argTypes: ["math", "size", "math"]\n },\n handler: (_ref6, args) => {\n let {\n parser,\n funcName\n } = _ref6;\n const numer = args[0];\n const barSize = assert(assertNodeType(args[1], "infix").size);\n const denom = args[2];\n const hasBarLine = barSize.number > 0;\n return {\n type: "genfrac",\n mode: parser.mode,\n numer,\n denom,\n continued: false,\n hasBarLine,\n barSize,\n leftDelim: null,\n rightDelim: null,\n size: "auto"\n };\n },\n htmlBuilder: genfrac_htmlBuilder,\n mathmlBuilder: genfrac_mathmlBuilder\n});\n;// CONCATENATED MODULE: ./src/functions/horizBrace.js\n\n\n\n\n\n\n\n\n// NOTE: Unlike most `htmlBuilder`s, this one handles not only "horizBrace", but\n// also "supsub" since an over/underbrace can affect super/subscripting.\nconst horizBrace_htmlBuilder = (grp, options) => {\n const style = options.style; // Pull out the `ParseNode<"horizBrace">` if `grp` is a "supsub" node.\n\n let supSubGroup;\n let group;\n\n if (grp.type === "supsub") {\n // Ref: LaTeX source2e: }}}}\\limits}\n // i.e. LaTeX treats the brace similar to an op and passes it\n // with \\limits, so we need to assign supsub style.\n supSubGroup = grp.sup ? buildGroup(grp.sup, options.havingStyle(style.sup()), options) : buildGroup(grp.sub, options.havingStyle(style.sub()), options);\n group = assertNodeType(grp.base, "horizBrace");\n } else {\n group = assertNodeType(grp, "horizBrace");\n } // Build the base group\n\n\n const body = buildGroup(group.base, options.havingBaseStyle(src_Style.DISPLAY)); // Create the stretchy element\n\n const braceBody = stretchy.svgSpan(group, options); // Generate the vlist, with the appropriate kerns ┏━━━━━━━━┓\n // This first vlist contains the content and the brace: equation\n\n let vlist;\n\n if (group.isOver) {\n vlist = buildCommon.makeVList({\n positionType: "firstBaseline",\n children: [{\n type: "elem",\n elem: body\n }, {\n type: "kern",\n size: 0.1\n }, {\n type: "elem",\n elem: braceBody\n }]\n }, options); // $FlowFixMe: Replace this with passing "svg-align" into makeVList.\n\n vlist.children[0].children[0].children[1].classes.push("svg-align");\n } else {\n vlist = buildCommon.makeVList({\n positionType: "bottom",\n positionData: body.depth + 0.1 + braceBody.height,\n children: [{\n type: "elem",\n elem: braceBody\n }, {\n type: "kern",\n size: 0.1\n }, {\n type: "elem",\n elem: body\n }]\n }, options); // $FlowFixMe: Replace this with passing "svg-align" into makeVList.\n\n vlist.children[0].children[0].children[0].classes.push("svg-align");\n }\n\n if (supSubGroup) {\n // To write the supsub, wrap the first vlist in another vlist:\n // They can\'t all go in the same vlist, because the note might be\n // wider than the equation. We want the equation to control the\n // brace width.\n // note long note long note\n // ┏━━━━━━━━┓ or ┏━━━┓ not ┏━━━━━━━━━┓\n // equation eqn eqn\n const vSpan = buildCommon.makeSpan(["mord", group.isOver ? "mover" : "munder"], [vlist], options);\n\n if (group.isOver) {\n vlist = buildCommon.makeVList({\n positionType: "firstBaseline",\n children: [{\n type: "elem",\n elem: vSpan\n }, {\n type: "kern",\n size: 0.2\n }, {\n type: "elem",\n elem: supSubGroup\n }]\n }, options);\n } else {\n vlist = buildCommon.makeVList({\n positionType: "bottom",\n positionData: vSpan.depth + 0.2 + supSubGroup.height + supSubGroup.depth,\n children: [{\n type: "elem",\n elem: supSubGroup\n }, {\n type: "kern",\n size: 0.2\n }, {\n type: "elem",\n elem: vSpan\n }]\n }, options);\n }\n }\n\n return buildCommon.makeSpan(["mord", group.isOver ? "mover" : "munder"], [vlist], options);\n};\n\nconst horizBrace_mathmlBuilder = (group, options) => {\n const accentNode = stretchy.mathMLnode(group.label);\n return new mathMLTree.MathNode(group.isOver ? "mover" : "munder", [buildMathML_buildGroup(group.base, options), accentNode]);\n}; // Horizontal stretchy braces\n\n\ndefineFunction({\n type: "horizBrace",\n names: ["\\\\overbrace", "\\\\underbrace"],\n props: {\n numArgs: 1\n },\n\n handler(_ref, args) {\n let {\n parser,\n funcName\n } = _ref;\n return {\n type: "horizBrace",\n mode: parser.mode,\n label: funcName,\n isOver: /^\\\\over/.test(funcName),\n base: args[0]\n };\n },\n\n htmlBuilder: horizBrace_htmlBuilder,\n mathmlBuilder: horizBrace_mathmlBuilder\n});\n;// CONCATENATED MODULE: ./src/functions/href.js\n\n\n\n\n\n\ndefineFunction({\n type: "href",\n names: ["\\\\href"],\n props: {\n numArgs: 2,\n argTypes: ["url", "original"],\n allowedInText: true\n },\n handler: (_ref, args) => {\n let {\n parser\n } = _ref;\n const body = args[1];\n const href = assertNodeType(args[0], "url").url;\n\n if (!parser.settings.isTrusted({\n command: "\\\\href",\n url: href\n })) {\n return parser.formatUnsupportedCmd("\\\\href");\n }\n\n return {\n type: "href",\n mode: parser.mode,\n href,\n body: ordargument(body)\n };\n },\n htmlBuilder: (group, options) => {\n const elements = buildExpression(group.body, options, false);\n return buildCommon.makeAnchor(group.href, [], elements, options);\n },\n mathmlBuilder: (group, options) => {\n let math = buildExpressionRow(group.body, options);\n\n if (!(math instanceof MathNode)) {\n math = new MathNode("mrow", [math]);\n }\n\n math.setAttribute("href", group.href);\n return math;\n }\n});\ndefineFunction({\n type: "href",\n names: ["\\\\url"],\n props: {\n numArgs: 1,\n argTypes: ["url"],\n allowedInText: true\n },\n handler: (_ref2, args) => {\n let {\n parser\n } = _ref2;\n const href = assertNodeType(args[0], "url").url;\n\n if (!parser.settings.isTrusted({\n command: "\\\\url",\n url: href\n })) {\n return parser.formatUnsupportedCmd("\\\\url");\n }\n\n const chars = [];\n\n for (let i = 0; i < href.length; i++) {\n let c = href[i];\n\n if (c === "~") {\n c = "\\\\textasciitilde";\n }\n\n chars.push({\n type: "textord",\n mode: "text",\n text: c\n });\n }\n\n const body = {\n type: "text",\n mode: parser.mode,\n font: "\\\\texttt",\n body: chars\n };\n return {\n type: "href",\n mode: parser.mode,\n href,\n body: ordargument(body)\n };\n }\n});\n;// CONCATENATED MODULE: ./src/functions/hbox.js\n\n\n\n\n // \\hbox is provided for compatibility with LaTeX \\vcenter.\n// In LaTeX, \\vcenter can act only on a box, as in\n// \\vcenter{\\hbox{$\\frac{a+b}{\\dfrac{c}{d}}$}}\n// This function by itself doesn\'t do anything but prevent a soft line break.\n\ndefineFunction({\n type: "hbox",\n names: ["\\\\hbox"],\n props: {\n numArgs: 1,\n argTypes: ["text"],\n allowedInText: true,\n primitive: true\n },\n\n handler(_ref, args) {\n let {\n parser\n } = _ref;\n return {\n type: "hbox",\n mode: parser.mode,\n body: ordargument(args[0])\n };\n },\n\n htmlBuilder(group, options) {\n const elements = buildExpression(group.body, options, false);\n return buildCommon.makeFragment(elements);\n },\n\n mathmlBuilder(group, options) {\n return new mathMLTree.MathNode("mrow", buildMathML_buildExpression(group.body, options));\n }\n\n});\n;// CONCATENATED MODULE: ./src/functions/html.js\n\n\n\n\n\n\ndefineFunction({\n type: "html",\n names: ["\\\\htmlClass", "\\\\htmlId", "\\\\htmlStyle", "\\\\htmlData"],\n props: {\n numArgs: 2,\n argTypes: ["raw", "original"],\n allowedInText: true\n },\n handler: (_ref, args) => {\n let {\n parser,\n funcName,\n token\n } = _ref;\n const value = assertNodeType(args[0], "raw").string;\n const body = args[1];\n\n if (parser.settings.strict) {\n parser.settings.reportNonstrict("htmlExtension", "HTML extension is disabled on strict mode");\n }\n\n let trustContext;\n const attributes = {};\n\n switch (funcName) {\n case "\\\\htmlClass":\n attributes.class = value;\n trustContext = {\n command: "\\\\htmlClass",\n class: value\n };\n break;\n\n case "\\\\htmlId":\n attributes.id = value;\n trustContext = {\n command: "\\\\htmlId",\n id: value\n };\n break;\n\n case "\\\\htmlStyle":\n attributes.style = value;\n trustContext = {\n command: "\\\\htmlStyle",\n style: value\n };\n break;\n\n case "\\\\htmlData":\n {\n const data = value.split(",");\n\n for (let i = 0; i < data.length; i++) {\n const keyVal = data[i].split("=");\n\n if (keyVal.length !== 2) {\n throw new src_ParseError("Error parsing key-value for \\\\htmlData");\n }\n\n attributes["data-" + keyVal[0].trim()] = keyVal[1].trim();\n }\n\n trustContext = {\n command: "\\\\htmlData",\n attributes\n };\n break;\n }\n\n default:\n throw new Error("Unrecognized html command");\n }\n\n if (!parser.settings.isTrusted(trustContext)) {\n return parser.formatUnsupportedCmd(funcName);\n }\n\n return {\n type: "html",\n mode: parser.mode,\n attributes,\n body: ordargument(body)\n };\n },\n htmlBuilder: (group, options) => {\n const elements = buildExpression(group.body, options, false);\n const classes = ["enclosing"];\n\n if (group.attributes.class) {\n classes.push(...group.attributes.class.trim().split(/\\s+/));\n }\n\n const span = buildCommon.makeSpan(classes, elements, options);\n\n for (const attr in group.attributes) {\n if (attr !== "class" && group.attributes.hasOwnProperty(attr)) {\n span.setAttribute(attr, group.attributes[attr]);\n }\n }\n\n return span;\n },\n mathmlBuilder: (group, options) => {\n return buildExpressionRow(group.body, options);\n }\n});\n;// CONCATENATED MODULE: ./src/functions/htmlmathml.js\n\n\n\n\ndefineFunction({\n type: "htmlmathml",\n names: ["\\\\html@mathml"],\n props: {\n numArgs: 2,\n allowedInText: true\n },\n handler: (_ref, args) => {\n let {\n parser\n } = _ref;\n return {\n type: "htmlmathml",\n mode: parser.mode,\n html: ordargument(args[0]),\n mathml: ordargument(args[1])\n };\n },\n htmlBuilder: (group, options) => {\n const elements = buildExpression(group.html, options, false);\n return buildCommon.makeFragment(elements);\n },\n mathmlBuilder: (group, options) => {\n return buildExpressionRow(group.mathml, options);\n }\n});\n;// CONCATENATED MODULE: ./src/functions/includegraphics.js\n\n\n\n\n\n\n\nconst sizeData = function (str) {\n if (/^[-+]? *(\\d+(\\.\\d*)?|\\.\\d+)$/.test(str)) {\n // str is a number with no unit specified.\n // default unit is bp, per graphix package.\n return {\n number: +str,\n unit: "bp"\n };\n } else {\n const match = /([-+]?) *(\\d+(?:\\.\\d*)?|\\.\\d+) *([a-z]{2})/.exec(str);\n\n if (!match) {\n throw new src_ParseError("Invalid size: \'" + str + "\' in \\\\includegraphics");\n }\n\n const data = {\n number: +(match[1] + match[2]),\n // sign + magnitude, cast to number\n unit: match[3]\n };\n\n if (!validUnit(data)) {\n throw new src_ParseError("Invalid unit: \'" + data.unit + "\' in \\\\includegraphics.");\n }\n\n return data;\n }\n};\n\ndefineFunction({\n type: "includegraphics",\n names: ["\\\\includegraphics"],\n props: {\n numArgs: 1,\n numOptionalArgs: 1,\n argTypes: ["raw", "url"],\n allowedInText: false\n },\n handler: (_ref, args, optArgs) => {\n let {\n parser\n } = _ref;\n let width = {\n number: 0,\n unit: "em"\n };\n let height = {\n number: 0.9,\n unit: "em"\n }; // sorta character sized.\n\n let totalheight = {\n number: 0,\n unit: "em"\n };\n let alt = "";\n\n if (optArgs[0]) {\n const attributeStr = assertNodeType(optArgs[0], "raw").string; // Parser.js does not parse key/value pairs. We get a string.\n\n const attributes = attributeStr.split(",");\n\n for (let i = 0; i < attributes.length; i++) {\n const keyVal = attributes[i].split("=");\n\n if (keyVal.length === 2) {\n const str = keyVal[1].trim();\n\n switch (keyVal[0].trim()) {\n case "alt":\n alt = str;\n break;\n\n case "width":\n width = sizeData(str);\n break;\n\n case "height":\n height = sizeData(str);\n break;\n\n case "totalheight":\n totalheight = sizeData(str);\n break;\n\n default:\n throw new src_ParseError("Invalid key: \'" + keyVal[0] + "\' in \\\\includegraphics.");\n }\n }\n }\n }\n\n const src = assertNodeType(args[0], "url").url;\n\n if (alt === "") {\n // No alt given. Use the file name. Strip away the path.\n alt = src;\n alt = alt.replace(/^.*[\\\\/]/, \'\');\n alt = alt.substring(0, alt.lastIndexOf(\'.\'));\n }\n\n if (!parser.settings.isTrusted({\n command: "\\\\includegraphics",\n url: src\n })) {\n return parser.formatUnsupportedCmd("\\\\includegraphics");\n }\n\n return {\n type: "includegraphics",\n mode: parser.mode,\n alt: alt,\n width: width,\n height: height,\n totalheight: totalheight,\n src: src\n };\n },\n htmlBuilder: (group, options) => {\n const height = calculateSize(group.height, options);\n let depth = 0;\n\n if (group.totalheight.number > 0) {\n depth = calculateSize(group.totalheight, options) - height;\n }\n\n let width = 0;\n\n if (group.width.number > 0) {\n width = calculateSize(group.width, options);\n }\n\n const style = {\n height: makeEm(height + depth)\n };\n\n if (width > 0) {\n style.width = makeEm(width);\n }\n\n if (depth > 0) {\n style.verticalAlign = makeEm(-depth);\n }\n\n const node = new Img(group.src, group.alt, style);\n node.height = height;\n node.depth = depth;\n return node;\n },\n mathmlBuilder: (group, options) => {\n const node = new mathMLTree.MathNode("mglyph", []);\n node.setAttribute("alt", group.alt);\n const height = calculateSize(group.height, options);\n let depth = 0;\n\n if (group.totalheight.number > 0) {\n depth = calculateSize(group.totalheight, options) - height;\n node.setAttribute("valign", makeEm(-depth));\n }\n\n node.setAttribute("height", makeEm(height + depth));\n\n if (group.width.number > 0) {\n const width = calculateSize(group.width, options);\n node.setAttribute("width", makeEm(width));\n }\n\n node.setAttribute("src", group.src);\n return node;\n }\n});\n;// CONCATENATED MODULE: ./src/functions/kern.js\n// Horizontal spacing commands\n\n\n\n\n // TODO: \\hskip and \\mskip should support plus and minus in lengths\n\ndefineFunction({\n type: "kern",\n names: ["\\\\kern", "\\\\mkern", "\\\\hskip", "\\\\mskip"],\n props: {\n numArgs: 1,\n argTypes: ["size"],\n primitive: true,\n allowedInText: true\n },\n\n handler(_ref, args) {\n let {\n parser,\n funcName\n } = _ref;\n const size = assertNodeType(args[0], "size");\n\n if (parser.settings.strict) {\n const mathFunction = funcName[1] === \'m\'; // \\mkern, \\mskip\n\n const muUnit = size.value.unit === \'mu\';\n\n if (mathFunction) {\n if (!muUnit) {\n parser.settings.reportNonstrict("mathVsTextUnits", "LaTeX\'s " + funcName + " supports only mu units, " + ("not " + size.value.unit + " units"));\n }\n\n if (parser.mode !== "math") {\n parser.settings.reportNonstrict("mathVsTextUnits", "LaTeX\'s " + funcName + " works only in math mode");\n }\n } else {\n // !mathFunction\n if (muUnit) {\n parser.settings.reportNonstrict("mathVsTextUnits", "LaTeX\'s " + funcName + " doesn\'t support mu units");\n }\n }\n }\n\n return {\n type: "kern",\n mode: parser.mode,\n dimension: size.value\n };\n },\n\n htmlBuilder(group, options) {\n return buildCommon.makeGlue(group.dimension, options);\n },\n\n mathmlBuilder(group, options) {\n const dimension = calculateSize(group.dimension, options);\n return new mathMLTree.SpaceNode(dimension);\n }\n\n});\n;// CONCATENATED MODULE: ./src/functions/lap.js\n// Horizontal overlap functions\n\n\n\n\n\n\ndefineFunction({\n type: "lap",\n names: ["\\\\mathllap", "\\\\mathrlap", "\\\\mathclap"],\n props: {\n numArgs: 1,\n allowedInText: true\n },\n handler: (_ref, args) => {\n let {\n parser,\n funcName\n } = _ref;\n const body = args[0];\n return {\n type: "lap",\n mode: parser.mode,\n alignment: funcName.slice(5),\n body\n };\n },\n htmlBuilder: (group, options) => {\n // mathllap, mathrlap, mathclap\n let inner;\n\n if (group.alignment === "clap") {\n // ref: https://www.math.lsu.edu/~aperlis/publications/mathclap/\n inner = buildCommon.makeSpan([], [buildGroup(group.body, options)]); // wrap, since CSS will center a .clap > .inner > span\n\n inner = buildCommon.makeSpan(["inner"], [inner], options);\n } else {\n inner = buildCommon.makeSpan(["inner"], [buildGroup(group.body, options)]);\n }\n\n const fix = buildCommon.makeSpan(["fix"], []);\n let node = buildCommon.makeSpan([group.alignment], [inner, fix], options); // At this point, we have correctly set horizontal alignment of the\n // two items involved in the lap.\n // Next, use a strut to set the height of the HTML bounding box.\n // Otherwise, a tall argument may be misplaced.\n // This code resolved issue #1153\n\n const strut = buildCommon.makeSpan(["strut"]);\n strut.style.height = makeEm(node.height + node.depth);\n\n if (node.depth) {\n strut.style.verticalAlign = makeEm(-node.depth);\n }\n\n node.children.unshift(strut); // Next, prevent vertical misplacement when next to something tall.\n // This code resolves issue #1234\n\n node = buildCommon.makeSpan(["thinbox"], [node], options);\n return buildCommon.makeSpan(["mord", "vbox"], [node], options);\n },\n mathmlBuilder: (group, options) => {\n // mathllap, mathrlap, mathclap\n const node = new mathMLTree.MathNode("mpadded", [buildMathML_buildGroup(group.body, options)]);\n\n if (group.alignment !== "rlap") {\n const offset = group.alignment === "llap" ? "-1" : "-0.5";\n node.setAttribute("lspace", offset + "width");\n }\n\n node.setAttribute("width", "0px");\n return node;\n }\n});\n;// CONCATENATED MODULE: ./src/functions/math.js\n\n // Switching from text mode back to math mode\n\ndefineFunction({\n type: "styling",\n names: ["\\\\(", "$"],\n props: {\n numArgs: 0,\n allowedInText: true,\n allowedInMath: false\n },\n\n handler(_ref, args) {\n let {\n funcName,\n parser\n } = _ref;\n const outerMode = parser.mode;\n parser.switchMode("math");\n const close = funcName === "\\\\(" ? "\\\\)" : "$";\n const body = parser.parseExpression(false, close);\n parser.expect(close);\n parser.switchMode(outerMode);\n return {\n type: "styling",\n mode: parser.mode,\n style: "text",\n body\n };\n }\n\n}); // Check for extra closing math delimiters\n\ndefineFunction({\n type: "text",\n // Doesn\'t matter what this is.\n names: ["\\\\)", "\\\\]"],\n props: {\n numArgs: 0,\n allowedInText: true,\n allowedInMath: false\n },\n\n handler(context, args) {\n throw new src_ParseError("Mismatched " + context.funcName);\n }\n\n});\n;// CONCATENATED MODULE: ./src/functions/mathchoice.js\n\n\n\n\n\n\nconst chooseMathStyle = (group, options) => {\n switch (options.style.size) {\n case src_Style.DISPLAY.size:\n return group.display;\n\n case src_Style.TEXT.size:\n return group.text;\n\n case src_Style.SCRIPT.size:\n return group.script;\n\n case src_Style.SCRIPTSCRIPT.size:\n return group.scriptscript;\n\n default:\n return group.text;\n }\n};\n\ndefineFunction({\n type: "mathchoice",\n names: ["\\\\mathchoice"],\n props: {\n numArgs: 4,\n primitive: true\n },\n handler: (_ref, args) => {\n let {\n parser\n } = _ref;\n return {\n type: "mathchoice",\n mode: parser.mode,\n display: ordargument(args[0]),\n text: ordargument(args[1]),\n script: ordargument(args[2]),\n scriptscript: ordargument(args[3])\n };\n },\n htmlBuilder: (group, options) => {\n const body = chooseMathStyle(group, options);\n const elements = buildExpression(body, options, false);\n return buildCommon.makeFragment(elements);\n },\n mathmlBuilder: (group, options) => {\n const body = chooseMathStyle(group, options);\n return buildExpressionRow(body, options);\n }\n});\n;// CONCATENATED MODULE: ./src/functions/utils/assembleSupSub.js\n\n\n\n // For an operator with limits, assemble the base, sup, and sub into a span.\n\nconst assembleSupSub = (base, supGroup, subGroup, options, style, slant, baseShift) => {\n base = buildCommon.makeSpan([], [base]);\n const subIsSingleCharacter = subGroup && utils.isCharacterBox(subGroup);\n let sub;\n let sup; // We manually have to handle the superscripts and subscripts. This,\n // aside from the kern calculations, is copied from supsub.\n\n if (supGroup) {\n const elem = buildGroup(supGroup, options.havingStyle(style.sup()), options);\n sup = {\n elem,\n kern: Math.max(options.fontMetrics().bigOpSpacing1, options.fontMetrics().bigOpSpacing3 - elem.depth)\n };\n }\n\n if (subGroup) {\n const elem = buildGroup(subGroup, options.havingStyle(style.sub()), options);\n sub = {\n elem,\n kern: Math.max(options.fontMetrics().bigOpSpacing2, options.fontMetrics().bigOpSpacing4 - elem.height)\n };\n } // Build the final group as a vlist of the possible subscript, base,\n // and possible superscript.\n\n\n let finalGroup;\n\n if (sup && sub) {\n const bottom = options.fontMetrics().bigOpSpacing5 + sub.elem.height + sub.elem.depth + sub.kern + base.depth + baseShift;\n finalGroup = buildCommon.makeVList({\n positionType: "bottom",\n positionData: bottom,\n children: [{\n type: "kern",\n size: options.fontMetrics().bigOpSpacing5\n }, {\n type: "elem",\n elem: sub.elem,\n marginLeft: makeEm(-slant)\n }, {\n type: "kern",\n size: sub.kern\n }, {\n type: "elem",\n elem: base\n }, {\n type: "kern",\n size: sup.kern\n }, {\n type: "elem",\n elem: sup.elem,\n marginLeft: makeEm(slant)\n }, {\n type: "kern",\n size: options.fontMetrics().bigOpSpacing5\n }]\n }, options);\n } else if (sub) {\n const top = base.height - baseShift; // Shift the limits by the slant of the symbol. Note\n // that we are supposed to shift the limits by 1/2 of the slant,\n // but since we are centering the limits adding a full slant of\n // margin will shift by 1/2 that.\n\n finalGroup = buildCommon.makeVList({\n positionType: "top",\n positionData: top,\n children: [{\n type: "kern",\n size: options.fontMetrics().bigOpSpacing5\n }, {\n type: "elem",\n elem: sub.elem,\n marginLeft: makeEm(-slant)\n }, {\n type: "kern",\n size: sub.kern\n }, {\n type: "elem",\n elem: base\n }]\n }, options);\n } else if (sup) {\n const bottom = base.depth + baseShift;\n finalGroup = buildCommon.makeVList({\n positionType: "bottom",\n positionData: bottom,\n children: [{\n type: "elem",\n elem: base\n }, {\n type: "kern",\n size: sup.kern\n }, {\n type: "elem",\n elem: sup.elem,\n marginLeft: makeEm(slant)\n }, {\n type: "kern",\n size: options.fontMetrics().bigOpSpacing5\n }]\n }, options);\n } else {\n // This case probably shouldn\'t occur (this would mean the\n // supsub was sending us a group with no superscript or\n // subscript) but be safe.\n return base;\n }\n\n const parts = [finalGroup];\n\n if (sub && slant !== 0 && !subIsSingleCharacter) {\n // A negative margin-left was applied to the lower limit.\n // Avoid an overlap by placing a spacer on the left on the group.\n const spacer = buildCommon.makeSpan(["mspace"], [], options);\n spacer.style.marginRight = makeEm(slant);\n parts.unshift(spacer);\n }\n\n return buildCommon.makeSpan(["mop", "op-limits"], parts, options);\n};\n;// CONCATENATED MODULE: ./src/functions/op.js\n// Limits, symbols\n\n\n\n\n\n\n\n\n\n\n\n// Most operators have a large successor symbol, but these don\'t.\nconst noSuccessor = ["\\\\smallint"]; // NOTE: Unlike most `htmlBuilder`s, this one handles not only "op", but also\n// "supsub" since some of them (like \\int) can affect super/subscripting.\n\nconst op_htmlBuilder = (grp, options) => {\n // Operators are handled in the TeXbook pg. 443-444, rule 13(a).\n let supGroup;\n let subGroup;\n let hasLimits = false;\n let group;\n\n if (grp.type === "supsub") {\n // If we have limits, supsub will pass us its group to handle. Pull\n // out the superscript and subscript and set the group to the op in\n // its base.\n supGroup = grp.sup;\n subGroup = grp.sub;\n group = assertNodeType(grp.base, "op");\n hasLimits = true;\n } else {\n group = assertNodeType(grp, "op");\n }\n\n const style = options.style;\n let large = false;\n\n if (style.size === src_Style.DISPLAY.size && group.symbol && !utils.contains(noSuccessor, group.name)) {\n // Most symbol operators get larger in displaystyle (rule 13)\n large = true;\n }\n\n let base;\n\n if (group.symbol) {\n // If this is a symbol, create the symbol.\n const fontName = large ? "Size2-Regular" : "Size1-Regular";\n let stash = "";\n\n if (group.name === "\\\\oiint" || group.name === "\\\\oiiint") {\n // No font glyphs yet, so use a glyph w/o the oval.\n // TODO: When font glyphs are available, delete this code.\n stash = group.name.slice(1);\n group.name = stash === "oiint" ? "\\\\iint" : "\\\\iiint";\n }\n\n base = buildCommon.makeSymbol(group.name, fontName, "math", options, ["mop", "op-symbol", large ? "large-op" : "small-op"]);\n\n if (stash.length > 0) {\n // We\'re in \\oiint or \\oiiint. Overlay the oval.\n // TODO: When font glyphs are available, delete this code.\n const italic = base.italic;\n const oval = buildCommon.staticSvg(stash + "Size" + (large ? "2" : "1"), options);\n base = buildCommon.makeVList({\n positionType: "individualShift",\n children: [{\n type: "elem",\n elem: base,\n shift: 0\n }, {\n type: "elem",\n elem: oval,\n shift: large ? 0.08 : 0\n }]\n }, options);\n group.name = "\\\\" + stash;\n base.classes.unshift("mop"); // $FlowFixMe\n\n base.italic = italic;\n }\n } else if (group.body) {\n // If this is a list, compose that list.\n const inner = buildExpression(group.body, options, true);\n\n if (inner.length === 1 && inner[0] instanceof SymbolNode) {\n base = inner[0];\n base.classes[0] = "mop"; // replace old mclass\n } else {\n base = buildCommon.makeSpan(["mop"], inner, options);\n }\n } else {\n // Otherwise, this is a text operator. Build the text from the\n // operator\'s name.\n const output = [];\n\n for (let i = 1; i < group.name.length; i++) {\n output.push(buildCommon.mathsym(group.name[i], group.mode, options));\n }\n\n base = buildCommon.makeSpan(["mop"], output, options);\n } // If content of op is a single symbol, shift it vertically.\n\n\n let baseShift = 0;\n let slant = 0;\n\n if ((base instanceof SymbolNode || group.name === "\\\\oiint" || group.name === "\\\\oiiint") && !group.suppressBaseShift) {\n // We suppress the shift of the base of \\overset and \\underset. Otherwise,\n // shift the symbol so its center lies on the axis (rule 13). It\n // appears that our fonts have the centers of the symbols already\n // almost on the axis, so these numbers are very small. Note we\n // don\'t actually apply this here, but instead it is used either in\n // the vlist creation or separately when there are no limits.\n baseShift = (base.height - base.depth) / 2 - options.fontMetrics().axisHeight; // The slant of the symbol is just its italic correction.\n // $FlowFixMe\n\n slant = base.italic;\n }\n\n if (hasLimits) {\n return assembleSupSub(base, supGroup, subGroup, options, style, slant, baseShift);\n } else {\n if (baseShift) {\n base.style.position = "relative";\n base.style.top = makeEm(baseShift);\n }\n\n return base;\n }\n};\n\nconst op_mathmlBuilder = (group, options) => {\n let node;\n\n if (group.symbol) {\n // This is a symbol. Just add the symbol.\n node = new MathNode("mo", [makeText(group.name, group.mode)]);\n\n if (utils.contains(noSuccessor, group.name)) {\n node.setAttribute("largeop", "false");\n }\n } else if (group.body) {\n // This is an operator with children. Add them.\n node = new MathNode("mo", buildMathML_buildExpression(group.body, options));\n } else {\n // This is a text operator. Add all of the characters from the\n // operator\'s name.\n node = new MathNode("mi", [new TextNode(group.name.slice(1))]); // Append an .\n // ref: https://www.w3.org/TR/REC-MathML/chap3_2.html#sec3.2.4\n\n const operator = new MathNode("mo", [makeText("\\u2061", "text")]);\n\n if (group.parentIsSupSub) {\n node = new MathNode("mrow", [node, operator]);\n } else {\n node = newDocumentFragment([node, operator]);\n }\n }\n\n return node;\n};\n\nconst singleCharBigOps = {\n "\\u220F": "\\\\prod",\n "\\u2210": "\\\\coprod",\n "\\u2211": "\\\\sum",\n "\\u22c0": "\\\\bigwedge",\n "\\u22c1": "\\\\bigvee",\n "\\u22c2": "\\\\bigcap",\n "\\u22c3": "\\\\bigcup",\n "\\u2a00": "\\\\bigodot",\n "\\u2a01": "\\\\bigoplus",\n "\\u2a02": "\\\\bigotimes",\n "\\u2a04": "\\\\biguplus",\n "\\u2a06": "\\\\bigsqcup"\n};\ndefineFunction({\n type: "op",\n names: ["\\\\coprod", "\\\\bigvee", "\\\\bigwedge", "\\\\biguplus", "\\\\bigcap", "\\\\bigcup", "\\\\intop", "\\\\prod", "\\\\sum", "\\\\bigotimes", "\\\\bigoplus", "\\\\bigodot", "\\\\bigsqcup", "\\\\smallint", "\\u220F", "\\u2210", "\\u2211", "\\u22c0", "\\u22c1", "\\u22c2", "\\u22c3", "\\u2a00", "\\u2a01", "\\u2a02", "\\u2a04", "\\u2a06"],\n props: {\n numArgs: 0\n },\n handler: (_ref, args) => {\n let {\n parser,\n funcName\n } = _ref;\n let fName = funcName;\n\n if (fName.length === 1) {\n fName = singleCharBigOps[fName];\n }\n\n return {\n type: "op",\n mode: parser.mode,\n limits: true,\n parentIsSupSub: false,\n symbol: true,\n name: fName\n };\n },\n htmlBuilder: op_htmlBuilder,\n mathmlBuilder: op_mathmlBuilder\n}); // Note: calling defineFunction with a type that\'s already been defined only\n// works because the same htmlBuilder and mathmlBuilder are being used.\n\ndefineFunction({\n type: "op",\n names: ["\\\\mathop"],\n props: {\n numArgs: 1,\n primitive: true\n },\n handler: (_ref2, args) => {\n let {\n parser\n } = _ref2;\n const body = args[0];\n return {\n type: "op",\n mode: parser.mode,\n limits: false,\n parentIsSupSub: false,\n symbol: false,\n body: ordargument(body)\n };\n },\n htmlBuilder: op_htmlBuilder,\n mathmlBuilder: op_mathmlBuilder\n}); // There are 2 flags for operators; whether they produce limits in\n// displaystyle, and whether they are symbols and should grow in\n// displaystyle. These four groups cover the four possible choices.\n\nconst singleCharIntegrals = {\n "\\u222b": "\\\\int",\n "\\u222c": "\\\\iint",\n "\\u222d": "\\\\iiint",\n "\\u222e": "\\\\oint",\n "\\u222f": "\\\\oiint",\n "\\u2230": "\\\\oiiint"\n}; // No limits, not symbols\n\ndefineFunction({\n type: "op",\n names: ["\\\\arcsin", "\\\\arccos", "\\\\arctan", "\\\\arctg", "\\\\arcctg", "\\\\arg", "\\\\ch", "\\\\cos", "\\\\cosec", "\\\\cosh", "\\\\cot", "\\\\cotg", "\\\\coth", "\\\\csc", "\\\\ctg", "\\\\cth", "\\\\deg", "\\\\dim", "\\\\exp", "\\\\hom", "\\\\ker", "\\\\lg", "\\\\ln", "\\\\log", "\\\\sec", "\\\\sin", "\\\\sinh", "\\\\sh", "\\\\tan", "\\\\tanh", "\\\\tg", "\\\\th"],\n props: {\n numArgs: 0\n },\n\n handler(_ref3) {\n let {\n parser,\n funcName\n } = _ref3;\n return {\n type: "op",\n mode: parser.mode,\n limits: false,\n parentIsSupSub: false,\n symbol: false,\n name: funcName\n };\n },\n\n htmlBuilder: op_htmlBuilder,\n mathmlBuilder: op_mathmlBuilder\n}); // Limits, not symbols\n\ndefineFunction({\n type: "op",\n names: ["\\\\det", "\\\\gcd", "\\\\inf", "\\\\lim", "\\\\max", "\\\\min", "\\\\Pr", "\\\\sup"],\n props: {\n numArgs: 0\n },\n\n handler(_ref4) {\n let {\n parser,\n funcName\n } = _ref4;\n return {\n type: "op",\n mode: parser.mode,\n limits: true,\n parentIsSupSub: false,\n symbol: false,\n name: funcName\n };\n },\n\n htmlBuilder: op_htmlBuilder,\n mathmlBuilder: op_mathmlBuilder\n}); // No limits, symbols\n\ndefineFunction({\n type: "op",\n names: ["\\\\int", "\\\\iint", "\\\\iiint", "\\\\oint", "\\\\oiint", "\\\\oiiint", "\\u222b", "\\u222c", "\\u222d", "\\u222e", "\\u222f", "\\u2230"],\n props: {\n numArgs: 0\n },\n\n handler(_ref5) {\n let {\n parser,\n funcName\n } = _ref5;\n let fName = funcName;\n\n if (fName.length === 1) {\n fName = singleCharIntegrals[fName];\n }\n\n return {\n type: "op",\n mode: parser.mode,\n limits: false,\n parentIsSupSub: false,\n symbol: true,\n name: fName\n };\n },\n\n htmlBuilder: op_htmlBuilder,\n mathmlBuilder: op_mathmlBuilder\n});\n;// CONCATENATED MODULE: ./src/functions/operatorname.js\n\n\n\n\n\n\n\n\n\n// NOTE: Unlike most `htmlBuilder`s, this one handles not only\n// "operatorname", but also "supsub" since \\operatorname* can\n// affect super/subscripting.\nconst operatorname_htmlBuilder = (grp, options) => {\n // Operators are handled in the TeXbook pg. 443-444, rule 13(a).\n let supGroup;\n let subGroup;\n let hasLimits = false;\n let group;\n\n if (grp.type === "supsub") {\n // If we have limits, supsub will pass us its group to handle. Pull\n // out the superscript and subscript and set the group to the op in\n // its base.\n supGroup = grp.sup;\n subGroup = grp.sub;\n group = assertNodeType(grp.base, "operatorname");\n hasLimits = true;\n } else {\n group = assertNodeType(grp, "operatorname");\n }\n\n let base;\n\n if (group.body.length > 0) {\n const body = group.body.map(child => {\n // $FlowFixMe: Check if the node has a string `text` property.\n const childText = child.text;\n\n if (typeof childText === "string") {\n return {\n type: "textord",\n mode: child.mode,\n text: childText\n };\n } else {\n return child;\n }\n }); // Consolidate function names into symbol characters.\n\n const expression = buildExpression(body, options.withFont("mathrm"), true);\n\n for (let i = 0; i < expression.length; i++) {\n const child = expression[i];\n\n if (child instanceof SymbolNode) {\n // Per amsopn package,\n // change minus to hyphen and \\ast to asterisk\n child.text = child.text.replace(/\\u2212/, "-").replace(/\\u2217/, "*");\n }\n }\n\n base = buildCommon.makeSpan(["mop"], expression, options);\n } else {\n base = buildCommon.makeSpan(["mop"], [], options);\n }\n\n if (hasLimits) {\n return assembleSupSub(base, supGroup, subGroup, options, options.style, 0, 0);\n } else {\n return base;\n }\n};\n\nconst operatorname_mathmlBuilder = (group, options) => {\n // The steps taken here are similar to the html version.\n let expression = buildMathML_buildExpression(group.body, options.withFont("mathrm")); // Is expression a string or has it something like a fraction?\n\n let isAllString = true; // default\n\n for (let i = 0; i < expression.length; i++) {\n const node = expression[i];\n\n if (node instanceof mathMLTree.SpaceNode) {// Do nothing\n } else if (node instanceof mathMLTree.MathNode) {\n switch (node.type) {\n case "mi":\n case "mn":\n case "ms":\n case "mspace":\n case "mtext":\n break;\n // Do nothing yet.\n\n case "mo":\n {\n const child = node.children[0];\n\n if (node.children.length === 1 && child instanceof mathMLTree.TextNode) {\n child.text = child.text.replace(/\\u2212/, "-").replace(/\\u2217/, "*");\n } else {\n isAllString = false;\n }\n\n break;\n }\n\n default:\n isAllString = false;\n }\n } else {\n isAllString = false;\n }\n }\n\n if (isAllString) {\n // Write a single TextNode instead of multiple nested tags.\n const word = expression.map(node => node.toText()).join("");\n expression = [new mathMLTree.TextNode(word)];\n }\n\n const identifier = new mathMLTree.MathNode("mi", expression);\n identifier.setAttribute("mathvariant", "normal"); // \\u2061 is the same as ⁡\n // ref: https://www.w3schools.com/charsets/ref_html_entities_a.asp\n\n const operator = new mathMLTree.MathNode("mo", [makeText("\\u2061", "text")]);\n\n if (group.parentIsSupSub) {\n return new mathMLTree.MathNode("mrow", [identifier, operator]);\n } else {\n return mathMLTree.newDocumentFragment([identifier, operator]);\n }\n}; // \\operatorname\n// amsopn.dtx: \\mathop{#1\\kern\\z@\\operator@font#3}\\newmcodes@\n\n\ndefineFunction({\n type: "operatorname",\n names: ["\\\\operatorname@", "\\\\operatornamewithlimits"],\n props: {\n numArgs: 1\n },\n handler: (_ref, args) => {\n let {\n parser,\n funcName\n } = _ref;\n const body = args[0];\n return {\n type: "operatorname",\n mode: parser.mode,\n body: ordargument(body),\n alwaysHandleSupSub: funcName === "\\\\operatornamewithlimits",\n limits: false,\n parentIsSupSub: false\n };\n },\n htmlBuilder: operatorname_htmlBuilder,\n mathmlBuilder: operatorname_mathmlBuilder\n});\ndefineMacro("\\\\operatorname", "\\\\@ifstar\\\\operatornamewithlimits\\\\operatorname@");\n;// CONCATENATED MODULE: ./src/functions/ordgroup.js\n\n\n\n\ndefineFunctionBuilders({\n type: "ordgroup",\n\n htmlBuilder(group, options) {\n if (group.semisimple) {\n return buildCommon.makeFragment(buildExpression(group.body, options, false));\n }\n\n return buildCommon.makeSpan(["mord"], buildExpression(group.body, options, true), options);\n },\n\n mathmlBuilder(group, options) {\n return buildExpressionRow(group.body, options, true);\n }\n\n});\n;// CONCATENATED MODULE: ./src/functions/overline.js\n\n\n\n\n\ndefineFunction({\n type: "overline",\n names: ["\\\\overline"],\n props: {\n numArgs: 1\n },\n\n handler(_ref, args) {\n let {\n parser\n } = _ref;\n const body = args[0];\n return {\n type: "overline",\n mode: parser.mode,\n body\n };\n },\n\n htmlBuilder(group, options) {\n // Overlines are handled in the TeXbook pg 443, Rule 9.\n // Build the inner group in the cramped style.\n const innerGroup = buildGroup(group.body, options.havingCrampedStyle()); // Create the line above the body\n\n const line = buildCommon.makeLineSpan("overline-line", options); // Generate the vlist, with the appropriate kerns\n\n const defaultRuleThickness = options.fontMetrics().defaultRuleThickness;\n const vlist = buildCommon.makeVList({\n positionType: "firstBaseline",\n children: [{\n type: "elem",\n elem: innerGroup\n }, {\n type: "kern",\n size: 3 * defaultRuleThickness\n }, {\n type: "elem",\n elem: line\n }, {\n type: "kern",\n size: defaultRuleThickness\n }]\n }, options);\n return buildCommon.makeSpan(["mord", "overline"], [vlist], options);\n },\n\n mathmlBuilder(group, options) {\n const operator = new mathMLTree.MathNode("mo", [new mathMLTree.TextNode("\\u203e")]);\n operator.setAttribute("stretchy", "true");\n const node = new mathMLTree.MathNode("mover", [buildMathML_buildGroup(group.body, options), operator]);\n node.setAttribute("accent", "true");\n return node;\n }\n\n});\n;// CONCATENATED MODULE: ./src/functions/phantom.js\n\n\n\n\n\ndefineFunction({\n type: "phantom",\n names: ["\\\\phantom"],\n props: {\n numArgs: 1,\n allowedInText: true\n },\n handler: (_ref, args) => {\n let {\n parser\n } = _ref;\n const body = args[0];\n return {\n type: "phantom",\n mode: parser.mode,\n body: ordargument(body)\n };\n },\n htmlBuilder: (group, options) => {\n const elements = buildExpression(group.body, options.withPhantom(), false); // \\phantom isn\'t supposed to affect the elements it contains.\n // See "color" for more details.\n\n return buildCommon.makeFragment(elements);\n },\n mathmlBuilder: (group, options) => {\n const inner = buildMathML_buildExpression(group.body, options);\n return new mathMLTree.MathNode("mphantom", inner);\n }\n});\ndefineFunction({\n type: "hphantom",\n names: ["\\\\hphantom"],\n props: {\n numArgs: 1,\n allowedInText: true\n },\n handler: (_ref2, args) => {\n let {\n parser\n } = _ref2;\n const body = args[0];\n return {\n type: "hphantom",\n mode: parser.mode,\n body\n };\n },\n htmlBuilder: (group, options) => {\n let node = buildCommon.makeSpan([], [buildGroup(group.body, options.withPhantom())]);\n node.height = 0;\n node.depth = 0;\n\n if (node.children) {\n for (let i = 0; i < node.children.length; i++) {\n node.children[i].height = 0;\n node.children[i].depth = 0;\n }\n } // See smash for comment re: use of makeVList\n\n\n node = buildCommon.makeVList({\n positionType: "firstBaseline",\n children: [{\n type: "elem",\n elem: node\n }]\n }, options); // For spacing, TeX treats \\smash as a math group (same spacing as ord).\n\n return buildCommon.makeSpan(["mord"], [node], options);\n },\n mathmlBuilder: (group, options) => {\n const inner = buildMathML_buildExpression(ordargument(group.body), options);\n const phantom = new mathMLTree.MathNode("mphantom", inner);\n const node = new mathMLTree.MathNode("mpadded", [phantom]);\n node.setAttribute("height", "0px");\n node.setAttribute("depth", "0px");\n return node;\n }\n});\ndefineFunction({\n type: "vphantom",\n names: ["\\\\vphantom"],\n props: {\n numArgs: 1,\n allowedInText: true\n },\n handler: (_ref3, args) => {\n let {\n parser\n } = _ref3;\n const body = args[0];\n return {\n type: "vphantom",\n mode: parser.mode,\n body\n };\n },\n htmlBuilder: (group, options) => {\n const inner = buildCommon.makeSpan(["inner"], [buildGroup(group.body, options.withPhantom())]);\n const fix = buildCommon.makeSpan(["fix"], []);\n return buildCommon.makeSpan(["mord", "rlap"], [inner, fix], options);\n },\n mathmlBuilder: (group, options) => {\n const inner = buildMathML_buildExpression(ordargument(group.body), options);\n const phantom = new mathMLTree.MathNode("mphantom", inner);\n const node = new mathMLTree.MathNode("mpadded", [phantom]);\n node.setAttribute("width", "0px");\n return node;\n }\n});\n;// CONCATENATED MODULE: ./src/functions/raisebox.js\n\n\n\n\n\n\n // Box manipulation\n\ndefineFunction({\n type: "raisebox",\n names: ["\\\\raisebox"],\n props: {\n numArgs: 2,\n argTypes: ["size", "hbox"],\n allowedInText: true\n },\n\n handler(_ref, args) {\n let {\n parser\n } = _ref;\n const amount = assertNodeType(args[0], "size").value;\n const body = args[1];\n return {\n type: "raisebox",\n mode: parser.mode,\n dy: amount,\n body\n };\n },\n\n htmlBuilder(group, options) {\n const body = buildGroup(group.body, options);\n const dy = calculateSize(group.dy, options);\n return buildCommon.makeVList({\n positionType: "shift",\n positionData: -dy,\n children: [{\n type: "elem",\n elem: body\n }]\n }, options);\n },\n\n mathmlBuilder(group, options) {\n const node = new mathMLTree.MathNode("mpadded", [buildMathML_buildGroup(group.body, options)]);\n const dy = group.dy.number + group.dy.unit;\n node.setAttribute("voffset", dy);\n return node;\n }\n\n});\n;// CONCATENATED MODULE: ./src/functions/relax.js\n\ndefineFunction({\n type: "internal",\n names: ["\\\\relax"],\n props: {\n numArgs: 0,\n allowedInText: true,\n allowedInArgument: true\n },\n\n handler(_ref) {\n let {\n parser\n } = _ref;\n return {\n type: "internal",\n mode: parser.mode\n };\n }\n\n});\n;// CONCATENATED MODULE: ./src/functions/rule.js\n\n\n\n\n\ndefineFunction({\n type: "rule",\n names: ["\\\\rule"],\n props: {\n numArgs: 2,\n numOptionalArgs: 1,\n allowedInText: true,\n allowedInMath: true,\n argTypes: ["size", "size", "size"]\n },\n\n handler(_ref, args, optArgs) {\n let {\n parser\n } = _ref;\n const shift = optArgs[0];\n const width = assertNodeType(args[0], "size");\n const height = assertNodeType(args[1], "size");\n return {\n type: "rule",\n mode: parser.mode,\n shift: shift && assertNodeType(shift, "size").value,\n width: width.value,\n height: height.value\n };\n },\n\n htmlBuilder(group, options) {\n // Make an empty span for the rule\n const rule = buildCommon.makeSpan(["mord", "rule"], [], options); // Calculate the shift, width, and height of the rule, and account for units\n\n const width = calculateSize(group.width, options);\n const height = calculateSize(group.height, options);\n const shift = group.shift ? calculateSize(group.shift, options) : 0; // Style the rule to the right size\n\n rule.style.borderRightWidth = makeEm(width);\n rule.style.borderTopWidth = makeEm(height);\n rule.style.bottom = makeEm(shift); // Record the height and width\n\n rule.width = width;\n rule.height = height + shift;\n rule.depth = -shift; // Font size is the number large enough that the browser will\n // reserve at least `absHeight` space above the baseline.\n // The 1.125 factor was empirically determined\n\n rule.maxFontSize = height * 1.125 * options.sizeMultiplier;\n return rule;\n },\n\n mathmlBuilder(group, options) {\n const width = calculateSize(group.width, options);\n const height = calculateSize(group.height, options);\n const shift = group.shift ? calculateSize(group.shift, options) : 0;\n const color = options.color && options.getColor() || "black";\n const rule = new mathMLTree.MathNode("mspace");\n rule.setAttribute("mathbackground", color);\n rule.setAttribute("width", makeEm(width));\n rule.setAttribute("height", makeEm(height));\n const wrapper = new mathMLTree.MathNode("mpadded", [rule]);\n\n if (shift >= 0) {\n wrapper.setAttribute("height", makeEm(shift));\n } else {\n wrapper.setAttribute("height", makeEm(shift));\n wrapper.setAttribute("depth", makeEm(-shift));\n }\n\n wrapper.setAttribute("voffset", makeEm(shift));\n return wrapper;\n }\n\n});\n;// CONCATENATED MODULE: ./src/functions/sizing.js\n\n\n\n\n\n\nfunction sizingGroup(value, options, baseOptions) {\n const inner = buildExpression(value, options, false);\n const multiplier = options.sizeMultiplier / baseOptions.sizeMultiplier; // Add size-resetting classes to the inner list and set maxFontSize\n // manually. Handle nested size changes.\n\n for (let i = 0; i < inner.length; i++) {\n const pos = inner[i].classes.indexOf("sizing");\n\n if (pos < 0) {\n Array.prototype.push.apply(inner[i].classes, options.sizingClasses(baseOptions));\n } else if (inner[i].classes[pos + 1] === "reset-size" + options.size) {\n // This is a nested size change: e.g., inner[i] is the "b" in\n // `\\Huge a \\small b`. Override the old size (the `reset-` class)\n // but not the new size.\n inner[i].classes[pos + 1] = "reset-size" + baseOptions.size;\n }\n\n inner[i].height *= multiplier;\n inner[i].depth *= multiplier;\n }\n\n return buildCommon.makeFragment(inner);\n}\nconst sizeFuncs = ["\\\\tiny", "\\\\sixptsize", "\\\\scriptsize", "\\\\footnotesize", "\\\\small", "\\\\normalsize", "\\\\large", "\\\\Large", "\\\\LARGE", "\\\\huge", "\\\\Huge"];\nconst sizing_htmlBuilder = (group, options) => {\n // Handle sizing operators like \\Huge. Real TeX doesn\'t actually allow\n // these functions inside of math expressions, so we do some special\n // handling.\n const newOptions = options.havingSize(group.size);\n return sizingGroup(group.body, newOptions, options);\n};\ndefineFunction({\n type: "sizing",\n names: sizeFuncs,\n props: {\n numArgs: 0,\n allowedInText: true\n },\n handler: (_ref, args) => {\n let {\n breakOnTokenText,\n funcName,\n parser\n } = _ref;\n const body = parser.parseExpression(false, breakOnTokenText);\n return {\n type: "sizing",\n mode: parser.mode,\n // Figure out what size to use based on the list of functions above\n size: sizeFuncs.indexOf(funcName) + 1,\n body\n };\n },\n htmlBuilder: sizing_htmlBuilder,\n mathmlBuilder: (group, options) => {\n const newOptions = options.havingSize(group.size);\n const inner = buildMathML_buildExpression(group.body, newOptions);\n const node = new mathMLTree.MathNode("mstyle", inner); // TODO(emily): This doesn\'t produce the correct size for nested size\n // changes, because we don\'t keep state of what style we\'re currently\n // in, so we can\'t reset the size to normal before changing it. Now\n // that we\'re passing an options parameter we should be able to fix\n // this.\n\n node.setAttribute("mathsize", makeEm(newOptions.sizeMultiplier));\n return node;\n }\n});\n;// CONCATENATED MODULE: ./src/functions/smash.js\n// smash, with optional [tb], as in AMS\n\n\n\n\n\n\ndefineFunction({\n type: "smash",\n names: ["\\\\smash"],\n props: {\n numArgs: 1,\n numOptionalArgs: 1,\n allowedInText: true\n },\n handler: (_ref, args, optArgs) => {\n let {\n parser\n } = _ref;\n let smashHeight = false;\n let smashDepth = false;\n const tbArg = optArgs[0] && assertNodeType(optArgs[0], "ordgroup");\n\n if (tbArg) {\n // Optional [tb] argument is engaged.\n // ref: amsmath: \\renewcommand{\\smash}[1][tb]{%\n // def\\mb@t{\\ht}\\def\\mb@b{\\dp}\\def\\mb@tb{\\ht\\z@\\z@\\dp}%\n let letter = "";\n\n for (let i = 0; i < tbArg.body.length; ++i) {\n const node = tbArg.body[i]; // $FlowFixMe: Not every node type has a `text` property.\n\n letter = node.text;\n\n if (letter === "t") {\n smashHeight = true;\n } else if (letter === "b") {\n smashDepth = true;\n } else {\n smashHeight = false;\n smashDepth = false;\n break;\n }\n }\n } else {\n smashHeight = true;\n smashDepth = true;\n }\n\n const body = args[0];\n return {\n type: "smash",\n mode: parser.mode,\n body,\n smashHeight,\n smashDepth\n };\n },\n htmlBuilder: (group, options) => {\n const node = buildCommon.makeSpan([], [buildGroup(group.body, options)]);\n\n if (!group.smashHeight && !group.smashDepth) {\n return node;\n }\n\n if (group.smashHeight) {\n node.height = 0; // In order to influence makeVList, we have to reset the children.\n\n if (node.children) {\n for (let i = 0; i < node.children.length; i++) {\n node.children[i].height = 0;\n }\n }\n }\n\n if (group.smashDepth) {\n node.depth = 0;\n\n if (node.children) {\n for (let i = 0; i < node.children.length; i++) {\n node.children[i].depth = 0;\n }\n }\n } // At this point, we\'ve reset the TeX-like height and depth values.\n // But the span still has an HTML line height.\n // makeVList applies "display: table-cell", which prevents the browser\n // from acting on that line height. So we\'ll call makeVList now.\n\n\n const smashedNode = buildCommon.makeVList({\n positionType: "firstBaseline",\n children: [{\n type: "elem",\n elem: node\n }]\n }, options); // For spacing, TeX treats \\hphantom as a math group (same spacing as ord).\n\n return buildCommon.makeSpan(["mord"], [smashedNode], options);\n },\n mathmlBuilder: (group, options) => {\n const node = new mathMLTree.MathNode("mpadded", [buildMathML_buildGroup(group.body, options)]);\n\n if (group.smashHeight) {\n node.setAttribute("height", "0px");\n }\n\n if (group.smashDepth) {\n node.setAttribute("depth", "0px");\n }\n\n return node;\n }\n});\n;// CONCATENATED MODULE: ./src/functions/sqrt.js\n\n\n\n\n\n\n\n\ndefineFunction({\n type: "sqrt",\n names: ["\\\\sqrt"],\n props: {\n numArgs: 1,\n numOptionalArgs: 1\n },\n\n handler(_ref, args, optArgs) {\n let {\n parser\n } = _ref;\n const index = optArgs[0];\n const body = args[0];\n return {\n type: "sqrt",\n mode: parser.mode,\n body,\n index\n };\n },\n\n htmlBuilder(group, options) {\n // Square roots are handled in the TeXbook pg. 443, Rule 11.\n // First, we do the same steps as in overline to build the inner group\n // and line\n let inner = buildGroup(group.body, options.havingCrampedStyle());\n\n if (inner.height === 0) {\n // Render a small surd.\n inner.height = options.fontMetrics().xHeight;\n } // Some groups can return document fragments. Handle those by wrapping\n // them in a span.\n\n\n inner = buildCommon.wrapFragment(inner, options); // Calculate the minimum size for the \\surd delimiter\n\n const metrics = options.fontMetrics();\n const theta = metrics.defaultRuleThickness;\n let phi = theta;\n\n if (options.style.id < src_Style.TEXT.id) {\n phi = options.fontMetrics().xHeight;\n } // Calculate the clearance between the body and line\n\n\n let lineClearance = theta + phi / 4;\n const minDelimiterHeight = inner.height + inner.depth + lineClearance + theta; // Create a sqrt SVG of the required minimum size\n\n const {\n span: img,\n ruleWidth,\n advanceWidth\n } = delimiter.sqrtImage(minDelimiterHeight, options);\n const delimDepth = img.height - ruleWidth; // Adjust the clearance based on the delimiter size\n\n if (delimDepth > inner.height + inner.depth + lineClearance) {\n lineClearance = (lineClearance + delimDepth - inner.height - inner.depth) / 2;\n } // Shift the sqrt image\n\n\n const imgShift = img.height - inner.height - lineClearance - ruleWidth;\n inner.style.paddingLeft = makeEm(advanceWidth); // Overlay the image and the argument.\n\n const body = buildCommon.makeVList({\n positionType: "firstBaseline",\n children: [{\n type: "elem",\n elem: inner,\n wrapperClasses: ["svg-align"]\n }, {\n type: "kern",\n size: -(inner.height + imgShift)\n }, {\n type: "elem",\n elem: img\n }, {\n type: "kern",\n size: ruleWidth\n }]\n }, options);\n\n if (!group.index) {\n return buildCommon.makeSpan(["mord", "sqrt"], [body], options);\n } else {\n // Handle the optional root index\n // The index is always in scriptscript style\n const newOptions = options.havingStyle(src_Style.SCRIPTSCRIPT);\n const rootm = buildGroup(group.index, newOptions, options); // The amount the index is shifted by. This is taken from the TeX\n // source, in the definition of `\\r@@t`.\n\n const toShift = 0.6 * (body.height - body.depth); // Build a VList with the superscript shifted up correctly\n\n const rootVList = buildCommon.makeVList({\n positionType: "shift",\n positionData: -toShift,\n children: [{\n type: "elem",\n elem: rootm\n }]\n }, options); // Add a class surrounding it so we can add on the appropriate\n // kerning\n\n const rootVListWrap = buildCommon.makeSpan(["root"], [rootVList]);\n return buildCommon.makeSpan(["mord", "sqrt"], [rootVListWrap, body], options);\n }\n },\n\n mathmlBuilder(group, options) {\n const {\n body,\n index\n } = group;\n return index ? new mathMLTree.MathNode("mroot", [buildMathML_buildGroup(body, options), buildMathML_buildGroup(index, options)]) : new mathMLTree.MathNode("msqrt", [buildMathML_buildGroup(body, options)]);\n }\n\n});\n;// CONCATENATED MODULE: ./src/functions/styling.js\n\n\n\n\n\nconst styling_styleMap = {\n "display": src_Style.DISPLAY,\n "text": src_Style.TEXT,\n "script": src_Style.SCRIPT,\n "scriptscript": src_Style.SCRIPTSCRIPT\n};\ndefineFunction({\n type: "styling",\n names: ["\\\\displaystyle", "\\\\textstyle", "\\\\scriptstyle", "\\\\scriptscriptstyle"],\n props: {\n numArgs: 0,\n allowedInText: true,\n primitive: true\n },\n\n handler(_ref, args) {\n let {\n breakOnTokenText,\n funcName,\n parser\n } = _ref;\n // parse out the implicit body\n const body = parser.parseExpression(true, breakOnTokenText); // TODO: Refactor to avoid duplicating styleMap in multiple places (e.g.\n // here and in buildHTML and de-dupe the enumeration of all the styles).\n // $FlowFixMe: The names above exactly match the styles.\n\n const style = funcName.slice(1, funcName.length - 5);\n return {\n type: "styling",\n mode: parser.mode,\n // Figure out what style to use by pulling out the style from\n // the function name\n style,\n body\n };\n },\n\n htmlBuilder(group, options) {\n // Style changes are handled in the TeXbook on pg. 442, Rule 3.\n const newStyle = styling_styleMap[group.style];\n const newOptions = options.havingStyle(newStyle).withFont(\'\');\n return sizingGroup(group.body, newOptions, options);\n },\n\n mathmlBuilder(group, options) {\n // Figure out what style we\'re changing to.\n const newStyle = styling_styleMap[group.style];\n const newOptions = options.havingStyle(newStyle);\n const inner = buildMathML_buildExpression(group.body, newOptions);\n const node = new mathMLTree.MathNode("mstyle", inner);\n const styleAttributes = {\n "display": ["0", "true"],\n "text": ["0", "false"],\n "script": ["1", "false"],\n "scriptscript": ["2", "false"]\n };\n const attr = styleAttributes[group.style];\n node.setAttribute("scriptlevel", attr[0]);\n node.setAttribute("displaystyle", attr[1]);\n return node;\n }\n\n});\n;// CONCATENATED MODULE: ./src/functions/supsub.js\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/**\n * Sometimes, groups perform special rules when they have superscripts or\n * subscripts attached to them. This function lets the `supsub` group know that\n * Sometimes, groups perform special rules when they have superscripts or\n * its inner element should handle the superscripts and subscripts instead of\n * handling them itself.\n */\nconst htmlBuilderDelegate = function (group, options) {\n const base = group.base;\n\n if (!base) {\n return null;\n } else if (base.type === "op") {\n // Operators handle supsubs differently when they have limits\n // (e.g. `\\displaystyle\\sum_2^3`)\n const delegate = base.limits && (options.style.size === src_Style.DISPLAY.size || base.alwaysHandleSupSub);\n return delegate ? op_htmlBuilder : null;\n } else if (base.type === "operatorname") {\n const delegate = base.alwaysHandleSupSub && (options.style.size === src_Style.DISPLAY.size || base.limits);\n return delegate ? operatorname_htmlBuilder : null;\n } else if (base.type === "accent") {\n return utils.isCharacterBox(base.base) ? htmlBuilder : null;\n } else if (base.type === "horizBrace") {\n const isSup = !group.sub;\n return isSup === base.isOver ? horizBrace_htmlBuilder : null;\n } else {\n return null;\n }\n}; // Super scripts and subscripts, whose precise placement can depend on other\n// functions that precede them.\n\n\ndefineFunctionBuilders({\n type: "supsub",\n\n htmlBuilder(group, options) {\n // Superscript and subscripts are handled in the TeXbook on page\n // 445-446, rules 18(a-f).\n // Here is where we defer to the inner group if it should handle\n // superscripts and subscripts itself.\n const builderDelegate = htmlBuilderDelegate(group, options);\n\n if (builderDelegate) {\n return builderDelegate(group, options);\n }\n\n const {\n base: valueBase,\n sup: valueSup,\n sub: valueSub\n } = group;\n const base = buildGroup(valueBase, options);\n let supm;\n let subm;\n const metrics = options.fontMetrics(); // Rule 18a\n\n let supShift = 0;\n let subShift = 0;\n const isCharacterBox = valueBase && utils.isCharacterBox(valueBase);\n\n if (valueSup) {\n const newOptions = options.havingStyle(options.style.sup());\n supm = buildGroup(valueSup, newOptions, options);\n\n if (!isCharacterBox) {\n supShift = base.height - newOptions.fontMetrics().supDrop * newOptions.sizeMultiplier / options.sizeMultiplier;\n }\n }\n\n if (valueSub) {\n const newOptions = options.havingStyle(options.style.sub());\n subm = buildGroup(valueSub, newOptions, options);\n\n if (!isCharacterBox) {\n subShift = base.depth + newOptions.fontMetrics().subDrop * newOptions.sizeMultiplier / options.sizeMultiplier;\n }\n } // Rule 18c\n\n\n let minSupShift;\n\n if (options.style === src_Style.DISPLAY) {\n minSupShift = metrics.sup1;\n } else if (options.style.cramped) {\n minSupShift = metrics.sup3;\n } else {\n minSupShift = metrics.sup2;\n } // scriptspace is a font-size-independent size, so scale it\n // appropriately for use as the marginRight.\n\n\n const multiplier = options.sizeMultiplier;\n const marginRight = makeEm(0.5 / metrics.ptPerEm / multiplier);\n let marginLeft = null;\n\n if (subm) {\n // Subscripts shouldn\'t be shifted by the base\'s italic correction.\n // Account for that by shifting the subscript back the appropriate\n // amount. Note we only do this when the base is a single symbol.\n const isOiint = group.base && group.base.type === "op" && group.base.name && (group.base.name === "\\\\oiint" || group.base.name === "\\\\oiiint");\n\n if (base instanceof SymbolNode || isOiint) {\n // $FlowFixMe\n marginLeft = makeEm(-base.italic);\n }\n }\n\n let supsub;\n\n if (supm && subm) {\n supShift = Math.max(supShift, minSupShift, supm.depth + 0.25 * metrics.xHeight);\n subShift = Math.max(subShift, metrics.sub2);\n const ruleWidth = metrics.defaultRuleThickness; // Rule 18e\n\n const maxWidth = 4 * ruleWidth;\n\n if (supShift - supm.depth - (subm.height - subShift) < maxWidth) {\n subShift = maxWidth - (supShift - supm.depth) + subm.height;\n const psi = 0.8 * metrics.xHeight - (supShift - supm.depth);\n\n if (psi > 0) {\n supShift += psi;\n subShift -= psi;\n }\n }\n\n const vlistElem = [{\n type: "elem",\n elem: subm,\n shift: subShift,\n marginRight,\n marginLeft\n }, {\n type: "elem",\n elem: supm,\n shift: -supShift,\n marginRight\n }];\n supsub = buildCommon.makeVList({\n positionType: "individualShift",\n children: vlistElem\n }, options);\n } else if (subm) {\n // Rule 18b\n subShift = Math.max(subShift, metrics.sub1, subm.height - 0.8 * metrics.xHeight);\n const vlistElem = [{\n type: "elem",\n elem: subm,\n marginLeft,\n marginRight\n }];\n supsub = buildCommon.makeVList({\n positionType: "shift",\n positionData: subShift,\n children: vlistElem\n }, options);\n } else if (supm) {\n // Rule 18c, d\n supShift = Math.max(supShift, minSupShift, supm.depth + 0.25 * metrics.xHeight);\n supsub = buildCommon.makeVList({\n positionType: "shift",\n positionData: -supShift,\n children: [{\n type: "elem",\n elem: supm,\n marginRight\n }]\n }, options);\n } else {\n throw new Error("supsub must have either sup or sub.");\n } // Wrap the supsub vlist in a span.msupsub to reset text-align.\n\n\n const mclass = getTypeOfDomTree(base, "right") || "mord";\n return buildCommon.makeSpan([mclass], [base, buildCommon.makeSpan(["msupsub"], [supsub])], options);\n },\n\n mathmlBuilder(group, options) {\n // Is the inner group a relevant horizontal brace?\n let isBrace = false;\n let isOver;\n let isSup;\n\n if (group.base && group.base.type === "horizBrace") {\n isSup = !!group.sup;\n\n if (isSup === group.base.isOver) {\n isBrace = true;\n isOver = group.base.isOver;\n }\n }\n\n if (group.base && (group.base.type === "op" || group.base.type === "operatorname")) {\n group.base.parentIsSupSub = true;\n }\n\n const children = [buildMathML_buildGroup(group.base, options)];\n\n if (group.sub) {\n children.push(buildMathML_buildGroup(group.sub, options));\n }\n\n if (group.sup) {\n children.push(buildMathML_buildGroup(group.sup, options));\n }\n\n let nodeType;\n\n if (isBrace) {\n nodeType = isOver ? "mover" : "munder";\n } else if (!group.sub) {\n const base = group.base;\n\n if (base && base.type === "op" && base.limits && (options.style === src_Style.DISPLAY || base.alwaysHandleSupSub)) {\n nodeType = "mover";\n } else if (base && base.type === "operatorname" && base.alwaysHandleSupSub && (base.limits || options.style === src_Style.DISPLAY)) {\n nodeType = "mover";\n } else {\n nodeType = "msup";\n }\n } else if (!group.sup) {\n const base = group.base;\n\n if (base && base.type === "op" && base.limits && (options.style === src_Style.DISPLAY || base.alwaysHandleSupSub)) {\n nodeType = "munder";\n } else if (base && base.type === "operatorname" && base.alwaysHandleSupSub && (base.limits || options.style === src_Style.DISPLAY)) {\n nodeType = "munder";\n } else {\n nodeType = "msub";\n }\n } else {\n const base = group.base;\n\n if (base && base.type === "op" && base.limits && options.style === src_Style.DISPLAY) {\n nodeType = "munderover";\n } else if (base && base.type === "operatorname" && base.alwaysHandleSupSub && (options.style === src_Style.DISPLAY || base.limits)) {\n nodeType = "munderover";\n } else {\n nodeType = "msubsup";\n }\n }\n\n return new mathMLTree.MathNode(nodeType, children);\n }\n\n});\n;// CONCATENATED MODULE: ./src/functions/symbolsOp.js\n\n\n\n // Operator ParseNodes created in Parser.js from symbol Groups in src/symbols.js.\n\ndefineFunctionBuilders({\n type: "atom",\n\n htmlBuilder(group, options) {\n return buildCommon.mathsym(group.text, group.mode, options, ["m" + group.family]);\n },\n\n mathmlBuilder(group, options) {\n const node = new mathMLTree.MathNode("mo", [makeText(group.text, group.mode)]);\n\n if (group.family === "bin") {\n const variant = getVariant(group, options);\n\n if (variant === "bold-italic") {\n node.setAttribute("mathvariant", variant);\n }\n } else if (group.family === "punct") {\n node.setAttribute("separator", "true");\n } else if (group.family === "open" || group.family === "close") {\n // Delims built here should not stretch vertically.\n // See delimsizing.js for stretchy delims.\n node.setAttribute("stretchy", "false");\n }\n\n return node;\n }\n\n});\n;// CONCATENATED MODULE: ./src/functions/symbolsOrd.js\n\n\n\n\n// "mathord" and "textord" ParseNodes created in Parser.js from symbol Groups in\n// src/symbols.js.\nconst defaultVariant = {\n "mi": "italic",\n "mn": "normal",\n "mtext": "normal"\n};\ndefineFunctionBuilders({\n type: "mathord",\n\n htmlBuilder(group, options) {\n return buildCommon.makeOrd(group, options, "mathord");\n },\n\n mathmlBuilder(group, options) {\n const node = new mathMLTree.MathNode("mi", [makeText(group.text, group.mode, options)]);\n const variant = getVariant(group, options) || "italic";\n\n if (variant !== defaultVariant[node.type]) {\n node.setAttribute("mathvariant", variant);\n }\n\n return node;\n }\n\n});\ndefineFunctionBuilders({\n type: "textord",\n\n htmlBuilder(group, options) {\n return buildCommon.makeOrd(group, options, "textord");\n },\n\n mathmlBuilder(group, options) {\n const text = makeText(group.text, group.mode, options);\n const variant = getVariant(group, options) || "normal";\n let node;\n\n if (group.mode === \'text\') {\n node = new mathMLTree.MathNode("mtext", [text]);\n } else if (/[0-9]/.test(group.text)) {\n node = new mathMLTree.MathNode("mn", [text]);\n } else if (group.text === "\\\\prime") {\n node = new mathMLTree.MathNode("mo", [text]);\n } else {\n node = new mathMLTree.MathNode("mi", [text]);\n }\n\n if (variant !== defaultVariant[node.type]) {\n node.setAttribute("mathvariant", variant);\n }\n\n return node;\n }\n\n});\n;// CONCATENATED MODULE: ./src/functions/symbolsSpacing.js\n\n\n\n // A map of CSS-based spacing functions to their CSS class.\n\nconst cssSpace = {\n "\\\\nobreak": "nobreak",\n "\\\\allowbreak": "allowbreak"\n}; // A lookup table to determine whether a spacing function/symbol should be\n// treated like a regular space character. If a symbol or command is a key\n// in this table, then it should be a regular space character. Furthermore,\n// the associated value may have a `className` specifying an extra CSS class\n// to add to the created `span`.\n\nconst regularSpace = {\n " ": {},\n "\\\\ ": {},\n "~": {\n className: "nobreak"\n },\n "\\\\space": {},\n "\\\\nobreakspace": {\n className: "nobreak"\n }\n}; // ParseNode<"spacing"> created in Parser.js from the "spacing" symbol Groups in\n// src/symbols.js.\n\ndefineFunctionBuilders({\n type: "spacing",\n\n htmlBuilder(group, options) {\n if (regularSpace.hasOwnProperty(group.text)) {\n const className = regularSpace[group.text].className || ""; // Spaces are generated by adding an actual space. Each of these\n // things has an entry in the symbols table, so these will be turned\n // into appropriate outputs.\n\n if (group.mode === "text") {\n const ord = buildCommon.makeOrd(group, options, "textord");\n ord.classes.push(className);\n return ord;\n } else {\n return buildCommon.makeSpan(["mspace", className], [buildCommon.mathsym(group.text, group.mode, options)], options);\n }\n } else if (cssSpace.hasOwnProperty(group.text)) {\n // Spaces based on just a CSS class.\n return buildCommon.makeSpan(["mspace", cssSpace[group.text]], [], options);\n } else {\n throw new src_ParseError("Unknown type of space \\"" + group.text + "\\"");\n }\n },\n\n mathmlBuilder(group, options) {\n let node;\n\n if (regularSpace.hasOwnProperty(group.text)) {\n node = new mathMLTree.MathNode("mtext", [new mathMLTree.TextNode("\\u00a0")]);\n } else if (cssSpace.hasOwnProperty(group.text)) {\n // CSS-based MathML spaces (\\nobreak, \\allowbreak) are ignored\n return new mathMLTree.MathNode("mspace");\n } else {\n throw new src_ParseError("Unknown type of space \\"" + group.text + "\\"");\n }\n\n return node;\n }\n\n});\n;// CONCATENATED MODULE: ./src/functions/tag.js\n\n\n\n\nconst pad = () => {\n const padNode = new mathMLTree.MathNode("mtd", []);\n padNode.setAttribute("width", "50%");\n return padNode;\n};\n\ndefineFunctionBuilders({\n type: "tag",\n\n mathmlBuilder(group, options) {\n const table = new mathMLTree.MathNode("mtable", [new mathMLTree.MathNode("mtr", [pad(), new mathMLTree.MathNode("mtd", [buildExpressionRow(group.body, options)]), pad(), new mathMLTree.MathNode("mtd", [buildExpressionRow(group.tag, options)])])]);\n table.setAttribute("width", "100%");\n return table; // TODO: Left-aligned tags.\n // Currently, the group and options passed here do not contain\n // enough info to set tag alignment. `leqno` is in Settings but it is\n // not passed to Options. On the HTML side, leqno is\n // set by a CSS class applied in buildTree.js. That would have worked\n // in MathML if browsers supported . Since they don\'t, we\n // need to rewrite the way this function is called.\n }\n\n});\n;// CONCATENATED MODULE: ./src/functions/text.js\n\n\n\n // Non-mathy text, possibly in a font\n\nconst textFontFamilies = {\n "\\\\text": undefined,\n "\\\\textrm": "textrm",\n "\\\\textsf": "textsf",\n "\\\\texttt": "texttt",\n "\\\\textnormal": "textrm"\n};\nconst textFontWeights = {\n "\\\\textbf": "textbf",\n "\\\\textmd": "textmd"\n};\nconst textFontShapes = {\n "\\\\textit": "textit",\n "\\\\textup": "textup"\n};\n\nconst optionsWithFont = (group, options) => {\n const font = group.font; // Checks if the argument is a font family or a font style.\n\n if (!font) {\n return options;\n } else if (textFontFamilies[font]) {\n return options.withTextFontFamily(textFontFamilies[font]);\n } else if (textFontWeights[font]) {\n return options.withTextFontWeight(textFontWeights[font]);\n } else if (font === "\\\\emph") {\n return options.fontShape === "textit" ? options.withTextFontShape("textup") : options.withTextFontShape("textit");\n }\n\n return options.withTextFontShape(textFontShapes[font]);\n};\n\ndefineFunction({\n type: "text",\n names: [// Font families\n "\\\\text", "\\\\textrm", "\\\\textsf", "\\\\texttt", "\\\\textnormal", // Font weights\n "\\\\textbf", "\\\\textmd", // Font Shapes\n "\\\\textit", "\\\\textup", "\\\\emph"],\n props: {\n numArgs: 1,\n argTypes: ["text"],\n allowedInArgument: true,\n allowedInText: true\n },\n\n handler(_ref, args) {\n let {\n parser,\n funcName\n } = _ref;\n const body = args[0];\n return {\n type: "text",\n mode: parser.mode,\n body: ordargument(body),\n font: funcName\n };\n },\n\n htmlBuilder(group, options) {\n const newOptions = optionsWithFont(group, options);\n const inner = buildExpression(group.body, newOptions, true);\n return buildCommon.makeSpan(["mord", "text"], inner, newOptions);\n },\n\n mathmlBuilder(group, options) {\n const newOptions = optionsWithFont(group, options);\n return buildExpressionRow(group.body, newOptions);\n }\n\n});\n;// CONCATENATED MODULE: ./src/functions/underline.js\n\n\n\n\n\ndefineFunction({\n type: "underline",\n names: ["\\\\underline"],\n props: {\n numArgs: 1,\n allowedInText: true\n },\n\n handler(_ref, args) {\n let {\n parser\n } = _ref;\n return {\n type: "underline",\n mode: parser.mode,\n body: args[0]\n };\n },\n\n htmlBuilder(group, options) {\n // Underlines are handled in the TeXbook pg 443, Rule 10.\n // Build the inner group.\n const innerGroup = buildGroup(group.body, options); // Create the line to go below the body\n\n const line = buildCommon.makeLineSpan("underline-line", options); // Generate the vlist, with the appropriate kerns\n\n const defaultRuleThickness = options.fontMetrics().defaultRuleThickness;\n const vlist = buildCommon.makeVList({\n positionType: "top",\n positionData: innerGroup.height,\n children: [{\n type: "kern",\n size: defaultRuleThickness\n }, {\n type: "elem",\n elem: line\n }, {\n type: "kern",\n size: 3 * defaultRuleThickness\n }, {\n type: "elem",\n elem: innerGroup\n }]\n }, options);\n return buildCommon.makeSpan(["mord", "underline"], [vlist], options);\n },\n\n mathmlBuilder(group, options) {\n const operator = new mathMLTree.MathNode("mo", [new mathMLTree.TextNode("\\u203e")]);\n operator.setAttribute("stretchy", "true");\n const node = new mathMLTree.MathNode("munder", [buildMathML_buildGroup(group.body, options), operator]);\n node.setAttribute("accentunder", "true");\n return node;\n }\n\n});\n;// CONCATENATED MODULE: ./src/functions/vcenter.js\n\n\n\n\n // \\vcenter: Vertically center the argument group on the math axis.\n\ndefineFunction({\n type: "vcenter",\n names: ["\\\\vcenter"],\n props: {\n numArgs: 1,\n argTypes: ["original"],\n // In LaTeX, \\vcenter can act only on a box.\n allowedInText: false\n },\n\n handler(_ref, args) {\n let {\n parser\n } = _ref;\n return {\n type: "vcenter",\n mode: parser.mode,\n body: args[0]\n };\n },\n\n htmlBuilder(group, options) {\n const body = buildGroup(group.body, options);\n const axisHeight = options.fontMetrics().axisHeight;\n const dy = 0.5 * (body.height - axisHeight - (body.depth + axisHeight));\n return buildCommon.makeVList({\n positionType: "shift",\n positionData: dy,\n children: [{\n type: "elem",\n elem: body\n }]\n }, options);\n },\n\n mathmlBuilder(group, options) {\n // There is no way to do this in MathML.\n // Write a class as a breadcrumb in case some post-processor wants\n // to perform a vcenter adjustment.\n return new mathMLTree.MathNode("mpadded", [buildMathML_buildGroup(group.body, options)], ["vcenter"]);\n }\n\n});\n;// CONCATENATED MODULE: ./src/functions/verb.js\n\n\n\n\ndefineFunction({\n type: "verb",\n names: ["\\\\verb"],\n props: {\n numArgs: 0,\n allowedInText: true\n },\n\n handler(context, args, optArgs) {\n // \\verb and \\verb* are dealt with directly in Parser.js.\n // If we end up here, it\'s because of a failure to match the two delimiters\n // in the regex in Lexer.js. LaTeX raises the following error when \\verb is\n // terminated by end of line (or file).\n throw new src_ParseError("\\\\verb ended by end of line instead of matching delimiter");\n },\n\n htmlBuilder(group, options) {\n const text = makeVerb(group);\n const body = []; // \\verb enters text mode and therefore is sized like \\textstyle\n\n const newOptions = options.havingStyle(options.style.text());\n\n for (let i = 0; i < text.length; i++) {\n let c = text[i];\n\n if (c === \'~\') {\n c = \'\\\\textasciitilde\';\n }\n\n body.push(buildCommon.makeSymbol(c, "Typewriter-Regular", group.mode, newOptions, ["mord", "texttt"]));\n }\n\n return buildCommon.makeSpan(["mord", "text"].concat(newOptions.sizingClasses(options)), buildCommon.tryCombineChars(body), newOptions);\n },\n\n mathmlBuilder(group, options) {\n const text = new mathMLTree.TextNode(makeVerb(group));\n const node = new mathMLTree.MathNode("mtext", [text]);\n node.setAttribute("mathvariant", "monospace");\n return node;\n }\n\n});\n/**\n * Converts verb group into body string.\n *\n * \\verb* replaces each space with an open box \\u2423\n * \\verb replaces each space with a no-break space \\xA0\n */\n\nconst makeVerb = group => group.body.replace(/ /g, group.star ? \'\\u2423\' : \'\\xA0\');\n;// CONCATENATED MODULE: ./src/functions.js\n/** Include this to ensure that all functions are defined. */\n\nconst functions = _functions;\n/* harmony default export */ var src_functions = (functions); // TODO(kevinb): have functions return an object and call defineFunction with\n// that object in this file instead of relying on side-effects.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n;// CONCATENATED MODULE: ./src/Lexer.js\n/**\n * The Lexer class handles tokenizing the input in various ways. Since our\n * parser expects us to be able to backtrack, the lexer allows lexing from any\n * given starting point.\n *\n * Its main exposed function is the `lex` function, which takes a position to\n * lex from and a type of token to lex. It defers to the appropriate `_innerLex`\n * function.\n *\n * The various `_innerLex` functions perform the actual lexing of different\n * kinds.\n */\n\n\n\n\n/* The following tokenRegex\n * - matches typical whitespace (but not NBSP etc.) using its first group\n * - does not match any control character \\x00-\\x1f except whitespace\n * - does not match a bare backslash\n * - matches any ASCII character except those just mentioned\n * - does not match the BMP private use area \\uE000-\\uF8FF\n * - does not match bare surrogate code units\n * - matches any BMP character except for those just described\n * - matches any valid Unicode surrogate pair\n * - matches a backslash followed by one or more whitespace characters\n * - matches a backslash followed by one or more letters then whitespace\n * - matches a backslash followed by any BMP character\n * Capturing groups:\n * [1] regular whitespace\n * [2] backslash followed by whitespace\n * [3] anything else, which may include:\n * [4] left character of \\verb*\n * [5] left character of \\verb\n * [6] backslash followed by word, excluding any trailing whitespace\n * Just because the Lexer matches something doesn\'t mean it\'s valid input:\n * If there is no matching function or symbol definition, the Parser will\n * still reject the input.\n */\nconst spaceRegexString = "[ \\r\\n\\t]";\nconst controlWordRegexString = "\\\\\\\\[a-zA-Z@]+";\nconst controlSymbolRegexString = "\\\\\\\\[^\\uD800-\\uDFFF]";\nconst controlWordWhitespaceRegexString = "(" + controlWordRegexString + ")" + spaceRegexString + "*";\nconst controlSpaceRegexString = "\\\\\\\\(\\n|[ \\r\\t]+\\n?)[ \\r\\t]*";\nconst combiningDiacriticalMarkString = "[\\u0300-\\u036f]";\nconst combiningDiacriticalMarksEndRegex = new RegExp(combiningDiacriticalMarkString + "+$");\nconst tokenRegexString = "(" + spaceRegexString + "+)|" + ( // whitespace\ncontrolSpaceRegexString + "|") + // \\whitespace\n"([!-\\\\[\\\\]-\\u2027\\u202A-\\uD7FF\\uF900-\\uFFFF]" + ( // single codepoint\ncombiningDiacriticalMarkString + "*") + // ...plus accents\n"|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]" + ( // surrogate pair\ncombiningDiacriticalMarkString + "*") + // ...plus accents\n"|\\\\\\\\verb\\\\*([^]).*?\\\\4" + // \\verb*\n"|\\\\\\\\verb([^*a-zA-Z]).*?\\\\5" + ( // \\verb unstarred\n"|" + controlWordWhitespaceRegexString) + ( // \\macroName + spaces\n"|" + controlSymbolRegexString + ")"); // \\\\, \\\', etc.\n\n/** Main Lexer class */\n\nclass Lexer {\n // Category codes. The lexer only supports comment characters (14) for now.\n // MacroExpander additionally distinguishes active (13).\n constructor(input, settings) {\n this.input = void 0;\n this.settings = void 0;\n this.tokenRegex = void 0;\n this.catcodes = void 0;\n // Separate accents from characters\n this.input = input;\n this.settings = settings;\n this.tokenRegex = new RegExp(tokenRegexString, \'g\');\n this.catcodes = {\n "%": 14,\n // comment character\n "~": 13 // active character\n\n };\n }\n\n setCatcode(char, code) {\n this.catcodes[char] = code;\n }\n /**\n * This function lexes a single token.\n */\n\n\n lex() {\n const input = this.input;\n const pos = this.tokenRegex.lastIndex;\n\n if (pos === input.length) {\n return new Token("EOF", new SourceLocation(this, pos, pos));\n }\n\n const match = this.tokenRegex.exec(input);\n\n if (match === null || match.index !== pos) {\n throw new src_ParseError("Unexpected character: \'" + input[pos] + "\'", new Token(input[pos], new SourceLocation(this, pos, pos + 1)));\n }\n\n const text = match[6] || match[3] || (match[2] ? "\\\\ " : " ");\n\n if (this.catcodes[text] === 14) {\n // comment character\n const nlIndex = input.indexOf(\'\\n\', this.tokenRegex.lastIndex);\n\n if (nlIndex === -1) {\n this.tokenRegex.lastIndex = input.length; // EOF\n\n this.settings.reportNonstrict("commentAtEnd", "% comment has no terminating newline; LaTeX would " + "fail because of commenting the end of math mode (e.g. $)");\n } else {\n this.tokenRegex.lastIndex = nlIndex + 1;\n }\n\n return this.lex();\n }\n\n return new Token(text, new SourceLocation(this, pos, this.tokenRegex.lastIndex));\n }\n\n}\n;// CONCATENATED MODULE: ./src/Namespace.js\n/**\n * A `Namespace` refers to a space of nameable things like macros or lengths,\n * which can be `set` either globally or local to a nested group, using an\n * undo stack similar to how TeX implements this functionality.\n * Performance-wise, `get` and local `set` take constant time, while global\n * `set` takes time proportional to the depth of group nesting.\n */\n\nclass Namespace {\n /**\n * Both arguments are optional. The first argument is an object of\n * built-in mappings which never change. The second argument is an object\n * of initial (global-level) mappings, which will constantly change\n * according to any global/top-level `set`s done.\n */\n constructor(builtins, globalMacros) {\n if (builtins === void 0) {\n builtins = {};\n }\n\n if (globalMacros === void 0) {\n globalMacros = {};\n }\n\n this.current = void 0;\n this.builtins = void 0;\n this.undefStack = void 0;\n this.current = globalMacros;\n this.builtins = builtins;\n this.undefStack = [];\n }\n /**\n * Start a new nested group, affecting future local `set`s.\n */\n\n\n beginGroup() {\n this.undefStack.push({});\n }\n /**\n * End current nested group, restoring values before the group began.\n */\n\n\n endGroup() {\n if (this.undefStack.length === 0) {\n throw new src_ParseError("Unbalanced namespace destruction: attempt " + "to pop global namespace; please report this as a bug");\n }\n\n const undefs = this.undefStack.pop();\n\n for (const undef in undefs) {\n if (undefs.hasOwnProperty(undef)) {\n if (undefs[undef] == null) {\n delete this.current[undef];\n } else {\n this.current[undef] = undefs[undef];\n }\n }\n }\n }\n /**\n * Ends all currently nested groups (if any), restoring values before the\n * groups began. Useful in case of an error in the middle of parsing.\n */\n\n\n endGroups() {\n while (this.undefStack.length > 0) {\n this.endGroup();\n }\n }\n /**\n * Detect whether `name` has a definition. Equivalent to\n * `get(name) != null`.\n */\n\n\n has(name) {\n return this.current.hasOwnProperty(name) || this.builtins.hasOwnProperty(name);\n }\n /**\n * Get the current value of a name, or `undefined` if there is no value.\n *\n * Note: Do not use `if (namespace.get(...))` to detect whether a macro\n * is defined, as the definition may be the empty string which evaluates\n * to `false` in JavaScript. Use `if (namespace.get(...) != null)` or\n * `if (namespace.has(...))`.\n */\n\n\n get(name) {\n if (this.current.hasOwnProperty(name)) {\n return this.current[name];\n } else {\n return this.builtins[name];\n }\n }\n /**\n * Set the current value of a name, and optionally set it globally too.\n * Local set() sets the current value and (when appropriate) adds an undo\n * operation to the undo stack. Global set() may change the undo\n * operation at every level, so takes time linear in their number.\n * A value of undefined means to delete existing definitions.\n */\n\n\n set(name, value, global) {\n if (global === void 0) {\n global = false;\n }\n\n if (global) {\n // Global set is equivalent to setting in all groups. Simulate this\n // by destroying any undos currently scheduled for this name,\n // and adding an undo with the *new* value (in case it later gets\n // locally reset within this environment).\n for (let i = 0; i < this.undefStack.length; i++) {\n delete this.undefStack[i][name];\n }\n\n if (this.undefStack.length > 0) {\n this.undefStack[this.undefStack.length - 1][name] = value;\n }\n } else {\n // Undo this set at end of this group (possibly to `undefined`),\n // unless an undo is already in place, in which case that older\n // value is the correct one.\n const top = this.undefStack[this.undefStack.length - 1];\n\n if (top && !top.hasOwnProperty(name)) {\n top[name] = this.current[name];\n }\n }\n\n if (value == null) {\n delete this.current[name];\n } else {\n this.current[name] = value;\n }\n }\n\n}\n;// CONCATENATED MODULE: ./src/macros.js\n/**\n * Predefined macros for KaTeX.\n * This can be used to define some commands in terms of others.\n */\n// Export global macros object from defineMacro\n\nconst macros = _macros;\n/* harmony default export */ var src_macros = (macros);\n\n\n\n\n\n //////////////////////////////////////////////////////////////////////\n// macro tools\n\ndefineMacro("\\\\noexpand", function (context) {\n // The expansion is the token itself; but that token is interpreted\n // as if its meaning were ‘\\relax’ if it is a control sequence that\n // would ordinarily be expanded by TeX’s expansion rules.\n const t = context.popToken();\n\n if (context.isExpandable(t.text)) {\n t.noexpand = true;\n t.treatAsRelax = true;\n }\n\n return {\n tokens: [t],\n numArgs: 0\n };\n});\ndefineMacro("\\\\expandafter", function (context) {\n // TeX first reads the token that comes immediately after \\expandafter,\n // without expanding it; let’s call this token t. Then TeX reads the\n // token that comes after t (and possibly more tokens, if that token\n // has an argument), replacing it by its expansion. Finally TeX puts\n // t back in front of that expansion.\n const t = context.popToken();\n context.expandOnce(true); // expand only an expandable token\n\n return {\n tokens: [t],\n numArgs: 0\n };\n}); // LaTeX\'s \\@firstoftwo{#1}{#2} expands to #1, skipping #2\n// TeX source: \\long\\def\\@firstoftwo#1#2{#1}\n\ndefineMacro("\\\\@firstoftwo", function (context) {\n const args = context.consumeArgs(2);\n return {\n tokens: args[0],\n numArgs: 0\n };\n}); // LaTeX\'s \\@secondoftwo{#1}{#2} expands to #2, skipping #1\n// TeX source: \\long\\def\\@secondoftwo#1#2{#2}\n\ndefineMacro("\\\\@secondoftwo", function (context) {\n const args = context.consumeArgs(2);\n return {\n tokens: args[1],\n numArgs: 0\n };\n}); // LaTeX\'s \\@ifnextchar{#1}{#2}{#3} looks ahead to the next (unexpanded)\n// symbol that isn\'t a space, consuming any spaces but not consuming the\n// first nonspace character. If that nonspace character matches #1, then\n// the macro expands to #2; otherwise, it expands to #3.\n\ndefineMacro("\\\\@ifnextchar", function (context) {\n const args = context.consumeArgs(3); // symbol, if, else\n\n context.consumeSpaces();\n const nextToken = context.future();\n\n if (args[0].length === 1 && args[0][0].text === nextToken.text) {\n return {\n tokens: args[1],\n numArgs: 0\n };\n } else {\n return {\n tokens: args[2],\n numArgs: 0\n };\n }\n}); // LaTeX\'s \\@ifstar{#1}{#2} looks ahead to the next (unexpanded) symbol.\n// If it is `*`, then it consumes the symbol, and the macro expands to #1;\n// otherwise, the macro expands to #2 (without consuming the symbol).\n// TeX source: \\def\\@ifstar#1{\\@ifnextchar *{\\@firstoftwo{#1}}}\n\ndefineMacro("\\\\@ifstar", "\\\\@ifnextchar *{\\\\@firstoftwo{#1}}"); // LaTeX\'s \\TextOrMath{#1}{#2} expands to #1 in text mode, #2 in math mode\n\ndefineMacro("\\\\TextOrMath", function (context) {\n const args = context.consumeArgs(2);\n\n if (context.mode === \'text\') {\n return {\n tokens: args[0],\n numArgs: 0\n };\n } else {\n return {\n tokens: args[1],\n numArgs: 0\n };\n }\n}); // Lookup table for parsing numbers in base 8 through 16\n\nconst digitToNumber = {\n "0": 0,\n "1": 1,\n "2": 2,\n "3": 3,\n "4": 4,\n "5": 5,\n "6": 6,\n "7": 7,\n "8": 8,\n "9": 9,\n "a": 10,\n "A": 10,\n "b": 11,\n "B": 11,\n "c": 12,\n "C": 12,\n "d": 13,\n "D": 13,\n "e": 14,\n "E": 14,\n "f": 15,\n "F": 15\n}; // TeX \\char makes a literal character (catcode 12) using the following forms:\n// (see The TeXBook, p. 43)\n// \\char123 -- decimal\n// \\char\'123 -- octal\n// \\char"123 -- hex\n// \\char`x -- character that can be written (i.e. isn\'t active)\n// \\char`\\x -- character that cannot be written (e.g. %)\n// These all refer to characters from the font, so we turn them into special\n// calls to a function \\@char dealt with in the Parser.\n\ndefineMacro("\\\\char", function (context) {\n let token = context.popToken();\n let base;\n let number = \'\';\n\n if (token.text === "\'") {\n base = 8;\n token = context.popToken();\n } else if (token.text === \'"\') {\n base = 16;\n token = context.popToken();\n } else if (token.text === "`") {\n token = context.popToken();\n\n if (token.text[0] === "\\\\") {\n number = token.text.charCodeAt(1);\n } else if (token.text === "EOF") {\n throw new src_ParseError("\\\\char` missing argument");\n } else {\n number = token.text.charCodeAt(0);\n }\n } else {\n base = 10;\n }\n\n if (base) {\n // Parse a number in the given base, starting with first `token`.\n number = digitToNumber[token.text];\n\n if (number == null || number >= base) {\n throw new src_ParseError("Invalid base-" + base + " digit " + token.text);\n }\n\n let digit;\n\n while ((digit = digitToNumber[context.future().text]) != null && digit < base) {\n number *= base;\n number += digit;\n context.popToken();\n }\n }\n\n return "\\\\@char{" + number + "}";\n}); // \\newcommand{\\macro}[args]{definition}\n// \\renewcommand{\\macro}[args]{definition}\n// TODO: Optional arguments: \\newcommand{\\macro}[args][default]{definition}\n\nconst newcommand = (context, existsOK, nonexistsOK, skipIfExists) => {\n let arg = context.consumeArg().tokens;\n\n if (arg.length !== 1) {\n throw new src_ParseError("\\\\newcommand\'s first argument must be a macro name");\n }\n\n const name = arg[0].text;\n const exists = context.isDefined(name);\n\n if (exists && !existsOK) {\n throw new src_ParseError("\\\\newcommand{" + name + "} attempting to redefine " + (name + "; use \\\\renewcommand"));\n }\n\n if (!exists && !nonexistsOK) {\n throw new src_ParseError("\\\\renewcommand{" + name + "} when command " + name + " " + "does not yet exist; use \\\\newcommand");\n }\n\n let numArgs = 0;\n arg = context.consumeArg().tokens;\n\n if (arg.length === 1 && arg[0].text === "[") {\n let argText = \'\';\n let token = context.expandNextToken();\n\n while (token.text !== "]" && token.text !== "EOF") {\n // TODO: Should properly expand arg, e.g., ignore {}s\n argText += token.text;\n token = context.expandNextToken();\n }\n\n if (!argText.match(/^\\s*[0-9]+\\s*$/)) {\n throw new src_ParseError("Invalid number of arguments: " + argText);\n }\n\n numArgs = parseInt(argText);\n arg = context.consumeArg().tokens;\n }\n\n if (!(exists && skipIfExists)) {\n // Final arg is the expansion of the macro\n context.macros.set(name, {\n tokens: arg,\n numArgs\n });\n }\n\n return \'\';\n};\n\ndefineMacro("\\\\newcommand", context => newcommand(context, false, true, false));\ndefineMacro("\\\\renewcommand", context => newcommand(context, true, false, false));\ndefineMacro("\\\\providecommand", context => newcommand(context, true, true, true)); // terminal (console) tools\n\ndefineMacro("\\\\message", context => {\n const arg = context.consumeArgs(1)[0]; // eslint-disable-next-line no-console\n\n console.log(arg.reverse().map(token => token.text).join(""));\n return \'\';\n});\ndefineMacro("\\\\errmessage", context => {\n const arg = context.consumeArgs(1)[0]; // eslint-disable-next-line no-console\n\n console.error(arg.reverse().map(token => token.text).join(""));\n return \'\';\n});\ndefineMacro("\\\\show", context => {\n const tok = context.popToken();\n const name = tok.text; // eslint-disable-next-line no-console\n\n console.log(tok, context.macros.get(name), src_functions[name], src_symbols.math[name], src_symbols.text[name]);\n return \'\';\n}); //////////////////////////////////////////////////////////////////////\n// Grouping\n// \\let\\bgroup={ \\let\\egroup=}\n\ndefineMacro("\\\\bgroup", "{");\ndefineMacro("\\\\egroup", "}"); // Symbols from latex.ltx:\n// \\def~{\\nobreakspace{}}\n// \\def\\lq{`}\n// \\def\\rq{\'}\n// \\def \\aa {\\r a}\n// \\def \\AA {\\r A}\n\ndefineMacro("~", "\\\\nobreakspace");\ndefineMacro("\\\\lq", "`");\ndefineMacro("\\\\rq", "\'");\ndefineMacro("\\\\aa", "\\\\r a");\ndefineMacro("\\\\AA", "\\\\r A"); // Copyright (C) and registered (R) symbols. Use raw symbol in MathML.\n// \\DeclareTextCommandDefault{\\textcopyright}{\\textcircled{c}}\n// \\DeclareTextCommandDefault{\\textregistered}{\\textcircled{%\n// \\check@mathfonts\\fontsize\\sf@size\\z@\\math@fontsfalse\\selectfont R}}\n// \\DeclareRobustCommand{\\copyright}{%\n// \\ifmmode{\\nfss@text{\\textcopyright}}\\else\\textcopyright\\fi}\n\ndefineMacro("\\\\textcopyright", "\\\\html@mathml{\\\\textcircled{c}}{\\\\char`©}");\ndefineMacro("\\\\copyright", "\\\\TextOrMath{\\\\textcopyright}{\\\\text{\\\\textcopyright}}");\ndefineMacro("\\\\textregistered", "\\\\html@mathml{\\\\textcircled{\\\\scriptsize R}}{\\\\char`®}"); // Characters omitted from Unicode range 1D400–1D7FF\n\ndefineMacro("\\u212C", "\\\\mathscr{B}"); // script\n\ndefineMacro("\\u2130", "\\\\mathscr{E}");\ndefineMacro("\\u2131", "\\\\mathscr{F}");\ndefineMacro("\\u210B", "\\\\mathscr{H}");\ndefineMacro("\\u2110", "\\\\mathscr{I}");\ndefineMacro("\\u2112", "\\\\mathscr{L}");\ndefineMacro("\\u2133", "\\\\mathscr{M}");\ndefineMacro("\\u211B", "\\\\mathscr{R}");\ndefineMacro("\\u212D", "\\\\mathfrak{C}"); // Fraktur\n\ndefineMacro("\\u210C", "\\\\mathfrak{H}");\ndefineMacro("\\u2128", "\\\\mathfrak{Z}"); // Define \\Bbbk with a macro that works in both HTML and MathML.\n\ndefineMacro("\\\\Bbbk", "\\\\Bbb{k}"); // Unicode middle dot\n// The KaTeX fonts do not contain U+00B7. Instead, \\cdotp displays\n// the dot at U+22C5 and gives it punct spacing.\n\ndefineMacro("\\u00b7", "\\\\cdotp"); // \\llap and \\rlap render their contents in text mode\n\ndefineMacro("\\\\llap", "\\\\mathllap{\\\\textrm{#1}}");\ndefineMacro("\\\\rlap", "\\\\mathrlap{\\\\textrm{#1}}");\ndefineMacro("\\\\clap", "\\\\mathclap{\\\\textrm{#1}}"); // \\mathstrut from the TeXbook, p 360\n\ndefineMacro("\\\\mathstrut", "\\\\vphantom{(}"); // \\underbar from TeXbook p 353\n\ndefineMacro("\\\\underbar", "\\\\underline{\\\\text{#1}}"); // \\not is defined by base/fontmath.ltx via\n// \\DeclareMathSymbol{\\not}{\\mathrel}{symbols}{"36}\n// It\'s thus treated like a \\mathrel, but defined by a symbol that has zero\n// width but extends to the right. We use \\rlap to get that spacing.\n// For MathML we write U+0338 here. buildMathML.js will then do the overlay.\n\ndefineMacro("\\\\not", \'\\\\html@mathml{\\\\mathrel{\\\\mathrlap\\\\@not}}{\\\\char"338}\'); // Negated symbols from base/fontmath.ltx:\n// \\def\\neq{\\not=} \\let\\ne=\\neq\n// \\DeclareRobustCommand\n// \\notin{\\mathrel{\\m@th\\mathpalette\\c@ncel\\in}}\n// \\def\\c@ncel#1#2{\\m@th\\ooalign{$\\hfil#1\\mkern1mu/\\hfil$\\crcr$#1#2$}}\n\ndefineMacro("\\\\neq", "\\\\html@mathml{\\\\mathrel{\\\\not=}}{\\\\mathrel{\\\\char`≠}}");\ndefineMacro("\\\\ne", "\\\\neq");\ndefineMacro("\\u2260", "\\\\neq");\ndefineMacro("\\\\notin", "\\\\html@mathml{\\\\mathrel{{\\\\in}\\\\mathllap{/\\\\mskip1mu}}}" + "{\\\\mathrel{\\\\char`∉}}");\ndefineMacro("\\u2209", "\\\\notin"); // Unicode stacked relations\n\ndefineMacro("\\u2258", "\\\\html@mathml{" + "\\\\mathrel{=\\\\kern{-1em}\\\\raisebox{0.4em}{$\\\\scriptsize\\\\frown$}}" + "}{\\\\mathrel{\\\\char`\\u2258}}");\ndefineMacro("\\u2259", "\\\\html@mathml{\\\\stackrel{\\\\tiny\\\\wedge}{=}}{\\\\mathrel{\\\\char`\\u2258}}");\ndefineMacro("\\u225A", "\\\\html@mathml{\\\\stackrel{\\\\tiny\\\\vee}{=}}{\\\\mathrel{\\\\char`\\u225A}}");\ndefineMacro("\\u225B", "\\\\html@mathml{\\\\stackrel{\\\\scriptsize\\\\star}{=}}" + "{\\\\mathrel{\\\\char`\\u225B}}");\ndefineMacro("\\u225D", "\\\\html@mathml{\\\\stackrel{\\\\tiny\\\\mathrm{def}}{=}}" + "{\\\\mathrel{\\\\char`\\u225D}}");\ndefineMacro("\\u225E", "\\\\html@mathml{\\\\stackrel{\\\\tiny\\\\mathrm{m}}{=}}" + "{\\\\mathrel{\\\\char`\\u225E}}");\ndefineMacro("\\u225F", "\\\\html@mathml{\\\\stackrel{\\\\tiny?}{=}}{\\\\mathrel{\\\\char`\\u225F}}"); // Misc Unicode\n\ndefineMacro("\\u27C2", "\\\\perp");\ndefineMacro("\\u203C", "\\\\mathclose{!\\\\mkern-0.8mu!}");\ndefineMacro("\\u220C", "\\\\notni");\ndefineMacro("\\u231C", "\\\\ulcorner");\ndefineMacro("\\u231D", "\\\\urcorner");\ndefineMacro("\\u231E", "\\\\llcorner");\ndefineMacro("\\u231F", "\\\\lrcorner");\ndefineMacro("\\u00A9", "\\\\copyright");\ndefineMacro("\\u00AE", "\\\\textregistered");\ndefineMacro("\\uFE0F", "\\\\textregistered"); // The KaTeX fonts have corners at codepoints that don\'t match Unicode.\n// For MathML purposes, use the Unicode code point.\n\ndefineMacro("\\\\ulcorner", "\\\\html@mathml{\\\\@ulcorner}{\\\\mathop{\\\\char\\"231c}}");\ndefineMacro("\\\\urcorner", "\\\\html@mathml{\\\\@urcorner}{\\\\mathop{\\\\char\\"231d}}");\ndefineMacro("\\\\llcorner", "\\\\html@mathml{\\\\@llcorner}{\\\\mathop{\\\\char\\"231e}}");\ndefineMacro("\\\\lrcorner", "\\\\html@mathml{\\\\@lrcorner}{\\\\mathop{\\\\char\\"231f}}"); //////////////////////////////////////////////////////////////////////\n// LaTeX_2ε\n// \\vdots{\\vbox{\\baselineskip4\\p@ \\lineskiplimit\\z@\n// \\kern6\\p@\\hbox{.}\\hbox{.}\\hbox{.}}}\n// We\'ll call \\varvdots, which gets a glyph from symbols.js.\n// The zero-width rule gets us an equivalent to the vertical 6pt kern.\n\ndefineMacro("\\\\vdots", "{\\\\varvdots\\\\rule{0pt}{15pt}}");\ndefineMacro("\\u22ee", "\\\\vdots"); //////////////////////////////////////////////////////////////////////\n// amsmath.sty\n// http://mirrors.concertpass.com/tex-archive/macros/latex/required/amsmath/amsmath.pdf\n// Italic Greek capital letters. AMS defines these with \\DeclareMathSymbol,\n// but they are equivalent to \\mathit{\\Letter}.\n\ndefineMacro("\\\\varGamma", "\\\\mathit{\\\\Gamma}");\ndefineMacro("\\\\varDelta", "\\\\mathit{\\\\Delta}");\ndefineMacro("\\\\varTheta", "\\\\mathit{\\\\Theta}");\ndefineMacro("\\\\varLambda", "\\\\mathit{\\\\Lambda}");\ndefineMacro("\\\\varXi", "\\\\mathit{\\\\Xi}");\ndefineMacro("\\\\varPi", "\\\\mathit{\\\\Pi}");\ndefineMacro("\\\\varSigma", "\\\\mathit{\\\\Sigma}");\ndefineMacro("\\\\varUpsilon", "\\\\mathit{\\\\Upsilon}");\ndefineMacro("\\\\varPhi", "\\\\mathit{\\\\Phi}");\ndefineMacro("\\\\varPsi", "\\\\mathit{\\\\Psi}");\ndefineMacro("\\\\varOmega", "\\\\mathit{\\\\Omega}"); //\\newcommand{\\substack}[1]{\\subarray{c}#1\\endsubarray}\n\ndefineMacro("\\\\substack", "\\\\begin{subarray}{c}#1\\\\end{subarray}"); // \\renewcommand{\\colon}{\\nobreak\\mskip2mu\\mathpunct{}\\nonscript\n// \\mkern-\\thinmuskip{:}\\mskip6muplus1mu\\relax}\n\ndefineMacro("\\\\colon", "\\\\nobreak\\\\mskip2mu\\\\mathpunct{}" + "\\\\mathchoice{\\\\mkern-3mu}{\\\\mkern-3mu}{}{}{:}\\\\mskip6mu\\\\relax"); // \\newcommand{\\boxed}[1]{\\fbox{\\m@th$\\displaystyle#1$}}\n\ndefineMacro("\\\\boxed", "\\\\fbox{$\\\\displaystyle{#1}$}"); // \\def\\iff{\\DOTSB\\;\\Longleftrightarrow\\;}\n// \\def\\implies{\\DOTSB\\;\\Longrightarrow\\;}\n// \\def\\impliedby{\\DOTSB\\;\\Longleftarrow\\;}\n\ndefineMacro("\\\\iff", "\\\\DOTSB\\\\;\\\\Longleftrightarrow\\\\;");\ndefineMacro("\\\\implies", "\\\\DOTSB\\\\;\\\\Longrightarrow\\\\;");\ndefineMacro("\\\\impliedby", "\\\\DOTSB\\\\;\\\\Longleftarrow\\\\;"); // \\def\\dddot#1{{\\mathop{#1}\\limits^{\\vbox to-1.4\\ex@{\\kern-\\tw@\\ex@\n// \\hbox{\\normalfont ...}\\vss}}}}\n// We use \\overset which avoids the vertical shift of \\mathop.\n\ndefineMacro("\\\\dddot", "{\\\\overset{\\\\raisebox{-0.1ex}{\\\\normalsize ...}}{#1}}");\ndefineMacro("\\\\ddddot", "{\\\\overset{\\\\raisebox{-0.1ex}{\\\\normalsize ....}}{#1}}"); // AMSMath\'s automatic \\dots, based on \\mdots@@ macro.\n\nconst dotsByToken = {\n \',\': \'\\\\dotsc\',\n \'\\\\not\': \'\\\\dotsb\',\n // \\keybin@ checks for the following:\n \'+\': \'\\\\dotsb\',\n \'=\': \'\\\\dotsb\',\n \'<\': \'\\\\dotsb\',\n \'>\': \'\\\\dotsb\',\n \'-\': \'\\\\dotsb\',\n \'*\': \'\\\\dotsb\',\n \':\': \'\\\\dotsb\',\n // Symbols whose definition starts with \\DOTSB:\n \'\\\\DOTSB\': \'\\\\dotsb\',\n \'\\\\coprod\': \'\\\\dotsb\',\n \'\\\\bigvee\': \'\\\\dotsb\',\n \'\\\\bigwedge\': \'\\\\dotsb\',\n \'\\\\biguplus\': \'\\\\dotsb\',\n \'\\\\bigcap\': \'\\\\dotsb\',\n \'\\\\bigcup\': \'\\\\dotsb\',\n \'\\\\prod\': \'\\\\dotsb\',\n \'\\\\sum\': \'\\\\dotsb\',\n \'\\\\bigotimes\': \'\\\\dotsb\',\n \'\\\\bigoplus\': \'\\\\dotsb\',\n \'\\\\bigodot\': \'\\\\dotsb\',\n \'\\\\bigsqcup\': \'\\\\dotsb\',\n \'\\\\And\': \'\\\\dotsb\',\n \'\\\\longrightarrow\': \'\\\\dotsb\',\n \'\\\\Longrightarrow\': \'\\\\dotsb\',\n \'\\\\longleftarrow\': \'\\\\dotsb\',\n \'\\\\Longleftarrow\': \'\\\\dotsb\',\n \'\\\\longleftrightarrow\': \'\\\\dotsb\',\n \'\\\\Longleftrightarrow\': \'\\\\dotsb\',\n \'\\\\mapsto\': \'\\\\dotsb\',\n \'\\\\longmapsto\': \'\\\\dotsb\',\n \'\\\\hookrightarrow\': \'\\\\dotsb\',\n \'\\\\doteq\': \'\\\\dotsb\',\n // Symbols whose definition starts with \\mathbin:\n \'\\\\mathbin\': \'\\\\dotsb\',\n // Symbols whose definition starts with \\mathrel:\n \'\\\\mathrel\': \'\\\\dotsb\',\n \'\\\\relbar\': \'\\\\dotsb\',\n \'\\\\Relbar\': \'\\\\dotsb\',\n \'\\\\xrightarrow\': \'\\\\dotsb\',\n \'\\\\xleftarrow\': \'\\\\dotsb\',\n // Symbols whose definition starts with \\DOTSI:\n \'\\\\DOTSI\': \'\\\\dotsi\',\n \'\\\\int\': \'\\\\dotsi\',\n \'\\\\oint\': \'\\\\dotsi\',\n \'\\\\iint\': \'\\\\dotsi\',\n \'\\\\iiint\': \'\\\\dotsi\',\n \'\\\\iiiint\': \'\\\\dotsi\',\n \'\\\\idotsint\': \'\\\\dotsi\',\n // Symbols whose definition starts with \\DOTSX:\n \'\\\\DOTSX\': \'\\\\dotsx\'\n};\ndefineMacro("\\\\dots", function (context) {\n // TODO: If used in text mode, should expand to \\textellipsis.\n // However, in KaTeX, \\textellipsis and \\ldots behave the same\n // (in text mode), and it\'s unlikely we\'d see any of the math commands\n // that affect the behavior of \\dots when in text mode. So fine for now\n // (until we support \\ifmmode ... \\else ... \\fi).\n let thedots = \'\\\\dotso\';\n const next = context.expandAfterFuture().text;\n\n if (next in dotsByToken) {\n thedots = dotsByToken[next];\n } else if (next.slice(0, 4) === \'\\\\not\') {\n thedots = \'\\\\dotsb\';\n } else if (next in src_symbols.math) {\n if (utils.contains([\'bin\', \'rel\'], src_symbols.math[next].group)) {\n thedots = \'\\\\dotsb\';\n }\n }\n\n return thedots;\n});\nconst spaceAfterDots = {\n // \\rightdelim@ checks for the following:\n \')\': true,\n \']\': true,\n \'\\\\rbrack\': true,\n \'\\\\}\': true,\n \'\\\\rbrace\': true,\n \'\\\\rangle\': true,\n \'\\\\rceil\': true,\n \'\\\\rfloor\': true,\n \'\\\\rgroup\': true,\n \'\\\\rmoustache\': true,\n \'\\\\right\': true,\n \'\\\\bigr\': true,\n \'\\\\biggr\': true,\n \'\\\\Bigr\': true,\n \'\\\\Biggr\': true,\n // \\extra@ also tests for the following:\n \'$\': true,\n // \\extrap@ checks for the following:\n \';\': true,\n \'.\': true,\n \',\': true\n};\ndefineMacro("\\\\dotso", function (context) {\n const next = context.future().text;\n\n if (next in spaceAfterDots) {\n return "\\\\ldots\\\\,";\n } else {\n return "\\\\ldots";\n }\n});\ndefineMacro("\\\\dotsc", function (context) {\n const next = context.future().text; // \\dotsc uses \\extra@ but not \\extrap@, instead specially checking for\n // \';\' and \'.\', but doesn\'t check for \',\'.\n\n if (next in spaceAfterDots && next !== \',\') {\n return "\\\\ldots\\\\,";\n } else {\n return "\\\\ldots";\n }\n});\ndefineMacro("\\\\cdots", function (context) {\n const next = context.future().text;\n\n if (next in spaceAfterDots) {\n return "\\\\@cdots\\\\,";\n } else {\n return "\\\\@cdots";\n }\n});\ndefineMacro("\\\\dotsb", "\\\\cdots");\ndefineMacro("\\\\dotsm", "\\\\cdots");\ndefineMacro("\\\\dotsi", "\\\\!\\\\cdots"); // amsmath doesn\'t actually define \\dotsx, but \\dots followed by a macro\n// starting with \\DOTSX implies \\dotso, and then \\extra@ detects this case\n// and forces the added `\\,`.\n\ndefineMacro("\\\\dotsx", "\\\\ldots\\\\,"); // \\let\\DOTSI\\relax\n// \\let\\DOTSB\\relax\n// \\let\\DOTSX\\relax\n\ndefineMacro("\\\\DOTSI", "\\\\relax");\ndefineMacro("\\\\DOTSB", "\\\\relax");\ndefineMacro("\\\\DOTSX", "\\\\relax"); // Spacing, based on amsmath.sty\'s override of LaTeX defaults\n// \\DeclareRobustCommand{\\tmspace}[3]{%\n// \\ifmmode\\mskip#1#2\\else\\kern#1#3\\fi\\relax}\n\ndefineMacro("\\\\tmspace", "\\\\TextOrMath{\\\\kern#1#3}{\\\\mskip#1#2}\\\\relax"); // \\renewcommand{\\,}{\\tmspace+\\thinmuskip{.1667em}}\n// TODO: math mode should use \\thinmuskip\n\ndefineMacro("\\\\,", "\\\\tmspace+{3mu}{.1667em}"); // \\let\\thinspace\\,\n\ndefineMacro("\\\\thinspace", "\\\\,"); // \\def\\>{\\mskip\\medmuskip}\n// \\renewcommand{\\:}{\\tmspace+\\medmuskip{.2222em}}\n// TODO: \\> and math mode of \\: should use \\medmuskip = 4mu plus 2mu minus 4mu\n\ndefineMacro("\\\\>", "\\\\mskip{4mu}");\ndefineMacro("\\\\:", "\\\\tmspace+{4mu}{.2222em}"); // \\let\\medspace\\:\n\ndefineMacro("\\\\medspace", "\\\\:"); // \\renewcommand{\\;}{\\tmspace+\\thickmuskip{.2777em}}\n// TODO: math mode should use \\thickmuskip = 5mu plus 5mu\n\ndefineMacro("\\\\;", "\\\\tmspace+{5mu}{.2777em}"); // \\let\\thickspace\\;\n\ndefineMacro("\\\\thickspace", "\\\\;"); // \\renewcommand{\\!}{\\tmspace-\\thinmuskip{.1667em}}\n// TODO: math mode should use \\thinmuskip\n\ndefineMacro("\\\\!", "\\\\tmspace-{3mu}{.1667em}"); // \\let\\negthinspace\\!\n\ndefineMacro("\\\\negthinspace", "\\\\!"); // \\newcommand{\\negmedspace}{\\tmspace-\\medmuskip{.2222em}}\n// TODO: math mode should use \\medmuskip\n\ndefineMacro("\\\\negmedspace", "\\\\tmspace-{4mu}{.2222em}"); // \\newcommand{\\negthickspace}{\\tmspace-\\thickmuskip{.2777em}}\n// TODO: math mode should use \\thickmuskip\n\ndefineMacro("\\\\negthickspace", "\\\\tmspace-{5mu}{.277em}"); // \\def\\enspace{\\kern.5em }\n\ndefineMacro("\\\\enspace", "\\\\kern.5em "); // \\def\\enskip{\\hskip.5em\\relax}\n\ndefineMacro("\\\\enskip", "\\\\hskip.5em\\\\relax"); // \\def\\quad{\\hskip1em\\relax}\n\ndefineMacro("\\\\quad", "\\\\hskip1em\\\\relax"); // \\def\\qquad{\\hskip2em\\relax}\n\ndefineMacro("\\\\qquad", "\\\\hskip2em\\\\relax"); // \\tag@in@display form of \\tag\n\ndefineMacro("\\\\tag", "\\\\@ifstar\\\\tag@literal\\\\tag@paren");\ndefineMacro("\\\\tag@paren", "\\\\tag@literal{({#1})}");\ndefineMacro("\\\\tag@literal", context => {\n if (context.macros.get("\\\\df@tag")) {\n throw new src_ParseError("Multiple \\\\tag");\n }\n\n return "\\\\gdef\\\\df@tag{\\\\text{#1}}";\n}); // \\renewcommand{\\bmod}{\\nonscript\\mskip-\\medmuskip\\mkern5mu\\mathbin\n// {\\operator@font mod}\\penalty900\n// \\mkern5mu\\nonscript\\mskip-\\medmuskip}\n// \\newcommand{\\pod}[1]{\\allowbreak\n// \\if@display\\mkern18mu\\else\\mkern8mu\\fi(#1)}\n// \\renewcommand{\\pmod}[1]{\\pod{{\\operator@font mod}\\mkern6mu#1}}\n// \\newcommand{\\mod}[1]{\\allowbreak\\if@display\\mkern18mu\n// \\else\\mkern12mu\\fi{\\operator@font mod}\\,\\,#1}\n// TODO: math mode should use \\medmuskip = 4mu plus 2mu minus 4mu\n\ndefineMacro("\\\\bmod", "\\\\mathchoice{\\\\mskip1mu}{\\\\mskip1mu}{\\\\mskip5mu}{\\\\mskip5mu}" + "\\\\mathbin{\\\\rm mod}" + "\\\\mathchoice{\\\\mskip1mu}{\\\\mskip1mu}{\\\\mskip5mu}{\\\\mskip5mu}");\ndefineMacro("\\\\pod", "\\\\allowbreak" + "\\\\mathchoice{\\\\mkern18mu}{\\\\mkern8mu}{\\\\mkern8mu}{\\\\mkern8mu}(#1)");\ndefineMacro("\\\\pmod", "\\\\pod{{\\\\rm mod}\\\\mkern6mu#1}");\ndefineMacro("\\\\mod", "\\\\allowbreak" + "\\\\mathchoice{\\\\mkern18mu}{\\\\mkern12mu}{\\\\mkern12mu}{\\\\mkern12mu}" + "{\\\\rm mod}\\\\,\\\\,#1"); //////////////////////////////////////////////////////////////////////\n// LaTeX source2e\n// \\expandafter\\let\\expandafter\\@normalcr\n// \\csname\\expandafter\\@gobble\\string\\\\ \\endcsname\n// \\DeclareRobustCommand\\newline{\\@normalcr\\relax}\n\ndefineMacro("\\\\newline", "\\\\\\\\\\\\relax"); // \\def\\TeX{T\\kern-.1667em\\lower.5ex\\hbox{E}\\kern-.125emX\\@}\n// TODO: Doesn\'t normally work in math mode because \\@ fails. KaTeX doesn\'t\n// support \\@ yet, so that\'s omitted, and we add \\text so that the result\n// doesn\'t look funny in math mode.\n\ndefineMacro("\\\\TeX", "\\\\textrm{\\\\html@mathml{" + "T\\\\kern-.1667em\\\\raisebox{-.5ex}{E}\\\\kern-.125emX" + "}{TeX}}"); // \\DeclareRobustCommand{\\LaTeX}{L\\kern-.36em%\n// {\\sbox\\z@ T%\n// \\vbox to\\ht\\z@{\\hbox{\\check@mathfonts\n// \\fontsize\\sf@size\\z@\n// \\math@fontsfalse\\selectfont\n// A}%\n// \\vss}%\n// }%\n// \\kern-.15em%\n// \\TeX}\n// This code aligns the top of the A with the T (from the perspective of TeX\'s\n// boxes, though visually the A appears to extend above slightly).\n// We compute the corresponding \\raisebox when A is rendered in \\normalsize\n// \\scriptstyle, which has a scale factor of 0.7 (see Options.js).\n\nconst latexRaiseA = makeEm(fontMetricsData[\'Main-Regular\']["T".charCodeAt(0)][1] - 0.7 * fontMetricsData[\'Main-Regular\']["A".charCodeAt(0)][1]);\ndefineMacro("\\\\LaTeX", "\\\\textrm{\\\\html@mathml{" + ("L\\\\kern-.36em\\\\raisebox{" + latexRaiseA + "}{\\\\scriptstyle A}") + "\\\\kern-.15em\\\\TeX}{LaTeX}}"); // New KaTeX logo based on tweaking LaTeX logo\n\ndefineMacro("\\\\KaTeX", "\\\\textrm{\\\\html@mathml{" + ("K\\\\kern-.17em\\\\raisebox{" + latexRaiseA + "}{\\\\scriptstyle A}") + "\\\\kern-.15em\\\\TeX}{KaTeX}}"); // \\DeclareRobustCommand\\hspace{\\@ifstar\\@hspacer\\@hspace}\n// \\def\\@hspace#1{\\hskip #1\\relax}\n// \\def\\@hspacer#1{\\vrule \\@width\\z@\\nobreak\n// \\hskip #1\\hskip \\z@skip}\n\ndefineMacro("\\\\hspace", "\\\\@ifstar\\\\@hspacer\\\\@hspace");\ndefineMacro("\\\\@hspace", "\\\\hskip #1\\\\relax");\ndefineMacro("\\\\@hspacer", "\\\\rule{0pt}{0pt}\\\\hskip #1\\\\relax"); //////////////////////////////////////////////////////////////////////\n// mathtools.sty\n//\\providecommand\\ordinarycolon{:}\n\ndefineMacro("\\\\ordinarycolon", ":"); //\\def\\vcentcolon{\\mathrel{\\mathop\\ordinarycolon}}\n//TODO(edemaine): Not yet centered. Fix via \\raisebox or #726\n\ndefineMacro("\\\\vcentcolon", "\\\\mathrel{\\\\mathop\\\\ordinarycolon}"); // \\providecommand*\\dblcolon{\\vcentcolon\\mathrel{\\mkern-.9mu}\\vcentcolon}\n\ndefineMacro("\\\\dblcolon", "\\\\html@mathml{" + "\\\\mathrel{\\\\vcentcolon\\\\mathrel{\\\\mkern-.9mu}\\\\vcentcolon}}" + "{\\\\mathop{\\\\char\\"2237}}"); // \\providecommand*\\coloneqq{\\vcentcolon\\mathrel{\\mkern-1.2mu}=}\n\ndefineMacro("\\\\coloneqq", "\\\\html@mathml{" + "\\\\mathrel{\\\\vcentcolon\\\\mathrel{\\\\mkern-1.2mu}=}}" + "{\\\\mathop{\\\\char\\"2254}}"); // ≔\n// \\providecommand*\\Coloneqq{\\dblcolon\\mathrel{\\mkern-1.2mu}=}\n\ndefineMacro("\\\\Coloneqq", "\\\\html@mathml{" + "\\\\mathrel{\\\\dblcolon\\\\mathrel{\\\\mkern-1.2mu}=}}" + "{\\\\mathop{\\\\char\\"2237\\\\char\\"3d}}"); // \\providecommand*\\coloneq{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}\n\ndefineMacro("\\\\coloneq", "\\\\html@mathml{" + "\\\\mathrel{\\\\vcentcolon\\\\mathrel{\\\\mkern-1.2mu}\\\\mathrel{-}}}" + "{\\\\mathop{\\\\char\\"3a\\\\char\\"2212}}"); // \\providecommand*\\Coloneq{\\dblcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}\n\ndefineMacro("\\\\Coloneq", "\\\\html@mathml{" + "\\\\mathrel{\\\\dblcolon\\\\mathrel{\\\\mkern-1.2mu}\\\\mathrel{-}}}" + "{\\\\mathop{\\\\char\\"2237\\\\char\\"2212}}"); // \\providecommand*\\eqqcolon{=\\mathrel{\\mkern-1.2mu}\\vcentcolon}\n\ndefineMacro("\\\\eqqcolon", "\\\\html@mathml{" + "\\\\mathrel{=\\\\mathrel{\\\\mkern-1.2mu}\\\\vcentcolon}}" + "{\\\\mathop{\\\\char\\"2255}}"); // ≕\n// \\providecommand*\\Eqqcolon{=\\mathrel{\\mkern-1.2mu}\\dblcolon}\n\ndefineMacro("\\\\Eqqcolon", "\\\\html@mathml{" + "\\\\mathrel{=\\\\mathrel{\\\\mkern-1.2mu}\\\\dblcolon}}" + "{\\\\mathop{\\\\char\\"3d\\\\char\\"2237}}"); // \\providecommand*\\eqcolon{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\vcentcolon}\n\ndefineMacro("\\\\eqcolon", "\\\\html@mathml{" + "\\\\mathrel{\\\\mathrel{-}\\\\mathrel{\\\\mkern-1.2mu}\\\\vcentcolon}}" + "{\\\\mathop{\\\\char\\"2239}}"); // \\providecommand*\\Eqcolon{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\dblcolon}\n\ndefineMacro("\\\\Eqcolon", "\\\\html@mathml{" + "\\\\mathrel{\\\\mathrel{-}\\\\mathrel{\\\\mkern-1.2mu}\\\\dblcolon}}" + "{\\\\mathop{\\\\char\\"2212\\\\char\\"2237}}"); // \\providecommand*\\colonapprox{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\approx}\n\ndefineMacro("\\\\colonapprox", "\\\\html@mathml{" + "\\\\mathrel{\\\\vcentcolon\\\\mathrel{\\\\mkern-1.2mu}\\\\approx}}" + "{\\\\mathop{\\\\char\\"3a\\\\char\\"2248}}"); // \\providecommand*\\Colonapprox{\\dblcolon\\mathrel{\\mkern-1.2mu}\\approx}\n\ndefineMacro("\\\\Colonapprox", "\\\\html@mathml{" + "\\\\mathrel{\\\\dblcolon\\\\mathrel{\\\\mkern-1.2mu}\\\\approx}}" + "{\\\\mathop{\\\\char\\"2237\\\\char\\"2248}}"); // \\providecommand*\\colonsim{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\sim}\n\ndefineMacro("\\\\colonsim", "\\\\html@mathml{" + "\\\\mathrel{\\\\vcentcolon\\\\mathrel{\\\\mkern-1.2mu}\\\\sim}}" + "{\\\\mathop{\\\\char\\"3a\\\\char\\"223c}}"); // \\providecommand*\\Colonsim{\\dblcolon\\mathrel{\\mkern-1.2mu}\\sim}\n\ndefineMacro("\\\\Colonsim", "\\\\html@mathml{" + "\\\\mathrel{\\\\dblcolon\\\\mathrel{\\\\mkern-1.2mu}\\\\sim}}" + "{\\\\mathop{\\\\char\\"2237\\\\char\\"223c}}"); // Some Unicode characters are implemented with macros to mathtools functions.\n\ndefineMacro("\\u2237", "\\\\dblcolon"); // ::\n\ndefineMacro("\\u2239", "\\\\eqcolon"); // -:\n\ndefineMacro("\\u2254", "\\\\coloneqq"); // :=\n\ndefineMacro("\\u2255", "\\\\eqqcolon"); // =:\n\ndefineMacro("\\u2A74", "\\\\Coloneqq"); // ::=\n//////////////////////////////////////////////////////////////////////\n// colonequals.sty\n// Alternate names for mathtools\'s macros:\n\ndefineMacro("\\\\ratio", "\\\\vcentcolon");\ndefineMacro("\\\\coloncolon", "\\\\dblcolon");\ndefineMacro("\\\\colonequals", "\\\\coloneqq");\ndefineMacro("\\\\coloncolonequals", "\\\\Coloneqq");\ndefineMacro("\\\\equalscolon", "\\\\eqqcolon");\ndefineMacro("\\\\equalscoloncolon", "\\\\Eqqcolon");\ndefineMacro("\\\\colonminus", "\\\\coloneq");\ndefineMacro("\\\\coloncolonminus", "\\\\Coloneq");\ndefineMacro("\\\\minuscolon", "\\\\eqcolon");\ndefineMacro("\\\\minuscoloncolon", "\\\\Eqcolon"); // \\colonapprox name is same in mathtools and colonequals.\n\ndefineMacro("\\\\coloncolonapprox", "\\\\Colonapprox"); // \\colonsim name is same in mathtools and colonequals.\n\ndefineMacro("\\\\coloncolonsim", "\\\\Colonsim"); // Additional macros, implemented by analogy with mathtools definitions:\n\ndefineMacro("\\\\simcolon", "\\\\mathrel{\\\\sim\\\\mathrel{\\\\mkern-1.2mu}\\\\vcentcolon}");\ndefineMacro("\\\\simcoloncolon", "\\\\mathrel{\\\\sim\\\\mathrel{\\\\mkern-1.2mu}\\\\dblcolon}");\ndefineMacro("\\\\approxcolon", "\\\\mathrel{\\\\approx\\\\mathrel{\\\\mkern-1.2mu}\\\\vcentcolon}");\ndefineMacro("\\\\approxcoloncolon", "\\\\mathrel{\\\\approx\\\\mathrel{\\\\mkern-1.2mu}\\\\dblcolon}"); // Present in newtxmath, pxfonts and txfonts\n\ndefineMacro("\\\\notni", "\\\\html@mathml{\\\\not\\\\ni}{\\\\mathrel{\\\\char`\\u220C}}");\ndefineMacro("\\\\limsup", "\\\\DOTSB\\\\operatorname*{lim\\\\,sup}");\ndefineMacro("\\\\liminf", "\\\\DOTSB\\\\operatorname*{lim\\\\,inf}"); //////////////////////////////////////////////////////////////////////\n// From amsopn.sty\n\ndefineMacro("\\\\injlim", "\\\\DOTSB\\\\operatorname*{inj\\\\,lim}");\ndefineMacro("\\\\projlim", "\\\\DOTSB\\\\operatorname*{proj\\\\,lim}");\ndefineMacro("\\\\varlimsup", "\\\\DOTSB\\\\operatorname*{\\\\overline{lim}}");\ndefineMacro("\\\\varliminf", "\\\\DOTSB\\\\operatorname*{\\\\underline{lim}}");\ndefineMacro("\\\\varinjlim", "\\\\DOTSB\\\\operatorname*{\\\\underrightarrow{lim}}");\ndefineMacro("\\\\varprojlim", "\\\\DOTSB\\\\operatorname*{\\\\underleftarrow{lim}}"); //////////////////////////////////////////////////////////////////////\n// MathML alternates for KaTeX glyphs in the Unicode private area\n\ndefineMacro("\\\\gvertneqq", "\\\\html@mathml{\\\\@gvertneqq}{\\u2269}");\ndefineMacro("\\\\lvertneqq", "\\\\html@mathml{\\\\@lvertneqq}{\\u2268}");\ndefineMacro("\\\\ngeqq", "\\\\html@mathml{\\\\@ngeqq}{\\u2271}");\ndefineMacro("\\\\ngeqslant", "\\\\html@mathml{\\\\@ngeqslant}{\\u2271}");\ndefineMacro("\\\\nleqq", "\\\\html@mathml{\\\\@nleqq}{\\u2270}");\ndefineMacro("\\\\nleqslant", "\\\\html@mathml{\\\\@nleqslant}{\\u2270}");\ndefineMacro("\\\\nshortmid", "\\\\html@mathml{\\\\@nshortmid}{∤}");\ndefineMacro("\\\\nshortparallel", "\\\\html@mathml{\\\\@nshortparallel}{∦}");\ndefineMacro("\\\\nsubseteqq", "\\\\html@mathml{\\\\@nsubseteqq}{\\u2288}");\ndefineMacro("\\\\nsupseteqq", "\\\\html@mathml{\\\\@nsupseteqq}{\\u2289}");\ndefineMacro("\\\\varsubsetneq", "\\\\html@mathml{\\\\@varsubsetneq}{⊊}");\ndefineMacro("\\\\varsubsetneqq", "\\\\html@mathml{\\\\@varsubsetneqq}{⫋}");\ndefineMacro("\\\\varsupsetneq", "\\\\html@mathml{\\\\@varsupsetneq}{⊋}");\ndefineMacro("\\\\varsupsetneqq", "\\\\html@mathml{\\\\@varsupsetneqq}{⫌}");\ndefineMacro("\\\\imath", "\\\\html@mathml{\\\\@imath}{\\u0131}");\ndefineMacro("\\\\jmath", "\\\\html@mathml{\\\\@jmath}{\\u0237}"); //////////////////////////////////////////////////////////////////////\n// stmaryrd and semantic\n// The stmaryrd and semantic packages render the next four items by calling a\n// glyph. Those glyphs do not exist in the KaTeX fonts. Hence the macros.\n\ndefineMacro("\\\\llbracket", "\\\\html@mathml{" + "\\\\mathopen{[\\\\mkern-3.2mu[}}" + "{\\\\mathopen{\\\\char`\\u27e6}}");\ndefineMacro("\\\\rrbracket", "\\\\html@mathml{" + "\\\\mathclose{]\\\\mkern-3.2mu]}}" + "{\\\\mathclose{\\\\char`\\u27e7}}");\ndefineMacro("\\u27e6", "\\\\llbracket"); // blackboard bold [\n\ndefineMacro("\\u27e7", "\\\\rrbracket"); // blackboard bold ]\n\ndefineMacro("\\\\lBrace", "\\\\html@mathml{" + "\\\\mathopen{\\\\{\\\\mkern-3.2mu[}}" + "{\\\\mathopen{\\\\char`\\u2983}}");\ndefineMacro("\\\\rBrace", "\\\\html@mathml{" + "\\\\mathclose{]\\\\mkern-3.2mu\\\\}}}" + "{\\\\mathclose{\\\\char`\\u2984}}");\ndefineMacro("\\u2983", "\\\\lBrace"); // blackboard bold {\n\ndefineMacro("\\u2984", "\\\\rBrace"); // blackboard bold }\n// TODO: Create variable sized versions of the last two items. I believe that\n// will require new font glyphs.\n// The stmaryrd function `\\minuso` provides a "Plimsoll" symbol that\n// superimposes the characters \\circ and \\mathminus. Used in chemistry.\n\ndefineMacro("\\\\minuso", "\\\\mathbin{\\\\html@mathml{" + "{\\\\mathrlap{\\\\mathchoice{\\\\kern{0.145em}}{\\\\kern{0.145em}}" + "{\\\\kern{0.1015em}}{\\\\kern{0.0725em}}\\\\circ}{-}}}" + "{\\\\char`⦵}}");\ndefineMacro("⦵", "\\\\minuso"); //////////////////////////////////////////////////////////////////////\n// texvc.sty\n// The texvc package contains macros available in mediawiki pages.\n// We omit the functions deprecated at\n// https://en.wikipedia.org/wiki/Help:Displaying_a_formula#Deprecated_syntax\n// We also omit texvc\'s \\O, which conflicts with \\text{\\O}\n\ndefineMacro("\\\\darr", "\\\\downarrow");\ndefineMacro("\\\\dArr", "\\\\Downarrow");\ndefineMacro("\\\\Darr", "\\\\Downarrow");\ndefineMacro("\\\\lang", "\\\\langle");\ndefineMacro("\\\\rang", "\\\\rangle");\ndefineMacro("\\\\uarr", "\\\\uparrow");\ndefineMacro("\\\\uArr", "\\\\Uparrow");\ndefineMacro("\\\\Uarr", "\\\\Uparrow");\ndefineMacro("\\\\N", "\\\\mathbb{N}");\ndefineMacro("\\\\R", "\\\\mathbb{R}");\ndefineMacro("\\\\Z", "\\\\mathbb{Z}");\ndefineMacro("\\\\alef", "\\\\aleph");\ndefineMacro("\\\\alefsym", "\\\\aleph");\ndefineMacro("\\\\Alpha", "\\\\mathrm{A}");\ndefineMacro("\\\\Beta", "\\\\mathrm{B}");\ndefineMacro("\\\\bull", "\\\\bullet");\ndefineMacro("\\\\Chi", "\\\\mathrm{X}");\ndefineMacro("\\\\clubs", "\\\\clubsuit");\ndefineMacro("\\\\cnums", "\\\\mathbb{C}");\ndefineMacro("\\\\Complex", "\\\\mathbb{C}");\ndefineMacro("\\\\Dagger", "\\\\ddagger");\ndefineMacro("\\\\diamonds", "\\\\diamondsuit");\ndefineMacro("\\\\empty", "\\\\emptyset");\ndefineMacro("\\\\Epsilon", "\\\\mathrm{E}");\ndefineMacro("\\\\Eta", "\\\\mathrm{H}");\ndefineMacro("\\\\exist", "\\\\exists");\ndefineMacro("\\\\harr", "\\\\leftrightarrow");\ndefineMacro("\\\\hArr", "\\\\Leftrightarrow");\ndefineMacro("\\\\Harr", "\\\\Leftrightarrow");\ndefineMacro("\\\\hearts", "\\\\heartsuit");\ndefineMacro("\\\\image", "\\\\Im");\ndefineMacro("\\\\infin", "\\\\infty");\ndefineMacro("\\\\Iota", "\\\\mathrm{I}");\ndefineMacro("\\\\isin", "\\\\in");\ndefineMacro("\\\\Kappa", "\\\\mathrm{K}");\ndefineMacro("\\\\larr", "\\\\leftarrow");\ndefineMacro("\\\\lArr", "\\\\Leftarrow");\ndefineMacro("\\\\Larr", "\\\\Leftarrow");\ndefineMacro("\\\\lrarr", "\\\\leftrightarrow");\ndefineMacro("\\\\lrArr", "\\\\Leftrightarrow");\ndefineMacro("\\\\Lrarr", "\\\\Leftrightarrow");\ndefineMacro("\\\\Mu", "\\\\mathrm{M}");\ndefineMacro("\\\\natnums", "\\\\mathbb{N}");\ndefineMacro("\\\\Nu", "\\\\mathrm{N}");\ndefineMacro("\\\\Omicron", "\\\\mathrm{O}");\ndefineMacro("\\\\plusmn", "\\\\pm");\ndefineMacro("\\\\rarr", "\\\\rightarrow");\ndefineMacro("\\\\rArr", "\\\\Rightarrow");\ndefineMacro("\\\\Rarr", "\\\\Rightarrow");\ndefineMacro("\\\\real", "\\\\Re");\ndefineMacro("\\\\reals", "\\\\mathbb{R}");\ndefineMacro("\\\\Reals", "\\\\mathbb{R}");\ndefineMacro("\\\\Rho", "\\\\mathrm{P}");\ndefineMacro("\\\\sdot", "\\\\cdot");\ndefineMacro("\\\\sect", "\\\\S");\ndefineMacro("\\\\spades", "\\\\spadesuit");\ndefineMacro("\\\\sub", "\\\\subset");\ndefineMacro("\\\\sube", "\\\\subseteq");\ndefineMacro("\\\\supe", "\\\\supseteq");\ndefineMacro("\\\\Tau", "\\\\mathrm{T}");\ndefineMacro("\\\\thetasym", "\\\\vartheta"); // TODO: defineMacro("\\\\varcoppa", "\\\\\\mbox{\\\\coppa}");\n\ndefineMacro("\\\\weierp", "\\\\wp");\ndefineMacro("\\\\Zeta", "\\\\mathrm{Z}"); //////////////////////////////////////////////////////////////////////\n// statmath.sty\n// https://ctan.math.illinois.edu/macros/latex/contrib/statmath/statmath.pdf\n\ndefineMacro("\\\\argmin", "\\\\DOTSB\\\\operatorname*{arg\\\\,min}");\ndefineMacro("\\\\argmax", "\\\\DOTSB\\\\operatorname*{arg\\\\,max}");\ndefineMacro("\\\\plim", "\\\\DOTSB\\\\mathop{\\\\operatorname{plim}}\\\\limits"); //////////////////////////////////////////////////////////////////////\n// braket.sty\n// http://ctan.math.washington.edu/tex-archive/macros/latex/contrib/braket/braket.pdf\n\ndefineMacro("\\\\bra", "\\\\mathinner{\\\\langle{#1}|}");\ndefineMacro("\\\\ket", "\\\\mathinner{|{#1}\\\\rangle}");\ndefineMacro("\\\\braket", "\\\\mathinner{\\\\langle{#1}\\\\rangle}");\ndefineMacro("\\\\Bra", "\\\\left\\\\langle#1\\\\right|");\ndefineMacro("\\\\Ket", "\\\\left|#1\\\\right\\\\rangle");\n\nconst braketHelper = one => context => {\n const left = context.consumeArg().tokens;\n const middle = context.consumeArg().tokens;\n const middleDouble = context.consumeArg().tokens;\n const right = context.consumeArg().tokens;\n const oldMiddle = context.macros.get("|");\n const oldMiddleDouble = context.macros.get("\\\\|");\n context.macros.beginGroup();\n\n const midMacro = double => context => {\n if (one) {\n // Only modify the first instance of | or \\|\n context.macros.set("|", oldMiddle);\n\n if (middleDouble.length) {\n context.macros.set("\\\\|", oldMiddleDouble);\n }\n }\n\n let doubled = double;\n\n if (!double && middleDouble.length) {\n // Mimic \\@ifnextchar\n const nextToken = context.future();\n\n if (nextToken.text === "|") {\n context.popToken();\n doubled = true;\n }\n }\n\n return {\n tokens: doubled ? middleDouble : middle,\n numArgs: 0\n };\n };\n\n context.macros.set("|", midMacro(false));\n\n if (middleDouble.length) {\n context.macros.set("\\\\|", midMacro(true));\n }\n\n const arg = context.consumeArg().tokens;\n const expanded = context.expandTokens([...right, ...arg, ...left // reversed\n ]);\n context.macros.endGroup();\n return {\n tokens: expanded.reverse(),\n numArgs: 0\n };\n};\n\ndefineMacro("\\\\bra@ket", braketHelper(false));\ndefineMacro("\\\\bra@set", braketHelper(true));\ndefineMacro("\\\\Braket", "\\\\bra@ket{\\\\left\\\\langle}" + "{\\\\,\\\\middle\\\\vert\\\\,}{\\\\,\\\\middle\\\\vert\\\\,}{\\\\right\\\\rangle}");\ndefineMacro("\\\\Set", "\\\\bra@set{\\\\left\\\\{\\\\:}" + "{\\\\;\\\\middle\\\\vert\\\\;}{\\\\;\\\\middle\\\\Vert\\\\;}{\\\\:\\\\right\\\\}}");\ndefineMacro("\\\\set", "\\\\bra@set{\\\\{\\\\,}{\\\\mid}{}{\\\\,\\\\}}"); // has no support for special || or \\|\n//////////////////////////////////////////////////////////////////////\n// actuarialangle.dtx\n\ndefineMacro("\\\\angln", "{\\\\angl n}"); // Custom Khan Academy colors, should be moved to an optional package\n\ndefineMacro("\\\\blue", "\\\\textcolor{##6495ed}{#1}");\ndefineMacro("\\\\orange", "\\\\textcolor{##ffa500}{#1}");\ndefineMacro("\\\\pink", "\\\\textcolor{##ff00af}{#1}");\ndefineMacro("\\\\red", "\\\\textcolor{##df0030}{#1}");\ndefineMacro("\\\\green", "\\\\textcolor{##28ae7b}{#1}");\ndefineMacro("\\\\gray", "\\\\textcolor{gray}{#1}");\ndefineMacro("\\\\purple", "\\\\textcolor{##9d38bd}{#1}");\ndefineMacro("\\\\blueA", "\\\\textcolor{##ccfaff}{#1}");\ndefineMacro("\\\\blueB", "\\\\textcolor{##80f6ff}{#1}");\ndefineMacro("\\\\blueC", "\\\\textcolor{##63d9ea}{#1}");\ndefineMacro("\\\\blueD", "\\\\textcolor{##11accd}{#1}");\ndefineMacro("\\\\blueE", "\\\\textcolor{##0c7f99}{#1}");\ndefineMacro("\\\\tealA", "\\\\textcolor{##94fff5}{#1}");\ndefineMacro("\\\\tealB", "\\\\textcolor{##26edd5}{#1}");\ndefineMacro("\\\\tealC", "\\\\textcolor{##01d1c1}{#1}");\ndefineMacro("\\\\tealD", "\\\\textcolor{##01a995}{#1}");\ndefineMacro("\\\\tealE", "\\\\textcolor{##208170}{#1}");\ndefineMacro("\\\\greenA", "\\\\textcolor{##b6ffb0}{#1}");\ndefineMacro("\\\\greenB", "\\\\textcolor{##8af281}{#1}");\ndefineMacro("\\\\greenC", "\\\\textcolor{##74cf70}{#1}");\ndefineMacro("\\\\greenD", "\\\\textcolor{##1fab54}{#1}");\ndefineMacro("\\\\greenE", "\\\\textcolor{##0d923f}{#1}");\ndefineMacro("\\\\goldA", "\\\\textcolor{##ffd0a9}{#1}");\ndefineMacro("\\\\goldB", "\\\\textcolor{##ffbb71}{#1}");\ndefineMacro("\\\\goldC", "\\\\textcolor{##ff9c39}{#1}");\ndefineMacro("\\\\goldD", "\\\\textcolor{##e07d10}{#1}");\ndefineMacro("\\\\goldE", "\\\\textcolor{##a75a05}{#1}");\ndefineMacro("\\\\redA", "\\\\textcolor{##fca9a9}{#1}");\ndefineMacro("\\\\redB", "\\\\textcolor{##ff8482}{#1}");\ndefineMacro("\\\\redC", "\\\\textcolor{##f9685d}{#1}");\ndefineMacro("\\\\redD", "\\\\textcolor{##e84d39}{#1}");\ndefineMacro("\\\\redE", "\\\\textcolor{##bc2612}{#1}");\ndefineMacro("\\\\maroonA", "\\\\textcolor{##ffbde0}{#1}");\ndefineMacro("\\\\maroonB", "\\\\textcolor{##ff92c6}{#1}");\ndefineMacro("\\\\maroonC", "\\\\textcolor{##ed5fa6}{#1}");\ndefineMacro("\\\\maroonD", "\\\\textcolor{##ca337c}{#1}");\ndefineMacro("\\\\maroonE", "\\\\textcolor{##9e034e}{#1}");\ndefineMacro("\\\\purpleA", "\\\\textcolor{##ddd7ff}{#1}");\ndefineMacro("\\\\purpleB", "\\\\textcolor{##c6b9fc}{#1}");\ndefineMacro("\\\\purpleC", "\\\\textcolor{##aa87ff}{#1}");\ndefineMacro("\\\\purpleD", "\\\\textcolor{##7854ab}{#1}");\ndefineMacro("\\\\purpleE", "\\\\textcolor{##543b78}{#1}");\ndefineMacro("\\\\mintA", "\\\\textcolor{##f5f9e8}{#1}");\ndefineMacro("\\\\mintB", "\\\\textcolor{##edf2df}{#1}");\ndefineMacro("\\\\mintC", "\\\\textcolor{##e0e5cc}{#1}");\ndefineMacro("\\\\grayA", "\\\\textcolor{##f6f7f7}{#1}");\ndefineMacro("\\\\grayB", "\\\\textcolor{##f0f1f2}{#1}");\ndefineMacro("\\\\grayC", "\\\\textcolor{##e3e5e6}{#1}");\ndefineMacro("\\\\grayD", "\\\\textcolor{##d6d8da}{#1}");\ndefineMacro("\\\\grayE", "\\\\textcolor{##babec2}{#1}");\ndefineMacro("\\\\grayF", "\\\\textcolor{##888d93}{#1}");\ndefineMacro("\\\\grayG", "\\\\textcolor{##626569}{#1}");\ndefineMacro("\\\\grayH", "\\\\textcolor{##3b3e40}{#1}");\ndefineMacro("\\\\grayI", "\\\\textcolor{##21242c}{#1}");\ndefineMacro("\\\\kaBlue", "\\\\textcolor{##314453}{#1}");\ndefineMacro("\\\\kaGreen", "\\\\textcolor{##71B307}{#1}");\n;// CONCATENATED MODULE: ./src/MacroExpander.js\n/**\n * This file contains the “gullet” where macros are expanded\n * until only non-macro tokens remain.\n */\n\n\n\n\n\n\n\n// List of commands that act like macros but aren\'t defined as a macro,\n// function, or symbol. Used in `isDefined`.\nconst implicitCommands = {\n "^": true,\n // Parser.js\n "_": true,\n // Parser.js\n "\\\\limits": true,\n // Parser.js\n "\\\\nolimits": true // Parser.js\n\n};\nclass MacroExpander {\n constructor(input, settings, mode) {\n this.settings = void 0;\n this.expansionCount = void 0;\n this.lexer = void 0;\n this.macros = void 0;\n this.stack = void 0;\n this.mode = void 0;\n this.settings = settings;\n this.expansionCount = 0;\n this.feed(input); // Make new global namespace\n\n this.macros = new Namespace(src_macros, settings.macros);\n this.mode = mode;\n this.stack = []; // contains tokens in REVERSE order\n }\n /**\n * Feed a new input string to the same MacroExpander\n * (with existing macros etc.).\n */\n\n\n feed(input) {\n this.lexer = new Lexer(input, this.settings);\n }\n /**\n * Switches between "text" and "math" modes.\n */\n\n\n switchMode(newMode) {\n this.mode = newMode;\n }\n /**\n * Start a new group nesting within all namespaces.\n */\n\n\n beginGroup() {\n this.macros.beginGroup();\n }\n /**\n * End current group nesting within all namespaces.\n */\n\n\n endGroup() {\n this.macros.endGroup();\n }\n /**\n * Ends all currently nested groups (if any), restoring values before the\n * groups began. Useful in case of an error in the middle of parsing.\n */\n\n\n endGroups() {\n this.macros.endGroups();\n }\n /**\n * Returns the topmost token on the stack, without expanding it.\n * Similar in behavior to TeX\'s `\\futurelet`.\n */\n\n\n future() {\n if (this.stack.length === 0) {\n this.pushToken(this.lexer.lex());\n }\n\n return this.stack[this.stack.length - 1];\n }\n /**\n * Remove and return the next unexpanded token.\n */\n\n\n popToken() {\n this.future(); // ensure non-empty stack\n\n return this.stack.pop();\n }\n /**\n * Add a given token to the token stack. In particular, this get be used\n * to put back a token returned from one of the other methods.\n */\n\n\n pushToken(token) {\n this.stack.push(token);\n }\n /**\n * Append an array of tokens to the token stack.\n */\n\n\n pushTokens(tokens) {\n this.stack.push(...tokens);\n }\n /**\n * Find an macro argument without expanding tokens and append the array of\n * tokens to the token stack. Uses Token as a container for the result.\n */\n\n\n scanArgument(isOptional) {\n let start;\n let end;\n let tokens;\n\n if (isOptional) {\n this.consumeSpaces(); // \\@ifnextchar gobbles any space following it\n\n if (this.future().text !== "[") {\n return null;\n }\n\n start = this.popToken(); // don\'t include [ in tokens\n\n ({\n tokens,\n end\n } = this.consumeArg(["]"]));\n } else {\n ({\n tokens,\n start,\n end\n } = this.consumeArg());\n } // indicate the end of an argument\n\n\n this.pushToken(new Token("EOF", end.loc));\n this.pushTokens(tokens);\n return start.range(end, "");\n }\n /**\n * Consume all following space tokens, without expansion.\n */\n\n\n consumeSpaces() {\n for (;;) {\n const token = this.future();\n\n if (token.text === " ") {\n this.stack.pop();\n } else {\n break;\n }\n }\n }\n /**\n * Consume an argument from the token stream, and return the resulting array\n * of tokens and start/end token.\n */\n\n\n consumeArg(delims) {\n // The argument for a delimited parameter is the shortest (possibly\n // empty) sequence of tokens with properly nested {...} groups that is\n // followed ... by this particular list of non-parameter tokens.\n // The argument for an undelimited parameter is the next nonblank\n // token, unless that token is ‘{’, when the argument will be the\n // entire {...} group that follows.\n const tokens = [];\n const isDelimited = delims && delims.length > 0;\n\n if (!isDelimited) {\n // Ignore spaces between arguments. As the TeXbook says:\n // "After you have said ‘\\def\\row#1#2{...}’, you are allowed to\n // put spaces between the arguments (e.g., ‘\\row x n’), because\n // TeX doesn’t use single spaces as undelimited arguments."\n this.consumeSpaces();\n }\n\n const start = this.future();\n let tok;\n let depth = 0;\n let match = 0;\n\n do {\n tok = this.popToken();\n tokens.push(tok);\n\n if (tok.text === "{") {\n ++depth;\n } else if (tok.text === "}") {\n --depth;\n\n if (depth === -1) {\n throw new src_ParseError("Extra }", tok);\n }\n } else if (tok.text === "EOF") {\n throw new src_ParseError("Unexpected end of input in a macro argument" + ", expected \'" + (delims && isDelimited ? delims[match] : "}") + "\'", tok);\n }\n\n if (delims && isDelimited) {\n if ((depth === 0 || depth === 1 && delims[match] === "{") && tok.text === delims[match]) {\n ++match;\n\n if (match === delims.length) {\n // don\'t include delims in tokens\n tokens.splice(-match, match);\n break;\n }\n } else {\n match = 0;\n }\n }\n } while (depth !== 0 || isDelimited); // If the argument found ... has the form ‘{}’,\n // ... the outermost braces enclosing the argument are removed\n\n\n if (start.text === "{" && tokens[tokens.length - 1].text === "}") {\n tokens.pop();\n tokens.shift();\n }\n\n tokens.reverse(); // to fit in with stack order\n\n return {\n tokens,\n start,\n end: tok\n };\n }\n /**\n * Consume the specified number of (delimited) arguments from the token\n * stream and return the resulting array of arguments.\n */\n\n\n consumeArgs(numArgs, delimiters) {\n if (delimiters) {\n if (delimiters.length !== numArgs + 1) {\n throw new src_ParseError("The length of delimiters doesn\'t match the number of args!");\n }\n\n const delims = delimiters[0];\n\n for (let i = 0; i < delims.length; i++) {\n const tok = this.popToken();\n\n if (delims[i] !== tok.text) {\n throw new src_ParseError("Use of the macro doesn\'t match its definition", tok);\n }\n }\n }\n\n const args = [];\n\n for (let i = 0; i < numArgs; i++) {\n args.push(this.consumeArg(delimiters && delimiters[i + 1]).tokens);\n }\n\n return args;\n }\n /**\n * Increment `expansionCount` by the specified amount.\n * Throw an error if it exceeds `maxExpand`.\n */\n\n\n countExpansion(amount) {\n this.expansionCount += amount;\n\n if (this.expansionCount > this.settings.maxExpand) {\n throw new src_ParseError("Too many expansions: infinite loop or " + "need to increase maxExpand setting");\n }\n }\n /**\n * Expand the next token only once if possible.\n *\n * If the token is expanded, the resulting tokens will be pushed onto\n * the stack in reverse order, and the number of such tokens will be\n * returned. This number might be zero or positive.\n *\n * If not, the return value is `false`, and the next token remains at the\n * top of the stack.\n *\n * In either case, the next token will be on the top of the stack,\n * or the stack will be empty (in case of empty expansion\n * and no other tokens).\n *\n * Used to implement `expandAfterFuture` and `expandNextToken`.\n *\n * If expandableOnly, only expandable tokens are expanded and\n * an undefined control sequence results in an error.\n */\n\n\n expandOnce(expandableOnly) {\n const topToken = this.popToken();\n const name = topToken.text;\n const expansion = !topToken.noexpand ? this._getExpansion(name) : null;\n\n if (expansion == null || expandableOnly && expansion.unexpandable) {\n if (expandableOnly && expansion == null && name[0] === "\\\\" && !this.isDefined(name)) {\n throw new src_ParseError("Undefined control sequence: " + name);\n }\n\n this.pushToken(topToken);\n return false;\n }\n\n this.countExpansion(1);\n let tokens = expansion.tokens;\n const args = this.consumeArgs(expansion.numArgs, expansion.delimiters);\n\n if (expansion.numArgs) {\n // paste arguments in place of the placeholders\n tokens = tokens.slice(); // make a shallow copy\n\n for (let i = tokens.length - 1; i >= 0; --i) {\n let tok = tokens[i];\n\n if (tok.text === "#") {\n if (i === 0) {\n throw new src_ParseError("Incomplete placeholder at end of macro body", tok);\n }\n\n tok = tokens[--i]; // next token on stack\n\n if (tok.text === "#") {\n // ## → #\n tokens.splice(i + 1, 1); // drop first #\n } else if (/^[1-9]$/.test(tok.text)) {\n // replace the placeholder with the indicated argument\n tokens.splice(i, 2, ...args[+tok.text - 1]);\n } else {\n throw new src_ParseError("Not a valid argument number", tok);\n }\n }\n }\n } // Concatenate expansion onto top of stack.\n\n\n this.pushTokens(tokens);\n return tokens.length;\n }\n /**\n * Expand the next token only once (if possible), and return the resulting\n * top token on the stack (without removing anything from the stack).\n * Similar in behavior to TeX\'s `\\expandafter\\futurelet`.\n * Equivalent to expandOnce() followed by future().\n */\n\n\n expandAfterFuture() {\n this.expandOnce();\n return this.future();\n }\n /**\n * Recursively expand first token, then return first non-expandable token.\n */\n\n\n expandNextToken() {\n for (;;) {\n if (this.expandOnce() === false) {\n // fully expanded\n const token = this.stack.pop(); // the token after \\noexpand is interpreted as if its meaning\n // were ‘\\relax’\n\n if (token.treatAsRelax) {\n token.text = "\\\\relax";\n }\n\n return token;\n }\n } // Flow unable to figure out that this pathway is impossible.\n // https://github.com/facebook/flow/issues/4808\n\n\n throw new Error(); // eslint-disable-line no-unreachable\n }\n /**\n * Fully expand the given macro name and return the resulting list of\n * tokens, or return `undefined` if no such macro is defined.\n */\n\n\n expandMacro(name) {\n return this.macros.has(name) ? this.expandTokens([new Token(name)]) : undefined;\n }\n /**\n * Fully expand the given token stream and return the resulting list of\n * tokens. Note that the input tokens are in reverse order, but the\n * output tokens are in forward order.\n */\n\n\n expandTokens(tokens) {\n const output = [];\n const oldStackLength = this.stack.length;\n this.pushTokens(tokens);\n\n while (this.stack.length > oldStackLength) {\n // Expand only expandable tokens\n if (this.expandOnce(true) === false) {\n // fully expanded\n const token = this.stack.pop();\n\n if (token.treatAsRelax) {\n // the expansion of \\noexpand is the token itself\n token.noexpand = false;\n token.treatAsRelax = false;\n }\n\n output.push(token);\n }\n } // Count all of these tokens as additional expansions, to prevent\n // exponential blowup from linearly many \\edef\'s.\n\n\n this.countExpansion(output.length);\n return output;\n }\n /**\n * Fully expand the given macro name and return the result as a string,\n * or return `undefined` if no such macro is defined.\n */\n\n\n expandMacroAsText(name) {\n const tokens = this.expandMacro(name);\n\n if (tokens) {\n return tokens.map(token => token.text).join("");\n } else {\n return tokens;\n }\n }\n /**\n * Returns the expanded macro as a reversed array of tokens and a macro\n * argument count. Or returns `null` if no such macro.\n */\n\n\n _getExpansion(name) {\n const definition = this.macros.get(name);\n\n if (definition == null) {\n // mainly checking for undefined here\n return definition;\n } // If a single character has an associated catcode other than 13\n // (active character), then don\'t expand it.\n\n\n if (name.length === 1) {\n const catcode = this.lexer.catcodes[name];\n\n if (catcode != null && catcode !== 13) {\n return;\n }\n }\n\n const expansion = typeof definition === "function" ? definition(this) : definition;\n\n if (typeof expansion === "string") {\n let numArgs = 0;\n\n if (expansion.indexOf("#") !== -1) {\n const stripped = expansion.replace(/##/g, "");\n\n while (stripped.indexOf("#" + (numArgs + 1)) !== -1) {\n ++numArgs;\n }\n }\n\n const bodyLexer = new Lexer(expansion, this.settings);\n const tokens = [];\n let tok = bodyLexer.lex();\n\n while (tok.text !== "EOF") {\n tokens.push(tok);\n tok = bodyLexer.lex();\n }\n\n tokens.reverse(); // to fit in with stack using push and pop\n\n const expanded = {\n tokens,\n numArgs\n };\n return expanded;\n }\n\n return expansion;\n }\n /**\n * Determine whether a command is currently "defined" (has some\n * functionality), meaning that it\'s a macro (in the current group),\n * a function, a symbol, or one of the special commands listed in\n * `implicitCommands`.\n */\n\n\n isDefined(name) {\n return this.macros.has(name) || src_functions.hasOwnProperty(name) || src_symbols.math.hasOwnProperty(name) || src_symbols.text.hasOwnProperty(name) || implicitCommands.hasOwnProperty(name);\n }\n /**\n * Determine whether a command is expandable.\n */\n\n\n isExpandable(name) {\n const macro = this.macros.get(name);\n return macro != null ? typeof macro === "string" || typeof macro === "function" || !macro.unexpandable : src_functions.hasOwnProperty(name) && !src_functions[name].primitive;\n }\n\n}\n;// CONCATENATED MODULE: ./src/unicodeSupOrSub.js\n// Helpers for Parser.js handling of Unicode (sub|super)script characters.\nconst unicodeSubRegEx = /^[₊₋₌₍₎₀₁₂₃₄₅₆₇₈₉ₐₑₕᵢⱼₖₗₘₙₒₚᵣₛₜᵤᵥₓᵦᵧᵨᵩᵪ]/;\nconst uSubsAndSups = Object.freeze({\n \'₊\': \'+\',\n \'₋\': \'-\',\n \'₌\': \'=\',\n \'₍\': \'(\',\n \'₎\': \')\',\n \'₀\': \'0\',\n \'₁\': \'1\',\n \'₂\': \'2\',\n \'₃\': \'3\',\n \'₄\': \'4\',\n \'₅\': \'5\',\n \'₆\': \'6\',\n \'₇\': \'7\',\n \'₈\': \'8\',\n \'₉\': \'9\',\n \'\\u2090\': \'a\',\n \'\\u2091\': \'e\',\n \'\\u2095\': \'h\',\n \'\\u1D62\': \'i\',\n \'\\u2C7C\': \'j\',\n \'\\u2096\': \'k\',\n \'\\u2097\': \'l\',\n \'\\u2098\': \'m\',\n \'\\u2099\': \'n\',\n \'\\u2092\': \'o\',\n \'\\u209A\': \'p\',\n \'\\u1D63\': \'r\',\n \'\\u209B\': \'s\',\n \'\\u209C\': \'t\',\n \'\\u1D64\': \'u\',\n \'\\u1D65\': \'v\',\n \'\\u2093\': \'x\',\n \'\\u1D66\': \'β\',\n \'\\u1D67\': \'γ\',\n \'\\u1D68\': \'ρ\',\n \'\\u1D69\': \'\\u03d5\',\n \'\\u1D6A\': \'χ\',\n \'⁺\': \'+\',\n \'⁻\': \'-\',\n \'⁼\': \'=\',\n \'⁽\': \'(\',\n \'⁾\': \')\',\n \'⁰\': \'0\',\n \'¹\': \'1\',\n \'²\': \'2\',\n \'³\': \'3\',\n \'⁴\': \'4\',\n \'⁵\': \'5\',\n \'⁶\': \'6\',\n \'⁷\': \'7\',\n \'⁸\': \'8\',\n \'⁹\': \'9\',\n \'\\u1D2C\': \'A\',\n \'\\u1D2E\': \'B\',\n \'\\u1D30\': \'D\',\n \'\\u1D31\': \'E\',\n \'\\u1D33\': \'G\',\n \'\\u1D34\': \'H\',\n \'\\u1D35\': \'I\',\n \'\\u1D36\': \'J\',\n \'\\u1D37\': \'K\',\n \'\\u1D38\': \'L\',\n \'\\u1D39\': \'M\',\n \'\\u1D3A\': \'N\',\n \'\\u1D3C\': \'O\',\n \'\\u1D3E\': \'P\',\n \'\\u1D3F\': \'R\',\n \'\\u1D40\': \'T\',\n \'\\u1D41\': \'U\',\n \'\\u2C7D\': \'V\',\n \'\\u1D42\': \'W\',\n \'\\u1D43\': \'a\',\n \'\\u1D47\': \'b\',\n \'\\u1D9C\': \'c\',\n \'\\u1D48\': \'d\',\n \'\\u1D49\': \'e\',\n \'\\u1DA0\': \'f\',\n \'\\u1D4D\': \'g\',\n \'\\u02B0\': \'h\',\n \'\\u2071\': \'i\',\n \'\\u02B2\': \'j\',\n \'\\u1D4F\': \'k\',\n \'\\u02E1\': \'l\',\n \'\\u1D50\': \'m\',\n \'\\u207F\': \'n\',\n \'\\u1D52\': \'o\',\n \'\\u1D56\': \'p\',\n \'\\u02B3\': \'r\',\n \'\\u02E2\': \'s\',\n \'\\u1D57\': \'t\',\n \'\\u1D58\': \'u\',\n \'\\u1D5B\': \'v\',\n \'\\u02B7\': \'w\',\n \'\\u02E3\': \'x\',\n \'\\u02B8\': \'y\',\n \'\\u1DBB\': \'z\',\n \'\\u1D5D\': \'β\',\n \'\\u1D5E\': \'γ\',\n \'\\u1D5F\': \'δ\',\n \'\\u1D60\': \'\\u03d5\',\n \'\\u1D61\': \'χ\',\n \'\\u1DBF\': \'θ\'\n});\n;// CONCATENATED MODULE: ./src/Parser.js\n/* eslint no-constant-condition:0 */\n\n\n\n\n\n\n\n\n\n\n // Pre-evaluate both modules as unicodeSymbols require String.normalize()\n\nconst unicodeAccents = {\n "́": {\n "text": "\\\\\'",\n "math": "\\\\acute"\n },\n "̀": {\n "text": "\\\\`",\n "math": "\\\\grave"\n },\n "̈": {\n "text": "\\\\\\"",\n "math": "\\\\ddot"\n },\n "̃": {\n "text": "\\\\~",\n "math": "\\\\tilde"\n },\n "̄": {\n "text": "\\\\=",\n "math": "\\\\bar"\n },\n "̆": {\n "text": "\\\\u",\n "math": "\\\\breve"\n },\n "̌": {\n "text": "\\\\v",\n "math": "\\\\check"\n },\n "̂": {\n "text": "\\\\^",\n "math": "\\\\hat"\n },\n "̇": {\n "text": "\\\\.",\n "math": "\\\\dot"\n },\n "̊": {\n "text": "\\\\r",\n "math": "\\\\mathring"\n },\n "̋": {\n "text": "\\\\H"\n },\n "̧": {\n "text": "\\\\c"\n }\n};\nconst unicodeSymbols = {\n "á": "á",\n "à": "à",\n "ä": "ä",\n "ǟ": "ǟ",\n "ã": "ã",\n "ā": "ā",\n "ă": "ă",\n "ắ": "ắ",\n "ằ": "ằ",\n "ẵ": "ẵ",\n "ǎ": "ǎ",\n "â": "â",\n "ấ": "ấ",\n "ầ": "ầ",\n "ẫ": "ẫ",\n "ȧ": "ȧ",\n "ǡ": "ǡ",\n "å": "å",\n "ǻ": "ǻ",\n "ḃ": "ḃ",\n "ć": "ć",\n "ḉ": "ḉ",\n "č": "č",\n "ĉ": "ĉ",\n "ċ": "ċ",\n "ç": "ç",\n "ď": "ď",\n "ḋ": "ḋ",\n "ḑ": "ḑ",\n "é": "é",\n "è": "è",\n "ë": "ë",\n "ẽ": "ẽ",\n "ē": "ē",\n "ḗ": "ḗ",\n "ḕ": "ḕ",\n "ĕ": "ĕ",\n "ḝ": "ḝ",\n "ě": "ě",\n "ê": "ê",\n "ế": "ế",\n "ề": "ề",\n "ễ": "ễ",\n "ė": "ė",\n "ȩ": "ȩ",\n "ḟ": "ḟ",\n "ǵ": "ǵ",\n "ḡ": "ḡ",\n "ğ": "ğ",\n "ǧ": "ǧ",\n "ĝ": "ĝ",\n "ġ": "ġ",\n "ģ": "ģ",\n "ḧ": "ḧ",\n "ȟ": "ȟ",\n "ĥ": "ĥ",\n "ḣ": "ḣ",\n "ḩ": "ḩ",\n "í": "í",\n "ì": "ì",\n "ï": "ï",\n "ḯ": "ḯ",\n "ĩ": "ĩ",\n "ī": "ī",\n "ĭ": "ĭ",\n "ǐ": "ǐ",\n "î": "î",\n "ǰ": "ǰ",\n "ĵ": "ĵ",\n "ḱ": "ḱ",\n "ǩ": "ǩ",\n "ķ": "ķ",\n "ĺ": "ĺ",\n "ľ": "ľ",\n "ļ": "ļ",\n "ḿ": "ḿ",\n "ṁ": "ṁ",\n "ń": "ń",\n "ǹ": "ǹ",\n "ñ": "ñ",\n "ň": "ň",\n "ṅ": "ṅ",\n "ņ": "ņ",\n "ó": "ó",\n "ò": "ò",\n "ö": "ö",\n "ȫ": "ȫ",\n "õ": "õ",\n "ṍ": "ṍ",\n "ṏ": "ṏ",\n "ȭ": "ȭ",\n "ō": "ō",\n "ṓ": "ṓ",\n "ṑ": "ṑ",\n "ŏ": "ŏ",\n "ǒ": "ǒ",\n "ô": "ô",\n "ố": "ố",\n "ồ": "ồ",\n "ỗ": "ỗ",\n "ȯ": "ȯ",\n "ȱ": "ȱ",\n "ő": "ő",\n "ṕ": "ṕ",\n "ṗ": "ṗ",\n "ŕ": "ŕ",\n "ř": "ř",\n "ṙ": "ṙ",\n "ŗ": "ŗ",\n "ś": "ś",\n "ṥ": "ṥ",\n "š": "š",\n "ṧ": "ṧ",\n "ŝ": "ŝ",\n "ṡ": "ṡ",\n "ş": "ş",\n "ẗ": "ẗ",\n "ť": "ť",\n "ṫ": "ṫ",\n "ţ": "ţ",\n "ú": "ú",\n "ù": "ù",\n "ü": "ü",\n "ǘ": "ǘ",\n "ǜ": "ǜ",\n "ǖ": "ǖ",\n "ǚ": "ǚ",\n "ũ": "ũ",\n "ṹ": "ṹ",\n "ū": "ū",\n "ṻ": "ṻ",\n "ŭ": "ŭ",\n "ǔ": "ǔ",\n "û": "û",\n "ů": "ů",\n "ű": "ű",\n "ṽ": "ṽ",\n "ẃ": "ẃ",\n "ẁ": "ẁ",\n "ẅ": "ẅ",\n "ŵ": "ŵ",\n "ẇ": "ẇ",\n "ẘ": "ẘ",\n "ẍ": "ẍ",\n "ẋ": "ẋ",\n "ý": "ý",\n "ỳ": "ỳ",\n "ÿ": "ÿ",\n "ỹ": "ỹ",\n "ȳ": "ȳ",\n "ŷ": "ŷ",\n "ẏ": "ẏ",\n "ẙ": "ẙ",\n "ź": "ź",\n "ž": "ž",\n "ẑ": "ẑ",\n "ż": "ż",\n "Á": "Á",\n "À": "À",\n "Ä": "Ä",\n "Ǟ": "Ǟ",\n "Ã": "Ã",\n "Ā": "Ā",\n "Ă": "Ă",\n "Ắ": "Ắ",\n "Ằ": "Ằ",\n "Ẵ": "Ẵ",\n "Ǎ": "Ǎ",\n "Â": "Â",\n "Ấ": "Ấ",\n "Ầ": "Ầ",\n "Ẫ": "Ẫ",\n "Ȧ": "Ȧ",\n "Ǡ": "Ǡ",\n "Å": "Å",\n "Ǻ": "Ǻ",\n "Ḃ": "Ḃ",\n "Ć": "Ć",\n "Ḉ": "Ḉ",\n "Č": "Č",\n "Ĉ": "Ĉ",\n "Ċ": "Ċ",\n "Ç": "Ç",\n "Ď": "Ď",\n "Ḋ": "Ḋ",\n "Ḑ": "Ḑ",\n "É": "É",\n "È": "È",\n "Ë": "Ë",\n "Ẽ": "Ẽ",\n "Ē": "Ē",\n "Ḗ": "Ḗ",\n "Ḕ": "Ḕ",\n "Ĕ": "Ĕ",\n "Ḝ": "Ḝ",\n "Ě": "Ě",\n "Ê": "Ê",\n "Ế": "Ế",\n "Ề": "Ề",\n "Ễ": "Ễ",\n "Ė": "Ė",\n "Ȩ": "Ȩ",\n "Ḟ": "Ḟ",\n "Ǵ": "Ǵ",\n "Ḡ": "Ḡ",\n "Ğ": "Ğ",\n "Ǧ": "Ǧ",\n "Ĝ": "Ĝ",\n "Ġ": "Ġ",\n "Ģ": "Ģ",\n "Ḧ": "Ḧ",\n "Ȟ": "Ȟ",\n "Ĥ": "Ĥ",\n "Ḣ": "Ḣ",\n "Ḩ": "Ḩ",\n "Í": "Í",\n "Ì": "Ì",\n "Ï": "Ï",\n "Ḯ": "Ḯ",\n "Ĩ": "Ĩ",\n "Ī": "Ī",\n "Ĭ": "Ĭ",\n "Ǐ": "Ǐ",\n "Î": "Î",\n "İ": "İ",\n "Ĵ": "Ĵ",\n "Ḱ": "Ḱ",\n "Ǩ": "Ǩ",\n "Ķ": "Ķ",\n "Ĺ": "Ĺ",\n "Ľ": "Ľ",\n "Ļ": "Ļ",\n "Ḿ": "Ḿ",\n "Ṁ": "Ṁ",\n "Ń": "Ń",\n "Ǹ": "Ǹ",\n "Ñ": "Ñ",\n "Ň": "Ň",\n "Ṅ": "Ṅ",\n "Ņ": "Ņ",\n "Ó": "Ó",\n "Ò": "Ò",\n "Ö": "Ö",\n "Ȫ": "Ȫ",\n "Õ": "Õ",\n "Ṍ": "Ṍ",\n "Ṏ": "Ṏ",\n "Ȭ": "Ȭ",\n "Ō": "Ō",\n "Ṓ": "Ṓ",\n "Ṑ": "Ṑ",\n "Ŏ": "Ŏ",\n "Ǒ": "Ǒ",\n "Ô": "Ô",\n "Ố": "Ố",\n "Ồ": "Ồ",\n "Ỗ": "Ỗ",\n "Ȯ": "Ȯ",\n "Ȱ": "Ȱ",\n "Ő": "Ő",\n "Ṕ": "Ṕ",\n "Ṗ": "Ṗ",\n "Ŕ": "Ŕ",\n "Ř": "Ř",\n "Ṙ": "Ṙ",\n "Ŗ": "Ŗ",\n "Ś": "Ś",\n "Ṥ": "Ṥ",\n "Š": "Š",\n "Ṧ": "Ṧ",\n "Ŝ": "Ŝ",\n "Ṡ": "Ṡ",\n "Ş": "Ş",\n "Ť": "Ť",\n "Ṫ": "Ṫ",\n "Ţ": "Ţ",\n "Ú": "Ú",\n "Ù": "Ù",\n "Ü": "Ü",\n "Ǘ": "Ǘ",\n "Ǜ": "Ǜ",\n "Ǖ": "Ǖ",\n "Ǚ": "Ǚ",\n "Ũ": "Ũ",\n "Ṹ": "Ṹ",\n "Ū": "Ū",\n "Ṻ": "Ṻ",\n "Ŭ": "Ŭ",\n "Ǔ": "Ǔ",\n "Û": "Û",\n "Ů": "Ů",\n "Ű": "Ű",\n "Ṽ": "Ṽ",\n "Ẃ": "Ẃ",\n "Ẁ": "Ẁ",\n "Ẅ": "Ẅ",\n "Ŵ": "Ŵ",\n "Ẇ": "Ẇ",\n "Ẍ": "Ẍ",\n "Ẋ": "Ẋ",\n "Ý": "Ý",\n "Ỳ": "Ỳ",\n "Ÿ": "Ÿ",\n "Ỹ": "Ỹ",\n "Ȳ": "Ȳ",\n "Ŷ": "Ŷ",\n "Ẏ": "Ẏ",\n "Ź": "Ź",\n "Ž": "Ž",\n "Ẑ": "Ẑ",\n "Ż": "Ż",\n "ά": "ά",\n "ὰ": "ὰ",\n "ᾱ": "ᾱ",\n "ᾰ": "ᾰ",\n "έ": "έ",\n "ὲ": "ὲ",\n "ή": "ή",\n "ὴ": "ὴ",\n "ί": "ί",\n "ὶ": "ὶ",\n "ϊ": "ϊ",\n "ΐ": "ΐ",\n "ῒ": "ῒ",\n "ῑ": "ῑ",\n "ῐ": "ῐ",\n "ό": "ό",\n "ὸ": "ὸ",\n "ύ": "ύ",\n "ὺ": "ὺ",\n "ϋ": "ϋ",\n "ΰ": "ΰ",\n "ῢ": "ῢ",\n "ῡ": "ῡ",\n "ῠ": "ῠ",\n "ώ": "ώ",\n "ὼ": "ὼ",\n "Ύ": "Ύ",\n "Ὺ": "Ὺ",\n "Ϋ": "Ϋ",\n "Ῡ": "Ῡ",\n "Ῠ": "Ῠ",\n "Ώ": "Ώ",\n "Ὼ": "Ὼ"\n};\n\n/**\n * This file contains the parser used to parse out a TeX expression from the\n * input. Since TeX isn\'t context-free, standard parsers don\'t work particularly\n * well.\n *\n * The strategy of this parser is as such:\n *\n * The main functions (the `.parse...` ones) take a position in the current\n * parse string to parse tokens from. The lexer (found in Lexer.js, stored at\n * this.gullet.lexer) also supports pulling out tokens at arbitrary places. When\n * individual tokens are needed at a position, the lexer is called to pull out a\n * token, which is then used.\n *\n * The parser has a property called "mode" indicating the mode that\n * the parser is currently in. Currently it has to be one of "math" or\n * "text", which denotes whether the current environment is a math-y\n * one or a text-y one (e.g. inside \\text). Currently, this serves to\n * limit the functions which can be used in text mode.\n *\n * The main functions then return an object which contains the useful data that\n * was parsed at its given point, and a new position at the end of the parsed\n * data. The main functions can call each other and continue the parsing by\n * using the returned position as a new starting point.\n *\n * There are also extra `.handle...` functions, which pull out some reused\n * functionality into self-contained functions.\n *\n * The functions return ParseNodes.\n */\nclass Parser {\n constructor(input, settings) {\n this.mode = void 0;\n this.gullet = void 0;\n this.settings = void 0;\n this.leftrightDepth = void 0;\n this.nextToken = void 0;\n // Start in math mode\n this.mode = "math"; // Create a new macro expander (gullet) and (indirectly via that) also a\n // new lexer (mouth) for this parser (stomach, in the language of TeX)\n\n this.gullet = new MacroExpander(input, settings, this.mode); // Store the settings for use in parsing\n\n this.settings = settings; // Count leftright depth (for \\middle errors)\n\n this.leftrightDepth = 0;\n }\n /**\n * Checks a result to make sure it has the right type, and throws an\n * appropriate error otherwise.\n */\n\n\n expect(text, consume) {\n if (consume === void 0) {\n consume = true;\n }\n\n if (this.fetch().text !== text) {\n throw new src_ParseError("Expected \'" + text + "\', got \'" + this.fetch().text + "\'", this.fetch());\n }\n\n if (consume) {\n this.consume();\n }\n }\n /**\n * Discards the current lookahead token, considering it consumed.\n */\n\n\n consume() {\n this.nextToken = null;\n }\n /**\n * Return the current lookahead token, or if there isn\'t one (at the\n * beginning, or if the previous lookahead token was consume()d),\n * fetch the next token as the new lookahead token and return it.\n */\n\n\n fetch() {\n if (this.nextToken == null) {\n this.nextToken = this.gullet.expandNextToken();\n }\n\n return this.nextToken;\n }\n /**\n * Switches between "text" and "math" modes.\n */\n\n\n switchMode(newMode) {\n this.mode = newMode;\n this.gullet.switchMode(newMode);\n }\n /**\n * Main parsing function, which parses an entire input.\n */\n\n\n parse() {\n if (!this.settings.globalGroup) {\n // Create a group namespace for the math expression.\n // (LaTeX creates a new group for every $...$, $$...$$, \\[...\\].)\n this.gullet.beginGroup();\n } // Use old \\color behavior (same as LaTeX\'s \\textcolor) if requested.\n // We do this within the group for the math expression, so it doesn\'t\n // pollute settings.macros.\n\n\n if (this.settings.colorIsTextColor) {\n this.gullet.macros.set("\\\\color", "\\\\textcolor");\n }\n\n try {\n // Try to parse the input\n const parse = this.parseExpression(false); // If we succeeded, make sure there\'s an EOF at the end\n\n this.expect("EOF"); // End the group namespace for the expression\n\n if (!this.settings.globalGroup) {\n this.gullet.endGroup();\n }\n\n return parse; // Close any leftover groups in case of a parse error.\n } finally {\n this.gullet.endGroups();\n }\n }\n /**\n * Fully parse a separate sequence of tokens as a separate job.\n * Tokens should be specified in reverse order, as in a MacroDefinition.\n */\n\n\n subparse(tokens) {\n // Save the next token from the current job.\n const oldToken = this.nextToken;\n this.consume(); // Run the new job, terminating it with an excess \'}\'\n\n this.gullet.pushToken(new Token("}"));\n this.gullet.pushTokens(tokens);\n const parse = this.parseExpression(false);\n this.expect("}"); // Restore the next token from the current job.\n\n this.nextToken = oldToken;\n return parse;\n }\n\n /**\n * Parses an "expression", which is a list of atoms.\n *\n * `breakOnInfix`: Should the parsing stop when we hit infix nodes? This\n * happens when functions have higher precedence han infix\n * nodes in implicit parses.\n *\n * `breakOnTokenText`: The text of the token that the expression should end\n * with, or `null` if something else should end the\n * expression.\n */\n parseExpression(breakOnInfix, breakOnTokenText) {\n const body = []; // Keep adding atoms to the body until we can\'t parse any more atoms (either\n // we reached the end, a }, or a \\right)\n\n while (true) {\n // Ignore spaces in math mode\n if (this.mode === "math") {\n this.consumeSpaces();\n }\n\n const lex = this.fetch();\n\n if (Parser.endOfExpression.indexOf(lex.text) !== -1) {\n break;\n }\n\n if (breakOnTokenText && lex.text === breakOnTokenText) {\n break;\n }\n\n if (breakOnInfix && src_functions[lex.text] && src_functions[lex.text].infix) {\n break;\n }\n\n const atom = this.parseAtom(breakOnTokenText);\n\n if (!atom) {\n break;\n } else if (atom.type === "internal") {\n // Internal nodes do not appear in parse tree\n continue;\n }\n\n body.push(atom);\n }\n\n if (this.mode === "text") {\n this.formLigatures(body);\n }\n\n return this.handleInfixNodes(body);\n }\n /**\n * Rewrites infix operators such as \\over with corresponding commands such\n * as \\frac.\n *\n * There can only be one infix operator per group. If there\'s more than one\n * then the expression is ambiguous. This can be resolved by adding {}.\n */\n\n\n handleInfixNodes(body) {\n let overIndex = -1;\n let funcName;\n\n for (let i = 0; i < body.length; i++) {\n if (body[i].type === "infix") {\n if (overIndex !== -1) {\n throw new src_ParseError("only one infix operator per group", body[i].token);\n }\n\n overIndex = i;\n funcName = body[i].replaceWith;\n }\n }\n\n if (overIndex !== -1 && funcName) {\n let numerNode;\n let denomNode;\n const numerBody = body.slice(0, overIndex);\n const denomBody = body.slice(overIndex + 1);\n\n if (numerBody.length === 1 && numerBody[0].type === "ordgroup") {\n numerNode = numerBody[0];\n } else {\n numerNode = {\n type: "ordgroup",\n mode: this.mode,\n body: numerBody\n };\n }\n\n if (denomBody.length === 1 && denomBody[0].type === "ordgroup") {\n denomNode = denomBody[0];\n } else {\n denomNode = {\n type: "ordgroup",\n mode: this.mode,\n body: denomBody\n };\n }\n\n let node;\n\n if (funcName === "\\\\\\\\abovefrac") {\n node = this.callFunction(funcName, [numerNode, body[overIndex], denomNode], []);\n } else {\n node = this.callFunction(funcName, [numerNode, denomNode], []);\n }\n\n return [node];\n } else {\n return body;\n }\n }\n /**\n * Handle a subscript or superscript with nice errors.\n */\n\n\n handleSupSubscript(name // For error reporting.\n ) {\n const symbolToken = this.fetch();\n const symbol = symbolToken.text;\n this.consume();\n this.consumeSpaces(); // ignore spaces before sup/subscript argument\n // Skip over allowed internal nodes such as \\relax\n\n let group;\n\n do {\n var _group;\n\n group = this.parseGroup(name);\n } while (((_group = group) == null ? void 0 : _group.type) === "internal");\n\n if (!group) {\n throw new src_ParseError("Expected group after \'" + symbol + "\'", symbolToken);\n }\n\n return group;\n }\n /**\n * Converts the textual input of an unsupported command into a text node\n * contained within a color node whose color is determined by errorColor\n */\n\n\n formatUnsupportedCmd(text) {\n const textordArray = [];\n\n for (let i = 0; i < text.length; i++) {\n textordArray.push({\n type: "textord",\n mode: "text",\n text: text[i]\n });\n }\n\n const textNode = {\n type: "text",\n mode: this.mode,\n body: textordArray\n };\n const colorNode = {\n type: "color",\n mode: this.mode,\n color: this.settings.errorColor,\n body: [textNode]\n };\n return colorNode;\n }\n /**\n * Parses a group with optional super/subscripts.\n */\n\n\n parseAtom(breakOnTokenText) {\n // The body of an atom is an implicit group, so that things like\n // \\left(x\\right)^2 work correctly.\n const base = this.parseGroup("atom", breakOnTokenText); // Internal nodes (e.g. \\relax) cannot support super/subscripts.\n // Instead we will pick up super/subscripts with blank base next round.\n\n if ((base == null ? void 0 : base.type) === "internal") {\n return base;\n } // In text mode, we don\'t have superscripts or subscripts\n\n\n if (this.mode === "text") {\n return base;\n } // Note that base may be empty (i.e. null) at this point.\n\n\n let superscript;\n let subscript;\n\n while (true) {\n // Guaranteed in math mode, so eat any spaces first.\n this.consumeSpaces(); // Lex the first token\n\n const lex = this.fetch();\n\n if (lex.text === "\\\\limits" || lex.text === "\\\\nolimits") {\n // We got a limit control\n if (base && base.type === "op") {\n const limits = lex.text === "\\\\limits";\n base.limits = limits;\n base.alwaysHandleSupSub = true;\n } else if (base && base.type === "operatorname") {\n if (base.alwaysHandleSupSub) {\n base.limits = lex.text === "\\\\limits";\n }\n } else {\n throw new src_ParseError("Limit controls must follow a math operator", lex);\n }\n\n this.consume();\n } else if (lex.text === "^") {\n // We got a superscript start\n if (superscript) {\n throw new src_ParseError("Double superscript", lex);\n }\n\n superscript = this.handleSupSubscript("superscript");\n } else if (lex.text === "_") {\n // We got a subscript start\n if (subscript) {\n throw new src_ParseError("Double subscript", lex);\n }\n\n subscript = this.handleSupSubscript("subscript");\n } else if (lex.text === "\'") {\n // We got a prime\n if (superscript) {\n throw new src_ParseError("Double superscript", lex);\n }\n\n const prime = {\n type: "textord",\n mode: this.mode,\n text: "\\\\prime"\n }; // Many primes can be grouped together, so we handle this here\n\n const primes = [prime];\n this.consume(); // Keep lexing tokens until we get something that\'s not a prime\n\n while (this.fetch().text === "\'") {\n // For each one, add another prime to the list\n primes.push(prime);\n this.consume();\n } // If there\'s a superscript following the primes, combine that\n // superscript in with the primes.\n\n\n if (this.fetch().text === "^") {\n primes.push(this.handleSupSubscript("superscript"));\n } // Put everything into an ordgroup as the superscript\n\n\n superscript = {\n type: "ordgroup",\n mode: this.mode,\n body: primes\n };\n } else if (uSubsAndSups[lex.text]) {\n // A Unicode subscript or superscript character.\n // We treat these similarly to the unicode-math package.\n // So we render a string of Unicode (sub|super)scripts the\n // same as a (sub|super)script of regular characters.\n const isSub = unicodeSubRegEx.test(lex.text);\n const subsupTokens = [];\n subsupTokens.push(new Token(uSubsAndSups[lex.text]));\n this.consume(); // Continue fetching tokens to fill out the string.\n\n while (true) {\n const token = this.fetch().text;\n\n if (!uSubsAndSups[token]) {\n break;\n }\n\n if (unicodeSubRegEx.test(token) !== isSub) {\n break;\n }\n\n subsupTokens.unshift(new Token(uSubsAndSups[token]));\n this.consume();\n } // Now create a (sub|super)script.\n\n\n const body = this.subparse(subsupTokens);\n\n if (isSub) {\n subscript = {\n type: "ordgroup",\n mode: "math",\n body\n };\n } else {\n superscript = {\n type: "ordgroup",\n mode: "math",\n body\n };\n }\n } else {\n // If it wasn\'t ^, _, or \', stop parsing super/subscripts\n break;\n }\n } // Base must be set if superscript or subscript are set per logic above,\n // but need to check here for type check to pass.\n\n\n if (superscript || subscript) {\n // If we got either a superscript or subscript, create a supsub\n return {\n type: "supsub",\n mode: this.mode,\n base: base,\n sup: superscript,\n sub: subscript\n };\n } else {\n // Otherwise return the original body\n return base;\n }\n }\n /**\n * Parses an entire function, including its base and all of its arguments.\n */\n\n\n parseFunction(breakOnTokenText, name // For determining its context\n ) {\n const token = this.fetch();\n const func = token.text;\n const funcData = src_functions[func];\n\n if (!funcData) {\n return null;\n }\n\n this.consume(); // consume command token\n\n if (name && name !== "atom" && !funcData.allowedInArgument) {\n throw new src_ParseError("Got function \'" + func + "\' with no arguments" + (name ? " as " + name : ""), token);\n } else if (this.mode === "text" && !funcData.allowedInText) {\n throw new src_ParseError("Can\'t use function \'" + func + "\' in text mode", token);\n } else if (this.mode === "math" && funcData.allowedInMath === false) {\n throw new src_ParseError("Can\'t use function \'" + func + "\' in math mode", token);\n }\n\n const {\n args,\n optArgs\n } = this.parseArguments(func, funcData);\n return this.callFunction(func, args, optArgs, token, breakOnTokenText);\n }\n /**\n * Call a function handler with a suitable context and arguments.\n */\n\n\n callFunction(name, args, optArgs, token, breakOnTokenText) {\n const context = {\n funcName: name,\n parser: this,\n token,\n breakOnTokenText\n };\n const func = src_functions[name];\n\n if (func && func.handler) {\n return func.handler(context, args, optArgs);\n } else {\n throw new src_ParseError("No function handler for " + name);\n }\n }\n /**\n * Parses the arguments of a function or environment\n */\n\n\n parseArguments(func, // Should look like "\\name" or "\\begin{name}".\n funcData) {\n const totalArgs = funcData.numArgs + funcData.numOptionalArgs;\n\n if (totalArgs === 0) {\n return {\n args: [],\n optArgs: []\n };\n }\n\n const args = [];\n const optArgs = [];\n\n for (let i = 0; i < totalArgs; i++) {\n let argType = funcData.argTypes && funcData.argTypes[i];\n const isOptional = i < funcData.numOptionalArgs;\n\n if (funcData.primitive && argType == null || // \\sqrt expands into primitive if optional argument doesn\'t exist\n funcData.type === "sqrt" && i === 1 && optArgs[0] == null) {\n argType = "primitive";\n }\n\n const arg = this.parseGroupOfType("argument to \'" + func + "\'", argType, isOptional);\n\n if (isOptional) {\n optArgs.push(arg);\n } else if (arg != null) {\n args.push(arg);\n } else {\n // should be unreachable\n throw new src_ParseError("Null argument, please report this as a bug");\n }\n }\n\n return {\n args,\n optArgs\n };\n }\n /**\n * Parses a group when the mode is changing.\n */\n\n\n parseGroupOfType(name, type, optional) {\n switch (type) {\n case "color":\n return this.parseColorGroup(optional);\n\n case "size":\n return this.parseSizeGroup(optional);\n\n case "url":\n return this.parseUrlGroup(optional);\n\n case "math":\n case "text":\n return this.parseArgumentGroup(optional, type);\n\n case "hbox":\n {\n // hbox argument type wraps the argument in the equivalent of\n // \\hbox, which is like \\text but switching to \\textstyle size.\n const group = this.parseArgumentGroup(optional, "text");\n return group != null ? {\n type: "styling",\n mode: group.mode,\n body: [group],\n style: "text" // simulate \\textstyle\n\n } : null;\n }\n\n case "raw":\n {\n const token = this.parseStringGroup("raw", optional);\n return token != null ? {\n type: "raw",\n mode: "text",\n string: token.text\n } : null;\n }\n\n case "primitive":\n {\n if (optional) {\n throw new src_ParseError("A primitive argument cannot be optional");\n }\n\n const group = this.parseGroup(name);\n\n if (group == null) {\n throw new src_ParseError("Expected group as " + name, this.fetch());\n }\n\n return group;\n }\n\n case "original":\n case null:\n case undefined:\n return this.parseArgumentGroup(optional);\n\n default:\n throw new src_ParseError("Unknown group type as " + name, this.fetch());\n }\n }\n /**\n * Discard any space tokens, fetching the next non-space token.\n */\n\n\n consumeSpaces() {\n while (this.fetch().text === " ") {\n this.consume();\n }\n }\n /**\n * Parses a group, essentially returning the string formed by the\n * brace-enclosed tokens plus some position information.\n */\n\n\n parseStringGroup(modeName, // Used to describe the mode in error messages.\n optional) {\n const argToken = this.gullet.scanArgument(optional);\n\n if (argToken == null) {\n return null;\n }\n\n let str = "";\n let nextToken;\n\n while ((nextToken = this.fetch()).text !== "EOF") {\n str += nextToken.text;\n this.consume();\n }\n\n this.consume(); // consume the end of the argument\n\n argToken.text = str;\n return argToken;\n }\n /**\n * Parses a regex-delimited group: the largest sequence of tokens\n * whose concatenated strings match `regex`. Returns the string\n * formed by the tokens plus some position information.\n */\n\n\n parseRegexGroup(regex, modeName // Used to describe the mode in error messages.\n ) {\n const firstToken = this.fetch();\n let lastToken = firstToken;\n let str = "";\n let nextToken;\n\n while ((nextToken = this.fetch()).text !== "EOF" && regex.test(str + nextToken.text)) {\n lastToken = nextToken;\n str += lastToken.text;\n this.consume();\n }\n\n if (str === "") {\n throw new src_ParseError("Invalid " + modeName + ": \'" + firstToken.text + "\'", firstToken);\n }\n\n return firstToken.range(lastToken, str);\n }\n /**\n * Parses a color description.\n */\n\n\n parseColorGroup(optional) {\n const res = this.parseStringGroup("color", optional);\n\n if (res == null) {\n return null;\n }\n\n const match = /^(#[a-f0-9]{3}|#?[a-f0-9]{6}|[a-z]+)$/i.exec(res.text);\n\n if (!match) {\n throw new src_ParseError("Invalid color: \'" + res.text + "\'", res);\n }\n\n let color = match[0];\n\n if (/^[0-9a-f]{6}$/i.test(color)) {\n // We allow a 6-digit HTML color spec without a leading "#".\n // This follows the xcolor package\'s HTML color model.\n // Predefined color names are all missed by this RegEx pattern.\n color = "#" + color;\n }\n\n return {\n type: "color-token",\n mode: this.mode,\n color\n };\n }\n /**\n * Parses a size specification, consisting of magnitude and unit.\n */\n\n\n parseSizeGroup(optional) {\n let res;\n let isBlank = false; // don\'t expand before parseStringGroup\n\n this.gullet.consumeSpaces();\n\n if (!optional && this.gullet.future().text !== "{") {\n res = this.parseRegexGroup(/^[-+]? *(?:$|\\d+|\\d+\\.\\d*|\\.\\d*) *[a-z]{0,2} *$/, "size");\n } else {\n res = this.parseStringGroup("size", optional);\n }\n\n if (!res) {\n return null;\n }\n\n if (!optional && res.text.length === 0) {\n // Because we\'ve tested for what is !optional, this block won\'t\n // affect \\kern, \\hspace, etc. It will capture the mandatory arguments\n // to \\genfrac and \\above.\n res.text = "0pt"; // Enable \\above{}\n\n isBlank = true; // This is here specifically for \\genfrac\n }\n\n const match = /([-+]?) *(\\d+(?:\\.\\d*)?|\\.\\d+) *([a-z]{2})/.exec(res.text);\n\n if (!match) {\n throw new src_ParseError("Invalid size: \'" + res.text + "\'", res);\n }\n\n const data = {\n number: +(match[1] + match[2]),\n // sign + magnitude, cast to number\n unit: match[3]\n };\n\n if (!validUnit(data)) {\n throw new src_ParseError("Invalid unit: \'" + data.unit + "\'", res);\n }\n\n return {\n type: "size",\n mode: this.mode,\n value: data,\n isBlank\n };\n }\n /**\n * Parses an URL, checking escaped letters and allowed protocols,\n * and setting the catcode of % as an active character (as in \\hyperref).\n */\n\n\n parseUrlGroup(optional) {\n this.gullet.lexer.setCatcode("%", 13); // active character\n\n this.gullet.lexer.setCatcode("~", 12); // other character\n\n const res = this.parseStringGroup("url", optional);\n this.gullet.lexer.setCatcode("%", 14); // comment character\n\n this.gullet.lexer.setCatcode("~", 13); // active character\n\n if (res == null) {\n return null;\n } // hyperref package allows backslashes alone in href, but doesn\'t\n // generate valid links in such cases; we interpret this as\n // "undefined" behaviour, and keep them as-is. Some browser will\n // replace backslashes with forward slashes.\n\n\n const url = res.text.replace(/\\\\([#$%&~_^{}])/g, \'$1\');\n return {\n type: "url",\n mode: this.mode,\n url\n };\n }\n /**\n * Parses an argument with the mode specified.\n */\n\n\n parseArgumentGroup(optional, mode) {\n const argToken = this.gullet.scanArgument(optional);\n\n if (argToken == null) {\n return null;\n }\n\n const outerMode = this.mode;\n\n if (mode) {\n // Switch to specified mode\n this.switchMode(mode);\n }\n\n this.gullet.beginGroup();\n const expression = this.parseExpression(false, "EOF"); // TODO: find an alternative way to denote the end\n\n this.expect("EOF"); // expect the end of the argument\n\n this.gullet.endGroup();\n const result = {\n type: "ordgroup",\n mode: this.mode,\n loc: argToken.loc,\n body: expression\n };\n\n if (mode) {\n // Switch mode back\n this.switchMode(outerMode);\n }\n\n return result;\n }\n /**\n * Parses an ordinary group, which is either a single nucleus (like "x")\n * or an expression in braces (like "{x+y}") or an implicit group, a group\n * that starts at the current position, and ends right before a higher explicit\n * group ends, or at EOF.\n */\n\n\n parseGroup(name, // For error reporting.\n breakOnTokenText) {\n const firstToken = this.fetch();\n const text = firstToken.text;\n let result; // Try to parse an open brace or \\begingroup\n\n if (text === "{" || text === "\\\\begingroup") {\n this.consume();\n const groupEnd = text === "{" ? "}" : "\\\\endgroup";\n this.gullet.beginGroup(); // If we get a brace, parse an expression\n\n const expression = this.parseExpression(false, groupEnd);\n const lastToken = this.fetch();\n this.expect(groupEnd); // Check that we got a matching closing brace\n\n this.gullet.endGroup();\n result = {\n type: "ordgroup",\n mode: this.mode,\n loc: SourceLocation.range(firstToken, lastToken),\n body: expression,\n // A group formed by \\begingroup...\\endgroup is a semi-simple group\n // which doesn\'t affect spacing in math mode, i.e., is transparent.\n // https://tex.stackexchange.com/questions/1930/when-should-one-\n // use-begingroup-instead-of-bgroup\n semisimple: text === "\\\\begingroup" || undefined\n };\n } else {\n // If there exists a function with this name, parse the function.\n // Otherwise, just return a nucleus\n result = this.parseFunction(breakOnTokenText, name) || this.parseSymbol();\n\n if (result == null && text[0] === "\\\\" && !implicitCommands.hasOwnProperty(text)) {\n if (this.settings.throwOnError) {\n throw new src_ParseError("Undefined control sequence: " + text, firstToken);\n }\n\n result = this.formatUnsupportedCmd(text);\n this.consume();\n }\n }\n\n return result;\n }\n /**\n * Form ligature-like combinations of characters for text mode.\n * This includes inputs like "--", "---", "``" and "\'\'".\n * The result will simply replace multiple textord nodes with a single\n * character in each value by a single textord node having multiple\n * characters in its value. The representation is still ASCII source.\n * The group will be modified in place.\n */\n\n\n formLigatures(group) {\n let n = group.length - 1;\n\n for (let i = 0; i < n; ++i) {\n const a = group[i]; // $FlowFixMe: Not every node type has a `text` property.\n\n const v = a.text;\n\n if (v === "-" && group[i + 1].text === "-") {\n if (i + 1 < n && group[i + 2].text === "-") {\n group.splice(i, 3, {\n type: "textord",\n mode: "text",\n loc: SourceLocation.range(a, group[i + 2]),\n text: "---"\n });\n n -= 2;\n } else {\n group.splice(i, 2, {\n type: "textord",\n mode: "text",\n loc: SourceLocation.range(a, group[i + 1]),\n text: "--"\n });\n n -= 1;\n }\n }\n\n if ((v === "\'" || v === "`") && group[i + 1].text === v) {\n group.splice(i, 2, {\n type: "textord",\n mode: "text",\n loc: SourceLocation.range(a, group[i + 1]),\n text: v + v\n });\n n -= 1;\n }\n }\n }\n /**\n * Parse a single symbol out of the string. Here, we handle single character\n * symbols and special functions like \\verb.\n */\n\n\n parseSymbol() {\n const nucleus = this.fetch();\n let text = nucleus.text;\n\n if (/^\\\\verb[^a-zA-Z]/.test(text)) {\n this.consume();\n let arg = text.slice(5);\n const star = arg.charAt(0) === "*";\n\n if (star) {\n arg = arg.slice(1);\n } // Lexer\'s tokenRegex is constructed to always have matching\n // first/last characters.\n\n\n if (arg.length < 2 || arg.charAt(0) !== arg.slice(-1)) {\n throw new src_ParseError("\\\\verb assertion failed --\\n please report what input caused this bug");\n }\n\n arg = arg.slice(1, -1); // remove first and last char\n\n return {\n type: "verb",\n mode: "text",\n body: arg,\n star\n };\n } // At this point, we should have a symbol, possibly with accents.\n // First expand any accented base symbol according to unicodeSymbols.\n\n\n if (unicodeSymbols.hasOwnProperty(text[0]) && !src_symbols[this.mode][text[0]]) {\n // This behavior is not strict (XeTeX-compatible) in math mode.\n if (this.settings.strict && this.mode === "math") {\n this.settings.reportNonstrict("unicodeTextInMathMode", "Accented Unicode text character \\"" + text[0] + "\\" used in " + "math mode", nucleus);\n }\n\n text = unicodeSymbols[text[0]] + text.slice(1);\n } // Strip off any combining characters\n\n\n const match = combiningDiacriticalMarksEndRegex.exec(text);\n\n if (match) {\n text = text.substring(0, match.index);\n\n if (text === \'i\') {\n text = \'\\u0131\'; // dotless i, in math and text mode\n } else if (text === \'j\') {\n text = \'\\u0237\'; // dotless j, in math and text mode\n }\n } // Recognize base symbol\n\n\n let symbol;\n\n if (src_symbols[this.mode][text]) {\n if (this.settings.strict && this.mode === \'math\' && extraLatin.indexOf(text) >= 0) {\n this.settings.reportNonstrict("unicodeTextInMathMode", "Latin-1/Unicode text character \\"" + text[0] + "\\" used in " + "math mode", nucleus);\n }\n\n const group = src_symbols[this.mode][text].group;\n const loc = SourceLocation.range(nucleus);\n let s;\n\n if (ATOMS.hasOwnProperty(group)) {\n // $FlowFixMe\n const family = group;\n s = {\n type: "atom",\n mode: this.mode,\n family,\n loc,\n text\n };\n } else {\n // $FlowFixMe\n s = {\n type: group,\n mode: this.mode,\n loc,\n text\n };\n } // $FlowFixMe\n\n\n symbol = s;\n } else if (text.charCodeAt(0) >= 0x80) {\n // no symbol for e.g. ^\n if (this.settings.strict) {\n if (!supportedCodepoint(text.charCodeAt(0))) {\n this.settings.reportNonstrict("unknownSymbol", "Unrecognized Unicode character \\"" + text[0] + "\\"" + (" (" + text.charCodeAt(0) + ")"), nucleus);\n } else if (this.mode === "math") {\n this.settings.reportNonstrict("unicodeTextInMathMode", "Unicode text character \\"" + text[0] + "\\" used in math mode", nucleus);\n }\n } // All nonmathematical Unicode characters are rendered as if they\n // are in text mode (wrapped in \\text) because that\'s what it\n // takes to render them in LaTeX. Setting `mode: this.mode` is\n // another natural choice (the user requested math mode), but\n // this makes it more difficult for getCharacterMetrics() to\n // distinguish Unicode characters without metrics and those for\n // which we want to simulate the letter M.\n\n\n symbol = {\n type: "textord",\n mode: "text",\n loc: SourceLocation.range(nucleus),\n text\n };\n } else {\n return null; // EOF, ^, _, {, }, etc.\n }\n\n this.consume(); // Transform combining characters into accents\n\n if (match) {\n for (let i = 0; i < match[0].length; i++) {\n const accent = match[0][i];\n\n if (!unicodeAccents[accent]) {\n throw new src_ParseError("Unknown accent \' " + accent + "\'", nucleus);\n }\n\n const command = unicodeAccents[accent][this.mode] || unicodeAccents[accent].text;\n\n if (!command) {\n throw new src_ParseError("Accent " + accent + " unsupported in " + this.mode + " mode", nucleus);\n }\n\n symbol = {\n type: "accent",\n mode: this.mode,\n loc: SourceLocation.range(nucleus),\n label: command,\n isStretchy: false,\n isShifty: true,\n // $FlowFixMe\n base: symbol\n };\n }\n } // $FlowFixMe\n\n\n return symbol;\n }\n\n}\nParser.endOfExpression = ["}", "\\\\endgroup", "\\\\end", "\\\\right", "&"];\n;// CONCATENATED MODULE: ./src/parseTree.js\n/**\n * Provides a single function for parsing an expression using a Parser\n * TODO(emily): Remove this\n */\n\n\n\n\n/**\n * Parses an expression using a Parser, then returns the parsed result.\n */\nconst parseTree = function (toParse, settings) {\n if (!(typeof toParse === \'string\' || toParse instanceof String)) {\n throw new TypeError(\'KaTeX can only parse string typed expression\');\n }\n\n const parser = new Parser(toParse, settings); // Blank out any \\df@tag to avoid spurious "Duplicate \\tag" errors\n\n delete parser.gullet.macros.current["\\\\df@tag"];\n let tree = parser.parse(); // Prevent a color definition from persisting between calls to katex.render().\n\n delete parser.gullet.macros.current["\\\\current@color"];\n delete parser.gullet.macros.current["\\\\color"]; // If the input used \\tag, it will set the \\df@tag macro to the tag.\n // In this case, we separately parse the tag and wrap the tree.\n\n if (parser.gullet.macros.get("\\\\df@tag")) {\n if (!settings.displayMode) {\n throw new src_ParseError("\\\\tag works only in display equations");\n }\n\n tree = [{\n type: "tag",\n mode: "text",\n body: tree,\n tag: parser.subparse([new Token("\\\\df@tag")])\n }];\n }\n\n return tree;\n};\n\n/* harmony default export */ var src_parseTree = (parseTree);\n;// CONCATENATED MODULE: ./katex.js\n/* eslint no-console:0 */\n\n/**\n * This is the main entry point for KaTeX. Here, we expose functions for\n * rendering expressions either to DOM nodes or to markup strings.\n *\n * We also expose the ParseError class to check if errors thrown from KaTeX are\n * errors in the expression, or errors in javascript handling.\n */\n\n\n\n\n\n\n\n\n\n\n\n/**\n * Parse and build an expression, and place that expression in the DOM node\n * given.\n */\nlet render = function (expression, baseNode, options) {\n baseNode.textContent = "";\n const node = renderToDomTree(expression, options).toNode();\n baseNode.appendChild(node);\n}; // KaTeX\'s styles don\'t work properly in quirks mode. Print out an error, and\n// disable rendering.\n\n\nif (typeof document !== "undefined") {\n if (document.compatMode !== "CSS1Compat") {\n typeof console !== "undefined" && console.warn("Warning: KaTeX doesn\'t work in quirks mode. Make sure your " + "website has a suitable doctype.");\n\n render = function () {\n throw new src_ParseError("KaTeX doesn\'t work in quirks mode.");\n };\n }\n}\n/**\n * Parse and build an expression, and return the markup for that.\n */\n\n\nconst renderToString = function (expression, options) {\n const markup = renderToDomTree(expression, options).toMarkup();\n return markup;\n};\n/**\n * Parse an expression and return the parse tree.\n */\n\n\nconst generateParseTree = function (expression, options) {\n const settings = new Settings(options);\n return src_parseTree(expression, settings);\n};\n/**\n * If the given error is a KaTeX ParseError and options.throwOnError is false,\n * renders the invalid LaTeX as a span with hover title giving the KaTeX\n * error message. Otherwise, simply throws the error.\n */\n\n\nconst renderError = function (error, expression, options) {\n if (options.throwOnError || !(error instanceof src_ParseError)) {\n throw error;\n }\n\n const node = buildCommon.makeSpan(["katex-error"], [new SymbolNode(expression)]);\n node.setAttribute("title", error.toString());\n node.setAttribute("style", "color:" + options.errorColor);\n return node;\n};\n/**\n * Generates and returns the katex build tree. This is used for advanced\n * use cases (like rendering to custom output).\n */\n\n\nconst renderToDomTree = function (expression, options) {\n const settings = new Settings(options);\n\n try {\n const tree = src_parseTree(expression, settings);\n return buildTree(tree, expression, settings);\n } catch (error) {\n return renderError(error, expression, settings);\n }\n};\n/**\n * Generates and returns the katex build tree, with just HTML (no MathML).\n * This is used for advanced use cases (like rendering to custom output).\n */\n\n\nconst renderToHTMLTree = function (expression, options) {\n const settings = new Settings(options);\n\n try {\n const tree = src_parseTree(expression, settings);\n return buildHTMLTree(tree, expression, settings);\n } catch (error) {\n return renderError(error, expression, settings);\n }\n};\n\nconst version = "0.16.22";\nconst __domTree = {\n Span: Span,\n Anchor: Anchor,\n SymbolNode: SymbolNode,\n SvgNode: SvgNode,\n PathNode: PathNode,\n LineNode: LineNode\n}; // ESM exports\n\n // CJS exports and ESM default export\n\n/* harmony default export */ var katex = ({\n /**\n * Current KaTeX version\n */\n version,\n\n /**\n * Renders the given LaTeX into an HTML+MathML combination, and adds\n * it as a child to the specified DOM node.\n */\n render,\n\n /**\n * Renders the given LaTeX into an HTML+MathML combination string,\n * for sending to the client.\n */\n renderToString,\n\n /**\n * KaTeX error, usually during parsing.\n */\n ParseError: src_ParseError,\n\n /**\n * The schema of Settings\n */\n SETTINGS_SCHEMA: SETTINGS_SCHEMA,\n\n /**\n * Parses the given LaTeX into KaTeX\'s internal parse tree structure,\n * without rendering to HTML or MathML.\n *\n * NOTE: This method is not currently recommended for public use.\n * The internal tree representation is unstable and is very likely\n * to change. Use at your own risk.\n */\n __parse: generateParseTree,\n\n /**\n * Renders the given LaTeX into an HTML+MathML internal DOM tree\n * representation, without flattening that representation to a string.\n *\n * NOTE: This method is not currently recommended for public use.\n * The internal tree representation is unstable and is very likely\n * to change. Use at your own risk.\n */\n __renderToDomTree: renderToDomTree,\n\n /**\n * Renders the given LaTeX into an HTML internal DOM tree representation,\n * without MathML and without flattening that representation to a string.\n *\n * NOTE: This method is not currently recommended for public use.\n * The internal tree representation is unstable and is very likely\n * to change. Use at your own risk.\n */\n __renderToHTMLTree: renderToHTMLTree,\n\n /**\n * extends internal font metrics object with a new object\n * each key in the new object represents a font name\n */\n __setFontMetrics: setFontMetrics,\n\n /**\n * adds a new symbol to builtin symbols table\n */\n __defineSymbol: defineSymbol,\n\n /**\n * adds a new function to builtin function list,\n * which directly produce parse tree elements\n * and have their own html/mathml builders\n */\n __defineFunction: defineFunction,\n\n /**\n * adds a new macro to builtin macro list\n */\n __defineMacro: defineMacro,\n\n /**\n * Expose the dom tree node types, which can be useful for type checking nodes.\n *\n * NOTE: These methods are not currently recommended for public use.\n * The internal tree representation is unstable and is very likely\n * to change. Use at your own risk.\n */\n __domTree\n});\n;// CONCATENATED MODULE: ./katex.webpack.js\n/**\n * This is the webpack entry point for KaTeX. As ECMAScript, flow[1] and jest[2]\n * doesn\'t support CSS modules natively, a separate entry point is used and\n * it is not flowtyped.\n *\n * [1] https://gist.github.com/lambdahands/d19e0da96285b749f0ef\n * [2] https://facebook.github.io/jest/docs/en/webpack.html\n */\n\n\n/* harmony default export */ var katex_webpack = (katex);\n__nested_webpack_exports__ = __nested_webpack_exports__["default"];\n/******/ \treturn __nested_webpack_exports__;\n/******/ })()\n;\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjMzNi5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBLElBQUksSUFBeUQ7QUFDN0Q7QUFDQSxNQUFNO0FBQUEsRUFLc0I7QUFDNUIsQ0FBQztBQUNELDhCQUE4QjtBQUM5QjtBQUNBO0FBQ0EsY0FBYyw4QkFBbUI7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsOEJBQW1CO0FBQzlCO0FBQ0EsZ0JBQWdCLDhCQUFtQix3QkFBd0IsOEJBQW1CO0FBQzlFLG9EQUFvRCx3Q0FBd0M7QUFDNUY7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBLFdBQVcsOEJBQW1CLDJCQUEyQjtBQUN6RCxXQUFXO0FBQ1g7QUFDQTtBQUNBLElBQUksMEJBQW1COztBQUV2QjtBQUNBLDhCQUFtQixHQUFHLDBCQUFtQjtBQUN6QywwQkFBMEI7QUFDMUIsQ0FBQzs7QUFFRCxDQUFDOzs7QUFHRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQzs7QUFFckM7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0EsUUFBUTs7O0FBR1IsOEVBQThFOztBQUU5RTs7QUFFQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBOztBQUVBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7OztBQUdBO0FBQ0EsOEJBQThCOztBQUU5QjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsRUFBRTs7O0FBR0Y7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBLEdBQUc7OztBQUdIOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGFBQWE7QUFDYixZQUFZO0FBQ1osWUFBWTtBQUNaLGVBQWU7QUFDZixjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBLHVDQUF1Qzs7QUFFdkM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7OztBQUdKO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7OztBQUdBO0FBQ0E7QUFDQSxJQUFJOzs7QUFHSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCxDQUFDO0FBQ0Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSx3R0FBd0csTUFBTTtBQUM5RztBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSw2RUFBNkUsT0FBTyxNQUFNO0FBQzFGO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpRUFBaUU7QUFDakU7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsOENBQThDO0FBQzlDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUEsRUFBRTtBQUNGOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTs7QUFFZixtTkFBbU47O0FBRW5OO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpREFBaUQ7O0FBRWpEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0RBQW9EO0FBQ3BEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx1RUFBdUU7QUFDdkU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGtCQUFrQix1QkFBdUI7QUFDekM7O0FBRUEsb0JBQW9CLDBCQUEwQjtBQUM5Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGtCQUFrQixzQkFBc0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsbUJBQW1COztBQUVuQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx3Q0FBd0M7O0FBRXhDOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLE1BQU07QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQyxVQUFVLFFBQVE7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOzs7QUFHRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBLG9CQUFvQiwwQkFBMEI7QUFDOUM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0EscUJBQXFCOztBQUVyQixvQkFBb0IsMEJBQTBCO0FBQzlDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCxDQUFDOzs7QUFHRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsUUFBUSxZQUFZLFFBQVEsT0FBTyxTQUFTO0FBQ25FO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNFQUFzRTtBQUN0RTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRDQUE0QztBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0NBQXNDLE9BQU87QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQ0FBMkM7QUFDM0M7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjs7QUFFbEI7O0FBRUE7QUFDQTtBQUNBLGtCQUFrQjs7QUFFbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7OztBQUdBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QjtBQUM5QixJQUFJO0FBQ0o7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7OztBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0EsZ0RBQWdEOztBQUVoRCw4Q0FBOEM7O0FBRTlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOzs7QUFHSjtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7OztBQUdKLGtCQUFrQiwwQkFBMEI7QUFDNUM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw4QkFBOEI7O0FBRTlCO0FBQ0E7QUFDQTs7QUFFQSxtQkFBbUI7O0FBRW5CO0FBQ0E7QUFDQSxxRUFBcUU7QUFDckU7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTs7O0FBR0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsaUJBQWlCOztBQUVqQixrQkFBa0IsMEJBQTBCO0FBQzVDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCOztBQUU3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLDhHQUE4Rzs7QUFFOUc7O0FBRUE7QUFDQTtBQUNBLHVFQUF1RTtBQUN2RTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEI7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHVEQUF1RDs7QUFFdkQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0Esb0RBQW9EO0FBQ3BEOztBQUVBO0FBQ0E7QUFDQSx1RUFBdUU7QUFDdkU7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EseURBQXlEOztBQUV6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG9CQUFvQiwwQkFBMEI7QUFDOUM7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsOERBQThEOztBQUU5RDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLG9CQUFvQiwwQkFBMEI7QUFDOUM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDO0FBQ2hDOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsMERBQTBEOztBQUUxRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSwwQkFBMEI7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBOztBQUVBO0FBQ0EsNkJBQTZCOztBQUU3QjtBQUNBLG1CQUFtQjs7QUFFbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkI7QUFDM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1EQUFtRDs7QUFFbkQ7QUFDQSxzREFBc0Q7O0FBRXREO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0REFBNEQ7O0FBRTVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3RUFBd0U7O0FBRXhFO0FBQ0E7QUFDQTtBQUNBLG9FQUFvRTs7QUFFcEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtEQUFrRDtBQUNsRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNFQUFzRTs7QUFFdEUseURBQXlEOztBQUV6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlEQUF5RDs7QUFFekQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5REFBeUQ7O0FBRXpEO0FBQ0E7QUFDQSwrREFBK0Q7O0FBRS9EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbURBQW1EOztBQUVuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUVBQW1FOztBQUVuRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtFQUFrRTs7QUFFbEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseURBQXlEOztBQUV6RDtBQUNBO0FBQ0E7QUFDQSxtRUFBbUU7O0FBRW5FO0FBQ0E7QUFDQSw2REFBNkQ7O0FBRTdEO0FBQ0EsMERBQTBEOztBQUUxRDtBQUNBO0FBQ0E7QUFDQSx1RUFBdUU7O0FBRXZFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0RBQStEO0FBQy9EOztBQUVBO0FBQ0E7QUFDQSxnRUFBZ0U7QUFDaEU7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5REFBeUQ7O0FBRXpEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0REFBNEQ7QUFDNUQ7QUFDQTs7QUFFQSxrRUFBa0U7O0FBRWxFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrRUFBa0U7O0FBRWxFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyREFBMkQ7O0FBRTNELDREQUE0RDs7QUFFNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtRUFBbUU7O0FBRW5FO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdEQUF3RCwrQ0FBK0MsZUFBZTs7QUFFdEg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQyxLQUFLO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUNBQXlDLE9BQU87QUFDaEQsNENBQTRDLE9BQU87QUFDbkQsNENBQTRDO0FBQzVDLDBDQUEwQyxPQUFPO0FBQ2pELDRDQUE0QyxPQUFPO0FBQ25ELDRDQUE0QztBQUM1Qyx5Q0FBeUM7QUFDekMsMENBQTBDO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9FQUFvRTs7QUFFcEUsdUVBQXVFOztBQUV2RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1FQUFtRTs7QUFFbkU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0REFBNEQ7O0FBRTVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBEQUEwRDs7QUFFMUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyREFBMkQ7O0FBRTNELDJEQUEyRDs7QUFFM0QsMkRBQTJEOztBQUUzRCwyREFBMkQ7O0FBRTNELDJEQUEyRDs7QUFFM0QsMkRBQTJEOztBQUUzRCwyREFBMkQ7O0FBRTNELDJEQUEyRDs7QUFFM0QsMkRBQTJEOztBQUUzRCwyREFBMkQ7O0FBRTNELDJEQUEyRDs7QUFFM0QsMkRBQTJEOztBQUUzRCxxRUFBcUU7QUFDckU7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRFQUE0RTs7QUFFNUU7QUFDQSxpRUFBaUU7O0FBRWpFLDJFQUEyRTtBQUMzRTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUVBQWlFO0FBQ2pFOztBQUVBOztBQUVBLGdCQUFnQiw0QkFBNEI7QUFDNUM7QUFDQTtBQUNBLEVBQUU7OztBQUdGLDBDQUEwQzs7QUFFMUMsZ0JBQWdCLHdCQUF3QjtBQUN4QztBQUNBO0FBQ0EsRUFBRTs7O0FBR0Y7O0FBRUEsZ0JBQWdCLG9CQUFvQjtBQUNwQztBQUNBO0FBQ0E7QUFDQSxFQUFFOzs7QUFHRixpREFBaUQ7O0FBRWpEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0RBQWtEOztBQUVsRCwwREFBMEQ7QUFDMUQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsZ0JBQWdCLG9CQUFvQjtBQUNwQyxnQ0FBZ0M7QUFDaEM7QUFDQTs7QUFFQSxzREFBc0Q7O0FBRXREO0FBQ0E7QUFDQSxzREFBc0Q7O0FBRXREO0FBQ0E7QUFDQSxzREFBc0Q7O0FBRXREO0FBQ0E7QUFDQSxzREFBc0Q7O0FBRXREO0FBQ0E7QUFDQSxzREFBc0Q7O0FBRXREO0FBQ0E7QUFDQSxzREFBc0Q7O0FBRXREO0FBQ0E7QUFDQSxzREFBc0Q7O0FBRXREO0FBQ0E7QUFDQSxzREFBc0Q7O0FBRXREO0FBQ0E7QUFDQSxzREFBc0Q7O0FBRXREO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esd0RBQXdEOztBQUV4RDtBQUNBO0FBQ0Esd0RBQXdEOztBQUV4RDtBQUNBO0FBQ0EsSUFBSTs7QUFFSixFQUFFOzs7QUFHRixnREFBZ0Q7O0FBRWhEO0FBQ0EsMERBQTBEOztBQUUxRCxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBLHNEQUFzRDs7QUFFdEQ7QUFDQTtBQUNBLHNEQUFzRDs7QUFFdEQ7QUFDQTtBQUNBLHNEQUFzRDs7QUFFdEQ7QUFDQTtBQUNBLHNEQUFzRDs7QUFFdEQ7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7OztBQUdBOztBQUVBLGdCQUFnQix1QkFBdUI7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0M7O0FBRXBDLG9DQUFvQzs7QUFFcEM7QUFDQSxxQ0FBcUM7O0FBRXJDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCOztBQUU1QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBLHNCQUFzQixpQkFBaUI7QUFDdkM7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTs7O0FBR0o7QUFDQTtBQUNBLElBQUk7QUFDSjs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBLDBGQUEwRjs7QUFFMUY7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0Esa0JBQWtCLHNCQUFzQjtBQUN4QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHFEQUFxRDtBQUNyRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxrQkFBa0IsMEJBQTBCO0FBQzVDOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDO0FBQ3ZDOztBQUVBO0FBQ0E7O0FBRUEsb0JBQW9CLHdCQUF3QjtBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG9CQUFvQiw0QkFBNEI7QUFDaEQ7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksb0NBQW9DO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxrQkFBa0IscUJBQXFCO0FBQ3ZDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDRDQUE0Qzs7QUFFNUM7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsa0JBQWtCLHFCQUFxQjtBQUN2Qzs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOzs7QUFHQTtBQUNBLHVDQUF1Qzs7QUFFdkM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtDQUErQyxzREFBc0Q7QUFDckc7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUMsYUFBYTtBQUNwRDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILFVBQVU7QUFDVixVQUFVO0FBQ1YsV0FBVztBQUNYO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxrQkFBa0Isa0JBQWtCO0FBQ3BDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7O0FBVUEsaURBQWlEO0FBQ2pEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLGtCQUFrQix1QkFBdUI7QUFDekM7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxJQUFJOzs7QUFHSix1Q0FBdUM7QUFDdkM7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7OztBQUdBO0FBQ0Esc0ZBQXNGO0FBQ3RGO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EseUNBQXlDOztBQUV6Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLFNBQVMsa0JBQWtCO0FBQzNCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU0sbUNBQW1DO0FBQ3pDOzs7QUFHQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU07QUFDTixvREFBb0Q7QUFDcEQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxvRUFBb0U7QUFDcEU7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsZ0VBQWdFO0FBQ2hFO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOzs7QUFHSjtBQUNBOztBQUVBO0FBQ0EsNkRBQTZELE9BQU87QUFDcEU7QUFDQTs7QUFFQSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsS0FBSzs7QUFFdkI7O0FBRUEsa0JBQWtCLHVCQUF1QjtBQUN6Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsUUFBUTs7O0FBR1I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxRQUFROzs7QUFHUjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7OztBQUdKOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQSxnREFBZ0Q7QUFDaEQ7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxvQkFBb0IsMEJBQTBCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQSxrQ0FBa0M7O0FBRWxDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxvQkFBb0IsMEJBQTBCO0FBQzlDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QjtBQUN4QjtBQUNBLDhDQUE4QztBQUM5Qzs7QUFFQTtBQUNBLGlDQUFpQztBQUNqQyxNQUFNO0FBQ04saUNBQWlDO0FBQ2pDLE1BQU07QUFDTixpQ0FBaUM7QUFDakMsTUFBTTtBQUNOLHVDQUF1QztBQUN2QyxNQUFNO0FBQ04sdUNBQXVDO0FBQ3ZDLE1BQU07QUFDTix1Q0FBdUM7QUFDdkMsTUFBTTtBQUNOLHVDQUF1QztBQUN2QyxNQUFNO0FBQ04sdUNBQXVDO0FBQ3ZDLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7QUFVQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxvRUFBb0U7QUFDcEU7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQSxNQUFNO0FBQ047QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBLElBQUk7QUFDSjtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDLEdBQUc7QUFDbkM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsa0JBQWtCLHVCQUF1QjtBQUN6Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQixRQUFRO0FBQ1I7QUFDQSxrQkFBa0I7QUFDbEIsUUFBUTtBQUNSO0FBQ0Esa0JBQWtCO0FBQ2xCLFFBQVE7QUFDUjtBQUNBLHNCQUFzQjtBQUN0QjtBQUNBLFFBQVE7QUFDUjs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxVQUFVOztBQUVWLFFBQVE7QUFDUjs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxxRUFBcUU7O0FBRXJFO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxpRUFBaUU7QUFDakU7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTs7O0FBR0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7O0FBR0EsaUVBQWlFOztBQUVqRTtBQUNBO0FBQ0EsQ0FBQzs7Ozs7Ozs7QUFRRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrR0FBa0csQ0FBUztBQUMzRyxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7O0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsK0JBQStCOztBQUUvQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBOztBQUVBLHNCQUFzQixvQkFBb0I7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOzs7QUFHSjtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksbUJBQW1CO0FBQ3ZCOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELENBQUM7OztBQUdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7O0FBR0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxDQUFDOzs7Ozs7Ozs7OztBQVdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdEQUFnRDs7QUFFaEQsdUJBQXVCOztBQUV2QixxQkFBcUI7QUFDckI7O0FBRUEsd0RBQXdEOztBQUV4RDtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EsSUFBSTs7O0FBR0osK0RBQStEOztBQUUvRCxrRUFBa0U7QUFDbEUsbURBQW1EO0FBQ25EO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEM7O0FBRTlDLDBFQUEwRTs7QUFFMUUsZ0RBQWdEO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDZDQUE2Qzs7QUFFN0MsaUhBQWlIOztBQUVqSDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsNENBQTRDO0FBQzVDOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsa0VBQWtFO0FBQ2xFO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTs7O0FBR04scUJBQXFCLGdFQUFnRSxVQUFVO0FBQy9GO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsMENBQTBDO0FBQzFDOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0wsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1YsT0FBTztBQUNQLEtBQUs7QUFDTDs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSwwQ0FBMEM7QUFDMUM7O0FBRUEsMEVBQTBFOztBQUUxRTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsME1BQTBNOztBQUUxTTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsQ0FBQyxHQUFHOztBQUVKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsQ0FBQztBQUNELENBQUM7QUFDRDs7Ozs7OztBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3REFBd0Q7O0FBRXhEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELENBQUM7Ozs7Ozs7O0FBUUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSwySEFBMkgsSUFBSTtBQUMvSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQztBQUNqQyxpQ0FBaUMsd0JBQXdCLEdBQUcsWUFBWTtBQUN4RTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHdEQUF3RDtBQUN4RDs7QUFFQSxtRkFBbUY7O0FBRW5GLHlGQUF5Rjs7QUFFekY7QUFDQSxzQ0FBc0M7QUFDdEMsTUFBTTs7O0FBR047O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULE9BQU87QUFDUCxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxPQUFPO0FBQ1AsTUFBTTs7O0FBR047QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxDQUFDO0FBQ0QsQ0FBQzs7Ozs7OztBQU9EOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBLE1BQU07QUFDTjs7O0FBR0E7QUFDQSx5Q0FBeUM7O0FBRXpDO0FBQ0EsTUFBTTtBQUNOO0FBQ0EseUNBQXlDO0FBQ3pDLE1BQU07QUFDTjtBQUNBO0FBQ0EsTUFBTTtBQUNOLDJDQUEyQzs7QUFFM0M7QUFDQSxNQUFNO0FBQ047O0FBRUE7O0FBRUE7QUFDQSxFQUFFOzs7QUFHRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EseUNBQXlDO0FBQ3pDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxHQUFHLFlBQVksR0FBRyxHQUFHO0FBQ3JCLGtDQUFrQyxFQUFFLFVBQVUsR0FBRzs7QUFFakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQyxHQUFHOztBQUVKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ04sdUJBQXVCO0FBQ3ZCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBLENBQUM7QUFDRCxDQUFDOzs7Ozs7O0FBT0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0Esa0VBQWtFOztBQUVsRTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDO0FBQ0QsQ0FBQzs7Ozs7Ozs7O0FBU0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBLDBCQUEwQjtBQUMxQjs7QUFFQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxzQkFBc0I7O0FBRXRCLGtCQUFrQix1QkFBdUI7QUFDekM7QUFDQSxvQ0FBb0M7O0FBRXBDOztBQUVBLG9CQUFvQixxQkFBcUI7QUFDekM7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSx3QkFBd0I7QUFDeEI7O0FBRUE7QUFDQSxrRUFBa0U7O0FBRWxFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVzs7QUFFWCw0Q0FBNEM7QUFDNUM7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLHlCQUF5QixlQUFlLEVBQUUsZUFBZTtBQUN6RDtBQUNBLGlDQUFpQyxjQUFjO0FBQy9DOztBQUVBLGdDQUFnQyxxQkFBcUI7QUFDckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0EsVUFBVTs7O0FBR1YsMERBQTBEO0FBQzFEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxnQ0FBZ0M7QUFDaEM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7OztBQUdKLDRCQUE0Qjs7QUFFNUIsNEJBQTRCOztBQUU1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0YsK0NBQStDLElBQUk7QUFDbkQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvREFBb0Q7QUFDcEQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBOztBQUVBLENBQUM7QUFDRCxDQUFDOzs7QUFHRDtBQUNBLElBQUksS0FBSztBQUNUOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQSxvQkFBb0Isa0JBQWtCO0FBQ3RDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsOEVBQThFO0FBQzlFO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsTUFBTTtBQUNOLDRCQUE0QjtBQUM1QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUM7QUFDRCxDQUFDOzs7Ozs7OztBQVFEO0FBQ0EsdUZBQXVGO0FBQ3ZGO0FBQ0E7QUFDQSxzQkFBc0IsS0FBSyxLQUFLOztBQUVoQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOLGdFQUFnRTtBQUNoRTtBQUNBO0FBQ0E7O0FBRUEsd0RBQXdEOztBQUV4RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBLENBQUM7QUFDRCxDQUFDO0FBQ0Q7Ozs7O0FBS0EsNEJBQTRCOztBQUU1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLENBQUM7QUFDRCxDQUFDOzs7O0FBSUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLGdCQUFnQjtBQUNoQjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHNDQUFzQyxRQUFRO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxDQUFDLEdBQUc7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUEsa0JBQWtCO0FBQ2xCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDZCQUE2Qjs7QUFFN0IsNkNBQTZDO0FBQzdDOztBQUVBO0FBQ0E7QUFDQSw4Q0FBOEM7QUFDOUM7QUFDQTtBQUNBLDhDQUE4QztBQUM5QztBQUNBLHFDQUFxQztBQUNyQztBQUNBLFVBQVU7QUFDVixxQ0FBcUM7OztBQUdyQzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLE1BQU0sbUNBQW1DLFFBQVE7OztBQUdqRDtBQUNBO0FBQ0EsTUFBTTs7QUFFTjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHdCQUF3QjtBQUN4QixNQUFNOzs7QUFHTjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUMsR0FBRztBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQyxHQUFHOztBQUVKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7OztBQVlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0EsaUJBQWlCOztBQUVqQjtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGtKQUFrSjtBQUNsSjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDLGFBQWE7QUFDcEQ7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCOztBQUVqQiw4QkFBOEI7QUFDOUI7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksdUJBQXVCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLHVCQUF1QjtBQUMzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7O0FBR0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0I7QUFDdEIsSUFBSTtBQUNKOzs7QUFHQSw0RUFBNEU7O0FBRTVFLDhHQUE4Rzs7QUFFOUcsc0ZBQXNGO0FBQ3RGO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTs7O0FBR0osa0RBQWtEO0FBQ2xEOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7O0FBRXJCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsMkRBQTJEOztBQUUzRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07OztBQUdOO0FBQ0E7QUFDQSxJQUFJOzs7QUFHSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIOzs7QUFHQSxrQkFBa0I7O0FBRWxCLG9CQUFvQjs7QUFFcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBLGlEQUFpRDs7QUFFakQ7QUFDQSxrREFBa0Q7QUFDbEQ7QUFDQTs7QUFFQSx5R0FBeUc7O0FBRXpHO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsNEJBQTRCO0FBQzVCLE1BQU07QUFDTiw0QkFBNEI7QUFDNUI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQ0FBMkM7QUFDM0MsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlDQUF5QztBQUN6QyxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7OztBQUdBLHNHQUFzRyxtQkFBbUIsZ0hBQWdIOztBQUV6TyxzU0FBc1M7O0FBRXRTLHFHQUFxRztBQUNyRztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTs7O0FBR0o7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUMsR0FBRzs7QUFFSjtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0EsQ0FBQyxHQUFHO0FBQ0o7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBLElBQUk7QUFDSjtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHNCQUFzQixxQkFBcUI7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxzREFBc0Q7QUFDdEQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTs7O0FBR047QUFDQTtBQUNBO0FBQ0EsSUFBSTs7O0FBR0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxJQUFJOzs7QUFHSjs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTs7O0FBR0osd0VBQXdFO0FBQ3hFO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQSxnRkFBZ0Y7O0FBRWhGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxHQUFHLFlBQVksT0FBTyxPQUFPO0FBQ3hDO0FBQ0EsbUZBQW1GO0FBQ25GOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELENBQUM7Ozs7Ozs7Ozs7O0FBV0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0RkFBNEYsbUJBQW1COztBQUUvRztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTs7O0FBR047QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsK0NBQStDO0FBQy9DO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLG1DQUFtQzs7QUFFbkMsNkJBQTZCOztBQUU3QjtBQUNBLDZCQUE2Qjs7QUFFN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSx5QkFBeUI7O0FBRXpCO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQjs7QUFFM0Isb0JBQW9CLGtCQUFrQjtBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLE1BQU07OztBQUdOLDhCQUE4Qjs7QUFFOUI7QUFDQSxzQkFBc0Isa0JBQWtCO0FBQ3hDLHNDQUFzQztBQUN0QztBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxvQkFBb0I7O0FBRXBCO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLE1BQU07OztBQUdOO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEM7QUFDOUM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QsQ0FBQzs7Ozs7Ozs7Ozs7OztBQWFEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0I7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSyxZQUFZOztBQUVqQjtBQUNBO0FBQ0EsNkVBQTZFOztBQUU3RSxvRUFBb0U7O0FBRXBFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSyxHQUFHOztBQUVSO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsTUFBTTs7O0FBR047QUFDQTtBQUNBLDJCQUEyQjs7QUFFM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0Esa0NBQWtDOztBQUVsQztBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1EQUFtRDs7QUFFbkQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDO0FBQ0QsQ0FBQzs7O0FBR0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGtCQUFrQixrQkFBa0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOzs7QUFHRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9COztBQUVwQjtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7OztBQWlCRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLCtCQUErQix5QkFBeUI7QUFDeEQ7QUFDQSxHQUFHO0FBQ0gsK0NBQStDO0FBQy9DO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7O0FBR0o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOzs7QUFHSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaURBQWlEO0FBQ2pEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGNBQWM7O0FBRWQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsY0FBYyxVQUFVLElBQUk7QUFDNUI7QUFDQSxVQUFVO0FBQ1YsY0FBYyxPQUFPO0FBQ3JCLDZGQUE2RixPQUFPO0FBQ3BHO0FBQ0E7O0FBRUE7QUFDQSxNQUFNO0FBQ04sZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsZ0JBQWdCLGFBQWE7QUFDN0Isc0JBQXNCO0FBQ3RCLHVCQUF1QiwyQkFBMkI7QUFDbEQsNEJBQTRCO0FBQzVCLHlCQUF5Qjs7QUFFekI7QUFDQTtBQUNBOztBQUVBO0FBQ0EsZ0JBQWdCOztBQUVoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsSUFBSTs7O0FBR0osNEJBQTRCOztBQUU1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7OztBQUdBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0EsNEJBQTRCOztBQUU1QjtBQUNBLG1CQUFtQixZQUFZO0FBQy9CLG9EQUFvRCxZQUFZO0FBQ2hFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOzs7QUFHSjtBQUNBO0FBQ0E7QUFDQSxHQUFHLHNCQUFzQjtBQUN6QjtBQUNBOztBQUVBO0FBQ0E7QUFDQSx5Q0FBeUM7O0FBRXpDLHdDQUF3Qzs7QUFFeEMsdUJBQXVCOztBQUV2QjtBQUNBLG9CQUFvQix3QkFBd0I7QUFDNUM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBLGNBQWMsdUJBQXVCO0FBQ3JDO0FBQ0EsZ0NBQWdDOztBQUVoQyw4QkFBOEI7O0FBRTlCO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxnQkFBZ0Isa0JBQWtCO0FBQ2xDOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsdUJBQXVCO0FBQ3ZCOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDOztBQUVoQyxzQkFBc0I7O0FBRXRCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQSwrQkFBK0I7QUFDL0I7QUFDQSxrREFBa0Q7QUFDbEQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaURBQWlEOztBQUVqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsa0JBQWtCLHVCQUF1QjtBQUN6QztBQUNBOztBQUVBLG9CQUFvQixlQUFlO0FBQ25DO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsc0RBQXNEO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxtREFBbUQsWUFBWSxHQUFHO0FBQ2xFO0FBQ0EsaURBQWlEO0FBQ2pEOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEseUJBQXlCLFVBQVU7QUFDbkM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOzs7QUFHSjtBQUNBO0FBQ0E7O0FBRUEsb0JBQW9CLGlCQUFpQjtBQUNyQztBQUNBOztBQUVBO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTs7O0FBR0o7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsa0JBQWtCLHVCQUF1QjtBQUN6QztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHOzs7QUFHSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRyxjQUFjO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEM7QUFDOUM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLG9CQUFvQix5QkFBeUI7QUFDN0M7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esb0JBQW9CLGdCQUFnQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsR0FBRyxHQUFHO0FBQ047QUFDQTs7QUFFQSxrQkFBa0IsYUFBYTtBQUMvQjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLElBQUksUUFBUSxPQUFPLE9BQU87QUFDMUI7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSx1Q0FBdUM7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0EsQ0FBQyxHQUFHO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0IsT0FBTztBQUM3QjtBQUNBO0FBQ0EsS0FBSyxvQ0FBb0M7O0FBRXpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBOztBQUVBLGtGQUFrRjs7QUFFbEY7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsTUFBTTtBQUNOLEdBQUc7O0FBRUg7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBLG1CQUFtQixVQUFVLGVBQWU7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsSUFBSSxVQUFVOztBQUUxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0EsaUNBQWlDLFVBQVU7QUFDM0M7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsaUNBQWlDLFVBQVU7QUFDM0M7O0FBRUE7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxDQUFDLEdBQUc7QUFDSixxQkFBcUIsSUFBSTtBQUN6QixVQUFVLE9BQU8sT0FBTyxHQUFHLEdBQUcsTUFBTSxNQUFNLE9BQU8sTUFBTTtBQUN2RCxJQUFJLFFBQVEsTUFBTSxPQUFPO0FBQ3pCO0FBQ0EsSUFBSSxRQUFROztBQUVaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwREFBMEQ7QUFDMUQscURBQXFEO0FBQ3JEO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxDQUFDLEdBQUc7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxHQUFHO0FBQ0o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBLENBQUMsR0FBRztBQUNKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0EsQ0FBQztBQUNELDBDQUEwQyxFQUFFO0FBQzVDLHNDQUFzQzs7QUFFdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBOztBQUVBLENBQUM7QUFDRCxDQUFDOztBQUVEO0FBQ0Esb0VBQW9FOzs7QUFHcEUsQ0FBQzs7OztBQUlEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsb0JBQW9CLDJCQUEyQjtBQUMvQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsaUNBQWlDLGdCQUFnQjtBQUN6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxvREFBb0QsaUJBQWlCLGlCQUFpQixpQkFBaUI7QUFDdkcsUUFBUTs7O0FBR1I7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDO0FBQ0QsQ0FBQztBQUNEOzs7Ozs7O0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBLHVEQUF1RDtBQUN2RDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxHQUFHOztBQUVKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxDQUFDO0FBQ0QsQ0FBQzs7Ozs7Ozs7Ozs7O0FBWUQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBLElBQUk7OztBQUdKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0wsSUFBSTtBQUNKOzs7QUFHQTtBQUNBO0FBQ0Esb0VBQW9FOztBQUVwRTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQSwyQ0FBMkM7QUFDM0MsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esd0JBQXdCO0FBQ3hCLHlCQUF5QjtBQUN6Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLEdBQUc7QUFDSjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDO0FBQ0Q7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQSwyQkFBMkI7O0FBRTNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLE1BQU07OztBQUdOO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0EsQ0FBQyxHQUFHOztBQUVKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsQ0FBQztBQUNELENBQUM7Ozs7Ozs7OztBQVNEO0FBQ0E7QUFDQTtBQUNBLCtCQUErQjs7QUFFL0I7QUFDQTs7QUFFQTtBQUNBLGdDQUFnQztBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBLElBQUk7OztBQUdKLG1GQUFtRjs7QUFFbkYsc0RBQXNEO0FBQ3REOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSyxZQUFZOztBQUVqQjtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUssWUFBWTs7QUFFakI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVCxPQUFPO0FBQ1AsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBLENBQUM7QUFDRCxDQUFDOzs7Ozs7O0FBT0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBOztBQUVBLG9CQUFvQixpQkFBaUI7QUFDckM7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELENBQUM7Ozs7O0FBS0Q7QUFDQTtBQUNBLFlBQVksTUFBTSxPQUFPLEtBQUssT0FBTyxHQUFHLEdBQUc7QUFDM0M7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBOztBQUVBLENBQUM7QUFDRCxDQUFDOzs7Ozs7O0FBT0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLDBCQUEwQixpQkFBaUI7QUFDM0M7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QsQ0FBQzs7Ozs7QUFLRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELENBQUM7Ozs7Ozs7O0FBUUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSiwwREFBMEQsRUFBRTs7QUFFNUQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHFFQUFxRTs7QUFFckU7O0FBRUEsc0JBQXNCLHVCQUF1QjtBQUM3Qzs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELENBQUM7QUFDRDs7Ozs7QUFLQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjs7QUFFQTtBQUNBLGdEQUFnRDs7QUFFaEQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDO0FBQ0QsQ0FBQztBQUNEOzs7Ozs7O0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsMkVBQTJFOztBQUUzRTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0EsK0VBQStFO0FBQy9FO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLGtDQUFrQztBQUNsQzs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QsQ0FBQzs7QUFFRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQyxHQUFHOztBQUVKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTs7QUFFQSxDQUFDO0FBQ0QsQ0FBQzs7Ozs7OztBQU9EO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCxDQUFDOzs7O0FBSUQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKOzs7QUFHQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0wsSUFBSTtBQUNKLHlDQUF5QztBQUN6QztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTCxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQztBQUNEOzs7Ozs7Ozs7Ozs7QUFZQTtBQUNBLG9DQUFvQztBQUNwQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBLG1DQUFtQzs7QUFFbkM7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7QUFDQSwrQkFBK0I7QUFDL0IsTUFBTTtBQUNOO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBLG9CQUFvQix1QkFBdUI7QUFDM0M7QUFDQTs7QUFFQTtBQUNBLElBQUk7OztBQUdKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtRkFBbUY7QUFDbkY7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0Esb0VBQW9FLGdDQUFnQztBQUNwRzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxDQUFDLEdBQUc7QUFDSjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsQ0FBQyxHQUFHLG9DQUFvQztBQUN4QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0EsQ0FBQyxHQUFHOztBQUVKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxDQUFDLEdBQUc7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxDQUFDO0FBQ0QsQ0FBQzs7Ozs7Ozs7OztBQVVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxLQUFLLEdBQUc7O0FBRVI7O0FBRUEsb0JBQW9CLHVCQUF1QjtBQUMzQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esd0ZBQXdGOztBQUV4RiwwQkFBMEI7O0FBRTFCLGtCQUFrQix1QkFBdUI7QUFDekM7O0FBRUEsK0NBQStDO0FBQy9DLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxvREFBb0Q7QUFDcEQ7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EsR0FBRztBQUNILHVCQUF1QiwyQkFBMkI7OztBQUdsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0EsQ0FBQzs7Ozs7QUFLRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELENBQUM7Ozs7OztBQU1EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBLDZFQUE2RTs7QUFFN0UscUVBQXFFOztBQUVyRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDO0FBQ0QsQ0FBQzs7Ozs7O0FBTUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxnRkFBZ0Y7QUFDaEY7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxzQkFBc0IsMEJBQTBCO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBLE1BQU07OztBQUdOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSyxZQUFZOztBQUVqQjtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELENBQUM7Ozs7Ozs7QUFPRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0wsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUM7QUFDRCxDQUFDOzs7Ozs7QUFNRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBLHNFQUFzRTs7QUFFdEU7QUFDQTtBQUNBLHlFQUF5RTs7QUFFekU7QUFDQTtBQUNBLHVDQUF1Qzs7QUFFdkM7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDO0FBQ0QsQ0FBQzs7Ozs7OztBQU9EO0FBQ0E7QUFDQSwwRUFBMEU7QUFDMUU7O0FBRUEsa0JBQWtCLGtCQUFrQjtBQUNwQzs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJEQUEyRDtBQUMzRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QsQ0FBQztBQUNEOzs7Ozs7O0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EscUNBQXFDLE9BQU8sUUFBUTtBQUNwRCxnQ0FBZ0MsSUFBSSxVQUFVLElBQUksV0FBVyxhQUFhO0FBQzFFOztBQUVBLHNCQUFzQix1QkFBdUI7QUFDN0Msb0NBQW9DOztBQUVwQzs7QUFFQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx1QkFBdUI7O0FBRXZCO0FBQ0Esd0JBQXdCLDBCQUEwQjtBQUNsRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0Esd0JBQXdCLDBCQUEwQjtBQUNsRDtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUssWUFBWTs7QUFFakI7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QsQ0FBQzs7Ozs7Ozs7O0FBU0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047OztBQUdBLHNEQUFzRDs7QUFFdEQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNOzs7QUFHTjtBQUNBLG1GQUFtRjs7QUFFbkY7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ04sK0NBQStDOztBQUUvQztBQUNBO0FBQ0EsTUFBTTs7O0FBR047QUFDQSxvREFBb0Q7O0FBRXBEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLOztBQUVMO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0Esa0VBQWtFO0FBQ2xFOztBQUVBLHdEQUF3RDs7QUFFeEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULE9BQU8sWUFBWTtBQUNuQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUEsQ0FBQztBQUNELENBQUM7Ozs7OztBQU1EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsaUVBQWlFO0FBQ2pFO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUM7QUFDRCxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7QUFlRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLEdBQUc7QUFDSDs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLDJDQUEyQzs7QUFFM0M7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTs7O0FBR047O0FBRUE7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBLE1BQU07QUFDTjtBQUNBLE1BQU07QUFDTjs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxzREFBc0Q7O0FBRXREOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsT0FBTztBQUNQLE1BQU07QUFDTjtBQUNBLE1BQU07OztBQUdOO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047O0FBRUE7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsTUFBTTtBQUNOOztBQUVBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLE1BQU07QUFDTjs7QUFFQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLENBQUM7QUFDRCxDQUFDOzs7O0FBSUQ7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELENBQUM7Ozs7O0FBS0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxDQUFDO0FBQ0Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELENBQUM7Ozs7QUFJRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxTQUFTO0FBQ1QsV0FBVztBQUNYO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxrRUFBa0U7QUFDbEU7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBOztBQUVBLENBQUM7QUFDRCxDQUFDOzs7OztBQUtEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELENBQUM7Ozs7QUFJRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwyQkFBMkI7O0FBRTNCO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxJQUFJO0FBQ0o7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELENBQUM7Ozs7OztBQU1EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBLHdEQUF3RDs7QUFFeEQsc0VBQXNFOztBQUV0RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUM7QUFDRCxDQUFDOzs7OztBQUtEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0wsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELENBQUM7Ozs7O0FBS0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxxQkFBcUI7O0FBRXJCOztBQUVBLG9CQUFvQixpQkFBaUI7QUFDckM7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQztBQUNEOztBQUVBO0FBQ0EsOERBQThEO0FBQzlEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFnREEsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUM7O0FBRXZDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxrREFBa0Q7O0FBRWxELDZGQUE2RjtBQUM3RixRQUFRO0FBQ1I7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0EsMkJBQTJCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0Esd0dBQXdHO0FBQ3hHOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0IsNEJBQTRCO0FBQ2xEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7Ozs7O0FBTUE7QUFDQTs7QUFFQTtBQUNBLHdDQUF3QztBQUN4QztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLDJCQUEyQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0Qjs7QUFFNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLEdBQUcsd0JBQXdCLElBQUksSUFBSTtBQUNwQyx5Q0FBeUM7O0FBRXpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsR0FBRyx5QkFBeUIsSUFBSSxJQUFJO0FBQ3JDLDBDQUEwQzs7QUFFMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxHQUFHLHdCQUF3QixJQUFJLElBQUksSUFBSTtBQUN4QztBQUNBO0FBQ0EsNEJBQTRCOztBQUU1QjtBQUNBLHVDQUF1Qzs7QUFFdkM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLEdBQUcsb0JBQW9CLElBQUksSUFBSTtBQUNoQztBQUNBO0FBQ0EsOEJBQThCLGVBQWUsYUFBYTs7QUFFMUQsMENBQTBDLGNBQWMsSUFBSSxJQUFJLHVCQUF1QixJQUFJLElBQUk7O0FBRS9GO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxHQUFHOztBQUVKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLElBQUk7QUFDSjs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxrQkFBa0IsZUFBZTtBQUNqQyxDQUFDLEdBQUcsZUFBZSxPQUFPLE9BQU87QUFDakMsaUJBQWlCLE9BQU8sT0FBTztBQUMvQix5Q0FBeUMsT0FBTyxnQkFBZ0I7O0FBRWhFO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSwyQ0FBMkMsY0FBYyxzQ0FBc0M7QUFDL0Y7O0FBRUE7QUFDQSw2Q0FBNkMsY0FBYyxtREFBbUQ7QUFDOUc7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwwREFBMEQ7QUFDMUQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxtRkFBbUY7O0FBRW5GO0FBQ0EseUNBQXlDOztBQUV6QztBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0EseUNBQXlDOztBQUV6QztBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSx5QkFBeUI7O0FBRXpCO0FBQ0E7QUFDQSxDQUFDLEdBQUc7QUFDSjtBQUNBLGlCQUFpQjs7QUFFakIsMEJBQTBCO0FBQzFCLDBCQUEwQixJQUFJO0FBQzlCLFNBQVM7QUFDVCxXQUFXO0FBQ1gsV0FBVztBQUNYLGFBQWE7QUFDYixhQUFhOztBQUViO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOEJBQThCO0FBQzlCLDhCQUE4QixnQkFBZ0IsYUFBYTtBQUMzRCw4QkFBOEIsaUJBQWlCLGFBQWE7QUFDNUQ7QUFDQSx5QkFBeUIsWUFBWTtBQUNyQyxlQUFlLFdBQVcsZ0JBQWdCOztBQUUxQyw4Q0FBOEMsY0FBYyxJQUFJLFNBQVM7QUFDekUseUNBQXlDLGlCQUFpQixPQUFPLGlCQUFpQjtBQUNsRiwrQ0FBK0MsY0FBYyxpQkFBaUIsU0FBUyxJQUFJOztBQUUzRixpQ0FBaUMsRUFBRSxJQUFJOztBQUV2QyxpQ0FBaUMsRUFBRTtBQUNuQyxpQ0FBaUMsRUFBRTtBQUNuQyxpQ0FBaUMsRUFBRTtBQUNuQyxpQ0FBaUMsRUFBRTtBQUNuQyxpQ0FBaUMsRUFBRTtBQUNuQyxpQ0FBaUMsRUFBRTtBQUNuQyxpQ0FBaUMsRUFBRTtBQUNuQyxrQ0FBa0MsRUFBRSxJQUFJOztBQUV4QyxrQ0FBa0MsRUFBRTtBQUNwQyxrQ0FBa0MsRUFBRSxJQUFJOztBQUV4Qyw2QkFBNkIsRUFBRSxJQUFJO0FBQ25DO0FBQ0E7O0FBRUEsa0NBQWtDOztBQUVsQyxrQ0FBa0MsU0FBUyxJQUFJO0FBQy9DLGtDQUFrQyxTQUFTLElBQUk7QUFDL0Msa0NBQWtDLFNBQVMsSUFBSSxJQUFJOztBQUVuRCx1Q0FBdUMsRUFBRSxJQUFJOztBQUU3Qyx1Q0FBdUMsT0FBTyxJQUFJLElBQUk7QUFDdEQsc0JBQXNCLE1BQU0sVUFBVSxTQUFTO0FBQy9DO0FBQ0E7QUFDQTs7QUFFQSxvQ0FBb0MsVUFBVSxtQkFBbUIsV0FBVyxJQUFJO0FBQ2hGLFlBQVksT0FBTztBQUNuQjtBQUNBLFlBQVksU0FBUztBQUNyQixtQkFBbUIsY0FBYzs7QUFFakMsb0NBQW9DLFVBQVUsU0FBUyxVQUFVLFVBQVU7QUFDM0U7QUFDQTtBQUNBLHNDQUFzQyxXQUFXLEtBQUssV0FBVyxjQUFjLE1BQU0sVUFBVSxVQUFVO0FBQ3pHLGtDQUFrQzs7QUFFbEMscUNBQXFDLGVBQWUsUUFBUSxLQUFLLFdBQVcsT0FBTyx1QkFBdUIsT0FBTyxVQUFVLGVBQWU7QUFDMUkscUNBQXFDLFdBQVcsZUFBZSxJQUFJLFVBQVUsZUFBZTtBQUM1RixxQ0FBcUMsV0FBVyxhQUFhLElBQUksVUFBVSxlQUFlO0FBQzFGLHFDQUFxQyxXQUFXLG9CQUFvQixHQUFHLE1BQU0sVUFBVSxlQUFlO0FBQ3RHLHFDQUFxQyxXQUFXLGVBQWUsTUFBTSxHQUFHLE1BQU0sVUFBVSxlQUFlO0FBQ3ZHLHFDQUFxQyxXQUFXLGVBQWUsSUFBSSxHQUFHLE1BQU0sVUFBVSxlQUFlO0FBQ3JHLHFDQUFxQyxXQUFXLFNBQVMsSUFBSSxVQUFVLGVBQWUsSUFBSTs7QUFFMUY7QUFDQSxtQ0FBbUMsZ0JBQWdCO0FBQ25EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkNBQTJDO0FBQzNDOztBQUVBLHlDQUF5QyxhQUFhLFNBQVMsY0FBYztBQUM3RSx5Q0FBeUMsYUFBYSxTQUFTLGNBQWM7QUFDN0UseUNBQXlDLGFBQWEsU0FBUyxjQUFjO0FBQzdFLHlDQUF5QyxhQUFhLFNBQVMsY0FBYyxJQUFJO0FBQ2pGO0FBQ0EsVUFBVSxNQUFNO0FBQ2hCLGtCQUFrQixFQUFFLE1BQU0sRUFBRSxNQUFNO0FBQ2xDO0FBQ0E7O0FBRUEseUJBQXlCLGlCQUFpQixLQUFLLE1BQU07QUFDckQsa0NBQWtDO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBLHNDQUFzQyxRQUFROztBQUU5QyxvQ0FBb0MsUUFBUTtBQUM1QyxvQ0FBb0MsUUFBUTtBQUM1QyxvQ0FBb0MsUUFBUTtBQUM1QyxxQ0FBcUMsU0FBUztBQUM5QyxpQ0FBaUMsS0FBSztBQUN0QyxpQ0FBaUMsS0FBSztBQUN0QyxvQ0FBb0MsUUFBUTtBQUM1QyxzQ0FBc0MsVUFBVTtBQUNoRCxrQ0FBa0MsTUFBTTtBQUN4QyxrQ0FBa0MsTUFBTTtBQUN4QyxvQ0FBb0MsUUFBUSxJQUFJLGNBQWMsVUFBVSxJQUFJLFVBQVUsRUFBRTs7QUFFeEYsbUNBQW1DLFVBQVUsRUFBRSxRQUFRLFNBQVMsSUFBSSxpQkFBaUIsUUFBUSw2QkFBNkI7QUFDMUgsc0JBQXNCLEVBQUU7O0FBRXhCLHdEQUF3RCxrQkFBa0IsYUFBYSxpQkFBaUIsRUFBRSxxQkFBcUIsZUFBZSxPQUFPLElBQUksTUFBTTs7QUFFL0osK0JBQStCLGdCQUFnQixHQUFHLEVBQUUsSUFBSSxZQUFZLFFBQVE7QUFDNUUsZ0JBQWdCLFFBQVE7QUFDeEIsa0JBQWtCLFFBQVE7O0FBRTFCLGdDQUFnQyx1QkFBdUI7QUFDdkQsb0NBQW9DLG1CQUFtQjtBQUN2RCxzQ0FBc0Msa0JBQWtCLElBQUksaUJBQWlCLFFBQVEsR0FBRyxTQUFTLGlCQUFpQjtBQUNsSCxVQUFVLGdCQUFnQjtBQUMxQjs7QUFFQSx5QkFBeUIsVUFBVSxXQUFXLFFBQVEsbUJBQW1CLElBQUk7QUFDN0UsMEJBQTBCLFVBQVUsV0FBVyxRQUFRLG9CQUFvQixJQUFJLElBQUk7O0FBRW5GO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBLHNDQUFzQztBQUN0QyxPQUFPOztBQUVQO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0Esc0NBQXNDO0FBQ3RDO0FBQ0E7O0FBRUEsc0NBQXNDO0FBQ3RDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLG1DQUFtQztBQUNuQyx5QkFBeUIsU0FBUyxJQUFJO0FBQ3RDOztBQUVBLHVDQUF1QyxZQUFZLFlBQVksV0FBVyxpQkFBaUIsSUFBSSxxQkFBcUI7QUFDcEg7O0FBRUEsK0JBQStCLEtBQUssUUFBUSxJQUFJOztBQUVoRCxtQ0FBbUMsVUFBVTtBQUM3QyxpQkFBaUIsSUFBSSxvQkFBb0I7QUFDekM7O0FBRUEsNEJBQTRCLElBQUk7QUFDaEMsK0JBQStCLEtBQUssUUFBUSxJQUFJOztBQUVoRCxrQ0FBa0MsaUJBQWlCLElBQUksc0JBQXNCO0FBQzdFOztBQUVBLGdCQUFnQixlQUFlLEtBQUssUUFBUSxJQUFJOztBQUVoRCxnQ0FBZ0MsSUFBSSxpQkFBaUIsSUFBSSxxQkFBcUI7QUFDOUU7O0FBRUEsK0JBQStCLEtBQUssUUFBUSxJQUFJOztBQUVoRCxzQ0FBc0MsZUFBZSxjQUFjLG9CQUFvQjtBQUN2Rjs7QUFFQSx5Q0FBeUMsS0FBSyxRQUFRLElBQUksZUFBZSxnQkFBZ0Isc0JBQXNCO0FBQy9HOztBQUVBLDJDQUEyQyxLQUFLLE9BQU8sSUFBSSxnQkFBZ0I7O0FBRTNFLHlDQUF5QyxlQUFlOztBQUV4RCwrQ0FBK0MsYUFBYTs7QUFFNUQsNENBQTRDLGNBQWM7O0FBRTFELDZDQUE2Qzs7QUFFN0M7QUFDQSwwQ0FBMEMsRUFBRSxHQUFHLEVBQUU7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUEseUJBQXlCLE9BQU8sSUFBSTtBQUNwQyxDQUFDLEdBQUcsaUJBQWlCLE9BQU87QUFDNUIsTUFBTSxtQkFBbUI7QUFDekI7QUFDQSxlQUFlLEtBQUssSUFBSTtBQUN4QjtBQUNBLGlCQUFpQixNQUFNLElBQUksTUFBTSxtQkFBbUI7QUFDcEQsZUFBZSxLQUFLLElBQUk7QUFDeEIsd0JBQXdCLG1CQUFtQjtBQUMzQzs7QUFFQSxvQ0FBb0MsWUFBWSxZQUFZLFlBQVksV0FBVyxlQUFlLFNBQVMsa0JBQWtCLFlBQVksWUFBWSxZQUFZLFdBQVc7QUFDNUssb0RBQW9ELGFBQWEsWUFBWSxZQUFZLFdBQVc7QUFDcEcsOEJBQThCLFNBQVMsYUFBYTtBQUNwRCxvREFBb0QsYUFBYSxhQUFhLGFBQWEsWUFBWSxNQUFNLFNBQVMsWUFBWTtBQUNsSTtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUM7O0FBRWpDLHlDQUF5QyxZQUFZLDhCQUE4QixFQUFFO0FBQ3JGO0FBQ0E7QUFDQTs7QUFFQSwrQkFBK0IsY0FBYywrQkFBK0IsT0FBTyxFQUFFLHFCQUFxQixLQUFLLElBQUkseUJBQXlCLFFBQVE7QUFDcEosWUFBWTtBQUNaLDJCQUEyQixNQUFNO0FBQ2pDO0FBQ0E7QUFDQSxtQ0FBbUM7QUFDbkMsZ0NBQWdDO0FBQ2hDLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxpQ0FBaUMsY0FBYyw4QkFBOEIscUJBQXFCLGdCQUFnQix5QkFBeUIsT0FBTyxJQUFJOztBQUV0SixpQ0FBaUMsY0FBYyw4QkFBOEIscUJBQXFCLGdCQUFnQix5QkFBeUIsT0FBTyxJQUFJLGdDQUFnQztBQUN0TCxrQkFBa0I7QUFDbEIsbUJBQW1CO0FBQ25COztBQUVBO0FBQ0E7QUFDQSxrQ0FBa0MsS0FBSyxJQUFJLHFCQUFxQjtBQUNoRTtBQUNBLGdDQUFnQzs7QUFFaEMscUNBQXFDLGtCQUFrQixTQUFTO0FBQ2hFOztBQUVBLHVDQUF1Qyx3QkFBd0IsSUFBSSw2QkFBNkIsb0JBQW9CLFlBQVk7O0FBRWhJLHlDQUF5QyxlQUFlLHNCQUFzQixhQUFhLGNBQWMsTUFBTSxTQUFTLGNBQWMsSUFBSSw2QkFBNkIsb0JBQW9CLGFBQWE7O0FBRXhNLHlDQUF5QyxlQUFlLHNCQUFzQixjQUFjLEdBQUcsTUFBTSxTQUFTLGNBQWMsSUFBSTtBQUNoSSw2QkFBNkIsa0JBQWtCLGFBQWE7O0FBRTVELHlDQUF5QyxlQUFlLG9CQUFvQixjQUFjLEdBQUcsTUFBTSxTQUFTLHdCQUF3QixJQUFJLDRCQUE0QixvQkFBb0IsYUFBYSxTQUFTOztBQUU5TSx3Q0FBd0MsZUFBZSxzQkFBc0IsY0FBYyxVQUFVLElBQUksTUFBTSxTQUFTLHdCQUF3QixJQUFJLDRCQUE0QixrQkFBa0IsYUFBYSxTQUFTOztBQUV4Tix3Q0FBd0MsZUFBZSxvQkFBb0IsY0FBYyxVQUFVLElBQUksTUFBTSxTQUFTLDBCQUEwQixJQUFJLDZCQUE2QixVQUFVLGFBQWE7O0FBRXhNLHlDQUF5QyxlQUFlLFdBQVcsY0FBYyxjQUFjLE1BQU0sU0FBUyxjQUFjLElBQUk7QUFDaEksNkJBQTZCLFVBQVUsYUFBYTs7QUFFcEQseUNBQXlDLGVBQWUsV0FBVyxjQUFjLFlBQVksTUFBTSxTQUFTLHdCQUF3QixJQUFJLDRCQUE0QixTQUFTLEVBQUUsU0FBUyxhQUFhOztBQUVyTSx3Q0FBd0MsZUFBZSxVQUFVLEVBQUUsVUFBVSxjQUFjLGNBQWMsTUFBTSxTQUFTLGNBQWMsSUFBSSw0QkFBNEIsU0FBUyxFQUFFLFNBQVMsYUFBYTs7QUFFdk0sd0NBQXdDLGVBQWUsVUFBVSxFQUFFLFVBQVUsY0FBYyxZQUFZLE1BQU0sU0FBUywwQkFBMEIsSUFBSSxnQ0FBZ0Msb0JBQW9CLGFBQWE7O0FBRXJOLDRDQUE0QyxlQUFlLHNCQUFzQixjQUFjLFVBQVUsTUFBTSxTQUFTLHdCQUF3QixJQUFJLGdDQUFnQyxrQkFBa0IsYUFBYTs7QUFFbk4sNENBQTRDLGVBQWUsb0JBQW9CLGNBQWMsVUFBVSxNQUFNLFNBQVMsMEJBQTBCLElBQUksNkJBQTZCLG9CQUFvQixhQUFhOztBQUVsTix5Q0FBeUMsZUFBZSxzQkFBc0IsY0FBYyxPQUFPLE1BQU0sU0FBUyx3QkFBd0IsSUFBSSw2QkFBNkIsa0JBQWtCLGFBQWE7O0FBRTFNLHlDQUF5QyxlQUFlLG9CQUFvQixjQUFjLE9BQU8sTUFBTSxTQUFTLDBCQUEwQixJQUFJOztBQUU5SSxxQ0FBcUM7O0FBRXJDLG9DQUFvQzs7QUFFcEMscUNBQXFDOztBQUVyQyxxQ0FBcUM7O0FBRXJDLHFDQUFxQztBQUNyQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0NBQStDOztBQUUvQyxvREFBb0Q7O0FBRXBELDhDQUE4Qzs7QUFFOUMscUNBQXFDLGVBQWUsY0FBYyxhQUFhO0FBQy9FLDBDQUEwQyxlQUFlLGNBQWMsV0FBVztBQUNsRix3Q0FBd0Msa0JBQWtCLGNBQWMsYUFBYTtBQUNyRiw2Q0FBNkMsa0JBQWtCLGNBQWMsV0FBVyxJQUFJOztBQUU1RixzQ0FBc0MsV0FBVyxVQUFVLGVBQWU7QUFDMUUsZ0RBQWdELFVBQVU7QUFDMUQsZ0RBQWdELFVBQVUsSUFBSTtBQUM5RDs7QUFFQSxnREFBZ0QsVUFBVTtBQUMxRCxpREFBaUQsV0FBVztBQUM1RCxtREFBbUQsV0FBVyxLQUFLO0FBQ25FLG1EQUFtRCxZQUFZLEtBQUs7QUFDcEUsbURBQW1ELGtCQUFrQixLQUFLO0FBQzFFLG9EQUFvRCxpQkFBaUIsS0FBSyxJQUFJO0FBQzlFOztBQUVBLDBDQUEwQyxjQUFjLE9BQU87QUFDL0QsMENBQTBDLGNBQWMsT0FBTztBQUMvRCxzQ0FBc0MsVUFBVSxPQUFPO0FBQ3ZELDBDQUEwQyxjQUFjLE9BQU87QUFDL0Qsc0NBQXNDLFVBQVUsT0FBTztBQUN2RCwwQ0FBMEMsY0FBYyxPQUFPO0FBQy9ELDBDQUEwQyxjQUFjLEVBQUU7QUFDMUQsK0NBQStDLG1CQUFtQixFQUFFO0FBQ3BFLDJDQUEyQyxlQUFlLE9BQU87QUFDakUsMkNBQTJDLGVBQWUsT0FBTztBQUNqRSw2Q0FBNkMsaUJBQWlCLEVBQUU7QUFDaEUsOENBQThDLGtCQUFrQixFQUFFO0FBQ2xFLDZDQUE2QyxpQkFBaUIsRUFBRTtBQUNoRSw4Q0FBOEMsa0JBQWtCLEVBQUU7QUFDbEUsc0NBQXNDLFVBQVUsT0FBTztBQUN2RCxzQ0FBc0MsVUFBVSxPQUFPLElBQUk7QUFDM0Q7QUFDQTtBQUNBOztBQUVBLDBDQUEwQyxnQkFBZ0IsaUJBQWlCLE1BQU0sV0FBVyxlQUFlO0FBQzNHLDBDQUEwQyxpQkFBaUIsaUJBQWlCLE1BQU0sWUFBWSxlQUFlO0FBQzdHLHNDQUFzQzs7QUFFdEMsc0NBQXNDOztBQUV0Qyx1Q0FBdUMsZ0JBQWdCLEdBQUcsZ0JBQWdCLE1BQU0sV0FBVyxlQUFlO0FBQzFHLHVDQUF1QyxpQkFBaUIsbUJBQW1CLE1BQU0sWUFBWSxlQUFlO0FBQzVHLG1DQUFtQzs7QUFFbkMsbUNBQW1DO0FBQ25DO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG1DQUFtQyxjQUFjLE1BQU0sV0FBVyxhQUFhLE9BQU8sVUFBVSxPQUFPLFNBQVMsTUFBTSxPQUFPLFdBQVcsT0FBTyxVQUFVLFFBQVEsSUFBSSxNQUFNLFVBQVU7QUFDckwsOEJBQThCO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdURBQXVEOztBQUV2RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCLEVBQUU7QUFDL0IsNkJBQTZCLEVBQUU7QUFDL0IsNkJBQTZCLEVBQUU7QUFDL0I7QUFDQTtBQUNBLGlDQUFpQyxFQUFFO0FBQ25DLGdDQUFnQyxFQUFFO0FBQ2xDO0FBQ0EsK0JBQStCLEVBQUU7QUFDakM7QUFDQSxpQ0FBaUMsRUFBRTtBQUNuQyxtQ0FBbUMsRUFBRTtBQUNyQztBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsRUFBRTtBQUNyQywrQkFBK0IsRUFBRTtBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQyxFQUFFO0FBQ2xDO0FBQ0EsaUNBQWlDLEVBQUU7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLEVBQUU7QUFDaEMsbUNBQW1DLEVBQUU7QUFDckMsOEJBQThCLEVBQUU7QUFDaEMsbUNBQW1DLEVBQUU7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQyxFQUFFO0FBQ25DLGlDQUFpQyxFQUFFO0FBQ25DLCtCQUErQixFQUFFO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixFQUFFO0FBQ2pDLHlDQUF5Qyw0Q0FBNEMsUUFBUTs7QUFFN0Y7QUFDQSxnQ0FBZ0MsRUFBRSxJQUFJO0FBQ3RDO0FBQ0E7O0FBRUEsZ0RBQWdELFVBQVU7QUFDMUQsZ0RBQWdELFVBQVU7QUFDMUQsdUNBQXVDLGVBQWUsTUFBTSxZQUFZO0FBQ3hFO0FBQ0E7O0FBRUEsa0NBQWtDLFNBQVMsR0FBRyxFQUFFO0FBQ2hELGtDQUFrQyxFQUFFLEdBQUcsU0FBUztBQUNoRCxxQ0FBcUMsU0FBUyxHQUFHLFNBQVM7QUFDMUQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsbUNBQW1DLGVBQWUsTUFBTSxzQkFBc0Isc0JBQXNCLGdCQUFnQjtBQUNwSCxnQ0FBZ0MsU0FBUyxJQUFJLE1BQU0sR0FBRyxtQkFBbUIsR0FBRyxtQkFBbUIsY0FBYztBQUM3RyxnQ0FBZ0MsR0FBRyxLQUFLLFNBQVMsT0FBTyxJQUFJO0FBQzVEO0FBQ0E7O0FBRUEseUJBQXlCLFNBQVMsSUFBSTs7QUFFdEMsbUNBQW1DLFVBQVUsR0FBRztBQUNoRCxxQ0FBcUMsVUFBVSxHQUFHO0FBQ2xELG1DQUFtQyxVQUFVLEdBQUc7QUFDaEQsa0NBQWtDLFVBQVUsR0FBRztBQUMvQyxvQ0FBb0MsVUFBVSxHQUFHO0FBQ2pELG1DQUFtQyxNQUFNLEdBQUc7QUFDNUMscUNBQXFDLFVBQVUsR0FBRztBQUNsRCxvQ0FBb0MsVUFBVSxHQUFHO0FBQ2pELG9DQUFvQyxVQUFVLEdBQUc7QUFDakQsb0NBQW9DLFVBQVUsR0FBRztBQUNqRCxvQ0FBb0MsVUFBVSxHQUFHO0FBQ2pELG9DQUFvQyxVQUFVLEdBQUc7QUFDakQsb0NBQW9DLFVBQVUsR0FBRztBQUNqRCxvQ0FBb0MsVUFBVSxHQUFHO0FBQ2pELG9DQUFvQyxVQUFVLEdBQUc7QUFDakQsb0NBQW9DLFVBQVUsR0FBRztBQUNqRCxvQ0FBb0MsVUFBVSxHQUFHO0FBQ2pELHFDQUFxQyxVQUFVLEdBQUc7QUFDbEQscUNBQXFDLFVBQVUsR0FBRztBQUNsRCxxQ0FBcUMsVUFBVSxHQUFHO0FBQ2xELHFDQUFxQyxVQUFVLEdBQUc7QUFDbEQscUNBQXFDLFVBQVUsR0FBRztBQUNsRCxvQ0FBb0MsVUFBVSxHQUFHO0FBQ2pELG9DQUFvQyxVQUFVLEdBQUc7QUFDakQsb0NBQW9DLFVBQVUsR0FBRztBQUNqRCxvQ0FBb0MsVUFBVSxHQUFHO0FBQ2pELG9DQUFvQyxVQUFVLEdBQUc7QUFDakQsbUNBQW1DLFVBQVUsR0FBRztBQUNoRCxtQ0FBbUMsVUFBVSxHQUFHO0FBQ2hELG1DQUFtQyxVQUFVLEdBQUc7QUFDaEQsbUNBQW1DLFVBQVUsR0FBRztBQUNoRCxtQ0FBbUMsVUFBVSxHQUFHO0FBQ2hELHNDQUFzQyxVQUFVLEdBQUc7QUFDbkQsc0NBQXNDLFVBQVUsR0FBRztBQUNuRCxzQ0FBc0MsVUFBVSxHQUFHO0FBQ25ELHNDQUFzQyxVQUFVLEdBQUc7QUFDbkQsc0NBQXNDLFVBQVUsR0FBRztBQUNuRCxzQ0FBc0MsVUFBVSxHQUFHO0FBQ25ELHNDQUFzQyxVQUFVLEdBQUc7QUFDbkQsc0NBQXNDLFVBQVUsR0FBRztBQUNuRCxzQ0FBc0MsVUFBVSxHQUFHO0FBQ25ELHNDQUFzQyxVQUFVLEdBQUc7QUFDbkQsb0NBQW9DLFVBQVUsR0FBRztBQUNqRCxvQ0FBb0MsVUFBVSxHQUFHO0FBQ2pELG9DQUFvQyxVQUFVLEdBQUc7QUFDakQsb0NBQW9DLFVBQVUsR0FBRztBQUNqRCxvQ0FBb0MsVUFBVSxHQUFHO0FBQ2pELG9DQUFvQyxVQUFVLEdBQUc7QUFDakQsb0NBQW9DLFVBQVUsR0FBRztBQUNqRCxvQ0FBb0MsVUFBVSxHQUFHO0FBQ2pELG9DQUFvQyxVQUFVLEdBQUc7QUFDakQsb0NBQW9DLFVBQVUsR0FBRztBQUNqRCxvQ0FBb0MsVUFBVSxHQUFHO0FBQ2pELG9DQUFvQyxVQUFVLEdBQUc7QUFDakQscUNBQXFDLFVBQVUsR0FBRztBQUNsRCxzQ0FBc0MsVUFBVSxHQUFHO0FBQ25ELENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCOztBQUV0QjtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQSxtQkFBbUI7O0FBRW5CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw0QkFBNEI7O0FBRTVCO0FBQ0E7QUFDQTs7QUFFQSwrQkFBK0I7O0FBRS9CO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUixNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1IsTUFBTTs7O0FBR047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0EsV0FBVztBQUNYOztBQUVBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBLHVEQUF1RCxLQUFLO0FBQzVEO0FBQ0E7QUFDQSxxQ0FBcUM7QUFDckMsZUFBZSxLQUFLO0FBQ3BCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDRDQUE0QyxJQUFJO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSx5QkFBeUI7QUFDekI7QUFDQSxRQUFRLHdCQUF3QjtBQUNoQzs7QUFFQTtBQUNBLDJDQUEyQztBQUMzQztBQUNBLFFBQVE7QUFDUiw2SUFBNkk7QUFDN0k7O0FBRUE7QUFDQSwrREFBK0Q7QUFDL0Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQSxNQUFNLG9DQUFvQyw0Q0FBNEMsZ0JBQWdCO0FBQ3RHOzs7QUFHQSx5QkFBeUIsMENBQTBDO0FBQ25FO0FBQ0E7QUFDQTs7QUFFQSxzQkFBc0I7O0FBRXRCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLHNCQUFzQixtQkFBbUI7QUFDekM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxvQkFBb0IsYUFBYTtBQUNqQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSwrQkFBK0I7O0FBRS9CLHNDQUFzQyxRQUFRO0FBQzlDOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDZCQUE2Qjs7QUFFN0I7QUFDQTtBQUNBLHFDQUFxQztBQUNyQyxZQUFZO0FBQ1o7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07OztBQUdOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQSx3Q0FBd0M7QUFDeEM7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047OztBQUdBLHVCQUF1QjtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU07QUFDTjs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx3QkFBd0I7O0FBRXhCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCxDQUFDO0FBQ0Q7Ozs7Ozs7Ozs7O0FBV0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCO0FBQ3hCOztBQUVBLGlFQUFpRTs7QUFFakUsOEJBQThCOztBQUU5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxpREFBaUQ7O0FBRWpELDBCQUEwQjs7QUFFMUI7QUFDQTtBQUNBOztBQUVBLG9CQUFvQjtBQUNwQixNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixvREFBb0Q7O0FBRXhFLHNDQUFzQztBQUN0QztBQUNBO0FBQ0Esa0JBQWtCLElBQUk7O0FBRXRCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckIsOEJBQThCOztBQUU5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUVBQXlFO0FBQ3pFOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUEsb0JBQW9CLGlCQUFpQjtBQUNyQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTs7QUFFQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEI7QUFDMUI7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLE1BQU07O0FBRU47QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQSxvQkFBb0IsaUJBQWlCO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQSw0REFBNEQ7QUFDNUQ7O0FBRUE7QUFDQTtBQUNBLE1BQU07OztBQUdOO0FBQ0E7QUFDQSxNQUFNOzs7QUFHTjtBQUNBOztBQUVBO0FBQ0E7QUFDQSw0QkFBNEI7O0FBRTVCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTs7QUFFQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7O0FBRVg7QUFDQSx3QkFBd0I7O0FBRXhCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWOzs7QUFHQTtBQUNBO0FBQ0EsVUFBVTs7O0FBR1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3Qjs7QUFFeEI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxVQUFVOzs7QUFHVjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxvQkFBb0I7O0FBRXBCO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0EsOERBQThELEtBQUs7QUFDbkU7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxvQkFBb0IsZUFBZTtBQUNuQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxZQUFZO0FBQ1o7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsb0JBQW9COztBQUVwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsK0JBQStCLEVBQUUsWUFBWSxFQUFFOztBQUUvQztBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsbUJBQW1CLEVBQUU7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQSx5QkFBeUI7O0FBRXpCOztBQUVBLHFEQUFxRDtBQUNyRCwwRUFBMEUsS0FBSztBQUMvRSxNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0I7O0FBRXhCLHNCQUFzQjtBQUN0Qjs7QUFFQSwwREFBMEQsRUFBRTs7QUFFNUQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0EsMkNBQTJDOztBQUUzQywyQ0FBMkM7O0FBRTNDO0FBQ0EsMkNBQTJDOztBQUUzQywyQ0FBMkM7O0FBRTNDO0FBQ0E7QUFDQSxNQUFNO0FBQ04sMkNBQTJDO0FBQzNDO0FBQ0E7OztBQUdBLCtDQUErQztBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMkRBQTJEOztBQUUzRCx3QkFBd0I7O0FBRXhCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0NBQXdDLElBQUk7QUFDNUM7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjs7QUFFaEIsbUJBQW1CO0FBQ25CO0FBQ0Esa0NBQWtDLE1BQU07QUFDeEMsZ0NBQWdDOztBQUVoQztBQUNBO0FBQ0EsNkJBQTZCOztBQUU3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBLG9CQUFvQixPQUFPO0FBQzNCLDBCQUEwQjs7QUFFMUI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsUUFBUTtBQUNSOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUEsOEJBQThCOztBQUU5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxNQUFNOzs7QUFHTjs7QUFFQTtBQUNBOztBQUVBO0FBQ0EseUJBQXlCO0FBQ3pCLFFBQVE7QUFDUix5QkFBeUI7QUFDekI7QUFDQSxNQUFNOzs7QUFHTjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFROzs7QUFHUjtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOLG1CQUFtQixlQUFlLEdBQUc7QUFDckM7O0FBRUEsb0JBQW9COztBQUVwQjtBQUNBLHNCQUFzQixxQkFBcUI7QUFDM0M7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTs7O0FBR047QUFDQTs7QUFFQTtBQUNBLDRCQUE0QjtBQUM1QixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsZ0RBQWdEOztBQUVoRDtBQUNBLDZCQUE2Qjs7QUFFN0I7QUFDQSxrREFBa0Q7QUFDbEQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQztBQUNEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7QUFZQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0EsMEJBQW1CLEdBQUcsMEJBQW1CO0FBQ3pDLGlCQUFpQiwwQkFBbUI7QUFDcEMsVUFBVTtBQUNWO0FBQ0EsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL29ic2lkaWFuLW1pbmRtYXAtbmV4dGdlbi8uL25vZGVfbW9kdWxlcy8ucG5wbS9rYXRleEAwLjE2LjIyL25vZGVfbW9kdWxlcy9rYXRleC9kaXN0L2thdGV4LmpzP2VlZWMiXSwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoW10sIGZhY3RvcnkpO1xuXHRlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jylcblx0XHRleHBvcnRzW1wia2F0ZXhcIl0gPSBmYWN0b3J5KCk7XG5cdGVsc2Vcblx0XHRyb290W1wia2F0ZXhcIl0gPSBmYWN0b3J5KCk7XG59KSgodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnID8gc2VsZiA6IHRoaXMpLCBmdW5jdGlvbigpIHtcbnJldHVybiAvKioqKioqLyAoZnVuY3Rpb24oKSB7IC8vIHdlYnBhY2tCb290c3RyYXBcbi8qKioqKiovIFx0XCJ1c2Ugc3RyaWN0XCI7XG4vKioqKioqLyBcdC8vIFRoZSByZXF1aXJlIHNjb3BlXG4vKioqKioqLyBcdHZhciBfX3dlYnBhY2tfcmVxdWlyZV9fID0ge307XG4vKioqKioqLyBcdFxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qKioqKiovIFx0Lyogd2VicGFjay9ydW50aW1lL2RlZmluZSBwcm9wZXJ0eSBnZXR0ZXJzICovXG4vKioqKioqLyBcdCFmdW5jdGlvbigpIHtcbi8qKioqKiovIFx0XHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9ucyBmb3IgaGFybW9ueSBleHBvcnRzXG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgZGVmaW5pdGlvbikge1xuLyoqKioqKi8gXHRcdFx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuLyoqKioqKi8gXHRcdFx0XHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZGVmaW5pdGlvbiwga2V5KSAmJiAhX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIGtleSkpIHtcbi8qKioqKiovIFx0XHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZGVmaW5pdGlvbltrZXldIH0pO1xuLyoqKioqKi8gXHRcdFx0XHR9XG4vKioqKioqLyBcdFx0XHR9XG4vKioqKioqLyBcdFx0fTtcbi8qKioqKiovIFx0fSgpO1xuLyoqKioqKi8gXHRcbi8qKioqKiovIFx0Lyogd2VicGFjay9ydW50aW1lL2hhc093blByb3BlcnR5IHNob3J0aGFuZCAqL1xuLyoqKioqKi8gXHQhZnVuY3Rpb24oKSB7XG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqLCBwcm9wKSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKTsgfVxuLyoqKioqKi8gXHR9KCk7XG4vKioqKioqLyBcdFxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbnZhciBfX3dlYnBhY2tfZXhwb3J0c19fID0ge307XG5cbi8vIEVYUE9SVFNcbl9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCB7XG4gIFwiZGVmYXVsdFwiOiBmdW5jdGlvbigpIHsgcmV0dXJuIC8qIGJpbmRpbmcgKi8ga2F0ZXhfd2VicGFjazsgfVxufSk7XG5cbjsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9QYXJzZUVycm9yLmpzXG5cblxuLyoqXG4gKiBUaGlzIGlzIHRoZSBQYXJzZUVycm9yIGNsYXNzLCB3aGljaCBpcyB0aGUgbWFpbiBlcnJvciB0aHJvd24gYnkgS2FUZVhcbiAqIGZ1bmN0aW9ucyB3aGVuIHNvbWV0aGluZyBoYXMgZ29uZSB3cm9uZy4gVGhpcyBpcyB1c2VkIHRvIGRpc3Rpbmd1aXNoIGludGVybmFsXG4gKiBlcnJvcnMgZnJvbSBlcnJvcnMgaW4gdGhlIGV4cHJlc3Npb24gdGhhdCB0aGUgdXNlciBwcm92aWRlZC5cbiAqXG4gKiBJZiBwb3NzaWJsZSwgYSBjYWxsZXIgc2hvdWxkIHByb3ZpZGUgYSBUb2tlbiBvciBQYXJzZU5vZGUgd2l0aCBpbmZvcm1hdGlvblxuICogYWJvdXQgd2hlcmUgaW4gdGhlIHNvdXJjZSBzdHJpbmcgdGhlIHByb2JsZW0gb2NjdXJyZWQuXG4gKi9cbmNsYXNzIFBhcnNlRXJyb3Ige1xuICAvLyBFcnJvciBzdGFydCBwb3NpdGlvbiBiYXNlZCBvbiBwYXNzZWQtaW4gVG9rZW4gb3IgUGFyc2VOb2RlLlxuICAvLyBMZW5ndGggb2YgYWZmZWN0ZWQgdGV4dCBiYXNlZCBvbiBwYXNzZWQtaW4gVG9rZW4gb3IgUGFyc2VOb2RlLlxuICAvLyBUaGUgdW5kZXJseWluZyBlcnJvciBtZXNzYWdlIHdpdGhvdXQgYW55IGNvbnRleHQgYWRkZWQuXG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2UsIC8vIFRoZSBlcnJvciBtZXNzYWdlXG4gIHRva2VuIC8vIEFuIG9iamVjdCBwcm92aWRpbmcgcG9zaXRpb24gaW5mb3JtYXRpb25cbiAgKSB7XG4gICAgdGhpcy5uYW1lID0gdm9pZCAwO1xuICAgIHRoaXMucG9zaXRpb24gPSB2b2lkIDA7XG4gICAgdGhpcy5sZW5ndGggPSB2b2lkIDA7XG4gICAgdGhpcy5yYXdNZXNzYWdlID0gdm9pZCAwO1xuICAgIGxldCBlcnJvciA9IFwiS2FUZVggcGFyc2UgZXJyb3I6IFwiICsgbWVzc2FnZTtcbiAgICBsZXQgc3RhcnQ7XG4gICAgbGV0IGVuZDtcbiAgICBjb25zdCBsb2MgPSB0b2tlbiAmJiB0b2tlbi5sb2M7XG5cbiAgICBpZiAobG9jICYmIGxvYy5zdGFydCA8PSBsb2MuZW5kKSB7XG4gICAgICAvLyBJZiB3ZSBoYXZlIHRoZSBpbnB1dCBhbmQgYSBwb3NpdGlvbiwgbWFrZSB0aGUgZXJyb3IgYSBiaXQgZmFuY2llclxuICAgICAgLy8gR2V0IHRoZSBpbnB1dFxuICAgICAgY29uc3QgaW5wdXQgPSBsb2MubGV4ZXIuaW5wdXQ7IC8vIFByZXBlbmQgc29tZSBpbmZvcm1hdGlvblxuXG4gICAgICBzdGFydCA9IGxvYy5zdGFydDtcbiAgICAgIGVuZCA9IGxvYy5lbmQ7XG5cbiAgICAgIGlmIChzdGFydCA9PT0gaW5wdXQubGVuZ3RoKSB7XG4gICAgICAgIGVycm9yICs9IFwiIGF0IGVuZCBvZiBpbnB1dDogXCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlcnJvciArPSBcIiBhdCBwb3NpdGlvbiBcIiArIChzdGFydCArIDEpICsgXCI6IFwiO1xuICAgICAgfSAvLyBVbmRlcmxpbmUgdG9rZW4gaW4gcXVlc3Rpb24gdXNpbmcgY29tYmluaW5nIHVuZGVyc2NvcmVzXG5cblxuICAgICAgY29uc3QgdW5kZXJsaW5lZCA9IGlucHV0LnNsaWNlKHN0YXJ0LCBlbmQpLnJlcGxhY2UoL1teXS9nLCBcIiQmXFx1MDMzMlwiKTsgLy8gRXh0cmFjdCBzb21lIGNvbnRleHQgZnJvbSB0aGUgaW5wdXQgYW5kIGFkZCBpdCB0byB0aGUgZXJyb3JcblxuICAgICAgbGV0IGxlZnQ7XG5cbiAgICAgIGlmIChzdGFydCA+IDE1KSB7XG4gICAgICAgIGxlZnQgPSBcIuKAplwiICsgaW5wdXQuc2xpY2Uoc3RhcnQgLSAxNSwgc3RhcnQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGVmdCA9IGlucHV0LnNsaWNlKDAsIHN0YXJ0KTtcbiAgICAgIH1cblxuICAgICAgbGV0IHJpZ2h0O1xuXG4gICAgICBpZiAoZW5kICsgMTUgPCBpbnB1dC5sZW5ndGgpIHtcbiAgICAgICAgcmlnaHQgPSBpbnB1dC5zbGljZShlbmQsIGVuZCArIDE1KSArIFwi4oCmXCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByaWdodCA9IGlucHV0LnNsaWNlKGVuZCk7XG4gICAgICB9XG5cbiAgICAgIGVycm9yICs9IGxlZnQgKyB1bmRlcmxpbmVkICsgcmlnaHQ7XG4gICAgfSAvLyBTb21lIGhhY2tlcnkgdG8gbWFrZSBQYXJzZUVycm9yIGEgcHJvdG90eXBlIG9mIEVycm9yXG4gICAgLy8gU2VlIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzg0NjA3NTNcbiAgICAvLyAkRmxvd0ZpeE1lXG5cblxuICAgIGNvbnN0IHNlbGYgPSBuZXcgRXJyb3IoZXJyb3IpO1xuICAgIHNlbGYubmFtZSA9IFwiUGFyc2VFcnJvclwiOyAvLyAkRmxvd0ZpeE1lXG5cbiAgICBzZWxmLl9fcHJvdG9fXyA9IFBhcnNlRXJyb3IucHJvdG90eXBlO1xuICAgIHNlbGYucG9zaXRpb24gPSBzdGFydDtcblxuICAgIGlmIChzdGFydCAhPSBudWxsICYmIGVuZCAhPSBudWxsKSB7XG4gICAgICBzZWxmLmxlbmd0aCA9IGVuZCAtIHN0YXJ0O1xuICAgIH1cblxuICAgIHNlbGYucmF3TWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgcmV0dXJuIHNlbGY7XG4gIH1cblxufSAvLyAkRmxvd0ZpeE1lIE1vcmUgaGFja2VyeVxuXG5cblBhcnNlRXJyb3IucHJvdG90eXBlLl9fcHJvdG9fXyA9IEVycm9yLnByb3RvdHlwZTtcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHNyY19QYXJzZUVycm9yID0gKFBhcnNlRXJyb3IpO1xuOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL3V0aWxzLmpzXG4vKipcbiAqIFRoaXMgZmlsZSBjb250YWlucyBhIGxpc3Qgb2YgdXRpbGl0eSBmdW5jdGlvbnMgd2hpY2ggYXJlIHVzZWZ1bCBpbiBvdGhlclxuICogZmlsZXMuXG4gKi9cblxuLyoqXG4gKiBSZXR1cm4gd2hldGhlciBhbiBlbGVtZW50IGlzIGNvbnRhaW5lZCBpbiBhIGxpc3RcbiAqL1xuY29uc3QgY29udGFpbnMgPSBmdW5jdGlvbiAobGlzdCwgZWxlbSkge1xuICByZXR1cm4gbGlzdC5pbmRleE9mKGVsZW0pICE9PSAtMTtcbn07XG4vKipcbiAqIFByb3ZpZGUgYSBkZWZhdWx0IHZhbHVlIGlmIGEgc2V0dGluZyBpcyB1bmRlZmluZWRcbiAqIE5PVEU6IENvdWxkbid0IHVzZSBgVGAgYXMgdGhlIG91dHB1dCB0eXBlIGR1ZSB0byBmYWNlYm9vay9mbG93IzUwMjIuXG4gKi9cblxuXG5jb25zdCBkZWZsdCA9IGZ1bmN0aW9uIChzZXR0aW5nLCBkZWZhdWx0SWZVbmRlZmluZWQpIHtcbiAgcmV0dXJuIHNldHRpbmcgPT09IHVuZGVmaW5lZCA/IGRlZmF1bHRJZlVuZGVmaW5lZCA6IHNldHRpbmc7XG59OyAvLyBoeXBoZW5hdGUgYW5kIGVzY2FwZSBhZGFwdGVkIGZyb20gRmFjZWJvb2sncyBSZWFjdCB1bmRlciBBcGFjaGUgMiBsaWNlbnNlXG5cblxuY29uc3QgdXBwZXJjYXNlID0gLyhbQS1aXSkvZztcblxuY29uc3QgaHlwaGVuYXRlID0gZnVuY3Rpb24gKHN0cikge1xuICByZXR1cm4gc3RyLnJlcGxhY2UodXBwZXJjYXNlLCBcIi0kMVwiKS50b0xvd2VyQ2FzZSgpO1xufTtcblxuY29uc3QgRVNDQVBFX0xPT0tVUCA9IHtcbiAgXCImXCI6IFwiJmFtcDtcIixcbiAgXCI+XCI6IFwiJmd0O1wiLFxuICBcIjxcIjogXCImbHQ7XCIsXG4gIFwiXFxcIlwiOiBcIiZxdW90O1wiLFxuICBcIidcIjogXCImI3gyNztcIlxufTtcbmNvbnN0IEVTQ0FQRV9SRUdFWCA9IC9bJj48XCInXS9nO1xuLyoqXG4gKiBFc2NhcGVzIHRleHQgdG8gcHJldmVudCBzY3JpcHRpbmcgYXR0YWNrcy5cbiAqL1xuXG5mdW5jdGlvbiB1dGlsc19lc2NhcGUodGV4dCkge1xuICByZXR1cm4gU3RyaW5nKHRleHQpLnJlcGxhY2UoRVNDQVBFX1JFR0VYLCBtYXRjaCA9PiBFU0NBUEVfTE9PS1VQW21hdGNoXSk7XG59XG4vKipcbiAqIFNvbWV0aW1lcyB3ZSB3YW50IHRvIHB1bGwgb3V0IHRoZSBpbm5lcm1vc3QgZWxlbWVudCBvZiBhIGdyb3VwLiBJbiBtb3N0XG4gKiBjYXNlcywgdGhpcyB3aWxsIGp1c3QgYmUgdGhlIGdyb3VwIGl0c2VsZiwgYnV0IHdoZW4gb3JkZ3JvdXBzIGFuZCBjb2xvcnMgaGF2ZVxuICogYSBzaW5nbGUgZWxlbWVudCwgd2Ugd2FudCB0byBwdWxsIHRoYXQgb3V0LlxuICovXG5cblxuY29uc3QgZ2V0QmFzZUVsZW0gPSBmdW5jdGlvbiAoZ3JvdXApIHtcbiAgaWYgKGdyb3VwLnR5cGUgPT09IFwib3JkZ3JvdXBcIikge1xuICAgIGlmIChncm91cC5ib2R5Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgcmV0dXJuIGdldEJhc2VFbGVtKGdyb3VwLmJvZHlbMF0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZ3JvdXA7XG4gICAgfVxuICB9IGVsc2UgaWYgKGdyb3VwLnR5cGUgPT09IFwiY29sb3JcIikge1xuICAgIGlmIChncm91cC5ib2R5Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgcmV0dXJuIGdldEJhc2VFbGVtKGdyb3VwLmJvZHlbMF0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZ3JvdXA7XG4gICAgfVxuICB9IGVsc2UgaWYgKGdyb3VwLnR5cGUgPT09IFwiZm9udFwiKSB7XG4gICAgcmV0dXJuIGdldEJhc2VFbGVtKGdyb3VwLmJvZHkpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBncm91cDtcbiAgfVxufTtcbi8qKlxuICogVGVYYm9vayBhbGdvcml0aG1zIG9mdGVuIHJlZmVyZW5jZSBcImNoYXJhY3RlciBib3hlc1wiLCB3aGljaCBhcmUgc2ltcGx5IGdyb3Vwc1xuICogd2l0aCBhIHNpbmdsZSBjaGFyYWN0ZXIgaW4gdGhlbS4gVG8gZGVjaWRlIGlmIHNvbWV0aGluZyBpcyBhIGNoYXJhY3RlciBib3gsXG4gKiB3ZSBmaW5kIGl0cyBpbm5lcm1vc3QgZ3JvdXAsIGFuZCBzZWUgaWYgaXQgaXMgYSBzaW5nbGUgY2hhcmFjdGVyLlxuICovXG5cblxuY29uc3QgaXNDaGFyYWN0ZXJCb3ggPSBmdW5jdGlvbiAoZ3JvdXApIHtcbiAgY29uc3QgYmFzZUVsZW0gPSBnZXRCYXNlRWxlbShncm91cCk7IC8vIFRoZXNlIGFyZSBhbGwgdGhleSB0eXBlcyBvZiBncm91cHMgd2hpY2ggaG9sZCBzaW5nbGUgY2hhcmFjdGVyc1xuXG4gIHJldHVybiBiYXNlRWxlbS50eXBlID09PSBcIm1hdGhvcmRcIiB8fCBiYXNlRWxlbS50eXBlID09PSBcInRleHRvcmRcIiB8fCBiYXNlRWxlbS50eXBlID09PSBcImF0b21cIjtcbn07XG5cbmNvbnN0IGFzc2VydCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICBpZiAoIXZhbHVlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCBub24tbnVsbCwgYnV0IGdvdCAnICsgU3RyaW5nKHZhbHVlKSk7XG4gIH1cblxuICByZXR1cm4gdmFsdWU7XG59O1xuLyoqXG4gKiBSZXR1cm4gdGhlIHByb3RvY29sIG9mIGEgVVJMLCBvciBcIl9yZWxhdGl2ZVwiIGlmIHRoZSBVUkwgZG9lcyBub3Qgc3BlY2lmeSBhXG4gKiBwcm90b2NvbCAoYW5kIHRodXMgaXMgcmVsYXRpdmUpLCBvciBgbnVsbGAgaWYgVVJMIGhhcyBpbnZhbGlkIHByb3RvY29sXG4gKiAoc28gc2hvdWxkIGJlIG91dHJpZ2h0IHJlamVjdGVkKS5cbiAqL1xuXG5jb25zdCBwcm90b2NvbEZyb21VcmwgPSBmdW5jdGlvbiAodXJsKSB7XG4gIC8vIENoZWNrIGZvciBwb3NzaWJsZSBsZWFkaW5nIHByb3RvY29sLlxuICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI3VybC1wYXJzaW5nIHN0cmlwcyBsZWFkaW5nIHdoaXRlc3BhY2VcbiAgLy8gKFUrMjApIG9yIEMwIGNvbnRyb2wgKFUrMDAtVSsxRikgY2hhcmFjdGVycy5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnRyb2wtcmVnZXhcbiAgY29uc3QgcHJvdG9jb2wgPSAvXltcXHgwMC1cXHgyMF0qKFteXFxcXC8jP10qPykoOnwmIzAqNTh8JiN4MCozYXwmY29sb24pL2kuZXhlYyh1cmwpO1xuXG4gIGlmICghcHJvdG9jb2wpIHtcbiAgICByZXR1cm4gXCJfcmVsYXRpdmVcIjtcbiAgfSAvLyBSZWplY3Qgd2VpcmQgY29sb25zXG5cblxuICBpZiAocHJvdG9jb2xbMl0gIT09IFwiOlwiKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH0gLy8gUmVqZWN0IGludmFsaWQgY2hhcmFjdGVycyBpbiBzY2hlbWUgYWNjb3JkaW5nIHRvXG4gIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjMzk4NiNzZWN0aW9uLTMuMVxuXG5cbiAgaWYgKCEvXlthLXpBLVpdW2EtekEtWjAtOStcXC0uXSokLy50ZXN0KHByb3RvY29sWzFdKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9IC8vIExvd2VyY2FzZSB0aGUgcHJvdG9jb2xcblxuXG4gIHJldHVybiBwcm90b2NvbFsxXS50b0xvd2VyQ2FzZSgpO1xufTtcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHV0aWxzID0gKHtcbiAgY29udGFpbnMsXG4gIGRlZmx0LFxuICBlc2NhcGU6IHV0aWxzX2VzY2FwZSxcbiAgaHlwaGVuYXRlLFxuICBnZXRCYXNlRWxlbSxcbiAgaXNDaGFyYWN0ZXJCb3gsXG4gIHByb3RvY29sRnJvbVVybFxufSk7XG47Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvU2V0dGluZ3MuanNcbi8qIGVzbGludCBuby1jb25zb2xlOjAgKi9cblxuLyoqXG4gKiBUaGlzIGlzIGEgbW9kdWxlIGZvciBzdG9yaW5nIHNldHRpbmdzIHBhc3NlZCBpbnRvIEthVGVYLiBJdCBjb3JyZWN0bHkgaGFuZGxlc1xuICogZGVmYXVsdCBzZXR0aW5ncy5cbiAqL1xuXG5cblxuLy8gVE9ETzogYXV0b21hdGljYWxseSBnZW5lcmF0ZSBkb2N1bWVudGF0aW9uXG4vLyBUT0RPOiBjaGVjayBhbGwgcHJvcGVydGllcyBvbiBTZXR0aW5ncyBleGlzdFxuLy8gVE9ETzogY2hlY2sgdGhlIHR5cGUgb2YgYSBwcm9wZXJ0eSBvbiBTZXR0aW5ncyBtYXRjaGVzXG5jb25zdCBTRVRUSU5HU19TQ0hFTUEgPSB7XG4gIGRpc3BsYXlNb2RlOiB7XG4gICAgdHlwZTogXCJib29sZWFuXCIsXG4gICAgZGVzY3JpcHRpb246IFwiUmVuZGVyIG1hdGggaW4gZGlzcGxheSBtb2RlLCB3aGljaCBwdXRzIHRoZSBtYXRoIGluIFwiICsgXCJkaXNwbGF5IHN0eWxlIChzbyBcXFxcaW50IGFuZCBcXFxcc3VtIGFyZSBsYXJnZSwgZm9yIGV4YW1wbGUpLCBhbmQgXCIgKyBcImNlbnRlcnMgdGhlIG1hdGggb24gdGhlIHBhZ2Ugb24gaXRzIG93biBsaW5lLlwiLFxuICAgIGNsaTogXCItZCwgLS1kaXNwbGF5LW1vZGVcIlxuICB9LFxuICBvdXRwdXQ6IHtcbiAgICB0eXBlOiB7XG4gICAgICBlbnVtOiBbXCJodG1sQW5kTWF0aG1sXCIsIFwiaHRtbFwiLCBcIm1hdGhtbFwiXVxuICAgIH0sXG4gICAgZGVzY3JpcHRpb246IFwiRGV0ZXJtaW5lcyB0aGUgbWFya3VwIGxhbmd1YWdlIG9mIHRoZSBvdXRwdXQuXCIsXG4gICAgY2xpOiBcIi1GLCAtLWZvcm1hdCA8dHlwZT5cIlxuICB9LFxuICBsZXFubzoge1xuICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICAgIGRlc2NyaXB0aW9uOiBcIlJlbmRlciBkaXNwbGF5IG1hdGggaW4gbGVxbm8gc3R5bGUgKGxlZnQtanVzdGlmaWVkIHRhZ3MpLlwiXG4gIH0sXG4gIGZsZXFuOiB7XG4gICAgdHlwZTogXCJib29sZWFuXCIsXG4gICAgZGVzY3JpcHRpb246IFwiUmVuZGVyIGRpc3BsYXkgbWF0aCBmbHVzaCBsZWZ0LlwiXG4gIH0sXG4gIHRocm93T25FcnJvcjoge1xuICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICAgIGRlZmF1bHQ6IHRydWUsXG4gICAgY2xpOiBcIi10LCAtLW5vLXRocm93LW9uLWVycm9yXCIsXG4gICAgY2xpRGVzY3JpcHRpb246IFwiUmVuZGVyIGVycm9ycyAoaW4gdGhlIGNvbG9yIGdpdmVuIGJ5IC0tZXJyb3ItY29sb3IpIGluc1wiICsgXCJ0ZWFkIG9mIHRocm93aW5nIGEgUGFyc2VFcnJvciBleGNlcHRpb24gd2hlbiBlbmNvdW50ZXJpbmcgYW4gZXJyb3IuXCJcbiAgfSxcbiAgZXJyb3JDb2xvcjoge1xuICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgZGVmYXVsdDogXCIjY2MwMDAwXCIsXG4gICAgY2xpOiBcIi1jLCAtLWVycm9yLWNvbG9yIDxjb2xvcj5cIixcbiAgICBjbGlEZXNjcmlwdGlvbjogXCJBIGNvbG9yIHN0cmluZyBnaXZlbiBpbiB0aGUgZm9ybWF0ICdyZ2InIG9yICdycmdnYmInIFwiICsgXCIobm8gIykuIFRoaXMgb3B0aW9uIGRldGVybWluZXMgdGhlIGNvbG9yIG9mIGVycm9ycyByZW5kZXJlZCBieSB0aGUgXCIgKyBcIi10IG9wdGlvbi5cIixcbiAgICBjbGlQcm9jZXNzb3I6IGNvbG9yID0+IFwiI1wiICsgY29sb3JcbiAgfSxcbiAgbWFjcm9zOiB7XG4gICAgdHlwZTogXCJvYmplY3RcIixcbiAgICBjbGk6IFwiLW0sIC0tbWFjcm8gPGRlZj5cIixcbiAgICBjbGlEZXNjcmlwdGlvbjogXCJEZWZpbmUgY3VzdG9tIG1hY3JvIG9mIHRoZSBmb3JtICdcXFxcZm9vOmV4cGFuc2lvbicgKHVzZSBcIiArIFwibXVsdGlwbGUgLW0gYXJndW1lbnRzIGZvciBtdWx0aXBsZSBtYWNyb3MpLlwiLFxuICAgIGNsaURlZmF1bHQ6IFtdLFxuICAgIGNsaVByb2Nlc3NvcjogKGRlZiwgZGVmcykgPT4ge1xuICAgICAgZGVmcy5wdXNoKGRlZik7XG4gICAgICByZXR1cm4gZGVmcztcbiAgICB9XG4gIH0sXG4gIG1pblJ1bGVUaGlja25lc3M6IHtcbiAgICB0eXBlOiBcIm51bWJlclwiLFxuICAgIGRlc2NyaXB0aW9uOiBcIlNwZWNpZmllcyBhIG1pbmltdW0gdGhpY2tuZXNzLCBpbiBlbXMsIGZvciBmcmFjdGlvbiBsaW5lcyxcIiArIFwiIGBcXFxcc3FydGAgdG9wIGxpbmVzLCBge2FycmF5fWAgdmVydGljYWwgbGluZXMsIGBcXFxcaGxpbmVgLCBcIiArIFwiYFxcXFxoZGFzaGxpbmVgLCBgXFxcXHVuZGVybGluZWAsIGBcXFxcb3ZlcmxpbmVgLCBhbmQgdGhlIGJvcmRlcnMgb2YgXCIgKyBcImBcXFxcZmJveGAsIGBcXFxcYm94ZWRgLCBhbmQgYFxcXFxmY29sb3Jib3hgLlwiLFxuICAgIHByb2Nlc3NvcjogdCA9PiBNYXRoLm1heCgwLCB0KSxcbiAgICBjbGk6IFwiLS1taW4tcnVsZS10aGlja25lc3MgPHNpemU+XCIsXG4gICAgY2xpUHJvY2Vzc29yOiBwYXJzZUZsb2F0XG4gIH0sXG4gIGNvbG9ySXNUZXh0Q29sb3I6IHtcbiAgICB0eXBlOiBcImJvb2xlYW5cIixcbiAgICBkZXNjcmlwdGlvbjogXCJNYWtlcyBcXFxcY29sb3IgYmVoYXZlIGxpa2UgTGFUZVgncyAyLWFyZ3VtZW50IFxcXFx0ZXh0Y29sb3IsIFwiICsgXCJpbnN0ZWFkIG9mIExhVGVYJ3Mgb25lLWFyZ3VtZW50IFxcXFxjb2xvciBtb2RlIGNoYW5nZS5cIixcbiAgICBjbGk6IFwiLWIsIC0tY29sb3ItaXMtdGV4dC1jb2xvclwiXG4gIH0sXG4gIHN0cmljdDoge1xuICAgIHR5cGU6IFt7XG4gICAgICBlbnVtOiBbXCJ3YXJuXCIsIFwiaWdub3JlXCIsIFwiZXJyb3JcIl1cbiAgICB9LCBcImJvb2xlYW5cIiwgXCJmdW5jdGlvblwiXSxcbiAgICBkZXNjcmlwdGlvbjogXCJUdXJuIG9uIHN0cmljdCAvIExhVGVYIGZhaXRoZnVsbmVzcyBtb2RlLCB3aGljaCB0aHJvd3MgYW4gXCIgKyBcImVycm9yIGlmIHRoZSBpbnB1dCB1c2VzIGZlYXR1cmVzIHRoYXQgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgTGFUZVguXCIsXG4gICAgY2xpOiBcIi1TLCAtLXN0cmljdFwiLFxuICAgIGNsaURlZmF1bHQ6IGZhbHNlXG4gIH0sXG4gIHRydXN0OiB7XG4gICAgdHlwZTogW1wiYm9vbGVhblwiLCBcImZ1bmN0aW9uXCJdLFxuICAgIGRlc2NyaXB0aW9uOiBcIlRydXN0IHRoZSBpbnB1dCwgZW5hYmxpbmcgYWxsIEhUTUwgZmVhdHVyZXMgc3VjaCBhcyBcXFxcdXJsLlwiLFxuICAgIGNsaTogXCItVCwgLS10cnVzdFwiXG4gIH0sXG4gIG1heFNpemU6IHtcbiAgICB0eXBlOiBcIm51bWJlclwiLFxuICAgIGRlZmF1bHQ6IEluZmluaXR5LFxuICAgIGRlc2NyaXB0aW9uOiBcIklmIG5vbi16ZXJvLCBhbGwgdXNlci1zcGVjaWZpZWQgc2l6ZXMsIGUuZy4gaW4gXCIgKyBcIlxcXFxydWxlezUwMGVtfXs1MDBlbX0sIHdpbGwgYmUgY2FwcGVkIHRvIG1heFNpemUgZW1zLiBPdGhlcndpc2UsIFwiICsgXCJlbGVtZW50cyBhbmQgc3BhY2VzIGNhbiBiZSBhcmJpdHJhcmlseSBsYXJnZVwiLFxuICAgIHByb2Nlc3NvcjogcyA9PiBNYXRoLm1heCgwLCBzKSxcbiAgICBjbGk6IFwiLXMsIC0tbWF4LXNpemUgPG4+XCIsXG4gICAgY2xpUHJvY2Vzc29yOiBwYXJzZUludFxuICB9LFxuICBtYXhFeHBhbmQ6IHtcbiAgICB0eXBlOiBcIm51bWJlclwiLFxuICAgIGRlZmF1bHQ6IDEwMDAsXG4gICAgZGVzY3JpcHRpb246IFwiTGltaXQgdGhlIG51bWJlciBvZiBtYWNybyBleHBhbnNpb25zIHRvIHRoZSBzcGVjaWZpZWQgXCIgKyBcIm51bWJlciwgdG8gcHJldmVudCBlLmcuIGluZmluaXRlIG1hY3JvIGxvb3BzLiBJZiBzZXQgdG8gSW5maW5pdHksIFwiICsgXCJ0aGUgbWFjcm8gZXhwYW5kZXIgd2lsbCB0cnkgdG8gZnVsbHkgZXhwYW5kIGFzIGluIExhVGVYLlwiLFxuICAgIHByb2Nlc3NvcjogbiA9PiBNYXRoLm1heCgwLCBuKSxcbiAgICBjbGk6IFwiLWUsIC0tbWF4LWV4cGFuZCA8bj5cIixcbiAgICBjbGlQcm9jZXNzb3I6IG4gPT4gbiA9PT0gXCJJbmZpbml0eVwiID8gSW5maW5pdHkgOiBwYXJzZUludChuKVxuICB9LFxuICBnbG9iYWxHcm91cDoge1xuICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICAgIGNsaTogZmFsc2VcbiAgfVxufTtcblxuZnVuY3Rpb24gZ2V0RGVmYXVsdFZhbHVlKHNjaGVtYSkge1xuICBpZiAoc2NoZW1hLmRlZmF1bHQpIHtcbiAgICByZXR1cm4gc2NoZW1hLmRlZmF1bHQ7XG4gIH1cblxuICBjb25zdCB0eXBlID0gc2NoZW1hLnR5cGU7XG4gIGNvbnN0IGRlZmF1bHRUeXBlID0gQXJyYXkuaXNBcnJheSh0eXBlKSA/IHR5cGVbMF0gOiB0eXBlO1xuXG4gIGlmICh0eXBlb2YgZGVmYXVsdFR5cGUgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGRlZmF1bHRUeXBlLmVudW1bMF07XG4gIH1cblxuICBzd2l0Y2ggKGRlZmF1bHRUeXBlKSB7XG4gICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgcmV0dXJuICcnO1xuXG4gICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgIHJldHVybiAwO1xuXG4gICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgIHJldHVybiB7fTtcbiAgfVxufVxuLyoqXG4gKiBUaGUgbWFpbiBTZXR0aW5ncyBvYmplY3RcbiAqXG4gKiBUaGUgY3VycmVudCBvcHRpb25zIHN0b3JlZCBhcmU6XG4gKiAgLSBkaXNwbGF5TW9kZTogV2hldGhlciB0aGUgZXhwcmVzc2lvbiBzaG91bGQgYmUgdHlwZXNldCBhcyBpbmxpbmUgbWF0aFxuICogICAgICAgICAgICAgICAgIChmYWxzZSwgdGhlIGRlZmF1bHQpLCBtZWFuaW5nIHRoYXQgdGhlIG1hdGggc3RhcnRzIGluXG4gKiAgICAgICAgICAgICAgICAgXFx0ZXh0c3R5bGUgYW5kIGlzIHBsYWNlZCBpbiBhbiBpbmxpbmUtYmxvY2spOyBvciBhcyBkaXNwbGF5XG4gKiAgICAgICAgICAgICAgICAgbWF0aCAodHJ1ZSksIG1lYW5pbmcgdGhhdCB0aGUgbWF0aCBzdGFydHMgaW4gXFxkaXNwbGF5c3R5bGVcbiAqICAgICAgICAgICAgICAgICBhbmQgaXMgcGxhY2VkIGluIGEgYmxvY2sgd2l0aCB2ZXJ0aWNhbCBtYXJnaW4uXG4gKi9cblxuXG5jbGFzcyBTZXR0aW5ncyB7XG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICB0aGlzLmRpc3BsYXlNb2RlID0gdm9pZCAwO1xuICAgIHRoaXMub3V0cHV0ID0gdm9pZCAwO1xuICAgIHRoaXMubGVxbm8gPSB2b2lkIDA7XG4gICAgdGhpcy5mbGVxbiA9IHZvaWQgMDtcbiAgICB0aGlzLnRocm93T25FcnJvciA9IHZvaWQgMDtcbiAgICB0aGlzLmVycm9yQ29sb3IgPSB2b2lkIDA7XG4gICAgdGhpcy5tYWNyb3MgPSB2b2lkIDA7XG4gICAgdGhpcy5taW5SdWxlVGhpY2tuZXNzID0gdm9pZCAwO1xuICAgIHRoaXMuY29sb3JJc1RleHRDb2xvciA9IHZvaWQgMDtcbiAgICB0aGlzLnN0cmljdCA9IHZvaWQgMDtcbiAgICB0aGlzLnRydXN0ID0gdm9pZCAwO1xuICAgIHRoaXMubWF4U2l6ZSA9IHZvaWQgMDtcbiAgICB0aGlzLm1heEV4cGFuZCA9IHZvaWQgMDtcbiAgICB0aGlzLmdsb2JhbEdyb3VwID0gdm9pZCAwO1xuICAgIC8vIGFsbG93IG51bGwgb3B0aW9uc1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgZm9yIChjb25zdCBwcm9wIGluIFNFVFRJTkdTX1NDSEVNQSkge1xuICAgICAgaWYgKFNFVFRJTkdTX1NDSEVNQS5oYXNPd25Qcm9wZXJ0eShwcm9wKSkge1xuICAgICAgICAvLyAkRmxvd0ZpeE1lXG4gICAgICAgIGNvbnN0IHNjaGVtYSA9IFNFVFRJTkdTX1NDSEVNQVtwcm9wXTsgLy8gVE9ETzogdmFsaWRhdGUgb3B0aW9uc1xuICAgICAgICAvLyAkRmxvd0ZpeE1lXG5cbiAgICAgICAgdGhpc1twcm9wXSA9IG9wdGlvbnNbcHJvcF0gIT09IHVuZGVmaW5lZCA/IHNjaGVtYS5wcm9jZXNzb3IgPyBzY2hlbWEucHJvY2Vzc29yKG9wdGlvbnNbcHJvcF0pIDogb3B0aW9uc1twcm9wXSA6IGdldERlZmF1bHRWYWx1ZShzY2hlbWEpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICAvKipcbiAgICogUmVwb3J0IG5vbnN0cmljdCAobm9uLUxhVGVYLWNvbXBhdGlibGUpIGlucHV0LlxuICAgKiBDYW4gc2FmZWx5IG5vdCBiZSBjYWxsZWQgaWYgYHRoaXMuc3RyaWN0YCBpcyBmYWxzZSBpbiBKYXZhU2NyaXB0LlxuICAgKi9cblxuXG4gIHJlcG9ydE5vbnN0cmljdChlcnJvckNvZGUsIGVycm9yTXNnLCB0b2tlbikge1xuICAgIGxldCBzdHJpY3QgPSB0aGlzLnN0cmljdDtcblxuICAgIGlmICh0eXBlb2Ygc3RyaWN0ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIC8vIEFsbG93IHJldHVybiB2YWx1ZSBvZiBzdHJpY3QgZnVuY3Rpb24gdG8gYmUgYm9vbGVhbiBvciBzdHJpbmdcbiAgICAgIC8vIChvciBudWxsL3VuZGVmaW5lZCwgbWVhbmluZyBubyBmdXJ0aGVyIHByb2Nlc3NpbmcpLlxuICAgICAgc3RyaWN0ID0gc3RyaWN0KGVycm9yQ29kZSwgZXJyb3JNc2csIHRva2VuKTtcbiAgICB9XG5cbiAgICBpZiAoIXN0cmljdCB8fCBzdHJpY3QgPT09IFwiaWdub3JlXCIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2UgaWYgKHN0cmljdCA9PT0gdHJ1ZSB8fCBzdHJpY3QgPT09IFwiZXJyb3JcIikge1xuICAgICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiTGFUZVgtaW5jb21wYXRpYmxlIGlucHV0IGFuZCBzdHJpY3QgbW9kZSBpcyBzZXQgdG8gJ2Vycm9yJzogXCIgKyAoZXJyb3JNc2cgKyBcIiBbXCIgKyBlcnJvckNvZGUgKyBcIl1cIiksIHRva2VuKTtcbiAgICB9IGVsc2UgaWYgKHN0cmljdCA9PT0gXCJ3YXJuXCIpIHtcbiAgICAgIHR5cGVvZiBjb25zb2xlICE9PSBcInVuZGVmaW5lZFwiICYmIGNvbnNvbGUud2FybihcIkxhVGVYLWluY29tcGF0aWJsZSBpbnB1dCBhbmQgc3RyaWN0IG1vZGUgaXMgc2V0IHRvICd3YXJuJzogXCIgKyAoZXJyb3JNc2cgKyBcIiBbXCIgKyBlcnJvckNvZGUgKyBcIl1cIikpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyB3b24ndCBoYXBwZW4gaW4gdHlwZS1zYWZlIGNvZGVcbiAgICAgIHR5cGVvZiBjb25zb2xlICE9PSBcInVuZGVmaW5lZFwiICYmIGNvbnNvbGUud2FybihcIkxhVGVYLWluY29tcGF0aWJsZSBpbnB1dCBhbmQgc3RyaWN0IG1vZGUgaXMgc2V0IHRvIFwiICsgKFwidW5yZWNvZ25pemVkICdcIiArIHN0cmljdCArIFwiJzogXCIgKyBlcnJvck1zZyArIFwiIFtcIiArIGVycm9yQ29kZSArIFwiXVwiKSk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBDaGVjayB3aGV0aGVyIHRvIGFwcGx5IHN0cmljdCAoTGFUZVgtYWRoZXJpbmcpIGJlaGF2aW9yIGZvciB1bnVzdWFsXG4gICAqIGlucHV0IChsaWtlIGBcXFxcYCkuICBVbmxpa2UgYG5vbnN0cmljdGAsIHdpbGwgbm90IHRocm93IGFuIGVycm9yO1xuICAgKiBpbnN0ZWFkLCBcImVycm9yXCIgdHJhbnNsYXRlcyB0byBhIHJldHVybiB2YWx1ZSBvZiBgdHJ1ZWAsIHdoaWxlIFwiaWdub3JlXCJcbiAgICogdHJhbnNsYXRlcyB0byBhIHJldHVybiB2YWx1ZSBvZiBgZmFsc2VgLiAgTWF5IHN0aWxsIHByaW50IGEgd2FybmluZzpcbiAgICogXCJ3YXJuXCIgcHJpbnRzIGEgd2FybmluZyBhbmQgcmV0dXJucyBgZmFsc2VgLlxuICAgKiBUaGlzIGlzIGZvciB0aGUgc2Vjb25kIGNhdGVnb3J5IG9mIGBlcnJvckNvZGVgcyBsaXN0ZWQgaW4gdGhlIFJFQURNRS5cbiAgICovXG5cblxuICB1c2VTdHJpY3RCZWhhdmlvcihlcnJvckNvZGUsIGVycm9yTXNnLCB0b2tlbikge1xuICAgIGxldCBzdHJpY3QgPSB0aGlzLnN0cmljdDtcblxuICAgIGlmICh0eXBlb2Ygc3RyaWN0ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIC8vIEFsbG93IHJldHVybiB2YWx1ZSBvZiBzdHJpY3QgZnVuY3Rpb24gdG8gYmUgYm9vbGVhbiBvciBzdHJpbmdcbiAgICAgIC8vIChvciBudWxsL3VuZGVmaW5lZCwgbWVhbmluZyBubyBmdXJ0aGVyIHByb2Nlc3NpbmcpLlxuICAgICAgLy8gQnV0IGNhdGNoIGFueSBleGNlcHRpb25zIHRocm93biBieSBmdW5jdGlvbiwgdHJlYXRpbmcgdGhlbVxuICAgICAgLy8gbGlrZSBcImVycm9yXCIuXG4gICAgICB0cnkge1xuICAgICAgICBzdHJpY3QgPSBzdHJpY3QoZXJyb3JDb2RlLCBlcnJvck1zZywgdG9rZW4pO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgc3RyaWN0ID0gXCJlcnJvclwiO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghc3RyaWN0IHx8IHN0cmljdCA9PT0gXCJpZ25vcmVcIikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZWxzZSBpZiAoc3RyaWN0ID09PSB0cnVlIHx8IHN0cmljdCA9PT0gXCJlcnJvclwiKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKHN0cmljdCA9PT0gXCJ3YXJuXCIpIHtcbiAgICAgIHR5cGVvZiBjb25zb2xlICE9PSBcInVuZGVmaW5lZFwiICYmIGNvbnNvbGUud2FybihcIkxhVGVYLWluY29tcGF0aWJsZSBpbnB1dCBhbmQgc3RyaWN0IG1vZGUgaXMgc2V0IHRvICd3YXJuJzogXCIgKyAoZXJyb3JNc2cgKyBcIiBbXCIgKyBlcnJvckNvZGUgKyBcIl1cIikpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyB3b24ndCBoYXBwZW4gaW4gdHlwZS1zYWZlIGNvZGVcbiAgICAgIHR5cGVvZiBjb25zb2xlICE9PSBcInVuZGVmaW5lZFwiICYmIGNvbnNvbGUud2FybihcIkxhVGVYLWluY29tcGF0aWJsZSBpbnB1dCBhbmQgc3RyaWN0IG1vZGUgaXMgc2V0IHRvIFwiICsgKFwidW5yZWNvZ25pemVkICdcIiArIHN0cmljdCArIFwiJzogXCIgKyBlcnJvck1zZyArIFwiIFtcIiArIGVycm9yQ29kZSArIFwiXVwiKSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBDaGVjayB3aGV0aGVyIHRvIHRlc3QgcG90ZW50aWFsbHkgZGFuZ2Vyb3VzIGlucHV0LCBhbmQgcmV0dXJuXG4gICAqIGB0cnVlYCAodHJ1c3RlZCkgb3IgYGZhbHNlYCAodW50cnVzdGVkKS4gIFRoZSBzb2xlIGFyZ3VtZW50IGBjb250ZXh0YFxuICAgKiBzaG91bGQgYmUgYW4gb2JqZWN0IHdpdGggYGNvbW1hbmRgIGZpZWxkIHNwZWNpZnlpbmcgdGhlIHJlbGV2YW50IExhVGVYXG4gICAqIGNvbW1hbmQgKGFzIGEgc3RyaW5nIHN0YXJ0aW5nIHdpdGggYFxcYCksIGFuZCBhbnkgb3RoZXIgYXJndW1lbnRzLCBldGMuXG4gICAqIElmIGBjb250ZXh0YCBoYXMgYSBgdXJsYCBmaWVsZCwgYSBgcHJvdG9jb2xgIGZpZWxkIHdpbGwgYXV0b21hdGljYWxseVxuICAgKiBnZXQgYWRkZWQgYnkgdGhpcyBmdW5jdGlvbiAoY2hhbmdpbmcgdGhlIHNwZWNpZmllZCBvYmplY3QpLlxuICAgKi9cblxuXG4gIGlzVHJ1c3RlZChjb250ZXh0KSB7XG4gICAgaWYgKGNvbnRleHQudXJsICYmICFjb250ZXh0LnByb3RvY29sKSB7XG4gICAgICBjb25zdCBwcm90b2NvbCA9IHV0aWxzLnByb3RvY29sRnJvbVVybChjb250ZXh0LnVybCk7XG5cbiAgICAgIGlmIChwcm90b2NvbCA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgY29udGV4dC5wcm90b2NvbCA9IHByb3RvY29sO1xuICAgIH1cblxuICAgIGNvbnN0IHRydXN0ID0gdHlwZW9mIHRoaXMudHJ1c3QgPT09IFwiZnVuY3Rpb25cIiA/IHRoaXMudHJ1c3QoY29udGV4dCkgOiB0aGlzLnRydXN0O1xuICAgIHJldHVybiBCb29sZWFuKHRydXN0KTtcbiAgfVxuXG59XG47Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvU3R5bGUuanNcbi8qKlxuICogVGhpcyBmaWxlIGNvbnRhaW5zIGluZm9ybWF0aW9uIGFuZCBjbGFzc2VzIGZvciB0aGUgdmFyaW91cyBraW5kcyBvZiBzdHlsZXNcbiAqIHVzZWQgaW4gVGVYLiBJdCBwcm92aWRlcyBhIGdlbmVyaWMgYFN0eWxlYCBjbGFzcywgd2hpY2ggaG9sZHMgaW5mb3JtYXRpb25cbiAqIGFib3V0IGEgc3BlY2lmaWMgc3R5bGUuIEl0IHRoZW4gcHJvdmlkZXMgaW5zdGFuY2VzIG9mIGFsbCB0aGUgZGlmZmVyZW50IGtpbmRzXG4gKiBvZiBzdHlsZXMgcG9zc2libGUsIGFuZCBwcm92aWRlcyBmdW5jdGlvbnMgdG8gbW92ZSBiZXR3ZWVuIHRoZW0gYW5kIGdldFxuICogaW5mb3JtYXRpb24gYWJvdXQgdGhlbS5cbiAqL1xuXG4vKipcbiAqIFRoZSBtYWluIHN0eWxlIGNsYXNzLiBDb250YWlucyBhIHVuaXF1ZSBpZCBmb3IgdGhlIHN0eWxlLCBhIHNpemUgKHdoaWNoIGlzXG4gKiB0aGUgc2FtZSBmb3IgY3JhbXBlZCBhbmQgdW5jcmFtcGVkIHZlcnNpb24gb2YgYSBzdHlsZSksIGFuZCBhIGNyYW1wZWQgZmxhZy5cbiAqL1xuY2xhc3MgU3R5bGUge1xuICBjb25zdHJ1Y3RvcihpZCwgc2l6ZSwgY3JhbXBlZCkge1xuICAgIHRoaXMuaWQgPSB2b2lkIDA7XG4gICAgdGhpcy5zaXplID0gdm9pZCAwO1xuICAgIHRoaXMuY3JhbXBlZCA9IHZvaWQgMDtcbiAgICB0aGlzLmlkID0gaWQ7XG4gICAgdGhpcy5zaXplID0gc2l6ZTtcbiAgICB0aGlzLmNyYW1wZWQgPSBjcmFtcGVkO1xuICB9XG4gIC8qKlxuICAgKiBHZXQgdGhlIHN0eWxlIG9mIGEgc3VwZXJzY3JpcHQgZ2l2ZW4gYSBiYXNlIGluIHRoZSBjdXJyZW50IHN0eWxlLlxuICAgKi9cblxuXG4gIHN1cCgpIHtcbiAgICByZXR1cm4gc3R5bGVzW3N1cFt0aGlzLmlkXV07XG4gIH1cbiAgLyoqXG4gICAqIEdldCB0aGUgc3R5bGUgb2YgYSBzdWJzY3JpcHQgZ2l2ZW4gYSBiYXNlIGluIHRoZSBjdXJyZW50IHN0eWxlLlxuICAgKi9cblxuXG4gIHN1YigpIHtcbiAgICByZXR1cm4gc3R5bGVzW3N1Ylt0aGlzLmlkXV07XG4gIH1cbiAgLyoqXG4gICAqIEdldCB0aGUgc3R5bGUgb2YgYSBmcmFjdGlvbiBudW1lcmF0b3IgZ2l2ZW4gdGhlIGZyYWN0aW9uIGluIHRoZSBjdXJyZW50XG4gICAqIHN0eWxlLlxuICAgKi9cblxuXG4gIGZyYWNOdW0oKSB7XG4gICAgcmV0dXJuIHN0eWxlc1tmcmFjTnVtW3RoaXMuaWRdXTtcbiAgfVxuICAvKipcbiAgICogR2V0IHRoZSBzdHlsZSBvZiBhIGZyYWN0aW9uIGRlbm9taW5hdG9yIGdpdmVuIHRoZSBmcmFjdGlvbiBpbiB0aGUgY3VycmVudFxuICAgKiBzdHlsZS5cbiAgICovXG5cblxuICBmcmFjRGVuKCkge1xuICAgIHJldHVybiBzdHlsZXNbZnJhY0Rlblt0aGlzLmlkXV07XG4gIH1cbiAgLyoqXG4gICAqIEdldCB0aGUgY3JhbXBlZCB2ZXJzaW9uIG9mIGEgc3R5bGUgKGluIHBhcnRpY3VsYXIsIGNyYW1waW5nIGEgY3JhbXBlZCBzdHlsZVxuICAgKiBkb2Vzbid0IGNoYW5nZSB0aGUgc3R5bGUpLlxuICAgKi9cblxuXG4gIGNyYW1wKCkge1xuICAgIHJldHVybiBzdHlsZXNbY3JhbXBbdGhpcy5pZF1dO1xuICB9XG4gIC8qKlxuICAgKiBHZXQgYSB0ZXh0IG9yIGRpc3BsYXkgdmVyc2lvbiBvZiB0aGlzIHN0eWxlLlxuICAgKi9cblxuXG4gIHRleHQoKSB7XG4gICAgcmV0dXJuIHN0eWxlc1tTdHlsZV90ZXh0W3RoaXMuaWRdXTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJuIHRydWUgaWYgdGhpcyBzdHlsZSBpcyB0aWdodGx5IHNwYWNlZCAoc2NyaXB0c3R5bGUvc2NyaXB0c2NyaXB0c3R5bGUpXG4gICAqL1xuXG5cbiAgaXNUaWdodCgpIHtcbiAgICByZXR1cm4gdGhpcy5zaXplID49IDI7XG4gIH1cblxufSAvLyBFeHBvcnQgYW4gaW50ZXJmYWNlIGZvciB0eXBlIGNoZWNraW5nLCBidXQgZG9uJ3QgZXhwb3NlIHRoZSBpbXBsZW1lbnRhdGlvbi5cbi8vIFRoaXMgd2F5LCBubyBtb3JlIHN0eWxlcyBjYW4gYmUgZ2VuZXJhdGVkLlxuXG5cbi8vIElEcyBvZiB0aGUgZGlmZmVyZW50IHN0eWxlc1xuY29uc3QgRCA9IDA7XG5jb25zdCBEYyA9IDE7XG5jb25zdCBUID0gMjtcbmNvbnN0IFRjID0gMztcbmNvbnN0IFMgPSA0O1xuY29uc3QgU2MgPSA1O1xuY29uc3QgU1MgPSA2O1xuY29uc3QgU1NjID0gNzsgLy8gSW5zdGFuY2VzIG9mIHRoZSBkaWZmZXJlbnQgc3R5bGVzXG5cbmNvbnN0IHN0eWxlcyA9IFtuZXcgU3R5bGUoRCwgMCwgZmFsc2UpLCBuZXcgU3R5bGUoRGMsIDAsIHRydWUpLCBuZXcgU3R5bGUoVCwgMSwgZmFsc2UpLCBuZXcgU3R5bGUoVGMsIDEsIHRydWUpLCBuZXcgU3R5bGUoUywgMiwgZmFsc2UpLCBuZXcgU3R5bGUoU2MsIDIsIHRydWUpLCBuZXcgU3R5bGUoU1MsIDMsIGZhbHNlKSwgbmV3IFN0eWxlKFNTYywgMywgdHJ1ZSldOyAvLyBMb29rdXAgdGFibGVzIGZvciBzd2l0Y2hpbmcgZnJvbSBvbmUgc3R5bGUgdG8gYW5vdGhlclxuXG5jb25zdCBzdXAgPSBbUywgU2MsIFMsIFNjLCBTUywgU1NjLCBTUywgU1NjXTtcbmNvbnN0IHN1YiA9IFtTYywgU2MsIFNjLCBTYywgU1NjLCBTU2MsIFNTYywgU1NjXTtcbmNvbnN0IGZyYWNOdW0gPSBbVCwgVGMsIFMsIFNjLCBTUywgU1NjLCBTUywgU1NjXTtcbmNvbnN0IGZyYWNEZW4gPSBbVGMsIFRjLCBTYywgU2MsIFNTYywgU1NjLCBTU2MsIFNTY107XG5jb25zdCBjcmFtcCA9IFtEYywgRGMsIFRjLCBUYywgU2MsIFNjLCBTU2MsIFNTY107XG5jb25zdCBTdHlsZV90ZXh0ID0gW0QsIERjLCBULCBUYywgVCwgVGMsIFQsIFRjXTsgLy8gV2Ugb25seSBleHBvcnQgc29tZSBvZiB0aGUgc3R5bGVzLlxuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzcmNfU3R5bGUgPSAoe1xuICBESVNQTEFZOiBzdHlsZXNbRF0sXG4gIFRFWFQ6IHN0eWxlc1tUXSxcbiAgU0NSSVBUOiBzdHlsZXNbU10sXG4gIFNDUklQVFNDUklQVDogc3R5bGVzW1NTXVxufSk7XG47Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvdW5pY29kZVNjcmlwdHMuanNcbi8qXG4gKiBUaGlzIGZpbGUgZGVmaW5lcyB0aGUgVW5pY29kZSBzY3JpcHRzIGFuZCBzY3JpcHQgZmFtaWxpZXMgdGhhdCB3ZVxuICogc3VwcG9ydC4gVG8gYWRkIG5ldyBzY3JpcHRzIG9yIGZhbWlsaWVzLCBqdXN0IGFkZCBhIG5ldyBlbnRyeSB0byB0aGVcbiAqIHNjcmlwdERhdGEgYXJyYXkgYmVsb3cuIEFkZGluZyBzY3JpcHRzIHRvIHRoZSBzY3JpcHREYXRhIGFycmF5IGFsbG93c1xuICogY2hhcmFjdGVycyBmcm9tIHRoYXQgc2NyaXB0IHRvIGFwcGVhciBpbiBcXHRleHR7fSBlbnZpcm9ubWVudHMuXG4gKi9cblxuLyoqXG4gKiBFYWNoIHNjcmlwdCBvciBzY3JpcHQgZmFtaWx5IGhhcyBhIG5hbWUgYW5kIGFuIGFycmF5IG9mIGJsb2Nrcy5cbiAqIEVhY2ggYmxvY2sgaXMgYW4gYXJyYXkgb2YgdHdvIG51bWJlcnMgd2hpY2ggc3BlY2lmeSB0aGUgc3RhcnQgYW5kXG4gKiBlbmQgcG9pbnRzIChpbmNsdXNpdmUpIG9mIGEgYmxvY2sgb2YgVW5pY29kZSBjb2RlcG9pbnRzLlxuICovXG5cbi8qKlxuICogVW5pY29kZSBibG9jayBkYXRhIGZvciB0aGUgZmFtaWxpZXMgb2Ygc2NyaXB0cyB3ZSBzdXBwb3J0IGluIFxcdGV4dHt9LlxuICogU2NyaXB0cyBvbmx5IG5lZWQgdG8gYXBwZWFyIGhlcmUgaWYgdGhleSBkbyBub3QgaGF2ZSBmb250IG1ldHJpY3MuXG4gKi9cbmNvbnN0IHNjcmlwdERhdGEgPSBbe1xuICAvLyBMYXRpbiBjaGFyYWN0ZXJzIGJleW9uZCB0aGUgTGF0aW4tMSBjaGFyYWN0ZXJzIHdlIGhhdmUgbWV0cmljcyBmb3IuXG4gIC8vIE5lZWRlZCBmb3IgQ3plY2gsIEh1bmdhcmlhbiBhbmQgVHVya2lzaCB0ZXh0LCBmb3IgZXhhbXBsZS5cbiAgbmFtZTogJ2xhdGluJyxcbiAgYmxvY2tzOiBbWzB4MDEwMCwgMHgwMjRmXSwgLy8gTGF0aW4gRXh0ZW5kZWQtQSBhbmQgTGF0aW4gRXh0ZW5kZWQtQlxuICBbMHgwMzAwLCAweDAzNmZdIC8vIENvbWJpbmluZyBEaWFjcml0aWNhbCBtYXJrc1xuICBdXG59LCB7XG4gIC8vIFRoZSBDeXJpbGxpYyBzY3JpcHQgdXNlZCBieSBSdXNzaWFuIGFuZCByZWxhdGVkIGxhbmd1YWdlcy5cbiAgLy8gQSBDeXJpbGxpYyBzdWJzZXQgdXNlZCB0byBiZSBzdXBwb3J0ZWQgYXMgZXhwbGljaXRseSBkZWZpbmVkXG4gIC8vIHN5bWJvbHMgaW4gc3ltYm9scy5qc1xuICBuYW1lOiAnY3lyaWxsaWMnLFxuICBibG9ja3M6IFtbMHgwNDAwLCAweDA0ZmZdXVxufSwge1xuICAvLyBBcm1lbmlhblxuICBuYW1lOiAnYXJtZW5pYW4nLFxuICBibG9ja3M6IFtbMHgwNTMwLCAweDA1OEZdXVxufSwge1xuICAvLyBUaGUgQnJhaG1pYyBzY3JpcHRzIG9mIFNvdXRoIGFuZCBTb3V0aGVhc3QgQXNpYVxuICAvLyBEZXZhbmFnYXJpICgwOTAw4oCTMDk3RilcbiAgLy8gQmVuZ2FsaSAoMDk4MOKAkzA5RkYpXG4gIC8vIEd1cm11a2hpICgwQTAw4oCTMEE3RilcbiAgLy8gR3VqYXJhdGkgKDBBODDigJMwQUZGKVxuICAvLyBPcml5YSAoMEIwMOKAkzBCN0YpXG4gIC8vIFRhbWlsICgwQjgw4oCTMEJGRilcbiAgLy8gVGVsdWd1ICgwQzAw4oCTMEM3RilcbiAgLy8gS2FubmFkYSAoMEM4MOKAkzBDRkYpXG4gIC8vIE1hbGF5YWxhbSAoMEQwMOKAkzBEN0YpXG4gIC8vIFNpbmhhbGEgKDBEODDigJMwREZGKVxuICAvLyBUaGFpICgwRTAw4oCTMEU3RilcbiAgLy8gTGFvICgwRTgw4oCTMEVGRilcbiAgLy8gVGliZXRhbiAoMEYwMOKAkzBGRkYpXG4gIC8vIE15YW5tYXIgKDEwMDDigJMxMDlGKVxuICBuYW1lOiAnYnJhaG1pYycsXG4gIGJsb2NrczogW1sweDA5MDAsIDB4MTA5Rl1dXG59LCB7XG4gIG5hbWU6ICdnZW9yZ2lhbicsXG4gIGJsb2NrczogW1sweDEwQTAsIDB4MTBmZl1dXG59LCB7XG4gIC8vIENoaW5lc2UgYW5kIEphcGFuZXNlLlxuICAvLyBUaGUgXCJrXCIgaW4gY2prIGlzIGZvciBLb3JlYW4sIGJ1dCB3ZSd2ZSBzZXBhcmF0ZWQgS29yZWFuIG91dFxuICBuYW1lOiBcImNqa1wiLFxuICBibG9ja3M6IFtbMHgzMDAwLCAweDMwRkZdLCAvLyBDSksgc3ltYm9scyBhbmQgcHVuY3R1YXRpb24sIEhpcmFnYW5hLCBLYXRha2FuYVxuICBbMHg0RTAwLCAweDlGQUZdLCAvLyBDSksgaWRlb2dyYW1zXG4gIFsweEZGMDAsIDB4RkY2MF0gLy8gRnVsbHdpZHRoIHB1bmN0dWF0aW9uXG4gIC8vIFRPRE86IGFkZCBoYWxmd2lkdGggS2F0YWthbmEgYW5kIFJvbWFuamkgZ2x5cGhzXG4gIF1cbn0sIHtcbiAgLy8gS29yZWFuXG4gIG5hbWU6ICdoYW5ndWwnLFxuICBibG9ja3M6IFtbMHhBQzAwLCAweEQ3QUZdXVxufV07XG4vKipcbiAqIEdpdmVuIGEgY29kZXBvaW50LCByZXR1cm4gdGhlIG5hbWUgb2YgdGhlIHNjcmlwdCBvciBzY3JpcHQgZmFtaWx5XG4gKiBpdCBpcyBmcm9tLCBvciBudWxsIGlmIGl0IGlzIG5vdCBwYXJ0IG9mIGEga25vd24gYmxvY2tcbiAqL1xuXG5mdW5jdGlvbiBzY3JpcHRGcm9tQ29kZXBvaW50KGNvZGVwb2ludCkge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHNjcmlwdERhdGEubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBzY3JpcHQgPSBzY3JpcHREYXRhW2ldO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzY3JpcHQuYmxvY2tzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBibG9jayA9IHNjcmlwdC5ibG9ja3NbaV07XG5cbiAgICAgIGlmIChjb2RlcG9pbnQgPj0gYmxvY2tbMF0gJiYgY29kZXBvaW50IDw9IGJsb2NrWzFdKSB7XG4gICAgICAgIHJldHVybiBzY3JpcHQubmFtZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cbi8qKlxuICogQSBmbGF0dGVuZWQgdmVyc2lvbiBvZiBhbGwgdGhlIHN1cHBvcnRlZCBibG9ja3MgaW4gYSBzaW5nbGUgYXJyYXkuXG4gKiBUaGlzIGlzIGFuIG9wdGltaXphdGlvbiB0byBtYWtlIHN1cHBvcnRlZENvZGVwb2ludCgpIGZhc3QuXG4gKi9cblxuY29uc3QgYWxsQmxvY2tzID0gW107XG5zY3JpcHREYXRhLmZvckVhY2gocyA9PiBzLmJsb2Nrcy5mb3JFYWNoKGIgPT4gYWxsQmxvY2tzLnB1c2goLi4uYikpKTtcbi8qKlxuICogR2l2ZW4gYSBjb2RlcG9pbnQsIHJldHVybiB0cnVlIGlmIGl0IGZhbGxzIHdpdGhpbiBvbmUgb2YgdGhlXG4gKiBzY3JpcHRzIG9yIHNjcmlwdCBmYW1pbGllcyBkZWZpbmVkIGFib3ZlIGFuZCBmYWxzZSBvdGhlcndpc2UuXG4gKlxuICogTWljcm8gYmVuY2htYXJrcyBzaG93cyB0aGF0IHRoaXMgaXMgZmFzdGVyIHRoYW5cbiAqIC9bXFx1MzAwMC1cXHUzMEZGXFx1NEUwMC1cXHU5RkFGXFx1RkYwMC1cXHVGRjYwXFx1QUMwMC1cXHVEN0FGXFx1MDkwMC1cXHUxMDlGXS8udGVzdCgpXG4gKiBpbiBGaXJlZm94LCBDaHJvbWUgYW5kIE5vZGUuXG4gKi9cblxuZnVuY3Rpb24gc3VwcG9ydGVkQ29kZXBvaW50KGNvZGVwb2ludCkge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFsbEJsb2Nrcy5sZW5ndGg7IGkgKz0gMikge1xuICAgIGlmIChjb2RlcG9pbnQgPj0gYWxsQmxvY2tzW2ldICYmIGNvZGVwb2ludCA8PSBhbGxCbG9ja3NbaSArIDFdKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG47Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvc3ZnR2VvbWV0cnkuanNcbi8qKlxuICogVGhpcyBmaWxlIHByb3ZpZGVzIHN1cHBvcnQgdG8gZG9tVHJlZS5qcyBhbmQgZGVsaW1pdGVyLmpzLlxuICogSXQncyBhIHN0b3JlaG91c2Ugb2YgcGF0aCBnZW9tZXRyeSBmb3IgU1ZHIGltYWdlcy5cbiAqL1xuLy8gSW4gYWxsIHBhdGhzIGJlbG93LCB0aGUgdmlld0JveC10by1lbSBzY2FsZSBpcyAxMDAwOjEuXG5jb25zdCBoTGluZVBhZCA9IDgwOyAvLyBwYWRkaW5nIGFib3ZlIGEgc3FydCB2aW5jdWx1bS4gUHJldmVudHMgaW1hZ2UgY3JvcHBpbmcuXG4vLyBUaGUgdmluY3VsdW0gb2YgYSBcXHNxcnQgY2FuIGJlIG1hZGUgdGhpY2tlciBieSBhIEthVGVYIHJlbmRlcmluZyBvcHRpb24uXG4vLyBUaGluayBvZiB2YXJpYWJsZSBleHRyYVZpbmN1bHVtIGFzIHR3byBkZXRvdXJzIGluIHRoZSBTVkcgcGF0aC5cbi8vIFRoZSBkZXRvdXIgYmVnaW5zIGF0IHRoZSBsb3dlciBsZWZ0IG9mIHRoZSBhcmVhIGxhYmVsZWQgZXh0cmFWaW5jdWx1bSBiZWxvdy5cbi8vIFRoZSBkZXRvdXIgcHJvY2VlZHMgb25lIGV4dHJhVmluY3VsdW0gZGlzdGFuY2UgdXAgYW5kIHNsaWdodGx5IHRvIHRoZSByaWdodCxcbi8vIGRpc3BsYWNpbmcgdGhlIHJhZGl1c2VkIGNvcm5lciBiZXR3ZWVuIHN1cmQgYW5kIHZpbmN1bHVtLiBUaGUgcmFkaXVzIGlzXG4vLyB0cmF2ZXJzZWQgYXMgdXN1YWwsIHRoZW4gdGhlIGRldG91ciByZXN1bWVzLiBJdCBnb2VzIHJpZ2h0LCB0byB0aGUgZW5kIG9mXG4vLyB0aGUgdmVyeSBsb25nIHZpbmN1bHVtLCB0aGVuIGRvd24gb25lIGV4dHJhVmluY3VsdW0gZGlzdGFuY2UsXG4vLyBhZnRlciB3aGljaCBpdCByZXN1bWVzIHJlZ3VsYXIgcGF0aCBnZW9tZXRyeSBmb3IgdGhlIHJhZGljYWwuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aW5jdWx1bVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgL1xuICAgICAgICAgL+KWkuKWkuKWkuKWkuKWkuKWkuKWkuKWkuKWkuKWkuKWkuKWkuKWkuKWkuKWkuKWkuKWkuKWkuKWkuKWkuKWkuKGkGV4dHJhVmluY3VsdW1cbiAgICAgICAgLyDilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojihpAwLjA0ZW0gKDQwIHVuaXQpIHN0ZCB2aW5jdWx1bSB0aGlja25lc3NcbiAgICAgICAvIC9cbiAgICAgIC8gL1xuICAgICAvIC9cXFxuICAgIC8gLyBzdXJkXG4qL1xuXG5jb25zdCBzcXJ0TWFpbiA9IGZ1bmN0aW9uIChleHRyYVZpbmN1bHVtLCBoTGluZVBhZCkge1xuICAvLyBzcXJ0TWFpbiBwYXRoIGdlb21ldHJ5IGlzIGZyb20gZ2x5cGggVTIyMUEgaW4gdGhlIGZvbnQgS2FUZVggTWFpblxuICByZXR1cm4gXCJNOTUsXCIgKyAoNjIyICsgZXh0cmFWaW5jdWx1bSArIGhMaW5lUGFkKSArIFwiXFxuYy0yLjcsMCwtNy4xNywtMi43LC0xMy41LC04Yy01LjgsLTUuMywtOS41LC0xMCwtOS41LC0xNFxcbmMwLC0yLDAuMywtMy4zLDEsLTRjMS4zLC0yLjcsMjMuODMsLTIwLjcsNjcuNSwtNTRcXG5jNDQuMiwtMzMuMyw2NS44LC01MC4zLDY2LjUsLTUxYzEuMywtMS4zLDMsLTIsNSwtMmM0LjcsMCw4LjcsMy4zLDEyLDEwXFxuczE3MywzNzgsMTczLDM3OGMwLjcsMCwzNS4zLC03MSwxMDQsLTIxM2M2OC43LC0xNDIsMTM3LjUsLTI4NSwyMDYuNSwtNDI5XFxuYzY5LC0xNDQsMTA0LjUsLTIxNy43LDEwNi41LC0yMjFcXG5sXCIgKyBleHRyYVZpbmN1bHVtIC8gMi4wNzUgKyBcIiAtXCIgKyBleHRyYVZpbmN1bHVtICsgXCJcXG5jNS4zLC05LjMsMTIsLTE0LDIwLC0xNFxcbkg0MDAwMDB2XCIgKyAoNDAgKyBleHRyYVZpbmN1bHVtKSArIFwiSDg0NS4yNzI0XFxucy0yMjUuMjcyLDQ2NywtMjI1LjI3Miw0NjdzLTIzNSw0ODYsLTIzNSw0ODZjLTIuNyw0LjcsLTksNywtMTksN1xcbmMtNiwwLC0xMCwtMSwtMTIsLTNzLTE5NCwtNDIyLC0xOTQsLTQyMnMtNjUsNDcsLTY1LDQ3elxcbk1cIiArICg4MzQgKyBleHRyYVZpbmN1bHVtKSArIFwiIFwiICsgaExpbmVQYWQgKyBcImg0MDAwMDB2XCIgKyAoNDAgKyBleHRyYVZpbmN1bHVtKSArIFwiaC00MDAwMDB6XCI7XG59O1xuXG5jb25zdCBzcXJ0U2l6ZTEgPSBmdW5jdGlvbiAoZXh0cmFWaW5jdWx1bSwgaExpbmVQYWQpIHtcbiAgLy8gc2l6ZTEgaXMgZnJvbSBnbHlwaCBVMjIxQSBpbiB0aGUgZm9udCBLYVRlWF9TaXplMS1SZWd1bGFyXG4gIHJldHVybiBcIk0yNjMsXCIgKyAoNjAxICsgZXh0cmFWaW5jdWx1bSArIGhMaW5lUGFkKSArIFwiYzAuNywwLDE4LDM5LjcsNTIsMTE5XFxuYzM0LDc5LjMsNjguMTY3LDE1OC43LDEwMi41LDIzOGMzNC4zLDc5LjMsNTEuOCwxMTkuMyw1Mi41LDEyMFxcbmMzNDAsLTcwNC43LDUxMC43LC0xMDYwLjMsNTEyLC0xMDY3XFxubFwiICsgZXh0cmFWaW5jdWx1bSAvIDIuMDg0ICsgXCIgLVwiICsgZXh0cmFWaW5jdWx1bSArIFwiXFxuYzQuNywtNy4zLDExLC0xMSwxOSwtMTFcXG5INDAwMDB2XCIgKyAoNDAgKyBleHRyYVZpbmN1bHVtKSArIFwiSDEwMTIuM1xcbnMtMjcxLjMsNTY3LC0yNzEuMyw1NjdjLTM4LjcsODAuNywtODQsMTc1LC0xMzYsMjgzYy01MiwxMDgsLTg5LjE2NywxODUuMywtMTExLjUsMjMyXFxuYy0yMi4zLDQ2LjcsLTMzLjgsNzAuMywtMzQuNSw3MWMtNC43LDQuNywtMTIuMyw3LC0yMyw3cy0xMiwtMSwtMTIsLTFcXG5zLTEwOSwtMjUzLC0xMDksLTI1M2MtNzIuNywtMTY4LC0xMDkuMywtMjUyLC0xMTAsLTI1MmMtMTAuNyw4LC0yMiwxNi43LC0zNCwyNlxcbmMtMjIsMTcuMywtMzMuMywyNiwtMzQsMjZzLTI2LC0yNiwtMjYsLTI2czc2LC01OSw3NiwtNTlzNzYsLTYwLDc2LC02MHpcXG5NXCIgKyAoMTAwMSArIGV4dHJhVmluY3VsdW0pICsgXCIgXCIgKyBoTGluZVBhZCArIFwiaDQwMDAwMHZcIiArICg0MCArIGV4dHJhVmluY3VsdW0pICsgXCJoLTQwMDAwMHpcIjtcbn07XG5cbmNvbnN0IHNxcnRTaXplMiA9IGZ1bmN0aW9uIChleHRyYVZpbmN1bHVtLCBoTGluZVBhZCkge1xuICAvLyBzaXplMiBpcyBmcm9tIGdseXBoIFUyMjFBIGluIHRoZSBmb250IEthVGVYX1NpemUyLVJlZ3VsYXJcbiAgcmV0dXJuIFwiTTk4MyBcIiArICgxMCArIGV4dHJhVmluY3VsdW0gKyBoTGluZVBhZCkgKyBcIlxcbmxcIiArIGV4dHJhVmluY3VsdW0gLyAzLjEzICsgXCIgLVwiICsgZXh0cmFWaW5jdWx1bSArIFwiXFxuYzQsLTYuNywxMCwtMTAsMTgsLTEwIEg0MDAwMDB2XCIgKyAoNDAgKyBleHRyYVZpbmN1bHVtKSArIFwiXFxuSDEwMTMuMXMtODMuNCwyNjgsLTI2NC4xLDg0MGMtMTgwLjcsNTcyLC0yNzcsODc2LjMsLTI4OSw5MTNjLTQuNyw0LjcsLTEyLjcsNywtMjQsN1xcbnMtMTIsMCwtMTIsMGMtMS4zLC0zLjMsLTMuNywtMTEuNywtNywtMjVjLTM1LjMsLTEyNS4zLC0xMDYuNywtMzczLjMsLTIxNCwtNzQ0XFxuYy0xMCwxMiwtMjEsMjUsLTMzLDM5cy0zMiwzOSwtMzIsMzljLTYsLTUuMywtMTUsLTE0LC0yNywtMjZzMjUsLTMwLDI1LC0zMFxcbmMyNi43LC0zMi43LDUyLC02Myw3NiwtOTFzNTIsLTYwLDUyLC02MHMyMDgsNzIyLDIwOCw3MjJcXG5jNTYsLTE3NS4zLDEyNi4zLC0zOTcuMywyMTEsLTY2NmM4NC43LC0yNjguNywxNTMuOCwtNDg4LjIsMjA3LjUsLTY1OC41XFxuYzUzLjcsLTE3MC4zLDg0LjUsLTI2Ni44LDkyLjUsLTI4OS41elxcbk1cIiArICgxMDAxICsgZXh0cmFWaW5jdWx1bSkgKyBcIiBcIiArIGhMaW5lUGFkICsgXCJoNDAwMDAwdlwiICsgKDQwICsgZXh0cmFWaW5jdWx1bSkgKyBcImgtNDAwMDAwelwiO1xufTtcblxuY29uc3Qgc3FydFNpemUzID0gZnVuY3Rpb24gKGV4dHJhVmluY3VsdW0sIGhMaW5lUGFkKSB7XG4gIC8vIHNpemUzIGlzIGZyb20gZ2x5cGggVTIyMUEgaW4gdGhlIGZvbnQgS2FUZVhfU2l6ZTMtUmVndWxhclxuICByZXR1cm4gXCJNNDI0LFwiICsgKDIzOTggKyBleHRyYVZpbmN1bHVtICsgaExpbmVQYWQpICsgXCJcXG5jLTEuMywtMC43LC0zOC41LC0xNzIsLTExMS41LC01MTRjLTczLC0zNDIsLTEwOS44LC01MTMuMywtMTEwLjUsLTUxNFxcbmMwLC0yLC0xMC43LDE0LjMsLTMyLDQ5Yy00LjcsNy4zLC05LjgsMTUuNywtMTUuNSwyNWMtNS43LDkuMywtOS44LDE2LC0xMi41LDIwXFxucy01LDcsLTUsN2MtNCwtMy4zLC04LjMsLTcuNywtMTMsLTEzcy0xMywtMTMsLTEzLC0xM3M3NiwtMTIyLDc2LC0xMjJzNzcsLTEyMSw3NywtMTIxXFxuczIwOSw5NjgsMjA5LDk2OGMwLC0yLDg0LjcsLTM2MS43LDI1NCwtMTA3OWMxNjkuMywtNzE3LjMsMjU0LjcsLTEwNzcuNywyNTYsLTEwODFcXG5sXCIgKyBleHRyYVZpbmN1bHVtIC8gNC4yMjMgKyBcIiAtXCIgKyBleHRyYVZpbmN1bHVtICsgXCJjNCwtNi43LDEwLC0xMCwxOCwtMTAgSDQwMDAwMFxcbnZcIiArICg0MCArIGV4dHJhVmluY3VsdW0pICsgXCJIMTAxNC42XFxucy04Ny4zLDM3OC43LC0yNzIuNiwxMTY2Yy0xODUuMyw3ODcuMywtMjc5LjMsMTE4Mi4zLC0yODIsMTE4NVxcbmMtMiw2LC0xMCw5LC0yNCw5XFxuYy04LDAsLTEyLC0wLjcsLTEyLC0yeiBNXCIgKyAoMTAwMSArIGV4dHJhVmluY3VsdW0pICsgXCIgXCIgKyBoTGluZVBhZCArIFwiXFxuaDQwMDAwMHZcIiArICg0MCArIGV4dHJhVmluY3VsdW0pICsgXCJoLTQwMDAwMHpcIjtcbn07XG5cbmNvbnN0IHNxcnRTaXplNCA9IGZ1bmN0aW9uIChleHRyYVZpbmN1bHVtLCBoTGluZVBhZCkge1xuICAvLyBzaXplNCBpcyBmcm9tIGdseXBoIFUyMjFBIGluIHRoZSBmb250IEthVGVYX1NpemU0LVJlZ3VsYXJcbiAgcmV0dXJuIFwiTTQ3MyxcIiArICgyNzEzICsgZXh0cmFWaW5jdWx1bSArIGhMaW5lUGFkKSArIFwiXFxuYzMzOS4zLC0xNzk5LjMsNTA5LjMsLTI3MDAsNTEwLC0yNzAyIGxcIiArIGV4dHJhVmluY3VsdW0gLyA1LjI5OCArIFwiIC1cIiArIGV4dHJhVmluY3VsdW0gKyBcIlxcbmMzLjMsLTcuMyw5LjMsLTExLDE4LC0xMSBINDAwMDAwdlwiICsgKDQwICsgZXh0cmFWaW5jdWx1bSkgKyBcIkgxMDE3LjdcXG5zLTkwLjUsNDc4LC0yNzYuMiwxNDY2Yy0xODUuNyw5ODgsLTI3OS41LDE0ODMsLTI4MS41LDE0ODVjLTIsNiwtMTAsOSwtMjQsOVxcbmMtOCwwLC0xMiwtMC43LC0xMiwtMmMwLC0xLjMsLTUuMywtMzIsLTE2LC05MmMtNTAuNywtMjkzLjMsLTExOS43LC02OTMuMywtMjA3LC0xMjAwXFxuYzAsLTEuMywtNS4zLDguNywtMTYsMzBjLTEwLjcsMjEuMywtMjEuMyw0Mi43LC0zMiw2NHMtMTYsMzMsLTE2LDMzcy0yNiwtMjYsLTI2LC0yNlxcbnM3NiwtMTUzLDc2LC0xNTNzNzcsLTE1MSw3NywtMTUxYzAuNywwLjcsMzUuNywyMDIsMTA1LDYwNGM2Ny4zLDQwMC43LDEwMiw2MDIuNywxMDQsXFxuNjA2ek1cIiArICgxMDAxICsgZXh0cmFWaW5jdWx1bSkgKyBcIiBcIiArIGhMaW5lUGFkICsgXCJoNDAwMDAwdlwiICsgKDQwICsgZXh0cmFWaW5jdWx1bSkgKyBcIkgxMDE3Ljd6XCI7XG59O1xuXG5jb25zdCBwaGFzZVBhdGggPSBmdW5jdGlvbiAoeSkge1xuICBjb25zdCB4ID0geSAvIDI7IC8vIHggY29vcmRpbmF0ZSBhdCB0b3Agb2YgYW5nbGVcblxuICByZXR1cm4gXCJNNDAwMDAwIFwiICsgeSArIFwiIEgwIExcIiArIHggKyBcIiAwIGw2NSA0NSBMMTQ1IFwiICsgKHkgLSA4MCkgKyBcIiBINDAwMDAwelwiO1xufTtcblxuY29uc3Qgc3FydFRhbGwgPSBmdW5jdGlvbiAoZXh0cmFWaW5jdWx1bSwgaExpbmVQYWQsIHZpZXdCb3hIZWlnaHQpIHtcbiAgLy8gc3FydFRhbGwgaXMgZnJvbSBnbHlwaCBVMjNCNyBpbiB0aGUgZm9udCBLYVRlWF9TaXplNC1SZWd1bGFyXG4gIC8vIE9uZSBwYXRoIGVkZ2UgaGFzIGEgdmFyaWFibGUgbGVuZ3RoLiBJdCBydW5zIHZlcnRpY2FsbHkgZnJvbSB0aGUgdmluY3VsdW1cbiAgLy8gdG8gYSBwb2ludCBuZWFyICgxNCB1bml0cykgdGhlIGJvdHRvbSBvZiB0aGUgc3VyZC4gVGhlIHZpbmN1bHVtXG4gIC8vIGlzIG5vcm1hbGx5IDQwIHVuaXRzIHRoaWNrLiBTbyB0aGUgbGVuZ3RoIG9mIHRoZSBsaW5lIGluIHF1ZXN0aW9uIGlzOlxuICBjb25zdCB2ZXJ0U2VnbWVudCA9IHZpZXdCb3hIZWlnaHQgLSA1NCAtIGhMaW5lUGFkIC0gZXh0cmFWaW5jdWx1bTtcbiAgcmV0dXJuIFwiTTcwMiBcIiArIChleHRyYVZpbmN1bHVtICsgaExpbmVQYWQpICsgXCJINDAwMDAwXCIgKyAoNDAgKyBleHRyYVZpbmN1bHVtKSArIFwiXFxuSDc0MnZcIiArIHZlcnRTZWdtZW50ICsgXCJsLTQgNC00IDRjLS42NjcuNyAtMiAxLjUtNCAyLjVzLTQuMTY3IDEuODMzLTYuNSAyLjUtNS41IDEtOS41IDFcXG5oLTEybC0yOC04NGMtMTYuNjY3LTUyLTk2LjY2NyAtMjk0LjMzMy0yNDAtNzI3bC0yMTIgLTY0MyAtODUgMTcwXFxuYy00LTMuMzMzLTguMzMzLTcuNjY3LTEzIC0xM2wtMTMtMTNsNzctMTU1IDc3LTE1NmM2NiAxOTkuMzMzIDEzOSA0MTkuNjY3XFxuMjE5IDY2MSBsMjE4IDY2MXpNNzAyIFwiICsgaExpbmVQYWQgKyBcIkg0MDAwMDB2XCIgKyAoNDAgKyBleHRyYVZpbmN1bHVtKSArIFwiSDc0MnpcIjtcbn07XG5cbmNvbnN0IHNxcnRQYXRoID0gZnVuY3Rpb24gKHNpemUsIGV4dHJhVmluY3VsdW0sIHZpZXdCb3hIZWlnaHQpIHtcbiAgZXh0cmFWaW5jdWx1bSA9IDEwMDAgKiBleHRyYVZpbmN1bHVtOyAvLyBDb252ZXJ0IGZyb20gZG9jdW1lbnQgZW1zIHRvIHZpZXdCb3guXG5cbiAgbGV0IHBhdGggPSBcIlwiO1xuXG4gIHN3aXRjaCAoc2l6ZSkge1xuICAgIGNhc2UgXCJzcXJ0TWFpblwiOlxuICAgICAgcGF0aCA9IHNxcnRNYWluKGV4dHJhVmluY3VsdW0sIGhMaW5lUGFkKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBcInNxcnRTaXplMVwiOlxuICAgICAgcGF0aCA9IHNxcnRTaXplMShleHRyYVZpbmN1bHVtLCBoTGluZVBhZCk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgXCJzcXJ0U2l6ZTJcIjpcbiAgICAgIHBhdGggPSBzcXJ0U2l6ZTIoZXh0cmFWaW5jdWx1bSwgaExpbmVQYWQpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFwic3FydFNpemUzXCI6XG4gICAgICBwYXRoID0gc3FydFNpemUzKGV4dHJhVmluY3VsdW0sIGhMaW5lUGFkKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBcInNxcnRTaXplNFwiOlxuICAgICAgcGF0aCA9IHNxcnRTaXplNChleHRyYVZpbmN1bHVtLCBoTGluZVBhZCk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgXCJzcXJ0VGFsbFwiOlxuICAgICAgcGF0aCA9IHNxcnRUYWxsKGV4dHJhVmluY3VsdW0sIGhMaW5lUGFkLCB2aWV3Qm94SGVpZ2h0KTtcbiAgfVxuXG4gIHJldHVybiBwYXRoO1xufTtcbmNvbnN0IGlubmVyUGF0aCA9IGZ1bmN0aW9uIChuYW1lLCBoZWlnaHQpIHtcbiAgLy8gVGhlIGlubmVyIHBhcnQgb2Ygc3RyZXRjaHkgdGFsbCBkZWxpbWl0ZXJzXG4gIHN3aXRjaCAobmFtZSkge1xuICAgIGNhc2UgXCJcXHUyMzljXCI6XG4gICAgICByZXR1cm4gXCJNMjkxIDAgSDQxNyBWXCIgKyBoZWlnaHQgKyBcIiBIMjkxeiBNMjkxIDAgSDQxNyBWXCIgKyBoZWlnaHQgKyBcIiBIMjkxelwiO1xuXG4gICAgY2FzZSBcIlxcdTIyMjNcIjpcbiAgICAgIHJldHVybiBcIk0xNDUgMCBIMTg4IFZcIiArIGhlaWdodCArIFwiIEgxNDV6IE0xNDUgMCBIMTg4IFZcIiArIGhlaWdodCArIFwiIEgxNDV6XCI7XG5cbiAgICBjYXNlIFwiXFx1MjIyNVwiOlxuICAgICAgcmV0dXJuIFwiTTE0NSAwIEgxODggVlwiICsgaGVpZ2h0ICsgXCIgSDE0NXogTTE0NSAwIEgxODggVlwiICsgaGVpZ2h0ICsgXCIgSDE0NXpcIiArIChcIk0zNjcgMCBINDEwIFZcIiArIGhlaWdodCArIFwiIEgzNjd6IE0zNjcgMCBINDEwIFZcIiArIGhlaWdodCArIFwiIEgzNjd6XCIpO1xuXG4gICAgY2FzZSBcIlxcdTIzOWZcIjpcbiAgICAgIHJldHVybiBcIk00NTcgMCBINTgzIFZcIiArIGhlaWdodCArIFwiIEg0NTd6IE00NTcgMCBINTgzIFZcIiArIGhlaWdodCArIFwiIEg0NTd6XCI7XG5cbiAgICBjYXNlIFwiXFx1MjNhMlwiOlxuICAgICAgcmV0dXJuIFwiTTMxOSAwIEg0MDMgVlwiICsgaGVpZ2h0ICsgXCIgSDMxOXogTTMxOSAwIEg0MDMgVlwiICsgaGVpZ2h0ICsgXCIgSDMxOXpcIjtcblxuICAgIGNhc2UgXCJcXHUyM2E1XCI6XG4gICAgICByZXR1cm4gXCJNMjYzIDAgSDM0NyBWXCIgKyBoZWlnaHQgKyBcIiBIMjYzeiBNMjYzIDAgSDM0NyBWXCIgKyBoZWlnaHQgKyBcIiBIMjYzelwiO1xuXG4gICAgY2FzZSBcIlxcdTIzYWFcIjpcbiAgICAgIHJldHVybiBcIk0zODQgMCBINTA0IFZcIiArIGhlaWdodCArIFwiIEgzODR6IE0zODQgMCBINTA0IFZcIiArIGhlaWdodCArIFwiIEgzODR6XCI7XG5cbiAgICBjYXNlIFwiXFx1MjNkMFwiOlxuICAgICAgcmV0dXJuIFwiTTMxMiAwIEgzNTUgVlwiICsgaGVpZ2h0ICsgXCIgSDMxMnogTTMxMiAwIEgzNTUgVlwiICsgaGVpZ2h0ICsgXCIgSDMxMnpcIjtcblxuICAgIGNhc2UgXCJcXHUyMDE2XCI6XG4gICAgICByZXR1cm4gXCJNMjU3IDAgSDMwMCBWXCIgKyBoZWlnaHQgKyBcIiBIMjU3eiBNMjU3IDAgSDMwMCBWXCIgKyBoZWlnaHQgKyBcIiBIMjU3elwiICsgKFwiTTQ3OCAwIEg1MjEgVlwiICsgaGVpZ2h0ICsgXCIgSDQ3OHogTTQ3OCAwIEg1MjEgVlwiICsgaGVpZ2h0ICsgXCIgSDQ3OHpcIik7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIFwiXCI7XG4gIH1cbn07XG5jb25zdCBwYXRoID0ge1xuICAvLyBUaGUgZG91YmxlbGVmdGFycm93IGdlb21ldHJ5IGlzIGZyb20gZ2x5cGggVSsyMUQwIGluIHRoZSBmb250IEthVGVYIE1haW5cbiAgZG91YmxlbGVmdGFycm93OiBcIk0yNjIgMTU3XFxubDEwLTEwYzM0LTM2IDYyLjctNzcgODYtMTIzIDMuMy04IDUtMTMuMyA1LTE2IDAtNS4zLTYuNy04LTIwLTgtNy4zXFxuIDAtMTIuMi41LTE0LjUgMS41LTIuMyAxLTQuOCA0LjUtNy41IDEwLjUtNDkuMyA5Ny4zLTEyMS43IDE2OS4zLTIxNyAyMTYtMjhcXG4gMTQtNTcuMyAyNS04OCAzMy02LjcgMi0xMSAzLjgtMTMgNS41LTIgMS43LTMgNC4yLTMgNy41czEgNS44IDMgNy41XFxuYzIgMS43IDYuMyAzLjUgMTMgNS41IDY4IDE3LjMgMTI4LjIgNDcuOCAxODAuNSA5MS41IDUyLjMgNDMuNyA5My44IDk2LjIgMTI0LjVcXG4gMTU3LjUgOS4zIDggMTUuMyAxMi4zIDE4IDEzaDZjMTItLjcgMTgtNCAxOC0xMCAwLTItMS43LTctNS0xNS0yMy4zLTQ2LTUyLTg3XFxuLTg2LTEyM2wtMTAtMTBoMzk5NzM4di00MEgyMThjMzI4IDAgMCAwIDAgMGwtMTAtOGMtMjYuNy0yMC02NS43LTQzLTExNy02OSAyLjdcXG4tMiA2LTMuNyAxMC01IDM2LjctMTYgNzIuMy0zNy4zIDEwNy02NGwxMC04aDM5OTc4MnYtNDB6XFxubTggMHY0MGgzOTk3MzB2LTQwem0wIDE5NHY0MGgzOTk3MzB2LTQwelwiLFxuICAvLyBkb3VibGVyaWdodGFycm93IGlzIGZyb20gZ2x5cGggVSsyMUQyIGluIGZvbnQgS2FUZVggTWFpblxuICBkb3VibGVyaWdodGFycm93OiBcIk0zOTk3MzggMzkybFxcbi0xMCAxMGMtMzQgMzYtNjIuNyA3Ny04NiAxMjMtMy4zIDgtNSAxMy4zLTUgMTYgMCA1LjMgNi43IDggMjAgOCA3LjMgMCAxMi4yLS41XFxuIDE0LjUtMS41IDIuMy0xIDQuOC00LjUgNy41LTEwLjUgNDkuMy05Ny4zIDEyMS43LTE2OS4zIDIxNy0yMTYgMjgtMTQgNTcuMy0yNSA4OFxcbi0zMyA2LjctMiAxMS0zLjggMTMtNS41IDItMS43IDMtNC4yIDMtNy41cy0xLTUuOC0zLTcuNWMtMi0xLjctNi4zLTMuNS0xMy01LjUtNjhcXG4tMTcuMy0xMjguMi00Ny44LTE4MC41LTkxLjUtNTIuMy00My43LTkzLjgtOTYuMi0xMjQuNS0xNTcuNS05LjMtOC0xNS4zLTEyLjMtMThcXG4tMTNoLTZjLTEyIC43LTE4IDQtMTggMTAgMCAyIDEuNyA3IDUgMTUgMjMuMyA0NiA1MiA4NyA4NiAxMjNsMTAgMTBIMHY0MGgzOTk3ODJcXG5jLTMyOCAwIDAgMCAwIDBsMTAgOGMyNi43IDIwIDY1LjcgNDMgMTE3IDY5LTIuNyAyLTYgMy43LTEwIDUtMzYuNyAxNi03Mi4zIDM3LjNcXG4tMTA3IDY0bC0xMCA4SDB2NDB6TTAgMTU3djQwaDM5OTczMHYtNDB6bTAgMTk0djQwaDM5OTczMHYtNDB6XCIsXG4gIC8vIGxlZnRhcnJvdyBpcyBmcm9tIGdseXBoIFUrMjE5MCBpbiBmb250IEthVGVYIE1haW5cbiAgbGVmdGFycm93OiBcIk00MDAwMDAgMjQxSDExMGwzLTNjNjguNy01Mi43IDExMy43LTEyMFxcbiAxMzUtMjAyIDQtMTQuNyA2LTIzIDYtMjUgMC03LjMtNy0xMS0yMS0xMS04IDAtMTMuMi44LTE1LjUgMi41LTIuMyAxLjctNC4yIDUuOFxcbi01LjUgMTIuNS0xLjMgNC43LTIuNyAxMC4zLTQgMTctMTIgNDguNy0zNC44IDkyLTY4LjUgMTMwUzY1LjMgMjI4LjMgMTggMjQ3XFxuYy0xMCA0LTE2IDcuNy0xOCAxMSAwIDguNyA2IDE0LjMgMTggMTcgNDcuMyAxOC43IDg3LjggNDcgMTIxLjUgODVTMTk2IDQ0MS4zIDIwOFxcbiA0OTBjLjcgMiAxLjMgNSAyIDlzMS4yIDYuNyAxLjUgOGMuMyAxLjMgMSAzLjMgMiA2czIuMiA0LjUgMy41IDUuNWMxLjMgMSAzLjNcXG4gMS44IDYgMi41czYgMSAxMCAxYzE0IDAgMjEtMy43IDIxLTExIDAtMi0yLTEwLjMtNi0yNS0yMC03OS4zLTY1LTE0Ni43LTEzNS0yMDJcXG4gbC0zLTNoMzk5ODkwek0xMDAgMjQxdjQwaDM5OTkwMHYtNDB6XCIsXG4gIC8vIG92ZXJicmFjZSBpcyBmcm9tIGdseXBocyBVKzIzQTkvMjNBOC8yM0E3IGluIGZvbnQgS2FUZVhfU2l6ZTQtUmVndWxhclxuICBsZWZ0YnJhY2U6IFwiTTYgNTQ4bC02LTZ2LTM1bDYtMTFjNTYtMTA0IDEzNS4zLTE4MS4zIDIzOC0yMzIgNTcuMy0yOC43IDExN1xcbi00NSAxNzktNTBoMzk5NTc3djEyMEg0MDNjLTQzLjMgNy04MSAxNS0xMTMgMjYtMTAwLjcgMzMtMTc5LjcgOTEtMjM3IDE3NC0yLjdcXG4gNS02IDktMTAgMTMtLjcgMS03LjMgMS0yMCAxSDZ6XCIsXG4gIGxlZnRicmFjZXVuZGVyOiBcIk0wIDZsNi02aDE3YzEyLjY4OCAwIDE5LjMxMy4zIDIwIDEgNCA0IDcuMzEzIDguMyAxMCAxM1xcbiAzNS4zMTMgNTEuMyA4MC44MTMgOTMuOCAxMzYuNSAxMjcuNSA1NS42ODggMzMuNyAxMTcuMTg4IDU1LjggMTg0LjUgNjYuNS42ODhcXG4gMCAyIC4zIDQgMSAxOC42ODggMi43IDc2IDQuMyAxNzIgNWgzOTk0NTB2MTIwSDQyOWwtNi0xYy0xMjQuNjg4LTgtMjM1LTYxLjdcXG4tMzMxLTE2MUM2MC42ODcgMTM4LjcgMzIuMzEyIDk5LjMgNyA1NEwwIDQxVjZ6XCIsXG4gIC8vIG92ZXJncm91cCBpcyBmcm9tIHRoZSBNblN5bWJvbCBwYWNrYWdlIChwdWJsaWMgZG9tYWluKVxuICBsZWZ0Z3JvdXA6IFwiTTQwMDAwMCA4MFxcbkg0MzVDNjQgODAgMTY4LjMgMjI5LjQgMjEgMjYwYy01LjkgMS4yLTE4IDAtMTggMC0yIDAtMy0xLTMtM3YtMzhDNzYgNjEgMjU3IDBcXG4gNDM1IDBoMzk5NTY1elwiLFxuICBsZWZ0Z3JvdXB1bmRlcjogXCJNNDAwMDAwIDI2Mlxcbkg0MzVDNjQgMjYyIDE2OC4zIDExMi42IDIxIDgyYy01LjktMS4yLTE4IDAtMTggMC0yIDAtMyAxLTMgM3YzOGM3NiAxNTggMjU3IDIxOVxcbiA0MzUgMjE5aDM5OTU2NXpcIixcbiAgLy8gSGFycG9vbnMgYXJlIGZyb20gZ2x5cGggVSsyMUJEIGluIGZvbnQgS2FUZVggTWFpblxuICBsZWZ0aGFycG9vbjogXCJNMCAyNjdjLjcgNS4zIDMgMTAgNyAxNGgzOTk5OTN2LTQwSDkzYzMuM1xcbi0zLjMgMTAuMi05LjUgMjAuNS0xOC41czE3LjgtMTUuOCAyMi41LTIwLjVjNTAuNy01MiA4OC0xMTAuMyAxMTItMTc1IDQtMTEuMyA1XFxuLTE4LjMgMy0yMS0xLjMtNC03LjMtNi0xOC02LTggMC0xMyAuNy0xNSAycy00LjcgNi43LTggMTZjLTQyIDk4LjctMTA3LjMgMTc0LjdcXG4tMTk2IDIyOC02LjcgNC43LTEwLjcgOC0xMiAxMC0xLjMgMi0yIDUuNy0yIDExem0xMDAtMjZ2NDBoMzk5OTAwdi00MHpcIixcbiAgbGVmdGhhcnBvb25wbHVzOiBcIk0wIDI2N2MuNyA1LjMgMyAxMCA3IDE0aDM5OTk5M3YtNDBIOTNjMy4zLTMuMyAxMC4yLTkuNVxcbiAyMC41LTE4LjVzMTcuOC0xNS44IDIyLjUtMjAuNWM1MC43LTUyIDg4LTExMC4zIDExMi0xNzUgNC0xMS4zIDUtMTguMyAzLTIxLTEuM1xcbi00LTcuMy02LTE4LTYtOCAwLTEzIC43LTE1IDJzLTQuNyA2LjctOCAxNmMtNDIgOTguNy0xMDcuMyAxNzQuNy0xOTYgMjI4LTYuNyA0LjdcXG4tMTAuNyA4LTEyIDEwLTEuMyAyLTIgNS43LTIgMTF6bTEwMC0yNnY0MGgzOTk5MDB2LTQwek0wIDQzNXY0MGg0MDAwMDB2LTQwelxcbm0wIDB2NDBoNDAwMDAwdi00MHpcIixcbiAgbGVmdGhhcnBvb25kb3duOiBcIk03IDI0MWMtNCA0LTYuMzMzIDguNjY3LTcgMTQgMCA1LjMzMy42NjcgOSAyIDExczUuMzMzXFxuIDUuMzMzIDEyIDEwYzkwLjY2NyA1NCAxNTYgMTMwIDE5NiAyMjggMy4zMzMgMTAuNjY3IDYuMzMzIDE2LjMzMyA5IDE3IDIgLjY2NyA1XFxuIDEgOSAxaDVjMTAuNjY3IDAgMTYuNjY3LTIgMTgtNiAyLTIuNjY3IDEtOS42NjctMy0yMS0zMi04Ny4zMzMtODIuNjY3LTE1Ny42NjdcXG4tMTUyLTIxMWwtMy0zaDM5OTkwN3YtNDB6TTkzIDI4MSBINDAwMDAwIHYtNDBMNyAyNDF6XCIsXG4gIGxlZnRoYXJwb29uZG93bnBsdXM6IFwiTTcgNDM1Yy00IDQtNi4zIDguNy03IDE0IDAgNS4zLjcgOSAyIDExczUuMyA1LjMgMTJcXG4gMTBjOTAuNyA1NCAxNTYgMTMwIDE5NiAyMjggMy4zIDEwLjcgNi4zIDE2LjMgOSAxNyAyIC43IDUgMSA5IDFoNWMxMC43IDAgMTYuN1xcbi0yIDE4LTYgMi0yLjcgMS05LjctMy0yMS0zMi04Ny4zLTgyLjctMTU3LjctMTUyLTIxMWwtMy0zaDM5OTkwN3YtNDBIN3ptOTMgMFxcbnY0MGgzOTk5MDB2LTQwek0wIDI0MXY0MGgzOTk5MDB2LTQwem0wIDB2NDBoMzk5OTAwdi00MHpcIixcbiAgLy8gaG9vayBpcyBmcm9tIGdseXBoIFUrMjFBOSBpbiBmb250IEthVGVYIE1haW5cbiAgbGVmdGhvb2s6IFwiTTQwMDAwMCAyODEgSDEwM3MtMzMtMTEuMi02MS0zMy41UzAgMTk3LjMgMCAxNjRzMTQuMi02MS4yIDQyLjVcXG4tODMuNUM3MC44IDU4LjIgMTA0IDQ3IDE0MiA0NyBjMTYuNyAwIDI1IDYuNyAyNSAyMCAwIDEyLTguNyAxOC43LTI2IDIwLTQwIDMuM1xcbi02OC43IDE1LjctODYgMzctMTAgMTItMTUgMjUuMy0xNSA0MCAwIDIyLjcgOS44IDQwLjcgMjkuNSA1NCAxOS43IDEzLjMgNDMuNSAyMVxcbiA3MS41IDIzaDM5OTg1OXpNMTAzIDI4MXYtNDBoMzk5ODk3djQwelwiLFxuICBsZWZ0bGluZXNlZ21lbnQ6IFwiTTQwIDI4MSBWNDI4IEgwIFY5NCBINDAgVjI0MSBINDAwMDAwIHY0MHpcXG5NNDAgMjgxIFY0MjggSDAgVjk0IEg0MCBWMjQxIEg0MDAwMDAgdjQwelwiLFxuICBsZWZ0bWFwc3RvOiBcIk00MCAyODEgVjQ0OEgwVjc0SDQwVjI0MUg0MDAwMDB2NDB6XFxuTTQwIDI4MSBWNDQ4SDBWNzRINDBWMjQxSDQwMDAwMHY0MHpcIixcbiAgLy8gdG9mcm9tIGlzIGZyb20gZ2x5cGggVSsyMUM0IGluIGZvbnQgS2FUZVggQU1TIFJlZ3VsYXJcbiAgbGVmdFRvRnJvbTogXCJNMCAxNDdoNDAwMDAwdjQwSDB6bTAgMjE0YzY4IDQwIDExNS43IDk1LjcgMTQzIDE2N2gyMmMxNS4zIDAgMjNcXG4tLjMgMjMtMSAwLTEuMy01LjMtMTMuNy0xNi0zNy0xOC0zNS4zLTQxLjMtNjktNzAtMTAxbC03LThoMzk5OTA1di00MEg5NWw3LThcXG5jMjguNy0zMiA1Mi02NS43IDcwLTEwMSAxMC43LTIzLjMgMTYtMzUuNyAxNi0zNyAwLS43LTcuNy0xLTIzLTFoLTIyQzExNS43IDI2NS4zXFxuIDY4IDMyMSAwIDM2MXptMC0xNzR2LTQwaDM5OTkwMHY0MHptMTAwIDE1NHY0MGgzOTk5MDB2LTQwelwiLFxuICBsb25nZXF1YWw6IFwiTTAgNTAgaDQwMDAwMCB2NDBIMHogbTAgMTk0aDQwMDAwdjQwSDB6XFxuTTAgNTAgaDQwMDAwMCB2NDBIMHogbTAgMTk0aDQwMDAwdjQwSDB6XCIsXG4gIG1pZGJyYWNlOiBcIk0yMDA0MjggMzM0XFxuYy0xMDAuNy04LjMtMTk1LjMtNDQtMjgwLTEwOC01NS4zLTQyLTEwMS43LTkzLTEzOS0xNTNsLTktMTRjLTIuNyA0LTUuNyA4LjctOSAxNFxcbi01My4zIDg2LjctMTIzLjcgMTUzLTIxMSAxOTktNjYuNyAzNi0xMzcuMyA1Ni4zLTIxMiA2MkgwVjIxNGgxOTk1NjhjMTc4LjMtMTEuN1xcbiAzMTEuNy03OC4zIDQwMy0yMDEgNi04IDkuNy0xMiAxMS0xMiAuNy0uNyA2LjctMSAxOC0xczE3LjMuMyAxOCAxYzEuMyAwIDUgNCAxMVxcbiAxMiA0NC43IDU5LjMgMTAxLjMgMTA2LjMgMTcwIDE0MXMxNDUuMyA1NC4zIDIyOSA2MGgxOTk1NzJ2MTIwelwiLFxuICBtaWRicmFjZXVuZGVyOiBcIk0xOTk1NzIgMjE0XFxuYzEwMC43IDguMyAxOTUuMyA0NCAyODAgMTA4IDU1LjMgNDIgMTAxLjcgOTMgMTM5IDE1M2w5IDE0YzIuNy00IDUuNy04LjcgOS0xNFxcbiA1My4zLTg2LjcgMTIzLjctMTUzIDIxMS0xOTkgNjYuNy0zNiAxMzcuMy01Ni4zIDIxMi02MmgxOTk1Njh2MTIwSDIwMDQzMmMtMTc4LjNcXG4gMTEuNy0zMTEuNyA3OC4zLTQwMyAyMDEtNiA4LTkuNyAxMi0xMSAxMi0uNy43LTYuNyAxLTE4IDFzLTE3LjMtLjMtMTgtMWMtMS4zIDBcXG4tNS00LTExLTEyLTQ0LjctNTkuMy0xMDEuMy0xMDYuMy0xNzAtMTQxcy0xNDUuMy01NC4zLTIyOS02MEgwVjIxNHpcIixcbiAgb2lpbnRTaXplMTogXCJNNTEyLjYgNzEuNmMyNzIuNiAwIDMyMC4zIDEwNi44IDMyMC4zIDE3OC4yIDAgNzAuOC00Ny43IDE3Ny42XFxuLTMyMC4zIDE3Ny42UzE5My4xIDMyMC42IDE5My4xIDI0OS44YzAtNzEuNCA0Ni45LTE3OC4yIDMxOS41LTE3OC4yelxcbm0zNjguMSAxNzguMmMwLTg2LjQtNjAuOS0yMTUuNC0zNjguMS0yMTUuNC0zMDYuNCAwLTM2Ny4zIDEyOS0zNjcuMyAyMTUuNCAwIDg1LjhcXG42MC45IDIxNC44IDM2Ny4zIDIxNC44IDMwNy4yIDAgMzY4LjEtMTI5IDM2OC4xLTIxNC44elwiLFxuICBvaWludFNpemUyOiBcIk03NTcuOCAxMDAuMWMzODQuNyAwIDQ1MS4xIDEzNy42IDQ1MS4xIDIzMCAwIDkxLjMtNjYuNCAyMjguOFxcbi00NTEuMSAyMjguOC0zODYuMyAwLTQ1Mi43LTEzNy41LTQ1Mi43LTIyOC44IDAtOTIuNCA2Ni40LTIzMCA0NTIuNy0yMzB6XFxubTUwMi40IDIzMGMwLTExMS4yLTgyLjQtMjc3LjItNTAyLjQtMjc3LjJzLTUwNCAxNjYtNTA0IDI3Ny4yXFxuYzAgMTEwIDg0IDI3NiA1MDQgMjc2czUwMi40LTE2NiA1MDIuNC0yNzZ6XCIsXG4gIG9paWludFNpemUxOiBcIk02ODEuNCA3MS42YzQwOC45IDAgNDgwLjUgMTA2LjggNDgwLjUgMTc4LjIgMCA3MC44LTcxLjYgMTc3LjZcXG4tNDgwLjUgMTc3LjZTMjAyLjEgMzIwLjYgMjAyLjEgMjQ5LjhjMC03MS40IDcwLjUtMTc4LjIgNDc5LjMtMTc4LjJ6XFxubTUyNS44IDE3OC4yYzAtODYuNC04Ni44LTIxNS40LTUyNS43LTIxNS40LTQzNy45IDAtNTI0LjcgMTI5LTUyNC43IDIxNS40IDBcXG44NS44IDg2LjggMjE0LjggNTI0LjcgMjE0LjggNDM4LjkgMCA1MjUuNy0xMjkgNTI1LjctMjE0Ljh6XCIsXG4gIG9paWludFNpemUyOiBcIk0xMDIxLjIgNTNjNjAzLjYgMCA3MDcuOCAxNjUuOCA3MDcuOCAyNzcuMiAwIDExMC0xMDQuMiAyNzUuOFxcbi03MDcuOCAyNzUuOC02MDYgMC03MTAuMi0xNjUuOC03MTAuMi0yNzUuOEMzMTEgMjE4LjggNDE1LjIgNTMgMTAyMS4yIDUzelxcbm03NzAuNCAyNzcuMWMwLTEzMS4yLTEyNi40LTMyNy42LTc3MC41LTMyNy42UzI0OC40IDE5OC45IDI0OC40IDMzMC4xXFxuYzAgMTMwIDEyOC44IDMyNi40IDc3Mi43IDMyNi40czc3MC41LTE5Ni40IDc3MC41LTMyNi40elwiLFxuICByaWdodGFycm93OiBcIk0wIDI0MXY0MGgzOTk4OTFjLTQ3LjMgMzUuMy04NCA3OC0xMTAgMTI4XFxuLTE2LjcgMzItMjcuNyA2My43LTMzIDk1IDAgMS4zLS4yIDIuNy0uNSA0LS4zIDEuMy0uNSAyLjMtLjUgMyAwIDcuMyA2LjcgMTEgMjBcXG4gMTEgOCAwIDEzLjItLjggMTUuNS0yLjUgMi4zLTEuNyA0LjItNS41IDUuNS0xMS41IDItMTMuMyA1LjctMjcgMTEtNDEgMTQuNy00NC43XFxuIDM5LTg0LjUgNzMtMTE5LjVzNzMuNy02MC4yIDExOS03NS41YzYtMiA5LTUuNyA5LTExcy0zLTktOS0xMWMtNDUuMy0xNS4zLTg1XFxuLTQwLjUtMTE5LTc1LjVzLTU4LjMtNzQuOC03My0xMTkuNWMtNC43LTE0LTguMy0yNy4zLTExLTQwLTEuMy02LjctMy4yLTEwLjgtNS41XFxuLTEyLjUtMi4zLTEuNy03LjUtMi41LTE1LjUtMi41LTE0IDAtMjEgMy43LTIxIDExIDAgMiAyIDEwLjMgNiAyNSAyMC43IDgzLjMgNjdcXG4gMTUxLjcgMTM5IDIwNXptMCAwdjQwaDM5OTkwMHYtNDB6XCIsXG4gIHJpZ2h0YnJhY2U6IFwiTTQwMDAwMCA1NDJsXFxuLTYgNmgtMTdjLTEyLjcgMC0xOS4zLS4zLTIwLTEtNC00LTcuMy04LjMtMTAtMTMtMzUuMy01MS4zLTgwLjgtOTMuOC0xMzYuNS0xMjcuNVxcbnMtMTE3LjItNTUuOC0xODQuNS02Ni41Yy0uNyAwLTItLjMtNC0xLTE4LjctMi43LTc2LTQuMy0xNzItNUgwVjIxNGgzOTk1NzFsNiAxXFxuYzEyNC43IDggMjM1IDYxLjcgMzMxIDE2MSAzMS4zIDMzLjMgNTkuNyA3Mi43IDg1IDExOGw3IDEzdjM1elwiLFxuICByaWdodGJyYWNldW5kZXI6IFwiTTM5OTk5NCAwbDYgNnYzNWwtNiAxMWMtNTYgMTA0LTEzNS4zIDE4MS4zLTIzOCAyMzItNTcuM1xcbiAyOC43LTExNyA0NS0xNzkgNTBILTMwMFYyMTRoMzk5ODk3YzQzLjMtNyA4MS0xNSAxMTMtMjYgMTAwLjctMzMgMTc5LjctOTEgMjM3XFxuLTE3NCAyLjctNSA2LTkgMTAtMTMgLjctMSA3LjMtMSAyMC0xaDE3elwiLFxuICByaWdodGdyb3VwOiBcIk0wIDgwaDM5OTU2NWMzNzEgMCAyNjYuNyAxNDkuNCA0MTQgMTgwIDUuOSAxLjIgMTggMCAxOCAwIDIgMFxcbiAzLTEgMy0zdi0zOGMtNzYtMTU4LTI1Ny0yMTktNDM1LTIxOUgwelwiLFxuICByaWdodGdyb3VwdW5kZXI6IFwiTTAgMjYyaDM5OTU2NWMzNzEgMCAyNjYuNy0xNDkuNCA0MTQtMTgwIDUuOS0xLjIgMTggMCAxOFxcbiAwIDIgMCAzIDEgMyAzdjM4Yy03NiAxNTgtMjU3IDIxOS00MzUgMjE5SDB6XCIsXG4gIHJpZ2h0aGFycG9vbjogXCJNMCAyNDF2NDBoMzk5OTkzYzQuNy00LjcgNy05LjMgNy0xNCAwLTkuM1xcbi0zLjctMTUuMy0xMS0xOC05Mi43LTU2LjctMTU5LTEzMy43LTE5OS0yMzEtMy4zLTkuMy02LTE0LjctOC0xNi0yLTEuMy03LTItMTUtMlxcbi0xMC43IDAtMTYuNyAyLTE4IDYtMiAyLjctMSA5LjcgMyAyMSAxNS4zIDQyIDM2LjcgODEuOCA2NCAxMTkuNSAyNy4zIDM3LjcgNThcXG4gNjkuMiA5MiA5NC41em0wIDB2NDBoMzk5OTAwdi00MHpcIixcbiAgcmlnaHRoYXJwb29ucGx1czogXCJNMCAyNDF2NDBoMzk5OTkzYzQuNy00LjcgNy05LjMgNy0xNCAwLTkuMy0zLjctMTUuMy0xMVxcbi0xOC05Mi43LTU2LjctMTU5LTEzMy43LTE5OS0yMzEtMy4zLTkuMy02LTE0LjctOC0xNi0yLTEuMy03LTItMTUtMi0xMC43IDAtMTYuN1xcbiAyLTE4IDYtMiAyLjctMSA5LjcgMyAyMSAxNS4zIDQyIDM2LjcgODEuOCA2NCAxMTkuNSAyNy4zIDM3LjcgNTggNjkuMiA5MiA5NC41elxcbm0wIDB2NDBoMzk5OTAwdi00MHogbTEwMCAxOTR2NDBoMzk5OTAwdi00MHptMCAwdjQwaDM5OTkwMHYtNDB6XCIsXG4gIHJpZ2h0aGFycG9vbmRvd246IFwiTTM5OTc0NyA1MTFjMCA3LjMgNi43IDExIDIwIDExIDggMCAxMy0uOCAxNS0yLjVzNC43LTYuOFxcbiA4LTE1LjVjNDAtOTQgOTkuMy0xNjYuMyAxNzgtMjE3IDEzLjMtOCAyMC4zLTEyLjMgMjEtMTMgNS4zLTMuMyA4LjUtNS44IDkuNVxcbi03LjUgMS0xLjcgMS41LTUuMiAxLjUtMTAuNXMtMi4zLTEwLjMtNy0xNUgwdjQwaDM5OTkwOGMtMzQgMjUuMy02NC43IDU3LTkyIDk1XFxuLTI3LjMgMzgtNDguNyA3Ny43LTY0IDExOS0zLjMgOC43LTUgMTQtNSAxNnpNMCAyNDF2NDBoMzk5OTAwdi00MHpcIixcbiAgcmlnaHRoYXJwb29uZG93bnBsdXM6IFwiTTM5OTc0NyA3MDVjMCA3LjMgNi43IDExIDIwIDExIDggMCAxMy0uOFxcbiAxNS0yLjVzNC43LTYuOCA4LTE1LjVjNDAtOTQgOTkuMy0xNjYuMyAxNzgtMjE3IDEzLjMtOCAyMC4zLTEyLjMgMjEtMTMgNS4zLTMuM1xcbiA4LjUtNS44IDkuNS03LjUgMS0xLjcgMS41LTUuMiAxLjUtMTAuNXMtMi4zLTEwLjMtNy0xNUgwdjQwaDM5OTkwOGMtMzQgMjUuM1xcbi02NC43IDU3LTkyIDk1LTI3LjMgMzgtNDguNyA3Ny43LTY0IDExOS0zLjMgOC43LTUgMTQtNSAxNnpNMCA0MzV2NDBoMzk5OTAwdi00MHpcXG5tMC0xOTR2NDBoNDAwMDAwdi00MHptMCAwdjQwaDQwMDAwMHYtNDB6XCIsXG4gIHJpZ2h0aG9vazogXCJNMzk5ODU5IDI0MWMtNzY0IDAgMCAwIDAgMCA0MC0zLjMgNjguNy0xNS43IDg2LTM3IDEwLTEyIDE1LTI1LjNcXG4gMTUtNDAgMC0yMi43LTkuOC00MC43LTI5LjUtNTQtMTkuNy0xMy4zLTQzLjUtMjEtNzEuNS0yMy0xNy4zLTEuMy0yNi04LTI2LTIwIDBcXG4tMTMuMyA4LjctMjAgMjYtMjAgMzggMCA3MSAxMS4yIDk5IDMzLjUgMCAwIDcgNS42IDIxIDE2LjcgMTQgMTEuMiAyMSAzMy41IDIxXFxuIDY2LjhzLTE0IDYxLjItNDIgODMuNWMtMjggMjIuMy02MSAzMy41LTk5IDMzLjVMMCAyNDF6IE0wIDI4MXYtNDBoMzk5ODU5djQwelwiLFxuICByaWdodGxpbmVzZWdtZW50OiBcIk0zOTk5NjAgMjQxIFY5NCBoNDAgVjQyOCBoLTQwIFYyODEgSDAgdi00MHpcXG5NMzk5OTYwIDI0MSBWOTQgaDQwIFY0MjggaC00MCBWMjgxIEgwIHYtNDB6XCIsXG4gIHJpZ2h0VG9Gcm9tOiBcIk00MDAwMDAgMTY3Yy03MC43LTQyLTExOC05Ny43LTE0Mi0xNjdoLTIzYy0xNS4zIDAtMjMgLjMtMjNcXG4gMSAwIDEuMyA1LjMgMTMuNyAxNiAzNyAxOCAzNS4zIDQxLjMgNjkgNzAgMTAxbDcgOEgwdjQwaDM5OTkwNWwtNyA4Yy0yOC43IDMyXFxuLTUyIDY1LjctNzAgMTAxLTEwLjcgMjMuMy0xNiAzNS43LTE2IDM3IDAgLjcgNy43IDEgMjMgMWgyM2MyNC02OS4zIDcxLjMtMTI1IDE0Mlxcbi0xNjd6IE0xMDAgMTQ3djQwaDM5OTkwMHYtNDB6TTAgMzQxdjQwaDM5OTkwMHYtNDB6XCIsXG4gIC8vIHR3b2hlYWRsZWZ0YXJyb3cgaXMgZnJvbSBnbHlwaCBVKzIxOUUgaW4gZm9udCBLYVRlWCBBTVMgUmVndWxhclxuICB0d29oZWFkbGVmdGFycm93OiBcIk0wIDE2N2M2OCA0MFxcbiAxMTUuNyA5NS43IDE0MyAxNjdoMjJjMTUuMyAwIDIzLS4zIDIzLTEgMC0xLjMtNS4zLTEzLjctMTYtMzctMTgtMzUuMy00MS4zLTY5XFxuLTcwLTEwMWwtNy04aDEyNWw5IDdjNTAuNyAzOS4zIDg1IDg2IDEwMyAxNDBoNDZjMC00LjctNi4zLTE4LjctMTktNDItMTgtMzUuM1xcbi00MC02Ny4zLTY2LTk2bC05LTloMzk5NzE2di00MEgyODRsOS05YzI2LTI4LjcgNDgtNjAuNyA2Ni05NiAxMi43LTIzLjMzMyAxOVxcbi0zNy4zMzMgMTktNDJoLTQ2Yy0xOCA1NC01Mi4zIDEwMC43LTEwMyAxNDBsLTkgN0g5NWw3LThjMjguNy0zMiA1Mi02NS43IDcwLTEwMVxcbiAxMC43LTIzLjMzMyAxNi0zNS43IDE2LTM3IDAtLjctNy43LTEtMjMtMWgtMjJDMTE1LjcgNzEuMyA2OCAxMjcgMCAxNjd6XCIsXG4gIHR3b2hlYWRyaWdodGFycm93OiBcIk00MDAwMDAgMTY3XFxuYy02OC00MC0xMTUuNy05NS43LTE0My0xNjdoLTIyYy0xNS4zIDAtMjMgLjMtMjMgMSAwIDEuMyA1LjMgMTMuNyAxNiAzNyAxOCAzNS4zXFxuIDQxLjMgNjkgNzAgMTAxbDcgOGgtMTI1bC05LTdjLTUwLjctMzkuMy04NS04Ni0xMDMtMTQwaC00NmMwIDQuNyA2LjMgMTguNyAxOSA0MlxcbiAxOCAzNS4zIDQwIDY3LjMgNjYgOTZsOSA5SDB2NDBoMzk5NzE2bC05IDljLTI2IDI4LjctNDggNjAuNy02NiA5Ni0xMi43IDIzLjMzM1xcbi0xOSAzNy4zMzMtMTkgNDJoNDZjMTgtNTQgNTIuMy0xMDAuNyAxMDMtMTQwbDktN2gxMjVsLTcgOGMtMjguNyAzMi01MiA2NS43LTcwXFxuIDEwMS0xMC43IDIzLjMzMy0xNiAzNS43LTE2IDM3IDAgLjcgNy43IDEgMjMgMWgyMmMyNy4zLTcxLjMgNzUtMTI3IDE0My0xNjd6XCIsXG4gIC8vIHRpbGRlMSBpcyBhIG1vZGlmaWVkIHZlcnNpb24gb2YgYSBnbHlwaCBmcm9tIHRoZSBNblN5bWJvbCBwYWNrYWdlXG4gIHRpbGRlMTogXCJNMjAwIDU1LjUzOGMtNzcgMC0xNjggNzMuOTUzLTE3NyA3My45NTMtMyAwLTdcXG4tMi4xNzUtOS01LjQzN0wyIDk3Yy0xLTItMi00LTItNiAwLTQgMi03IDUtOWwyMC0xMkMxMTYgMTIgMTcxIDAgMjA3IDBjODYgMFxcbiAxMTQgNjggMTkxIDY4IDc4IDAgMTY4LTY4IDE3Ny02OCA0IDAgNyAyIDkgNWwxMiAxOWMxIDIuMTc1IDIgNC4zNSAyIDYuNTI1IDBcXG4gNC4zNS0yIDcuNjEzLTUgOS43ODhsLTE5IDEzLjA1Yy05MiA2My4wNzctMTE2LjkzNyA3NS4zMDgtMTgzIDc2LjEyOFxcbi02OC4yNjcuODQ3LTExMy03My45NTItMTkxLTczLjk1MnpcIixcbiAgLy8gZGl0dG8gdGlsZGUyLCB0aWxkZTMsICYgdGlsZGU0XG4gIHRpbGRlMjogXCJNMzQ0IDU1LjI2NmMtMTQyIDAtMzAwLjYzOCA4MS4zMTYtMzExLjUgODYuNDE4XFxuLTguMDEgMy43NjItMjIuNSAxMC45MS0yMy41IDUuNTYyTDEgMTIwYy0xLTItMS0zLTEtNCAwLTUgMy05IDgtMTBsMTguNC05QzE2MC45XFxuIDMxLjkgMjgzIDAgMzU4IDBjMTQ4IDAgMTg4IDEyMiAzMzEgMTIyczMxNC05NyAzMjYtOTdjNCAwIDggMiAxMCA3bDcgMjEuMTE0XFxuYzEgMi4xNCAxIDMuMjEgMSA0LjI4IDAgNS4zNDctMyA5LjYyNi03IDEwLjY5NmwtMjIuMyAxMi42MjJDODUyLjYgMTU4LjM3MiA3NTFcXG4gMTgxLjQ3NiA2NzYgMTgxLjQ3NmMtMTQ5IDAtMTg5LTEyNi4yMS0zMzItMTI2LjIxelwiLFxuICB0aWxkZTM6IFwiTTc4NiA1OUM0NTcgNTkgMzIgMTc1LjI0MiAxMyAxNzUuMjQyYy02IDAtMTAtMy40NTdcXG4tMTEtMTAuMzdMLjE1IDEzOGMtMS03IDMtMTIgMTAtMTNsMTkuMi02LjRDMzc4LjQgNDAuNyA2MzQuMyAwIDgwNC4zIDBjMzM3IDBcXG4gNDExLjggMTU3IDc0Ni44IDE1NyAzMjggMCA3NTQtMTEyIDc3My0xMTIgNSAwIDEwIDMgMTEgOWwxIDE0LjA3NWMxIDguMDY2LS42OTdcXG4gMTYuNTk1LTYuNjk3IDE3LjQ5MmwtMjEuMDUyIDcuMzFjLTM2Ny45IDk4LjE0Ni02MDkuMTUgMTIyLjY5Ni03NzguMTUgMTIyLjY5NlxcbiAtMzM4IDAtNDA5LTE1Ni41NzMtNzQ0LTE1Ni41NzN6XCIsXG4gIHRpbGRlNDogXCJNNzg2IDU4QzQ1NyA1OCAzMiAxNzcuNDg3IDEzIDE3Ny40ODdjLTYgMC0xMC0zLjM0NVxcbi0xMS0xMC4wMzVMLjE1IDE0M2MtMS03IDMtMTIgMTAtMTNsMjItNi43QzM4MS4yIDM1IDYzNy4xNSAwIDgwNy4xNSAwYzMzNyAwIDQwOVxcbiAxNzcgNzQ0IDE3NyAzMjggMCA3NTQtMTI3IDc3My0xMjcgNSAwIDEwIDMgMTEgOWwxIDE0Ljc5NGMxIDcuODA1LTMgMTMuMzgtOVxcbiAxNC40OTVsLTIwLjcgNS41NzRjLTM2Ni44NSA5OS43OS02MDcuMyAxMzkuMzcyLTc3Ni4zIDEzOS4zNzItMzM4IDAtNDA5XFxuIC0xNzUuMjM2LTc0NC0xNzUuMjM2elwiLFxuICAvLyB2ZWMgaXMgZnJvbSBnbHlwaCBVKzIwRDcgaW4gZm9udCBLYVRlWCBNYWluXG4gIHZlYzogXCJNMzc3IDIwYzAtNS4zMzMgMS44MzMtMTAgNS41LTE0UzM5MSAwIDM5NyAwYzQuNjY3IDAgOC42NjcgMS42NjcgMTIgNVxcbjMuMzMzIDIuNjY3IDYuNjY3IDkgMTAgMTkgNi42NjcgMjQuNjY3IDIwLjMzMyA0My42NjcgNDEgNTcgNy4zMzMgNC42NjcgMTFcXG4xMC42NjcgMTEgMTggMCA2LTEgMTAtMyAxMnMtNi42NjcgNS0xNCA5Yy0yOC42NjcgMTQuNjY3LTUzLjY2NyAzNS42NjctNzUgNjNcXG4tMS4zMzMgMS4zMzMtMy4xNjcgMy41LTUuNSA2LjVzLTQgNC44MzMtNSA1LjVjLTEgLjY2Ny0yLjUgMS4zMzMtNC41IDJzLTQuMzMzIDFcXG4tNyAxYy00LjY2NyAwLTkuMTY3LTEuODMzLTEzLjUtNS41UzMzNyAxODQgMzM3IDE3OGMwLTEyLjY2NyAxNS42NjctMzIuMzMzIDQ3LTU5XFxuSDIxM2wtMTcxLTFjLTguNjY3LTYtMTMtMTIuMzMzLTEzLTE5IDAtNC42NjcgNC4zMzMtMTEuMzMzIDEzLTIwaDM1OVxcbmMtMTYtMjUuMzMzLTI0LTQ1LTI0LTU5elwiLFxuICAvLyB3aWRlaGF0MSBpcyBhIG1vZGlmaWVkIHZlcnNpb24gb2YgYSBnbHlwaCBmcm9tIHRoZSBNblN5bWJvbCBwYWNrYWdlXG4gIHdpZGVoYXQxOiBcIk01MjkgMGg1bDUxOSAxMTVjNSAxIDkgNSA5IDEwIDAgMS0xIDItMSAzbC00IDIyXFxuYy0xIDUtNSA5LTExIDloLTJMNTMyIDY3IDE5IDE1OWgtMmMtNSAwLTktNC0xMS05bC01LTIyYy0xLTYgMi0xMiA4LTEzelwiLFxuICAvLyBkaXR0byB3aWRlaGF0Miwgd2lkZWhhdDMsICYgd2lkZWhhdDRcbiAgd2lkZWhhdDI6IFwiTTExODEgMGgybDExNzEgMTc2YzYgMCAxMCA1IDEwIDExbC0yIDIzYy0xIDYtNSAxMFxcbi0xMSAxMGgtMUwxMTgyIDY3IDE1IDIyMGgtMWMtNiAwLTEwLTQtMTEtMTBsLTItMjNjLTEtNiA0LTExIDEwLTExelwiLFxuICB3aWRlaGF0MzogXCJNMTE4MSAwaDJsMTE3MSAyMzZjNiAwIDEwIDUgMTAgMTFsLTIgMjNjLTEgNi01IDEwXFxuLTExIDEwaC0xTDExODIgNjcgMTUgMjgwaC0xYy02IDAtMTAtNC0xMS0xMGwtMi0yM2MtMS02IDQtMTEgMTAtMTF6XCIsXG4gIHdpZGVoYXQ0OiBcIk0xMTgxIDBoMmwxMTcxIDI5NmM2IDAgMTAgNSAxMCAxMWwtMiAyM2MtMSA2LTUgMTBcXG4tMTEgMTBoLTFMMTE4MiA2NyAxNSAzNDBoLTFjLTYgMC0xMC00LTExLTEwbC0yLTIzYy0xLTYgNC0xMSAxMC0xMXpcIixcbiAgLy8gd2lkZWNoZWNrIHBhdGhzIGFyZSBhbGwgaW52ZXJ0ZWQgdmVyc2lvbnMgb2Ygd2lkZWhhdFxuICB3aWRlY2hlY2sxOiBcIk01MjksMTU5aDVsNTE5LC0xMTVjNSwtMSw5LC01LDksLTEwYzAsLTEsLTEsLTIsLTEsLTNsLTQsLTIyYy0xLFxcbi01LC01LC05LC0xMSwtOWgtMmwtNTEyLDkybC01MTMsLTkyaC0yYy01LDAsLTksNCwtMTEsOWwtNSwyMmMtMSw2LDIsMTIsOCwxM3pcIixcbiAgd2lkZWNoZWNrMjogXCJNMTE4MSwyMjBoMmwxMTcxLC0xNzZjNiwwLDEwLC01LDEwLC0xMWwtMiwtMjNjLTEsLTYsLTUsLTEwLFxcbi0xMSwtMTBoLTFsLTExNjgsMTUzbC0xMTY3LC0xNTNoLTFjLTYsMCwtMTAsNCwtMTEsMTBsLTIsMjNjLTEsNiw0LDExLDEwLDExelwiLFxuICB3aWRlY2hlY2szOiBcIk0xMTgxLDI4MGgybDExNzEsLTIzNmM2LDAsMTAsLTUsMTAsLTExbC0yLC0yM2MtMSwtNiwtNSwtMTAsXFxuLTExLC0xMGgtMWwtMTE2OCwyMTNsLTExNjcsLTIxM2gtMWMtNiwwLC0xMCw0LC0xMSwxMGwtMiwyM2MtMSw2LDQsMTEsMTAsMTF6XCIsXG4gIHdpZGVjaGVjazQ6IFwiTTExODEsMzQwaDJsMTE3MSwtMjk2YzYsMCwxMCwtNSwxMCwtMTFsLTIsLTIzYy0xLC02LC01LC0xMCxcXG4tMTEsLTEwaC0xbC0xMTY4LDI3M2wtMTE2NywtMjczaC0xYy02LDAsLTEwLDQsLTExLDEwbC0yLDIzYy0xLDYsNCwxMSwxMCwxMXpcIixcbiAgLy8gVGhlIG5leHQgdGVuIHBhdGhzIHN1cHBvcnQgcmVhY3Rpb24gYXJyb3dzIGZyb20gdGhlIG1oY2hlbSBwYWNrYWdlLlxuICAvLyBBcnJvd3MgZm9yIFxcY2V7PC0tPn0gYXJlIG9mZnNldCBmcm9tIHhBeGlzIGJ5IDAuMjJleCwgcGVyIG1oY2hlbSBpbiBMYVRlWFxuICAvLyBiYXJhYm92ZWxlZnRhcnJvdyBpcyBtb3N0bHkgZnJvbSBnbHlwaCBVKzIxOTAgaW4gZm9udCBLYVRlWCBNYWluXG4gIGJhcmFib3ZlbGVmdGFycm93OiBcIk00MDAwMDAgNjIwaC0zOTk4OTBsMyAtM2M2OC43IC01Mi43IDExMy43IC0xMjAgMTM1IC0yMDJcXG5jNCAtMTQuNyA2IC0yMyA2IC0yNWMwIC03LjMgLTcgLTExIC0yMSAtMTFjLTggMCAtMTMuMiAwLjggLTE1LjUgMi41XFxuYy0yLjMgMS43IC00LjIgNS44IC01LjUgMTIuNWMtMS4zIDQuNyAtMi43IDEwLjMgLTQgMTdjLTEyIDQ4LjcgLTM0LjggOTIgLTY4LjUgMTMwXFxucy03NC4yIDY2LjMgLTEyMS41IDg1Yy0xMCA0IC0xNiA3LjcgLTE4IDExYzAgOC43IDYgMTQuMyAxOCAxN2M0Ny4zIDE4LjcgODcuOCA0N1xcbjEyMS41IDg1czU2LjUgODEuMyA2OC41IDEzMGMwLjcgMiAxLjMgNSAyIDlzMS4yIDYuNyAxLjUgOGMwLjMgMS4zIDEgMy4zIDIgNlxcbnMyLjIgNC41IDMuNSA1LjVjMS4zIDEgMy4zIDEuOCA2IDIuNXM2IDEgMTAgMWMxNCAwIDIxIC0zLjcgMjEgLTExXFxuYzAgLTIgLTIgLTEwLjMgLTYgLTI1Yy0yMCAtNzkuMyAtNjUgLTE0Ni43IC0xMzUgLTIwMmwtMyAtM2gzOTk4OTB6XFxuTTEwMCA2MjB2NDBoMzk5OTAwdi00MHogTTAgMjQxdjQwaDM5OTkwMHYtNDB6TTAgMjQxdjQwaDM5OTkwMHYtNDB6XCIsXG4gIC8vIHJpZ2h0YXJyb3dhYm92ZWJhciBpcyBtb3N0bHkgZnJvbSBnbHlwaCBVKzIxOTIsIEthVGVYIE1haW5cbiAgcmlnaHRhcnJvd2Fib3ZlYmFyOiBcIk0wIDI0MXY0MGgzOTk4OTFjLTQ3LjMgMzUuMy04NCA3OC0xMTAgMTI4LTE2LjcgMzJcXG4tMjcuNyA2My43LTMzIDk1IDAgMS4zLS4yIDIuNy0uNSA0LS4zIDEuMy0uNSAyLjMtLjUgMyAwIDcuMyA2LjcgMTEgMjAgMTEgOCAwXFxuMTMuMi0uOCAxNS41LTIuNSAyLjMtMS43IDQuMi01LjUgNS41LTExLjUgMi0xMy4zIDUuNy0yNyAxMS00MSAxNC43LTQ0LjcgMzlcXG4tODQuNSA3My0xMTkuNXM3My43LTYwLjIgMTE5LTc1LjVjNi0yIDktNS43IDktMTFzLTMtOS05LTExYy00NS4zLTE1LjMtODUtNDAuNVxcbi0xMTktNzUuNXMtNTguMy03NC44LTczLTExOS41Yy00LjctMTQtOC4zLTI3LjMtMTEtNDAtMS4zLTYuNy0zLjItMTAuOC01LjVcXG4tMTIuNS0yLjMtMS43LTcuNS0yLjUtMTUuNS0yLjUtMTQgMC0yMSAzLjctMjEgMTEgMCAyIDIgMTAuMyA2IDI1IDIwLjcgODMuMyA2N1xcbjE1MS43IDEzOSAyMDV6bTk2IDM3OWgzOTk4OTR2NDBIMHptMCAwaDM5OTkwNHY0MEgwelwiLFxuICAvLyBUaGUgc2hvcnQgbGVmdCBoYXJwb29uIGhhcyAwLjVlbSAoaS5lLiA1MDAgdW5pdHMpIGtlcm4gb24gdGhlIGxlZnQgZW5kLlxuICAvLyBSZWYgZnJvbSBtaGNoZW0uc3R5OiBcXHJsYXB7XFxyYWlzZWJveHstLjIyZXh9eyRcXGtlcm4wLjVlbVxuICBiYXJhYm92ZXNob3J0bGVmdGhhcnBvb246IFwiTTUwNyw0MzVjLTQsNCwtNi4zLDguNywtNywxNGMwLDUuMywwLjcsOSwyLDExXFxuYzEuMywyLDUuMyw1LjMsMTIsMTBjOTAuNyw1NCwxNTYsMTMwLDE5NiwyMjhjMy4zLDEwLjcsNi4zLDE2LjMsOSwxN1xcbmMyLDAuNyw1LDEsOSwxYzAsMCw1LDAsNSwwYzEwLjcsMCwxNi43LC0yLDE4LC02YzIsLTIuNywxLC05LjcsLTMsLTIxXFxuYy0zMiwtODcuMywtODIuNywtMTU3LjcsLTE1MiwtMjExYzAsMCwtMywtMywtMywtM2wzOTkzNTEsMGwwLC00MFxcbmMtMzk4NTcwLDAsLTM5OTQzNywwLC0zOTk0MzcsMHogTTU5MyA0MzUgdjQwIEgzOTk1MDAgdi00MHpcXG5NMCAyODEgdi00MCBIMzk5OTA4IHY0MHogTTAgMjgxIHYtNDAgSDM5OTkwOCB2NDB6XCIsXG4gIHJpZ2h0aGFycG9vbmFib3Zlc2hvcnRiYXI6IFwiTTAsMjQxIGwwLDQwYzM5OTEyNiwwLDM5OTk5MywwLDM5OTk5MywwXFxuYzQuNywtNC43LDcsLTkuMyw3LC0xNGMwLC05LjMsLTMuNywtMTUuMywtMTEsLTE4Yy05Mi43LC01Ni43LC0xNTksLTEzMy43LC0xOTksXFxuLTIzMWMtMy4zLC05LjMsLTYsLTE0LjcsLTgsLTE2Yy0yLC0xLjMsLTcsLTIsLTE1LC0yYy0xMC43LDAsLTE2LjcsMiwtMTgsNlxcbmMtMiwyLjcsLTEsOS43LDMsMjFjMTUuMyw0MiwzNi43LDgxLjgsNjQsMTE5LjVjMjcuMywzNy43LDU4LDY5LjIsOTIsOTQuNXpcXG5NMCAyNDEgdjQwIEgzOTk5MDggdi00MHogTTAgNDc1IHYtNDAgSDM5OTUwMCB2NDB6IE0wIDQ3NSB2LTQwIEgzOTk1MDAgdjQwelwiLFxuICBzaG9ydGJhcmFib3ZlbGVmdGhhcnBvb246IFwiTTcsNDM1Yy00LDQsLTYuMyw4LjcsLTcsMTRjMCw1LjMsMC43LDksMiwxMVxcbmMxLjMsMiw1LjMsNS4zLDEyLDEwYzkwLjcsNTQsMTU2LDEzMCwxOTYsMjI4YzMuMywxMC43LDYuMywxNi4zLDksMTdjMiwwLjcsNSwxLDksXFxuMWMwLDAsNSwwLDUsMGMxMC43LDAsMTYuNywtMiwxOCwtNmMyLC0yLjcsMSwtOS43LC0zLC0yMWMtMzIsLTg3LjMsLTgyLjcsLTE1Ny43LFxcbi0xNTIsLTIxMWMwLDAsLTMsLTMsLTMsLTNsMzk5OTA3LDBsMCwtNDBjLTM5OTEyNiwwLC0zOTk5OTMsMCwtMzk5OTkzLDB6XFxuTTkzIDQzNSB2NDAgSDQwMDAwMCB2LTQweiBNNTAwIDI0MSB2NDAgSDQwMDAwMCB2LTQweiBNNTAwIDI0MSB2NDAgSDQwMDAwMCB2LTQwelwiLFxuICBzaG9ydHJpZ2h0aGFycG9vbmFib3ZlYmFyOiBcIk01MywyNDFsMCw0MGMzOTg1NzAsMCwzOTk0MzcsMCwzOTk0MzcsMFxcbmM0LjcsLTQuNyw3LC05LjMsNywtMTRjMCwtOS4zLC0zLjcsLTE1LjMsLTExLC0xOGMtOTIuNywtNTYuNywtMTU5LC0xMzMuNywtMTk5LFxcbi0yMzFjLTMuMywtOS4zLC02LC0xNC43LC04LC0xNmMtMiwtMS4zLC03LC0yLC0xNSwtMmMtMTAuNywwLC0xNi43LDIsLTE4LDZcXG5jLTIsMi43LC0xLDkuNywzLDIxYzE1LjMsNDIsMzYuNyw4MS44LDY0LDExOS41YzI3LjMsMzcuNyw1OCw2OS4yLDkyLDk0LjV6XFxuTTUwMCAyNDEgdjQwIEgzOTk0MDggdi00MHogTTUwMCA0MzUgdjQwIEg0MDAwMDAgdi00MHpcIlxufTtcbmNvbnN0IHRhbGxEZWxpbSA9IGZ1bmN0aW9uIChsYWJlbCwgbWlkSGVpZ2h0KSB7XG4gIHN3aXRjaCAobGFiZWwpIHtcbiAgICBjYXNlIFwibGJyYWNrXCI6XG4gICAgICByZXR1cm4gXCJNNDAzIDE3NTkgVjg0IEg2NjYgVjAgSDMxOSBWMTc1OSB2XCIgKyBtaWRIZWlnaHQgKyBcIiB2MTc1OSBoMzQ3IHYtODRcXG5INDAzeiBNNDAzIDE3NTkgVjAgSDMxOSBWMTc1OSB2XCIgKyBtaWRIZWlnaHQgKyBcIiB2MTc1OSBoODR6XCI7XG5cbiAgICBjYXNlIFwicmJyYWNrXCI6XG4gICAgICByZXR1cm4gXCJNMzQ3IDE3NTkgVjAgSDAgVjg0IEgyNjMgVjE3NTkgdlwiICsgbWlkSGVpZ2h0ICsgXCIgdjE3NTkgSDAgdjg0IEgzNDd6XFxuTTM0NyAxNzU5IFYwIEgyNjMgVjE3NTkgdlwiICsgbWlkSGVpZ2h0ICsgXCIgdjE3NTkgaDg0elwiO1xuXG4gICAgY2FzZSBcInZlcnRcIjpcbiAgICAgIHJldHVybiBcIk0xNDUgMTUgdjU4NSB2XCIgKyBtaWRIZWlnaHQgKyBcIiB2NTg1IGMyLjY2NywxMCw5LjY2NywxNSwyMSwxNVxcbmMxMCwwLDE2LjY2NywtNSwyMCwtMTUgdi01ODUgdlwiICsgLW1pZEhlaWdodCArIFwiIHYtNTg1IGMtMi42NjcsLTEwLC05LjY2NywtMTUsLTIxLC0xNVxcbmMtMTAsMCwtMTYuNjY3LDUsLTIwLDE1eiBNMTg4IDE1IEgxNDUgdjU4NSB2XCIgKyBtaWRIZWlnaHQgKyBcIiB2NTg1IGg0M3pcIjtcblxuICAgIGNhc2UgXCJkb3VibGV2ZXJ0XCI6XG4gICAgICByZXR1cm4gXCJNMTQ1IDE1IHY1ODUgdlwiICsgbWlkSGVpZ2h0ICsgXCIgdjU4NSBjMi42NjcsMTAsOS42NjcsMTUsMjEsMTVcXG5jMTAsMCwxNi42NjcsLTUsMjAsLTE1IHYtNTg1IHZcIiArIC1taWRIZWlnaHQgKyBcIiB2LTU4NSBjLTIuNjY3LC0xMCwtOS42NjcsLTE1LC0yMSwtMTVcXG5jLTEwLDAsLTE2LjY2Nyw1LC0yMCwxNXogTTE4OCAxNSBIMTQ1IHY1ODUgdlwiICsgbWlkSGVpZ2h0ICsgXCIgdjU4NSBoNDN6XFxuTTM2NyAxNSB2NTg1IHZcIiArIG1pZEhlaWdodCArIFwiIHY1ODUgYzIuNjY3LDEwLDkuNjY3LDE1LDIxLDE1XFxuYzEwLDAsMTYuNjY3LC01LDIwLC0xNSB2LTU4NSB2XCIgKyAtbWlkSGVpZ2h0ICsgXCIgdi01ODUgYy0yLjY2NywtMTAsLTkuNjY3LC0xNSwtMjEsLTE1XFxuYy0xMCwwLC0xNi42NjcsNSwtMjAsMTV6IE00MTAgMTUgSDM2NyB2NTg1IHZcIiArIG1pZEhlaWdodCArIFwiIHY1ODUgaDQzelwiO1xuXG4gICAgY2FzZSBcImxmbG9vclwiOlxuICAgICAgcmV0dXJuIFwiTTMxOSA2MDIgVjAgSDQwMyBWNjAyIHZcIiArIG1pZEhlaWdodCArIFwiIHYxNzE1IGgyNjMgdjg0IEgzMTl6XFxuTU0zMTkgNjAyIFYwIEg0MDMgVjYwMiB2XCIgKyBtaWRIZWlnaHQgKyBcIiB2MTcxNSBIMzE5elwiO1xuXG4gICAgY2FzZSBcInJmbG9vclwiOlxuICAgICAgcmV0dXJuIFwiTTMxOSA2MDIgVjAgSDQwMyBWNjAyIHZcIiArIG1pZEhlaWdodCArIFwiIHYxNzk5IEgwIHYtODQgSDMxOXpcXG5NTTMxOSA2MDIgVjAgSDQwMyBWNjAyIHZcIiArIG1pZEhlaWdodCArIFwiIHYxNzE1IEgzMTl6XCI7XG5cbiAgICBjYXNlIFwibGNlaWxcIjpcbiAgICAgIHJldHVybiBcIk00MDMgMTc1OSBWODQgSDY2NiBWMCBIMzE5IFYxNzU5IHZcIiArIG1pZEhlaWdodCArIFwiIHY2MDIgaDg0elxcbk00MDMgMTc1OSBWMCBIMzE5IFYxNzU5IHZcIiArIG1pZEhlaWdodCArIFwiIHY2MDIgaDg0elwiO1xuXG4gICAgY2FzZSBcInJjZWlsXCI6XG4gICAgICByZXR1cm4gXCJNMzQ3IDE3NTkgVjAgSDAgVjg0IEgyNjMgVjE3NTkgdlwiICsgbWlkSGVpZ2h0ICsgXCIgdjYwMiBoODR6XFxuTTM0NyAxNzU5IFYwIGgtODQgVjE3NTkgdlwiICsgbWlkSGVpZ2h0ICsgXCIgdjYwMiBoODR6XCI7XG5cbiAgICBjYXNlIFwibHBhcmVuXCI6XG4gICAgICByZXR1cm4gXCJNODYzLDljMCwtMiwtMiwtNSwtNiwtOWMwLDAsLTE3LDAsLTE3LDBjLTEyLjcsMCwtMTkuMywwLjMsLTIwLDFcXG5jLTUuMyw1LjMsLTEwLjMsMTEsLTE1LDE3Yy0yNDIuNywyOTQuNywtMzk1LjMsNjgyLC00NTgsMTE2MmMtMjEuMywxNjMuMywtMzMuMywzNDksXFxuLTM2LDU1NyBsMCxcIiArIChtaWRIZWlnaHQgKyA4NCkgKyBcImMwLjIsNiwwLDI2LDAsNjBjMiwxNTkuMywxMCwzMTAuNywyNCw0NTRjNTMuMyw1MjgsMjEwLFxcbjk0OS43LDQ3MCwxMjY1YzQuNyw2LDkuNywxMS43LDE1LDE3YzAuNywwLjcsNywxLDE5LDFjMCwwLDE4LDAsMTgsMGM0LC00LDYsLTcsNiwtOVxcbmMwLC0yLjcsLTMuMywtOC43LC0xMCwtMThjLTEzNS4zLC0xOTIuNywtMjM1LjUsLTQxNC4zLC0zMDAuNSwtNjY1Yy02NSwtMjUwLjcsLTEwMi41LFxcbi01NDQuNywtMTEyLjUsLTg4MmMtMiwtMTA0LC0zLC0xNjcsLTMsLTE4OVxcbmwwLC1cIiArIChtaWRIZWlnaHQgKyA5MikgKyBcImMwLC0xNjIuNyw1LjcsLTMxNCwxNywtNDU0YzIwLjcsLTI3Miw2My43LC01MTMsMTI5LC03MjNjNjUuMyxcXG4tMjEwLDE1NS4zLC0zOTYuMywyNzAsLTU1OWM2LjcsLTkuMywxMCwtMTUuMywxMCwtMTh6XCI7XG5cbiAgICBjYXNlIFwicnBhcmVuXCI6XG4gICAgICByZXR1cm4gXCJNNzYsMGMtMTYuNywwLC0yNSwzLC0yNSw5YzAsMiwyLDYuMyw2LDEzYzIxLjMsMjguNyw0Mi4zLDYwLjMsXFxuNjMsOTVjOTYuNywxNTYuNywxNzIuOCwzMzIuNSwyMjguNSw1MjcuNWM1NS43LDE5NSw5Mi44LDQxNi41LDExMS41LDY2NC41XFxuYzExLjMsMTM5LjMsMTcsMjkwLjcsMTcsNDU0YzAsMjgsMS43LDQzLDMuMyw0NWwwLFwiICsgKG1pZEhlaWdodCArIDkpICsgXCJcXG5jLTMsNCwtMy4zLDE2LjcsLTMuMywzOGMwLDE2MiwtNS43LDMxMy43LC0xNyw0NTVjLTE4LjcsMjQ4LC01NS44LDQ2OS4zLC0xMTEuNSw2NjRcXG5jLTU1LjcsMTk0LjcsLTEzMS44LDM3MC4zLC0yMjguNSw1MjdjLTIwLjcsMzQuNywtNDEuNyw2Ni4zLC02Myw5NWMtMiwzLjMsLTQsNywtNiwxMVxcbmMwLDcuMyw1LjcsMTEsMTcsMTFjMCwwLDExLDAsMTEsMGM5LjMsMCwxNC4zLC0wLjMsMTUsLTFjNS4zLC01LjMsMTAuMywtMTEsMTUsLTE3XFxuYzI0Mi43LC0yOTQuNywzOTUuMywtNjgxLjcsNDU4LC0xMTYxYzIxLjMsLTE2NC43LDMzLjMsLTM1MC43LDM2LC01NThcXG5sMCwtXCIgKyAobWlkSGVpZ2h0ICsgMTQ0KSArIFwiYy0yLC0xNTkuMywtMTAsLTMxMC43LC0yNCwtNDU0Yy01My4zLC01MjgsLTIxMCwtOTQ5LjcsXFxuLTQ3MCwtMTI2NWMtNC43LC02LC05LjcsLTExLjcsLTE1LC0xN2MtMC43LC0wLjcsLTYuNywtMSwtMTgsLTF6XCI7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgLy8gV2Ugc2hvdWxkIG5vdCBldmVyIGdldCBoZXJlLlxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5rbm93biBzdHJldGNoeSBkZWxpbWl0ZXIuXCIpO1xuICB9XG59O1xuOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL3RyZWUuanNcblxuXG4vKipcbiAqIFRoaXMgbm9kZSByZXByZXNlbnRzIGEgZG9jdW1lbnQgZnJhZ21lbnQsIHdoaWNoIGNvbnRhaW5zIGVsZW1lbnRzLCBidXQgd2hlblxuICogcGxhY2VkIGludG8gdGhlIERPTSBkb2Vzbid0IGhhdmUgYW55IHJlcHJlc2VudGF0aW9uIGl0c2VsZi4gSXQgb25seSBjb250YWluc1xuICogY2hpbGRyZW4gYW5kIGRvZXNuJ3QgaGF2ZSBhbnkgRE9NIG5vZGUgcHJvcGVydGllcy5cbiAqL1xuY2xhc3MgRG9jdW1lbnRGcmFnbWVudCB7XG4gIC8vIEh0bWxEb21Ob2RlXG4gIC8vIE5ldmVyIHVzZWQ7IG5lZWRlZCBmb3Igc2F0aXNmeWluZyBpbnRlcmZhY2UuXG4gIGNvbnN0cnVjdG9yKGNoaWxkcmVuKSB7XG4gICAgdGhpcy5jaGlsZHJlbiA9IHZvaWQgMDtcbiAgICB0aGlzLmNsYXNzZXMgPSB2b2lkIDA7XG4gICAgdGhpcy5oZWlnaHQgPSB2b2lkIDA7XG4gICAgdGhpcy5kZXB0aCA9IHZvaWQgMDtcbiAgICB0aGlzLm1heEZvbnRTaXplID0gdm9pZCAwO1xuICAgIHRoaXMuc3R5bGUgPSB2b2lkIDA7XG4gICAgdGhpcy5jaGlsZHJlbiA9IGNoaWxkcmVuO1xuICAgIHRoaXMuY2xhc3NlcyA9IFtdO1xuICAgIHRoaXMuaGVpZ2h0ID0gMDtcbiAgICB0aGlzLmRlcHRoID0gMDtcbiAgICB0aGlzLm1heEZvbnRTaXplID0gMDtcbiAgICB0aGlzLnN0eWxlID0ge307XG4gIH1cblxuICBoYXNDbGFzcyhjbGFzc05hbWUpIHtcbiAgICByZXR1cm4gdXRpbHMuY29udGFpbnModGhpcy5jbGFzc2VzLCBjbGFzc05hbWUpO1xuICB9XG4gIC8qKiBDb252ZXJ0IHRoZSBmcmFnbWVudCBpbnRvIGEgbm9kZS4gKi9cblxuXG4gIHRvTm9kZSgpIHtcbiAgICBjb25zdCBmcmFnID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICBmcmFnLmFwcGVuZENoaWxkKHRoaXMuY2hpbGRyZW5baV0udG9Ob2RlKCkpO1xuICAgIH1cblxuICAgIHJldHVybiBmcmFnO1xuICB9XG4gIC8qKiBDb252ZXJ0IHRoZSBmcmFnbWVudCBpbnRvIEhUTUwgbWFya3VwLiAqL1xuXG5cbiAgdG9NYXJrdXAoKSB7XG4gICAgbGV0IG1hcmt1cCA9IFwiXCI7IC8vIFNpbXBseSBjb25jYXRlbmF0ZSB0aGUgbWFya3VwIGZvciB0aGUgY2hpbGRyZW4gdG9nZXRoZXIuXG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgIG1hcmt1cCArPSB0aGlzLmNoaWxkcmVuW2ldLnRvTWFya3VwKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hcmt1cDtcbiAgfVxuICAvKipcbiAgICogQ29udmVydHMgdGhlIG1hdGggbm9kZSBpbnRvIGEgc3RyaW5nLCBzaW1pbGFyIHRvIGlubmVyVGV4dC4gQXBwbGllcyB0b1xuICAgKiBNYXRoRG9tTm9kZSdzIG9ubHkuXG4gICAqL1xuXG5cbiAgdG9UZXh0KCkge1xuICAgIC8vIFRvIGF2b2lkIHRoaXMsIHdlIHdvdWxkIHN1YmNsYXNzIGRvY3VtZW50RnJhZ21lbnQgc2VwYXJhdGVseSBmb3JcbiAgICAvLyBNYXRoTUwsIGJ1dCBwb2x5ZmlsbHMgZm9yIHN1YmNsYXNzaW5nIGlzIGV4cGVuc2l2ZSBwZXIgUFIgMTQ2OS5cbiAgICAvLyAkRmxvd0ZpeE1lOiBPbmx5IHdvcmtzIGZvciBDaGlsZFR5cGUgPSBNYXRoRG9tTm9kZS5cbiAgICBjb25zdCB0b1RleHQgPSBjaGlsZCA9PiBjaGlsZC50b1RleHQoKTtcblxuICAgIHJldHVybiB0aGlzLmNoaWxkcmVuLm1hcCh0b1RleHQpLmpvaW4oXCJcIik7XG4gIH1cblxufVxuOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2ZvbnRNZXRyaWNzRGF0YS5qc1xuLy8gVGhpcyBmaWxlIGlzIEdFTkVSQVRFRCBieSBidWlsZE1ldHJpY3Muc2guIERPIE5PVCBNT0RJRlkuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBmb250TWV0cmljc0RhdGEgPSAoe1xuICBcIkFNUy1SZWd1bGFyXCI6IHtcbiAgICBcIjMyXCI6IFswLCAwLCAwLCAwLCAwLjI1XSxcbiAgICBcIjY1XCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjcyMjIyXSxcbiAgICBcIjY2XCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjY3XCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjcyMjIyXSxcbiAgICBcIjY4XCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjcyMjIyXSxcbiAgICBcIjY5XCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjcwXCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjYxMTExXSxcbiAgICBcIjcxXCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjcyXCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjczXCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjM4ODg5XSxcbiAgICBcIjc0XCI6IFswLjE2NjY3LCAwLjY4ODg5LCAwLCAwLCAwLjVdLFxuICAgIFwiNzVcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiNzZcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiNzdcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuOTQ0NDVdLFxuICAgIFwiNzhcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNzIyMjJdLFxuICAgIFwiNzlcIjogWzAuMTY2NjcsIDAuNjg4ODksIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODBcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNjExMTFdLFxuICAgIFwiODFcIjogWzAuMTY2NjcsIDAuNjg4ODksIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODJcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNzIyMjJdLFxuICAgIFwiODNcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNTU1NTZdLFxuICAgIFwiODRcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiODVcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNzIyMjJdLFxuICAgIFwiODZcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNzIyMjJdLFxuICAgIFwiODdcIjogWzAsIDAuNjg4ODksIDAsIDAsIDEuMF0sXG4gICAgXCI4OFwiOiBbMCwgMC42ODg4OSwgMCwgMCwgMC43MjIyMl0sXG4gICAgXCI4OVwiOiBbMCwgMC42ODg4OSwgMCwgMCwgMC43MjIyMl0sXG4gICAgXCI5MFwiOiBbMCwgMC42ODg4OSwgMCwgMCwgMC42NjY2N10sXG4gICAgXCIxMDdcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNTU1NTZdLFxuICAgIFwiMTYwXCI6IFswLCAwLCAwLCAwLCAwLjI1XSxcbiAgICBcIjE2NVwiOiBbMCwgMC42NzUsIDAuMDI1LCAwLCAwLjc1XSxcbiAgICBcIjE3NFwiOiBbMC4xNTU1OSwgMC42OTIyNCwgMCwgMCwgMC45NDY2Nl0sXG4gICAgXCIyNDBcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNTU1NTZdLFxuICAgIFwiMjk1XCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjU0MDI4XSxcbiAgICBcIjcxMFwiOiBbMCwgMC44MjUsIDAsIDAsIDIuMzMzMzRdLFxuICAgIFwiNzMyXCI6IFswLCAwLjksIDAsIDAsIDIuMzMzMzRdLFxuICAgIFwiNzcwXCI6IFswLCAwLjgyNSwgMCwgMCwgMi4zMzMzNF0sXG4gICAgXCI3NzFcIjogWzAsIDAuOSwgMCwgMCwgMi4zMzMzNF0sXG4gICAgXCI5ODlcIjogWzAuMDgxNjcsIDAuNTgxNjcsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiMTAwOFwiOiBbMCwgMC40MzA1NiwgMC4wNDAyOCwgMCwgMC42NjY2N10sXG4gICAgXCI4MjQ1XCI6IFswLCAwLjU0OTg2LCAwLCAwLCAwLjI3NV0sXG4gICAgXCI4NDYzXCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjU0MDI4XSxcbiAgICBcIjg0ODdcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNzIyMjJdLFxuICAgIFwiODQ5OFwiOiBbMCwgMC42ODg4OSwgMCwgMCwgMC41NTU1Nl0sXG4gICAgXCI4NTAyXCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjg1MDNcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNDQ0NDVdLFxuICAgIFwiODUwNFwiOiBbMCwgMC42ODg4OSwgMCwgMCwgMC42NjY2N10sXG4gICAgXCI4NTEzXCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjYzODg5XSxcbiAgICBcIjg1OTJcIjogWy0wLjAzNTk4LCAwLjQ2NDAyLCAwLCAwLCAwLjVdLFxuICAgIFwiODU5NFwiOiBbLTAuMDM1OTgsIDAuNDY0MDIsIDAsIDAsIDAuNV0sXG4gICAgXCI4NjAyXCI6IFstMC4xMzMxMywgMC4zNjY4NywgMCwgMCwgMS4wXSxcbiAgICBcIjg2MDNcIjogWy0wLjEzMzEzLCAwLjM2Njg3LCAwLCAwLCAxLjBdLFxuICAgIFwiODYwNlwiOiBbMC4wMTM1NCwgMC41MjIzOSwgMCwgMCwgMS4wXSxcbiAgICBcIjg2MDhcIjogWzAuMDEzNTQsIDAuNTIyMzksIDAsIDAsIDEuMF0sXG4gICAgXCI4NjEwXCI6IFswLjAxMzU0LCAwLjUyMjM5LCAwLCAwLCAxLjExMTExXSxcbiAgICBcIjg2MTFcIjogWzAuMDEzNTQsIDAuNTIyMzksIDAsIDAsIDEuMTExMTFdLFxuICAgIFwiODYxOVwiOiBbMCwgMC41NDk4NiwgMCwgMCwgMS4wXSxcbiAgICBcIjg2MjBcIjogWzAsIDAuNTQ5ODYsIDAsIDAsIDEuMF0sXG4gICAgXCI4NjIxXCI6IFstMC4xMzMxMywgMC4zNzc4OCwgMCwgMCwgMS4zODg4OV0sXG4gICAgXCI4NjIyXCI6IFstMC4xMzMxMywgMC4zNjY4NywgMCwgMCwgMS4wXSxcbiAgICBcIjg2MjRcIjogWzAsIDAuNjkyMjQsIDAsIDAsIDAuNV0sXG4gICAgXCI4NjI1XCI6IFswLCAwLjY5MjI0LCAwLCAwLCAwLjVdLFxuICAgIFwiODYzMFwiOiBbMCwgMC40MzA1NiwgMCwgMCwgMS4wXSxcbiAgICBcIjg2MzFcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDEuMF0sXG4gICAgXCI4NjM0XCI6IFswLjA4MTk4LCAwLjU4MTk4LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg2MzVcIjogWzAuMDgxOTgsIDAuNTgxOTgsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODYzOFwiOiBbMC4xOTQ0NCwgMC42OTIyNCwgMCwgMCwgMC40MTY2N10sXG4gICAgXCI4NjM5XCI6IFswLjE5NDQ0LCAwLjY5MjI0LCAwLCAwLCAwLjQxNjY3XSxcbiAgICBcIjg2NDJcIjogWzAuMTk0NDQsIDAuNjkyMjQsIDAsIDAsIDAuNDE2NjddLFxuICAgIFwiODY0M1wiOiBbMC4xOTQ0NCwgMC42OTIyNCwgMCwgMCwgMC40MTY2N10sXG4gICAgXCI4NjQ0XCI6IFswLjE4MDgsIDAuNjc1LCAwLCAwLCAxLjBdLFxuICAgIFwiODY0NlwiOiBbMC4xODA4LCAwLjY3NSwgMCwgMCwgMS4wXSxcbiAgICBcIjg2NDdcIjogWzAuMTgwOCwgMC42NzUsIDAsIDAsIDEuMF0sXG4gICAgXCI4NjQ4XCI6IFswLjE5NDQ0LCAwLjY5MjI0LCAwLCAwLCAwLjgzMzM0XSxcbiAgICBcIjg2NDlcIjogWzAuMTgwOCwgMC42NzUsIDAsIDAsIDEuMF0sXG4gICAgXCI4NjUwXCI6IFswLjE5NDQ0LCAwLjY5MjI0LCAwLCAwLCAwLjgzMzM0XSxcbiAgICBcIjg2NTFcIjogWzAuMDEzNTQsIDAuNTIyMzksIDAsIDAsIDEuMF0sXG4gICAgXCI4NjUyXCI6IFswLjAxMzU0LCAwLjUyMjM5LCAwLCAwLCAxLjBdLFxuICAgIFwiODY1M1wiOiBbLTAuMTMzMTMsIDAuMzY2ODcsIDAsIDAsIDEuMF0sXG4gICAgXCI4NjU0XCI6IFstMC4xMzMxMywgMC4zNjY4NywgMCwgMCwgMS4wXSxcbiAgICBcIjg2NTVcIjogWy0wLjEzMzEzLCAwLjM2Njg3LCAwLCAwLCAxLjBdLFxuICAgIFwiODY2NlwiOiBbMC4xMzY2NywgMC42MzY2NywgMCwgMCwgMS4wXSxcbiAgICBcIjg2NjdcIjogWzAuMTM2NjcsIDAuNjM2NjcsIDAsIDAsIDEuMF0sXG4gICAgXCI4NjY5XCI6IFstMC4xMzMxMywgMC4zNzc4OCwgMCwgMCwgMS4wXSxcbiAgICBcIjg2NzJcIjogWy0wLjA2NCwgMC40MzcsIDAsIDAsIDEuMzM0XSxcbiAgICBcIjg2NzRcIjogWy0wLjA2NCwgMC40MzcsIDAsIDAsIDEuMzM0XSxcbiAgICBcIjg3MDVcIjogWzAsIDAuODI1LCAwLCAwLCAwLjVdLFxuICAgIFwiODcwOFwiOiBbMCwgMC42ODg4OSwgMCwgMCwgMC41NTU1Nl0sXG4gICAgXCI4NzA5XCI6IFswLjA4MTY3LCAwLjU4MTY3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg3MTdcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuNDI5MTddLFxuICAgIFwiODcyMlwiOiBbLTAuMDM1OTgsIDAuNDY0MDIsIDAsIDAsIDAuNV0sXG4gICAgXCI4NzI0XCI6IFswLjA4MTk4LCAwLjY5MjI0LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg3MjZcIjogWzAuMDgxNjcsIDAuNTgxNjcsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODczM1wiOiBbMCwgMC42OTIyNCwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4NzM2XCI6IFswLCAwLjY5MjI0LCAwLCAwLCAwLjcyMjIyXSxcbiAgICBcIjg3MzdcIjogWzAsIDAuNjkyMjQsIDAsIDAsIDAuNzIyMjJdLFxuICAgIFwiODczOFwiOiBbMC4wMzUxNywgMC41MjIzOSwgMCwgMCwgMC43MjIyMl0sXG4gICAgXCI4NzM5XCI6IFswLjA4MTY3LCAwLjU4MTY3LCAwLCAwLCAwLjIyMjIyXSxcbiAgICBcIjg3NDBcIjogWzAuMjUxNDIsIDAuNzQxMTEsIDAsIDAsIDAuMjc3NzhdLFxuICAgIFwiODc0MVwiOiBbMC4wODE2NywgMC41ODE2NywgMCwgMCwgMC4zODg4OV0sXG4gICAgXCI4NzQyXCI6IFswLjI1MTQyLCAwLjc0MTExLCAwLCAwLCAwLjVdLFxuICAgIFwiODc1NlwiOiBbMCwgMC42OTIyNCwgMCwgMCwgMC42NjY2N10sXG4gICAgXCI4NzU3XCI6IFswLCAwLjY5MjI0LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjg3NjRcIjogWy0wLjEzMzEzLCAwLjM2Njg3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg3NjVcIjogWy0wLjEzMzEzLCAwLjM3Nzg4LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg3NjlcIjogWy0wLjEzMzEzLCAwLjM2Njg3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg3NzBcIjogWy0wLjAzNjI1LCAwLjQ2Mzc1LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg3NzRcIjogWzAuMzAyNzQsIDAuNzkzODMsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODc3NlwiOiBbLTAuMDE2ODgsIDAuNDgzMTIsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODc3OFwiOiBbMC4wODE2NywgMC41ODE2NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4NzgyXCI6IFswLjA2MDYyLCAwLjU0OTg2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg3ODNcIjogWzAuMDYwNjIsIDAuNTQ5ODYsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODc4NVwiOiBbMC4wODE5OCwgMC41ODE5OCwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4Nzg2XCI6IFswLjA4MTk4LCAwLjU4MTk4LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg3ODdcIjogWzAuMDgxOTgsIDAuNTgxOTgsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODc5MFwiOiBbMCwgMC42OTIyNCwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4NzkxXCI6IFswLjIyOTU4LCAwLjcyOTU4LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg3OTZcIjogWzAuMDgxOTgsIDAuOTE2NjcsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODgwNlwiOiBbMC4yNTU4MywgMC43NTU4MywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODA3XCI6IFswLjI1NTgzLCAwLjc1NTgzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4MDhcIjogWzAuMjUxNDIsIDAuNzU3MjYsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODgwOVwiOiBbMC4yNTE0MiwgMC43NTcyNiwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODEyXCI6IFswLjI1NTgzLCAwLjc1NTgzLCAwLCAwLCAwLjVdLFxuICAgIFwiODgxNFwiOiBbMC4yMDU3NiwgMC43MDU3NiwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODE1XCI6IFswLjIwNTc2LCAwLjcwNTc2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4MTZcIjogWzAuMzAyNzQsIDAuNzkzODMsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODgxN1wiOiBbMC4zMDI3NCwgMC43OTM4MywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODE4XCI6IFswLjIyOTU4LCAwLjcyOTU4LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4MTlcIjogWzAuMjI5NTgsIDAuNzI5NTgsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODgyMlwiOiBbMC4xODA4LCAwLjY3NSwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODIzXCI6IFswLjE4MDgsIDAuNjc1LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4MjhcIjogWzAuMTM2NjcsIDAuNjM2NjcsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODgyOVwiOiBbMC4xMzY2NywgMC42MzY2NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODMwXCI6IFswLjIyOTU4LCAwLjcyOTU4LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4MzFcIjogWzAuMjI5NTgsIDAuNzI5NTgsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODgzMlwiOiBbMC4yMDU3NiwgMC43MDU3NiwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODMzXCI6IFswLjIwNTc2LCAwLjcwNTc2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4NDBcIjogWzAuMzAyNzQsIDAuNzkzODMsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODg0MVwiOiBbMC4zMDI3NCwgMC43OTM4MywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODQyXCI6IFswLjEzNTk3LCAwLjYzNTk3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4NDNcIjogWzAuMTM1OTcsIDAuNjM1OTcsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODg0N1wiOiBbMC4wMzUxNywgMC41NDk4NiwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODQ4XCI6IFswLjAzNTE3LCAwLjU0OTg2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4NThcIjogWzAuMDgxOTgsIDAuNTgxOTgsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODg1OVwiOiBbMC4wODE5OCwgMC41ODE5OCwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODYxXCI6IFswLjA4MTk4LCAwLjU4MTk4LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4NjJcIjogWzAsIDAuNjc1LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4NjNcIjogWzAsIDAuNjc1LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4NjRcIjogWzAsIDAuNjc1LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4NjVcIjogWzAsIDAuNjc1LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4NzJcIjogWzAsIDAuNjkyMjQsIDAsIDAsIDAuNjExMTFdLFxuICAgIFwiODg3M1wiOiBbMCwgMC42OTIyNCwgMCwgMCwgMC43MjIyMl0sXG4gICAgXCI4ODc0XCI6IFswLCAwLjY5MjI0LCAwLCAwLCAwLjg4ODg5XSxcbiAgICBcIjg4NzZcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNjExMTFdLFxuICAgIFwiODg3N1wiOiBbMCwgMC42ODg4OSwgMCwgMCwgMC42MTExMV0sXG4gICAgXCI4ODc4XCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjcyMjIyXSxcbiAgICBcIjg4NzlcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNzIyMjJdLFxuICAgIFwiODg4MlwiOiBbMC4wMzUxNywgMC41NDk4NiwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODgzXCI6IFswLjAzNTE3LCAwLjU0OTg2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4ODRcIjogWzAuMTM2NjcsIDAuNjM2NjcsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODg4NVwiOiBbMC4xMzY2NywgMC42MzY2NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODg4XCI6IFswLCAwLjU0OTg2LCAwLCAwLCAxLjExMTExXSxcbiAgICBcIjg4OTBcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAsIDAsIDAuNTU1NTZdLFxuICAgIFwiODg5MVwiOiBbMC4xOTQ0NCwgMC42OTIyNCwgMCwgMCwgMC42MTExMV0sXG4gICAgXCI4ODkyXCI6IFswLjE5NDQ0LCAwLjY5MjI0LCAwLCAwLCAwLjYxMTExXSxcbiAgICBcIjg5MDFcIjogWzAsIDAuNTQ5ODYsIDAsIDAsIDAuMjc3NzhdLFxuICAgIFwiODkwM1wiOiBbMC4wODE2NywgMC41ODE2NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4OTA1XCI6IFswLjA4MTY3LCAwLjU4MTY3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg5MDZcIjogWzAuMDgxNjcsIDAuNTgxNjcsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODkwN1wiOiBbMCwgMC42OTIyNCwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4OTA4XCI6IFswLCAwLjY5MjI0LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg5MDlcIjogWy0wLjAzNTk4LCAwLjQ2NDAyLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg5MTBcIjogWzAsIDAuNTQ5ODYsIDAsIDAsIDAuNzYwNDJdLFxuICAgIFwiODkxMVwiOiBbMCwgMC41NDk4NiwgMCwgMCwgMC43NjA0Ml0sXG4gICAgXCI4OTEyXCI6IFswLjAzNTE3LCAwLjU0OTg2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg5MTNcIjogWzAuMDM1MTcsIDAuNTQ5ODYsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODkxNFwiOiBbMCwgMC41NDk4NiwgMCwgMCwgMC42NjY2N10sXG4gICAgXCI4OTE1XCI6IFswLCAwLjU0OTg2LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjg5MTZcIjogWzAsIDAuNjkyMjQsIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiODkxOFwiOiBbMC4wMzkxLCAwLjUzOTEsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODkxOVwiOiBbMC4wMzkxLCAwLjUzOTEsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODkyMFwiOiBbMC4wMzUxNywgMC41NDk4NiwgMCwgMCwgMS4zMzMzNF0sXG4gICAgXCI4OTIxXCI6IFswLjAzNTE3LCAwLjU0OTg2LCAwLCAwLCAxLjMzMzM0XSxcbiAgICBcIjg5MjJcIjogWzAuMzg1NjksIDAuODg1NjksIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODkyM1wiOiBbMC4zODU2OSwgMC44ODU2OSwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4OTI2XCI6IFswLjEzNjY3LCAwLjYzNjY3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg5MjdcIjogWzAuMTM2NjcsIDAuNjM2NjcsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODkyOFwiOiBbMC4zMDI3NCwgMC43OTM4MywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4OTI5XCI6IFswLjMwMjc0LCAwLjc5MzgzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg5MzRcIjogWzAuMjMyMjIsIDAuNzQxMTEsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODkzNVwiOiBbMC4yMzIyMiwgMC43NDExMSwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4OTM2XCI6IFswLjIzMjIyLCAwLjc0MTExLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg5MzdcIjogWzAuMjMyMjIsIDAuNzQxMTEsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODkzOFwiOiBbMC4yMDU3NiwgMC43MDU3NiwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4OTM5XCI6IFswLjIwNTc2LCAwLjcwNTc2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg5NDBcIjogWzAuMzAyNzQsIDAuNzkzODMsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODk0MVwiOiBbMC4zMDI3NCwgMC43OTM4MywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4OTk0XCI6IFswLjE5NDQ0LCAwLjY5MjI0LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg5OTVcIjogWzAuMTk0NDQsIDAuNjkyMjQsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiOTQxNlwiOiBbMC4xNTU1OSwgMC42OTIyNCwgMCwgMCwgMC45MDIyMl0sXG4gICAgXCI5NDg0XCI6IFswLCAwLjY5MjI0LCAwLCAwLCAwLjVdLFxuICAgIFwiOTQ4OFwiOiBbMCwgMC42OTIyNCwgMCwgMCwgMC41XSxcbiAgICBcIjk0OTJcIjogWzAsIDAuMzc3ODgsIDAsIDAsIDAuNV0sXG4gICAgXCI5NDk2XCI6IFswLCAwLjM3Nzg4LCAwLCAwLCAwLjVdLFxuICAgIFwiOTU4NVwiOiBbMC4xOTQ0NCwgMC42ODg4OSwgMCwgMCwgMC44ODg4OV0sXG4gICAgXCI5NTg2XCI6IFswLjE5NDQ0LCAwLjc0MTExLCAwLCAwLCAwLjg4ODg5XSxcbiAgICBcIjk2MzJcIjogWzAsIDAuNjc1LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjk2MzNcIjogWzAsIDAuNjc1LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjk2NTBcIjogWzAsIDAuNTQ5ODYsIDAsIDAsIDAuNzIyMjJdLFxuICAgIFwiOTY1MVwiOiBbMCwgMC41NDk4NiwgMCwgMCwgMC43MjIyMl0sXG4gICAgXCI5NjU0XCI6IFswLjAzNTE3LCAwLjU0OTg2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjk2NjBcIjogWzAsIDAuNTQ5ODYsIDAsIDAsIDAuNzIyMjJdLFxuICAgIFwiOTY2MVwiOiBbMCwgMC41NDk4NiwgMCwgMCwgMC43MjIyMl0sXG4gICAgXCI5NjY0XCI6IFswLjAzNTE3LCAwLjU0OTg2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjk2NzRcIjogWzAuMTExMTEsIDAuNjkyMjQsIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiOTczM1wiOiBbMC4xOTQ0NCwgMC42OTIyNCwgMCwgMCwgMC45NDQ0NV0sXG4gICAgXCIxMDAwM1wiOiBbMCwgMC42OTIyNCwgMCwgMCwgMC44MzMzNF0sXG4gICAgXCIxMDAxNlwiOiBbMCwgMC42OTIyNCwgMCwgMCwgMC44MzMzNF0sXG4gICAgXCIxMDczMVwiOiBbMC4xMTExMSwgMC42OTIyNCwgMCwgMCwgMC42NjY2N10sXG4gICAgXCIxMDg0NlwiOiBbMC4xOTQ0NCwgMC43NTU4MywgMCwgMCwgMC42MTExMV0sXG4gICAgXCIxMDg3N1wiOiBbMC4xMzY2NywgMC42MzY2NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCIxMDg3OFwiOiBbMC4xMzY2NywgMC42MzY2NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCIxMDg4NVwiOiBbMC4yNTU4MywgMC43NTU4MywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCIxMDg4NlwiOiBbMC4yNTU4MywgMC43NTU4MywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCIxMDg4N1wiOiBbMC4xMzU5NywgMC42MzU5NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCIxMDg4OFwiOiBbMC4xMzU5NywgMC42MzU5NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCIxMDg4OVwiOiBbMC4yNjE2NywgMC43NTcyNiwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCIxMDg5MFwiOiBbMC4yNjE2NywgMC43NTcyNiwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCIxMDg5MVwiOiBbMC40ODI1NiwgMC45ODI1NiwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCIxMDg5MlwiOiBbMC40ODI1NiwgMC45ODI1NiwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCIxMDkwMVwiOiBbMC4xMzY2NywgMC42MzY2NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCIxMDkwMlwiOiBbMC4xMzY2NywgMC42MzY2NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCIxMDkzM1wiOiBbMC4yNTE0MiwgMC43NTcyNiwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCIxMDkzNFwiOiBbMC4yNTE0MiwgMC43NTcyNiwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCIxMDkzNVwiOiBbMC4yNjE2NywgMC43NTcyNiwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCIxMDkzNlwiOiBbMC4yNjE2NywgMC43NTcyNiwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCIxMDkzN1wiOiBbMC4yNjE2NywgMC43NTcyNiwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCIxMDkzOFwiOiBbMC4yNjE2NywgMC43NTcyNiwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCIxMDk0OVwiOiBbMC4yNTU4MywgMC43NTU4MywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCIxMDk1MFwiOiBbMC4yNTU4MywgMC43NTU4MywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCIxMDk1NVwiOiBbMC4yODQ4MSwgMC43OTM4MywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCIxMDk1NlwiOiBbMC4yODQ4MSwgMC43OTM4MywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI1NzM1MFwiOiBbMC4wODE2NywgMC41ODE2NywgMCwgMCwgMC4yMjIyMl0sXG4gICAgXCI1NzM1MVwiOiBbMC4wODE2NywgMC41ODE2NywgMCwgMCwgMC4zODg4OV0sXG4gICAgXCI1NzM1MlwiOiBbMC4wODE2NywgMC41ODE2NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI1NzM1M1wiOiBbMCwgMC40MzA1NiwgMC4wNDAyOCwgMCwgMC42NjY2N10sXG4gICAgXCI1NzM1NlwiOiBbMC4yNTE0MiwgMC43NTcyNiwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI1NzM1N1wiOiBbMC4yNTE0MiwgMC43NTcyNiwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI1NzM1OFwiOiBbMC40MTk1MSwgMC45MTk1MSwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI1NzM1OVwiOiBbMC4zMDI3NCwgMC43OTM4MywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI1NzM2MFwiOiBbMC4zMDI3NCwgMC43OTM4MywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI1NzM2MVwiOiBbMC40MTk1MSwgMC45MTk1MSwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI1NzM2NlwiOiBbMC4yNTE0MiwgMC43NTcyNiwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI1NzM2N1wiOiBbMC4yNTE0MiwgMC43NTcyNiwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI1NzM2OFwiOiBbMC4yNTE0MiwgMC43NTcyNiwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI1NzM2OVwiOiBbMC4yNTE0MiwgMC43NTcyNiwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI1NzM3MFwiOiBbMC4xMzU5NywgMC42MzU5NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI1NzM3MVwiOiBbMC4xMzU5NywgMC42MzU5NywgMCwgMCwgMC43Nzc3OF1cbiAgfSxcbiAgXCJDYWxpZ3JhcGhpYy1SZWd1bGFyXCI6IHtcbiAgICBcIjMyXCI6IFswLCAwLCAwLCAwLCAwLjI1XSxcbiAgICBcIjY1XCI6IFswLCAwLjY4MzMzLCAwLCAwLjE5NDQ1LCAwLjc5ODQ3XSxcbiAgICBcIjY2XCI6IFswLCAwLjY4MzMzLCAwLjAzMDQxLCAwLjEzODg5LCAwLjY1NjgxXSxcbiAgICBcIjY3XCI6IFswLCAwLjY4MzMzLCAwLjA1ODM0LCAwLjEzODg5LCAwLjUyNjUzXSxcbiAgICBcIjY4XCI6IFswLCAwLjY4MzMzLCAwLjAyNzc4LCAwLjA4MzM0LCAwLjc3MTM5XSxcbiAgICBcIjY5XCI6IFswLCAwLjY4MzMzLCAwLjA4OTQ0LCAwLjExMTExLCAwLjUyNzc4XSxcbiAgICBcIjcwXCI6IFswLCAwLjY4MzMzLCAwLjA5OTMxLCAwLjExMTExLCAwLjcxODc1XSxcbiAgICBcIjcxXCI6IFswLjA5NzIyLCAwLjY4MzMzLCAwLjA1OTMsIDAuMTExMTEsIDAuNTk0ODddLFxuICAgIFwiNzJcIjogWzAsIDAuNjgzMzMsIDAuMDA5NjUsIDAuMTExMTEsIDAuODQ0NTJdLFxuICAgIFwiNzNcIjogWzAsIDAuNjgzMzMsIDAuMDczODIsIDAsIDAuNTQ0NTJdLFxuICAgIFwiNzRcIjogWzAuMDk3MjIsIDAuNjgzMzMsIDAuMTg0NzIsIDAuMTY2NjcsIDAuNjc3NzhdLFxuICAgIFwiNzVcIjogWzAsIDAuNjgzMzMsIDAuMDE0NDUsIDAuMDU1NTYsIDAuNzYxOTVdLFxuICAgIFwiNzZcIjogWzAsIDAuNjgzMzMsIDAsIDAuMTM4ODksIDAuNjg5NzJdLFxuICAgIFwiNzdcIjogWzAsIDAuNjgzMzMsIDAsIDAuMTM4ODksIDEuMjAwOV0sXG4gICAgXCI3OFwiOiBbMCwgMC42ODMzMywgMC4xNDczNiwgMC4wODMzNCwgMC44MjA0OV0sXG4gICAgXCI3OVwiOiBbMCwgMC42ODMzMywgMC4wMjc3OCwgMC4xMTExMSwgMC43OTYxMV0sXG4gICAgXCI4MFwiOiBbMCwgMC42ODMzMywgMC4wODIyMiwgMC4wODMzNCwgMC42OTU1Nl0sXG4gICAgXCI4MVwiOiBbMC4wOTcyMiwgMC42ODMzMywgMCwgMC4xMTExMSwgMC44MTY2N10sXG4gICAgXCI4MlwiOiBbMCwgMC42ODMzMywgMCwgMC4wODMzNCwgMC44NDc1XSxcbiAgICBcIjgzXCI6IFswLCAwLjY4MzMzLCAwLjA3NSwgMC4xMzg4OSwgMC42MDU1Nl0sXG4gICAgXCI4NFwiOiBbMCwgMC42ODMzMywgMC4yNTQxNywgMCwgMC41NDQ2NF0sXG4gICAgXCI4NVwiOiBbMCwgMC42ODMzMywgMC4wOTkzMSwgMC4wODMzNCwgMC42MjU4M10sXG4gICAgXCI4NlwiOiBbMCwgMC42ODMzMywgMC4wODIyMiwgMCwgMC42MTI3OF0sXG4gICAgXCI4N1wiOiBbMCwgMC42ODMzMywgMC4wODIyMiwgMC4wODMzNCwgMC45ODc3OF0sXG4gICAgXCI4OFwiOiBbMCwgMC42ODMzMywgMC4xNDY0MywgMC4xMzg4OSwgMC43MTMzXSxcbiAgICBcIjg5XCI6IFswLjA5NzIyLCAwLjY4MzMzLCAwLjA4MjIyLCAwLjA4MzM0LCAwLjY2ODM0XSxcbiAgICBcIjkwXCI6IFswLCAwLjY4MzMzLCAwLjA3OTQ0LCAwLjEzODg5LCAwLjcyNDczXSxcbiAgICBcIjE2MFwiOiBbMCwgMCwgMCwgMCwgMC4yNV1cbiAgfSxcbiAgXCJGcmFrdHVyLVJlZ3VsYXJcIjoge1xuICAgIFwiMzJcIjogWzAsIDAsIDAsIDAsIDAuMjVdLFxuICAgIFwiMzNcIjogWzAsIDAuNjkxNDEsIDAsIDAsIDAuMjk1NzRdLFxuICAgIFwiMzRcIjogWzAsIDAuNjkxNDEsIDAsIDAsIDAuMjE0NzFdLFxuICAgIFwiMzhcIjogWzAsIDAuNjkxNDEsIDAsIDAsIDAuNzM3ODZdLFxuICAgIFwiMzlcIjogWzAsIDAuNjkxNDEsIDAsIDAsIDAuMjEyMDFdLFxuICAgIFwiNDBcIjogWzAuMjQ5ODIsIDAuNzQ5NDcsIDAsIDAsIDAuMzg4NjVdLFxuICAgIFwiNDFcIjogWzAuMjQ5ODIsIDAuNzQ5NDcsIDAsIDAsIDAuMzg4NjVdLFxuICAgIFwiNDJcIjogWzAsIDAuNjIxMTksIDAsIDAsIDAuMjc3NjRdLFxuICAgIFwiNDNcIjogWzAuMDgzMTksIDAuNTgyODMsIDAsIDAsIDAuNzU2MjNdLFxuICAgIFwiNDRcIjogWzAsIDAuMTA4MDMsIDAsIDAsIDAuMjc3NjRdLFxuICAgIFwiNDVcIjogWzAuMDgzMTksIDAuNTgyODMsIDAsIDAsIDAuNzU2MjNdLFxuICAgIFwiNDZcIjogWzAsIDAuMTA4MDMsIDAsIDAsIDAuMjc3NjRdLFxuICAgIFwiNDdcIjogWzAuMjQ5ODIsIDAuNzQ5NDcsIDAsIDAsIDAuNTAxODFdLFxuICAgIFwiNDhcIjogWzAsIDAuNDc1MzQsIDAsIDAsIDAuNTAxODFdLFxuICAgIFwiNDlcIjogWzAsIDAuNDc1MzQsIDAsIDAsIDAuNTAxODFdLFxuICAgIFwiNTBcIjogWzAsIDAuNDc1MzQsIDAsIDAsIDAuNTAxODFdLFxuICAgIFwiNTFcIjogWzAuMTg5MDYsIDAuNDc1MzQsIDAsIDAsIDAuNTAxODFdLFxuICAgIFwiNTJcIjogWzAuMTg5MDYsIDAuNDc1MzQsIDAsIDAsIDAuNTAxODFdLFxuICAgIFwiNTNcIjogWzAuMTg5MDYsIDAuNDc1MzQsIDAsIDAsIDAuNTAxODFdLFxuICAgIFwiNTRcIjogWzAsIDAuNjkxNDEsIDAsIDAsIDAuNTAxODFdLFxuICAgIFwiNTVcIjogWzAuMTg5MDYsIDAuNDc1MzQsIDAsIDAsIDAuNTAxODFdLFxuICAgIFwiNTZcIjogWzAsIDAuNjkxNDEsIDAsIDAsIDAuNTAxODFdLFxuICAgIFwiNTdcIjogWzAuMTg5MDYsIDAuNDc1MzQsIDAsIDAsIDAuNTAxODFdLFxuICAgIFwiNThcIjogWzAsIDAuNDc1MzQsIDAsIDAsIDAuMjE2MDZdLFxuICAgIFwiNTlcIjogWzAuMTI2MDQsIDAuNDc1MzQsIDAsIDAsIDAuMjE2MDZdLFxuICAgIFwiNjFcIjogWy0wLjEzMDk5LCAwLjM2ODY2LCAwLCAwLCAwLjc1NjIzXSxcbiAgICBcIjYzXCI6IFswLCAwLjY5MTQxLCAwLCAwLCAwLjM2MjQ1XSxcbiAgICBcIjY1XCI6IFswLCAwLjY5MTQxLCAwLCAwLCAwLjcxNzZdLFxuICAgIFwiNjZcIjogWzAsIDAuNjkxNDEsIDAsIDAsIDAuODgzOTddLFxuICAgIFwiNjdcIjogWzAsIDAuNjkxNDEsIDAsIDAsIDAuNjEyNTRdLFxuICAgIFwiNjhcIjogWzAsIDAuNjkxNDEsIDAsIDAsIDAuODMxNThdLFxuICAgIFwiNjlcIjogWzAsIDAuNjkxNDEsIDAsIDAsIDAuNjYyNzhdLFxuICAgIFwiNzBcIjogWzAuMTI2MDQsIDAuNjkxNDEsIDAsIDAsIDAuNjExMTldLFxuICAgIFwiNzFcIjogWzAsIDAuNjkxNDEsIDAsIDAsIDAuNzg1MzldLFxuICAgIFwiNzJcIjogWzAuMDYzMDIsIDAuNjkxNDEsIDAsIDAsIDAuNzIwM10sXG4gICAgXCI3M1wiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC41NTQ0OF0sXG4gICAgXCI3NFwiOiBbMC4xMjYwNCwgMC42OTE0MSwgMCwgMCwgMC41NTIzMV0sXG4gICAgXCI3NVwiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC42Njg0NV0sXG4gICAgXCI3NlwiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC42NjYwMl0sXG4gICAgXCI3N1wiOiBbMCwgMC42OTE0MSwgMCwgMCwgMS4wNDk1M10sXG4gICAgXCI3OFwiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC44MzIxMl0sXG4gICAgXCI3OVwiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC44MjY5OV0sXG4gICAgXCI4MFwiOiBbMC4xODkwNiwgMC42OTE0MSwgMCwgMCwgMC44Mjc1M10sXG4gICAgXCI4MVwiOiBbMC4wMzc4MSwgMC42OTE0MSwgMCwgMCwgMC44MjY5OV0sXG4gICAgXCI4MlwiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC44MjgwN10sXG4gICAgXCI4M1wiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC44Mjg2MV0sXG4gICAgXCI4NFwiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC42Njg5OV0sXG4gICAgXCI4NVwiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC42NDU3Nl0sXG4gICAgXCI4NlwiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC44MzEzMV0sXG4gICAgXCI4N1wiOiBbMCwgMC42OTE0MSwgMCwgMCwgMS4wNDYwMl0sXG4gICAgXCI4OFwiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC43MTkyMl0sXG4gICAgXCI4OVwiOiBbMC4xODkwNiwgMC42OTE0MSwgMCwgMCwgMC44MzI5M10sXG4gICAgXCI5MFwiOiBbMC4xMjYwNCwgMC42OTE0MSwgMCwgMCwgMC42MDIwMV0sXG4gICAgXCI5MVwiOiBbMC4yNDk4MiwgMC43NDk0NywgMCwgMCwgMC4yNzc2NF0sXG4gICAgXCI5M1wiOiBbMC4yNDk4MiwgMC43NDk0NywgMCwgMCwgMC4yNzc2NF0sXG4gICAgXCI5NFwiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC40OTk2NV0sXG4gICAgXCI5N1wiOiBbMCwgMC40NzUzNCwgMCwgMCwgMC41MDA0Nl0sXG4gICAgXCI5OFwiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC41MTMxNV0sXG4gICAgXCI5OVwiOiBbMCwgMC40NzUzNCwgMCwgMCwgMC4zODk0Nl0sXG4gICAgXCIxMDBcIjogWzAsIDAuNjIxMTksIDAsIDAsIDAuNDk4NTddLFxuICAgIFwiMTAxXCI6IFswLCAwLjQ3NTM0LCAwLCAwLCAwLjQwMDUzXSxcbiAgICBcIjEwMlwiOiBbMC4xODkwNiwgMC42OTE0MSwgMCwgMCwgMC4zMjYyNl0sXG4gICAgXCIxMDNcIjogWzAuMTg5MDYsIDAuNDc1MzQsIDAsIDAsIDAuNTAzN10sXG4gICAgXCIxMDRcIjogWzAuMTg5MDYsIDAuNjkxNDEsIDAsIDAsIDAuNTIxMjZdLFxuICAgIFwiMTA1XCI6IFswLCAwLjY5MTQxLCAwLCAwLCAwLjI3ODk5XSxcbiAgICBcIjEwNlwiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC4yODA4OF0sXG4gICAgXCIxMDdcIjogWzAsIDAuNjkxNDEsIDAsIDAsIDAuMzg5NDZdLFxuICAgIFwiMTA4XCI6IFswLCAwLjY5MTQxLCAwLCAwLCAwLjI3OTUzXSxcbiAgICBcIjEwOVwiOiBbMCwgMC40NzUzNCwgMCwgMCwgMC43NjY3Nl0sXG4gICAgXCIxMTBcIjogWzAsIDAuNDc1MzQsIDAsIDAsIDAuNTI2NjZdLFxuICAgIFwiMTExXCI6IFswLCAwLjQ3NTM0LCAwLCAwLCAwLjQ4ODg1XSxcbiAgICBcIjExMlwiOiBbMC4xODkwNiwgMC41MjM5NiwgMCwgMCwgMC41MDA0Nl0sXG4gICAgXCIxMTNcIjogWzAuMTg5MDYsIDAuNDc1MzQsIDAsIDAsIDAuNDg5MTJdLFxuICAgIFwiMTE0XCI6IFswLCAwLjQ3NTM0LCAwLCAwLCAwLjM4OTE5XSxcbiAgICBcIjExNVwiOiBbMCwgMC40NzUzNCwgMCwgMCwgMC40NDI2Nl0sXG4gICAgXCIxMTZcIjogWzAsIDAuNjIxMTksIDAsIDAsIDAuMzMzMDFdLFxuICAgIFwiMTE3XCI6IFswLCAwLjQ3NTM0LCAwLCAwLCAwLjUxNzJdLFxuICAgIFwiMTE4XCI6IFswLCAwLjUyMzk2LCAwLCAwLCAwLjUxMThdLFxuICAgIFwiMTE5XCI6IFswLCAwLjUyMzk2LCAwLCAwLCAwLjc3MzUxXSxcbiAgICBcIjEyMFwiOiBbMC4xODkwNiwgMC40NzUzNCwgMCwgMCwgMC4zODg2NV0sXG4gICAgXCIxMjFcIjogWzAuMTg5MDYsIDAuNDc1MzQsIDAsIDAsIDAuNDk4ODRdLFxuICAgIFwiMTIyXCI6IFswLjE4OTA2LCAwLjQ3NTM0LCAwLCAwLCAwLjM5MDU0XSxcbiAgICBcIjE2MFwiOiBbMCwgMCwgMCwgMCwgMC4yNV0sXG4gICAgXCI4MjE2XCI6IFswLCAwLjY5MTQxLCAwLCAwLCAwLjIxNDcxXSxcbiAgICBcIjgyMTdcIjogWzAsIDAuNjkxNDEsIDAsIDAsIDAuMjE0NzFdLFxuICAgIFwiNTgxMTJcIjogWzAsIDAuNjIxMTksIDAsIDAsIDAuNDk3NDldLFxuICAgIFwiNTgxMTNcIjogWzAsIDAuNjIxMTksIDAsIDAsIDAuNDk4M10sXG4gICAgXCI1ODExNFwiOiBbMC4xODkwNiwgMC42OTE0MSwgMCwgMCwgMC4zMzMyOF0sXG4gICAgXCI1ODExNVwiOiBbMC4xODkwNiwgMC42OTE0MSwgMCwgMCwgMC4zMjkyM10sXG4gICAgXCI1ODExNlwiOiBbMC4xODkwNiwgMC40NzUzNCwgMCwgMCwgMC41MDM0M10sXG4gICAgXCI1ODExN1wiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC4zMzMwMV0sXG4gICAgXCI1ODExOFwiOiBbMCwgMC42MjExOSwgMCwgMCwgMC4zMzQwOV0sXG4gICAgXCI1ODExOVwiOiBbMCwgMC40NzUzNCwgMCwgMCwgMC41MDA3M11cbiAgfSxcbiAgXCJNYWluLUJvbGRcIjoge1xuICAgIFwiMzJcIjogWzAsIDAsIDAsIDAsIDAuMjVdLFxuICAgIFwiMzNcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuMzVdLFxuICAgIFwiMzRcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjAyNzhdLFxuICAgIFwiMzVcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDAuOTU4MzNdLFxuICAgIFwiMzZcIjogWzAuMDU1NTYsIDAuNzUsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjM3XCI6IFswLjA1NTU2LCAwLjc1LCAwLCAwLCAwLjk1ODMzXSxcbiAgICBcIjM4XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjM5XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjMxOTQ0XSxcbiAgICBcIjQwXCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjQ0NzIyXSxcbiAgICBcIjQxXCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjQ0NzIyXSxcbiAgICBcIjQyXCI6IFswLCAwLjc1LCAwLCAwLCAwLjU3NV0sXG4gICAgXCI0M1wiOiBbMC4xMzMzMywgMC42MzMzMywgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI0NFwiOiBbMC4xOTQ0NCwgMC4xNTU1NiwgMCwgMCwgMC4zMTk0NF0sXG4gICAgXCI0NVwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC4zODMzM10sXG4gICAgXCI0NlwiOiBbMCwgMC4xNTU1NiwgMCwgMCwgMC4zMTk0NF0sXG4gICAgXCI0N1wiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC41NzVdLFxuICAgIFwiNDhcIjogWzAsIDAuNjQ0NDQsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjQ5XCI6IFswLCAwLjY0NDQ0LCAwLCAwLCAwLjU3NV0sXG4gICAgXCI1MFwiOiBbMCwgMC42NDQ0NCwgMCwgMCwgMC41NzVdLFxuICAgIFwiNTFcIjogWzAsIDAuNjQ0NDQsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjUyXCI6IFswLCAwLjY0NDQ0LCAwLCAwLCAwLjU3NV0sXG4gICAgXCI1M1wiOiBbMCwgMC42NDQ0NCwgMCwgMCwgMC41NzVdLFxuICAgIFwiNTRcIjogWzAsIDAuNjQ0NDQsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjU1XCI6IFswLCAwLjY0NDQ0LCAwLCAwLCAwLjU3NV0sXG4gICAgXCI1NlwiOiBbMCwgMC42NDQ0NCwgMCwgMCwgMC41NzVdLFxuICAgIFwiNTdcIjogWzAsIDAuNjQ0NDQsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjU4XCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjMxOTQ0XSxcbiAgICBcIjU5XCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLCAwLCAwLjMxOTQ0XSxcbiAgICBcIjYwXCI6IFswLjA4NTU2LCAwLjU4NTU2LCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjYxXCI6IFstMC4xMDg4OSwgMC4zOTExMSwgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI2MlwiOiBbMC4wODU1NiwgMC41ODU1NiwgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI2M1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NDMwNV0sXG4gICAgXCI2NFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI2NVwiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC44Njk0NF0sXG4gICAgXCI2NlwiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC44MTgwNV0sXG4gICAgXCI2N1wiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC44MzA1NV0sXG4gICAgXCI2OFwiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC44ODE5NF0sXG4gICAgXCI2OVwiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC43NTU1NV0sXG4gICAgXCI3MFwiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC43MjM2MV0sXG4gICAgXCI3MVwiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC45MDQxNl0sXG4gICAgXCI3MlwiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC45XSxcbiAgICBcIjczXCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjQzNjExXSxcbiAgICBcIjc0XCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjU5NDQ0XSxcbiAgICBcIjc1XCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjkwMTM4XSxcbiAgICBcIjc2XCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjY5MTY2XSxcbiAgICBcIjc3XCI6IFswLCAwLjY4NjExLCAwLCAwLCAxLjA5MTY2XSxcbiAgICBcIjc4XCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjldLFxuICAgIFwiNzlcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuODYzODhdLFxuICAgIFwiODBcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuNzg2MTFdLFxuICAgIFwiODFcIjogWzAuMTk0NDQsIDAuNjg2MTEsIDAsIDAsIDAuODYzODhdLFxuICAgIFwiODJcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuODYyNV0sXG4gICAgXCI4M1wiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC42Mzg4OV0sXG4gICAgXCI4NFwiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC44XSxcbiAgICBcIjg1XCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjg4NDcyXSxcbiAgICBcIjg2XCI6IFswLCAwLjY4NjExLCAwLjAxNTk3LCAwLCAwLjg2OTQ0XSxcbiAgICBcIjg3XCI6IFswLCAwLjY4NjExLCAwLjAxNTk3LCAwLCAxLjE4ODg4XSxcbiAgICBcIjg4XCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjg2OTQ0XSxcbiAgICBcIjg5XCI6IFswLCAwLjY4NjExLCAwLjAyODc1LCAwLCAwLjg2OTQ0XSxcbiAgICBcIjkwXCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjcwMjc3XSxcbiAgICBcIjkxXCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjMxOTQ0XSxcbiAgICBcIjkyXCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjU3NV0sXG4gICAgXCI5M1wiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC4zMTk0NF0sXG4gICAgXCI5NFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NzVdLFxuICAgIFwiOTVcIjogWzAuMzEsIDAuMTM0NDQsIDAuMDMxOTQsIDAsIDAuNTc1XSxcbiAgICBcIjk3XCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjU1OTAyXSxcbiAgICBcIjk4XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjYzODg5XSxcbiAgICBcIjk5XCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjUxMTExXSxcbiAgICBcIjEwMFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC42Mzg4OV0sXG4gICAgXCIxMDFcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuNTI3MDhdLFxuICAgIFwiMTAyXCI6IFswLCAwLjY5NDQ0LCAwLjEwOTAzLCAwLCAwLjM1MTM5XSxcbiAgICBcIjEwM1wiOiBbMC4xOTQ0NCwgMC40NDQ0NCwgMC4wMTU5NywgMCwgMC41NzVdLFxuICAgIFwiMTA0XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjYzODg5XSxcbiAgICBcIjEwNVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC4zMTk0NF0sXG4gICAgXCIxMDZcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDAuMzUxMzldLFxuICAgIFwiMTA3XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjYwNjk0XSxcbiAgICBcIjEwOFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC4zMTk0NF0sXG4gICAgXCIxMDlcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuOTU4MzNdLFxuICAgIFwiMTEwXCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjYzODg5XSxcbiAgICBcIjExMVwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC41NzVdLFxuICAgIFwiMTEyXCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLCAwLCAwLjYzODg5XSxcbiAgICBcIjExM1wiOiBbMC4xOTQ0NCwgMC40NDQ0NCwgMCwgMCwgMC42MDY5NF0sXG4gICAgXCIxMTRcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuNDczNjFdLFxuICAgIFwiMTE1XCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjQ1MzYxXSxcbiAgICBcIjExNlwiOiBbMCwgMC42MzQ5MiwgMCwgMCwgMC40NDcyMl0sXG4gICAgXCIxMTdcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuNjM4ODldLFxuICAgIFwiMTE4XCI6IFswLCAwLjQ0NDQ0LCAwLjAxNTk3LCAwLCAwLjYwNjk0XSxcbiAgICBcIjExOVwiOiBbMCwgMC40NDQ0NCwgMC4wMTU5NywgMCwgMC44MzA1NV0sXG4gICAgXCIxMjBcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuNjA2OTRdLFxuICAgIFwiMTIxXCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLjAxNTk3LCAwLCAwLjYwNjk0XSxcbiAgICBcIjEyMlwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC41MTExMV0sXG4gICAgXCIxMjNcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjEyNFwiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC4zMTk0NF0sXG4gICAgXCIxMjVcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjEyNlwiOiBbMC4zNSwgMC4zNDQ0NCwgMCwgMCwgMC41NzVdLFxuICAgIFwiMTYwXCI6IFswLCAwLCAwLCAwLCAwLjI1XSxcbiAgICBcIjE2M1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC44Njg1M10sXG4gICAgXCIxNjhcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjE3MlwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC43NjY2Nl0sXG4gICAgXCIxNzZcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuODY5NDRdLFxuICAgIFwiMTc3XCI6IFswLjEzMzMzLCAwLjYzMzMzLCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjE4NFwiOiBbMC4xNzAxNCwgMCwgMCwgMCwgMC41MTExMV0sXG4gICAgXCIxOThcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDEuMDQxNjZdLFxuICAgIFwiMjE1XCI6IFswLjEzMzMzLCAwLjYzMzMzLCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjIxNlwiOiBbMC4wNDg2MSwgMC43MzQ3MiwgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCIyMjNcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTk3MjJdLFxuICAgIFwiMjMwXCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjgzMDU1XSxcbiAgICBcIjI0N1wiOiBbMC4xMzMzMywgMC42MzMzMywgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCIyNDhcIjogWzAuMDk3MjIsIDAuNTQxNjcsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjMwNVwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC4zMTk0NF0sXG4gICAgXCIzMzhcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDEuMTY5NDRdLFxuICAgIFwiMzM5XCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjU2N1wiOiBbMC4xOTQ0NCwgMC40NDQ0NCwgMCwgMCwgMC4zNTEzOV0sXG4gICAgXCI3MTBcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjcxMVwiOiBbMCwgMC42MzE5NCwgMCwgMCwgMC41NzVdLFxuICAgIFwiNzEzXCI6IFswLCAwLjU5NjExLCAwLCAwLCAwLjU3NV0sXG4gICAgXCI3MTRcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjcxNVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NzVdLFxuICAgIFwiNzI4XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU3NV0sXG4gICAgXCI3MjlcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuMzE5NDRdLFxuICAgIFwiNzMwXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjg2OTQ0XSxcbiAgICBcIjczMlwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NzVdLFxuICAgIFwiNzMzXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU3NV0sXG4gICAgXCI5MTVcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuNjkxNjZdLFxuICAgIFwiOTE2XCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjk1ODMzXSxcbiAgICBcIjkyMFwiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI5MjNcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuODA1NTVdLFxuICAgIFwiOTI2XCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjc2NjY2XSxcbiAgICBcIjkyOFwiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC45XSxcbiAgICBcIjkzMVwiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC44MzA1NV0sXG4gICAgXCI5MzNcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuODk0NDRdLFxuICAgIFwiOTM0XCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjgzMDU1XSxcbiAgICBcIjkzNlwiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI5MzdcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuODMwNTVdLFxuICAgIFwiODIxMVwiOiBbMCwgMC40NDQ0NCwgMC4wMzE5NCwgMCwgMC41NzVdLFxuICAgIFwiODIxMlwiOiBbMCwgMC40NDQ0NCwgMC4wMzE5NCwgMCwgMS4xNDk5OV0sXG4gICAgXCI4MjE2XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjMxOTQ0XSxcbiAgICBcIjgyMTdcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuMzE5NDRdLFxuICAgIFwiODIyMFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC42MDI3OF0sXG4gICAgXCI4MjIxXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjYwMjc4XSxcbiAgICBcIjgyMjRcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDAuNTExMTFdLFxuICAgIFwiODIyNVwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMC41MTExMV0sXG4gICAgXCI4MjQyXCI6IFswLCAwLjU1NTU2LCAwLCAwLCAwLjM0NDQ0XSxcbiAgICBcIjg0MDdcIjogWzAsIDAuNzI0NDQsIDAuMTU0ODYsIDAsIDAuNTc1XSxcbiAgICBcIjg0NjNcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjY3NTldLFxuICAgIFwiODQ2NVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC44MzA1NV0sXG4gICAgXCI4NDY3XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjQ3MzYxXSxcbiAgICBcIjg0NzJcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAsIDAsIDAuNzQwMjddLFxuICAgIFwiODQ3NlwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC44MzA1NV0sXG4gICAgXCI4NTAxXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjcwMjc3XSxcbiAgICBcIjg1OTJcIjogWy0wLjEwODg5LCAwLjM5MTExLCAwLCAwLCAxLjE0OTk5XSxcbiAgICBcIjg1OTNcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjg1OTRcIjogWy0wLjEwODg5LCAwLjM5MTExLCAwLCAwLCAxLjE0OTk5XSxcbiAgICBcIjg1OTVcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjg1OTZcIjogWy0wLjEwODg5LCAwLjM5MTExLCAwLCAwLCAxLjE0OTk5XSxcbiAgICBcIjg1OTdcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjg1OThcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDEuMTQ5OTldLFxuICAgIFwiODU5OVwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMS4xNDk5OV0sXG4gICAgXCI4NjAwXCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLCAwLCAxLjE0OTk5XSxcbiAgICBcIjg2MDFcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDEuMTQ5OTldLFxuICAgIFwiODYzNlwiOiBbLTAuMTA4ODksIDAuMzkxMTEsIDAsIDAsIDEuMTQ5OTldLFxuICAgIFwiODYzN1wiOiBbLTAuMTA4ODksIDAuMzkxMTEsIDAsIDAsIDEuMTQ5OTldLFxuICAgIFwiODY0MFwiOiBbLTAuMTA4ODksIDAuMzkxMTEsIDAsIDAsIDEuMTQ5OTldLFxuICAgIFwiODY0MVwiOiBbLTAuMTA4ODksIDAuMzkxMTEsIDAsIDAsIDEuMTQ5OTldLFxuICAgIFwiODY1NlwiOiBbLTAuMTA4ODksIDAuMzkxMTEsIDAsIDAsIDEuMTQ5OTldLFxuICAgIFwiODY1N1wiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMC43MDI3N10sXG4gICAgXCI4NjU4XCI6IFstMC4xMDg4OSwgMC4zOTExMSwgMCwgMCwgMS4xNDk5OV0sXG4gICAgXCI4NjU5XCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLCAwLCAwLjcwMjc3XSxcbiAgICBcIjg2NjBcIjogWy0wLjEwODg5LCAwLjM5MTExLCAwLCAwLCAxLjE0OTk5XSxcbiAgICBcIjg2NjFcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNzAyNzddLFxuICAgIFwiODcwNFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC42Mzg4OV0sXG4gICAgXCI4NzA2XCI6IFswLCAwLjY5NDQ0LCAwLjA2Mzg5LCAwLCAwLjYyODQ3XSxcbiAgICBcIjg3MDdcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjM4ODldLFxuICAgIFwiODcwOVwiOiBbMC4wNTU1NiwgMC43NSwgMCwgMCwgMC41NzVdLFxuICAgIFwiODcxMVwiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC45NTgzM10sXG4gICAgXCI4NzEyXCI6IFswLjA4NTU2LCAwLjU4NTU2LCAwLCAwLCAwLjc2NjY2XSxcbiAgICBcIjg3MTVcIjogWzAuMDg1NTYsIDAuNTg1NTYsIDAsIDAsIDAuNzY2NjZdLFxuICAgIFwiODcyMlwiOiBbMC4xMzMzMywgMC42MzMzMywgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI4NzIzXCI6IFswLjEzMzMzLCAwLjYzMzMzLCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjg3MjVcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjg3MjZcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjg3MjdcIjogWy0wLjAyNzc4LCAwLjQ3MjIyLCAwLCAwLCAwLjU3NV0sXG4gICAgXCI4NzI4XCI6IFstMC4wMjYzOSwgMC40NzM2MSwgMCwgMCwgMC41NzVdLFxuICAgIFwiODcyOVwiOiBbLTAuMDI2MzksIDAuNDczNjEsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjg3MzBcIjogWzAuMTgsIDAuODIsIDAsIDAsIDAuOTU4MzNdLFxuICAgIFwiODczM1wiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI4NzM0XCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAxLjE0OTk5XSxcbiAgICBcIjg3MzZcIjogWzAsIDAuNjkyMjQsIDAsIDAsIDAuNzIyMjJdLFxuICAgIFwiODczOVwiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC4zMTk0NF0sXG4gICAgXCI4NzQxXCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjU3NV0sXG4gICAgXCI4NzQzXCI6IFswLCAwLjU1NTU2LCAwLCAwLCAwLjc2NjY2XSxcbiAgICBcIjg3NDRcIjogWzAsIDAuNTU1NTYsIDAsIDAsIDAuNzY2NjZdLFxuICAgIFwiODc0NVwiOiBbMCwgMC41NTU1NiwgMCwgMCwgMC43NjY2Nl0sXG4gICAgXCI4NzQ2XCI6IFswLCAwLjU1NTU2LCAwLCAwLCAwLjc2NjY2XSxcbiAgICBcIjg3NDdcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAuMTI3NzgsIDAsIDAuNTY4NzVdLFxuICAgIFwiODc2NFwiOiBbLTAuMTA4ODksIDAuMzkxMTEsIDAsIDAsIDAuODk0NDRdLFxuICAgIFwiODc2OFwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMC4zMTk0NF0sXG4gICAgXCI4NzcxXCI6IFswLjAwMjIyLCAwLjUwMjIyLCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjg3NzNcIjogWzAuMDI3LCAwLjYzOCwgMCwgMCwgMC44OTRdLFxuICAgIFwiODc3NlwiOiBbMC4wMjQ0NCwgMC41MjQ0NCwgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI4NzgxXCI6IFswLjAwMjIyLCAwLjUwMjIyLCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjg4MDFcIjogWzAuMDAyMjIsIDAuNTAyMjIsIDAsIDAsIDAuODk0NDRdLFxuICAgIFwiODgwNFwiOiBbMC4xOTY2NywgMC42OTY2NywgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI4ODA1XCI6IFswLjE5NjY3LCAwLjY5NjY3LCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjg4MTBcIjogWzAuMDg1NTYsIDAuNTg1NTYsIDAsIDAsIDEuMTQ5OTldLFxuICAgIFwiODgxMVwiOiBbMC4wODU1NiwgMC41ODU1NiwgMCwgMCwgMS4xNDk5OV0sXG4gICAgXCI4ODI2XCI6IFswLjA4NTU2LCAwLjU4NTU2LCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjg4MjdcIjogWzAuMDg1NTYsIDAuNTg1NTYsIDAsIDAsIDAuODk0NDRdLFxuICAgIFwiODgzNFwiOiBbMC4wODU1NiwgMC41ODU1NiwgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI4ODM1XCI6IFswLjA4NTU2LCAwLjU4NTU2LCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjg4MzhcIjogWzAuMTk2NjcsIDAuNjk2NjcsIDAsIDAsIDAuODk0NDRdLFxuICAgIFwiODgzOVwiOiBbMC4xOTY2NywgMC42OTY2NywgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI4ODQ2XCI6IFswLCAwLjU1NTU2LCAwLCAwLCAwLjc2NjY2XSxcbiAgICBcIjg4NDlcIjogWzAuMTk2NjcsIDAuNjk2NjcsIDAsIDAsIDAuODk0NDRdLFxuICAgIFwiODg1MFwiOiBbMC4xOTY2NywgMC42OTY2NywgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI4ODUxXCI6IFswLCAwLjU1NTU2LCAwLCAwLCAwLjc2NjY2XSxcbiAgICBcIjg4NTJcIjogWzAsIDAuNTU1NTYsIDAsIDAsIDAuNzY2NjZdLFxuICAgIFwiODg1M1wiOiBbMC4xMzMzMywgMC42MzMzMywgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI4ODU0XCI6IFswLjEzMzMzLCAwLjYzMzMzLCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjg4NTVcIjogWzAuMTMzMzMsIDAuNjMzMzMsIDAsIDAsIDAuODk0NDRdLFxuICAgIFwiODg1NlwiOiBbMC4xMzMzMywgMC42MzMzMywgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI4ODU3XCI6IFswLjEzMzMzLCAwLjYzMzMzLCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjg4NjZcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzAyNzddLFxuICAgIFwiODg2N1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43MDI3N10sXG4gICAgXCI4ODY4XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjg4NjlcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuODk0NDRdLFxuICAgIFwiODkwMFwiOiBbLTAuMDI2MzksIDAuNDczNjEsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjg5MDFcIjogWy0wLjAyNjM5LCAwLjQ3MzYxLCAwLCAwLCAwLjMxOTQ0XSxcbiAgICBcIjg5MDJcIjogWy0wLjAyNzc4LCAwLjQ3MjIyLCAwLCAwLCAwLjU3NV0sXG4gICAgXCI4OTY4XCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjUxMTExXSxcbiAgICBcIjg5NjlcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNTExMTFdLFxuICAgIFwiODk3MFwiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC41MTExMV0sXG4gICAgXCI4OTcxXCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjUxMTExXSxcbiAgICBcIjg5OTRcIjogWy0wLjEzODg5LCAwLjM2MTExLCAwLCAwLCAxLjE0OTk5XSxcbiAgICBcIjg5OTVcIjogWy0wLjEzODg5LCAwLjM2MTExLCAwLCAwLCAxLjE0OTk5XSxcbiAgICBcIjk2NTFcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDEuMDIyMjJdLFxuICAgIFwiOTY1N1wiOiBbLTAuMDI3NzgsIDAuNDcyMjIsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjk2NjFcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDEuMDIyMjJdLFxuICAgIFwiOTY2N1wiOiBbLTAuMDI3NzgsIDAuNDcyMjIsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjk3MTFcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDEuMTQ5OTldLFxuICAgIFwiOTgyNFwiOiBbMC4xMjk2MywgMC42OTQ0NCwgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI5ODI1XCI6IFswLjEyOTYzLCAwLjY5NDQ0LCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjk4MjZcIjogWzAuMTI5NjMsIDAuNjk0NDQsIDAsIDAsIDAuODk0NDRdLFxuICAgIFwiOTgyN1wiOiBbMC4xMjk2MywgMC42OTQ0NCwgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI5ODM3XCI6IFswLCAwLjc1LCAwLCAwLCAwLjQ0NzIyXSxcbiAgICBcIjk4MzhcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDAuNDQ3MjJdLFxuICAgIFwiOTgzOVwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMC40NDcyMl0sXG4gICAgXCIxMDIxNlwiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC40NDcyMl0sXG4gICAgXCIxMDIxN1wiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC40NDcyMl0sXG4gICAgXCIxMDgxNVwiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC45XSxcbiAgICBcIjEwOTI3XCI6IFswLjE5NjY3LCAwLjY5NjY3LCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjEwOTI4XCI6IFswLjE5NjY3LCAwLjY5NjY3LCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjU3Mzc2XCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLCAwLCAwXVxuICB9LFxuICBcIk1haW4tQm9sZEl0YWxpY1wiOiB7XG4gICAgXCIzMlwiOiBbMCwgMCwgMCwgMCwgMC4yNV0sXG4gICAgXCIzM1wiOiBbMCwgMC42OTQ0NCwgMC4xMTQxNywgMCwgMC4zODYxMV0sXG4gICAgXCIzNFwiOiBbMCwgMC42OTQ0NCwgMC4wNzkzOSwgMCwgMC42MjA1NV0sXG4gICAgXCIzNVwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMC4wNjgzMywgMCwgMC45NDQ0NF0sXG4gICAgXCIzN1wiOiBbMC4wNTU1NiwgMC43NSwgMC4xMjg2MSwgMCwgMC45NDQ0NF0sXG4gICAgXCIzOFwiOiBbMCwgMC42OTQ0NCwgMC4wODUyOCwgMCwgMC44ODU1NV0sXG4gICAgXCIzOVwiOiBbMCwgMC42OTQ0NCwgMC4xMjk0NSwgMCwgMC4zNTU1NV0sXG4gICAgXCI0MFwiOiBbMC4yNSwgMC43NSwgMC4xNTgwNiwgMCwgMC40NzMzM10sXG4gICAgXCI0MVwiOiBbMC4yNSwgMC43NSwgMC4wMzMwNiwgMCwgMC40NzMzM10sXG4gICAgXCI0MlwiOiBbMCwgMC43NSwgMC4xNDMzMywgMCwgMC41OTExMV0sXG4gICAgXCI0M1wiOiBbMC4xMDMzMywgMC42MDMzMywgMC4wMzMwNiwgMCwgMC44ODU1NV0sXG4gICAgXCI0NFwiOiBbMC4xOTQ0NCwgMC4xNDcyMiwgMCwgMCwgMC4zNTU1NV0sXG4gICAgXCI0NVwiOiBbMCwgMC40NDQ0NCwgMC4wMjYxMSwgMCwgMC40MTQ0NF0sXG4gICAgXCI0NlwiOiBbMCwgMC4xNDcyMiwgMCwgMCwgMC4zNTU1NV0sXG4gICAgXCI0N1wiOiBbMC4yNSwgMC43NSwgMC4xNTgwNiwgMCwgMC41OTExMV0sXG4gICAgXCI0OFwiOiBbMCwgMC42NDQ0NCwgMC4xMzE2NywgMCwgMC41OTExMV0sXG4gICAgXCI0OVwiOiBbMCwgMC42NDQ0NCwgMC4xMzE2NywgMCwgMC41OTExMV0sXG4gICAgXCI1MFwiOiBbMCwgMC42NDQ0NCwgMC4xMzE2NywgMCwgMC41OTExMV0sXG4gICAgXCI1MVwiOiBbMCwgMC42NDQ0NCwgMC4xMzE2NywgMCwgMC41OTExMV0sXG4gICAgXCI1MlwiOiBbMC4xOTQ0NCwgMC42NDQ0NCwgMC4xMzE2NywgMCwgMC41OTExMV0sXG4gICAgXCI1M1wiOiBbMCwgMC42NDQ0NCwgMC4xMzE2NywgMCwgMC41OTExMV0sXG4gICAgXCI1NFwiOiBbMCwgMC42NDQ0NCwgMC4xMzE2NywgMCwgMC41OTExMV0sXG4gICAgXCI1NVwiOiBbMC4xOTQ0NCwgMC42NDQ0NCwgMC4xMzE2NywgMCwgMC41OTExMV0sXG4gICAgXCI1NlwiOiBbMCwgMC42NDQ0NCwgMC4xMzE2NywgMCwgMC41OTExMV0sXG4gICAgXCI1N1wiOiBbMCwgMC42NDQ0NCwgMC4xMzE2NywgMCwgMC41OTExMV0sXG4gICAgXCI1OFwiOiBbMCwgMC40NDQ0NCwgMC4wNjY5NSwgMCwgMC4zNTU1NV0sXG4gICAgXCI1OVwiOiBbMC4xOTQ0NCwgMC40NDQ0NCwgMC4wNjY5NSwgMCwgMC4zNTU1NV0sXG4gICAgXCI2MVwiOiBbLTAuMTA4ODksIDAuMzkxMTEsIDAuMDY4MzMsIDAsIDAuODg1NTVdLFxuICAgIFwiNjNcIjogWzAsIDAuNjk0NDQsIDAuMTE0NzIsIDAsIDAuNTkxMTFdLFxuICAgIFwiNjRcIjogWzAsIDAuNjk0NDQsIDAuMDkyMDgsIDAsIDAuODg1NTVdLFxuICAgIFwiNjVcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuODY1NTVdLFxuICAgIFwiNjZcIjogWzAsIDAuNjg2MTEsIDAuMDk5MiwgMCwgMC44MTY2Nl0sXG4gICAgXCI2N1wiOiBbMCwgMC42ODYxMSwgMC4xNDIwOCwgMCwgMC44MjY2Nl0sXG4gICAgXCI2OFwiOiBbMCwgMC42ODYxMSwgMC4wOTA2MiwgMCwgMC44NzU1NV0sXG4gICAgXCI2OVwiOiBbMCwgMC42ODYxMSwgMC4xMTQzMSwgMCwgMC43NTY2Nl0sXG4gICAgXCI3MFwiOiBbMCwgMC42ODYxMSwgMC4xMjkwMywgMCwgMC43MjcyMl0sXG4gICAgXCI3MVwiOiBbMCwgMC42ODYxMSwgMC4wNzM0NywgMCwgMC44OTUyN10sXG4gICAgXCI3MlwiOiBbMCwgMC42ODYxMSwgMC4xNzIwOCwgMCwgMC44OTYxXSxcbiAgICBcIjczXCI6IFswLCAwLjY4NjExLCAwLjE1NjgxLCAwLCAwLjQ3MTY2XSxcbiAgICBcIjc0XCI6IFswLCAwLjY4NjExLCAwLjE0NSwgMCwgMC42MTA1NV0sXG4gICAgXCI3NVwiOiBbMCwgMC42ODYxMSwgMC4xNDIwOCwgMCwgMC44OTQ5OV0sXG4gICAgXCI3NlwiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC42OTc3N10sXG4gICAgXCI3N1wiOiBbMCwgMC42ODYxMSwgMC4xNzIwOCwgMCwgMS4wNzI3N10sXG4gICAgXCI3OFwiOiBbMCwgMC42ODYxMSwgMC4xNzIwOCwgMCwgMC44OTYxXSxcbiAgICBcIjc5XCI6IFswLCAwLjY4NjExLCAwLjA5MDYyLCAwLCAwLjg1NDk5XSxcbiAgICBcIjgwXCI6IFswLCAwLjY4NjExLCAwLjA5OTIsIDAsIDAuNzg3MjFdLFxuICAgIFwiODFcIjogWzAuMTk0NDQsIDAuNjg2MTEsIDAuMDkwNjIsIDAsIDAuODU0OTldLFxuICAgIFwiODJcIjogWzAsIDAuNjg2MTEsIDAuMDI1NTksIDAsIDAuODU5NDRdLFxuICAgIFwiODNcIjogWzAsIDAuNjg2MTEsIDAuMTEyNjQsIDAsIDAuNjQ5OTldLFxuICAgIFwiODRcIjogWzAsIDAuNjg2MTEsIDAuMTI5MDMsIDAsIDAuNzk2MV0sXG4gICAgXCI4NVwiOiBbMCwgMC42ODYxMSwgMC4xNzIwOCwgMCwgMC44ODA4M10sXG4gICAgXCI4NlwiOiBbMCwgMC42ODYxMSwgMC4xODYyNSwgMCwgMC44NjU1NV0sXG4gICAgXCI4N1wiOiBbMCwgMC42ODYxMSwgMC4xODYyNSwgMCwgMS4xNTk5OV0sXG4gICAgXCI4OFwiOiBbMCwgMC42ODYxMSwgMC4xNTY4MSwgMCwgMC44NjU1NV0sXG4gICAgXCI4OVwiOiBbMCwgMC42ODYxMSwgMC4xOTgwMywgMCwgMC44NjU1NV0sXG4gICAgXCI5MFwiOiBbMCwgMC42ODYxMSwgMC4xNDIwOCwgMCwgMC43MDg4OF0sXG4gICAgXCI5MVwiOiBbMC4yNSwgMC43NSwgMC4xODc1LCAwLCAwLjM1NjExXSxcbiAgICBcIjkzXCI6IFswLjI1LCAwLjc1LCAwLjA5OTcyLCAwLCAwLjM1NjExXSxcbiAgICBcIjk0XCI6IFswLCAwLjY5NDQ0LCAwLjA2NzA5LCAwLCAwLjU5MTExXSxcbiAgICBcIjk1XCI6IFswLjMxLCAwLjEzNDQ0LCAwLjA5ODExLCAwLCAwLjU5MTExXSxcbiAgICBcIjk3XCI6IFswLCAwLjQ0NDQ0LCAwLjA5NDI2LCAwLCAwLjU5MTExXSxcbiAgICBcIjk4XCI6IFswLCAwLjY5NDQ0LCAwLjA3ODYxLCAwLCAwLjUzMjIyXSxcbiAgICBcIjk5XCI6IFswLCAwLjQ0NDQ0LCAwLjA1MjIyLCAwLCAwLjUzMjIyXSxcbiAgICBcIjEwMFwiOiBbMCwgMC42OTQ0NCwgMC4xMDg2MSwgMCwgMC41OTExMV0sXG4gICAgXCIxMDFcIjogWzAsIDAuNDQ0NDQsIDAuMDg1LCAwLCAwLjUzMjIyXSxcbiAgICBcIjEwMlwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMC4yMTc3OCwgMCwgMC40XSxcbiAgICBcIjEwM1wiOiBbMC4xOTQ0NCwgMC40NDQ0NCwgMC4xMDUsIDAsIDAuNTMyMjJdLFxuICAgIFwiMTA0XCI6IFswLCAwLjY5NDQ0LCAwLjA5NDI2LCAwLCAwLjU5MTExXSxcbiAgICBcIjEwNVwiOiBbMCwgMC42OTMyNiwgMC4xMTM4NywgMCwgMC4zNTU1NV0sXG4gICAgXCIxMDZcIjogWzAuMTk0NDQsIDAuNjkzMjYsIDAuMTY3MiwgMCwgMC4zNTU1NV0sXG4gICAgXCIxMDdcIjogWzAsIDAuNjk0NDQsIDAuMTExMTEsIDAsIDAuNTMyMjJdLFxuICAgIFwiMTA4XCI6IFswLCAwLjY5NDQ0LCAwLjEwODYxLCAwLCAwLjI5NjY2XSxcbiAgICBcIjEwOVwiOiBbMCwgMC40NDQ0NCwgMC4wOTQyNiwgMCwgMC45NDQ0NF0sXG4gICAgXCIxMTBcIjogWzAsIDAuNDQ0NDQsIDAuMDk0MjYsIDAsIDAuNjQ5OTldLFxuICAgIFwiMTExXCI6IFswLCAwLjQ0NDQ0LCAwLjA3ODYxLCAwLCAwLjU5MTExXSxcbiAgICBcIjExMlwiOiBbMC4xOTQ0NCwgMC40NDQ0NCwgMC4wNzg2MSwgMCwgMC41OTExMV0sXG4gICAgXCIxMTNcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAuMTA1LCAwLCAwLjUzMjIyXSxcbiAgICBcIjExNFwiOiBbMCwgMC40NDQ0NCwgMC4xMTExMSwgMCwgMC41MDE2N10sXG4gICAgXCIxMTVcIjogWzAsIDAuNDQ0NDQsIDAuMDgxNjcsIDAsIDAuNDg2OTRdLFxuICAgIFwiMTE2XCI6IFswLCAwLjYzNDkyLCAwLjA5NjM5LCAwLCAwLjM4NV0sXG4gICAgXCIxMTdcIjogWzAsIDAuNDQ0NDQsIDAuMDk0MjYsIDAsIDAuNjIwNTVdLFxuICAgIFwiMTE4XCI6IFswLCAwLjQ0NDQ0LCAwLjExMTExLCAwLCAwLjUzMjIyXSxcbiAgICBcIjExOVwiOiBbMCwgMC40NDQ0NCwgMC4xMTExMSwgMCwgMC43Njc3N10sXG4gICAgXCIxMjBcIjogWzAsIDAuNDQ0NDQsIDAuMTI1ODMsIDAsIDAuNTYwNTVdLFxuICAgIFwiMTIxXCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLjEwNSwgMCwgMC41NjE2Nl0sXG4gICAgXCIxMjJcIjogWzAsIDAuNDQ0NDQsIDAuMTM4ODksIDAsIDAuNDkwNTVdLFxuICAgIFwiMTI2XCI6IFswLjM1LCAwLjM0NDQ0LCAwLjExNDcyLCAwLCAwLjU5MTExXSxcbiAgICBcIjE2MFwiOiBbMCwgMCwgMCwgMCwgMC4yNV0sXG4gICAgXCIxNjhcIjogWzAsIDAuNjk0NDQsIDAuMTE0NzMsIDAsIDAuNTkxMTFdLFxuICAgIFwiMTc2XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjk0ODg4XSxcbiAgICBcIjE4NFwiOiBbMC4xNzAxNCwgMCwgMCwgMCwgMC41MzIyMl0sXG4gICAgXCIxOThcIjogWzAsIDAuNjg2MTEsIDAuMTE0MzEsIDAsIDEuMDIyNzddLFxuICAgIFwiMjE2XCI6IFswLjA0ODYxLCAwLjczNDcyLCAwLjA5MDYyLCAwLCAwLjg4NTU1XSxcbiAgICBcIjIyM1wiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMC4wOTczNiwgMCwgMC42NjVdLFxuICAgIFwiMjMwXCI6IFswLCAwLjQ0NDQ0LCAwLjA4NSwgMCwgMC44MjY2Nl0sXG4gICAgXCIyNDhcIjogWzAuMDk3MjIsIDAuNTQxNjcsIDAuMDk0NTgsIDAsIDAuNTkxMTFdLFxuICAgIFwiMzA1XCI6IFswLCAwLjQ0NDQ0LCAwLjA5NDI2LCAwLCAwLjM1NTU1XSxcbiAgICBcIjMzOFwiOiBbMCwgMC42ODYxMSwgMC4xMTQzMSwgMCwgMS4xNDA1NF0sXG4gICAgXCIzMzlcIjogWzAsIDAuNDQ0NDQsIDAuMDg1LCAwLCAwLjgyNjY2XSxcbiAgICBcIjU2N1wiOiBbMC4xOTQ0NCwgMC40NDQ0NCwgMC4wNDYxMSwgMCwgMC4zODVdLFxuICAgIFwiNzEwXCI6IFswLCAwLjY5NDQ0LCAwLjA2NzA5LCAwLCAwLjU5MTExXSxcbiAgICBcIjcxMVwiOiBbMCwgMC42MzE5NCwgMC4wODI3MSwgMCwgMC41OTExMV0sXG4gICAgXCI3MTNcIjogWzAsIDAuNTk0NDQsIDAuMTA0NDQsIDAsIDAuNTkxMTFdLFxuICAgIFwiNzE0XCI6IFswLCAwLjY5NDQ0LCAwLjA4NTI4LCAwLCAwLjU5MTExXSxcbiAgICBcIjcxNVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41OTExMV0sXG4gICAgXCI3MjhcIjogWzAsIDAuNjk0NDQsIDAuMTAzMzMsIDAsIDAuNTkxMTFdLFxuICAgIFwiNzI5XCI6IFswLCAwLjY5NDQ0LCAwLjEyOTQ1LCAwLCAwLjM1NTU1XSxcbiAgICBcIjczMFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC45NDg4OF0sXG4gICAgXCI3MzJcIjogWzAsIDAuNjk0NDQsIDAuMTE0NzIsIDAsIDAuNTkxMTFdLFxuICAgIFwiNzMzXCI6IFswLCAwLjY5NDQ0LCAwLjExNDcyLCAwLCAwLjU5MTExXSxcbiAgICBcIjkxNVwiOiBbMCwgMC42ODYxMSwgMC4xMjkwMywgMCwgMC42OTc3N10sXG4gICAgXCI5MTZcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuOTQ0NDRdLFxuICAgIFwiOTIwXCI6IFswLCAwLjY4NjExLCAwLjA5MDYyLCAwLCAwLjg4NTU1XSxcbiAgICBcIjkyM1wiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC44MDY2Nl0sXG4gICAgXCI5MjZcIjogWzAsIDAuNjg2MTEsIDAuMTUwOTIsIDAsIDAuNzY3NzddLFxuICAgIFwiOTI4XCI6IFswLCAwLjY4NjExLCAwLjE3MjA4LCAwLCAwLjg5NjFdLFxuICAgIFwiOTMxXCI6IFswLCAwLjY4NjExLCAwLjExNDMxLCAwLCAwLjgyNjY2XSxcbiAgICBcIjkzM1wiOiBbMCwgMC42ODYxMSwgMC4xMDc3OCwgMCwgMC44ODU1NV0sXG4gICAgXCI5MzRcIjogWzAsIDAuNjg2MTEsIDAuMDU2MzIsIDAsIDAuODI2NjZdLFxuICAgIFwiOTM2XCI6IFswLCAwLjY4NjExLCAwLjEwNzc4LCAwLCAwLjg4NTU1XSxcbiAgICBcIjkzN1wiOiBbMCwgMC42ODYxMSwgMC4wOTkyLCAwLCAwLjgyNjY2XSxcbiAgICBcIjgyMTFcIjogWzAsIDAuNDQ0NDQsIDAuMDk4MTEsIDAsIDAuNTkxMTFdLFxuICAgIFwiODIxMlwiOiBbMCwgMC40NDQ0NCwgMC4wOTgxMSwgMCwgMS4xODIyMV0sXG4gICAgXCI4MjE2XCI6IFswLCAwLjY5NDQ0LCAwLjEyOTQ1LCAwLCAwLjM1NTU1XSxcbiAgICBcIjgyMTdcIjogWzAsIDAuNjk0NDQsIDAuMTI5NDUsIDAsIDAuMzU1NTVdLFxuICAgIFwiODIyMFwiOiBbMCwgMC42OTQ0NCwgMC4xNjc3MiwgMCwgMC42MjA1NV0sXG4gICAgXCI4MjIxXCI6IFswLCAwLjY5NDQ0LCAwLjA3OTM5LCAwLCAwLjYyMDU1XVxuICB9LFxuICBcIk1haW4tSXRhbGljXCI6IHtcbiAgICBcIjMyXCI6IFswLCAwLCAwLCAwLCAwLjI1XSxcbiAgICBcIjMzXCI6IFswLCAwLjY5NDQ0LCAwLjEyNDE3LCAwLCAwLjMwNjY3XSxcbiAgICBcIjM0XCI6IFswLCAwLjY5NDQ0LCAwLjA2OTYxLCAwLCAwLjUxNDQ0XSxcbiAgICBcIjM1XCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLjA2NjE2LCAwLCAwLjgxNzc3XSxcbiAgICBcIjM3XCI6IFswLjA1NTU2LCAwLjc1LCAwLjEzNjM5LCAwLCAwLjgxNzc3XSxcbiAgICBcIjM4XCI6IFswLCAwLjY5NDQ0LCAwLjA5Njk0LCAwLCAwLjc2NjY2XSxcbiAgICBcIjM5XCI6IFswLCAwLjY5NDQ0LCAwLjEyNDE3LCAwLCAwLjMwNjY3XSxcbiAgICBcIjQwXCI6IFswLjI1LCAwLjc1LCAwLjE2MTk0LCAwLCAwLjQwODg5XSxcbiAgICBcIjQxXCI6IFswLjI1LCAwLjc1LCAwLjAzNjk0LCAwLCAwLjQwODg5XSxcbiAgICBcIjQyXCI6IFswLCAwLjc1LCAwLjE0OTE3LCAwLCAwLjUxMTExXSxcbiAgICBcIjQzXCI6IFswLjA1NjY3LCAwLjU2MTY3LCAwLjAzNjk0LCAwLCAwLjc2NjY2XSxcbiAgICBcIjQ0XCI6IFswLjE5NDQ0LCAwLjEwNTU2LCAwLCAwLCAwLjMwNjY3XSxcbiAgICBcIjQ1XCI6IFswLCAwLjQzMDU2LCAwLjAyODI2LCAwLCAwLjM1Nzc4XSxcbiAgICBcIjQ2XCI6IFswLCAwLjEwNTU2LCAwLCAwLCAwLjMwNjY3XSxcbiAgICBcIjQ3XCI6IFswLjI1LCAwLjc1LCAwLjE2MTk0LCAwLCAwLjUxMTExXSxcbiAgICBcIjQ4XCI6IFswLCAwLjY0NDQ0LCAwLjEzNTU2LCAwLCAwLjUxMTExXSxcbiAgICBcIjQ5XCI6IFswLCAwLjY0NDQ0LCAwLjEzNTU2LCAwLCAwLjUxMTExXSxcbiAgICBcIjUwXCI6IFswLCAwLjY0NDQ0LCAwLjEzNTU2LCAwLCAwLjUxMTExXSxcbiAgICBcIjUxXCI6IFswLCAwLjY0NDQ0LCAwLjEzNTU2LCAwLCAwLjUxMTExXSxcbiAgICBcIjUyXCI6IFswLjE5NDQ0LCAwLjY0NDQ0LCAwLjEzNTU2LCAwLCAwLjUxMTExXSxcbiAgICBcIjUzXCI6IFswLCAwLjY0NDQ0LCAwLjEzNTU2LCAwLCAwLjUxMTExXSxcbiAgICBcIjU0XCI6IFswLCAwLjY0NDQ0LCAwLjEzNTU2LCAwLCAwLjUxMTExXSxcbiAgICBcIjU1XCI6IFswLjE5NDQ0LCAwLjY0NDQ0LCAwLjEzNTU2LCAwLCAwLjUxMTExXSxcbiAgICBcIjU2XCI6IFswLCAwLjY0NDQ0LCAwLjEzNTU2LCAwLCAwLjUxMTExXSxcbiAgICBcIjU3XCI6IFswLCAwLjY0NDQ0LCAwLjEzNTU2LCAwLCAwLjUxMTExXSxcbiAgICBcIjU4XCI6IFswLCAwLjQzMDU2LCAwLjA1ODIsIDAsIDAuMzA2NjddLFxuICAgIFwiNTlcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAuMDU4MiwgMCwgMC4zMDY2N10sXG4gICAgXCI2MVwiOiBbLTAuMTMzMTMsIDAuMzY2ODcsIDAuMDY2MTYsIDAsIDAuNzY2NjZdLFxuICAgIFwiNjNcIjogWzAsIDAuNjk0NDQsIDAuMTIyNSwgMCwgMC41MTExMV0sXG4gICAgXCI2NFwiOiBbMCwgMC42OTQ0NCwgMC4wOTU5NywgMCwgMC43NjY2Nl0sXG4gICAgXCI2NVwiOiBbMCwgMC42ODMzMywgMCwgMCwgMC43NDMzM10sXG4gICAgXCI2NlwiOiBbMCwgMC42ODMzMywgMC4xMDI1NywgMCwgMC43MDM4OV0sXG4gICAgXCI2N1wiOiBbMCwgMC42ODMzMywgMC4xNDUyOCwgMCwgMC43MTU1NV0sXG4gICAgXCI2OFwiOiBbMCwgMC42ODMzMywgMC4wOTQwMywgMCwgMC43NTVdLFxuICAgIFwiNjlcIjogWzAsIDAuNjgzMzMsIDAuMTIwMjgsIDAsIDAuNjc4MzNdLFxuICAgIFwiNzBcIjogWzAsIDAuNjgzMzMsIDAuMTMzMDUsIDAsIDAuNjUyNzddLFxuICAgIFwiNzFcIjogWzAsIDAuNjgzMzMsIDAuMDg3MjIsIDAsIDAuNzczNjFdLFxuICAgIFwiNzJcIjogWzAsIDAuNjgzMzMsIDAuMTYzODksIDAsIDAuNzQzMzNdLFxuICAgIFwiNzNcIjogWzAsIDAuNjgzMzMsIDAuMTU4MDYsIDAsIDAuMzg1NTVdLFxuICAgIFwiNzRcIjogWzAsIDAuNjgzMzMsIDAuMTQwMjgsIDAsIDAuNTI1XSxcbiAgICBcIjc1XCI6IFswLCAwLjY4MzMzLCAwLjE0NTI4LCAwLCAwLjc2ODg4XSxcbiAgICBcIjc2XCI6IFswLCAwLjY4MzMzLCAwLCAwLCAwLjYyNzIyXSxcbiAgICBcIjc3XCI6IFswLCAwLjY4MzMzLCAwLjE2Mzg5LCAwLCAwLjg5NjY2XSxcbiAgICBcIjc4XCI6IFswLCAwLjY4MzMzLCAwLjE2Mzg5LCAwLCAwLjc0MzMzXSxcbiAgICBcIjc5XCI6IFswLCAwLjY4MzMzLCAwLjA5NDAzLCAwLCAwLjc2NjY2XSxcbiAgICBcIjgwXCI6IFswLCAwLjY4MzMzLCAwLjEwMjU3LCAwLCAwLjY3ODMzXSxcbiAgICBcIjgxXCI6IFswLjE5NDQ0LCAwLjY4MzMzLCAwLjA5NDAzLCAwLCAwLjc2NjY2XSxcbiAgICBcIjgyXCI6IFswLCAwLjY4MzMzLCAwLjAzODY4LCAwLCAwLjcyOTQ0XSxcbiAgICBcIjgzXCI6IFswLCAwLjY4MzMzLCAwLjExOTcyLCAwLCAwLjU2MjIyXSxcbiAgICBcIjg0XCI6IFswLCAwLjY4MzMzLCAwLjEzMzA1LCAwLCAwLjcxNTU1XSxcbiAgICBcIjg1XCI6IFswLCAwLjY4MzMzLCAwLjE2Mzg5LCAwLCAwLjc0MzMzXSxcbiAgICBcIjg2XCI6IFswLCAwLjY4MzMzLCAwLjE4MzYxLCAwLCAwLjc0MzMzXSxcbiAgICBcIjg3XCI6IFswLCAwLjY4MzMzLCAwLjE4MzYxLCAwLCAwLjk5ODg4XSxcbiAgICBcIjg4XCI6IFswLCAwLjY4MzMzLCAwLjE1ODA2LCAwLCAwLjc0MzMzXSxcbiAgICBcIjg5XCI6IFswLCAwLjY4MzMzLCAwLjE5MzgzLCAwLCAwLjc0MzMzXSxcbiAgICBcIjkwXCI6IFswLCAwLjY4MzMzLCAwLjE0NTI4LCAwLCAwLjYxMzMzXSxcbiAgICBcIjkxXCI6IFswLjI1LCAwLjc1LCAwLjE4NzUsIDAsIDAuMzA2NjddLFxuICAgIFwiOTNcIjogWzAuMjUsIDAuNzUsIDAuMTA1MjgsIDAsIDAuMzA2NjddLFxuICAgIFwiOTRcIjogWzAsIDAuNjk0NDQsIDAuMDY2NDYsIDAsIDAuNTExMTFdLFxuICAgIFwiOTVcIjogWzAuMzEsIDAuMTIwNTYsIDAuMDkyMDgsIDAsIDAuNTExMTFdLFxuICAgIFwiOTdcIjogWzAsIDAuNDMwNTYsIDAuMDc2NzEsIDAsIDAuNTExMTFdLFxuICAgIFwiOThcIjogWzAsIDAuNjk0NDQsIDAuMDYzMTIsIDAsIDAuNDZdLFxuICAgIFwiOTlcIjogWzAsIDAuNDMwNTYsIDAuMDU2NTMsIDAsIDAuNDZdLFxuICAgIFwiMTAwXCI6IFswLCAwLjY5NDQ0LCAwLjEwMzMzLCAwLCAwLjUxMTExXSxcbiAgICBcIjEwMVwiOiBbMCwgMC40MzA1NiwgMC4wNzUxNCwgMCwgMC40Nl0sXG4gICAgXCIxMDJcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAuMjExOTQsIDAsIDAuMzA2NjddLFxuICAgIFwiMTAzXCI6IFswLjE5NDQ0LCAwLjQzMDU2LCAwLjA4ODQ3LCAwLCAwLjQ2XSxcbiAgICBcIjEwNFwiOiBbMCwgMC42OTQ0NCwgMC4wNzY3MSwgMCwgMC41MTExMV0sXG4gICAgXCIxMDVcIjogWzAsIDAuNjU1MzYsIDAuMTAxOSwgMCwgMC4zMDY2N10sXG4gICAgXCIxMDZcIjogWzAuMTk0NDQsIDAuNjU1MzYsIDAuMTQ0NjcsIDAsIDAuMzA2NjddLFxuICAgIFwiMTA3XCI6IFswLCAwLjY5NDQ0LCAwLjEwNzY0LCAwLCAwLjQ2XSxcbiAgICBcIjEwOFwiOiBbMCwgMC42OTQ0NCwgMC4xMDMzMywgMCwgMC4yNTU1NV0sXG4gICAgXCIxMDlcIjogWzAsIDAuNDMwNTYsIDAuMDc2NzEsIDAsIDAuODE3NzddLFxuICAgIFwiMTEwXCI6IFswLCAwLjQzMDU2LCAwLjA3NjcxLCAwLCAwLjU2MjIyXSxcbiAgICBcIjExMVwiOiBbMCwgMC40MzA1NiwgMC4wNjMxMiwgMCwgMC41MTExMV0sXG4gICAgXCIxMTJcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAuMDYzMTIsIDAsIDAuNTExMTFdLFxuICAgIFwiMTEzXCI6IFswLjE5NDQ0LCAwLjQzMDU2LCAwLjA4ODQ3LCAwLCAwLjQ2XSxcbiAgICBcIjExNFwiOiBbMCwgMC40MzA1NiwgMC4xMDc2NCwgMCwgMC40MjE2Nl0sXG4gICAgXCIxMTVcIjogWzAsIDAuNDMwNTYsIDAuMDgyMDgsIDAsIDAuNDA4ODldLFxuICAgIFwiMTE2XCI6IFswLCAwLjYxNTA4LCAwLjA5NDg2LCAwLCAwLjMzMjIyXSxcbiAgICBcIjExN1wiOiBbMCwgMC40MzA1NiwgMC4wNzY3MSwgMCwgMC41MzY2Nl0sXG4gICAgXCIxMThcIjogWzAsIDAuNDMwNTYsIDAuMTA3NjQsIDAsIDAuNDZdLFxuICAgIFwiMTE5XCI6IFswLCAwLjQzMDU2LCAwLjEwNzY0LCAwLCAwLjY2NDQ0XSxcbiAgICBcIjEyMFwiOiBbMCwgMC40MzA1NiwgMC4xMjA0MiwgMCwgMC40NjM4OV0sXG4gICAgXCIxMjFcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAuMDg4NDcsIDAsIDAuNDg1NTVdLFxuICAgIFwiMTIyXCI6IFswLCAwLjQzMDU2LCAwLjEyMjkyLCAwLCAwLjQwODg5XSxcbiAgICBcIjEyNlwiOiBbMC4zNSwgMC4zMTc4NiwgMC4xMTU4NSwgMCwgMC41MTExMV0sXG4gICAgXCIxNjBcIjogWzAsIDAsIDAsIDAsIDAuMjVdLFxuICAgIFwiMTY4XCI6IFswLCAwLjY2Nzg2LCAwLjEwNDc0LCAwLCAwLjUxMTExXSxcbiAgICBcIjE3NlwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC44MzEyOV0sXG4gICAgXCIxODRcIjogWzAuMTcwMTQsIDAsIDAsIDAsIDAuNDZdLFxuICAgIFwiMTk4XCI6IFswLCAwLjY4MzMzLCAwLjEyMDI4LCAwLCAwLjg4Mjc3XSxcbiAgICBcIjIxNlwiOiBbMC4wNDg2MSwgMC43MzE5NCwgMC4wOTQwMywgMCwgMC43NjY2Nl0sXG4gICAgXCIyMjNcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAuMTA1MTQsIDAsIDAuNTM2NjZdLFxuICAgIFwiMjMwXCI6IFswLCAwLjQzMDU2LCAwLjA3NTE0LCAwLCAwLjcxNTU1XSxcbiAgICBcIjI0OFwiOiBbMC4wOTcyMiwgMC41Mjc3OCwgMC4wOTE5NCwgMCwgMC41MTExMV0sXG4gICAgXCIzMzhcIjogWzAsIDAuNjgzMzMsIDAuMTIwMjgsIDAsIDAuOTg0OTldLFxuICAgIFwiMzM5XCI6IFswLCAwLjQzMDU2LCAwLjA3NTE0LCAwLCAwLjcxNTU1XSxcbiAgICBcIjcxMFwiOiBbMCwgMC42OTQ0NCwgMC4wNjY0NiwgMCwgMC41MTExMV0sXG4gICAgXCI3MTFcIjogWzAsIDAuNjI4NDcsIDAuMDgyOTUsIDAsIDAuNTExMTFdLFxuICAgIFwiNzEzXCI6IFswLCAwLjU2MTY3LCAwLjEwMzMzLCAwLCAwLjUxMTExXSxcbiAgICBcIjcxNFwiOiBbMCwgMC42OTQ0NCwgMC4wOTY5NCwgMCwgMC41MTExMV0sXG4gICAgXCI3MTVcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTExMTFdLFxuICAgIFwiNzI4XCI6IFswLCAwLjY5NDQ0LCAwLjEwODA2LCAwLCAwLjUxMTExXSxcbiAgICBcIjcyOVwiOiBbMCwgMC42Njc4NiwgMC4xMTc1MiwgMCwgMC4zMDY2N10sXG4gICAgXCI3MzBcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuODMxMjldLFxuICAgIFwiNzMyXCI6IFswLCAwLjY2Nzg2LCAwLjExNTg1LCAwLCAwLjUxMTExXSxcbiAgICBcIjczM1wiOiBbMCwgMC42OTQ0NCwgMC4xMjI1LCAwLCAwLjUxMTExXSxcbiAgICBcIjkxNVwiOiBbMCwgMC42ODMzMywgMC4xMzMwNSwgMCwgMC42MjcyMl0sXG4gICAgXCI5MTZcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuODE3NzddLFxuICAgIFwiOTIwXCI6IFswLCAwLjY4MzMzLCAwLjA5NDAzLCAwLCAwLjc2NjY2XSxcbiAgICBcIjkyM1wiOiBbMCwgMC42ODMzMywgMCwgMCwgMC42OTIyMl0sXG4gICAgXCI5MjZcIjogWzAsIDAuNjgzMzMsIDAuMTUyOTQsIDAsIDAuNjY0NDRdLFxuICAgIFwiOTI4XCI6IFswLCAwLjY4MzMzLCAwLjE2Mzg5LCAwLCAwLjc0MzMzXSxcbiAgICBcIjkzMVwiOiBbMCwgMC42ODMzMywgMC4xMjAyOCwgMCwgMC43MTU1NV0sXG4gICAgXCI5MzNcIjogWzAsIDAuNjgzMzMsIDAuMTExMTEsIDAsIDAuNzY2NjZdLFxuICAgIFwiOTM0XCI6IFswLCAwLjY4MzMzLCAwLjA1OTg2LCAwLCAwLjcxNTU1XSxcbiAgICBcIjkzNlwiOiBbMCwgMC42ODMzMywgMC4xMTExMSwgMCwgMC43NjY2Nl0sXG4gICAgXCI5MzdcIjogWzAsIDAuNjgzMzMsIDAuMTAyNTcsIDAsIDAuNzE1NTVdLFxuICAgIFwiODIxMVwiOiBbMCwgMC40MzA1NiwgMC4wOTIwOCwgMCwgMC41MTExMV0sXG4gICAgXCI4MjEyXCI6IFswLCAwLjQzMDU2LCAwLjA5MjA4LCAwLCAxLjAyMjIyXSxcbiAgICBcIjgyMTZcIjogWzAsIDAuNjk0NDQsIDAuMTI0MTcsIDAsIDAuMzA2NjddLFxuICAgIFwiODIxN1wiOiBbMCwgMC42OTQ0NCwgMC4xMjQxNywgMCwgMC4zMDY2N10sXG4gICAgXCI4MjIwXCI6IFswLCAwLjY5NDQ0LCAwLjE2ODUsIDAsIDAuNTE0NDRdLFxuICAgIFwiODIyMVwiOiBbMCwgMC42OTQ0NCwgMC4wNjk2MSwgMCwgMC41MTQ0NF0sXG4gICAgXCI4NDYzXCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjU0MDI4XVxuICB9LFxuICBcIk1haW4tUmVndWxhclwiOiB7XG4gICAgXCIzMlwiOiBbMCwgMCwgMCwgMCwgMC4yNV0sXG4gICAgXCIzM1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC4yNzc3OF0sXG4gICAgXCIzNFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41XSxcbiAgICBcIjM1XCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLCAwLCAwLjgzMzM0XSxcbiAgICBcIjM2XCI6IFswLjA1NTU2LCAwLjc1LCAwLCAwLCAwLjVdLFxuICAgIFwiMzdcIjogWzAuMDU1NTYsIDAuNzUsIDAsIDAsIDAuODMzMzRdLFxuICAgIFwiMzhcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiMzlcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuMjc3NzhdLFxuICAgIFwiNDBcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuMzg4ODldLFxuICAgIFwiNDFcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuMzg4ODldLFxuICAgIFwiNDJcIjogWzAsIDAuNzUsIDAsIDAsIDAuNV0sXG4gICAgXCI0M1wiOiBbMC4wODMzMywgMC41ODMzMywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI0NFwiOiBbMC4xOTQ0NCwgMC4xMDU1NiwgMCwgMCwgMC4yNzc3OF0sXG4gICAgXCI0NVwiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC4zMzMzM10sXG4gICAgXCI0NlwiOiBbMCwgMC4xMDU1NiwgMCwgMCwgMC4yNzc3OF0sXG4gICAgXCI0N1wiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC41XSxcbiAgICBcIjQ4XCI6IFswLCAwLjY0NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiNDlcIjogWzAsIDAuNjQ0NDQsIDAsIDAsIDAuNV0sXG4gICAgXCI1MFwiOiBbMCwgMC42NDQ0NCwgMCwgMCwgMC41XSxcbiAgICBcIjUxXCI6IFswLCAwLjY0NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiNTJcIjogWzAsIDAuNjQ0NDQsIDAsIDAsIDAuNV0sXG4gICAgXCI1M1wiOiBbMCwgMC42NDQ0NCwgMCwgMCwgMC41XSxcbiAgICBcIjU0XCI6IFswLCAwLjY0NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiNTVcIjogWzAsIDAuNjQ0NDQsIDAsIDAsIDAuNV0sXG4gICAgXCI1NlwiOiBbMCwgMC42NDQ0NCwgMCwgMCwgMC41XSxcbiAgICBcIjU3XCI6IFswLCAwLjY0NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiNThcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuMjc3NzhdLFxuICAgIFwiNTlcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAsIDAsIDAuMjc3NzhdLFxuICAgIFwiNjBcIjogWzAuMDM5MSwgMC41MzkxLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjYxXCI6IFstMC4xMzMxMywgMC4zNjY4NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI2MlwiOiBbMC4wMzkxLCAwLjUzOTEsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiNjNcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNDcyMjJdLFxuICAgIFwiNjRcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiNjVcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNzVdLFxuICAgIFwiNjZcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNzA4MzRdLFxuICAgIFwiNjdcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNzIyMjJdLFxuICAgIFwiNjhcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNzYzODldLFxuICAgIFwiNjlcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNjgwNTZdLFxuICAgIFwiNzBcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNjUyNzhdLFxuICAgIFwiNzFcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNzg0NzJdLFxuICAgIFwiNzJcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNzVdLFxuICAgIFwiNzNcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuMzYxMTFdLFxuICAgIFwiNzRcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNTEzODldLFxuICAgIFwiNzVcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiNzZcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNjI1XSxcbiAgICBcIjc3XCI6IFswLCAwLjY4MzMzLCAwLCAwLCAwLjkxNjY3XSxcbiAgICBcIjc4XCI6IFswLCAwLjY4MzMzLCAwLCAwLCAwLjc1XSxcbiAgICBcIjc5XCI6IFswLCAwLjY4MzMzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjgwXCI6IFswLCAwLjY4MzMzLCAwLCAwLCAwLjY4MDU2XSxcbiAgICBcIjgxXCI6IFswLjE5NDQ0LCAwLjY4MzMzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjgyXCI6IFswLCAwLjY4MzMzLCAwLCAwLCAwLjczNjExXSxcbiAgICBcIjgzXCI6IFswLCAwLjY4MzMzLCAwLCAwLCAwLjU1NTU2XSxcbiAgICBcIjg0XCI6IFswLCAwLjY4MzMzLCAwLCAwLCAwLjcyMjIyXSxcbiAgICBcIjg1XCI6IFswLCAwLjY4MzMzLCAwLCAwLCAwLjc1XSxcbiAgICBcIjg2XCI6IFswLCAwLjY4MzMzLCAwLjAxMzg5LCAwLCAwLjc1XSxcbiAgICBcIjg3XCI6IFswLCAwLjY4MzMzLCAwLjAxMzg5LCAwLCAxLjAyNzc4XSxcbiAgICBcIjg4XCI6IFswLCAwLjY4MzMzLCAwLCAwLCAwLjc1XSxcbiAgICBcIjg5XCI6IFswLCAwLjY4MzMzLCAwLjAyNSwgMCwgMC43NV0sXG4gICAgXCI5MFwiOiBbMCwgMC42ODMzMywgMCwgMCwgMC42MTExMV0sXG4gICAgXCI5MVwiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC4yNzc3OF0sXG4gICAgXCI5MlwiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC41XSxcbiAgICBcIjkzXCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjI3Nzc4XSxcbiAgICBcIjk0XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiOTVcIjogWzAuMzEsIDAuMTIwNTYsIDAuMDI3NzgsIDAsIDAuNV0sXG4gICAgXCI5N1wiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC41XSxcbiAgICBcIjk4XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU1NTU2XSxcbiAgICBcIjk5XCI6IFswLCAwLjQzMDU2LCAwLCAwLCAwLjQ0NDQ1XSxcbiAgICBcIjEwMFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NTU1Nl0sXG4gICAgXCIxMDFcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuNDQ0NDVdLFxuICAgIFwiMTAyXCI6IFswLCAwLjY5NDQ0LCAwLjA3Nzc4LCAwLCAwLjMwNTU2XSxcbiAgICBcIjEwM1wiOiBbMC4xOTQ0NCwgMC40MzA1NiwgMC4wMTM4OSwgMCwgMC41XSxcbiAgICBcIjEwNFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NTU1Nl0sXG4gICAgXCIxMDVcIjogWzAsIDAuNjY3ODYsIDAsIDAsIDAuMjc3NzhdLFxuICAgIFwiMTA2XCI6IFswLjE5NDQ0LCAwLjY2Nzg2LCAwLCAwLCAwLjMwNTU2XSxcbiAgICBcIjEwN1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41Mjc3OF0sXG4gICAgXCIxMDhcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuMjc3NzhdLFxuICAgIFwiMTA5XCI6IFswLCAwLjQzMDU2LCAwLCAwLCAwLjgzMzM0XSxcbiAgICBcIjExMFwiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC41NTU1Nl0sXG4gICAgXCIxMTFcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuNV0sXG4gICAgXCIxMTJcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAsIDAsIDAuNTU1NTZdLFxuICAgIFwiMTEzXCI6IFswLjE5NDQ0LCAwLjQzMDU2LCAwLCAwLCAwLjUyNzc4XSxcbiAgICBcIjExNFwiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC4zOTE2N10sXG4gICAgXCIxMTVcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuMzk0NDVdLFxuICAgIFwiMTE2XCI6IFswLCAwLjYxNTA4LCAwLCAwLCAwLjM4ODg5XSxcbiAgICBcIjExN1wiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC41NTU1Nl0sXG4gICAgXCIxMThcIjogWzAsIDAuNDMwNTYsIDAuMDEzODksIDAsIDAuNTI3NzhdLFxuICAgIFwiMTE5XCI6IFswLCAwLjQzMDU2LCAwLjAxMzg5LCAwLCAwLjcyMjIyXSxcbiAgICBcIjEyMFwiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC41Mjc3OF0sXG4gICAgXCIxMjFcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAuMDEzODksIDAsIDAuNTI3NzhdLFxuICAgIFwiMTIyXCI6IFswLCAwLjQzMDU2LCAwLCAwLCAwLjQ0NDQ1XSxcbiAgICBcIjEyM1wiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC41XSxcbiAgICBcIjEyNFwiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC4yNzc3OF0sXG4gICAgXCIxMjVcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNV0sXG4gICAgXCIxMjZcIjogWzAuMzUsIDAuMzE3ODYsIDAsIDAsIDAuNV0sXG4gICAgXCIxNjBcIjogWzAsIDAsIDAsIDAsIDAuMjVdLFxuICAgIFwiMTYzXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjc2OTA5XSxcbiAgICBcIjE2N1wiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMC40NDQ0NV0sXG4gICAgXCIxNjhcIjogWzAsIDAuNjY3ODYsIDAsIDAsIDAuNV0sXG4gICAgXCIxNzJcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiMTc2XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjc1XSxcbiAgICBcIjE3N1wiOiBbMC4wODMzMywgMC41ODMzMywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCIxODJcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDAuNjExMTFdLFxuICAgIFwiMTg0XCI6IFswLjE3MDE0LCAwLCAwLCAwLCAwLjQ0NDQ1XSxcbiAgICBcIjE5OFwiOiBbMCwgMC42ODMzMywgMCwgMCwgMC45MDI3OF0sXG4gICAgXCIyMTVcIjogWzAuMDgzMzMsIDAuNTgzMzMsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiMjE2XCI6IFswLjA0ODYxLCAwLjczMTk0LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjIyM1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41XSxcbiAgICBcIjIzMFwiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC43MjIyMl0sXG4gICAgXCIyNDdcIjogWzAuMDgzMzMsIDAuNTgzMzMsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiMjQ4XCI6IFswLjA5NzIyLCAwLjUyNzc4LCAwLCAwLCAwLjVdLFxuICAgIFwiMzA1XCI6IFswLCAwLjQzMDU2LCAwLCAwLCAwLjI3Nzc4XSxcbiAgICBcIjMzOFwiOiBbMCwgMC42ODMzMywgMCwgMCwgMS4wMTM4OV0sXG4gICAgXCIzMzlcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiNTY3XCI6IFswLjE5NDQ0LCAwLjQzMDU2LCAwLCAwLCAwLjMwNTU2XSxcbiAgICBcIjcxMFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41XSxcbiAgICBcIjcxMVwiOiBbMCwgMC42Mjg0NywgMCwgMCwgMC41XSxcbiAgICBcIjcxM1wiOiBbMCwgMC41Njc3OCwgMCwgMCwgMC41XSxcbiAgICBcIjcxNFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41XSxcbiAgICBcIjcxNVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41XSxcbiAgICBcIjcyOFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41XSxcbiAgICBcIjcyOVwiOiBbMCwgMC42Njc4NiwgMCwgMCwgMC4yNzc3OF0sXG4gICAgXCI3MzBcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzVdLFxuICAgIFwiNzMyXCI6IFswLCAwLjY2Nzg2LCAwLCAwLCAwLjVdLFxuICAgIFwiNzMzXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiOTE1XCI6IFswLCAwLjY4MzMzLCAwLCAwLCAwLjYyNV0sXG4gICAgXCI5MTZcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuODMzMzRdLFxuICAgIFwiOTIwXCI6IFswLCAwLjY4MzMzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjkyM1wiOiBbMCwgMC42ODMzMywgMCwgMCwgMC42OTQ0NV0sXG4gICAgXCI5MjZcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiOTI4XCI6IFswLCAwLjY4MzMzLCAwLCAwLCAwLjc1XSxcbiAgICBcIjkzMVwiOiBbMCwgMC42ODMzMywgMCwgMCwgMC43MjIyMl0sXG4gICAgXCI5MzNcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiOTM0XCI6IFswLCAwLjY4MzMzLCAwLCAwLCAwLjcyMjIyXSxcbiAgICBcIjkzNlwiOiBbMCwgMC42ODMzMywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI5MzdcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNzIyMjJdLFxuICAgIFwiODIxMVwiOiBbMCwgMC40MzA1NiwgMC4wMjc3OCwgMCwgMC41XSxcbiAgICBcIjgyMTJcIjogWzAsIDAuNDMwNTYsIDAuMDI3NzgsIDAsIDEuMF0sXG4gICAgXCI4MjE2XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjI3Nzc4XSxcbiAgICBcIjgyMTdcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuMjc3NzhdLFxuICAgIFwiODIyMFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41XSxcbiAgICBcIjgyMjFcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNV0sXG4gICAgXCI4MjI0XCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLCAwLCAwLjQ0NDQ1XSxcbiAgICBcIjgyMjVcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDAuNDQ0NDVdLFxuICAgIFwiODIzMFwiOiBbMCwgMC4xMjMsIDAsIDAsIDEuMTcyXSxcbiAgICBcIjgyNDJcIjogWzAsIDAuNTU1NTYsIDAsIDAsIDAuMjc1XSxcbiAgICBcIjg0MDdcIjogWzAsIDAuNzE0NDQsIDAuMTUzODIsIDAsIDAuNV0sXG4gICAgXCI4NDYzXCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjU0MDI4XSxcbiAgICBcIjg0NjVcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzIyMjJdLFxuICAgIFwiODQ2N1wiOiBbMCwgMC42OTQ0NCwgMCwgMC4xMTExMSwgMC40MTY2N10sXG4gICAgXCI4NDcyXCI6IFswLjE5NDQ0LCAwLjQzMDU2LCAwLCAwLjExMTExLCAwLjYzNjQ2XSxcbiAgICBcIjg0NzZcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzIyMjJdLFxuICAgIFwiODUwMVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC42MTExMV0sXG4gICAgXCI4NTkyXCI6IFstMC4xMzMxMywgMC4zNjY4NywgMCwgMCwgMS4wXSxcbiAgICBcIjg1OTNcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDAuNV0sXG4gICAgXCI4NTk0XCI6IFstMC4xMzMxMywgMC4zNjY4NywgMCwgMCwgMS4wXSxcbiAgICBcIjg1OTVcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDAuNV0sXG4gICAgXCI4NTk2XCI6IFstMC4xMzMxMywgMC4zNjY4NywgMCwgMCwgMS4wXSxcbiAgICBcIjg1OTdcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNV0sXG4gICAgXCI4NTk4XCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLCAwLCAxLjBdLFxuICAgIFwiODU5OVwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMS4wXSxcbiAgICBcIjg2MDBcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDEuMF0sXG4gICAgXCI4NjAxXCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLCAwLCAxLjBdLFxuICAgIFwiODYxNFwiOiBbMC4wMTEsIDAuNTExLCAwLCAwLCAxLjBdLFxuICAgIFwiODYxN1wiOiBbMC4wMTEsIDAuNTExLCAwLCAwLCAxLjEyNl0sXG4gICAgXCI4NjE4XCI6IFswLjAxMSwgMC41MTEsIDAsIDAsIDEuMTI2XSxcbiAgICBcIjg2MzZcIjogWy0wLjEzMzEzLCAwLjM2Njg3LCAwLCAwLCAxLjBdLFxuICAgIFwiODYzN1wiOiBbLTAuMTMzMTMsIDAuMzY2ODcsIDAsIDAsIDEuMF0sXG4gICAgXCI4NjQwXCI6IFstMC4xMzMxMywgMC4zNjY4NywgMCwgMCwgMS4wXSxcbiAgICBcIjg2NDFcIjogWy0wLjEzMzEzLCAwLjM2Njg3LCAwLCAwLCAxLjBdLFxuICAgIFwiODY1MlwiOiBbMC4wMTEsIDAuNjcxLCAwLCAwLCAxLjBdLFxuICAgIFwiODY1NlwiOiBbLTAuMTMzMTMsIDAuMzY2ODcsIDAsIDAsIDEuMF0sXG4gICAgXCI4NjU3XCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLCAwLCAwLjYxMTExXSxcbiAgICBcIjg2NThcIjogWy0wLjEzMzEzLCAwLjM2Njg3LCAwLCAwLCAxLjBdLFxuICAgIFwiODY1OVwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMC42MTExMV0sXG4gICAgXCI4NjYwXCI6IFstMC4xMzMxMywgMC4zNjY4NywgMCwgMCwgMS4wXSxcbiAgICBcIjg2NjFcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNjExMTFdLFxuICAgIFwiODcwNFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NTU1Nl0sXG4gICAgXCI4NzA2XCI6IFswLCAwLjY5NDQ0LCAwLjA1NTU2LCAwLjA4MzM0LCAwLjUzMDldLFxuICAgIFwiODcwN1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NTU1Nl0sXG4gICAgXCI4NzA5XCI6IFswLjA1NTU2LCAwLjc1LCAwLCAwLCAwLjVdLFxuICAgIFwiODcxMVwiOiBbMCwgMC42ODMzMywgMCwgMCwgMC44MzMzNF0sXG4gICAgXCI4NzEyXCI6IFswLjAzOTEsIDAuNTM5MSwgMCwgMCwgMC42NjY2N10sXG4gICAgXCI4NzE1XCI6IFswLjAzOTEsIDAuNTM5MSwgMCwgMCwgMC42NjY2N10sXG4gICAgXCI4NzIyXCI6IFswLjA4MzMzLCAwLjU4MzMzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg3MjNcIjogWzAuMDgzMzMsIDAuNTgzMzMsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODcyNVwiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC41XSxcbiAgICBcIjg3MjZcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNV0sXG4gICAgXCI4NzI3XCI6IFstMC4wMzQ3MiwgMC40NjUyOCwgMCwgMCwgMC41XSxcbiAgICBcIjg3MjhcIjogWy0wLjA1NTU1LCAwLjQ0NDQ1LCAwLCAwLCAwLjVdLFxuICAgIFwiODcyOVwiOiBbLTAuMDU1NTUsIDAuNDQ0NDUsIDAsIDAsIDAuNV0sXG4gICAgXCI4NzMwXCI6IFswLjIsIDAuOCwgMCwgMCwgMC44MzMzNF0sXG4gICAgXCI4NzMzXCI6IFswLCAwLjQzMDU2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg3MzRcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDEuMF0sXG4gICAgXCI4NzM2XCI6IFswLCAwLjY5MjI0LCAwLCAwLCAwLjcyMjIyXSxcbiAgICBcIjg3MzlcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuMjc3NzhdLFxuICAgIFwiODc0MVwiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC41XSxcbiAgICBcIjg3NDNcIjogWzAsIDAuNTU1NTYsIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiODc0NFwiOiBbMCwgMC41NTU1NiwgMCwgMCwgMC42NjY2N10sXG4gICAgXCI4NzQ1XCI6IFswLCAwLjU1NTU2LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjg3NDZcIjogWzAsIDAuNTU1NTYsIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiODc0N1wiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMC4xMTExMSwgMCwgMC40MTY2N10sXG4gICAgXCI4NzY0XCI6IFstMC4xMzMxMywgMC4zNjY4NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4NzY4XCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLCAwLCAwLjI3Nzc4XSxcbiAgICBcIjg3NzFcIjogWy0wLjAzNjI1LCAwLjQ2Mzc1LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg3NzNcIjogWy0wLjAyMiwgMC41ODksIDAsIDAsIDAuNzc4XSxcbiAgICBcIjg3NzZcIjogWy0wLjAxNjg4LCAwLjQ4MzEyLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg3ODFcIjogWy0wLjAzNjI1LCAwLjQ2Mzc1LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg3ODRcIjogWy0wLjEzMywgMC42NzMsIDAsIDAsIDAuNzc4XSxcbiAgICBcIjg4MDFcIjogWy0wLjAzNjI1LCAwLjQ2Mzc1LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4MDRcIjogWzAuMTM1OTcsIDAuNjM1OTcsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODgwNVwiOiBbMC4xMzU5NywgMC42MzU5NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODEwXCI6IFswLjAzOTEsIDAuNTM5MSwgMCwgMCwgMS4wXSxcbiAgICBcIjg4MTFcIjogWzAuMDM5MSwgMC41MzkxLCAwLCAwLCAxLjBdLFxuICAgIFwiODgyNlwiOiBbMC4wMzkxLCAwLjUzOTEsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODgyN1wiOiBbMC4wMzkxLCAwLjUzOTEsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODgzNFwiOiBbMC4wMzkxLCAwLjUzOTEsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODgzNVwiOiBbMC4wMzkxLCAwLjUzOTEsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODgzOFwiOiBbMC4xMzU5NywgMC42MzU5NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODM5XCI6IFswLjEzNTk3LCAwLjYzNTk3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4NDZcIjogWzAsIDAuNTU1NTYsIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiODg0OVwiOiBbMC4xMzU5NywgMC42MzU5NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODUwXCI6IFswLjEzNTk3LCAwLjYzNTk3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4NTFcIjogWzAsIDAuNTU1NTYsIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiODg1MlwiOiBbMCwgMC41NTU1NiwgMCwgMCwgMC42NjY2N10sXG4gICAgXCI4ODUzXCI6IFswLjA4MzMzLCAwLjU4MzMzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4NTRcIjogWzAuMDgzMzMsIDAuNTgzMzMsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODg1NVwiOiBbMC4wODMzMywgMC41ODMzMywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODU2XCI6IFswLjA4MzMzLCAwLjU4MzMzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4NTdcIjogWzAuMDgzMzMsIDAuNTgzMzMsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODg2NlwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC42MTExMV0sXG4gICAgXCI4ODY3XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjYxMTExXSxcbiAgICBcIjg4NjhcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODg2OVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODcyXCI6IFswLjI0OSwgMC43NSwgMCwgMCwgMC44NjddLFxuICAgIFwiODkwMFwiOiBbLTAuMDU1NTUsIDAuNDQ0NDUsIDAsIDAsIDAuNV0sXG4gICAgXCI4OTAxXCI6IFstMC4wNTU1NSwgMC40NDQ0NSwgMCwgMCwgMC4yNzc3OF0sXG4gICAgXCI4OTAyXCI6IFstMC4wMzQ3MiwgMC40NjUyOCwgMCwgMCwgMC41XSxcbiAgICBcIjg5MDRcIjogWzAuMDA1LCAwLjUwNSwgMCwgMCwgMC45XSxcbiAgICBcIjg5NDJcIjogWzAuMDMsIDAuOTAzLCAwLCAwLCAwLjI3OF0sXG4gICAgXCI4OTQzXCI6IFstMC4xOSwgMC4zMTMsIDAsIDAsIDEuMTcyXSxcbiAgICBcIjg5NDVcIjogWy0wLjEsIDAuODIzLCAwLCAwLCAxLjI4Ml0sXG4gICAgXCI4OTY4XCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjQ0NDQ1XSxcbiAgICBcIjg5NjlcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNDQ0NDVdLFxuICAgIFwiODk3MFwiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC40NDQ0NV0sXG4gICAgXCI4OTcxXCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjQ0NDQ1XSxcbiAgICBcIjg5OTRcIjogWy0wLjE0MjM2LCAwLjM1NzY0LCAwLCAwLCAxLjBdLFxuICAgIFwiODk5NVwiOiBbLTAuMTQyMzYsIDAuMzU3NjQsIDAsIDAsIDEuMF0sXG4gICAgXCI5MTM2XCI6IFswLjI0NCwgMC43NDQsIDAsIDAsIDAuNDEyXSxcbiAgICBcIjkxMzdcIjogWzAuMjQ0LCAwLjc0NSwgMCwgMCwgMC40MTJdLFxuICAgIFwiOTY1MVwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMC44ODg4OV0sXG4gICAgXCI5NjU3XCI6IFstMC4wMzQ3MiwgMC40NjUyOCwgMCwgMCwgMC41XSxcbiAgICBcIjk2NjFcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDAuODg4ODldLFxuICAgIFwiOTY2N1wiOiBbLTAuMDM0NzIsIDAuNDY1MjgsIDAsIDAsIDAuNV0sXG4gICAgXCI5NzExXCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLCAwLCAxLjBdLFxuICAgIFwiOTgyNFwiOiBbMC4xMjk2MywgMC42OTQ0NCwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI5ODI1XCI6IFswLjEyOTYzLCAwLjY5NDQ0LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjk4MjZcIjogWzAuMTI5NjMsIDAuNjk0NDQsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiOTgyN1wiOiBbMC4xMjk2MywgMC42OTQ0NCwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI5ODM3XCI6IFswLCAwLjc1LCAwLCAwLCAwLjM4ODg5XSxcbiAgICBcIjk4MzhcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDAuMzg4ODldLFxuICAgIFwiOTgzOVwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMC4zODg4OV0sXG4gICAgXCIxMDIxNlwiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC4zODg4OV0sXG4gICAgXCIxMDIxN1wiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC4zODg4OV0sXG4gICAgXCIxMDIyMlwiOiBbMC4yNDQsIDAuNzQ0LCAwLCAwLCAwLjQxMl0sXG4gICAgXCIxMDIyM1wiOiBbMC4yNDQsIDAuNzQ1LCAwLCAwLCAwLjQxMl0sXG4gICAgXCIxMDIyOVwiOiBbMC4wMTEsIDAuNTExLCAwLCAwLCAxLjYwOV0sXG4gICAgXCIxMDIzMFwiOiBbMC4wMTEsIDAuNTExLCAwLCAwLCAxLjYzOF0sXG4gICAgXCIxMDIzMVwiOiBbMC4wMTEsIDAuNTExLCAwLCAwLCAxLjg1OV0sXG4gICAgXCIxMDIzMlwiOiBbMC4wMjQsIDAuNTI1LCAwLCAwLCAxLjYwOV0sXG4gICAgXCIxMDIzM1wiOiBbMC4wMjQsIDAuNTI1LCAwLCAwLCAxLjYzOF0sXG4gICAgXCIxMDIzNFwiOiBbMC4wMjQsIDAuNTI1LCAwLCAwLCAxLjg1OF0sXG4gICAgXCIxMDIzNlwiOiBbMC4wMTEsIDAuNTExLCAwLCAwLCAxLjYzOF0sXG4gICAgXCIxMDgxNVwiOiBbMCwgMC42ODMzMywgMCwgMCwgMC43NV0sXG4gICAgXCIxMDkyN1wiOiBbMC4xMzU5NywgMC42MzU5NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCIxMDkyOFwiOiBbMC4xMzU5NywgMC42MzU5NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI1NzM3NlwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMF1cbiAgfSxcbiAgXCJNYXRoLUJvbGRJdGFsaWNcIjoge1xuICAgIFwiMzJcIjogWzAsIDAsIDAsIDAsIDAuMjVdLFxuICAgIFwiNDhcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjQ5XCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjU3NV0sXG4gICAgXCI1MFwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC41NzVdLFxuICAgIFwiNTFcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjUyXCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLCAwLCAwLjU3NV0sXG4gICAgXCI1M1wiOiBbMC4xOTQ0NCwgMC40NDQ0NCwgMCwgMCwgMC41NzVdLFxuICAgIFwiNTRcIjogWzAsIDAuNjQ0NDQsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjU1XCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLCAwLCAwLjU3NV0sXG4gICAgXCI1NlwiOiBbMCwgMC42NDQ0NCwgMCwgMCwgMC41NzVdLFxuICAgIFwiNTdcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjY1XCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjg2OTQ0XSxcbiAgICBcIjY2XCI6IFswLCAwLjY4NjExLCAwLjA0ODM1LCAwLCAwLjg2NjRdLFxuICAgIFwiNjdcIjogWzAsIDAuNjg2MTEsIDAuMDY5NzksIDAsIDAuODE2OTRdLFxuICAgIFwiNjhcIjogWzAsIDAuNjg2MTEsIDAuMDMxOTQsIDAsIDAuOTM4MTJdLFxuICAgIFwiNjlcIjogWzAsIDAuNjg2MTEsIDAuMDU0NTEsIDAsIDAuODEwMDddLFxuICAgIFwiNzBcIjogWzAsIDAuNjg2MTEsIDAuMTU5NzIsIDAsIDAuNjg4ODldLFxuICAgIFwiNzFcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuODg2NzNdLFxuICAgIFwiNzJcIjogWzAsIDAuNjg2MTEsIDAuMDgyMjksIDAsIDAuOTgyMjldLFxuICAgIFwiNzNcIjogWzAsIDAuNjg2MTEsIDAuMDc3NzgsIDAsIDAuNTExMTFdLFxuICAgIFwiNzRcIjogWzAsIDAuNjg2MTEsIDAuMTAwNjksIDAsIDAuNjMxMjVdLFxuICAgIFwiNzVcIjogWzAsIDAuNjg2MTEsIDAuMDY5NzksIDAsIDAuOTcxMThdLFxuICAgIFwiNzZcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuNzU1NTVdLFxuICAgIFwiNzdcIjogWzAsIDAuNjg2MTEsIDAuMTE0MjQsIDAsIDEuMTQyMDFdLFxuICAgIFwiNzhcIjogWzAsIDAuNjg2MTEsIDAuMTE0MjQsIDAsIDAuOTUwMzRdLFxuICAgIFwiNzlcIjogWzAsIDAuNjg2MTEsIDAuMDMxOTQsIDAsIDAuODM2NjZdLFxuICAgIFwiODBcIjogWzAsIDAuNjg2MTEsIDAuMTU5NzIsIDAsIDAuNzIzMDldLFxuICAgIFwiODFcIjogWzAuMTk0NDQsIDAuNjg2MTEsIDAsIDAsIDAuODY4NjFdLFxuICAgIFwiODJcIjogWzAsIDAuNjg2MTEsIDAuMDA0MjEsIDAsIDAuODcyMzVdLFxuICAgIFwiODNcIjogWzAsIDAuNjg2MTEsIDAuMDUzODIsIDAsIDAuNjkyNzFdLFxuICAgIFwiODRcIjogWzAsIDAuNjg2MTEsIDAuMTU5NzIsIDAsIDAuNjM2NjNdLFxuICAgIFwiODVcIjogWzAsIDAuNjg2MTEsIDAuMTE0MjQsIDAsIDAuODAwMjddLFxuICAgIFwiODZcIjogWzAsIDAuNjg2MTEsIDAuMjU1NTUsIDAsIDAuNjc3NzhdLFxuICAgIFwiODdcIjogWzAsIDAuNjg2MTEsIDAuMTU5NzIsIDAsIDEuMDkzMDVdLFxuICAgIFwiODhcIjogWzAsIDAuNjg2MTEsIDAuMDc3NzgsIDAsIDAuOTQ3MjJdLFxuICAgIFwiODlcIjogWzAsIDAuNjg2MTEsIDAuMjU1NTUsIDAsIDAuNjc0NThdLFxuICAgIFwiOTBcIjogWzAsIDAuNjg2MTEsIDAuMDY5NzksIDAsIDAuNzcyNTddLFxuICAgIFwiOTdcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuNjMyODddLFxuICAgIFwiOThcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTIwODNdLFxuICAgIFwiOTlcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuNTEzNDJdLFxuICAgIFwiMTAwXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjYwOTcyXSxcbiAgICBcIjEwMVwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC41NTM2MV0sXG4gICAgXCIxMDJcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAuMTEwNDIsIDAsIDAuNTY4MDZdLFxuICAgIFwiMTAzXCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLjAzNzA0LCAwLCAwLjU0NDldLFxuICAgIFwiMTA0XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjY2NzU5XSxcbiAgICBcIjEwNVwiOiBbMCwgMC42OTMyNiwgMCwgMCwgMC40MDQ4XSxcbiAgICBcIjEwNlwiOiBbMC4xOTQ0NCwgMC42OTMyNiwgMC4wNjIyLCAwLCAwLjQ3MDgzXSxcbiAgICBcIjEwN1wiOiBbMCwgMC42OTQ0NCwgMC4wMTg1MiwgMCwgMC42MDM3XSxcbiAgICBcIjEwOFwiOiBbMCwgMC42OTQ0NCwgMC4wMDg4LCAwLCAwLjM0ODE1XSxcbiAgICBcIjEwOVwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMS4wMzI0XSxcbiAgICBcIjExMFwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC43MTI5Nl0sXG4gICAgXCIxMTFcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuNTg0NzJdLFxuICAgIFwiMTEyXCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLCAwLCAwLjYwMDkyXSxcbiAgICBcIjExM1wiOiBbMC4xOTQ0NCwgMC40NDQ0NCwgMC4wMzcwNCwgMCwgMC41NDIxM10sXG4gICAgXCIxMTRcIjogWzAsIDAuNDQ0NDQsIDAuMDMxOTQsIDAsIDAuNTI4N10sXG4gICAgXCIxMTVcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuNTMxMjVdLFxuICAgIFwiMTE2XCI6IFswLCAwLjYzNDkyLCAwLCAwLCAwLjQxNTI4XSxcbiAgICBcIjExN1wiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC42ODEwMl0sXG4gICAgXCIxMThcIjogWzAsIDAuNDQ0NDQsIDAuMDM3MDQsIDAsIDAuNTY2NjZdLFxuICAgIFwiMTE5XCI6IFswLCAwLjQ0NDQ0LCAwLjAyNzc4LCAwLCAwLjgzMTQ4XSxcbiAgICBcIjEyMFwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC42NTkwM10sXG4gICAgXCIxMjFcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAuMDM3MDQsIDAsIDAuNTkwMjhdLFxuICAgIFwiMTIyXCI6IFswLCAwLjQ0NDQ0LCAwLjA0MjEzLCAwLCAwLjU1NTA5XSxcbiAgICBcIjE2MFwiOiBbMCwgMCwgMCwgMCwgMC4yNV0sXG4gICAgXCI5MTVcIjogWzAsIDAuNjg2MTEsIDAuMTU5NzIsIDAsIDAuNjU2OTRdLFxuICAgIFwiOTE2XCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjk1ODMzXSxcbiAgICBcIjkyMFwiOiBbMCwgMC42ODYxMSwgMC4wMzE5NCwgMCwgMC44NjcyMl0sXG4gICAgXCI5MjNcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuODA1NTVdLFxuICAgIFwiOTI2XCI6IFswLCAwLjY4NjExLCAwLjA3NDU4LCAwLCAwLjg0MTI1XSxcbiAgICBcIjkyOFwiOiBbMCwgMC42ODYxMSwgMC4wODIyOSwgMCwgMC45ODIyOV0sXG4gICAgXCI5MzFcIjogWzAsIDAuNjg2MTEsIDAuMDU0NTEsIDAsIDAuODg1MDddLFxuICAgIFwiOTMzXCI6IFswLCAwLjY4NjExLCAwLjE1OTcyLCAwLCAwLjY3MDgzXSxcbiAgICBcIjkzNFwiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC43NjY2Nl0sXG4gICAgXCI5MzZcIjogWzAsIDAuNjg2MTEsIDAuMTE2NTMsIDAsIDAuNzE0MDJdLFxuICAgIFwiOTM3XCI6IFswLCAwLjY4NjExLCAwLjA0ODM1LCAwLCAwLjg3ODldLFxuICAgIFwiOTQ1XCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjc2MDY0XSxcbiAgICBcIjk0NlwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMC4wMzQwMywgMCwgMC42NTk3Ml0sXG4gICAgXCI5NDdcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAuMDYzODksIDAsIDAuNTkwMDNdLFxuICAgIFwiOTQ4XCI6IFswLCAwLjY5NDQ0LCAwLjAzODE5LCAwLCAwLjUyMjIyXSxcbiAgICBcIjk0OVwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC41Mjg4Ml0sXG4gICAgXCI5NTBcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAuMDYyMTUsIDAsIDAuNTA4MzNdLFxuICAgIFwiOTUxXCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLjAzNzA0LCAwLCAwLjZdLFxuICAgIFwiOTUyXCI6IFswLCAwLjY5NDQ0LCAwLjAzMTk0LCAwLCAwLjU2MThdLFxuICAgIFwiOTUzXCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjQxMjA0XSxcbiAgICBcIjk1NFwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC42Njc1OV0sXG4gICAgXCI5NTVcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjcwODNdLFxuICAgIFwiOTU2XCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLCAwLCAwLjcwNzg3XSxcbiAgICBcIjk1N1wiOiBbMCwgMC40NDQ0NCwgMC4wNjg5OCwgMCwgMC41NzY4NV0sXG4gICAgXCI5NThcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAuMDMwMjEsIDAsIDAuNTA4MzNdLFxuICAgIFwiOTU5XCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjU4NDcyXSxcbiAgICBcIjk2MFwiOiBbMCwgMC40NDQ0NCwgMC4wMzcwNCwgMCwgMC42ODI0MV0sXG4gICAgXCI5NjFcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAsIDAsIDAuNjExOF0sXG4gICAgXCI5NjJcIjogWzAuMDk3MjIsIDAuNDQ0NDQsIDAuMDc5MTcsIDAsIDAuNDIzNjFdLFxuICAgIFwiOTYzXCI6IFswLCAwLjQ0NDQ0LCAwLjAzNzA0LCAwLCAwLjY4NTg4XSxcbiAgICBcIjk2NFwiOiBbMCwgMC40NDQ0NCwgMC4xMzQ3MiwgMCwgMC41MjA4M10sXG4gICAgXCI5NjVcIjogWzAsIDAuNDQ0NDQsIDAuMDM3MDQsIDAsIDAuNjMwNTVdLFxuICAgIFwiOTY2XCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLCAwLCAwLjc0NzIyXSxcbiAgICBcIjk2N1wiOiBbMC4xOTQ0NCwgMC40NDQ0NCwgMCwgMCwgMC43MTgwNV0sXG4gICAgXCI5NjhcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAuMDM3MDQsIDAsIDAuNzU4MzNdLFxuICAgIFwiOTY5XCI6IFswLCAwLjQ0NDQ0LCAwLjAzNzA0LCAwLCAwLjcxNzgyXSxcbiAgICBcIjk3N1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC42OTE1NV0sXG4gICAgXCI5ODFcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDAuNzEyNV0sXG4gICAgXCI5ODJcIjogWzAsIDAuNDQ0NDQsIDAuMDMxOTQsIDAsIDAuOTc1XSxcbiAgICBcIjEwMDlcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAsIDAsIDAuNjExOF0sXG4gICAgXCIxMDEzXCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjQ4MzMzXSxcbiAgICBcIjU3NjQ5XCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjM5MzUyXSxcbiAgICBcIjU3OTExXCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLCAwLCAwLjQzODg5XVxuICB9LFxuICBcIk1hdGgtSXRhbGljXCI6IHtcbiAgICBcIjMyXCI6IFswLCAwLCAwLCAwLCAwLjI1XSxcbiAgICBcIjQ4XCI6IFswLCAwLjQzMDU2LCAwLCAwLCAwLjVdLFxuICAgIFwiNDlcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuNV0sXG4gICAgXCI1MFwiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC41XSxcbiAgICBcIjUxXCI6IFswLjE5NDQ0LCAwLjQzMDU2LCAwLCAwLCAwLjVdLFxuICAgIFwiNTJcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAsIDAsIDAuNV0sXG4gICAgXCI1M1wiOiBbMC4xOTQ0NCwgMC40MzA1NiwgMCwgMCwgMC41XSxcbiAgICBcIjU0XCI6IFswLCAwLjY0NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiNTVcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAsIDAsIDAuNV0sXG4gICAgXCI1NlwiOiBbMCwgMC42NDQ0NCwgMCwgMCwgMC41XSxcbiAgICBcIjU3XCI6IFswLjE5NDQ0LCAwLjQzMDU2LCAwLCAwLCAwLjVdLFxuICAgIFwiNjVcIjogWzAsIDAuNjgzMzMsIDAsIDAuMTM4ODksIDAuNzVdLFxuICAgIFwiNjZcIjogWzAsIDAuNjgzMzMsIDAuMDUwMTcsIDAuMDgzMzQsIDAuNzU4NTFdLFxuICAgIFwiNjdcIjogWzAsIDAuNjgzMzMsIDAuMDcxNTMsIDAuMDgzMzQsIDAuNzE0NzJdLFxuICAgIFwiNjhcIjogWzAsIDAuNjgzMzMsIDAuMDI3NzgsIDAuMDU1NTYsIDAuODI3OTJdLFxuICAgIFwiNjlcIjogWzAsIDAuNjgzMzMsIDAuMDU3NjQsIDAuMDgzMzQsIDAuNzM4Ml0sXG4gICAgXCI3MFwiOiBbMCwgMC42ODMzMywgMC4xMzg4OSwgMC4wODMzNCwgMC42NDMwNl0sXG4gICAgXCI3MVwiOiBbMCwgMC42ODMzMywgMCwgMC4wODMzNCwgMC43ODYyNV0sXG4gICAgXCI3MlwiOiBbMCwgMC42ODMzMywgMC4wODEyNSwgMC4wNTU1NiwgMC44MzEyNV0sXG4gICAgXCI3M1wiOiBbMCwgMC42ODMzMywgMC4wNzg0NywgMC4xMTExMSwgMC40Mzk1OF0sXG4gICAgXCI3NFwiOiBbMCwgMC42ODMzMywgMC4wOTYxOCwgMC4xNjY2NywgMC41NTQ1MV0sXG4gICAgXCI3NVwiOiBbMCwgMC42ODMzMywgMC4wNzE1MywgMC4wNTU1NiwgMC44NDkzMV0sXG4gICAgXCI3NlwiOiBbMCwgMC42ODMzMywgMCwgMC4wMjc3OCwgMC42ODA1Nl0sXG4gICAgXCI3N1wiOiBbMCwgMC42ODMzMywgMC4xMDkwMywgMC4wODMzNCwgMC45NzAxNF0sXG4gICAgXCI3OFwiOiBbMCwgMC42ODMzMywgMC4xMDkwMywgMC4wODMzNCwgMC44MDM0N10sXG4gICAgXCI3OVwiOiBbMCwgMC42ODMzMywgMC4wMjc3OCwgMC4wODMzNCwgMC43NjI3OF0sXG4gICAgXCI4MFwiOiBbMCwgMC42ODMzMywgMC4xMzg4OSwgMC4wODMzNCwgMC42NDIwMV0sXG4gICAgXCI4MVwiOiBbMC4xOTQ0NCwgMC42ODMzMywgMCwgMC4wODMzNCwgMC43OTA1Nl0sXG4gICAgXCI4MlwiOiBbMCwgMC42ODMzMywgMC4wMDc3MywgMC4wODMzNCwgMC43NTkyOV0sXG4gICAgXCI4M1wiOiBbMCwgMC42ODMzMywgMC4wNTc2NCwgMC4wODMzNCwgMC42MTMyXSxcbiAgICBcIjg0XCI6IFswLCAwLjY4MzMzLCAwLjEzODg5LCAwLjA4MzM0LCAwLjU4NDM4XSxcbiAgICBcIjg1XCI6IFswLCAwLjY4MzMzLCAwLjEwOTAzLCAwLjAyNzc4LCAwLjY4Mjc4XSxcbiAgICBcIjg2XCI6IFswLCAwLjY4MzMzLCAwLjIyMjIyLCAwLCAwLjU4MzMzXSxcbiAgICBcIjg3XCI6IFswLCAwLjY4MzMzLCAwLjEzODg5LCAwLCAwLjk0NDQ1XSxcbiAgICBcIjg4XCI6IFswLCAwLjY4MzMzLCAwLjA3ODQ3LCAwLjA4MzM0LCAwLjgyODQ3XSxcbiAgICBcIjg5XCI6IFswLCAwLjY4MzMzLCAwLjIyMjIyLCAwLCAwLjU4MDU2XSxcbiAgICBcIjkwXCI6IFswLCAwLjY4MzMzLCAwLjA3MTUzLCAwLjA4MzM0LCAwLjY4MjY0XSxcbiAgICBcIjk3XCI6IFswLCAwLjQzMDU2LCAwLCAwLCAwLjUyODU5XSxcbiAgICBcIjk4XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjQyOTE3XSxcbiAgICBcIjk5XCI6IFswLCAwLjQzMDU2LCAwLCAwLjA1NTU2LCAwLjQzMjc2XSxcbiAgICBcIjEwMFwiOiBbMCwgMC42OTQ0NCwgMCwgMC4xNjY2NywgMC41MjA0OV0sXG4gICAgXCIxMDFcIjogWzAsIDAuNDMwNTYsIDAsIDAuMDU1NTYsIDAuNDY1NjNdLFxuICAgIFwiMTAyXCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLjEwNzY0LCAwLjE2NjY3LCAwLjQ4OTU5XSxcbiAgICBcIjEwM1wiOiBbMC4xOTQ0NCwgMC40MzA1NiwgMC4wMzU4OCwgMC4wMjc3OCwgMC40NzY5N10sXG4gICAgXCIxMDRcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTc2MTZdLFxuICAgIFwiMTA1XCI6IFswLCAwLjY1OTUyLCAwLCAwLCAwLjM0NDUxXSxcbiAgICBcIjEwNlwiOiBbMC4xOTQ0NCwgMC42NTk1MiwgMC4wNTcyNCwgMCwgMC40MTE4MV0sXG4gICAgXCIxMDdcIjogWzAsIDAuNjk0NDQsIDAuMDMxNDgsIDAsIDAuNTIwNl0sXG4gICAgXCIxMDhcIjogWzAsIDAuNjk0NDQsIDAuMDE5NjgsIDAuMDgzMzQsIDAuMjk4MzhdLFxuICAgIFwiMTA5XCI6IFswLCAwLjQzMDU2LCAwLCAwLCAwLjg3ODAxXSxcbiAgICBcIjExMFwiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC42MDAyM10sXG4gICAgXCIxMTFcIjogWzAsIDAuNDMwNTYsIDAsIDAuMDU1NTYsIDAuNDg0NzJdLFxuICAgIFwiMTEyXCI6IFswLjE5NDQ0LCAwLjQzMDU2LCAwLCAwLjA4MzM0LCAwLjUwMzEzXSxcbiAgICBcIjExM1wiOiBbMC4xOTQ0NCwgMC40MzA1NiwgMC4wMzU4OCwgMC4wODMzNCwgMC40NDY0MV0sXG4gICAgXCIxMTRcIjogWzAsIDAuNDMwNTYsIDAuMDI3NzgsIDAuMDU1NTYsIDAuNDUxMTZdLFxuICAgIFwiMTE1XCI6IFswLCAwLjQzMDU2LCAwLCAwLjA1NTU2LCAwLjQ2ODc1XSxcbiAgICBcIjExNlwiOiBbMCwgMC42MTUwOCwgMCwgMC4wODMzNCwgMC4zNjExMV0sXG4gICAgXCIxMTdcIjogWzAsIDAuNDMwNTYsIDAsIDAuMDI3NzgsIDAuNTcyNDZdLFxuICAgIFwiMTE4XCI6IFswLCAwLjQzMDU2LCAwLjAzNTg4LCAwLjAyNzc4LCAwLjQ4NDcyXSxcbiAgICBcIjExOVwiOiBbMCwgMC40MzA1NiwgMC4wMjY5MSwgMC4wODMzNCwgMC43MTU5Ml0sXG4gICAgXCIxMjBcIjogWzAsIDAuNDMwNTYsIDAsIDAuMDI3NzgsIDAuNTcxNTNdLFxuICAgIFwiMTIxXCI6IFswLjE5NDQ0LCAwLjQzMDU2LCAwLjAzNTg4LCAwLjA1NTU2LCAwLjQ5MDI4XSxcbiAgICBcIjEyMlwiOiBbMCwgMC40MzA1NiwgMC4wNDM5OCwgMC4wNTU1NiwgMC40NjUwNV0sXG4gICAgXCIxNjBcIjogWzAsIDAsIDAsIDAsIDAuMjVdLFxuICAgIFwiOTE1XCI6IFswLCAwLjY4MzMzLCAwLjEzODg5LCAwLjA4MzM0LCAwLjYxNTI4XSxcbiAgICBcIjkxNlwiOiBbMCwgMC42ODMzMywgMCwgMC4xNjY2NywgMC44MzMzNF0sXG4gICAgXCI5MjBcIjogWzAsIDAuNjgzMzMsIDAuMDI3NzgsIDAuMDgzMzQsIDAuNzYyNzhdLFxuICAgIFwiOTIzXCI6IFswLCAwLjY4MzMzLCAwLCAwLjE2NjY3LCAwLjY5NDQ1XSxcbiAgICBcIjkyNlwiOiBbMCwgMC42ODMzMywgMC4wNzU2OSwgMC4wODMzNCwgMC43NDIzNl0sXG4gICAgXCI5MjhcIjogWzAsIDAuNjgzMzMsIDAuMDgxMjUsIDAuMDU1NTYsIDAuODMxMjVdLFxuICAgIFwiOTMxXCI6IFswLCAwLjY4MzMzLCAwLjA1NzY0LCAwLjA4MzM0LCAwLjc3OTg2XSxcbiAgICBcIjkzM1wiOiBbMCwgMC42ODMzMywgMC4xMzg4OSwgMC4wNTU1NiwgMC41ODMzM10sXG4gICAgXCI5MzRcIjogWzAsIDAuNjgzMzMsIDAsIDAuMDgzMzQsIDAuNjY2NjddLFxuICAgIFwiOTM2XCI6IFswLCAwLjY4MzMzLCAwLjExLCAwLjA1NTU2LCAwLjYxMjIyXSxcbiAgICBcIjkzN1wiOiBbMCwgMC42ODMzMywgMC4wNTAxNywgMC4wODMzNCwgMC43NzI0XSxcbiAgICBcIjk0NVwiOiBbMCwgMC40MzA1NiwgMC4wMDM3LCAwLjAyNzc4LCAwLjYzOTddLFxuICAgIFwiOTQ2XCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLjA1Mjc4LCAwLjA4MzM0LCAwLjU2NTYzXSxcbiAgICBcIjk0N1wiOiBbMC4xOTQ0NCwgMC40MzA1NiwgMC4wNTU1NiwgMCwgMC41MTc3M10sXG4gICAgXCI5NDhcIjogWzAsIDAuNjk0NDQsIDAuMDM3ODUsIDAuMDU1NTYsIDAuNDQ0NDRdLFxuICAgIFwiOTQ5XCI6IFswLCAwLjQzMDU2LCAwLCAwLjA4MzM0LCAwLjQ2NjMyXSxcbiAgICBcIjk1MFwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMC4wNzM3OCwgMC4wODMzNCwgMC40Mzc1XSxcbiAgICBcIjk1MVwiOiBbMC4xOTQ0NCwgMC40MzA1NiwgMC4wMzU4OCwgMC4wNTU1NiwgMC40OTY1M10sXG4gICAgXCI5NTJcIjogWzAsIDAuNjk0NDQsIDAuMDI3NzgsIDAuMDgzMzQsIDAuNDY5NDRdLFxuICAgIFwiOTUzXCI6IFswLCAwLjQzMDU2LCAwLCAwLjA1NTU2LCAwLjM1Mzk0XSxcbiAgICBcIjk1NFwiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC41NzYxNl0sXG4gICAgXCI5NTVcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTgzMzRdLFxuICAgIFwiOTU2XCI6IFswLjE5NDQ0LCAwLjQzMDU2LCAwLCAwLjAyNzc4LCAwLjYwMjU1XSxcbiAgICBcIjk1N1wiOiBbMCwgMC40MzA1NiwgMC4wNjM2NiwgMC4wMjc3OCwgMC40OTM5OF0sXG4gICAgXCI5NThcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAuMDQ2MDEsIDAuMTExMTEsIDAuNDM3NV0sXG4gICAgXCI5NTlcIjogWzAsIDAuNDMwNTYsIDAsIDAuMDU1NTYsIDAuNDg0NzJdLFxuICAgIFwiOTYwXCI6IFswLCAwLjQzMDU2LCAwLjAzNTg4LCAwLCAwLjU3MDAzXSxcbiAgICBcIjk2MVwiOiBbMC4xOTQ0NCwgMC40MzA1NiwgMCwgMC4wODMzNCwgMC41MTcwMl0sXG4gICAgXCI5NjJcIjogWzAuMDk3MjIsIDAuNDMwNTYsIDAuMDc5ODYsIDAuMDgzMzQsIDAuMzYyODVdLFxuICAgIFwiOTYzXCI6IFswLCAwLjQzMDU2LCAwLjAzNTg4LCAwLCAwLjU3MTQxXSxcbiAgICBcIjk2NFwiOiBbMCwgMC40MzA1NiwgMC4xMTMyLCAwLjAyNzc4LCAwLjQzNzE1XSxcbiAgICBcIjk2NVwiOiBbMCwgMC40MzA1NiwgMC4wMzU4OCwgMC4wMjc3OCwgMC41NDAyOF0sXG4gICAgXCI5NjZcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAsIDAuMDgzMzQsIDAuNjU0MTddLFxuICAgIFwiOTY3XCI6IFswLjE5NDQ0LCAwLjQzMDU2LCAwLCAwLjA1NTU2LCAwLjYyNTY5XSxcbiAgICBcIjk2OFwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMC4wMzU4OCwgMC4xMTExMSwgMC42NTEzOV0sXG4gICAgXCI5NjlcIjogWzAsIDAuNDMwNTYsIDAuMDM1ODgsIDAsIDAuNjIyNDVdLFxuICAgIFwiOTc3XCI6IFswLCAwLjY5NDQ0LCAwLCAwLjA4MzM0LCAwLjU5MTQ0XSxcbiAgICBcIjk4MVwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMC4wODMzNCwgMC41OTU4M10sXG4gICAgXCI5ODJcIjogWzAsIDAuNDMwNTYsIDAuMDI3NzgsIDAsIDAuODI4MTNdLFxuICAgIFwiMTAwOVwiOiBbMC4xOTQ0NCwgMC40MzA1NiwgMCwgMC4wODMzNCwgMC41MTcwMl0sXG4gICAgXCIxMDEzXCI6IFswLCAwLjQzMDU2LCAwLCAwLjA1NTU2LCAwLjQwNTldLFxuICAgIFwiNTc2NDlcIjogWzAsIDAuNDMwNTYsIDAsIDAuMDI3NzgsIDAuMzIyNDZdLFxuICAgIFwiNTc5MTFcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAsIDAuMDgzMzQsIDAuMzg0MDNdXG4gIH0sXG4gIFwiU2Fuc1NlcmlmLUJvbGRcIjoge1xuICAgIFwiMzJcIjogWzAsIDAsIDAsIDAsIDAuMjVdLFxuICAgIFwiMzNcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuMzY2NjddLFxuICAgIFwiMzRcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTU4MzRdLFxuICAgIFwiMzVcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDAuOTE2NjddLFxuICAgIFwiMzZcIjogWzAuMDU1NTYsIDAuNzUsIDAsIDAsIDAuNTVdLFxuICAgIFwiMzdcIjogWzAuMDU1NTYsIDAuNzUsIDAsIDAsIDEuMDI5MTJdLFxuICAgIFwiMzhcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuODMwNTZdLFxuICAgIFwiMzlcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuMzA1NTZdLFxuICAgIFwiNDBcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNDI3NzhdLFxuICAgIFwiNDFcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNDI3NzhdLFxuICAgIFwiNDJcIjogWzAsIDAuNzUsIDAsIDAsIDAuNTVdLFxuICAgIFwiNDNcIjogWzAuMTE2NjcsIDAuNjE2NjcsIDAsIDAsIDAuODU1NTZdLFxuICAgIFwiNDRcIjogWzAuMTA1NTYsIDAuMTMwNTYsIDAsIDAsIDAuMzA1NTZdLFxuICAgIFwiNDVcIjogWzAsIDAuNDU4MzMsIDAsIDAsIDAuMzY2NjddLFxuICAgIFwiNDZcIjogWzAsIDAuMTMwNTYsIDAsIDAsIDAuMzA1NTZdLFxuICAgIFwiNDdcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNTVdLFxuICAgIFwiNDhcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTVdLFxuICAgIFwiNDlcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTVdLFxuICAgIFwiNTBcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTVdLFxuICAgIFwiNTFcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTVdLFxuICAgIFwiNTJcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTVdLFxuICAgIFwiNTNcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTVdLFxuICAgIFwiNTRcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTVdLFxuICAgIFwiNTVcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTVdLFxuICAgIFwiNTZcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTVdLFxuICAgIFwiNTdcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTVdLFxuICAgIFwiNThcIjogWzAsIDAuNDU4MzMsIDAsIDAsIDAuMzA1NTZdLFxuICAgIFwiNTlcIjogWzAuMTA1NTYsIDAuNDU4MzMsIDAsIDAsIDAuMzA1NTZdLFxuICAgIFwiNjFcIjogWy0wLjA5Mzc1LCAwLjQwNjI1LCAwLCAwLCAwLjg1NTU2XSxcbiAgICBcIjYzXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjUxOTQ1XSxcbiAgICBcIjY0XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjczMzM0XSxcbiAgICBcIjY1XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjczMzM0XSxcbiAgICBcIjY2XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjczMzM0XSxcbiAgICBcIjY3XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjcwMjc4XSxcbiAgICBcIjY4XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjc5NDQ1XSxcbiAgICBcIjY5XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjY0MTY3XSxcbiAgICBcIjcwXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjYxMTExXSxcbiAgICBcIjcxXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjczMzM0XSxcbiAgICBcIjcyXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjc5NDQ1XSxcbiAgICBcIjczXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjMzMDU2XSxcbiAgICBcIjc0XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjUxOTQ1XSxcbiAgICBcIjc1XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjc2Mzg5XSxcbiAgICBcIjc2XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU4MDU2XSxcbiAgICBcIjc3XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjk3Nzc4XSxcbiAgICBcIjc4XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjc5NDQ1XSxcbiAgICBcIjc5XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjc5NDQ1XSxcbiAgICBcIjgwXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjcwMjc4XSxcbiAgICBcIjgxXCI6IFswLjEwNTU2LCAwLjY5NDQ0LCAwLCAwLCAwLjc5NDQ1XSxcbiAgICBcIjgyXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjcwMjc4XSxcbiAgICBcIjgzXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjYxMTExXSxcbiAgICBcIjg0XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjczMzM0XSxcbiAgICBcIjg1XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjc2Mzg5XSxcbiAgICBcIjg2XCI6IFswLCAwLjY5NDQ0LCAwLjAxNTI4LCAwLCAwLjczMzM0XSxcbiAgICBcIjg3XCI6IFswLCAwLjY5NDQ0LCAwLjAxNTI4LCAwLCAxLjAzODg5XSxcbiAgICBcIjg4XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjczMzM0XSxcbiAgICBcIjg5XCI6IFswLCAwLjY5NDQ0LCAwLjAyNzUsIDAsIDAuNzMzMzRdLFxuICAgIFwiOTBcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjcyMjNdLFxuICAgIFwiOTFcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuMzQzMDZdLFxuICAgIFwiOTNcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuMzQzMDZdLFxuICAgIFwiOTRcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTVdLFxuICAgIFwiOTVcIjogWzAuMzUsIDAuMTA4MzMsIDAuMDMwNTYsIDAsIDAuNTVdLFxuICAgIFwiOTdcIjogWzAsIDAuNDU4MzMsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjk4XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU2MTExXSxcbiAgICBcIjk5XCI6IFswLCAwLjQ1ODMzLCAwLCAwLCAwLjQ4ODg5XSxcbiAgICBcIjEwMFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NjExMV0sXG4gICAgXCIxMDFcIjogWzAsIDAuNDU4MzMsIDAsIDAsIDAuNTExMTFdLFxuICAgIFwiMTAyXCI6IFswLCAwLjY5NDQ0LCAwLjA3NjM5LCAwLCAwLjMzNjExXSxcbiAgICBcIjEwM1wiOiBbMC4xOTQ0NCwgMC40NTgzMywgMC4wMTUyOCwgMCwgMC41NV0sXG4gICAgXCIxMDRcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTYxMTFdLFxuICAgIFwiMTA1XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjI1NTU2XSxcbiAgICBcIjEwNlwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMC4yODYxMV0sXG4gICAgXCIxMDdcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTMwNTZdLFxuICAgIFwiMTA4XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjI1NTU2XSxcbiAgICBcIjEwOVwiOiBbMCwgMC40NTgzMywgMCwgMCwgMC44NjY2N10sXG4gICAgXCIxMTBcIjogWzAsIDAuNDU4MzMsIDAsIDAsIDAuNTYxMTFdLFxuICAgIFwiMTExXCI6IFswLCAwLjQ1ODMzLCAwLCAwLCAwLjU1XSxcbiAgICBcIjExMlwiOiBbMC4xOTQ0NCwgMC40NTgzMywgMCwgMCwgMC41NjExMV0sXG4gICAgXCIxMTNcIjogWzAuMTk0NDQsIDAuNDU4MzMsIDAsIDAsIDAuNTYxMTFdLFxuICAgIFwiMTE0XCI6IFswLCAwLjQ1ODMzLCAwLjAxNTI4LCAwLCAwLjM3MjIyXSxcbiAgICBcIjExNVwiOiBbMCwgMC40NTgzMywgMCwgMCwgMC40MjE2N10sXG4gICAgXCIxMTZcIjogWzAsIDAuNTg5MjksIDAsIDAsIDAuNDA0MTddLFxuICAgIFwiMTE3XCI6IFswLCAwLjQ1ODMzLCAwLCAwLCAwLjU2MTExXSxcbiAgICBcIjExOFwiOiBbMCwgMC40NTgzMywgMC4wMTUyOCwgMCwgMC41XSxcbiAgICBcIjExOVwiOiBbMCwgMC40NTgzMywgMC4wMTUyOCwgMCwgMC43NDQ0NV0sXG4gICAgXCIxMjBcIjogWzAsIDAuNDU4MzMsIDAsIDAsIDAuNV0sXG4gICAgXCIxMjFcIjogWzAuMTk0NDQsIDAuNDU4MzMsIDAuMDE1MjgsIDAsIDAuNV0sXG4gICAgXCIxMjJcIjogWzAsIDAuNDU4MzMsIDAsIDAsIDAuNDc2MzldLFxuICAgIFwiMTI2XCI6IFswLjM1LCAwLjM0NDQ0LCAwLCAwLCAwLjU1XSxcbiAgICBcIjE2MFwiOiBbMCwgMCwgMCwgMCwgMC4yNV0sXG4gICAgXCIxNjhcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTVdLFxuICAgIFwiMTc2XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjczMzM0XSxcbiAgICBcIjE4MFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NV0sXG4gICAgXCIxODRcIjogWzAuMTcwMTQsIDAsIDAsIDAsIDAuNDg4ODldLFxuICAgIFwiMzA1XCI6IFswLCAwLjQ1ODMzLCAwLCAwLCAwLjI1NTU2XSxcbiAgICBcIjU2N1wiOiBbMC4xOTQ0NCwgMC40NTgzMywgMCwgMCwgMC4yODYxMV0sXG4gICAgXCI3MTBcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTVdLFxuICAgIFwiNzExXCI6IFswLCAwLjYzNTQyLCAwLCAwLCAwLjU1XSxcbiAgICBcIjcxM1wiOiBbMCwgMC42Mzc3OCwgMCwgMCwgMC41NV0sXG4gICAgXCI3MjhcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTVdLFxuICAgIFwiNzI5XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjMwNTU2XSxcbiAgICBcIjczMFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43MzMzNF0sXG4gICAgXCI3MzJcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTVdLFxuICAgIFwiNzMzXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU1XSxcbiAgICBcIjkxNVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41ODA1Nl0sXG4gICAgXCI5MTZcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuOTE2NjddLFxuICAgIFwiOTIwXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjg1NTU2XSxcbiAgICBcIjkyM1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC42NzIyM10sXG4gICAgXCI5MjZcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzMzMzRdLFxuICAgIFwiOTI4XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjc5NDQ1XSxcbiAgICBcIjkzMVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43OTQ0NV0sXG4gICAgXCI5MzNcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuODU1NTZdLFxuICAgIFwiOTM0XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjc5NDQ1XSxcbiAgICBcIjkzNlwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC44NTU1Nl0sXG4gICAgXCI5MzdcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzk0NDVdLFxuICAgIFwiODIxMVwiOiBbMCwgMC40NTgzMywgMC4wMzA1NiwgMCwgMC41NV0sXG4gICAgXCI4MjEyXCI6IFswLCAwLjQ1ODMzLCAwLjAzMDU2LCAwLCAxLjEwMDAxXSxcbiAgICBcIjgyMTZcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuMzA1NTZdLFxuICAgIFwiODIxN1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC4zMDU1Nl0sXG4gICAgXCI4MjIwXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU1ODM0XSxcbiAgICBcIjgyMjFcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTU4MzRdXG4gIH0sXG4gIFwiU2Fuc1NlcmlmLUl0YWxpY1wiOiB7XG4gICAgXCIzMlwiOiBbMCwgMCwgMCwgMCwgMC4yNV0sXG4gICAgXCIzM1wiOiBbMCwgMC42OTQ0NCwgMC4wNTczMywgMCwgMC4zMTk0NV0sXG4gICAgXCIzNFwiOiBbMCwgMC42OTQ0NCwgMC4wMDMxNiwgMCwgMC41XSxcbiAgICBcIjM1XCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLjA1MDg3LCAwLCAwLjgzMzM0XSxcbiAgICBcIjM2XCI6IFswLjA1NTU2LCAwLjc1LCAwLjExMTU2LCAwLCAwLjVdLFxuICAgIFwiMzdcIjogWzAuMDU1NTYsIDAuNzUsIDAuMDMxMjYsIDAsIDAuODMzMzRdLFxuICAgIFwiMzhcIjogWzAsIDAuNjk0NDQsIDAuMDMwNTgsIDAsIDAuNzU4MzRdLFxuICAgIFwiMzlcIjogWzAsIDAuNjk0NDQsIDAuMDc4MTYsIDAsIDAuMjc3NzhdLFxuICAgIFwiNDBcIjogWzAuMjUsIDAuNzUsIDAuMTMxNjQsIDAsIDAuMzg4ODldLFxuICAgIFwiNDFcIjogWzAuMjUsIDAuNzUsIDAuMDI1MzYsIDAsIDAuMzg4ODldLFxuICAgIFwiNDJcIjogWzAsIDAuNzUsIDAuMTE3NzUsIDAsIDAuNV0sXG4gICAgXCI0M1wiOiBbMC4wODMzMywgMC41ODMzMywgMC4wMjUzNiwgMCwgMC43Nzc3OF0sXG4gICAgXCI0NFwiOiBbMC4xMjUsIDAuMDgzMzMsIDAsIDAsIDAuMjc3NzhdLFxuICAgIFwiNDVcIjogWzAsIDAuNDQ0NDQsIDAuMDE5NDYsIDAsIDAuMzMzMzNdLFxuICAgIFwiNDZcIjogWzAsIDAuMDgzMzMsIDAsIDAsIDAuMjc3NzhdLFxuICAgIFwiNDdcIjogWzAuMjUsIDAuNzUsIDAuMTMxNjQsIDAsIDAuNV0sXG4gICAgXCI0OFwiOiBbMCwgMC42NTU1NiwgMC4xMTE1NiwgMCwgMC41XSxcbiAgICBcIjQ5XCI6IFswLCAwLjY1NTU2LCAwLjExMTU2LCAwLCAwLjVdLFxuICAgIFwiNTBcIjogWzAsIDAuNjU1NTYsIDAuMTExNTYsIDAsIDAuNV0sXG4gICAgXCI1MVwiOiBbMCwgMC42NTU1NiwgMC4xMTE1NiwgMCwgMC41XSxcbiAgICBcIjUyXCI6IFswLCAwLjY1NTU2LCAwLjExMTU2LCAwLCAwLjVdLFxuICAgIFwiNTNcIjogWzAsIDAuNjU1NTYsIDAuMTExNTYsIDAsIDAuNV0sXG4gICAgXCI1NFwiOiBbMCwgMC42NTU1NiwgMC4xMTE1NiwgMCwgMC41XSxcbiAgICBcIjU1XCI6IFswLCAwLjY1NTU2LCAwLjExMTU2LCAwLCAwLjVdLFxuICAgIFwiNTZcIjogWzAsIDAuNjU1NTYsIDAuMTExNTYsIDAsIDAuNV0sXG4gICAgXCI1N1wiOiBbMCwgMC42NTU1NiwgMC4xMTE1NiwgMCwgMC41XSxcbiAgICBcIjU4XCI6IFswLCAwLjQ0NDQ0LCAwLjAyNTAyLCAwLCAwLjI3Nzc4XSxcbiAgICBcIjU5XCI6IFswLjEyNSwgMC40NDQ0NCwgMC4wMjUwMiwgMCwgMC4yNzc3OF0sXG4gICAgXCI2MVwiOiBbLTAuMTMsIDAuMzcsIDAuMDUwODcsIDAsIDAuNzc3NzhdLFxuICAgIFwiNjNcIjogWzAsIDAuNjk0NDQsIDAuMTE4MDksIDAsIDAuNDcyMjJdLFxuICAgIFwiNjRcIjogWzAsIDAuNjk0NDQsIDAuMDc1NTUsIDAsIDAuNjY2NjddLFxuICAgIFwiNjVcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiNjZcIjogWzAsIDAuNjk0NDQsIDAuMDgyOTMsIDAsIDAuNjY2NjddLFxuICAgIFwiNjdcIjogWzAsIDAuNjk0NDQsIDAuMTE5ODMsIDAsIDAuNjM4ODldLFxuICAgIFwiNjhcIjogWzAsIDAuNjk0NDQsIDAuMDc1NTUsIDAsIDAuNzIyMjNdLFxuICAgIFwiNjlcIjogWzAsIDAuNjk0NDQsIDAuMTE5ODMsIDAsIDAuNTk3MjJdLFxuICAgIFwiNzBcIjogWzAsIDAuNjk0NDQsIDAuMTMzNzIsIDAsIDAuNTY5NDVdLFxuICAgIFwiNzFcIjogWzAsIDAuNjk0NDQsIDAuMTE5ODMsIDAsIDAuNjY2NjddLFxuICAgIFwiNzJcIjogWzAsIDAuNjk0NDQsIDAuMDgwOTQsIDAsIDAuNzA4MzRdLFxuICAgIFwiNzNcIjogWzAsIDAuNjk0NDQsIDAuMTMzNzIsIDAsIDAuMjc3NzhdLFxuICAgIFwiNzRcIjogWzAsIDAuNjk0NDQsIDAuMDgwOTQsIDAsIDAuNDcyMjJdLFxuICAgIFwiNzVcIjogWzAsIDAuNjk0NDQsIDAuMTE5ODMsIDAsIDAuNjk0NDVdLFxuICAgIFwiNzZcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTQxNjddLFxuICAgIFwiNzdcIjogWzAsIDAuNjk0NDQsIDAuMDgwOTQsIDAsIDAuODc1XSxcbiAgICBcIjc4XCI6IFswLCAwLjY5NDQ0LCAwLjA4MDk0LCAwLCAwLjcwODM0XSxcbiAgICBcIjc5XCI6IFswLCAwLjY5NDQ0LCAwLjA3NTU1LCAwLCAwLjczNjExXSxcbiAgICBcIjgwXCI6IFswLCAwLjY5NDQ0LCAwLjA4MjkzLCAwLCAwLjYzODg5XSxcbiAgICBcIjgxXCI6IFswLjEyNSwgMC42OTQ0NCwgMC4wNzU1NSwgMCwgMC43MzYxMV0sXG4gICAgXCI4MlwiOiBbMCwgMC42OTQ0NCwgMC4wODI5MywgMCwgMC42NDU4NF0sXG4gICAgXCI4M1wiOiBbMCwgMC42OTQ0NCwgMC4wOTIwNSwgMCwgMC41NTU1Nl0sXG4gICAgXCI4NFwiOiBbMCwgMC42OTQ0NCwgMC4xMzM3MiwgMCwgMC42ODA1Nl0sXG4gICAgXCI4NVwiOiBbMCwgMC42OTQ0NCwgMC4wODA5NCwgMCwgMC42ODc1XSxcbiAgICBcIjg2XCI6IFswLCAwLjY5NDQ0LCAwLjE2MTUsIDAsIDAuNjY2NjddLFxuICAgIFwiODdcIjogWzAsIDAuNjk0NDQsIDAuMTYxNSwgMCwgMC45NDQ0NV0sXG4gICAgXCI4OFwiOiBbMCwgMC42OTQ0NCwgMC4xMzM3MiwgMCwgMC42NjY2N10sXG4gICAgXCI4OVwiOiBbMCwgMC42OTQ0NCwgMC4xNzI2MSwgMCwgMC42NjY2N10sXG4gICAgXCI5MFwiOiBbMCwgMC42OTQ0NCwgMC4xMTk4MywgMCwgMC42MTExMV0sXG4gICAgXCI5MVwiOiBbMC4yNSwgMC43NSwgMC4xNTk0MiwgMCwgMC4yODg4OV0sXG4gICAgXCI5M1wiOiBbMC4yNSwgMC43NSwgMC4wODcxOSwgMCwgMC4yODg4OV0sXG4gICAgXCI5NFwiOiBbMCwgMC42OTQ0NCwgMC4wNzk5LCAwLCAwLjVdLFxuICAgIFwiOTVcIjogWzAuMzUsIDAuMDk0NDQsIDAuMDg2MTYsIDAsIDAuNV0sXG4gICAgXCI5N1wiOiBbMCwgMC40NDQ0NCwgMC4wMDk4MSwgMCwgMC40ODA1Nl0sXG4gICAgXCI5OFwiOiBbMCwgMC42OTQ0NCwgMC4wMzA1NywgMCwgMC41MTY2N10sXG4gICAgXCI5OVwiOiBbMCwgMC40NDQ0NCwgMC4wODMzNiwgMCwgMC40NDQ0NV0sXG4gICAgXCIxMDBcIjogWzAsIDAuNjk0NDQsIDAuMDk0ODMsIDAsIDAuNTE2NjddLFxuICAgIFwiMTAxXCI6IFswLCAwLjQ0NDQ0LCAwLjA2Nzc4LCAwLCAwLjQ0NDQ1XSxcbiAgICBcIjEwMlwiOiBbMCwgMC42OTQ0NCwgMC4yMTcwNSwgMCwgMC4zMDU1Nl0sXG4gICAgXCIxMDNcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAuMTA4MzYsIDAsIDAuNV0sXG4gICAgXCIxMDRcIjogWzAsIDAuNjk0NDQsIDAuMDE3NzgsIDAsIDAuNTE2NjddLFxuICAgIFwiMTA1XCI6IFswLCAwLjY3OTM3LCAwLjA5NzE4LCAwLCAwLjIzODg5XSxcbiAgICBcIjEwNlwiOiBbMC4xOTQ0NCwgMC42NzkzNywgMC4wOTE2MiwgMCwgMC4yNjY2N10sXG4gICAgXCIxMDdcIjogWzAsIDAuNjk0NDQsIDAuMDgzMzYsIDAsIDAuNDg4ODldLFxuICAgIFwiMTA4XCI6IFswLCAwLjY5NDQ0LCAwLjA5NDgzLCAwLCAwLjIzODg5XSxcbiAgICBcIjEwOVwiOiBbMCwgMC40NDQ0NCwgMC4wMTc3OCwgMCwgMC43OTQ0NV0sXG4gICAgXCIxMTBcIjogWzAsIDAuNDQ0NDQsIDAuMDE3NzgsIDAsIDAuNTE2NjddLFxuICAgIFwiMTExXCI6IFswLCAwLjQ0NDQ0LCAwLjA2NjEzLCAwLCAwLjVdLFxuICAgIFwiMTEyXCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLjAzODksIDAsIDAuNTE2NjddLFxuICAgIFwiMTEzXCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLjA0MTY5LCAwLCAwLjUxNjY3XSxcbiAgICBcIjExNFwiOiBbMCwgMC40NDQ0NCwgMC4xMDgzNiwgMCwgMC4zNDE2N10sXG4gICAgXCIxMTVcIjogWzAsIDAuNDQ0NDQsIDAuMDc3OCwgMCwgMC4zODMzM10sXG4gICAgXCIxMTZcIjogWzAsIDAuNTcxNDMsIDAuMDcyMjUsIDAsIDAuMzYxMTFdLFxuICAgIFwiMTE3XCI6IFswLCAwLjQ0NDQ0LCAwLjA0MTY5LCAwLCAwLjUxNjY3XSxcbiAgICBcIjExOFwiOiBbMCwgMC40NDQ0NCwgMC4xMDgzNiwgMCwgMC40NjExMV0sXG4gICAgXCIxMTlcIjogWzAsIDAuNDQ0NDQsIDAuMTA4MzYsIDAsIDAuNjgzMzRdLFxuICAgIFwiMTIwXCI6IFswLCAwLjQ0NDQ0LCAwLjA5MTY5LCAwLCAwLjQ2MTExXSxcbiAgICBcIjEyMVwiOiBbMC4xOTQ0NCwgMC40NDQ0NCwgMC4xMDgzNiwgMCwgMC40NjExMV0sXG4gICAgXCIxMjJcIjogWzAsIDAuNDQ0NDQsIDAuMDg3NTIsIDAsIDAuNDM0NzJdLFxuICAgIFwiMTI2XCI6IFswLjM1LCAwLjMyNjU5LCAwLjA4ODI2LCAwLCAwLjVdLFxuICAgIFwiMTYwXCI6IFswLCAwLCAwLCAwLCAwLjI1XSxcbiAgICBcIjE2OFwiOiBbMCwgMC42NzkzNywgMC4wNjM4NSwgMCwgMC41XSxcbiAgICBcIjE3NlwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43Mzc1Ml0sXG4gICAgXCIxODRcIjogWzAuMTcwMTQsIDAsIDAsIDAsIDAuNDQ0NDVdLFxuICAgIFwiMzA1XCI6IFswLCAwLjQ0NDQ0LCAwLjA0MTY5LCAwLCAwLjIzODg5XSxcbiAgICBcIjU2N1wiOiBbMC4xOTQ0NCwgMC40NDQ0NCwgMC4wNDE2OSwgMCwgMC4yNjY2N10sXG4gICAgXCI3MTBcIjogWzAsIDAuNjk0NDQsIDAuMDc5OSwgMCwgMC41XSxcbiAgICBcIjcxMVwiOiBbMCwgMC42MzE5NCwgMC4wODQzMiwgMCwgMC41XSxcbiAgICBcIjcxM1wiOiBbMCwgMC42MDg4OSwgMC4wODc3NiwgMCwgMC41XSxcbiAgICBcIjcxNFwiOiBbMCwgMC42OTQ0NCwgMC4wOTIwNSwgMCwgMC41XSxcbiAgICBcIjcxNVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41XSxcbiAgICBcIjcyOFwiOiBbMCwgMC42OTQ0NCwgMC4wOTQ4MywgMCwgMC41XSxcbiAgICBcIjcyOVwiOiBbMCwgMC42NzkzNywgMC4wNzc3NCwgMCwgMC4yNzc3OF0sXG4gICAgXCI3MzBcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzM3NTJdLFxuICAgIFwiNzMyXCI6IFswLCAwLjY3NjU5LCAwLjA4ODI2LCAwLCAwLjVdLFxuICAgIFwiNzMzXCI6IFswLCAwLjY5NDQ0LCAwLjA5MjA1LCAwLCAwLjVdLFxuICAgIFwiOTE1XCI6IFswLCAwLjY5NDQ0LCAwLjEzMzcyLCAwLCAwLjU0MTY3XSxcbiAgICBcIjkxNlwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC44MzMzNF0sXG4gICAgXCI5MjBcIjogWzAsIDAuNjk0NDQsIDAuMDc1NTUsIDAsIDAuNzc3NzhdLFxuICAgIFwiOTIzXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjYxMTExXSxcbiAgICBcIjkyNlwiOiBbMCwgMC42OTQ0NCwgMC4xMjgxNiwgMCwgMC42NjY2N10sXG4gICAgXCI5MjhcIjogWzAsIDAuNjk0NDQsIDAuMDgwOTQsIDAsIDAuNzA4MzRdLFxuICAgIFwiOTMxXCI6IFswLCAwLjY5NDQ0LCAwLjExOTgzLCAwLCAwLjcyMjIyXSxcbiAgICBcIjkzM1wiOiBbMCwgMC42OTQ0NCwgMC4wOTAzMSwgMCwgMC43Nzc3OF0sXG4gICAgXCI5MzRcIjogWzAsIDAuNjk0NDQsIDAuMDQ2MDMsIDAsIDAuNzIyMjJdLFxuICAgIFwiOTM2XCI6IFswLCAwLjY5NDQ0LCAwLjA5MDMxLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjkzN1wiOiBbMCwgMC42OTQ0NCwgMC4wODI5MywgMCwgMC43MjIyMl0sXG4gICAgXCI4MjExXCI6IFswLCAwLjQ0NDQ0LCAwLjA4NjE2LCAwLCAwLjVdLFxuICAgIFwiODIxMlwiOiBbMCwgMC40NDQ0NCwgMC4wODYxNiwgMCwgMS4wXSxcbiAgICBcIjgyMTZcIjogWzAsIDAuNjk0NDQsIDAuMDc4MTYsIDAsIDAuMjc3NzhdLFxuICAgIFwiODIxN1wiOiBbMCwgMC42OTQ0NCwgMC4wNzgxNiwgMCwgMC4yNzc3OF0sXG4gICAgXCI4MjIwXCI6IFswLCAwLjY5NDQ0LCAwLjE0MjA1LCAwLCAwLjVdLFxuICAgIFwiODIyMVwiOiBbMCwgMC42OTQ0NCwgMC4wMDMxNiwgMCwgMC41XVxuICB9LFxuICBcIlNhbnNTZXJpZi1SZWd1bGFyXCI6IHtcbiAgICBcIjMyXCI6IFswLCAwLCAwLCAwLCAwLjI1XSxcbiAgICBcIjMzXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjMxOTQ1XSxcbiAgICBcIjM0XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiMzVcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDAuODMzMzRdLFxuICAgIFwiMzZcIjogWzAuMDU1NTYsIDAuNzUsIDAsIDAsIDAuNV0sXG4gICAgXCIzN1wiOiBbMC4wNTU1NiwgMC43NSwgMCwgMCwgMC44MzMzNF0sXG4gICAgXCIzOFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43NTgzNF0sXG4gICAgXCIzOVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC4yNzc3OF0sXG4gICAgXCI0MFwiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC4zODg4OV0sXG4gICAgXCI0MVwiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC4zODg4OV0sXG4gICAgXCI0MlwiOiBbMCwgMC43NSwgMCwgMCwgMC41XSxcbiAgICBcIjQzXCI6IFswLjA4MzMzLCAwLjU4MzMzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjQ0XCI6IFswLjEyNSwgMC4wODMzMywgMCwgMCwgMC4yNzc3OF0sXG4gICAgXCI0NVwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC4zMzMzM10sXG4gICAgXCI0NlwiOiBbMCwgMC4wODMzMywgMCwgMCwgMC4yNzc3OF0sXG4gICAgXCI0N1wiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC41XSxcbiAgICBcIjQ4XCI6IFswLCAwLjY1NTU2LCAwLCAwLCAwLjVdLFxuICAgIFwiNDlcIjogWzAsIDAuNjU1NTYsIDAsIDAsIDAuNV0sXG4gICAgXCI1MFwiOiBbMCwgMC42NTU1NiwgMCwgMCwgMC41XSxcbiAgICBcIjUxXCI6IFswLCAwLjY1NTU2LCAwLCAwLCAwLjVdLFxuICAgIFwiNTJcIjogWzAsIDAuNjU1NTYsIDAsIDAsIDAuNV0sXG4gICAgXCI1M1wiOiBbMCwgMC42NTU1NiwgMCwgMCwgMC41XSxcbiAgICBcIjU0XCI6IFswLCAwLjY1NTU2LCAwLCAwLCAwLjVdLFxuICAgIFwiNTVcIjogWzAsIDAuNjU1NTYsIDAsIDAsIDAuNV0sXG4gICAgXCI1NlwiOiBbMCwgMC42NTU1NiwgMCwgMCwgMC41XSxcbiAgICBcIjU3XCI6IFswLCAwLjY1NTU2LCAwLCAwLCAwLjVdLFxuICAgIFwiNThcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuMjc3NzhdLFxuICAgIFwiNTlcIjogWzAuMTI1LCAwLjQ0NDQ0LCAwLCAwLCAwLjI3Nzc4XSxcbiAgICBcIjYxXCI6IFstMC4xMywgMC4zNywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI2M1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC40NzIyMl0sXG4gICAgXCI2NFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC42NjY2N10sXG4gICAgXCI2NVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC42NjY2N10sXG4gICAgXCI2NlwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC42NjY2N10sXG4gICAgXCI2N1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC42Mzg4OV0sXG4gICAgXCI2OFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43MjIyM10sXG4gICAgXCI2OVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41OTcyMl0sXG4gICAgXCI3MFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41Njk0NV0sXG4gICAgXCI3MVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC42NjY2N10sXG4gICAgXCI3MlwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43MDgzNF0sXG4gICAgXCI3M1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC4yNzc3OF0sXG4gICAgXCI3NFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC40NzIyMl0sXG4gICAgXCI3NVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC42OTQ0NV0sXG4gICAgXCI3NlwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NDE2N10sXG4gICAgXCI3N1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC44NzVdLFxuICAgIFwiNzhcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzA4MzRdLFxuICAgIFwiNzlcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzM2MTFdLFxuICAgIFwiODBcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjM4ODldLFxuICAgIFwiODFcIjogWzAuMTI1LCAwLjY5NDQ0LCAwLCAwLCAwLjczNjExXSxcbiAgICBcIjgyXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjY0NTg0XSxcbiAgICBcIjgzXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU1NTU2XSxcbiAgICBcIjg0XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjY4MDU2XSxcbiAgICBcIjg1XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjY4NzVdLFxuICAgIFwiODZcIjogWzAsIDAuNjk0NDQsIDAuMDEzODksIDAsIDAuNjY2NjddLFxuICAgIFwiODdcIjogWzAsIDAuNjk0NDQsIDAuMDEzODksIDAsIDAuOTQ0NDVdLFxuICAgIFwiODhcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiODlcIjogWzAsIDAuNjk0NDQsIDAuMDI1LCAwLCAwLjY2NjY3XSxcbiAgICBcIjkwXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjYxMTExXSxcbiAgICBcIjkxXCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjI4ODg5XSxcbiAgICBcIjkzXCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjI4ODg5XSxcbiAgICBcIjk0XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiOTVcIjogWzAuMzUsIDAuMDk0NDQsIDAuMDI3NzgsIDAsIDAuNV0sXG4gICAgXCI5N1wiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC40ODA1Nl0sXG4gICAgXCI5OFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41MTY2N10sXG4gICAgXCI5OVwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC40NDQ0NV0sXG4gICAgXCIxMDBcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTE2NjddLFxuICAgIFwiMTAxXCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjQ0NDQ1XSxcbiAgICBcIjEwMlwiOiBbMCwgMC42OTQ0NCwgMC4wNjk0NCwgMCwgMC4zMDU1Nl0sXG4gICAgXCIxMDNcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAuMDEzODksIDAsIDAuNV0sXG4gICAgXCIxMDRcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTE2NjddLFxuICAgIFwiMTA1XCI6IFswLCAwLjY3OTM3LCAwLCAwLCAwLjIzODg5XSxcbiAgICBcIjEwNlwiOiBbMC4xOTQ0NCwgMC42NzkzNywgMCwgMCwgMC4yNjY2N10sXG4gICAgXCIxMDdcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNDg4ODldLFxuICAgIFwiMTA4XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjIzODg5XSxcbiAgICBcIjEwOVwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC43OTQ0NV0sXG4gICAgXCIxMTBcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuNTE2NjddLFxuICAgIFwiMTExXCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiMTEyXCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLCAwLCAwLjUxNjY3XSxcbiAgICBcIjExM1wiOiBbMC4xOTQ0NCwgMC40NDQ0NCwgMCwgMCwgMC41MTY2N10sXG4gICAgXCIxMTRcIjogWzAsIDAuNDQ0NDQsIDAuMDEzODksIDAsIDAuMzQxNjddLFxuICAgIFwiMTE1XCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjM4MzMzXSxcbiAgICBcIjExNlwiOiBbMCwgMC41NzE0MywgMCwgMCwgMC4zNjExMV0sXG4gICAgXCIxMTdcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuNTE2NjddLFxuICAgIFwiMTE4XCI6IFswLCAwLjQ0NDQ0LCAwLjAxMzg5LCAwLCAwLjQ2MTExXSxcbiAgICBcIjExOVwiOiBbMCwgMC40NDQ0NCwgMC4wMTM4OSwgMCwgMC42ODMzNF0sXG4gICAgXCIxMjBcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuNDYxMTFdLFxuICAgIFwiMTIxXCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLjAxMzg5LCAwLCAwLjQ2MTExXSxcbiAgICBcIjEyMlwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC40MzQ3Ml0sXG4gICAgXCIxMjZcIjogWzAuMzUsIDAuMzI2NTksIDAsIDAsIDAuNV0sXG4gICAgXCIxNjBcIjogWzAsIDAsIDAsIDAsIDAuMjVdLFxuICAgIFwiMTY4XCI6IFswLCAwLjY3OTM3LCAwLCAwLCAwLjVdLFxuICAgIFwiMTc2XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjE4NFwiOiBbMC4xNzAxNCwgMCwgMCwgMCwgMC40NDQ0NV0sXG4gICAgXCIzMDVcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuMjM4ODldLFxuICAgIFwiNTY3XCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLCAwLCAwLjI2NjY3XSxcbiAgICBcIjcxMFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41XSxcbiAgICBcIjcxMVwiOiBbMCwgMC42MzE5NCwgMCwgMCwgMC41XSxcbiAgICBcIjcxM1wiOiBbMCwgMC42MDg4OSwgMCwgMCwgMC41XSxcbiAgICBcIjcxNFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41XSxcbiAgICBcIjcxNVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41XSxcbiAgICBcIjcyOFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41XSxcbiAgICBcIjcyOVwiOiBbMCwgMC42NzkzNywgMCwgMCwgMC4yNzc3OF0sXG4gICAgXCI3MzBcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiNzMyXCI6IFswLCAwLjY3NjU5LCAwLCAwLCAwLjVdLFxuICAgIFwiNzMzXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiOTE1XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU0MTY3XSxcbiAgICBcIjkxNlwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC44MzMzNF0sXG4gICAgXCI5MjBcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiOTIzXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjYxMTExXSxcbiAgICBcIjkyNlwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC42NjY2N10sXG4gICAgXCI5MjhcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzA4MzRdLFxuICAgIFwiOTMxXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjcyMjIyXSxcbiAgICBcIjkzM1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI5MzRcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzIyMjJdLFxuICAgIFwiOTM2XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjkzN1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43MjIyMl0sXG4gICAgXCI4MjExXCI6IFswLCAwLjQ0NDQ0LCAwLjAyNzc4LCAwLCAwLjVdLFxuICAgIFwiODIxMlwiOiBbMCwgMC40NDQ0NCwgMC4wMjc3OCwgMCwgMS4wXSxcbiAgICBcIjgyMTZcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuMjc3NzhdLFxuICAgIFwiODIxN1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC4yNzc3OF0sXG4gICAgXCI4MjIwXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiODIyMVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41XVxuICB9LFxuICBcIlNjcmlwdC1SZWd1bGFyXCI6IHtcbiAgICBcIjMyXCI6IFswLCAwLCAwLCAwLCAwLjI1XSxcbiAgICBcIjY1XCI6IFswLCAwLjcsIDAuMjI5MjUsIDAsIDAuODAyNTNdLFxuICAgIFwiNjZcIjogWzAsIDAuNywgMC4wNDA4NywgMCwgMC45MDc1N10sXG4gICAgXCI2N1wiOiBbMCwgMC43LCAwLjE2ODksIDAsIDAuNjY2MTldLFxuICAgIFwiNjhcIjogWzAsIDAuNywgMC4wOTM3MSwgMCwgMC43NzQ0M10sXG4gICAgXCI2OVwiOiBbMCwgMC43LCAwLjE4NTgzLCAwLCAwLjU2MTYyXSxcbiAgICBcIjcwXCI6IFswLCAwLjcsIDAuMTM2MzQsIDAsIDAuODk1NDRdLFxuICAgIFwiNzFcIjogWzAsIDAuNywgMC4xNzMyMiwgMCwgMC42MDk2MV0sXG4gICAgXCI3MlwiOiBbMCwgMC43LCAwLjI5Njk0LCAwLCAwLjk2OTE5XSxcbiAgICBcIjczXCI6IFswLCAwLjcsIDAuMTkxODksIDAsIDAuODA5MDddLFxuICAgIFwiNzRcIjogWzAuMjc3NzgsIDAuNywgMC4xOTE4OSwgMCwgMS4wNTE1OV0sXG4gICAgXCI3NVwiOiBbMCwgMC43LCAwLjMxMjU5LCAwLCAwLjkxMzY0XSxcbiAgICBcIjc2XCI6IFswLCAwLjcsIDAuMTkxODksIDAsIDAuODczNzNdLFxuICAgIFwiNzdcIjogWzAsIDAuNywgMC4xNTk4MSwgMCwgMS4wODAzMV0sXG4gICAgXCI3OFwiOiBbMCwgMC43LCAwLjM1MjUsIDAsIDAuOTAxNV0sXG4gICAgXCI3OVwiOiBbMCwgMC43LCAwLjA4MDc4LCAwLCAwLjczNzg3XSxcbiAgICBcIjgwXCI6IFswLCAwLjcsIDAuMDgwNzgsIDAsIDEuMDEyNjJdLFxuICAgIFwiODFcIjogWzAsIDAuNywgMC4wMzMwNSwgMCwgMC44ODI4Ml0sXG4gICAgXCI4MlwiOiBbMCwgMC43LCAwLjA2MjU5LCAwLCAwLjg1XSxcbiAgICBcIjgzXCI6IFswLCAwLjcsIDAuMTkxODksIDAsIDAuODY3NjddLFxuICAgIFwiODRcIjogWzAsIDAuNywgMC4yOTA4NywgMCwgMC43NDY5N10sXG4gICAgXCI4NVwiOiBbMCwgMC43LCAwLjI1ODE1LCAwLCAwLjc5OTk2XSxcbiAgICBcIjg2XCI6IFswLCAwLjcsIDAuMjc1MjMsIDAsIDAuNjIyMDRdLFxuICAgIFwiODdcIjogWzAsIDAuNywgMC4yNzUyMywgMCwgMC44MDUzMl0sXG4gICAgXCI4OFwiOiBbMCwgMC43LCAwLjI2MDA2LCAwLCAwLjk0NDQ1XSxcbiAgICBcIjg5XCI6IFswLCAwLjcsIDAuMjkzOSwgMCwgMC43MDk2MV0sXG4gICAgXCI5MFwiOiBbMCwgMC43LCAwLjI0MDM3LCAwLCAwLjgyMTJdLFxuICAgIFwiMTYwXCI6IFswLCAwLCAwLCAwLCAwLjI1XVxuICB9LFxuICBcIlNpemUxLVJlZ3VsYXJcIjoge1xuICAgIFwiMzJcIjogWzAsIDAsIDAsIDAsIDAuMjVdLFxuICAgIFwiNDBcIjogWzAuMzUwMDEsIDAuODUsIDAsIDAsIDAuNDU4MzRdLFxuICAgIFwiNDFcIjogWzAuMzUwMDEsIDAuODUsIDAsIDAsIDAuNDU4MzRdLFxuICAgIFwiNDdcIjogWzAuMzUwMDEsIDAuODUsIDAsIDAsIDAuNTc3NzhdLFxuICAgIFwiOTFcIjogWzAuMzUwMDEsIDAuODUsIDAsIDAsIDAuNDE2NjddLFxuICAgIFwiOTJcIjogWzAuMzUwMDEsIDAuODUsIDAsIDAsIDAuNTc3NzhdLFxuICAgIFwiOTNcIjogWzAuMzUwMDEsIDAuODUsIDAsIDAsIDAuNDE2NjddLFxuICAgIFwiMTIzXCI6IFswLjM1MDAxLCAwLjg1LCAwLCAwLCAwLjU4MzM0XSxcbiAgICBcIjEyNVwiOiBbMC4zNTAwMSwgMC44NSwgMCwgMCwgMC41ODMzNF0sXG4gICAgXCIxNjBcIjogWzAsIDAsIDAsIDAsIDAuMjVdLFxuICAgIFwiNzEwXCI6IFswLCAwLjcyMjIyLCAwLCAwLCAwLjU1NTU2XSxcbiAgICBcIjczMlwiOiBbMCwgMC43MjIyMiwgMCwgMCwgMC41NTU1Nl0sXG4gICAgXCI3NzBcIjogWzAsIDAuNzIyMjIsIDAsIDAsIDAuNTU1NTZdLFxuICAgIFwiNzcxXCI6IFswLCAwLjcyMjIyLCAwLCAwLCAwLjU1NTU2XSxcbiAgICBcIjgyMTRcIjogWy0wLjAwMDk5LCAwLjYwMSwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4NTkzXCI6IFsxZS0wNSwgMC42LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjg1OTVcIjogWzFlLTA1LCAwLjYsIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiODY1N1wiOiBbMWUtMDUsIDAuNiwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4NjU5XCI6IFsxZS0wNSwgMC42LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg3MTlcIjogWzAuMjUwMDEsIDAuNzUsIDAsIDAsIDAuOTQ0NDVdLFxuICAgIFwiODcyMFwiOiBbMC4yNTAwMSwgMC43NSwgMCwgMCwgMC45NDQ0NV0sXG4gICAgXCI4NzIxXCI6IFswLjI1MDAxLCAwLjc1LCAwLCAwLCAxLjA1NTU2XSxcbiAgICBcIjg3MzBcIjogWzAuMzUwMDEsIDAuODUsIDAsIDAsIDEuMF0sXG4gICAgXCI4NzM5XCI6IFstMC4wMDU5OSwgMC42MDYsIDAsIDAsIDAuMzMzMzNdLFxuICAgIFwiODc0MVwiOiBbLTAuMDA1OTksIDAuNjA2LCAwLCAwLCAwLjU1NTU2XSxcbiAgICBcIjg3NDdcIjogWzAuMzA2MTIsIDAuODA1LCAwLjE5NDQ1LCAwLCAwLjQ3MjIyXSxcbiAgICBcIjg3NDhcIjogWzAuMzA2LCAwLjgwNSwgMC4xOTQ0NSwgMCwgMC40NzIyMl0sXG4gICAgXCI4NzQ5XCI6IFswLjMwNiwgMC44MDUsIDAuMTk0NDUsIDAsIDAuNDcyMjJdLFxuICAgIFwiODc1MFwiOiBbMC4zMDYxMiwgMC44MDUsIDAuMTk0NDUsIDAsIDAuNDcyMjJdLFxuICAgIFwiODg5NlwiOiBbMC4yNTAwMSwgMC43NSwgMCwgMCwgMC44MzMzNF0sXG4gICAgXCI4ODk3XCI6IFswLjI1MDAxLCAwLjc1LCAwLCAwLCAwLjgzMzM0XSxcbiAgICBcIjg4OThcIjogWzAuMjUwMDEsIDAuNzUsIDAsIDAsIDAuODMzMzRdLFxuICAgIFwiODg5OVwiOiBbMC4yNTAwMSwgMC43NSwgMCwgMCwgMC44MzMzNF0sXG4gICAgXCI4OTY4XCI6IFswLjM1MDAxLCAwLjg1LCAwLCAwLCAwLjQ3MjIyXSxcbiAgICBcIjg5NjlcIjogWzAuMzUwMDEsIDAuODUsIDAsIDAsIDAuNDcyMjJdLFxuICAgIFwiODk3MFwiOiBbMC4zNTAwMSwgMC44NSwgMCwgMCwgMC40NzIyMl0sXG4gICAgXCI4OTcxXCI6IFswLjM1MDAxLCAwLjg1LCAwLCAwLCAwLjQ3MjIyXSxcbiAgICBcIjkxNjhcIjogWy0wLjAwMDk5LCAwLjYwMSwgMCwgMCwgMC42NjY2N10sXG4gICAgXCIxMDIxNlwiOiBbMC4zNTAwMSwgMC44NSwgMCwgMCwgMC40NzIyMl0sXG4gICAgXCIxMDIxN1wiOiBbMC4zNTAwMSwgMC44NSwgMCwgMCwgMC40NzIyMl0sXG4gICAgXCIxMDc1MlwiOiBbMC4yNTAwMSwgMC43NSwgMCwgMCwgMS4xMTExMV0sXG4gICAgXCIxMDc1M1wiOiBbMC4yNTAwMSwgMC43NSwgMCwgMCwgMS4xMTExMV0sXG4gICAgXCIxMDc1NFwiOiBbMC4yNTAwMSwgMC43NSwgMCwgMCwgMS4xMTExMV0sXG4gICAgXCIxMDc1NlwiOiBbMC4yNTAwMSwgMC43NSwgMCwgMCwgMC44MzMzNF0sXG4gICAgXCIxMDc1OFwiOiBbMC4yNTAwMSwgMC43NSwgMCwgMCwgMC44MzMzNF1cbiAgfSxcbiAgXCJTaXplMi1SZWd1bGFyXCI6IHtcbiAgICBcIjMyXCI6IFswLCAwLCAwLCAwLCAwLjI1XSxcbiAgICBcIjQwXCI6IFswLjY1MDAyLCAxLjE1LCAwLCAwLCAwLjU5NzIyXSxcbiAgICBcIjQxXCI6IFswLjY1MDAyLCAxLjE1LCAwLCAwLCAwLjU5NzIyXSxcbiAgICBcIjQ3XCI6IFswLjY1MDAyLCAxLjE1LCAwLCAwLCAwLjgxMTExXSxcbiAgICBcIjkxXCI6IFswLjY1MDAyLCAxLjE1LCAwLCAwLCAwLjQ3MjIyXSxcbiAgICBcIjkyXCI6IFswLjY1MDAyLCAxLjE1LCAwLCAwLCAwLjgxMTExXSxcbiAgICBcIjkzXCI6IFswLjY1MDAyLCAxLjE1LCAwLCAwLCAwLjQ3MjIyXSxcbiAgICBcIjEyM1wiOiBbMC42NTAwMiwgMS4xNSwgMCwgMCwgMC42NjY2N10sXG4gICAgXCIxMjVcIjogWzAuNjUwMDIsIDEuMTUsIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiMTYwXCI6IFswLCAwLCAwLCAwLCAwLjI1XSxcbiAgICBcIjcxMFwiOiBbMCwgMC43NSwgMCwgMCwgMS4wXSxcbiAgICBcIjczMlwiOiBbMCwgMC43NSwgMCwgMCwgMS4wXSxcbiAgICBcIjc3MFwiOiBbMCwgMC43NSwgMCwgMCwgMS4wXSxcbiAgICBcIjc3MVwiOiBbMCwgMC43NSwgMCwgMCwgMS4wXSxcbiAgICBcIjg3MTlcIjogWzAuNTUwMDEsIDEuMDUsIDAsIDAsIDEuMjc3NzhdLFxuICAgIFwiODcyMFwiOiBbMC41NTAwMSwgMS4wNSwgMCwgMCwgMS4yNzc3OF0sXG4gICAgXCI4NzIxXCI6IFswLjU1MDAxLCAxLjA1LCAwLCAwLCAxLjQ0NDQ1XSxcbiAgICBcIjg3MzBcIjogWzAuNjUwMDIsIDEuMTUsIDAsIDAsIDEuMF0sXG4gICAgXCI4NzQ3XCI6IFswLjg2MjI1LCAxLjM2LCAwLjQ0NDQ1LCAwLCAwLjU1NTU2XSxcbiAgICBcIjg3NDhcIjogWzAuODYyLCAxLjM2LCAwLjQ0NDQ1LCAwLCAwLjU1NTU2XSxcbiAgICBcIjg3NDlcIjogWzAuODYyLCAxLjM2LCAwLjQ0NDQ1LCAwLCAwLjU1NTU2XSxcbiAgICBcIjg3NTBcIjogWzAuODYyMjUsIDEuMzYsIDAuNDQ0NDUsIDAsIDAuNTU1NTZdLFxuICAgIFwiODg5NlwiOiBbMC41NTAwMSwgMS4wNSwgMCwgMCwgMS4xMTExMV0sXG4gICAgXCI4ODk3XCI6IFswLjU1MDAxLCAxLjA1LCAwLCAwLCAxLjExMTExXSxcbiAgICBcIjg4OThcIjogWzAuNTUwMDEsIDEuMDUsIDAsIDAsIDEuMTExMTFdLFxuICAgIFwiODg5OVwiOiBbMC41NTAwMSwgMS4wNSwgMCwgMCwgMS4xMTExMV0sXG4gICAgXCI4OTY4XCI6IFswLjY1MDAyLCAxLjE1LCAwLCAwLCAwLjUyNzc4XSxcbiAgICBcIjg5NjlcIjogWzAuNjUwMDIsIDEuMTUsIDAsIDAsIDAuNTI3NzhdLFxuICAgIFwiODk3MFwiOiBbMC42NTAwMiwgMS4xNSwgMCwgMCwgMC41Mjc3OF0sXG4gICAgXCI4OTcxXCI6IFswLjY1MDAyLCAxLjE1LCAwLCAwLCAwLjUyNzc4XSxcbiAgICBcIjEwMjE2XCI6IFswLjY1MDAyLCAxLjE1LCAwLCAwLCAwLjYxMTExXSxcbiAgICBcIjEwMjE3XCI6IFswLjY1MDAyLCAxLjE1LCAwLCAwLCAwLjYxMTExXSxcbiAgICBcIjEwNzUyXCI6IFswLjU1MDAxLCAxLjA1LCAwLCAwLCAxLjUxMTEyXSxcbiAgICBcIjEwNzUzXCI6IFswLjU1MDAxLCAxLjA1LCAwLCAwLCAxLjUxMTEyXSxcbiAgICBcIjEwNzU0XCI6IFswLjU1MDAxLCAxLjA1LCAwLCAwLCAxLjUxMTEyXSxcbiAgICBcIjEwNzU2XCI6IFswLjU1MDAxLCAxLjA1LCAwLCAwLCAxLjExMTExXSxcbiAgICBcIjEwNzU4XCI6IFswLjU1MDAxLCAxLjA1LCAwLCAwLCAxLjExMTExXVxuICB9LFxuICBcIlNpemUzLVJlZ3VsYXJcIjoge1xuICAgIFwiMzJcIjogWzAsIDAsIDAsIDAsIDAuMjVdLFxuICAgIFwiNDBcIjogWzAuOTUwMDMsIDEuNDUsIDAsIDAsIDAuNzM2MTFdLFxuICAgIFwiNDFcIjogWzAuOTUwMDMsIDEuNDUsIDAsIDAsIDAuNzM2MTFdLFxuICAgIFwiNDdcIjogWzAuOTUwMDMsIDEuNDUsIDAsIDAsIDEuMDQ0NDVdLFxuICAgIFwiOTFcIjogWzAuOTUwMDMsIDEuNDUsIDAsIDAsIDAuNTI3NzhdLFxuICAgIFwiOTJcIjogWzAuOTUwMDMsIDEuNDUsIDAsIDAsIDEuMDQ0NDVdLFxuICAgIFwiOTNcIjogWzAuOTUwMDMsIDEuNDUsIDAsIDAsIDAuNTI3NzhdLFxuICAgIFwiMTIzXCI6IFswLjk1MDAzLCAxLjQ1LCAwLCAwLCAwLjc1XSxcbiAgICBcIjEyNVwiOiBbMC45NTAwMywgMS40NSwgMCwgMCwgMC43NV0sXG4gICAgXCIxNjBcIjogWzAsIDAsIDAsIDAsIDAuMjVdLFxuICAgIFwiNzEwXCI6IFswLCAwLjc1LCAwLCAwLCAxLjQ0NDQ1XSxcbiAgICBcIjczMlwiOiBbMCwgMC43NSwgMCwgMCwgMS40NDQ0NV0sXG4gICAgXCI3NzBcIjogWzAsIDAuNzUsIDAsIDAsIDEuNDQ0NDVdLFxuICAgIFwiNzcxXCI6IFswLCAwLjc1LCAwLCAwLCAxLjQ0NDQ1XSxcbiAgICBcIjg3MzBcIjogWzAuOTUwMDMsIDEuNDUsIDAsIDAsIDEuMF0sXG4gICAgXCI4OTY4XCI6IFswLjk1MDAzLCAxLjQ1LCAwLCAwLCAwLjU4MzM0XSxcbiAgICBcIjg5NjlcIjogWzAuOTUwMDMsIDEuNDUsIDAsIDAsIDAuNTgzMzRdLFxuICAgIFwiODk3MFwiOiBbMC45NTAwMywgMS40NSwgMCwgMCwgMC41ODMzNF0sXG4gICAgXCI4OTcxXCI6IFswLjk1MDAzLCAxLjQ1LCAwLCAwLCAwLjU4MzM0XSxcbiAgICBcIjEwMjE2XCI6IFswLjk1MDAzLCAxLjQ1LCAwLCAwLCAwLjc1XSxcbiAgICBcIjEwMjE3XCI6IFswLjk1MDAzLCAxLjQ1LCAwLCAwLCAwLjc1XVxuICB9LFxuICBcIlNpemU0LVJlZ3VsYXJcIjoge1xuICAgIFwiMzJcIjogWzAsIDAsIDAsIDAsIDAuMjVdLFxuICAgIFwiNDBcIjogWzEuMjUwMDMsIDEuNzUsIDAsIDAsIDAuNzkxNjddLFxuICAgIFwiNDFcIjogWzEuMjUwMDMsIDEuNzUsIDAsIDAsIDAuNzkxNjddLFxuICAgIFwiNDdcIjogWzEuMjUwMDMsIDEuNzUsIDAsIDAsIDEuMjc3NzhdLFxuICAgIFwiOTFcIjogWzEuMjUwMDMsIDEuNzUsIDAsIDAsIDAuNTgzMzRdLFxuICAgIFwiOTJcIjogWzEuMjUwMDMsIDEuNzUsIDAsIDAsIDEuMjc3NzhdLFxuICAgIFwiOTNcIjogWzEuMjUwMDMsIDEuNzUsIDAsIDAsIDAuNTgzMzRdLFxuICAgIFwiMTIzXCI6IFsxLjI1MDAzLCAxLjc1LCAwLCAwLCAwLjgwNTU2XSxcbiAgICBcIjEyNVwiOiBbMS4yNTAwMywgMS43NSwgMCwgMCwgMC44MDU1Nl0sXG4gICAgXCIxNjBcIjogWzAsIDAsIDAsIDAsIDAuMjVdLFxuICAgIFwiNzEwXCI6IFswLCAwLjgyNSwgMCwgMCwgMS44ODg5XSxcbiAgICBcIjczMlwiOiBbMCwgMC44MjUsIDAsIDAsIDEuODg4OV0sXG4gICAgXCI3NzBcIjogWzAsIDAuODI1LCAwLCAwLCAxLjg4ODldLFxuICAgIFwiNzcxXCI6IFswLCAwLjgyNSwgMCwgMCwgMS44ODg5XSxcbiAgICBcIjg3MzBcIjogWzEuMjUwMDMsIDEuNzUsIDAsIDAsIDEuMF0sXG4gICAgXCI4OTY4XCI6IFsxLjI1MDAzLCAxLjc1LCAwLCAwLCAwLjYzODg5XSxcbiAgICBcIjg5NjlcIjogWzEuMjUwMDMsIDEuNzUsIDAsIDAsIDAuNjM4ODldLFxuICAgIFwiODk3MFwiOiBbMS4yNTAwMywgMS43NSwgMCwgMCwgMC42Mzg4OV0sXG4gICAgXCI4OTcxXCI6IFsxLjI1MDAzLCAxLjc1LCAwLCAwLCAwLjYzODg5XSxcbiAgICBcIjkxMTVcIjogWzAuNjQ1MDIsIDEuMTU1LCAwLCAwLCAwLjg3NV0sXG4gICAgXCI5MTE2XCI6IFsxZS0wNSwgMC42LCAwLCAwLCAwLjg3NV0sXG4gICAgXCI5MTE3XCI6IFswLjY0NTAyLCAxLjE1NSwgMCwgMCwgMC44NzVdLFxuICAgIFwiOTExOFwiOiBbMC42NDUwMiwgMS4xNTUsIDAsIDAsIDAuODc1XSxcbiAgICBcIjkxMTlcIjogWzFlLTA1LCAwLjYsIDAsIDAsIDAuODc1XSxcbiAgICBcIjkxMjBcIjogWzAuNjQ1MDIsIDEuMTU1LCAwLCAwLCAwLjg3NV0sXG4gICAgXCI5MTIxXCI6IFswLjY0NTAyLCAxLjE1NSwgMCwgMCwgMC42NjY2N10sXG4gICAgXCI5MTIyXCI6IFstMC4wMDA5OSwgMC42MDEsIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiOTEyM1wiOiBbMC42NDUwMiwgMS4xNTUsIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiOTEyNFwiOiBbMC42NDUwMiwgMS4xNTUsIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiOTEyNVwiOiBbLTAuMDAwOTksIDAuNjAxLCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjkxMjZcIjogWzAuNjQ1MDIsIDEuMTU1LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjkxMjdcIjogWzFlLTA1LCAwLjksIDAsIDAsIDAuODg4ODldLFxuICAgIFwiOTEyOFwiOiBbMC42NTAwMiwgMS4xNSwgMCwgMCwgMC44ODg4OV0sXG4gICAgXCI5MTI5XCI6IFswLjkwMDAxLCAwLCAwLCAwLCAwLjg4ODg5XSxcbiAgICBcIjkxMzBcIjogWzAsIDAuMywgMCwgMCwgMC44ODg4OV0sXG4gICAgXCI5MTMxXCI6IFsxZS0wNSwgMC45LCAwLCAwLCAwLjg4ODg5XSxcbiAgICBcIjkxMzJcIjogWzAuNjUwMDIsIDEuMTUsIDAsIDAsIDAuODg4ODldLFxuICAgIFwiOTEzM1wiOiBbMC45MDAwMSwgMCwgMCwgMCwgMC44ODg4OV0sXG4gICAgXCI5MTQzXCI6IFswLjg4NTAyLCAwLjkxNSwgMCwgMCwgMS4wNTU1Nl0sXG4gICAgXCIxMDIxNlwiOiBbMS4yNTAwMywgMS43NSwgMCwgMCwgMC44MDU1Nl0sXG4gICAgXCIxMDIxN1wiOiBbMS4yNTAwMywgMS43NSwgMCwgMCwgMC44MDU1Nl0sXG4gICAgXCI1NzM0NFwiOiBbLTAuMDA0OTksIDAuNjA1LCAwLCAwLCAxLjA1NTU2XSxcbiAgICBcIjU3MzQ1XCI6IFstMC4wMDQ5OSwgMC42MDUsIDAsIDAsIDEuMDU1NTZdLFxuICAgIFwiNTc2ODBcIjogWzAsIDAuMTIsIDAsIDAsIDAuNDVdLFxuICAgIFwiNTc2ODFcIjogWzAsIDAuMTIsIDAsIDAsIDAuNDVdLFxuICAgIFwiNTc2ODJcIjogWzAsIDAuMTIsIDAsIDAsIDAuNDVdLFxuICAgIFwiNTc2ODNcIjogWzAsIDAuMTIsIDAsIDAsIDAuNDVdXG4gIH0sXG4gIFwiVHlwZXdyaXRlci1SZWd1bGFyXCI6IHtcbiAgICBcIjMyXCI6IFswLCAwLCAwLCAwLCAwLjUyNV0sXG4gICAgXCIzM1wiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiMzRcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjM1XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCIzNlwiOiBbMC4wODMzMywgMC42OTQ0NCwgMCwgMCwgMC41MjVdLFxuICAgIFwiMzdcIjogWzAuMDgzMzMsIDAuNjk0NDQsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjM4XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCIzOVwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNDBcIjogWzAuMDgzMzMsIDAuNjk0NDQsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjQxXCI6IFswLjA4MzMzLCAwLjY5NDQ0LCAwLCAwLCAwLjUyNV0sXG4gICAgXCI0MlwiOiBbMCwgMC41MjA4MywgMCwgMCwgMC41MjVdLFxuICAgIFwiNDNcIjogWy0wLjA4MDU2LCAwLjUzMDU1LCAwLCAwLCAwLjUyNV0sXG4gICAgXCI0NFwiOiBbMC4xMzg4OSwgMC4xMjUsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjQ1XCI6IFstMC4wODA1NiwgMC41MzA1NSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNDZcIjogWzAsIDAuMTI1LCAwLCAwLCAwLjUyNV0sXG4gICAgXCI0N1wiOiBbMC4wODMzMywgMC42OTQ0NCwgMCwgMCwgMC41MjVdLFxuICAgIFwiNDhcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjQ5XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI1MFwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNTFcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjUyXCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI1M1wiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNTRcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjU1XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI1NlwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNTdcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjU4XCI6IFswLCAwLjQzMDU2LCAwLCAwLCAwLjUyNV0sXG4gICAgXCI1OVwiOiBbMC4xMzg4OSwgMC40MzA1NiwgMCwgMCwgMC41MjVdLFxuICAgIFwiNjBcIjogWy0wLjA1NTU2LCAwLjU1NTU2LCAwLCAwLCAwLjUyNV0sXG4gICAgXCI2MVwiOiBbLTAuMTk1NDksIDAuNDE1NjIsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjYyXCI6IFstMC4wNTU1NiwgMC41NTU1NiwgMCwgMCwgMC41MjVdLFxuICAgIFwiNjNcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjY0XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI2NVwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNjZcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjY3XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI2OFwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNjlcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjcwXCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI3MVwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNzJcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjczXCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI3NFwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNzVcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjc2XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI3N1wiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNzhcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjc5XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI4MFwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiODFcIjogWzAuMTM4ODksIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjgyXCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI4M1wiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiODRcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjg1XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI4NlwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiODdcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjg4XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI4OVwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiOTBcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjkxXCI6IFswLjA4MzMzLCAwLjY5NDQ0LCAwLCAwLCAwLjUyNV0sXG4gICAgXCI5MlwiOiBbMC4wODMzMywgMC42OTQ0NCwgMCwgMCwgMC41MjVdLFxuICAgIFwiOTNcIjogWzAuMDgzMzMsIDAuNjk0NDQsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjk0XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI5NVwiOiBbMC4wOTUxNCwgMCwgMCwgMCwgMC41MjVdLFxuICAgIFwiOTZcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjk3XCI6IFswLCAwLjQzMDU2LCAwLCAwLCAwLjUyNV0sXG4gICAgXCI5OFwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiOTlcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjEwMFwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiMTAxXCI6IFswLCAwLjQzMDU2LCAwLCAwLCAwLjUyNV0sXG4gICAgXCIxMDJcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjEwM1wiOiBbMC4yMjIyMiwgMC40MzA1NiwgMCwgMCwgMC41MjVdLFxuICAgIFwiMTA0XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCIxMDVcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjEwNlwiOiBbMC4yMjIyMiwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiMTA3XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCIxMDhcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjEwOVwiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC41MjVdLFxuICAgIFwiMTEwXCI6IFswLCAwLjQzMDU2LCAwLCAwLCAwLjUyNV0sXG4gICAgXCIxMTFcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjExMlwiOiBbMC4yMjIyMiwgMC40MzA1NiwgMCwgMCwgMC41MjVdLFxuICAgIFwiMTEzXCI6IFswLjIyMjIyLCAwLjQzMDU2LCAwLCAwLCAwLjUyNV0sXG4gICAgXCIxMTRcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjExNVwiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC41MjVdLFxuICAgIFwiMTE2XCI6IFswLCAwLjU1MzU4LCAwLCAwLCAwLjUyNV0sXG4gICAgXCIxMTdcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjExOFwiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC41MjVdLFxuICAgIFwiMTE5XCI6IFswLCAwLjQzMDU2LCAwLCAwLCAwLjUyNV0sXG4gICAgXCIxMjBcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjEyMVwiOiBbMC4yMjIyMiwgMC40MzA1NiwgMCwgMCwgMC41MjVdLFxuICAgIFwiMTIyXCI6IFswLCAwLjQzMDU2LCAwLCAwLCAwLjUyNV0sXG4gICAgXCIxMjNcIjogWzAuMDgzMzMsIDAuNjk0NDQsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjEyNFwiOiBbMC4wODMzMywgMC42OTQ0NCwgMCwgMCwgMC41MjVdLFxuICAgIFwiMTI1XCI6IFswLjA4MzMzLCAwLjY5NDQ0LCAwLCAwLCAwLjUyNV0sXG4gICAgXCIxMjZcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjEyN1wiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiMTYwXCI6IFswLCAwLCAwLCAwLCAwLjUyNV0sXG4gICAgXCIxNzZcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjE4NFwiOiBbMC4xOTQ0NSwgMCwgMCwgMCwgMC41MjVdLFxuICAgIFwiMzA1XCI6IFswLCAwLjQzMDU2LCAwLCAwLCAwLjUyNV0sXG4gICAgXCI1NjdcIjogWzAuMjIyMjIsIDAuNDMwNTYsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjcxMVwiOiBbMCwgMC41NjU5NywgMCwgMCwgMC41MjVdLFxuICAgIFwiNzEzXCI6IFswLCAwLjU2NTU1LCAwLCAwLCAwLjUyNV0sXG4gICAgXCI3MTRcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjcxNVwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNzI4XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI3MzBcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjc3MFwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNzcxXCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI3NzZcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjkxNVwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiOTE2XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI5MjBcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjkyM1wiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiOTI2XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI5MjhcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjkzMVwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiOTMzXCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI5MzRcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjkzNlwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiOTM3XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI4MjE2XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI4MjE3XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI4MjQyXCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI5MjUxXCI6IFswLjExMTExLCAwLjIxOTQ0LCAwLCAwLCAwLjUyNV1cbiAgfVxufSk7XG47Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZm9udE1ldHJpY3MuanNcblxuXG4vKipcbiAqIFRoaXMgZmlsZSBjb250YWlucyBtZXRyaWNzIHJlZ2FyZGluZyBmb250cyBhbmQgaW5kaXZpZHVhbCBzeW1ib2xzLiBUaGUgc2lnbWFcbiAqIGFuZCB4aSB2YXJpYWJsZXMsIGFzIHdlbGwgYXMgdGhlIG1ldHJpY01hcCBtYXAgY29udGFpbiBkYXRhIGV4dHJhY3RlZCBmcm9tXG4gKiBUZVgsIFRlWCBmb250IG1ldHJpY3MsIGFuZCB0aGUgVFRGIGZpbGVzLiBUaGVzZSBkYXRhIGFyZSB0aGVuIGV4cG9zZWQgdmlhIHRoZVxuICogYG1ldHJpY3NgIHZhcmlhYmxlIGFuZCB0aGUgZ2V0Q2hhcmFjdGVyTWV0cmljcyBmdW5jdGlvbi5cbiAqL1xuLy8gSW4gVGVYLCB0aGVyZSBhcmUgYWN0dWFsbHkgdGhyZWUgc2V0cyBvZiBkaW1lbnNpb25zLCBvbmUgZm9yIGVhY2ggb2Zcbi8vIHRleHRzdHlsZSAoc2l6ZSBpbmRleCA1IGFuZCBoaWdoZXI6ID49OXB0KSwgc2NyaXB0c3R5bGUgKHNpemUgaW5kZXggMyBhbmQgNDpcbi8vIDctOHB0KSwgYW5kIHNjcmlwdHNjcmlwdHN0eWxlIChzaXplIGluZGV4IDEgYW5kIDI6IDUtNnB0KS4gIFRoZXNlIGFyZVxuLy8gcHJvdmlkZWQgaW4gdGhlIGFycmF5cyBiZWxvdywgaW4gdGhhdCBvcmRlci5cbi8vXG4vLyBUaGUgZm9udCBtZXRyaWNzIGFyZSBzdG9yZWQgaW4gZm9udHMgY21zeTEwLCBjbXN5NywgYW5kIGNtc3k1IHJlc3BlY3RpdmVseS5cbi8vIFRoaXMgd2FzIGRldGVybWluZWQgYnkgcnVubmluZyB0aGUgZm9sbG93aW5nIHNjcmlwdDpcbi8vXG4vLyAgICAgbGF0ZXggLWludGVyYWN0aW9uPW5vbnN0b3Btb2RlIFxcXG4vLyAgICAgJ1xcZG9jdW1lbnRjbGFzc3thcnRpY2xlfVxcdXNlcGFja2FnZXthbXNtYXRofVxcYmVnaW57ZG9jdW1lbnR9JyBcXFxuLy8gICAgICckYSQgXFxleHBhbmRhZnRlclxcc2hvd1xcdGhlXFx0ZXh0Zm9udDInIFxcXG4vLyAgICAgJ1xcZXhwYW5kYWZ0ZXJcXHNob3dcXHRoZVxcc2NyaXB0Zm9udDInIFxcXG4vLyAgICAgJ1xcZXhwYW5kYWZ0ZXJcXHNob3dcXHRoZVxcc2NyaXB0c2NyaXB0Zm9udDInIFxcXG4vLyAgICAgJ1xcc3RvcCdcbi8vXG4vLyBUaGUgbWV0cmljcyB0aGVtc2VsdmVzIHdlcmUgcmV0cmlldmVkIHVzaW5nIHRoZSBmb2xsb3dpbmcgY29tbWFuZHM6XG4vL1xuLy8gICAgIHRmdG9wbCBjbXN5MTBcbi8vICAgICB0ZnRvcGwgY21zeTdcbi8vICAgICB0ZnRvcGwgY21zeTVcbi8vXG4vLyBUaGUgb3V0cHV0IG9mIGVhY2ggb2YgdGhlc2UgY29tbWFuZHMgaXMgcXVpdGUgbGVuZ3RoeS4gIFRoZSBvbmx5IHBhcnQgd2Vcbi8vIGNhcmUgYWJvdXQgaXMgdGhlIEZPTlRESU1FTiBzZWN0aW9uLiBFYWNoIHZhbHVlIGlzIG1lYXN1cmVkIGluIEVNcy5cbmNvbnN0IHNpZ21hc0FuZFhpcyA9IHtcbiAgc2xhbnQ6IFswLjI1MCwgMC4yNTAsIDAuMjUwXSxcbiAgLy8gc2lnbWExXG4gIHNwYWNlOiBbMC4wMDAsIDAuMDAwLCAwLjAwMF0sXG4gIC8vIHNpZ21hMlxuICBzdHJldGNoOiBbMC4wMDAsIDAuMDAwLCAwLjAwMF0sXG4gIC8vIHNpZ21hM1xuICBzaHJpbms6IFswLjAwMCwgMC4wMDAsIDAuMDAwXSxcbiAgLy8gc2lnbWE0XG4gIHhIZWlnaHQ6IFswLjQzMSwgMC40MzEsIDAuNDMxXSxcbiAgLy8gc2lnbWE1XG4gIHF1YWQ6IFsxLjAwMCwgMS4xNzEsIDEuNDcyXSxcbiAgLy8gc2lnbWE2XG4gIGV4dHJhU3BhY2U6IFswLjAwMCwgMC4wMDAsIDAuMDAwXSxcbiAgLy8gc2lnbWE3XG4gIG51bTE6IFswLjY3NywgMC43MzIsIDAuOTI1XSxcbiAgLy8gc2lnbWE4XG4gIG51bTI6IFswLjM5NCwgMC4zODQsIDAuMzg3XSxcbiAgLy8gc2lnbWE5XG4gIG51bTM6IFswLjQ0NCwgMC40NzEsIDAuNTA0XSxcbiAgLy8gc2lnbWExMFxuICBkZW5vbTE6IFswLjY4NiwgMC43NTIsIDEuMDI1XSxcbiAgLy8gc2lnbWExMVxuICBkZW5vbTI6IFswLjM0NSwgMC4zNDQsIDAuNTMyXSxcbiAgLy8gc2lnbWExMlxuICBzdXAxOiBbMC40MTMsIDAuNTAzLCAwLjUwNF0sXG4gIC8vIHNpZ21hMTNcbiAgc3VwMjogWzAuMzYzLCAwLjQzMSwgMC40MDRdLFxuICAvLyBzaWdtYTE0XG4gIHN1cDM6IFswLjI4OSwgMC4yODYsIDAuMjk0XSxcbiAgLy8gc2lnbWExNVxuICBzdWIxOiBbMC4xNTAsIDAuMTQzLCAwLjIwMF0sXG4gIC8vIHNpZ21hMTZcbiAgc3ViMjogWzAuMjQ3LCAwLjI4NiwgMC40MDBdLFxuICAvLyBzaWdtYTE3XG4gIHN1cERyb3A6IFswLjM4NiwgMC4zNTMsIDAuNDk0XSxcbiAgLy8gc2lnbWExOFxuICBzdWJEcm9wOiBbMC4wNTAsIDAuMDcxLCAwLjEwMF0sXG4gIC8vIHNpZ21hMTlcbiAgZGVsaW0xOiBbMi4zOTAsIDEuNzAwLCAxLjk4MF0sXG4gIC8vIHNpZ21hMjBcbiAgZGVsaW0yOiBbMS4wMTAsIDEuMTU3LCAxLjQyMF0sXG4gIC8vIHNpZ21hMjFcbiAgYXhpc0hlaWdodDogWzAuMjUwLCAwLjI1MCwgMC4yNTBdLFxuICAvLyBzaWdtYTIyXG4gIC8vIFRoZXNlIGZvbnQgbWV0cmljcyBhcmUgZXh0cmFjdGVkIGZyb20gVGVYIGJ5IHVzaW5nIHRmdG9wbCBvbiBjbWV4MTAudGZtO1xuICAvLyB0aGV5IGNvcnJlc3BvbmQgdG8gdGhlIGZvbnQgcGFyYW1ldGVycyBvZiB0aGUgZXh0ZW5zaW9uIGZvbnRzIChmYW1pbHkgMykuXG4gIC8vIFNlZSB0aGUgVGVYYm9vaywgcGFnZSA0NDEuIEluIEFNU1RlWCwgdGhlIGV4dGVuc2lvbiBmb250cyBzY2FsZTsgdG9cbiAgLy8gbWF0Y2ggY21leDcsIHdlJ2QgdXNlIGNtZXg3LnRmbSB2YWx1ZXMgZm9yIHNjcmlwdCBhbmQgc2NyaXB0c2NyaXB0XG4gIC8vIHZhbHVlcy5cbiAgZGVmYXVsdFJ1bGVUaGlja25lc3M6IFswLjA0LCAwLjA0OSwgMC4wNDldLFxuICAvLyB4aTg7IGNtZXg3OiAwLjA0OVxuICBiaWdPcFNwYWNpbmcxOiBbMC4xMTEsIDAuMTExLCAwLjExMV0sXG4gIC8vIHhpOVxuICBiaWdPcFNwYWNpbmcyOiBbMC4xNjYsIDAuMTY2LCAwLjE2Nl0sXG4gIC8vIHhpMTBcbiAgYmlnT3BTcGFjaW5nMzogWzAuMiwgMC4yLCAwLjJdLFxuICAvLyB4aTExXG4gIGJpZ09wU3BhY2luZzQ6IFswLjYsIDAuNjExLCAwLjYxMV0sXG4gIC8vIHhpMTI7IGNtZXg3OiAwLjYxMVxuICBiaWdPcFNwYWNpbmc1OiBbMC4xLCAwLjE0MywgMC4xNDNdLFxuICAvLyB4aTEzOyBjbWV4NzogMC4xNDNcbiAgLy8gVGhlIFxcc3FydCBydWxlIHdpZHRoIGlzIHRha2VuIGZyb20gdGhlIGhlaWdodCBvZiB0aGUgc3VyZCBjaGFyYWN0ZXIuXG4gIC8vIFNpbmNlIHdlIHVzZSB0aGUgc2FtZSBmb250IGF0IGFsbCBzaXplcywgdGhpcyB0aGlja25lc3MgZG9lc24ndCBzY2FsZS5cbiAgc3FydFJ1bGVUaGlja25lc3M6IFswLjA0LCAwLjA0LCAwLjA0XSxcbiAgLy8gVGhpcyB2YWx1ZSBkZXRlcm1pbmVzIGhvdyBsYXJnZSBhIHB0IGlzLCBmb3IgbWV0cmljcyB3aGljaCBhcmUgZGVmaW5lZFxuICAvLyBpbiB0ZXJtcyBvZiBwdHMuXG4gIC8vIFRoaXMgdmFsdWUgaXMgYWxzbyB1c2VkIGluIGthdGV4LnNjc3M7IGlmIHlvdSBjaGFuZ2UgaXQgbWFrZSBzdXJlIHRoZVxuICAvLyB2YWx1ZXMgbWF0Y2guXG4gIHB0UGVyRW06IFsxMC4wLCAxMC4wLCAxMC4wXSxcbiAgLy8gVGhlIHNwYWNlIGJldHdlZW4gYWRqYWNlbnQgYHxgIGNvbHVtbnMgaW4gYW4gYXJyYXkgZGVmaW5pdGlvbi4gRnJvbVxuICAvLyBgXFxzaG93dGhlXFxkb3VibGVydWxlc2VwYCBpbiBMYVRlWC4gRXF1YWxzIDIuMCAvIHB0UGVyRW0uXG4gIGRvdWJsZVJ1bGVTZXA6IFswLjIsIDAuMiwgMC4yXSxcbiAgLy8gVGhlIHdpZHRoIG9mIHNlcGFyYXRvciBsaW5lcyBpbiB7YXJyYXl9IGVudmlyb25tZW50cy4gRnJvbVxuICAvLyBgXFxzaG93dGhlXFxhcnJheXJ1bGV3aWR0aGAgaW4gTGFUZVguIEVxdWFscyAwLjQgLyBwdFBlckVtLlxuICBhcnJheVJ1bGVXaWR0aDogWzAuMDQsIDAuMDQsIDAuMDRdLFxuICAvLyBUd28gdmFsdWVzIGZyb20gTGFUZVggc291cmNlMmU6XG4gIGZib3hzZXA6IFswLjMsIDAuMywgMC4zXSxcbiAgLy8gICAgICAgIDMgcHQgLyBwdFBlckVtXG4gIGZib3hydWxlOiBbMC4wNCwgMC4wNCwgMC4wNF0gLy8gMC40IHB0IC8gcHRQZXJFbVxuXG59OyAvLyBUaGlzIG1hcCBjb250YWlucyBhIG1hcHBpbmcgZnJvbSBmb250IG5hbWUgYW5kIGNoYXJhY3RlciBjb2RlIHRvIGNoYXJhY3RlclxuLy8gbWV0cmljcywgaW5jbHVkaW5nIGhlaWdodCwgZGVwdGgsIGl0YWxpYyBjb3JyZWN0aW9uLCBhbmQgc2tldyAoa2VybiBmcm9tIHRoZVxuLy8gY2hhcmFjdGVyIHRvIHRoZSBjb3JyZXNwb25kaW5nIFxcc2tld2NoYXIpXG4vLyBUaGlzIG1hcCBpcyBnZW5lcmF0ZWQgdmlhIGBtYWtlIG1ldHJpY3NgLiBJdCBzaG91bGQgbm90IGJlIGNoYW5nZWQgbWFudWFsbHkuXG5cbiAvLyBUaGVzZSBhcmUgdmVyeSByb3VnaCBhcHByb3hpbWF0aW9ucy4gIFdlIGRlZmF1bHQgdG8gVGltZXMgTmV3IFJvbWFuIHdoaWNoXG4vLyBzaG91bGQgaGF2ZSBMYXRpbi0xIGFuZCBDeXJpbGxpYyBjaGFyYWN0ZXJzLCBidXQgbWF5IG5vdCBkZXBlbmRpbmcgb24gdGhlXG4vLyBvcGVyYXRpbmcgc3lzdGVtLiAgVGhlIG1ldHJpY3MgZG8gbm90IGFjY291bnQgZm9yIGV4dHJhIGhlaWdodCBmcm9tIHRoZVxuLy8gYWNjZW50cy4gIEluIHRoZSBjYXNlIG9mIEN5cmlsbGljIGNoYXJhY3RlcnMgd2hpY2ggaGF2ZSBib3RoIGFzY2VuZGVycyBhbmRcbi8vIGRlc2NlbmRlcnMgd2UgcHJlZmVyIGFwcHJveGltYXRpb25zIHdpdGggYXNjZW5kZXJzLCBwcmltYXJpbHkgdG8gcHJldmVudFxuLy8gdGhlIGZyYWN0aW9uIGJhciBvciByb290IGxpbmUgZnJvbSBpbnRlcnNlY3RpbmcgdGhlIGdseXBoLlxuLy8gVE9ETyhrZXZpbmIpIGFsbG93IHVuaW9uIG9mIG11bHRpcGxlIGdseXBoIG1ldHJpY3MgZm9yIGJldHRlciBhY2N1cmFjeS5cblxuY29uc3QgZXh0cmFDaGFyYWN0ZXJNYXAgPSB7XG4gIC8vIExhdGluLTFcbiAgJ8OFJzogJ0EnLFxuICAnw5AnOiAnRCcsXG4gICfDnic6ICdvJyxcbiAgJ8OlJzogJ2EnLFxuICAnw7AnOiAnZCcsXG4gICfDvic6ICdvJyxcbiAgLy8gQ3lyaWxsaWNcbiAgJ9CQJzogJ0EnLFxuICAn0JEnOiAnQicsXG4gICfQkic6ICdCJyxcbiAgJ9CTJzogJ0YnLFxuICAn0JQnOiAnQScsXG4gICfQlSc6ICdFJyxcbiAgJ9CWJzogJ0snLFxuICAn0JcnOiAnMycsXG4gICfQmCc6ICdOJyxcbiAgJ9CZJzogJ04nLFxuICAn0JonOiAnSycsXG4gICfQmyc6ICdOJyxcbiAgJ9CcJzogJ00nLFxuICAn0J0nOiAnSCcsXG4gICfQnic6ICdPJyxcbiAgJ9CfJzogJ04nLFxuICAn0KAnOiAnUCcsXG4gICfQoSc6ICdDJyxcbiAgJ9CiJzogJ1QnLFxuICAn0KMnOiAneScsXG4gICfQpCc6ICdPJyxcbiAgJ9ClJzogJ1gnLFxuICAn0KYnOiAnVScsXG4gICfQpyc6ICdoJyxcbiAgJ9CoJzogJ1cnLFxuICAn0KknOiAnVycsXG4gICfQqic6ICdCJyxcbiAgJ9CrJzogJ1gnLFxuICAn0KwnOiAnQicsXG4gICfQrSc6ICczJyxcbiAgJ9CuJzogJ1gnLFxuICAn0K8nOiAnUicsXG4gICfQsCc6ICdhJyxcbiAgJ9CxJzogJ2InLFxuICAn0LInOiAnYScsXG4gICfQsyc6ICdyJyxcbiAgJ9C0JzogJ3knLFxuICAn0LUnOiAnZScsXG4gICfQtic6ICdtJyxcbiAgJ9C3JzogJ2UnLFxuICAn0LgnOiAnbicsXG4gICfQuSc6ICduJyxcbiAgJ9C6JzogJ24nLFxuICAn0LsnOiAnbicsXG4gICfQvCc6ICdtJyxcbiAgJ9C9JzogJ24nLFxuICAn0L4nOiAnbycsXG4gICfQvyc6ICduJyxcbiAgJ9GAJzogJ3AnLFxuICAn0YEnOiAnYycsXG4gICfRgic6ICdvJyxcbiAgJ9GDJzogJ3knLFxuICAn0YQnOiAnYicsXG4gICfRhSc6ICd4JyxcbiAgJ9GGJzogJ24nLFxuICAn0YcnOiAnbicsXG4gICfRiCc6ICd3JyxcbiAgJ9GJJzogJ3cnLFxuICAn0YonOiAnYScsXG4gICfRiyc6ICdtJyxcbiAgJ9GMJzogJ2EnLFxuICAn0Y0nOiAnZScsXG4gICfRjic6ICdtJyxcbiAgJ9GPJzogJ3InXG59O1xuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gYWRkcyBuZXcgZm9udCBtZXRyaWNzIHRvIGRlZmF1bHQgbWV0cmljTWFwXG4gKiBJdCBjYW4gYWxzbyBvdmVycmlkZSBleGlzdGluZyBtZXRyaWNzXG4gKi9cbmZ1bmN0aW9uIHNldEZvbnRNZXRyaWNzKGZvbnROYW1lLCBtZXRyaWNzKSB7XG4gIGZvbnRNZXRyaWNzRGF0YVtmb250TmFtZV0gPSBtZXRyaWNzO1xufVxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIGEgY29udmVuaWVuY2UgZnVuY3Rpb24gZm9yIGxvb2tpbmcgdXAgaW5mb3JtYXRpb24gaW4gdGhlXG4gKiBtZXRyaWNNYXAgdGFibGUuIEl0IHRha2VzIGEgY2hhcmFjdGVyIGFzIGEgc3RyaW5nLCBhbmQgYSBmb250LlxuICpcbiAqIE5vdGU6IHRoZSBgd2lkdGhgIHByb3BlcnR5IG1heSBiZSB1bmRlZmluZWQgaWYgZm9udE1ldHJpY3NEYXRhLmpzIHdhc24ndFxuICogYnVpbHQgdXNpbmcgYE1ha2UgZXh0ZW5kZWRfbWV0cmljc2AuXG4gKi9cblxuZnVuY3Rpb24gZ2V0Q2hhcmFjdGVyTWV0cmljcyhjaGFyYWN0ZXIsIGZvbnQsIG1vZGUpIHtcbiAgaWYgKCFmb250TWV0cmljc0RhdGFbZm9udF0pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJGb250IG1ldHJpY3Mgbm90IGZvdW5kIGZvciBmb250OiBcIiArIGZvbnQgKyBcIi5cIik7XG4gIH1cblxuICBsZXQgY2ggPSBjaGFyYWN0ZXIuY2hhckNvZGVBdCgwKTtcbiAgbGV0IG1ldHJpY3MgPSBmb250TWV0cmljc0RhdGFbZm9udF1bY2hdO1xuXG4gIGlmICghbWV0cmljcyAmJiBjaGFyYWN0ZXJbMF0gaW4gZXh0cmFDaGFyYWN0ZXJNYXApIHtcbiAgICBjaCA9IGV4dHJhQ2hhcmFjdGVyTWFwW2NoYXJhY3RlclswXV0uY2hhckNvZGVBdCgwKTtcbiAgICBtZXRyaWNzID0gZm9udE1ldHJpY3NEYXRhW2ZvbnRdW2NoXTtcbiAgfVxuXG4gIGlmICghbWV0cmljcyAmJiBtb2RlID09PSAndGV4dCcpIHtcbiAgICAvLyBXZSBkb24ndCB0eXBpY2FsbHkgaGF2ZSBmb250IG1ldHJpY3MgZm9yIEFzaWFuIHNjcmlwdHMuXG4gICAgLy8gQnV0IHNpbmNlIHdlIHN1cHBvcnQgdGhlbSBpbiB0ZXh0IG1vZGUsIHdlIG5lZWQgdG8gcmV0dXJuXG4gICAgLy8gc29tZSBzb3J0IG9mIG1ldHJpY3MuXG4gICAgLy8gU28gaWYgdGhlIGNoYXJhY3RlciBpcyBpbiBhIHNjcmlwdCB3ZSBzdXBwb3J0IGJ1dCB3ZVxuICAgIC8vIGRvbid0IGhhdmUgbWV0cmljcyBmb3IgaXQsIGp1c3QgdXNlIHRoZSBtZXRyaWNzIGZvclxuICAgIC8vIHRoZSBMYXRpbiBjYXBpdGFsIGxldHRlciBNLiBUaGlzIGlzIGNsb3NlIGVub3VnaCBiZWNhdXNlXG4gICAgLy8gd2UgKGN1cnJlbnRseSkgb25seSBjYXJlIGFib3V0IHRoZSBoZWlnaHQgb2YgdGhlIGdseXBoXG4gICAgLy8gbm90IGl0cyB3aWR0aC5cbiAgICBpZiAoc3VwcG9ydGVkQ29kZXBvaW50KGNoKSkge1xuICAgICAgbWV0cmljcyA9IGZvbnRNZXRyaWNzRGF0YVtmb250XVs3N107IC8vIDc3IGlzIHRoZSBjaGFyY29kZSBmb3IgJ00nXG4gICAgfVxuICB9XG5cbiAgaWYgKG1ldHJpY3MpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZGVwdGg6IG1ldHJpY3NbMF0sXG4gICAgICBoZWlnaHQ6IG1ldHJpY3NbMV0sXG4gICAgICBpdGFsaWM6IG1ldHJpY3NbMl0sXG4gICAgICBza2V3OiBtZXRyaWNzWzNdLFxuICAgICAgd2lkdGg6IG1ldHJpY3NbNF1cbiAgICB9O1xuICB9XG59XG5jb25zdCBmb250TWV0cmljc0J5U2l6ZUluZGV4ID0ge307XG4vKipcbiAqIEdldCB0aGUgZm9udCBtZXRyaWNzIGZvciBhIGdpdmVuIHNpemUuXG4gKi9cblxuZnVuY3Rpb24gZ2V0R2xvYmFsTWV0cmljcyhzaXplKSB7XG4gIGxldCBzaXplSW5kZXg7XG5cbiAgaWYgKHNpemUgPj0gNSkge1xuICAgIHNpemVJbmRleCA9IDA7XG4gIH0gZWxzZSBpZiAoc2l6ZSA+PSAzKSB7XG4gICAgc2l6ZUluZGV4ID0gMTtcbiAgfSBlbHNlIHtcbiAgICBzaXplSW5kZXggPSAyO1xuICB9XG5cbiAgaWYgKCFmb250TWV0cmljc0J5U2l6ZUluZGV4W3NpemVJbmRleF0pIHtcbiAgICBjb25zdCBtZXRyaWNzID0gZm9udE1ldHJpY3NCeVNpemVJbmRleFtzaXplSW5kZXhdID0ge1xuICAgICAgY3NzRW1QZXJNdTogc2lnbWFzQW5kWGlzLnF1YWRbc2l6ZUluZGV4XSAvIDE4XG4gICAgfTtcblxuICAgIGZvciAoY29uc3Qga2V5IGluIHNpZ21hc0FuZFhpcykge1xuICAgICAgaWYgKHNpZ21hc0FuZFhpcy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgIG1ldHJpY3Nba2V5XSA9IHNpZ21hc0FuZFhpc1trZXldW3NpemVJbmRleF07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZvbnRNZXRyaWNzQnlTaXplSW5kZXhbc2l6ZUluZGV4XTtcbn1cbjsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9PcHRpb25zLmpzXG4vKipcbiAqIFRoaXMgZmlsZSBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgb3B0aW9ucyB0aGF0IHRoZSBQYXJzZXIgY2Fycmllc1xuICogYXJvdW5kIHdpdGggaXQgd2hpbGUgcGFyc2luZy4gRGF0YSBpcyBoZWxkIGluIGFuIGBPcHRpb25zYCBvYmplY3QsIGFuZCB3aGVuXG4gKiByZWN1cnNpbmcsIGEgbmV3IGBPcHRpb25zYCBvYmplY3QgY2FuIGJlIGNyZWF0ZWQgd2l0aCB0aGUgYC53aXRoKmAgYW5kXG4gKiBgLnJlc2V0YCBmdW5jdGlvbnMuXG4gKi9cblxuY29uc3Qgc2l6ZVN0eWxlTWFwID0gWy8vIEVhY2ggZWxlbWVudCBjb250YWlucyBbdGV4dHNpemUsIHNjcmlwdHNpemUsIHNjcmlwdHNjcmlwdHNpemVdLlxuLy8gVGhlIHNpemUgbWFwcGluZ3MgYXJlIHRha2VuIGZyb20gVGVYIHdpdGggXFxub3JtYWxzaXplPTEwcHQuXG5bMSwgMSwgMV0sIC8vIHNpemUxOiBbNSwgNSwgNV0gICAgICAgICAgICAgIFxcdGlueVxuWzIsIDEsIDFdLCAvLyBzaXplMjogWzYsIDUsIDVdXG5bMywgMSwgMV0sIC8vIHNpemUzOiBbNywgNSwgNV0gICAgICAgICAgICAgIFxcc2NyaXB0c2l6ZVxuWzQsIDIsIDFdLCAvLyBzaXplNDogWzgsIDYsIDVdICAgICAgICAgICAgICBcXGZvb3Rub3Rlc2l6ZVxuWzUsIDIsIDFdLCAvLyBzaXplNTogWzksIDYsIDVdICAgICAgICAgICAgICBcXHNtYWxsXG5bNiwgMywgMV0sIC8vIHNpemU2OiBbMTAsIDcsIDVdICAgICAgICAgICAgIFxcbm9ybWFsc2l6ZVxuWzcsIDQsIDJdLCAvLyBzaXplNzogWzEyLCA4LCA2XSAgICAgICAgICAgICBcXGxhcmdlXG5bOCwgNiwgM10sIC8vIHNpemU4OiBbMTQuNCwgMTAsIDddICAgICAgICAgIFxcTGFyZ2Vcbls5LCA3LCA2XSwgLy8gc2l6ZTk6IFsxNy4yOCwgMTIsIDEwXSAgICAgICAgXFxMQVJHRVxuWzEwLCA4LCA3XSwgLy8gc2l6ZTEwOiBbMjAuNzQsIDE0LjQsIDEyXSAgICAgXFxodWdlXG5bMTEsIDEwLCA5XSAvLyBzaXplMTE6IFsyNC44OCwgMjAuNzQsIDE3LjI4XSBcXEhVR0Vcbl07XG5jb25zdCBzaXplTXVsdGlwbGllcnMgPSBbLy8gZm9udE1ldHJpY3MuanM6Z2V0R2xvYmFsTWV0cmljcyBhbHNvIHVzZXMgc2l6ZSBpbmRleGVzLCBzbyBpZlxuLy8geW91IGNoYW5nZSBzaXplIGluZGV4ZXMsIGNoYW5nZSB0aGF0IGZ1bmN0aW9uLlxuMC41LCAwLjYsIDAuNywgMC44LCAwLjksIDEuMCwgMS4yLCAxLjQ0LCAxLjcyOCwgMi4wNzQsIDIuNDg4XTtcblxuY29uc3Qgc2l6ZUF0U3R5bGUgPSBmdW5jdGlvbiAoc2l6ZSwgc3R5bGUpIHtcbiAgcmV0dXJuIHN0eWxlLnNpemUgPCAyID8gc2l6ZSA6IHNpemVTdHlsZU1hcFtzaXplIC0gMV1bc3R5bGUuc2l6ZSAtIDFdO1xufTsgLy8gSW4gdGhlc2UgdHlwZXMsIFwiXCIgKGVtcHR5IHN0cmluZykgbWVhbnMgXCJubyBjaGFuZ2VcIi5cblxuXG4vKipcbiAqIFRoaXMgaXMgdGhlIG1haW4gb3B0aW9ucyBjbGFzcy4gSXQgY29udGFpbnMgdGhlIGN1cnJlbnQgc3R5bGUsIHNpemUsIGNvbG9yLFxuICogYW5kIGZvbnQuXG4gKlxuICogT3B0aW9ucyBvYmplY3RzIHNob3VsZCBub3QgYmUgbW9kaWZpZWQuIFRvIGNyZWF0ZSBhIG5ldyBPcHRpb25zIHdpdGhcbiAqIGRpZmZlcmVudCBwcm9wZXJ0aWVzLCBjYWxsIGEgYC5oYXZpbmcqYCBtZXRob2QuXG4gKi9cbmNsYXNzIE9wdGlvbnMge1xuICAvLyBBIGZvbnQgZmFtaWx5IGFwcGxpZXMgdG8gYSBncm91cCBvZiBmb250cyAoaS5lLiBTYW5zU2VyaWYpLCB3aGlsZSBhIGZvbnRcbiAgLy8gcmVwcmVzZW50cyBhIHNwZWNpZmljIGZvbnQgKGkuZS4gU2Fuc1NlcmlmIEJvbGQpLlxuICAvLyBTZWU6IGh0dHBzOi8vdGV4LnN0YWNrZXhjaGFuZ2UuY29tL3F1ZXN0aW9ucy8yMjM1MC9kaWZmZXJlbmNlLWJldHdlZW4tdGV4dHJtLWFuZC1tYXRocm1cblxuICAvKipcbiAgICogVGhlIGJhc2Ugc2l6ZSBpbmRleC5cbiAgICovXG4gIGNvbnN0cnVjdG9yKGRhdGEpIHtcbiAgICB0aGlzLnN0eWxlID0gdm9pZCAwO1xuICAgIHRoaXMuY29sb3IgPSB2b2lkIDA7XG4gICAgdGhpcy5zaXplID0gdm9pZCAwO1xuICAgIHRoaXMudGV4dFNpemUgPSB2b2lkIDA7XG4gICAgdGhpcy5waGFudG9tID0gdm9pZCAwO1xuICAgIHRoaXMuZm9udCA9IHZvaWQgMDtcbiAgICB0aGlzLmZvbnRGYW1pbHkgPSB2b2lkIDA7XG4gICAgdGhpcy5mb250V2VpZ2h0ID0gdm9pZCAwO1xuICAgIHRoaXMuZm9udFNoYXBlID0gdm9pZCAwO1xuICAgIHRoaXMuc2l6ZU11bHRpcGxpZXIgPSB2b2lkIDA7XG4gICAgdGhpcy5tYXhTaXplID0gdm9pZCAwO1xuICAgIHRoaXMubWluUnVsZVRoaWNrbmVzcyA9IHZvaWQgMDtcbiAgICB0aGlzLl9mb250TWV0cmljcyA9IHZvaWQgMDtcbiAgICB0aGlzLnN0eWxlID0gZGF0YS5zdHlsZTtcbiAgICB0aGlzLmNvbG9yID0gZGF0YS5jb2xvcjtcbiAgICB0aGlzLnNpemUgPSBkYXRhLnNpemUgfHwgT3B0aW9ucy5CQVNFU0laRTtcbiAgICB0aGlzLnRleHRTaXplID0gZGF0YS50ZXh0U2l6ZSB8fCB0aGlzLnNpemU7XG4gICAgdGhpcy5waGFudG9tID0gISFkYXRhLnBoYW50b207XG4gICAgdGhpcy5mb250ID0gZGF0YS5mb250IHx8IFwiXCI7XG4gICAgdGhpcy5mb250RmFtaWx5ID0gZGF0YS5mb250RmFtaWx5IHx8IFwiXCI7XG4gICAgdGhpcy5mb250V2VpZ2h0ID0gZGF0YS5mb250V2VpZ2h0IHx8ICcnO1xuICAgIHRoaXMuZm9udFNoYXBlID0gZGF0YS5mb250U2hhcGUgfHwgJyc7XG4gICAgdGhpcy5zaXplTXVsdGlwbGllciA9IHNpemVNdWx0aXBsaWVyc1t0aGlzLnNpemUgLSAxXTtcbiAgICB0aGlzLm1heFNpemUgPSBkYXRhLm1heFNpemU7XG4gICAgdGhpcy5taW5SdWxlVGhpY2tuZXNzID0gZGF0YS5taW5SdWxlVGhpY2tuZXNzO1xuICAgIHRoaXMuX2ZvbnRNZXRyaWNzID0gdW5kZWZpbmVkO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgbmV3IG9wdGlvbnMgb2JqZWN0IHdpdGggdGhlIHNhbWUgcHJvcGVydGllcyBhcyBcInRoaXNcIi4gIFByb3BlcnRpZXNcbiAgICogZnJvbSBcImV4dGVuc2lvblwiIHdpbGwgYmUgY29waWVkIHRvIHRoZSBuZXcgb3B0aW9ucyBvYmplY3QuXG4gICAqL1xuXG5cbiAgZXh0ZW5kKGV4dGVuc2lvbikge1xuICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICBzdHlsZTogdGhpcy5zdHlsZSxcbiAgICAgIHNpemU6IHRoaXMuc2l6ZSxcbiAgICAgIHRleHRTaXplOiB0aGlzLnRleHRTaXplLFxuICAgICAgY29sb3I6IHRoaXMuY29sb3IsXG4gICAgICBwaGFudG9tOiB0aGlzLnBoYW50b20sXG4gICAgICBmb250OiB0aGlzLmZvbnQsXG4gICAgICBmb250RmFtaWx5OiB0aGlzLmZvbnRGYW1pbHksXG4gICAgICBmb250V2VpZ2h0OiB0aGlzLmZvbnRXZWlnaHQsXG4gICAgICBmb250U2hhcGU6IHRoaXMuZm9udFNoYXBlLFxuICAgICAgbWF4U2l6ZTogdGhpcy5tYXhTaXplLFxuICAgICAgbWluUnVsZVRoaWNrbmVzczogdGhpcy5taW5SdWxlVGhpY2tuZXNzXG4gICAgfTtcblxuICAgIGZvciAoY29uc3Qga2V5IGluIGV4dGVuc2lvbikge1xuICAgICAgaWYgKGV4dGVuc2lvbi5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgIGRhdGFba2V5XSA9IGV4dGVuc2lvbltrZXldO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBuZXcgT3B0aW9ucyhkYXRhKTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJuIGFuIG9wdGlvbnMgb2JqZWN0IHdpdGggdGhlIGdpdmVuIHN0eWxlLiBJZiBgdGhpcy5zdHlsZSA9PT0gc3R5bGVgLFxuICAgKiByZXR1cm5zIGB0aGlzYC5cbiAgICovXG5cblxuICBoYXZpbmdTdHlsZShzdHlsZSkge1xuICAgIGlmICh0aGlzLnN0eWxlID09PSBzdHlsZSkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLmV4dGVuZCh7XG4gICAgICAgIHN0eWxlOiBzdHlsZSxcbiAgICAgICAgc2l6ZTogc2l6ZUF0U3R5bGUodGhpcy50ZXh0U2l6ZSwgc3R5bGUpXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybiBhbiBvcHRpb25zIG9iamVjdCB3aXRoIGEgY3JhbXBlZCB2ZXJzaW9uIG9mIHRoZSBjdXJyZW50IHN0eWxlLiBJZlxuICAgKiB0aGUgY3VycmVudCBzdHlsZSBpcyBjcmFtcGVkLCByZXR1cm5zIGB0aGlzYC5cbiAgICovXG5cblxuICBoYXZpbmdDcmFtcGVkU3R5bGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuaGF2aW5nU3R5bGUodGhpcy5zdHlsZS5jcmFtcCgpKTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJuIGFuIG9wdGlvbnMgb2JqZWN0IHdpdGggdGhlIGdpdmVuIHNpemUgYW5kIGluIGF0IGxlYXN0IGBcXHRleHRzdHlsZWAuXG4gICAqIFJldHVybnMgYHRoaXNgIGlmIGFwcHJvcHJpYXRlLlxuICAgKi9cblxuXG4gIGhhdmluZ1NpemUoc2l6ZSkge1xuICAgIGlmICh0aGlzLnNpemUgPT09IHNpemUgJiYgdGhpcy50ZXh0U2l6ZSA9PT0gc2l6ZSkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLmV4dGVuZCh7XG4gICAgICAgIHN0eWxlOiB0aGlzLnN0eWxlLnRleHQoKSxcbiAgICAgICAgc2l6ZTogc2l6ZSxcbiAgICAgICAgdGV4dFNpemU6IHNpemUsXG4gICAgICAgIHNpemVNdWx0aXBsaWVyOiBzaXplTXVsdGlwbGllcnNbc2l6ZSAtIDFdXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIExpa2UgYHRoaXMuaGF2aW5nU2l6ZShCQVNFU0laRSkuaGF2aW5nU3R5bGUoc3R5bGUpYC4gSWYgYHN0eWxlYCBpcyBvbWl0dGVkLFxuICAgKiBjaGFuZ2VzIHRvIGF0IGxlYXN0IGBcXHRleHRzdHlsZWAuXG4gICAqL1xuXG5cbiAgaGF2aW5nQmFzZVN0eWxlKHN0eWxlKSB7XG4gICAgc3R5bGUgPSBzdHlsZSB8fCB0aGlzLnN0eWxlLnRleHQoKTtcbiAgICBjb25zdCB3YW50U2l6ZSA9IHNpemVBdFN0eWxlKE9wdGlvbnMuQkFTRVNJWkUsIHN0eWxlKTtcblxuICAgIGlmICh0aGlzLnNpemUgPT09IHdhbnRTaXplICYmIHRoaXMudGV4dFNpemUgPT09IE9wdGlvbnMuQkFTRVNJWkUgJiYgdGhpcy5zdHlsZSA9PT0gc3R5bGUpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5leHRlbmQoe1xuICAgICAgICBzdHlsZTogc3R5bGUsXG4gICAgICAgIHNpemU6IHdhbnRTaXplXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFJlbW92ZSB0aGUgZWZmZWN0IG9mIHNpemluZyBjaGFuZ2VzIHN1Y2ggYXMgXFxIdWdlLlxuICAgKiBLZWVwIHRoZSBlZmZlY3Qgb2YgdGhlIGN1cnJlbnQgc3R5bGUsIHN1Y2ggYXMgXFxzY3JpcHRzdHlsZS5cbiAgICovXG5cblxuICBoYXZpbmdCYXNlU2l6aW5nKCkge1xuICAgIGxldCBzaXplO1xuXG4gICAgc3dpdGNoICh0aGlzLnN0eWxlLmlkKSB7XG4gICAgICBjYXNlIDQ6XG4gICAgICBjYXNlIDU6XG4gICAgICAgIHNpemUgPSAzOyAvLyBub3JtYWxzaXplIGluIHNjcmlwdHN0eWxlXG5cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgNjpcbiAgICAgIGNhc2UgNzpcbiAgICAgICAgc2l6ZSA9IDE7IC8vIG5vcm1hbHNpemUgaW4gc2NyaXB0c2NyaXB0c3R5bGVcblxuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgc2l6ZSA9IDY7XG4gICAgICAvLyBub3JtYWxzaXplIGluIHRleHRzdHlsZSBvciBkaXNwbGF5c3R5bGVcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5leHRlbmQoe1xuICAgICAgc3R5bGU6IHRoaXMuc3R5bGUudGV4dCgpLFxuICAgICAgc2l6ZTogc2l6ZVxuICAgIH0pO1xuICB9XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgb3B0aW9ucyBvYmplY3Qgd2l0aCB0aGUgZ2l2ZW4gY29sb3IuXG4gICAqL1xuXG5cbiAgd2l0aENvbG9yKGNvbG9yKSB7XG4gICAgcmV0dXJuIHRoaXMuZXh0ZW5kKHtcbiAgICAgIGNvbG9yOiBjb2xvclxuICAgIH0pO1xuICB9XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgb3B0aW9ucyBvYmplY3Qgd2l0aCBcInBoYW50b21cIiBzZXQgdG8gdHJ1ZS5cbiAgICovXG5cblxuICB3aXRoUGhhbnRvbSgpIHtcbiAgICByZXR1cm4gdGhpcy5leHRlbmQoe1xuICAgICAgcGhhbnRvbTogdHJ1ZVxuICAgIH0pO1xuICB9XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IG9wdGlvbnMgb2JqZWN0IHdpdGggdGhlIGdpdmVuIG1hdGggZm9udCBvciBvbGQgdGV4dCBmb250LlxuICAgKiBAdHlwZSB7W3R5cGVdfVxuICAgKi9cblxuXG4gIHdpdGhGb250KGZvbnQpIHtcbiAgICByZXR1cm4gdGhpcy5leHRlbmQoe1xuICAgICAgZm9udFxuICAgIH0pO1xuICB9XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgb3B0aW9ucyBvYmplY3RzIHdpdGggdGhlIGdpdmVuIGZvbnRGYW1pbHkuXG4gICAqL1xuXG5cbiAgd2l0aFRleHRGb250RmFtaWx5KGZvbnRGYW1pbHkpIHtcbiAgICByZXR1cm4gdGhpcy5leHRlbmQoe1xuICAgICAgZm9udEZhbWlseSxcbiAgICAgIGZvbnQ6IFwiXCJcbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBvcHRpb25zIG9iamVjdCB3aXRoIHRoZSBnaXZlbiBmb250IHdlaWdodFxuICAgKi9cblxuXG4gIHdpdGhUZXh0Rm9udFdlaWdodChmb250V2VpZ2h0KSB7XG4gICAgcmV0dXJuIHRoaXMuZXh0ZW5kKHtcbiAgICAgIGZvbnRXZWlnaHQsXG4gICAgICBmb250OiBcIlwiXG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgb3B0aW9ucyBvYmplY3Qgd2l0aCB0aGUgZ2l2ZW4gZm9udCB3ZWlnaHRcbiAgICovXG5cblxuICB3aXRoVGV4dEZvbnRTaGFwZShmb250U2hhcGUpIHtcbiAgICByZXR1cm4gdGhpcy5leHRlbmQoe1xuICAgICAgZm9udFNoYXBlLFxuICAgICAgZm9udDogXCJcIlxuICAgIH0pO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIENTUyBzaXppbmcgY2xhc3NlcyByZXF1aXJlZCB0byBzd2l0Y2ggZnJvbSBlbmNsb3Npbmcgb3B0aW9uc1xuICAgKiBgb2xkT3B0aW9uc2AgdG8gYHRoaXNgLiBSZXR1cm5zIGFuIGFycmF5IG9mIGNsYXNzZXMuXG4gICAqL1xuXG5cbiAgc2l6aW5nQ2xhc3NlcyhvbGRPcHRpb25zKSB7XG4gICAgaWYgKG9sZE9wdGlvbnMuc2l6ZSAhPT0gdGhpcy5zaXplKSB7XG4gICAgICByZXR1cm4gW1wic2l6aW5nXCIsIFwicmVzZXQtc2l6ZVwiICsgb2xkT3B0aW9ucy5zaXplLCBcInNpemVcIiArIHRoaXMuc2l6ZV07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgQ1NTIHNpemluZyBjbGFzc2VzIHJlcXVpcmVkIHRvIHN3aXRjaCB0byB0aGUgYmFzZSBzaXplLiBMaWtlXG4gICAqIGB0aGlzLmhhdmluZ1NpemUoQkFTRVNJWkUpLnNpemluZ0NsYXNzZXModGhpcylgLlxuICAgKi9cblxuXG4gIGJhc2VTaXppbmdDbGFzc2VzKCkge1xuICAgIGlmICh0aGlzLnNpemUgIT09IE9wdGlvbnMuQkFTRVNJWkUpIHtcbiAgICAgIHJldHVybiBbXCJzaXppbmdcIiwgXCJyZXNldC1zaXplXCIgKyB0aGlzLnNpemUsIFwic2l6ZVwiICsgT3B0aW9ucy5CQVNFU0laRV07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgZm9udCBtZXRyaWNzIGZvciB0aGlzIHNpemUuXG4gICAqL1xuXG5cbiAgZm9udE1ldHJpY3MoKSB7XG4gICAgaWYgKCF0aGlzLl9mb250TWV0cmljcykge1xuICAgICAgdGhpcy5fZm9udE1ldHJpY3MgPSBnZXRHbG9iYWxNZXRyaWNzKHRoaXMuc2l6ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2ZvbnRNZXRyaWNzO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIHRoZSBDU1MgY29sb3Igb2YgdGhlIGN1cnJlbnQgb3B0aW9ucyBvYmplY3RcbiAgICovXG5cblxuICBnZXRDb2xvcigpIHtcbiAgICBpZiAodGhpcy5waGFudG9tKSB7XG4gICAgICByZXR1cm4gXCJ0cmFuc3BhcmVudFwiO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5jb2xvcjtcbiAgICB9XG4gIH1cblxufVxuXG5PcHRpb25zLkJBU0VTSVpFID0gNjtcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHNyY19PcHRpb25zID0gKE9wdGlvbnMpO1xuOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL3VuaXRzLmpzXG4vKipcbiAqIFRoaXMgZmlsZSBkb2VzIGNvbnZlcnNpb24gYmV0d2VlbiB1bml0cy4gIEluIHBhcnRpY3VsYXIsIGl0IHByb3ZpZGVzXG4gKiBjYWxjdWxhdGVTaXplIHRvIGNvbnZlcnQgb3RoZXIgdW5pdHMgaW50byBlbXMuXG4gKi9cblxuIC8vIFRoaXMgdGFibGUgZ2l2ZXMgdGhlIG51bWJlciBvZiBUZVggcHRzIGluIG9uZSBvZiBlYWNoICphYnNvbHV0ZSogVGVYIHVuaXQuXG4vLyBUaHVzLCBtdWx0aXBseWluZyBhIGxlbmd0aCBieSB0aGlzIG51bWJlciBjb252ZXJ0cyB0aGUgbGVuZ3RoIGZyb20gdW5pdHNcbi8vIGludG8gcHRzLiAgRGl2aWRpbmcgdGhlIHJlc3VsdCBieSBwdFBlckVtIGdpdmVzIHRoZSBudW1iZXIgb2YgZW1zXG4vLyAqYXNzdW1pbmcqIGEgZm9udCBzaXplIG9mIHB0UGVyRW0gKG5vcm1hbCBzaXplLCBub3JtYWwgc3R5bGUpLlxuXG5jb25zdCBwdFBlclVuaXQgPSB7XG4gIC8vIGh0dHBzOi8vZW4ud2lraWJvb2tzLm9yZy93aWtpL0xhVGVYL0xlbmd0aHMgYW5kXG4gIC8vIGh0dHBzOi8vdGV4LnN0YWNrZXhjaGFuZ2UuY29tL2EvODI2M1xuICBcInB0XCI6IDEsXG4gIC8vIFRlWCBwb2ludFxuICBcIm1tXCI6IDcyMjcgLyAyNTQwLFxuICAvLyBtaWxsaW1ldGVyXG4gIFwiY21cIjogNzIyNyAvIDI1NCxcbiAgLy8gY2VudGltZXRlclxuICBcImluXCI6IDcyLjI3LFxuICAvLyBpbmNoXG4gIFwiYnBcIjogODAzIC8gODAwLFxuICAvLyBiaWcgKFBvc3RTY3JpcHQpIHBvaW50c1xuICBcInBjXCI6IDEyLFxuICAvLyBwaWNhXG4gIFwiZGRcIjogMTIzOCAvIDExNTcsXG4gIC8vIGRpZG90XG4gIFwiY2NcIjogMTQ4NTYgLyAxMTU3LFxuICAvLyBjaWNlcm8gKDEyIGRpZG90KVxuICBcIm5kXCI6IDY4NSAvIDY0MixcbiAgLy8gbmV3IGRpZG90XG4gIFwibmNcIjogMTM3MCAvIDEwNyxcbiAgLy8gbmV3IGNpY2VybyAoMTIgbmV3IGRpZG90KVxuICBcInNwXCI6IDEgLyA2NTUzNixcbiAgLy8gc2NhbGVkIHBvaW50IChUZVgncyBpbnRlcm5hbCBzbWFsbGVzdCB1bml0KVxuICAvLyBodHRwczovL3RleC5zdGFja2V4Y2hhbmdlLmNvbS9hLzQxMzcxXG4gIFwicHhcIjogODAzIC8gODAwIC8vIFxccGRmcHhkaW1lbiBkZWZhdWx0cyB0byAxIGJwIGluIHBkZlRlWCBhbmQgTHVhVGVYXG5cbn07IC8vIERpY3Rpb25hcnkgb2YgcmVsYXRpdmUgdW5pdHMsIGZvciBmYXN0IHZhbGlkaXR5IHRlc3RpbmcuXG5cbmNvbnN0IHJlbGF0aXZlVW5pdCA9IHtcbiAgXCJleFwiOiB0cnVlLFxuICBcImVtXCI6IHRydWUsXG4gIFwibXVcIjogdHJ1ZVxufTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgd2hldGhlciB0aGUgc3BlY2lmaWVkIHVuaXQgKGVpdGhlciBhIHN0cmluZyBkZWZpbmluZyB0aGUgdW5pdFxuICogb3IgYSBcInNpemVcIiBwYXJzZSBub2RlIGNvbnRhaW5pbmcgYSB1bml0IGZpZWxkKSBpcyB2YWxpZC5cbiAqL1xuY29uc3QgdmFsaWRVbml0ID0gZnVuY3Rpb24gKHVuaXQpIHtcbiAgaWYgKHR5cGVvZiB1bml0ICE9PSBcInN0cmluZ1wiKSB7XG4gICAgdW5pdCA9IHVuaXQudW5pdDtcbiAgfVxuXG4gIHJldHVybiB1bml0IGluIHB0UGVyVW5pdCB8fCB1bml0IGluIHJlbGF0aXZlVW5pdCB8fCB1bml0ID09PSBcImV4XCI7XG59O1xuLypcbiAqIENvbnZlcnQgYSBcInNpemVcIiBwYXJzZSBub2RlICh3aXRoIG51bWVyaWMgXCJudW1iZXJcIiBhbmQgc3RyaW5nIFwidW5pdFwiIGZpZWxkcyxcbiAqIGFzIHBhcnNlZCBieSBmdW5jdGlvbnMuanMgYXJnVHlwZSBcInNpemVcIikgaW50byBhIENTUyBlbSB2YWx1ZSBmb3IgdGhlXG4gKiBjdXJyZW50IHN0eWxlL3NjYWxlLiAgYG9wdGlvbnNgIGdpdmVzIHRoZSBjdXJyZW50IG9wdGlvbnMuXG4gKi9cblxuY29uc3QgY2FsY3VsYXRlU2l6ZSA9IGZ1bmN0aW9uIChzaXplVmFsdWUsIG9wdGlvbnMpIHtcbiAgbGV0IHNjYWxlO1xuXG4gIGlmIChzaXplVmFsdWUudW5pdCBpbiBwdFBlclVuaXQpIHtcbiAgICAvLyBBYnNvbHV0ZSB1bml0c1xuICAgIHNjYWxlID0gcHRQZXJVbml0W3NpemVWYWx1ZS51bml0XSAvLyBDb252ZXJ0IHVuaXQgdG8gcHRcbiAgICAvIG9wdGlvbnMuZm9udE1ldHJpY3MoKS5wdFBlckVtIC8vIENvbnZlcnQgcHQgdG8gQ1NTIGVtXG4gICAgLyBvcHRpb25zLnNpemVNdWx0aXBsaWVyOyAvLyBVbnNjYWxlIHRvIG1ha2UgYWJzb2x1dGUgdW5pdHNcbiAgfSBlbHNlIGlmIChzaXplVmFsdWUudW5pdCA9PT0gXCJtdVwiKSB7XG4gICAgLy8gYG11YCB1bml0cyBzY2FsZSB3aXRoIHNjcmlwdHN0eWxlL3NjcmlwdHNjcmlwdHN0eWxlLlxuICAgIHNjYWxlID0gb3B0aW9ucy5mb250TWV0cmljcygpLmNzc0VtUGVyTXU7XG4gIH0gZWxzZSB7XG4gICAgLy8gT3RoZXIgcmVsYXRpdmUgdW5pdHMgYWx3YXlzIHJlZmVyIHRvIHRoZSAqdGV4dHN0eWxlKiBmb250XG4gICAgLy8gaW4gdGhlIGN1cnJlbnQgc2l6ZS5cbiAgICBsZXQgdW5pdE9wdGlvbnM7XG5cbiAgICBpZiAob3B0aW9ucy5zdHlsZS5pc1RpZ2h0KCkpIHtcbiAgICAgIC8vIGlzVGlnaHQoKSBtZWFucyBjdXJyZW50IHN0eWxlIGlzIHNjcmlwdC9zY3JpcHRzY3JpcHQuXG4gICAgICB1bml0T3B0aW9ucyA9IG9wdGlvbnMuaGF2aW5nU3R5bGUob3B0aW9ucy5zdHlsZS50ZXh0KCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB1bml0T3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgfSAvLyBUT0RPOiBJbiBUZVggdGhlc2UgdW5pdHMgYXJlIHJlbGF0aXZlIHRvIHRoZSBxdWFkIG9mIHRoZSBjdXJyZW50XG4gICAgLy8gKnRleHQqIGZvbnQsIGUuZy4gY21yMTAuIEthVGVYIGluc3RlYWQgdXNlcyB2YWx1ZXMgZnJvbSB0aGVcbiAgICAvLyBjb21wYXJhYmx5LXNpemVkICpDb21wdXRlciBNb2Rlcm4gc3ltYm9sKiBmb250LiBBdCAxMHB0LCB0aGVzZVxuICAgIC8vIG1hdGNoLiBBdCA3cHQgYW5kIDVwdCwgdGhleSBkaWZmZXI6IGNtcjc9MS4xMzg4OTQsIGNtc3k3PTEuMTcwNjQxO1xuICAgIC8vIGNtcjU9MS4zNjExMzMsIGNtc3k1PTEuNDcyMjQxLiBDb25zaWRlciAkXFxzY3JpcHRzaXplIGFcXGtlcm4xZW1iJC5cbiAgICAvLyBUZVggXFxzaG93bGlzdHMgc2hvd3MgYSBrZXJuIG9mIDEuMTM4ODkgKiBmb250c2l6ZTtcbiAgICAvLyBLYVRlWCBzaG93cyBhIGtlcm4gb2YgMS4xNzEgKiBmb250c2l6ZS5cblxuXG4gICAgaWYgKHNpemVWYWx1ZS51bml0ID09PSBcImV4XCIpIHtcbiAgICAgIHNjYWxlID0gdW5pdE9wdGlvbnMuZm9udE1ldHJpY3MoKS54SGVpZ2h0O1xuICAgIH0gZWxzZSBpZiAoc2l6ZVZhbHVlLnVuaXQgPT09IFwiZW1cIikge1xuICAgICAgc2NhbGUgPSB1bml0T3B0aW9ucy5mb250TWV0cmljcygpLnF1YWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIkludmFsaWQgdW5pdDogJ1wiICsgc2l6ZVZhbHVlLnVuaXQgKyBcIidcIik7XG4gICAgfVxuXG4gICAgaWYgKHVuaXRPcHRpb25zICE9PSBvcHRpb25zKSB7XG4gICAgICBzY2FsZSAqPSB1bml0T3B0aW9ucy5zaXplTXVsdGlwbGllciAvIG9wdGlvbnMuc2l6ZU11bHRpcGxpZXI7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIE1hdGgubWluKHNpemVWYWx1ZS5udW1iZXIgKiBzY2FsZSwgb3B0aW9ucy5tYXhTaXplKTtcbn07XG4vKipcbiAqIFJvdW5kIGBuYCB0byA0IGRlY2ltYWwgcGxhY2VzLCBvciB0byB0aGUgbmVhcmVzdCAxLzEwLDAwMHRoIGVtLiBTZWVcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9LYVRlWC9LYVRlWC9wdWxsLzI0NjAuXG4gKi9cblxuY29uc3QgbWFrZUVtID0gZnVuY3Rpb24gKG4pIHtcbiAgcmV0dXJuICtuLnRvRml4ZWQoNCkgKyBcImVtXCI7XG59O1xuOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2RvbVRyZWUuanNcbi8qKlxuICogVGhlc2Ugb2JqZWN0cyBzdG9yZSB0aGUgZGF0YSBhYm91dCB0aGUgRE9NIG5vZGVzIHdlIGNyZWF0ZSwgYXMgd2VsbCBhcyBzb21lXG4gKiBleHRyYSBkYXRhLiBUaGV5IGNhbiB0aGVuIGJlIHRyYW5zZm9ybWVkIGludG8gcmVhbCBET00gbm9kZXMgd2l0aCB0aGVcbiAqIGB0b05vZGVgIGZ1bmN0aW9uIG9yIEhUTUwgbWFya3VwIHVzaW5nIGB0b01hcmt1cGAuIFRoZXkgYXJlIHVzZWZ1bCBmb3IgYm90aFxuICogc3RvcmluZyBleHRyYSBwcm9wZXJ0aWVzIG9uIHRoZSBub2RlcywgYXMgd2VsbCBhcyBwcm92aWRpbmcgYSB3YXkgdG8gZWFzaWx5XG4gKiB3b3JrIHdpdGggdGhlIERPTS5cbiAqXG4gKiBTaW1pbGFyIGZ1bmN0aW9ucyBmb3Igd29ya2luZyB3aXRoIE1hdGhNTCBub2RlcyBleGlzdCBpbiBtYXRoTUxUcmVlLmpzLlxuICpcbiAqIFRPRE86IHJlZmFjdG9yIGBzcGFuYCBhbmQgYGFuY2hvcmAgaW50byBjb21tb24gc3VwZXJjbGFzcyB3aGVuXG4gKiB0YXJnZXQgZW52aXJvbm1lbnRzIHN1cHBvcnQgY2xhc3MgaW5oZXJpdGFuY2VcbiAqL1xuXG5cblxuXG5cblxuXG4vKipcbiAqIENyZWF0ZSBhbiBIVE1MIGNsYXNzTmFtZSBiYXNlZCBvbiBhIGxpc3Qgb2YgY2xhc3Nlcy4gSW4gYWRkaXRpb24gdG8gam9pbmluZ1xuICogd2l0aCBzcGFjZXMsIHdlIGFsc28gcmVtb3ZlIGVtcHR5IGNsYXNzZXMuXG4gKi9cbmNvbnN0IGNyZWF0ZUNsYXNzID0gZnVuY3Rpb24gKGNsYXNzZXMpIHtcbiAgcmV0dXJuIGNsYXNzZXMuZmlsdGVyKGNscyA9PiBjbHMpLmpvaW4oXCIgXCIpO1xufTtcblxuY29uc3QgaW5pdE5vZGUgPSBmdW5jdGlvbiAoY2xhc3Nlcywgb3B0aW9ucywgc3R5bGUpIHtcbiAgdGhpcy5jbGFzc2VzID0gY2xhc3NlcyB8fCBbXTtcbiAgdGhpcy5hdHRyaWJ1dGVzID0ge307XG4gIHRoaXMuaGVpZ2h0ID0gMDtcbiAgdGhpcy5kZXB0aCA9IDA7XG4gIHRoaXMubWF4Rm9udFNpemUgPSAwO1xuICB0aGlzLnN0eWxlID0gc3R5bGUgfHwge307XG5cbiAgaWYgKG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucy5zdHlsZS5pc1RpZ2h0KCkpIHtcbiAgICAgIHRoaXMuY2xhc3Nlcy5wdXNoKFwibXRpZ2h0XCIpO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbG9yID0gb3B0aW9ucy5nZXRDb2xvcigpO1xuXG4gICAgaWYgKGNvbG9yKSB7XG4gICAgICB0aGlzLnN0eWxlLmNvbG9yID0gY29sb3I7XG4gICAgfVxuICB9XG59O1xuLyoqXG4gKiBDb252ZXJ0IGludG8gYW4gSFRNTCBub2RlXG4gKi9cblxuXG5jb25zdCB0b05vZGUgPSBmdW5jdGlvbiAodGFnTmFtZSkge1xuICBjb25zdCBub2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWdOYW1lKTsgLy8gQXBwbHkgdGhlIGNsYXNzXG5cbiAgbm9kZS5jbGFzc05hbWUgPSBjcmVhdGVDbGFzcyh0aGlzLmNsYXNzZXMpOyAvLyBBcHBseSBpbmxpbmUgc3R5bGVzXG5cbiAgZm9yIChjb25zdCBzdHlsZSBpbiB0aGlzLnN0eWxlKSB7XG4gICAgaWYgKHRoaXMuc3R5bGUuaGFzT3duUHJvcGVydHkoc3R5bGUpKSB7XG4gICAgICAvLyAkRmxvd0ZpeE1lIEZsb3cgZG9lc24ndCBzZWVtIHRvIHVuZGVyc3RhbmQgc3Bhbi5zdHlsZSdzIHR5cGUuXG4gICAgICBub2RlLnN0eWxlW3N0eWxlXSA9IHRoaXMuc3R5bGVbc3R5bGVdO1xuICAgIH1cbiAgfSAvLyBBcHBseSBhdHRyaWJ1dGVzXG5cblxuICBmb3IgKGNvbnN0IGF0dHIgaW4gdGhpcy5hdHRyaWJ1dGVzKSB7XG4gICAgaWYgKHRoaXMuYXR0cmlidXRlcy5oYXNPd25Qcm9wZXJ0eShhdHRyKSkge1xuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoYXR0ciwgdGhpcy5hdHRyaWJ1dGVzW2F0dHJdKTtcbiAgICB9XG4gIH0gLy8gQXBwZW5kIHRoZSBjaGlsZHJlbiwgYWxzbyBhcyBIVE1MIG5vZGVzXG5cblxuICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICBub2RlLmFwcGVuZENoaWxkKHRoaXMuY2hpbGRyZW5baV0udG9Ob2RlKCkpO1xuICB9XG5cbiAgcmV0dXJuIG5vZGU7XG59O1xuLyoqXG4gKiBodHRwczovL3czYy5naXRodWIuaW8vaHRtbC1yZWZlcmVuY2Uvc3ludGF4Lmh0bWwjc3ludGF4LWF0dHJpYnV0ZXNcbiAqXG4gKiA+IEF0dHJpYnV0ZSBOYW1lcyBtdXN0IGNvbnNpc3Qgb2Ygb25lIG9yIG1vcmUgY2hhcmFjdGVyc1xuICogb3RoZXIgdGhhbiB0aGUgc3BhY2UgY2hhcmFjdGVycywgVSswMDAwIE5VTEwsXG4gKiAnXCInLCBcIidcIiwgXCI+XCIsIFwiL1wiLCBcIj1cIiwgdGhlIGNvbnRyb2wgY2hhcmFjdGVycyxcbiAqIGFuZCBhbnkgY2hhcmFjdGVycyB0aGF0IGFyZSBub3QgZGVmaW5lZCBieSBVbmljb2RlLlxuICovXG5cblxuY29uc3QgaW52YWxpZEF0dHJpYnV0ZU5hbWVSZWdleCA9IC9bXFxzXCInPi89XFx4MDAtXFx4MWZdLztcbi8qKlxuICogQ29udmVydCBpbnRvIGFuIEhUTUwgbWFya3VwIHN0cmluZ1xuICovXG5cbmNvbnN0IHRvTWFya3VwID0gZnVuY3Rpb24gKHRhZ05hbWUpIHtcbiAgbGV0IG1hcmt1cCA9IFwiPFwiICsgdGFnTmFtZTsgLy8gQWRkIHRoZSBjbGFzc1xuXG4gIGlmICh0aGlzLmNsYXNzZXMubGVuZ3RoKSB7XG4gICAgbWFya3VwICs9IFwiIGNsYXNzPVxcXCJcIiArIHV0aWxzLmVzY2FwZShjcmVhdGVDbGFzcyh0aGlzLmNsYXNzZXMpKSArIFwiXFxcIlwiO1xuICB9XG5cbiAgbGV0IHN0eWxlcyA9IFwiXCI7IC8vIEFkZCB0aGUgc3R5bGVzLCBhZnRlciBoeXBoZW5hdGlvblxuXG4gIGZvciAoY29uc3Qgc3R5bGUgaW4gdGhpcy5zdHlsZSkge1xuICAgIGlmICh0aGlzLnN0eWxlLmhhc093blByb3BlcnR5KHN0eWxlKSkge1xuICAgICAgc3R5bGVzICs9IHV0aWxzLmh5cGhlbmF0ZShzdHlsZSkgKyBcIjpcIiArIHRoaXMuc3R5bGVbc3R5bGVdICsgXCI7XCI7XG4gICAgfVxuICB9XG5cbiAgaWYgKHN0eWxlcykge1xuICAgIG1hcmt1cCArPSBcIiBzdHlsZT1cXFwiXCIgKyB1dGlscy5lc2NhcGUoc3R5bGVzKSArIFwiXFxcIlwiO1xuICB9IC8vIEFkZCB0aGUgYXR0cmlidXRlc1xuXG5cbiAgZm9yIChjb25zdCBhdHRyIGluIHRoaXMuYXR0cmlidXRlcykge1xuICAgIGlmICh0aGlzLmF0dHJpYnV0ZXMuaGFzT3duUHJvcGVydHkoYXR0cikpIHtcbiAgICAgIGlmIChpbnZhbGlkQXR0cmlidXRlTmFtZVJlZ2V4LnRlc3QoYXR0cikpIHtcbiAgICAgICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiSW52YWxpZCBhdHRyaWJ1dGUgbmFtZSAnXCIgKyBhdHRyICsgXCInXCIpO1xuICAgICAgfVxuXG4gICAgICBtYXJrdXAgKz0gXCIgXCIgKyBhdHRyICsgXCI9XFxcIlwiICsgdXRpbHMuZXNjYXBlKHRoaXMuYXR0cmlidXRlc1thdHRyXSkgKyBcIlxcXCJcIjtcbiAgICB9XG4gIH1cblxuICBtYXJrdXAgKz0gXCI+XCI7IC8vIEFkZCB0aGUgbWFya3VwIG9mIHRoZSBjaGlsZHJlbiwgYWxzbyBhcyBtYXJrdXBcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICBtYXJrdXAgKz0gdGhpcy5jaGlsZHJlbltpXS50b01hcmt1cCgpO1xuICB9XG5cbiAgbWFya3VwICs9IFwiPC9cIiArIHRhZ05hbWUgKyBcIj5cIjtcbiAgcmV0dXJuIG1hcmt1cDtcbn07IC8vIE1ha2luZyB0aGUgdHlwZSBiZWxvdyBleGFjdCB3aXRoIGFsbCBvcHRpb25hbCBmaWVsZHMgZG9lc24ndCB3b3JrIGR1ZSB0b1xuLy8gLSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svZmxvdy9pc3N1ZXMvNDU4MlxuLy8gLSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svZmxvdy9pc3N1ZXMvNTY4OFxuLy8gSG93ZXZlciwgc2luY2UgKmFsbCogZmllbGRzIGFyZSBvcHRpb25hbCwgJFNoYXBlPD4gd29ya3MgYXMgc3VnZ2VzdGVkIGluIDU2ODhcbi8vIGFib3ZlLlxuLy8gVGhpcyB0eXBlIGRvZXMgbm90IGluY2x1ZGUgYWxsIENTUyBwcm9wZXJ0aWVzLiBBZGRpdGlvbmFsIHByb3BlcnRpZXMgc2hvdWxkXG4vLyBiZSBhZGRlZCBhcyBuZWVkZWQuXG5cblxuLyoqXG4gKiBUaGlzIG5vZGUgcmVwcmVzZW50cyBhIHNwYW4gbm9kZSwgd2l0aCBhIGNsYXNzTmFtZSwgYSBsaXN0IG9mIGNoaWxkcmVuLCBhbmRcbiAqIGFuIGlubGluZSBzdHlsZS4gSXQgYWxzbyBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCBpdHMgaGVpZ2h0LCBkZXB0aCwgYW5kXG4gKiBtYXhGb250U2l6ZS5cbiAqXG4gKiBSZXByZXNlbnRzIHR3byB0eXBlcyB3aXRoIGRpZmZlcmVudCB1c2VzOiBTdmdTcGFuIHRvIHdyYXAgYW4gU1ZHIGFuZCBEb21TcGFuXG4gKiBvdGhlcndpc2UuIFRoaXMgdHlwZXNhZmV0eSBpcyBpbXBvcnRhbnQgd2hlbiBIVE1MIGJ1aWxkZXJzIGFjY2VzcyBhIHNwYW4nc1xuICogY2hpbGRyZW4uXG4gKi9cbmNsYXNzIFNwYW4ge1xuICBjb25zdHJ1Y3RvcihjbGFzc2VzLCBjaGlsZHJlbiwgb3B0aW9ucywgc3R5bGUpIHtcbiAgICB0aGlzLmNoaWxkcmVuID0gdm9pZCAwO1xuICAgIHRoaXMuYXR0cmlidXRlcyA9IHZvaWQgMDtcbiAgICB0aGlzLmNsYXNzZXMgPSB2b2lkIDA7XG4gICAgdGhpcy5oZWlnaHQgPSB2b2lkIDA7XG4gICAgdGhpcy5kZXB0aCA9IHZvaWQgMDtcbiAgICB0aGlzLndpZHRoID0gdm9pZCAwO1xuICAgIHRoaXMubWF4Rm9udFNpemUgPSB2b2lkIDA7XG4gICAgdGhpcy5zdHlsZSA9IHZvaWQgMDtcbiAgICBpbml0Tm9kZS5jYWxsKHRoaXMsIGNsYXNzZXMsIG9wdGlvbnMsIHN0eWxlKTtcbiAgICB0aGlzLmNoaWxkcmVuID0gY2hpbGRyZW4gfHwgW107XG4gIH1cbiAgLyoqXG4gICAqIFNldHMgYW4gYXJiaXRyYXJ5IGF0dHJpYnV0ZSBvbiB0aGUgc3Bhbi4gV2FybmluZzogdXNlIHRoaXMgd2lzZWx5LiBOb3RcbiAgICogYWxsIGJyb3dzZXJzIHN1cHBvcnQgYXR0cmlidXRlcyB0aGUgc2FtZSwgYW5kIGhhdmluZyB0b28gbWFueSBjdXN0b21cbiAgICogYXR0cmlidXRlcyBpcyBwcm9iYWJseSBiYWQuXG4gICAqL1xuXG5cbiAgc2V0QXR0cmlidXRlKGF0dHJpYnV0ZSwgdmFsdWUpIHtcbiAgICB0aGlzLmF0dHJpYnV0ZXNbYXR0cmlidXRlXSA9IHZhbHVlO1xuICB9XG5cbiAgaGFzQ2xhc3MoY2xhc3NOYW1lKSB7XG4gICAgcmV0dXJuIHV0aWxzLmNvbnRhaW5zKHRoaXMuY2xhc3NlcywgY2xhc3NOYW1lKTtcbiAgfVxuXG4gIHRvTm9kZSgpIHtcbiAgICByZXR1cm4gdG9Ob2RlLmNhbGwodGhpcywgXCJzcGFuXCIpO1xuICB9XG5cbiAgdG9NYXJrdXAoKSB7XG4gICAgcmV0dXJuIHRvTWFya3VwLmNhbGwodGhpcywgXCJzcGFuXCIpO1xuICB9XG5cbn1cbi8qKlxuICogVGhpcyBub2RlIHJlcHJlc2VudHMgYW4gYW5jaG9yICg8YT4pIGVsZW1lbnQgd2l0aCBhIGh5cGVybGluay4gIFNlZSBgc3BhbmBcbiAqIGZvciBmdXJ0aGVyIGRldGFpbHMuXG4gKi9cblxuY2xhc3MgQW5jaG9yIHtcbiAgY29uc3RydWN0b3IoaHJlZiwgY2xhc3NlcywgY2hpbGRyZW4sIG9wdGlvbnMpIHtcbiAgICB0aGlzLmNoaWxkcmVuID0gdm9pZCAwO1xuICAgIHRoaXMuYXR0cmlidXRlcyA9IHZvaWQgMDtcbiAgICB0aGlzLmNsYXNzZXMgPSB2b2lkIDA7XG4gICAgdGhpcy5oZWlnaHQgPSB2b2lkIDA7XG4gICAgdGhpcy5kZXB0aCA9IHZvaWQgMDtcbiAgICB0aGlzLm1heEZvbnRTaXplID0gdm9pZCAwO1xuICAgIHRoaXMuc3R5bGUgPSB2b2lkIDA7XG4gICAgaW5pdE5vZGUuY2FsbCh0aGlzLCBjbGFzc2VzLCBvcHRpb25zKTtcbiAgICB0aGlzLmNoaWxkcmVuID0gY2hpbGRyZW4gfHwgW107XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBocmVmKTtcbiAgfVxuXG4gIHNldEF0dHJpYnV0ZShhdHRyaWJ1dGUsIHZhbHVlKSB7XG4gICAgdGhpcy5hdHRyaWJ1dGVzW2F0dHJpYnV0ZV0gPSB2YWx1ZTtcbiAgfVxuXG4gIGhhc0NsYXNzKGNsYXNzTmFtZSkge1xuICAgIHJldHVybiB1dGlscy5jb250YWlucyh0aGlzLmNsYXNzZXMsIGNsYXNzTmFtZSk7XG4gIH1cblxuICB0b05vZGUoKSB7XG4gICAgcmV0dXJuIHRvTm9kZS5jYWxsKHRoaXMsIFwiYVwiKTtcbiAgfVxuXG4gIHRvTWFya3VwKCkge1xuICAgIHJldHVybiB0b01hcmt1cC5jYWxsKHRoaXMsIFwiYVwiKTtcbiAgfVxuXG59XG4vKipcbiAqIFRoaXMgbm9kZSByZXByZXNlbnRzIGFuIGltYWdlIGVtYmVkICg8aW1nPikgZWxlbWVudC5cbiAqL1xuXG5jbGFzcyBJbWcge1xuICBjb25zdHJ1Y3RvcihzcmMsIGFsdCwgc3R5bGUpIHtcbiAgICB0aGlzLnNyYyA9IHZvaWQgMDtcbiAgICB0aGlzLmFsdCA9IHZvaWQgMDtcbiAgICB0aGlzLmNsYXNzZXMgPSB2b2lkIDA7XG4gICAgdGhpcy5oZWlnaHQgPSB2b2lkIDA7XG4gICAgdGhpcy5kZXB0aCA9IHZvaWQgMDtcbiAgICB0aGlzLm1heEZvbnRTaXplID0gdm9pZCAwO1xuICAgIHRoaXMuc3R5bGUgPSB2b2lkIDA7XG4gICAgdGhpcy5hbHQgPSBhbHQ7XG4gICAgdGhpcy5zcmMgPSBzcmM7XG4gICAgdGhpcy5jbGFzc2VzID0gW1wibW9yZFwiXTtcbiAgICB0aGlzLnN0eWxlID0gc3R5bGU7XG4gIH1cblxuICBoYXNDbGFzcyhjbGFzc05hbWUpIHtcbiAgICByZXR1cm4gdXRpbHMuY29udGFpbnModGhpcy5jbGFzc2VzLCBjbGFzc05hbWUpO1xuICB9XG5cbiAgdG9Ob2RlKCkge1xuICAgIGNvbnN0IG5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW1nXCIpO1xuICAgIG5vZGUuc3JjID0gdGhpcy5zcmM7XG4gICAgbm9kZS5hbHQgPSB0aGlzLmFsdDtcbiAgICBub2RlLmNsYXNzTmFtZSA9IFwibW9yZFwiOyAvLyBBcHBseSBpbmxpbmUgc3R5bGVzXG5cbiAgICBmb3IgKGNvbnN0IHN0eWxlIGluIHRoaXMuc3R5bGUpIHtcbiAgICAgIGlmICh0aGlzLnN0eWxlLmhhc093blByb3BlcnR5KHN0eWxlKSkge1xuICAgICAgICAvLyAkRmxvd0ZpeE1lXG4gICAgICAgIG5vZGUuc3R5bGVbc3R5bGVdID0gdGhpcy5zdHlsZVtzdHlsZV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxuICB0b01hcmt1cCgpIHtcbiAgICBsZXQgbWFya3VwID0gXCI8aW1nIHNyYz1cXFwiXCIgKyB1dGlscy5lc2NhcGUodGhpcy5zcmMpICsgXCJcXFwiXCIgKyAoXCIgYWx0PVxcXCJcIiArIHV0aWxzLmVzY2FwZSh0aGlzLmFsdCkgKyBcIlxcXCJcIik7IC8vIEFkZCB0aGUgc3R5bGVzLCBhZnRlciBoeXBoZW5hdGlvblxuXG4gICAgbGV0IHN0eWxlcyA9IFwiXCI7XG5cbiAgICBmb3IgKGNvbnN0IHN0eWxlIGluIHRoaXMuc3R5bGUpIHtcbiAgICAgIGlmICh0aGlzLnN0eWxlLmhhc093blByb3BlcnR5KHN0eWxlKSkge1xuICAgICAgICBzdHlsZXMgKz0gdXRpbHMuaHlwaGVuYXRlKHN0eWxlKSArIFwiOlwiICsgdGhpcy5zdHlsZVtzdHlsZV0gKyBcIjtcIjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc3R5bGVzKSB7XG4gICAgICBtYXJrdXAgKz0gXCIgc3R5bGU9XFxcIlwiICsgdXRpbHMuZXNjYXBlKHN0eWxlcykgKyBcIlxcXCJcIjtcbiAgICB9XG5cbiAgICBtYXJrdXAgKz0gXCInLz5cIjtcbiAgICByZXR1cm4gbWFya3VwO1xuICB9XG5cbn1cbmNvbnN0IGlDb21iaW5hdGlvbnMgPSB7XG4gICfDric6ICdcXHUwMTMxXFx1MDMwMicsXG4gICfDryc6ICdcXHUwMTMxXFx1MDMwOCcsXG4gICfDrSc6ICdcXHUwMTMxXFx1MDMwMScsXG4gIC8vICfEqyc6ICdcXHUwMTMxXFx1MDMwNCcsIC8vIGVuYWJsZSB3aGVuIHdlIGFkZCBFeHRlbmRlZCBMYXRpblxuICAnw6wnOiAnXFx1MDEzMVxcdTAzMDAnXG59O1xuLyoqXG4gKiBBIHN5bWJvbCBub2RlIGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IGEgc2luZ2xlIHN5bWJvbC4gSXQgZWl0aGVyIHJlbmRlcnNcbiAqIHRvIGEgc2luZ2xlIHRleHQgbm9kZSwgb3IgYSBzcGFuIHdpdGggYSBzaW5nbGUgdGV4dCBub2RlIGluIGl0LCBkZXBlbmRpbmcgb25cbiAqIHdoZXRoZXIgaXQgaGFzIENTUyBjbGFzc2VzLCBzdHlsZXMsIG9yIG5lZWRzIGl0YWxpYyBjb3JyZWN0aW9uLlxuICovXG5cbmNsYXNzIFN5bWJvbE5vZGUge1xuICBjb25zdHJ1Y3Rvcih0ZXh0LCBoZWlnaHQsIGRlcHRoLCBpdGFsaWMsIHNrZXcsIHdpZHRoLCBjbGFzc2VzLCBzdHlsZSkge1xuICAgIHRoaXMudGV4dCA9IHZvaWQgMDtcbiAgICB0aGlzLmhlaWdodCA9IHZvaWQgMDtcbiAgICB0aGlzLmRlcHRoID0gdm9pZCAwO1xuICAgIHRoaXMuaXRhbGljID0gdm9pZCAwO1xuICAgIHRoaXMuc2tldyA9IHZvaWQgMDtcbiAgICB0aGlzLndpZHRoID0gdm9pZCAwO1xuICAgIHRoaXMubWF4Rm9udFNpemUgPSB2b2lkIDA7XG4gICAgdGhpcy5jbGFzc2VzID0gdm9pZCAwO1xuICAgIHRoaXMuc3R5bGUgPSB2b2lkIDA7XG4gICAgdGhpcy50ZXh0ID0gdGV4dDtcbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodCB8fCAwO1xuICAgIHRoaXMuZGVwdGggPSBkZXB0aCB8fCAwO1xuICAgIHRoaXMuaXRhbGljID0gaXRhbGljIHx8IDA7XG4gICAgdGhpcy5za2V3ID0gc2tldyB8fCAwO1xuICAgIHRoaXMud2lkdGggPSB3aWR0aCB8fCAwO1xuICAgIHRoaXMuY2xhc3NlcyA9IGNsYXNzZXMgfHwgW107XG4gICAgdGhpcy5zdHlsZSA9IHN0eWxlIHx8IHt9O1xuICAgIHRoaXMubWF4Rm9udFNpemUgPSAwOyAvLyBNYXJrIHRleHQgZnJvbSBub24tTGF0aW4gc2NyaXB0cyB3aXRoIHNwZWNpZmljIGNsYXNzZXMgc28gdGhhdCB3ZVxuICAgIC8vIGNhbiBzcGVjaWZ5IHdoaWNoIGZvbnRzIHRvIHVzZS4gIFRoaXMgYWxsb3dzIHVzIHRvIHJlbmRlciB0aGVzZVxuICAgIC8vIGNoYXJhY3RlcnMgd2l0aCBhIHNlcmlmIGZvbnQgaW4gc2l0dWF0aW9ucyB3aGVyZSB0aGUgYnJvd3NlciB3b3VsZFxuICAgIC8vIGVpdGhlciBkZWZhdWx0IHRvIGEgc2FucyBzZXJpZiBvciByZW5kZXIgYSBwbGFjZWhvbGRlciBjaGFyYWN0ZXIuXG4gICAgLy8gV2UgdXNlIENTUyBjbGFzcyBuYW1lcyBsaWtlIGNqa19mYWxsYmFjaywgaGFuZ3VsX2ZhbGxiYWNrIGFuZFxuICAgIC8vIGJyYWhtaWNfZmFsbGJhY2suIFNlZSAuL3VuaWNvZGVTY3JpcHRzLmpzIGZvciB0aGUgc2V0IG9mIHBvc3NpYmxlXG4gICAgLy8gc2NyaXB0IG5hbWVzXG5cbiAgICBjb25zdCBzY3JpcHQgPSBzY3JpcHRGcm9tQ29kZXBvaW50KHRoaXMudGV4dC5jaGFyQ29kZUF0KDApKTtcblxuICAgIGlmIChzY3JpcHQpIHtcbiAgICAgIHRoaXMuY2xhc3Nlcy5wdXNoKHNjcmlwdCArIFwiX2ZhbGxiYWNrXCIpO1xuICAgIH1cblxuICAgIGlmICgvW8Ouw6/DrcOsXS8udGVzdCh0aGlzLnRleHQpKSB7XG4gICAgICAvLyBhZGQgxKsgd2hlbiB3ZSBhZGQgRXh0ZW5kZWQgTGF0aW5cbiAgICAgIHRoaXMudGV4dCA9IGlDb21iaW5hdGlvbnNbdGhpcy50ZXh0XTtcbiAgICB9XG4gIH1cblxuICBoYXNDbGFzcyhjbGFzc05hbWUpIHtcbiAgICByZXR1cm4gdXRpbHMuY29udGFpbnModGhpcy5jbGFzc2VzLCBjbGFzc05hbWUpO1xuICB9XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgdGV4dCBub2RlIG9yIHNwYW4gZnJvbSBhIHN5bWJvbCBub2RlLiBOb3RlIHRoYXQgYSBzcGFuIGlzIG9ubHlcbiAgICogY3JlYXRlZCBpZiBpdCBpcyBuZWVkZWQuXG4gICAqL1xuXG5cbiAgdG9Ob2RlKCkge1xuICAgIGNvbnN0IG5vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0aGlzLnRleHQpO1xuICAgIGxldCBzcGFuID0gbnVsbDtcblxuICAgIGlmICh0aGlzLml0YWxpYyA+IDApIHtcbiAgICAgIHNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3BhblwiKTtcbiAgICAgIHNwYW4uc3R5bGUubWFyZ2luUmlnaHQgPSBtYWtlRW0odGhpcy5pdGFsaWMpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNsYXNzZXMubGVuZ3RoID4gMCkge1xuICAgICAgc3BhbiA9IHNwYW4gfHwgZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNwYW5cIik7XG4gICAgICBzcGFuLmNsYXNzTmFtZSA9IGNyZWF0ZUNsYXNzKHRoaXMuY2xhc3Nlcyk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBzdHlsZSBpbiB0aGlzLnN0eWxlKSB7XG4gICAgICBpZiAodGhpcy5zdHlsZS5oYXNPd25Qcm9wZXJ0eShzdHlsZSkpIHtcbiAgICAgICAgc3BhbiA9IHNwYW4gfHwgZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNwYW5cIik7IC8vICRGbG93Rml4TWUgRmxvdyBkb2Vzbid0IHNlZW0gdG8gdW5kZXJzdGFuZCBzcGFuLnN0eWxlJ3MgdHlwZS5cblxuICAgICAgICBzcGFuLnN0eWxlW3N0eWxlXSA9IHRoaXMuc3R5bGVbc3R5bGVdO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzcGFuKSB7XG4gICAgICBzcGFuLmFwcGVuZENoaWxkKG5vZGUpO1xuICAgICAgcmV0dXJuIHNwYW47XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBub2RlO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogQ3JlYXRlcyBtYXJrdXAgZm9yIGEgc3ltYm9sIG5vZGUuXG4gICAqL1xuXG5cbiAgdG9NYXJrdXAoKSB7XG4gICAgLy8gVE9ETyhhbHBlcnQpOiBNb3JlIGR1cGxpY2F0aW9uIHRoYW4gSSdkIGxpa2UgZnJvbVxuICAgIC8vIHNwYW4ucHJvdG90eXBlLnRvTWFya3VwIGFuZCBzeW1ib2xOb2RlLnByb3RvdHlwZS50b05vZGUuLi5cbiAgICBsZXQgbmVlZHNTcGFuID0gZmFsc2U7XG4gICAgbGV0IG1hcmt1cCA9IFwiPHNwYW5cIjtcblxuICAgIGlmICh0aGlzLmNsYXNzZXMubGVuZ3RoKSB7XG4gICAgICBuZWVkc1NwYW4gPSB0cnVlO1xuICAgICAgbWFya3VwICs9IFwiIGNsYXNzPVxcXCJcIjtcbiAgICAgIG1hcmt1cCArPSB1dGlscy5lc2NhcGUoY3JlYXRlQ2xhc3ModGhpcy5jbGFzc2VzKSk7XG4gICAgICBtYXJrdXAgKz0gXCJcXFwiXCI7XG4gICAgfVxuXG4gICAgbGV0IHN0eWxlcyA9IFwiXCI7XG5cbiAgICBpZiAodGhpcy5pdGFsaWMgPiAwKSB7XG4gICAgICBzdHlsZXMgKz0gXCJtYXJnaW4tcmlnaHQ6XCIgKyB0aGlzLml0YWxpYyArIFwiZW07XCI7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBzdHlsZSBpbiB0aGlzLnN0eWxlKSB7XG4gICAgICBpZiAodGhpcy5zdHlsZS5oYXNPd25Qcm9wZXJ0eShzdHlsZSkpIHtcbiAgICAgICAgc3R5bGVzICs9IHV0aWxzLmh5cGhlbmF0ZShzdHlsZSkgKyBcIjpcIiArIHRoaXMuc3R5bGVbc3R5bGVdICsgXCI7XCI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHN0eWxlcykge1xuICAgICAgbmVlZHNTcGFuID0gdHJ1ZTtcbiAgICAgIG1hcmt1cCArPSBcIiBzdHlsZT1cXFwiXCIgKyB1dGlscy5lc2NhcGUoc3R5bGVzKSArIFwiXFxcIlwiO1xuICAgIH1cblxuICAgIGNvbnN0IGVzY2FwZWQgPSB1dGlscy5lc2NhcGUodGhpcy50ZXh0KTtcblxuICAgIGlmIChuZWVkc1NwYW4pIHtcbiAgICAgIG1hcmt1cCArPSBcIj5cIjtcbiAgICAgIG1hcmt1cCArPSBlc2NhcGVkO1xuICAgICAgbWFya3VwICs9IFwiPC9zcGFuPlwiO1xuICAgICAgcmV0dXJuIG1hcmt1cDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGVzY2FwZWQ7XG4gICAgfVxuICB9XG5cbn1cbi8qKlxuICogU1ZHIG5vZGVzIGFyZSB1c2VkIHRvIHJlbmRlciBzdHJldGNoeSB3aWRlIGVsZW1lbnRzLlxuICovXG5cbmNsYXNzIFN2Z05vZGUge1xuICBjb25zdHJ1Y3RvcihjaGlsZHJlbiwgYXR0cmlidXRlcykge1xuICAgIHRoaXMuY2hpbGRyZW4gPSB2b2lkIDA7XG4gICAgdGhpcy5hdHRyaWJ1dGVzID0gdm9pZCAwO1xuICAgIHRoaXMuY2hpbGRyZW4gPSBjaGlsZHJlbiB8fCBbXTtcbiAgICB0aGlzLmF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzIHx8IHt9O1xuICB9XG5cbiAgdG9Ob2RlKCkge1xuICAgIGNvbnN0IHN2Z05TID0gXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiO1xuICAgIGNvbnN0IG5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoc3ZnTlMsIFwic3ZnXCIpOyAvLyBBcHBseSBhdHRyaWJ1dGVzXG5cbiAgICBmb3IgKGNvbnN0IGF0dHIgaW4gdGhpcy5hdHRyaWJ1dGVzKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuYXR0cmlidXRlcywgYXR0cikpIHtcbiAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoYXR0ciwgdGhpcy5hdHRyaWJ1dGVzW2F0dHJdKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgIG5vZGUuYXBwZW5kQ2hpbGQodGhpcy5jaGlsZHJlbltpXS50b05vZGUoKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxuICB0b01hcmt1cCgpIHtcbiAgICBsZXQgbWFya3VwID0gXCI8c3ZnIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCJcIjsgLy8gQXBwbHkgYXR0cmlidXRlc1xuXG4gICAgZm9yIChjb25zdCBhdHRyIGluIHRoaXMuYXR0cmlidXRlcykge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLmF0dHJpYnV0ZXMsIGF0dHIpKSB7XG4gICAgICAgIG1hcmt1cCArPSBcIiBcIiArIGF0dHIgKyBcIj1cXFwiXCIgKyB1dGlscy5lc2NhcGUodGhpcy5hdHRyaWJ1dGVzW2F0dHJdKSArIFwiXFxcIlwiO1xuICAgICAgfVxuICAgIH1cblxuICAgIG1hcmt1cCArPSBcIj5cIjtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgbWFya3VwICs9IHRoaXMuY2hpbGRyZW5baV0udG9NYXJrdXAoKTtcbiAgICB9XG5cbiAgICBtYXJrdXAgKz0gXCI8L3N2Zz5cIjtcbiAgICByZXR1cm4gbWFya3VwO1xuICB9XG5cbn1cbmNsYXNzIFBhdGhOb2RlIHtcbiAgY29uc3RydWN0b3IocGF0aE5hbWUsIGFsdGVybmF0ZSkge1xuICAgIHRoaXMucGF0aE5hbWUgPSB2b2lkIDA7XG4gICAgdGhpcy5hbHRlcm5hdGUgPSB2b2lkIDA7XG4gICAgdGhpcy5wYXRoTmFtZSA9IHBhdGhOYW1lO1xuICAgIHRoaXMuYWx0ZXJuYXRlID0gYWx0ZXJuYXRlOyAvLyBVc2VkIG9ubHkgZm9yIFxcc3FydCwgXFxwaGFzZSwgJiB0YWxsIGRlbGltc1xuICB9XG5cbiAgdG9Ob2RlKCkge1xuICAgIGNvbnN0IHN2Z05TID0gXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiO1xuICAgIGNvbnN0IG5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoc3ZnTlMsIFwicGF0aFwiKTtcblxuICAgIGlmICh0aGlzLmFsdGVybmF0ZSkge1xuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJkXCIsIHRoaXMuYWx0ZXJuYXRlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJkXCIsIHBhdGhbdGhpcy5wYXRoTmFtZV0pO1xuICAgIH1cblxuICAgIHJldHVybiBub2RlO1xuICB9XG5cbiAgdG9NYXJrdXAoKSB7XG4gICAgaWYgKHRoaXMuYWx0ZXJuYXRlKSB7XG4gICAgICByZXR1cm4gXCI8cGF0aCBkPVxcXCJcIiArIHV0aWxzLmVzY2FwZSh0aGlzLmFsdGVybmF0ZSkgKyBcIlxcXCIvPlwiO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gXCI8cGF0aCBkPVxcXCJcIiArIHV0aWxzLmVzY2FwZShwYXRoW3RoaXMucGF0aE5hbWVdKSArIFwiXFxcIi8+XCI7XG4gICAgfVxuICB9XG5cbn1cbmNsYXNzIExpbmVOb2RlIHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHRoaXMuYXR0cmlidXRlcyA9IHZvaWQgMDtcbiAgICB0aGlzLmF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzIHx8IHt9O1xuICB9XG5cbiAgdG9Ob2RlKCkge1xuICAgIGNvbnN0IHN2Z05TID0gXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiO1xuICAgIGNvbnN0IG5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoc3ZnTlMsIFwibGluZVwiKTsgLy8gQXBwbHkgYXR0cmlidXRlc1xuXG4gICAgZm9yIChjb25zdCBhdHRyIGluIHRoaXMuYXR0cmlidXRlcykge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLmF0dHJpYnV0ZXMsIGF0dHIpKSB7XG4gICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKGF0dHIsIHRoaXMuYXR0cmlidXRlc1thdHRyXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxuICB0b01hcmt1cCgpIHtcbiAgICBsZXQgbWFya3VwID0gXCI8bGluZVwiO1xuXG4gICAgZm9yIChjb25zdCBhdHRyIGluIHRoaXMuYXR0cmlidXRlcykge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLmF0dHJpYnV0ZXMsIGF0dHIpKSB7XG4gICAgICAgIG1hcmt1cCArPSBcIiBcIiArIGF0dHIgKyBcIj1cXFwiXCIgKyB1dGlscy5lc2NhcGUodGhpcy5hdHRyaWJ1dGVzW2F0dHJdKSArIFwiXFxcIlwiO1xuICAgICAgfVxuICAgIH1cblxuICAgIG1hcmt1cCArPSBcIi8+XCI7XG4gICAgcmV0dXJuIG1hcmt1cDtcbiAgfVxuXG59XG5mdW5jdGlvbiBhc3NlcnRTeW1ib2xEb21Ob2RlKGdyb3VwKSB7XG4gIGlmIChncm91cCBpbnN0YW5jZW9mIFN5bWJvbE5vZGUpIHtcbiAgICByZXR1cm4gZ3JvdXA7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgc3ltYm9sTm9kZSBidXQgZ290IFwiICsgU3RyaW5nKGdyb3VwKSArIFwiLlwiKTtcbiAgfVxufVxuZnVuY3Rpb24gYXNzZXJ0U3Bhbihncm91cCkge1xuICBpZiAoZ3JvdXAgaW5zdGFuY2VvZiBTcGFuKSB7XG4gICAgcmV0dXJuIGdyb3VwO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIHNwYW48SHRtbERvbU5vZGU+IGJ1dCBnb3QgXCIgKyBTdHJpbmcoZ3JvdXApICsgXCIuXCIpO1xuICB9XG59XG47Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvc3ltYm9scy5qc1xuLyoqXG4gKiBUaGlzIGZpbGUgaG9sZHMgYSBsaXN0IG9mIGFsbCBuby1hcmd1bWVudCBmdW5jdGlvbnMgYW5kIHNpbmdsZS1jaGFyYWN0ZXJcbiAqIHN5bWJvbHMgKGxpa2UgJ2EnIG9yICc7JykuXG4gKlxuICogRm9yIGVhY2ggb2YgdGhlIHN5bWJvbHMsIHRoZXJlIGFyZSB0aHJlZSBwcm9wZXJ0aWVzIHRoZXkgY2FuIGhhdmU6XG4gKiAtIGZvbnQgKHJlcXVpcmVkKTogdGhlIGZvbnQgdG8gYmUgdXNlZCBmb3IgdGhpcyBzeW1ib2wuIEVpdGhlciBcIm1haW5cIiAodGhlXG4gICAgIG5vcm1hbCBmb250KSwgb3IgXCJhbXNcIiAodGhlIGFtcyBmb250cykuXG4gKiAtIGdyb3VwIChyZXF1aXJlZCk6IHRoZSBQYXJzZU5vZGUgZ3JvdXAgdHlwZSB0aGUgc3ltYm9sIHNob3VsZCBoYXZlIChpLmUuXG4gICAgIFwidGV4dG9yZFwiLCBcIm1hdGhvcmRcIiwgZXRjKS5cbiAgICAgU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9LYVRlWC9LYVRlWC93aWtpL0V4YW1pbmluZy1UZVgjZ3JvdXAtdHlwZXNcbiAqIC0gcmVwbGFjZTogdGhlIGNoYXJhY3RlciB0aGF0IHRoaXMgc3ltYm9sIG9yIGZ1bmN0aW9uIHNob3VsZCBiZVxuICogICByZXBsYWNlZCB3aXRoIChpLmUuIFwiXFxwaGlcIiBoYXMgYSByZXBsYWNlIHZhbHVlIG9mIFwiXFx1MDNkNVwiLCB0aGUgcGhpXG4gKiAgIGNoYXJhY3RlciBpbiB0aGUgbWFpbiBmb250KS5cbiAqXG4gKiBUaGUgb3V0ZXJtb3N0IG1hcCBpbiB0aGUgdGFibGUgaW5kaWNhdGVzIHdoYXQgbW9kZSB0aGUgc3ltYm9scyBzaG91bGQgYmVcbiAqIGFjY2VwdGVkIGluIChlLmcuIFwibWF0aFwiIG9yIFwidGV4dFwiKS5cbiAqL1xuLy8gU29tZSBvZiB0aGVzZSBoYXZlIGEgXCItdG9rZW5cIiBzdWZmaXggc2luY2UgdGhlc2UgYXJlIGFsc28gdXNlZCBhcyBgUGFyc2VOb2RlYFxuLy8gdHlwZXMgZm9yIHJhdyB0ZXh0IHRva2VucywgYW5kIHdlIHdhbnQgdG8gYXZvaWQgY29uZmxpY3RzIHdpdGggaGlnaGVyLWxldmVsXG4vLyBgUGFyc2VOb2RlYCB0eXBlcy4gVGhlc2UgYFBhcnNlTm9kZWBzIGFyZSBjb25zdHJ1Y3RlZCB3aXRoaW4gYFBhcnNlcmAgYnlcbi8vIGxvb2tpbmcgdXAgdGhlIGBzeW1ib2xzYCBtYXAuXG5jb25zdCBBVE9NUyA9IHtcbiAgXCJiaW5cIjogMSxcbiAgXCJjbG9zZVwiOiAxLFxuICBcImlubmVyXCI6IDEsXG4gIFwib3BlblwiOiAxLFxuICBcInB1bmN0XCI6IDEsXG4gIFwicmVsXCI6IDFcbn07XG5jb25zdCBOT05fQVRPTVMgPSB7XG4gIFwiYWNjZW50LXRva2VuXCI6IDEsXG4gIFwibWF0aG9yZFwiOiAxLFxuICBcIm9wLXRva2VuXCI6IDEsXG4gIFwic3BhY2luZ1wiOiAxLFxuICBcInRleHRvcmRcIjogMVxufTtcbmNvbnN0IHN5bWJvbHMgPSB7XG4gIFwibWF0aFwiOiB7fSxcbiAgXCJ0ZXh0XCI6IHt9XG59O1xuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3JjX3N5bWJvbHMgPSAoc3ltYm9scyk7XG4vKiogYGFjY2VwdFVuaWNvZGVDaGFyID0gdHJ1ZWAgaXMgb25seSBhcHBsaWNhYmxlIGlmIGByZXBsYWNlYCBpcyBzZXQuICovXG5cbmZ1bmN0aW9uIGRlZmluZVN5bWJvbChtb2RlLCBmb250LCBncm91cCwgcmVwbGFjZSwgbmFtZSwgYWNjZXB0VW5pY29kZUNoYXIpIHtcbiAgc3ltYm9sc1ttb2RlXVtuYW1lXSA9IHtcbiAgICBmb250LFxuICAgIGdyb3VwLFxuICAgIHJlcGxhY2VcbiAgfTtcblxuICBpZiAoYWNjZXB0VW5pY29kZUNoYXIgJiYgcmVwbGFjZSkge1xuICAgIHN5bWJvbHNbbW9kZV1bcmVwbGFjZV0gPSBzeW1ib2xzW21vZGVdW25hbWVdO1xuICB9XG59IC8vIFNvbWUgYWJicmV2aWF0aW9ucyBmb3IgY29tbW9ubHkgdXNlZCBzdHJpbmdzLlxuLy8gVGhpcyBoZWxwcyBtaW5pZnkgdGhlIGNvZGUsIGFuZCBhbHNvIHNwb3R0aW5nIHR5cG9zIHVzaW5nIGpzaGludC5cbi8vIG1vZGVzOlxuXG5jb25zdCBtYXRoID0gXCJtYXRoXCI7XG5jb25zdCBzeW1ib2xzX3RleHQgPSBcInRleHRcIjsgLy8gZm9udHM6XG5cbmNvbnN0IG1haW4gPSBcIm1haW5cIjtcbmNvbnN0IGFtcyA9IFwiYW1zXCI7IC8vIGdyb3VwczpcblxuY29uc3QgYWNjZW50ID0gXCJhY2NlbnQtdG9rZW5cIjtcbmNvbnN0IGJpbiA9IFwiYmluXCI7XG5jb25zdCBzeW1ib2xzX2Nsb3NlID0gXCJjbG9zZVwiO1xuY29uc3QgaW5uZXIgPSBcImlubmVyXCI7XG5jb25zdCBtYXRob3JkID0gXCJtYXRob3JkXCI7XG5jb25zdCBvcCA9IFwib3AtdG9rZW5cIjtcbmNvbnN0IHN5bWJvbHNfb3BlbiA9IFwib3BlblwiO1xuY29uc3QgcHVuY3QgPSBcInB1bmN0XCI7XG5jb25zdCByZWwgPSBcInJlbFwiO1xuY29uc3Qgc3BhY2luZyA9IFwic3BhY2luZ1wiO1xuY29uc3QgdGV4dG9yZCA9IFwidGV4dG9yZFwiOyAvLyBOb3cgY29tZXMgdGhlIHN5bWJvbCB0YWJsZVxuLy8gUmVsYXRpb24gU3ltYm9sc1xuXG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIyNjFcIiwgXCJcXFxcZXF1aXZcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIyN2FcIiwgXCJcXFxccHJlY1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MjI3YlwiLCBcIlxcXFxzdWNjXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjNjXCIsIFwiXFxcXHNpbVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MjJhNVwiLCBcIlxcXFxwZXJwXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyYWFmXCIsIFwiXFxcXHByZWNlcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MmFiMFwiLCBcIlxcXFxzdWNjZXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIyNDNcIiwgXCJcXFxcc2ltZXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIyMjNcIiwgXCJcXFxcbWlkXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjZhXCIsIFwiXFxcXGxsXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjZiXCIsIFwiXFxcXGdnXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjRkXCIsIFwiXFxcXGFzeW1wXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjI1XCIsIFwiXFxcXHBhcmFsbGVsXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMmM4XCIsIFwiXFxcXGJvd3RpZVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MjMyM1wiLCBcIlxcXFxzbWlsZVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MjI5MVwiLCBcIlxcXFxzcXN1YnNldGVxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjkyXCIsIFwiXFxcXHNxc3Vwc2V0ZXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIyNTBcIiwgXCJcXFxcZG90ZXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIzMjJcIiwgXCJcXFxcZnJvd25cIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIyMGJcIiwgXCJcXFxcbmlcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIyMWRcIiwgXCJcXFxccHJvcHRvXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMmEyXCIsIFwiXFxcXHZkYXNoXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMmEzXCIsIFwiXFxcXGRhc2h2XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjBiXCIsIFwiXFxcXG93bnNcIik7IC8vIFB1bmN0dWF0aW9uXG5cbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBwdW5jdCwgXCJcXHUwMDJlXCIsIFwiXFxcXGxkb3RwXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHB1bmN0LCBcIlxcdTIyYzVcIiwgXCJcXFxcY2RvdHBcIik7IC8vIE1pc2MgU3ltYm9sc1xuXG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUwMDIzXCIsIFwiXFxcXCNcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCB0ZXh0b3JkLCBcIlxcdTAwMjNcIiwgXCJcXFxcI1wiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCB0ZXh0b3JkLCBcIlxcdTAwMjZcIiwgXCJcXFxcJlwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHRleHRvcmQsIFwiXFx1MDAyNlwiLCBcIlxcXFwmXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiXFx1MjEzNVwiLCBcIlxcXFxhbGVwaFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCB0ZXh0b3JkLCBcIlxcdTIyMDBcIiwgXCJcXFxcZm9yYWxsXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiXFx1MjEwZlwiLCBcIlxcXFxoYmFyXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiXFx1MjIwM1wiLCBcIlxcXFxleGlzdHNcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUyMjA3XCIsIFwiXFxcXG5hYmxhXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiXFx1MjY2ZFwiLCBcIlxcXFxmbGF0XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiXFx1MjExM1wiLCBcIlxcXFxlbGxcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUyNjZlXCIsIFwiXFxcXG5hdHVyYWxcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUyNjYzXCIsIFwiXFxcXGNsdWJzdWl0XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiXFx1MjExOFwiLCBcIlxcXFx3cFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCB0ZXh0b3JkLCBcIlxcdTI2NmZcIiwgXCJcXFxcc2hhcnBcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUyNjYyXCIsIFwiXFxcXGRpYW1vbmRzdWl0XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiXFx1MjExY1wiLCBcIlxcXFxSZVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCB0ZXh0b3JkLCBcIlxcdTI2NjFcIiwgXCJcXFxcaGVhcnRzdWl0XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiXFx1MjExMVwiLCBcIlxcXFxJbVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCB0ZXh0b3JkLCBcIlxcdTI2NjBcIiwgXCJcXFxcc3BhZGVzdWl0XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiXFx1MDBhN1wiLCBcIlxcXFxTXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUwMGE3XCIsIFwiXFxcXFNcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUwMGI2XCIsIFwiXFxcXFBcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCB0ZXh0b3JkLCBcIlxcdTAwYjZcIiwgXCJcXFxcUFwiKTsgLy8gTWF0aCBhbmQgVGV4dFxuXG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUyMDIwXCIsIFwiXFxcXGRhZ1wiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHRleHRvcmQsIFwiXFx1MjAyMFwiLCBcIlxcXFxkYWdcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCB0ZXh0b3JkLCBcIlxcdTIwMjBcIiwgXCJcXFxcdGV4dGRhZ2dlclwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCB0ZXh0b3JkLCBcIlxcdTIwMjFcIiwgXCJcXFxcZGRhZ1wiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHRleHRvcmQsIFwiXFx1MjAyMVwiLCBcIlxcXFxkZGFnXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUyMDIxXCIsIFwiXFxcXHRleHRkYWdnZXJkYmxcIik7IC8vIExhcmdlIERlbGltaXRlcnNcblxuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHN5bWJvbHNfY2xvc2UsIFwiXFx1MjNiMVwiLCBcIlxcXFxybW91c3RhY2hlXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHN5bWJvbHNfb3BlbiwgXCJcXHUyM2IwXCIsIFwiXFxcXGxtb3VzdGFjaGVcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgc3ltYm9sc19jbG9zZSwgXCJcXHUyN2VmXCIsIFwiXFxcXHJncm91cFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBzeW1ib2xzX29wZW4sIFwiXFx1MjdlZVwiLCBcIlxcXFxsZ3JvdXBcIiwgdHJ1ZSk7IC8vIEJpbmFyeSBPcGVyYXRvcnNcblxuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIGJpbiwgXCJcXHUyMjEzXCIsIFwiXFxcXG1wXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIGJpbiwgXCJcXHUyMjk2XCIsIFwiXFxcXG9taW51c1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBiaW4sIFwiXFx1MjI4ZVwiLCBcIlxcXFx1cGx1c1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBiaW4sIFwiXFx1MjI5M1wiLCBcIlxcXFxzcWNhcFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBiaW4sIFwiXFx1MjIxN1wiLCBcIlxcXFxhc3RcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgYmluLCBcIlxcdTIyOTRcIiwgXCJcXFxcc3FjdXBcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgYmluLCBcIlxcdTI1ZWZcIiwgXCJcXFxcYmlnY2lyY1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBiaW4sIFwiXFx1MjIxOVwiLCBcIlxcXFxidWxsZXRcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgYmluLCBcIlxcdTIwMjFcIiwgXCJcXFxcZGRhZ2dlclwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBiaW4sIFwiXFx1MjI0MFwiLCBcIlxcXFx3clwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBiaW4sIFwiXFx1MmEzZlwiLCBcIlxcXFxhbWFsZ1wiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBiaW4sIFwiXFx1MDAyNlwiLCBcIlxcXFxBbmRcIik7IC8vIGZyb20gYW1zbWF0aFxuLy8gQXJyb3cgU3ltYm9sc1xuXG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgcmVsLCBcIlxcdTI3ZjVcIiwgXCJcXFxcbG9uZ2xlZnRhcnJvd1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MjFkMFwiLCBcIlxcXFxMZWZ0YXJyb3dcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgcmVsLCBcIlxcdTI3ZjhcIiwgXCJcXFxcTG9uZ2xlZnRhcnJvd1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MjdmNlwiLCBcIlxcXFxsb25ncmlnaHRhcnJvd1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MjFkMlwiLCBcIlxcXFxSaWdodGFycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyN2Y5XCIsIFwiXFxcXExvbmdyaWdodGFycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMTk0XCIsIFwiXFxcXGxlZnRyaWdodGFycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyN2Y3XCIsIFwiXFxcXGxvbmdsZWZ0cmlnaHRhcnJvd1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MjFkNFwiLCBcIlxcXFxMZWZ0cmlnaHRhcnJvd1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MjdmYVwiLCBcIlxcXFxMb25nbGVmdHJpZ2h0YXJyb3dcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIxYTZcIiwgXCJcXFxcbWFwc3RvXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyN2ZjXCIsIFwiXFxcXGxvbmdtYXBzdG9cIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIxOTdcIiwgXCJcXFxcbmVhcnJvd1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MjFhOVwiLCBcIlxcXFxob29rbGVmdGFycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMWFhXCIsIFwiXFxcXGhvb2tyaWdodGFycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMTk4XCIsIFwiXFxcXHNlYXJyb3dcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIxYmNcIiwgXCJcXFxcbGVmdGhhcnBvb251cFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MjFjMFwiLCBcIlxcXFxyaWdodGhhcnBvb251cFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MjE5OVwiLCBcIlxcXFxzd2Fycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMWJkXCIsIFwiXFxcXGxlZnRoYXJwb29uZG93blwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MjFjMVwiLCBcIlxcXFxyaWdodGhhcnBvb25kb3duXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMTk2XCIsIFwiXFxcXG53YXJyb3dcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIxY2NcIiwgXCJcXFxccmlnaHRsZWZ0aGFycG9vbnNcIiwgdHJ1ZSk7IC8vIEFNUyBOZWdhdGVkIEJpbmFyeSBSZWxhdGlvbnNcblxuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyNmVcIiwgXCJcXFxcbmxlc3NcIiwgdHJ1ZSk7IC8vIFN5bWJvbCBuYW1lcyBwcmVjZWRlZCBieSBcIkBcIiBlYWNoIGhhdmUgYSBjb3JyZXNwb25kaW5nIG1hY3JvLlxuXG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1ZTAxMFwiLCBcIlxcXFxAbmxlcXNsYW50XCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdWUwMTFcIiwgXCJcXFxcQG5sZXFxXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTJhODdcIiwgXCJcXFxcbG5lcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjY4XCIsIFwiXFxcXGxuZXFxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdWUwMGNcIiwgXCJcXFxcQGx2ZXJ0bmVxcVwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMmU2XCIsIFwiXFxcXGxuc2ltXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTJhODlcIiwgXCJcXFxcbG5hcHByb3hcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjI4MFwiLCBcIlxcXFxucHJlY1wiLCB0cnVlKTsgLy8gdW5pY29kZS1tYXRoIG1hcHMgXFx1MjJlMCB0byBcXG5wcmVjY3VybHllcS4gV2UnbGwgdXNlIHRoZSBBTVMgc3lub255bS5cblxuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyZTBcIiwgXCJcXFxcbnByZWNlcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMmU4XCIsIFwiXFxcXHByZWNuc2ltXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTJhYjlcIiwgXCJcXFxccHJlY25hcHByb3hcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjI0MVwiLCBcIlxcXFxuc2ltXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdWUwMDZcIiwgXCJcXFxcQG5zaG9ydG1pZFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjI0XCIsIFwiXFxcXG5taWRcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjJhY1wiLCBcIlxcXFxudmRhc2hcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjJhZFwiLCBcIlxcXFxudkRhc2hcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjJlYVwiLCBcIlxcXFxudHJpYW5nbGVsZWZ0XCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyZWNcIiwgXCJcXFxcbnRyaWFuZ2xlbGVmdGVxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyOGFcIiwgXCJcXFxcc3Vic2V0bmVxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdWUwMWFcIiwgXCJcXFxcQHZhcnN1YnNldG5lcVwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyYWNiXCIsIFwiXFxcXHN1YnNldG5lcXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1ZTAxN1wiLCBcIlxcXFxAdmFyc3Vic2V0bmVxcVwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjZmXCIsIFwiXFxcXG5ndHJcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1ZTAwZlwiLCBcIlxcXFxAbmdlcXNsYW50XCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdWUwMGVcIiwgXCJcXFxcQG5nZXFxXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTJhODhcIiwgXCJcXFxcZ25lcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjY5XCIsIFwiXFxcXGduZXFxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdWUwMGRcIiwgXCJcXFxcQGd2ZXJ0bmVxcVwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMmU3XCIsIFwiXFxcXGduc2ltXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTJhOGFcIiwgXCJcXFxcZ25hcHByb3hcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjI4MVwiLCBcIlxcXFxuc3VjY1wiLCB0cnVlKTsgLy8gdW5pY29kZS1tYXRoIG1hcHMgXFx1MjJlMSB0byBcXG5zdWNjY3VybHllcS4gV2UnbGwgdXNlIHRoZSBBTVMgc3lub255bS5cblxuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyZTFcIiwgXCJcXFxcbnN1Y2NlcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMmU5XCIsIFwiXFxcXHN1Y2Nuc2ltXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTJhYmFcIiwgXCJcXFxcc3VjY25hcHByb3hcIiwgdHJ1ZSk7IC8vIHVuaWNvZGUtbWF0aCBtYXBzIFxcdTIyNDYgdG8gXFxzaW1uZXFxLiBXZSdsbCB1c2UgdGhlIEFNUyBzeW5vbnltLlxuXG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjI0NlwiLCBcIlxcXFxuY29uZ1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHVlMDA3XCIsIFwiXFxcXEBuc2hvcnRwYXJhbGxlbFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjI2XCIsIFwiXFxcXG5wYXJhbGxlbFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMmFmXCIsIFwiXFxcXG5WRGFzaFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMmViXCIsIFwiXFxcXG50cmlhbmdsZXJpZ2h0XCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyZWRcIiwgXCJcXFxcbnRyaWFuZ2xlcmlnaHRlcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHVlMDE4XCIsIFwiXFxcXEBuc3Vwc2V0ZXFxXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyOGJcIiwgXCJcXFxcc3Vwc2V0bmVxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdWUwMWJcIiwgXCJcXFxcQHZhcnN1cHNldG5lcVwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyYWNjXCIsIFwiXFxcXHN1cHNldG5lcXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1ZTAxOVwiLCBcIlxcXFxAdmFyc3Vwc2V0bmVxcVwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMmFlXCIsIFwiXFxcXG5WZGFzaFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyYWI1XCIsIFwiXFxcXHByZWNuZXFxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTJhYjZcIiwgXCJcXFxcc3VjY25lcXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1ZTAxNlwiLCBcIlxcXFxAbnN1YnNldGVxcVwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIGJpbiwgXCJcXHUyMmI0XCIsIFwiXFxcXHVubGhkXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgYmluLCBcIlxcdTIyYjVcIiwgXCJcXFxcdW5yaGRcIik7IC8vIEFNUyBOZWdhdGVkIEFycm93c1xuXG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjE5YVwiLCBcIlxcXFxubGVmdGFycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIxOWJcIiwgXCJcXFxcbnJpZ2h0YXJyb3dcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjFjZFwiLCBcIlxcXFxuTGVmdGFycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIxY2ZcIiwgXCJcXFxcblJpZ2h0YXJyb3dcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjFhZVwiLCBcIlxcXFxubGVmdHJpZ2h0YXJyb3dcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjFjZVwiLCBcIlxcXFxuTGVmdHJpZ2h0YXJyb3dcIiwgdHJ1ZSk7IC8vIEFNUyBNaXNjXG5cbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyNWIzXCIsIFwiXFxcXHZhcnRyaWFuZ2xlXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgdGV4dG9yZCwgXCJcXHUyMTBmXCIsIFwiXFxcXGhzbGFzaFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHRleHRvcmQsIFwiXFx1MjViZFwiLCBcIlxcXFx0cmlhbmdsZWRvd25cIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCB0ZXh0b3JkLCBcIlxcdTI1Y2FcIiwgXCJcXFxcbG96ZW5nZVwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHRleHRvcmQsIFwiXFx1MjRjOFwiLCBcIlxcXFxjaXJjbGVkU1wiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHRleHRvcmQsIFwiXFx1MDBhZVwiLCBcIlxcXFxjaXJjbGVkUlwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIGFtcywgdGV4dG9yZCwgXCJcXHUwMGFlXCIsIFwiXFxcXGNpcmNsZWRSXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgdGV4dG9yZCwgXCJcXHUyMjIxXCIsIFwiXFxcXG1lYXN1cmVkYW5nbGVcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCB0ZXh0b3JkLCBcIlxcdTIyMDRcIiwgXCJcXFxcbmV4aXN0c1wiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHRleHRvcmQsIFwiXFx1MjEyN1wiLCBcIlxcXFxtaG9cIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCB0ZXh0b3JkLCBcIlxcdTIxMzJcIiwgXCJcXFxcRmludlwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHRleHRvcmQsIFwiXFx1MjE0MVwiLCBcIlxcXFxHYW1lXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgdGV4dG9yZCwgXCJcXHUyMDM1XCIsIFwiXFxcXGJhY2twcmltZVwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHRleHRvcmQsIFwiXFx1MjViMlwiLCBcIlxcXFxibGFja3RyaWFuZ2xlXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgdGV4dG9yZCwgXCJcXHUyNWJjXCIsIFwiXFxcXGJsYWNrdHJpYW5nbGVkb3duXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgdGV4dG9yZCwgXCJcXHUyNWEwXCIsIFwiXFxcXGJsYWNrc3F1YXJlXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgdGV4dG9yZCwgXCJcXHUyOWViXCIsIFwiXFxcXGJsYWNrbG96ZW5nZVwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHRleHRvcmQsIFwiXFx1MjYwNVwiLCBcIlxcXFxiaWdzdGFyXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgdGV4dG9yZCwgXCJcXHUyMjIyXCIsIFwiXFxcXHNwaGVyaWNhbGFuZ2xlXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgdGV4dG9yZCwgXCJcXHUyMjAxXCIsIFwiXFxcXGNvbXBsZW1lbnRcIiwgdHJ1ZSk7IC8vIHVuaWNvZGUtbWF0aCBtYXBzIFUrRjAgdG8gXFxtYXRoZXRoLiBXZSBtYXAgdG8gQU1TIGZ1bmN0aW9uIFxcZXRoXG5cbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHRleHRvcmQsIFwiXFx1MDBmMFwiLCBcIlxcXFxldGhcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCB0ZXh0b3JkLCBcIlxcdTAwZjBcIiwgXCJcXHUwMGYwXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgdGV4dG9yZCwgXCJcXHUyNTcxXCIsIFwiXFxcXGRpYWd1cFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHRleHRvcmQsIFwiXFx1MjU3MlwiLCBcIlxcXFxkaWFnZG93blwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHRleHRvcmQsIFwiXFx1MjVhMVwiLCBcIlxcXFxzcXVhcmVcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCB0ZXh0b3JkLCBcIlxcdTI1YTFcIiwgXCJcXFxcQm94XCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgdGV4dG9yZCwgXCJcXHUyNWNhXCIsIFwiXFxcXERpYW1vbmRcIik7IC8vIHVuaWNvZGUtbWF0aCBtYXBzIFUrQTUgdG8gXFxtYXRoeWVuLiBXZSBtYXAgdG8gQU1TIGZ1bmN0aW9uIFxceWVuXG5cbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHRleHRvcmQsIFwiXFx1MDBhNVwiLCBcIlxcXFx5ZW5cIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBhbXMsIHRleHRvcmQsIFwiXFx1MDBhNVwiLCBcIlxcXFx5ZW5cIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCB0ZXh0b3JkLCBcIlxcdTI3MTNcIiwgXCJcXFxcY2hlY2ttYXJrXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgYW1zLCB0ZXh0b3JkLCBcIlxcdTI3MTNcIiwgXCJcXFxcY2hlY2ttYXJrXCIpOyAvLyBBTVMgSGVicmV3XG5cbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHRleHRvcmQsIFwiXFx1MjEzNlwiLCBcIlxcXFxiZXRoXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgdGV4dG9yZCwgXCJcXHUyMTM4XCIsIFwiXFxcXGRhbGV0aFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHRleHRvcmQsIFwiXFx1MjEzN1wiLCBcIlxcXFxnaW1lbFwiLCB0cnVlKTsgLy8gQU1TIEdyZWVrXG5cbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHRleHRvcmQsIFwiXFx1MDNkZFwiLCBcIlxcXFxkaWdhbW1hXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgdGV4dG9yZCwgXCJcXHUwM2YwXCIsIFwiXFxcXHZhcmthcHBhXCIpOyAvLyBBTVMgRGVsaW1pdGVyc1xuXG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCBzeW1ib2xzX29wZW4sIFwiXFx1MjUwY1wiLCBcIlxcXFxAdWxjb3JuZXJcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCBzeW1ib2xzX2Nsb3NlLCBcIlxcdTI1MTBcIiwgXCJcXFxcQHVyY29ybmVyXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgc3ltYm9sc19vcGVuLCBcIlxcdTI1MTRcIiwgXCJcXFxcQGxsY29ybmVyXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgc3ltYm9sc19jbG9zZSwgXCJcXHUyNTE4XCIsIFwiXFxcXEBscmNvcm5lclwiLCB0cnVlKTsgLy8gQU1TIEJpbmFyeSBSZWxhdGlvbnNcblxuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyNjZcIiwgXCJcXFxcbGVxcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyYTdkXCIsIFwiXFxcXGxlcXNsYW50XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTJhOTVcIiwgXCJcXFxcZXFzbGFudGxlc3NcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjI3MlwiLCBcIlxcXFxsZXNzc2ltXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTJhODVcIiwgXCJcXFxcbGVzc2FwcHJveFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjRhXCIsIFwiXFxcXGFwcHJveGVxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgYmluLCBcIlxcdTIyZDZcIiwgXCJcXFxcbGVzc2RvdFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMmQ4XCIsIFwiXFxcXGxsbFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjc2XCIsIFwiXFxcXGxlc3NndHJcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjJkYVwiLCBcIlxcXFxsZXNzZXFndHJcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MmE4YlwiLCBcIlxcXFxsZXNzZXFxZ3RyXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyNTFcIiwgXCJcXFxcZG90ZXFkb3RcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjI1M1wiLCBcIlxcXFxyaXNpbmdkb3RzZXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjI1MlwiLCBcIlxcXFxmYWxsaW5nZG90c2VxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyM2RcIiwgXCJcXFxcYmFja3NpbVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMmNkXCIsIFwiXFxcXGJhY2tzaW1lcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyYWM1XCIsIFwiXFxcXHN1YnNldGVxcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMmQwXCIsIFwiXFxcXFN1YnNldFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjhmXCIsIFwiXFxcXHNxc3Vic2V0XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyN2NcIiwgXCJcXFxccHJlY2N1cmx5ZXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjJkZVwiLCBcIlxcXFxjdXJseWVxcHJlY1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjdlXCIsIFwiXFxcXHByZWNzaW1cIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MmFiN1wiLCBcIlxcXFxwcmVjYXBwcm94XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyYjJcIiwgXCJcXFxcdmFydHJpYW5nbGVsZWZ0XCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyYjRcIiwgXCJcXFxcdHJpYW5nbGVsZWZ0ZXFcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjJhOFwiLCBcIlxcXFx2RGFzaFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMmFhXCIsIFwiXFxcXFZ2ZGFzaFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMzIzXCIsIFwiXFxcXHNtYWxsc21pbGVcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjMyMlwiLCBcIlxcXFxzbWFsbGZyb3duXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyNGZcIiwgXCJcXFxcYnVtcGVxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyNGVcIiwgXCJcXFxcQnVtcGVxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyNjdcIiwgXCJcXFxcZ2VxcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyYTdlXCIsIFwiXFxcXGdlcXNsYW50XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTJhOTZcIiwgXCJcXFxcZXFzbGFudGd0clwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjczXCIsIFwiXFxcXGd0cnNpbVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyYTg2XCIsIFwiXFxcXGd0cmFwcHJveFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIGJpbiwgXCJcXHUyMmQ3XCIsIFwiXFxcXGd0cmRvdFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMmQ5XCIsIFwiXFxcXGdnZ1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjc3XCIsIFwiXFxcXGd0cmxlc3NcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjJkYlwiLCBcIlxcXFxndHJlcWxlc3NcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MmE4Y1wiLCBcIlxcXFxndHJlcXFsZXNzXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyNTZcIiwgXCJcXFxcZXFjaXJjXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyNTdcIiwgXCJcXFxcY2lyY2VxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyNWNcIiwgXCJcXFxcdHJpYW5nbGVxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyM2NcIiwgXCJcXFxcdGhpY2tzaW1cIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjI0OFwiLCBcIlxcXFx0aGlja2FwcHJveFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyYWM2XCIsIFwiXFxcXHN1cHNldGVxcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMmQxXCIsIFwiXFxcXFN1cHNldFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjkwXCIsIFwiXFxcXHNxc3Vwc2V0XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyN2RcIiwgXCJcXFxcc3VjY2N1cmx5ZXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjJkZlwiLCBcIlxcXFxjdXJseWVxc3VjY1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjdmXCIsIFwiXFxcXHN1Y2NzaW1cIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MmFiOFwiLCBcIlxcXFxzdWNjYXBwcm94XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyYjNcIiwgXCJcXFxcdmFydHJpYW5nbGVyaWdodFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMmI1XCIsIFwiXFxcXHRyaWFuZ2xlcmlnaHRlcVwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMmE5XCIsIFwiXFxcXFZkYXNoXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyMjNcIiwgXCJcXFxcc2hvcnRtaWRcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjIyNVwiLCBcIlxcXFxzaG9ydHBhcmFsbGVsXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyNmNcIiwgXCJcXFxcYmV0d2VlblwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMmQ0XCIsIFwiXFxcXHBpdGNoZm9ya1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjFkXCIsIFwiXFxcXHZhcnByb3B0b1wiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyNWMwXCIsIFwiXFxcXGJsYWNrdHJpYW5nbGVsZWZ0XCIpOyAvLyB1bmljb2RlLW1hdGggc2F5cyB0aGF0IFxcdGhlcmVmb3JlIGlzIGEgbWF0aG9yZCBhdG9tLlxuLy8gV2Uga2VwdCB0aGUgYW1zc3ltYiBhdG9tIHR5cGUsIHdoaWNoIGlzIHJlbC5cblxuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyMzRcIiwgXCJcXFxcdGhlcmVmb3JlXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyMGRcIiwgXCJcXFxcYmFja2Vwc2lsb25cIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjViNlwiLCBcIlxcXFxibGFja3RyaWFuZ2xlcmlnaHRcIik7IC8vIHVuaWNvZGUtbWF0aCBzYXlzIHRoYXQgXFxiZWNhdXNlIGlzIGEgbWF0aG9yZCBhdG9tLlxuLy8gV2Uga2VwdCB0aGUgYW1zc3ltYiBhdG9tIHR5cGUsIHdoaWNoIGlzIHJlbC5cblxuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyMzVcIiwgXCJcXFxcYmVjYXVzZVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMmQ4XCIsIFwiXFxcXGxsbGVzc1wiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMmQ5XCIsIFwiXFxcXGdnZ3RyXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgYmluLCBcIlxcdTIyYjJcIiwgXCJcXFxcbGhkXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgYmluLCBcIlxcdTIyYjNcIiwgXCJcXFxccmhkXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyNDJcIiwgXCJcXFxcZXFzaW1cIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIyYzhcIiwgXCJcXFxcSm9pblwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjUxXCIsIFwiXFxcXERvdGVxXCIsIHRydWUpOyAvLyBBTVMgQmluYXJ5IE9wZXJhdG9yc1xuXG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCBiaW4sIFwiXFx1MjIxNFwiLCBcIlxcXFxkb3RwbHVzXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgYmluLCBcIlxcdTIyMTZcIiwgXCJcXFxcc21hbGxzZXRtaW51c1wiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIGJpbiwgXCJcXHUyMmQyXCIsIFwiXFxcXENhcFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIGJpbiwgXCJcXHUyMmQzXCIsIFwiXFxcXEN1cFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIGJpbiwgXCJcXHUyYTVlXCIsIFwiXFxcXGRvdWJsZWJhcndlZGdlXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgYmluLCBcIlxcdTIyOWZcIiwgXCJcXFxcYm94bWludXNcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCBiaW4sIFwiXFx1MjI5ZVwiLCBcIlxcXFxib3hwbHVzXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgYmluLCBcIlxcdTIyYzdcIiwgXCJcXFxcZGl2aWRlb250aW1lc1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIGJpbiwgXCJcXHUyMmM5XCIsIFwiXFxcXGx0aW1lc1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIGJpbiwgXCJcXHUyMmNhXCIsIFwiXFxcXHJ0aW1lc1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIGJpbiwgXCJcXHUyMmNiXCIsIFwiXFxcXGxlZnR0aHJlZXRpbWVzXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgYmluLCBcIlxcdTIyY2NcIiwgXCJcXFxccmlnaHR0aHJlZXRpbWVzXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgYmluLCBcIlxcdTIyY2ZcIiwgXCJcXFxcY3VybHl3ZWRnZVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIGJpbiwgXCJcXHUyMmNlXCIsIFwiXFxcXGN1cmx5dmVlXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgYmluLCBcIlxcdTIyOWRcIiwgXCJcXFxcY2lyY2xlZGRhc2hcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCBiaW4sIFwiXFx1MjI5YlwiLCBcIlxcXFxjaXJjbGVkYXN0XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgYmluLCBcIlxcdTIyYzVcIiwgXCJcXFxcY2VudGVyZG90XCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgYmluLCBcIlxcdTIyYmFcIiwgXCJcXFxcaW50ZXJjYWxcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCBiaW4sIFwiXFx1MjJkMlwiLCBcIlxcXFxkb3VibGVjYXBcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCBiaW4sIFwiXFx1MjJkM1wiLCBcIlxcXFxkb3VibGVjdXBcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCBiaW4sIFwiXFx1MjJhMFwiLCBcIlxcXFxib3h0aW1lc1wiLCB0cnVlKTsgLy8gQU1TIEFycm93c1xuLy8gTm90ZTogdW5pY29kZS1tYXRoIG1hcHMgXFx1MjFlMiB0byB0aGVpciBvd24gZnVuY3Rpb24gXFxyaWdodGRhc2hhcnJvdy5cbi8vIFdlJ2xsIG1hcCBpdCB0byBBTVMgZnVuY3Rpb24gXFxkYXNocmlnaHRhcnJvdy4gSXQgcHJvZHVjZXMgdGhlIHNhbWUgYXRvbS5cblxuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIxZTJcIiwgXCJcXFxcZGFzaHJpZ2h0YXJyb3dcIiwgdHJ1ZSk7IC8vIHVuaWNvZGUtbWF0aCBtYXBzIFxcdTIxZTAgdG8gXFxsZWZ0ZGFzaGFycm93LiBXZSdsbCB1c2UgdGhlIEFNUyBzeW5vbnltLlxuXG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjFlMFwiLCBcIlxcXFxkYXNobGVmdGFycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIxYzdcIiwgXCJcXFxcbGVmdGxlZnRhcnJvd3NcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjFjNlwiLCBcIlxcXFxsZWZ0cmlnaHRhcnJvd3NcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjFkYVwiLCBcIlxcXFxMbGVmdGFycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIxOWVcIiwgXCJcXFxcdHdvaGVhZGxlZnRhcnJvd1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMWEyXCIsIFwiXFxcXGxlZnRhcnJvd3RhaWxcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjFhYlwiLCBcIlxcXFxsb29wYXJyb3dsZWZ0XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIxY2JcIiwgXCJcXFxcbGVmdHJpZ2h0aGFycG9vbnNcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjFiNlwiLCBcIlxcXFxjdXJ2ZWFycm93bGVmdFwiLCB0cnVlKTsgLy8gdW5pY29kZS1tYXRoIG1hcHMgXFx1MjFiYSB0byBcXGFjd29wZW5jaXJjbGVhcnJvdy4gV2UnbGwgdXNlIHRoZSBBTVMgc3lub255bS5cblxuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIxYmFcIiwgXCJcXFxcY2lyY2xlYXJyb3dsZWZ0XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIxYjBcIiwgXCJcXFxcTHNoXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIxYzhcIiwgXCJcXFxcdXB1cGFycm93c1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMWJmXCIsIFwiXFxcXHVwaGFycG9vbmxlZnRcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjFjM1wiLCBcIlxcXFxkb3duaGFycG9vbmxlZnRcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIyYjZcIiwgXCJcXFxcb3JpZ29mXCIsIHRydWUpOyAvLyBub3QgaW4gZm9udFxuXG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIyYjdcIiwgXCJcXFxcaW1hZ2VvZlwiLCB0cnVlKTsgLy8gbm90IGluIGZvbnRcblxuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyYjhcIiwgXCJcXFxcbXVsdGltYXBcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjFhZFwiLCBcIlxcXFxsZWZ0cmlnaHRzcXVpZ2Fycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIxYzlcIiwgXCJcXFxccmlnaHRyaWdodGFycm93c1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMWM0XCIsIFwiXFxcXHJpZ2h0bGVmdGFycm93c1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMWEwXCIsIFwiXFxcXHR3b2hlYWRyaWdodGFycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIxYTNcIiwgXCJcXFxccmlnaHRhcnJvd3RhaWxcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjFhY1wiLCBcIlxcXFxsb29wYXJyb3dyaWdodFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMWI3XCIsIFwiXFxcXGN1cnZlYXJyb3dyaWdodFwiLCB0cnVlKTsgLy8gdW5pY29kZS1tYXRoIG1hcHMgXFx1MjFiYiB0byBcXGN3b3BlbmNpcmNsZWFycm93LiBXZSdsbCB1c2UgdGhlIEFNUyBzeW5vbnltLlxuXG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjFiYlwiLCBcIlxcXFxjaXJjbGVhcnJvd3JpZ2h0XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIxYjFcIiwgXCJcXFxcUnNoXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIxY2FcIiwgXCJcXFxcZG93bmRvd25hcnJvd3NcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjFiZVwiLCBcIlxcXFx1cGhhcnBvb25yaWdodFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMWMyXCIsIFwiXFxcXGRvd25oYXJwb29ucmlnaHRcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjFkZFwiLCBcIlxcXFxyaWdodHNxdWlnYXJyb3dcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjFkZFwiLCBcIlxcXFxsZWFkc3RvXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIxZGJcIiwgXCJcXFxcUnJpZ2h0YXJyb3dcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjFiZVwiLCBcIlxcXFxyZXN0cmljdGlvblwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCB0ZXh0b3JkLCBcIlxcdTIwMThcIiwgXCJgXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiJFwiLCBcIlxcXFwkXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgdGV4dG9yZCwgXCIkXCIsIFwiXFxcXCRcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCB0ZXh0b3JkLCBcIiRcIiwgXCJcXFxcdGV4dGRvbGxhclwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCB0ZXh0b3JkLCBcIiVcIiwgXCJcXFxcJVwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHRleHRvcmQsIFwiJVwiLCBcIlxcXFwlXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiX1wiLCBcIlxcXFxfXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgdGV4dG9yZCwgXCJfXCIsIFwiXFxcXF9cIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCB0ZXh0b3JkLCBcIl9cIiwgXCJcXFxcdGV4dHVuZGVyc2NvcmVcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUyMjIwXCIsIFwiXFxcXGFuZ2xlXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiXFx1MjIxZVwiLCBcIlxcXFxpbmZ0eVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCB0ZXh0b3JkLCBcIlxcdTIwMzJcIiwgXCJcXFxccHJpbWVcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUyNWIzXCIsIFwiXFxcXHRyaWFuZ2xlXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiXFx1MDM5M1wiLCBcIlxcXFxHYW1tYVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCB0ZXh0b3JkLCBcIlxcdTAzOTRcIiwgXCJcXFxcRGVsdGFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUwMzk4XCIsIFwiXFxcXFRoZXRhXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiXFx1MDM5YlwiLCBcIlxcXFxMYW1iZGFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUwMzllXCIsIFwiXFxcXFhpXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiXFx1MDNhMFwiLCBcIlxcXFxQaVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCB0ZXh0b3JkLCBcIlxcdTAzYTNcIiwgXCJcXFxcU2lnbWFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUwM2E1XCIsIFwiXFxcXFVwc2lsb25cIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUwM2E2XCIsIFwiXFxcXFBoaVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCB0ZXh0b3JkLCBcIlxcdTAzYThcIiwgXCJcXFxcUHNpXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiXFx1MDNhOVwiLCBcIlxcXFxPbWVnYVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCB0ZXh0b3JkLCBcIkFcIiwgXCJcXHUwMzkxXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiQlwiLCBcIlxcdTAzOTJcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJFXCIsIFwiXFx1MDM5NVwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCB0ZXh0b3JkLCBcIlpcIiwgXCJcXHUwMzk2XCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiSFwiLCBcIlxcdTAzOTdcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJJXCIsIFwiXFx1MDM5OVwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCB0ZXh0b3JkLCBcIktcIiwgXCJcXHUwMzlBXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiTVwiLCBcIlxcdTAzOUNcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJOXCIsIFwiXFx1MDM5RFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCB0ZXh0b3JkLCBcIk9cIiwgXCJcXHUwMzlGXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiUFwiLCBcIlxcdTAzQTFcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJUXCIsIFwiXFx1MDNBNFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCB0ZXh0b3JkLCBcIlhcIiwgXCJcXHUwM0E3XCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiXFx1MDBhY1wiLCBcIlxcXFxuZWdcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUwMGFjXCIsIFwiXFxcXGxub3RcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUyMmE0XCIsIFwiXFxcXHRvcFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCB0ZXh0b3JkLCBcIlxcdTIyYTVcIiwgXCJcXFxcYm90XCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiXFx1MjIwNVwiLCBcIlxcXFxlbXB0eXNldFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHRleHRvcmQsIFwiXFx1MjIwNVwiLCBcIlxcXFx2YXJub3RoaW5nXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG1hdGhvcmQsIFwiXFx1MDNiMVwiLCBcIlxcXFxhbHBoYVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBtYXRob3JkLCBcIlxcdTAzYjJcIiwgXCJcXFxcYmV0YVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBtYXRob3JkLCBcIlxcdTAzYjNcIiwgXCJcXFxcZ2FtbWFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgbWF0aG9yZCwgXCJcXHUwM2I0XCIsIFwiXFxcXGRlbHRhXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG1hdGhvcmQsIFwiXFx1MDNmNVwiLCBcIlxcXFxlcHNpbG9uXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG1hdGhvcmQsIFwiXFx1MDNiNlwiLCBcIlxcXFx6ZXRhXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG1hdGhvcmQsIFwiXFx1MDNiN1wiLCBcIlxcXFxldGFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgbWF0aG9yZCwgXCJcXHUwM2I4XCIsIFwiXFxcXHRoZXRhXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG1hdGhvcmQsIFwiXFx1MDNiOVwiLCBcIlxcXFxpb3RhXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG1hdGhvcmQsIFwiXFx1MDNiYVwiLCBcIlxcXFxrYXBwYVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBtYXRob3JkLCBcIlxcdTAzYmJcIiwgXCJcXFxcbGFtYmRhXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG1hdGhvcmQsIFwiXFx1MDNiY1wiLCBcIlxcXFxtdVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBtYXRob3JkLCBcIlxcdTAzYmRcIiwgXCJcXFxcbnVcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgbWF0aG9yZCwgXCJcXHUwM2JlXCIsIFwiXFxcXHhpXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG1hdGhvcmQsIFwiXFx1MDNiZlwiLCBcIlxcXFxvbWljcm9uXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG1hdGhvcmQsIFwiXFx1MDNjMFwiLCBcIlxcXFxwaVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBtYXRob3JkLCBcIlxcdTAzYzFcIiwgXCJcXFxccmhvXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG1hdGhvcmQsIFwiXFx1MDNjM1wiLCBcIlxcXFxzaWdtYVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBtYXRob3JkLCBcIlxcdTAzYzRcIiwgXCJcXFxcdGF1XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG1hdGhvcmQsIFwiXFx1MDNjNVwiLCBcIlxcXFx1cHNpbG9uXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG1hdGhvcmQsIFwiXFx1MDNkNVwiLCBcIlxcXFxwaGlcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgbWF0aG9yZCwgXCJcXHUwM2M3XCIsIFwiXFxcXGNoaVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBtYXRob3JkLCBcIlxcdTAzYzhcIiwgXCJcXFxccHNpXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG1hdGhvcmQsIFwiXFx1MDNjOVwiLCBcIlxcXFxvbWVnYVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBtYXRob3JkLCBcIlxcdTAzYjVcIiwgXCJcXFxcdmFyZXBzaWxvblwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBtYXRob3JkLCBcIlxcdTAzZDFcIiwgXCJcXFxcdmFydGhldGFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgbWF0aG9yZCwgXCJcXHUwM2Q2XCIsIFwiXFxcXHZhcnBpXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG1hdGhvcmQsIFwiXFx1MDNmMVwiLCBcIlxcXFx2YXJyaG9cIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgbWF0aG9yZCwgXCJcXHUwM2MyXCIsIFwiXFxcXHZhcnNpZ21hXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG1hdGhvcmQsIFwiXFx1MDNjNlwiLCBcIlxcXFx2YXJwaGlcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgYmluLCBcIlxcdTIyMTdcIiwgXCIqXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIGJpbiwgXCIrXCIsIFwiK1wiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBiaW4sIFwiXFx1MjIxMlwiLCBcIi1cIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgYmluLCBcIlxcdTIyYzVcIiwgXCJcXFxcY2RvdFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBiaW4sIFwiXFx1MjIxOFwiLCBcIlxcXFxjaXJjXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIGJpbiwgXCJcXHUwMGY3XCIsIFwiXFxcXGRpdlwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBiaW4sIFwiXFx1MDBiMVwiLCBcIlxcXFxwbVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBiaW4sIFwiXFx1MDBkN1wiLCBcIlxcXFx0aW1lc1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBiaW4sIFwiXFx1MjIyOVwiLCBcIlxcXFxjYXBcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgYmluLCBcIlxcdTIyMmFcIiwgXCJcXFxcY3VwXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIGJpbiwgXCJcXHUyMjE2XCIsIFwiXFxcXHNldG1pbnVzXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIGJpbiwgXCJcXHUyMjI3XCIsIFwiXFxcXGxhbmRcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgYmluLCBcIlxcdTIyMjhcIiwgXCJcXFxcbG9yXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIGJpbiwgXCJcXHUyMjI3XCIsIFwiXFxcXHdlZGdlXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIGJpbiwgXCJcXHUyMjI4XCIsIFwiXFxcXHZlZVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCB0ZXh0b3JkLCBcIlxcdTIyMWFcIiwgXCJcXFxcc3VyZFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBzeW1ib2xzX29wZW4sIFwiXFx1MjdlOFwiLCBcIlxcXFxsYW5nbGVcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgc3ltYm9sc19vcGVuLCBcIlxcdTIyMjNcIiwgXCJcXFxcbHZlcnRcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgc3ltYm9sc19vcGVuLCBcIlxcdTIyMjVcIiwgXCJcXFxcbFZlcnRcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgc3ltYm9sc19jbG9zZSwgXCI/XCIsIFwiP1wiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBzeW1ib2xzX2Nsb3NlLCBcIiFcIiwgXCIhXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHN5bWJvbHNfY2xvc2UsIFwiXFx1MjdlOVwiLCBcIlxcXFxyYW5nbGVcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgc3ltYm9sc19jbG9zZSwgXCJcXHUyMjIzXCIsIFwiXFxcXHJ2ZXJ0XCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHN5bWJvbHNfY2xvc2UsIFwiXFx1MjIyNVwiLCBcIlxcXFxyVmVydFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiPVwiLCBcIj1cIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgcmVsLCBcIjpcIiwgXCI6XCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjQ4XCIsIFwiXFxcXGFwcHJveFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MjI0NVwiLCBcIlxcXFxjb25nXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjY1XCIsIFwiXFxcXGdlXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjY1XCIsIFwiXFxcXGdlcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MjE5MFwiLCBcIlxcXFxnZXRzXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCI+XCIsIFwiXFxcXGd0XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjA4XCIsIFwiXFxcXGluXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHVlMDIwXCIsIFwiXFxcXEBub3RcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIyODJcIiwgXCJcXFxcc3Vic2V0XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjgzXCIsIFwiXFxcXHN1cHNldFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MjI4NlwiLCBcIlxcXFxzdWJzZXRlcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MjI4N1wiLCBcIlxcXFxzdXBzZXRlcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjg4XCIsIFwiXFxcXG5zdWJzZXRlcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjg5XCIsIFwiXFxcXG5zdXBzZXRlcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MjJhOFwiLCBcIlxcXFxtb2RlbHNcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIxOTBcIiwgXCJcXFxcbGVmdGFycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjY0XCIsIFwiXFxcXGxlXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjY0XCIsIFwiXFxcXGxlcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiPFwiLCBcIlxcXFxsdFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MjE5MlwiLCBcIlxcXFxyaWdodGFycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMTkyXCIsIFwiXFxcXHRvXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyNzFcIiwgXCJcXFxcbmdlcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjcwXCIsIFwiXFxcXG5sZXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgc3BhY2luZywgXCJcXHUwMGEwXCIsIFwiXFxcXCBcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgc3BhY2luZywgXCJcXHUwMGEwXCIsIFwiXFxcXHNwYWNlXCIpOyAvLyBSZWY6IExhVGVYIFNvdXJjZSAyZTogXFxEZWNsYXJlUm9idXN0Q29tbWFuZHtcXG5vYnJlYWtzcGFjZX17JVxuXG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgc3BhY2luZywgXCJcXHUwMGEwXCIsIFwiXFxcXG5vYnJlYWtzcGFjZVwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHNwYWNpbmcsIFwiXFx1MDBhMFwiLCBcIlxcXFwgXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3BhY2luZywgXCJcXHUwMGEwXCIsIFwiIFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHNwYWNpbmcsIFwiXFx1MDBhMFwiLCBcIlxcXFxzcGFjZVwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHNwYWNpbmcsIFwiXFx1MDBhMFwiLCBcIlxcXFxub2JyZWFrc3BhY2VcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgc3BhY2luZywgbnVsbCwgXCJcXFxcbm9icmVha1wiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBzcGFjaW5nLCBudWxsLCBcIlxcXFxhbGxvd2JyZWFrXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHB1bmN0LCBcIixcIiwgXCIsXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHB1bmN0LCBcIjtcIiwgXCI7XCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgYmluLCBcIlxcdTIyYmNcIiwgXCJcXFxcYmFyd2VkZ2VcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCBiaW4sIFwiXFx1MjJiYlwiLCBcIlxcXFx2ZWViYXJcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgYmluLCBcIlxcdTIyOTlcIiwgXCJcXFxcb2RvdFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBiaW4sIFwiXFx1MjI5NVwiLCBcIlxcXFxvcGx1c1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBiaW4sIFwiXFx1MjI5N1wiLCBcIlxcXFxvdGltZXNcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUyMjAyXCIsIFwiXFxcXHBhcnRpYWxcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgYmluLCBcIlxcdTIyOThcIiwgXCJcXFxcb3NsYXNoXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgYmluLCBcIlxcdTIyOWFcIiwgXCJcXFxcY2lyY2xlZGNpcmNcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCBiaW4sIFwiXFx1MjJhMVwiLCBcIlxcXFxib3hkb3RcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgYmluLCBcIlxcdTI1YjNcIiwgXCJcXFxcYmlndHJpYW5nbGV1cFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBiaW4sIFwiXFx1MjViZFwiLCBcIlxcXFxiaWd0cmlhbmdsZWRvd25cIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgYmluLCBcIlxcdTIwMjBcIiwgXCJcXFxcZGFnZ2VyXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIGJpbiwgXCJcXHUyMmM0XCIsIFwiXFxcXGRpYW1vbmRcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgYmluLCBcIlxcdTIyYzZcIiwgXCJcXFxcc3RhclwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBiaW4sIFwiXFx1MjVjM1wiLCBcIlxcXFx0cmlhbmdsZWxlZnRcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgYmluLCBcIlxcdTI1YjlcIiwgXCJcXFxcdHJpYW5nbGVyaWdodFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBzeW1ib2xzX29wZW4sIFwie1wiLCBcIlxcXFx7XCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgdGV4dG9yZCwgXCJ7XCIsIFwiXFxcXHtcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCB0ZXh0b3JkLCBcIntcIiwgXCJcXFxcdGV4dGJyYWNlbGVmdFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBzeW1ib2xzX2Nsb3NlLCBcIn1cIiwgXCJcXFxcfVwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHRleHRvcmQsIFwifVwiLCBcIlxcXFx9XCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgdGV4dG9yZCwgXCJ9XCIsIFwiXFxcXHRleHRicmFjZXJpZ2h0XCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHN5bWJvbHNfb3BlbiwgXCJ7XCIsIFwiXFxcXGxicmFjZVwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBzeW1ib2xzX2Nsb3NlLCBcIn1cIiwgXCJcXFxccmJyYWNlXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHN5bWJvbHNfb3BlbiwgXCJbXCIsIFwiXFxcXGxicmFja1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHRleHRvcmQsIFwiW1wiLCBcIlxcXFxsYnJhY2tcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgc3ltYm9sc19jbG9zZSwgXCJdXCIsIFwiXFxcXHJicmFja1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHRleHRvcmQsIFwiXVwiLCBcIlxcXFxyYnJhY2tcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgc3ltYm9sc19vcGVuLCBcIihcIiwgXCJcXFxcbHBhcmVuXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHN5bWJvbHNfY2xvc2UsIFwiKVwiLCBcIlxcXFxycGFyZW5cIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCB0ZXh0b3JkLCBcIjxcIiwgXCJcXFxcdGV4dGxlc3NcIiwgdHJ1ZSk7IC8vIGluIFQxIGZvbnRlbmNcblxuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgdGV4dG9yZCwgXCI+XCIsIFwiXFxcXHRleHRncmVhdGVyXCIsIHRydWUpOyAvLyBpbiBUMSBmb250ZW5jXG5cbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBzeW1ib2xzX29wZW4sIFwiXFx1MjMwYVwiLCBcIlxcXFxsZmxvb3JcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgc3ltYm9sc19jbG9zZSwgXCJcXHUyMzBiXCIsIFwiXFxcXHJmbG9vclwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBzeW1ib2xzX29wZW4sIFwiXFx1MjMwOFwiLCBcIlxcXFxsY2VpbFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBzeW1ib2xzX2Nsb3NlLCBcIlxcdTIzMDlcIiwgXCJcXFxccmNlaWxcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJcXFxcXCIsIFwiXFxcXGJhY2tzbGFzaFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCB0ZXh0b3JkLCBcIlxcdTIyMjNcIiwgXCJ8XCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiXFx1MjIyM1wiLCBcIlxcXFx2ZXJ0XCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgdGV4dG9yZCwgXCJ8XCIsIFwiXFxcXHRleHRiYXJcIiwgdHJ1ZSk7IC8vIGluIFQxIGZvbnRlbmNcblxuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiXFx1MjIyNVwiLCBcIlxcXFx8XCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiXFx1MjIyNVwiLCBcIlxcXFxWZXJ0XCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUyMjI1XCIsIFwiXFxcXHRleHRiYXJkYmxcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCB0ZXh0b3JkLCBcIn5cIiwgXCJcXFxcdGV4dGFzY2lpdGlsZGVcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCB0ZXh0b3JkLCBcIlxcXFxcIiwgXCJcXFxcdGV4dGJhY2tzbGFzaFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHRleHRvcmQsIFwiXlwiLCBcIlxcXFx0ZXh0YXNjaWljaXJjdW1cIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIxOTFcIiwgXCJcXFxcdXBhcnJvd1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MjFkMVwiLCBcIlxcXFxVcGFycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMTkzXCIsIFwiXFxcXGRvd25hcnJvd1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MjFkM1wiLCBcIlxcXFxEb3duYXJyb3dcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIxOTVcIiwgXCJcXFxcdXBkb3duYXJyb3dcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIxZDVcIiwgXCJcXFxcVXBkb3duYXJyb3dcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgb3AsIFwiXFx1MjIxMFwiLCBcIlxcXFxjb3Byb2RcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgb3AsIFwiXFx1MjJjMVwiLCBcIlxcXFxiaWd2ZWVcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgb3AsIFwiXFx1MjJjMFwiLCBcIlxcXFxiaWd3ZWRnZVwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBvcCwgXCJcXHUyYTA0XCIsIFwiXFxcXGJpZ3VwbHVzXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG9wLCBcIlxcdTIyYzJcIiwgXCJcXFxcYmlnY2FwXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG9wLCBcIlxcdTIyYzNcIiwgXCJcXFxcYmlnY3VwXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG9wLCBcIlxcdTIyMmJcIiwgXCJcXFxcaW50XCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG9wLCBcIlxcdTIyMmJcIiwgXCJcXFxcaW50b3BcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgb3AsIFwiXFx1MjIyY1wiLCBcIlxcXFxpaW50XCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG9wLCBcIlxcdTIyMmRcIiwgXCJcXFxcaWlpbnRcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgb3AsIFwiXFx1MjIwZlwiLCBcIlxcXFxwcm9kXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG9wLCBcIlxcdTIyMTFcIiwgXCJcXFxcc3VtXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG9wLCBcIlxcdTJhMDJcIiwgXCJcXFxcYmlnb3RpbWVzXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG9wLCBcIlxcdTJhMDFcIiwgXCJcXFxcYmlnb3BsdXNcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgb3AsIFwiXFx1MmEwMFwiLCBcIlxcXFxiaWdvZG90XCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG9wLCBcIlxcdTIyMmVcIiwgXCJcXFxcb2ludFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBvcCwgXCJcXHUyMjJmXCIsIFwiXFxcXG9paW50XCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG9wLCBcIlxcdTIyMzBcIiwgXCJcXFxcb2lpaW50XCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG9wLCBcIlxcdTJhMDZcIiwgXCJcXFxcYmlnc3FjdXBcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgb3AsIFwiXFx1MjIyYlwiLCBcIlxcXFxzbWFsbGludFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIGlubmVyLCBcIlxcdTIwMjZcIiwgXCJcXFxcdGV4dGVsbGlwc2lzXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIGlubmVyLCBcIlxcdTIwMjZcIiwgXCJcXFxcbWF0aGVsbGlwc2lzXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgaW5uZXIsIFwiXFx1MjAyNlwiLCBcIlxcXFxsZG90c1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBpbm5lciwgXCJcXHUyMDI2XCIsIFwiXFxcXGxkb3RzXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIGlubmVyLCBcIlxcdTIyZWZcIiwgXCJcXFxcQGNkb3RzXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIGlubmVyLCBcIlxcdTIyZjFcIiwgXCJcXFxcZGRvdHNcIiwgdHJ1ZSk7IC8vIFxcdmRvdHMgaXMgYSBtYWNybyB0aGF0IHVzZXMgb25lIG9mIHRoZXNlIHR3byBzeW1ib2xzICh3aXRoIG1hZGUtdXAgbmFtZXMpOlxuXG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUyMmVlXCIsIFwiXFxcXHZhcnZkb3RzXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUyMmVlXCIsIFwiXFxcXHZhcnZkb3RzXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIGFjY2VudCwgXCJcXHUwMmNhXCIsIFwiXFxcXGFjdXRlXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIGFjY2VudCwgXCJcXHUwMmNiXCIsIFwiXFxcXGdyYXZlXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIGFjY2VudCwgXCJcXHUwMGE4XCIsIFwiXFxcXGRkb3RcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgYWNjZW50LCBcIlxcdTAwN2VcIiwgXCJcXFxcdGlsZGVcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgYWNjZW50LCBcIlxcdTAyYzlcIiwgXCJcXFxcYmFyXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIGFjY2VudCwgXCJcXHUwMmQ4XCIsIFwiXFxcXGJyZXZlXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIGFjY2VudCwgXCJcXHUwMmM3XCIsIFwiXFxcXGNoZWNrXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIGFjY2VudCwgXCJcXHUwMDVlXCIsIFwiXFxcXGhhdFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBhY2NlbnQsIFwiXFx1MjBkN1wiLCBcIlxcXFx2ZWNcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgYWNjZW50LCBcIlxcdTAyZDlcIiwgXCJcXFxcZG90XCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIGFjY2VudCwgXCJcXHUwMmRhXCIsIFwiXFxcXG1hdGhyaW5nXCIpOyAvLyBcXGltYXRoIGFuZCBcXGptYXRoIHNob3VsZCBiZSBpbnZhcmlhbnQgdG8gXFxtYXRocm0sIFxcbWF0aGJmLCBldGMuLCBzbyB1c2UgUFVBXG5cbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBtYXRob3JkLCBcIlxcdWUxMzFcIiwgXCJcXFxcQGltYXRoXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG1hdGhvcmQsIFwiXFx1ZTIzN1wiLCBcIlxcXFxAam1hdGhcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUwMTMxXCIsIFwiXFx1MDEzMVwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCB0ZXh0b3JkLCBcIlxcdTAyMzdcIiwgXCJcXHUwMjM3XCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUwMTMxXCIsIFwiXFxcXGlcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCB0ZXh0b3JkLCBcIlxcdTAyMzdcIiwgXCJcXFxcalwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHRleHRvcmQsIFwiXFx1MDBkZlwiLCBcIlxcXFxzc1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHRleHRvcmQsIFwiXFx1MDBlNlwiLCBcIlxcXFxhZVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHRleHRvcmQsIFwiXFx1MDE1M1wiLCBcIlxcXFxvZVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHRleHRvcmQsIFwiXFx1MDBmOFwiLCBcIlxcXFxvXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUwMGM2XCIsIFwiXFxcXEFFXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUwMTUyXCIsIFwiXFxcXE9FXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUwMGQ4XCIsIFwiXFxcXE9cIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBhY2NlbnQsIFwiXFx1MDJjYVwiLCBcIlxcXFwnXCIpOyAvLyBhY3V0ZVxuXG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBhY2NlbnQsIFwiXFx1MDJjYlwiLCBcIlxcXFxgXCIpOyAvLyBncmF2ZVxuXG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBhY2NlbnQsIFwiXFx1MDJjNlwiLCBcIlxcXFxeXCIpOyAvLyBjaXJjdW1mbGV4XG5cbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIGFjY2VudCwgXCJcXHUwMmRjXCIsIFwiXFxcXH5cIik7IC8vIHRpbGRlXG5cbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIGFjY2VudCwgXCJcXHUwMmM5XCIsIFwiXFxcXD1cIik7IC8vIG1hY3JvblxuXG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBhY2NlbnQsIFwiXFx1MDJkOFwiLCBcIlxcXFx1XCIpOyAvLyBicmV2ZVxuXG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBhY2NlbnQsIFwiXFx1MDJkOVwiLCBcIlxcXFwuXCIpOyAvLyBkb3QgYWJvdmVcblxuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgYWNjZW50LCBcIlxcdTAwYjhcIiwgXCJcXFxcY1wiKTsgLy8gY2VkaWxsYVxuXG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBhY2NlbnQsIFwiXFx1MDJkYVwiLCBcIlxcXFxyXCIpOyAvLyByaW5nIGFib3ZlXG5cbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIGFjY2VudCwgXCJcXHUwMmM3XCIsIFwiXFxcXHZcIik7IC8vIGNhcm9uXG5cbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIGFjY2VudCwgXCJcXHUwMGE4XCIsICdcXFxcXCInKTsgLy8gZGlhZXJlc2lzXG5cbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIGFjY2VudCwgXCJcXHUwMmRkXCIsIFwiXFxcXEhcIik7IC8vIGRvdWJsZSBhY3V0ZVxuXG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBhY2NlbnQsIFwiXFx1MjVlZlwiLCBcIlxcXFx0ZXh0Y2lyY2xlZFwiKTsgLy8gXFxiaWdjaXJjIGdseXBoXG4vLyBUaGVzZSBsaWdhdHVyZXMgYXJlIGRldGVjdGVkIGFuZCBjcmVhdGVkIGluIFBhcnNlci5qcydzIGBmb3JtTGlnYXR1cmVzYC5cblxuY29uc3QgbGlnYXR1cmVzID0ge1xuICBcIi0tXCI6IHRydWUsXG4gIFwiLS0tXCI6IHRydWUsXG4gIFwiYGBcIjogdHJ1ZSxcbiAgXCInJ1wiOiB0cnVlXG59O1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUyMDEzXCIsIFwiLS1cIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCB0ZXh0b3JkLCBcIlxcdTIwMTNcIiwgXCJcXFxcdGV4dGVuZGFzaFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHRleHRvcmQsIFwiXFx1MjAxNFwiLCBcIi0tLVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHRleHRvcmQsIFwiXFx1MjAxNFwiLCBcIlxcXFx0ZXh0ZW1kYXNoXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUyMDE4XCIsIFwiYFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHRleHRvcmQsIFwiXFx1MjAxOFwiLCBcIlxcXFx0ZXh0cXVvdGVsZWZ0XCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUyMDE5XCIsIFwiJ1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHRleHRvcmQsIFwiXFx1MjAxOVwiLCBcIlxcXFx0ZXh0cXVvdGVyaWdodFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHRleHRvcmQsIFwiXFx1MjAxY1wiLCBcImBgXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUyMDFjXCIsIFwiXFxcXHRleHRxdW90ZWRibGxlZnRcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCB0ZXh0b3JkLCBcIlxcdTIwMWRcIiwgXCInJ1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHRleHRvcmQsIFwiXFx1MjAxZFwiLCBcIlxcXFx0ZXh0cXVvdGVkYmxyaWdodFwiKTsgLy8gIFxcZGVncmVlIGZyb20gZ2Vuc3ltYiBwYWNrYWdlXG5cbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCB0ZXh0b3JkLCBcIlxcdTAwYjBcIiwgXCJcXFxcZGVncmVlXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUwMGIwXCIsIFwiXFxcXGRlZ3JlZVwiKTsgLy8gXFx0ZXh0ZGVncmVlIGZyb20gaW5wdXRlbmMgcGFja2FnZVxuXG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCB0ZXh0b3JkLCBcIlxcdTAwYjBcIiwgXCJcXFxcdGV4dGRlZ3JlZVwiLCB0cnVlKTsgLy8gVE9ETzogSW4gTGFUZVgsIFxccG91bmRzIGNhbiBnZW5lcmF0ZSBhIGRpZmZlcmVudCBjaGFyYWN0ZXIgaW4gdGV4dCBhbmQgbWF0aFxuLy8gbW9kZSwgYnV0IGFtb25nIG91ciBmb250cywgb25seSBNYWluLVJlZ3VsYXIgZGVmaW5lcyB0aGlzIGNoYXJhY3RlciBcIjE2M1wiLlxuXG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUwMGEzXCIsIFwiXFxcXHBvdW5kc1wiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCB0ZXh0b3JkLCBcIlxcdTAwYTNcIiwgXCJcXFxcbWF0aHN0ZXJsaW5nXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUwMGEzXCIsIFwiXFxcXHBvdW5kc1wiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHRleHRvcmQsIFwiXFx1MDBhM1wiLCBcIlxcXFx0ZXh0c3RlcmxpbmdcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCB0ZXh0b3JkLCBcIlxcdTI3MjBcIiwgXCJcXFxcbWFsdGVzZVwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIGFtcywgdGV4dG9yZCwgXCJcXHUyNzIwXCIsIFwiXFxcXG1hbHRlc2VcIik7IC8vIFRoZXJlIGFyZSBsb3RzIG9mIHN5bWJvbHMgd2hpY2ggYXJlIHRoZSBzYW1lLCBzbyB3ZSBhZGQgdGhlbSBpbiBhZnRlcndhcmRzLlxuLy8gQWxsIG9mIHRoZXNlIGFyZSB0ZXh0b3JkcyBpbiBtYXRoIG1vZGVcblxuY29uc3QgbWF0aFRleHRTeW1ib2xzID0gXCIwMTIzNDU2Nzg5L0AuXFxcIlwiO1xuXG5mb3IgKGxldCBpID0gMDsgaSA8IG1hdGhUZXh0U3ltYm9scy5sZW5ndGg7IGkrKykge1xuICBjb25zdCBjaCA9IG1hdGhUZXh0U3ltYm9scy5jaGFyQXQoaSk7XG4gIGRlZmluZVN5bWJvbChtYXRoLCBtYWluLCB0ZXh0b3JkLCBjaCwgY2gpO1xufSAvLyBBbGwgb2YgdGhlc2UgYXJlIHRleHRvcmRzIGluIHRleHQgbW9kZVxuXG5cbmNvbnN0IHRleHRTeW1ib2xzID0gXCIwMTIzNDU2Nzg5IUAqKCktPStcXFwiOzo/Ly4sXCI7XG5cbmZvciAobGV0IGkgPSAwOyBpIDwgdGV4dFN5bWJvbHMubGVuZ3RoOyBpKyspIHtcbiAgY29uc3QgY2ggPSB0ZXh0U3ltYm9scy5jaGFyQXQoaSk7XG4gIGRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHRleHRvcmQsIGNoLCBjaCk7XG59IC8vIEFsbCBvZiB0aGVzZSBhcmUgdGV4dG9yZHMgaW4gdGV4dCBtb2RlLCBhbmQgbWF0aG9yZHMgaW4gbWF0aCBtb2RlXG5cblxuY29uc3QgbGV0dGVycyA9IFwiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5elwiO1xuXG5mb3IgKGxldCBpID0gMDsgaSA8IGxldHRlcnMubGVuZ3RoOyBpKyspIHtcbiAgY29uc3QgY2ggPSBsZXR0ZXJzLmNoYXJBdChpKTtcbiAgZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG1hdGhvcmQsIGNoLCBjaCk7XG4gIGRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHRleHRvcmQsIGNoLCBjaCk7XG59IC8vIEJsYWNrYm9hcmQgYm9sZCBhbmQgc2NyaXB0IGxldHRlcnMgaW4gVW5pY29kZSByYW5nZVxuXG5cbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHRleHRvcmQsIFwiQ1wiLCBcIlxcdTIxMDJcIik7IC8vIGJsYWNrYm9hcmQgYm9sZFxuXG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBhbXMsIHRleHRvcmQsIFwiQ1wiLCBcIlxcdTIxMDJcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCB0ZXh0b3JkLCBcIkhcIiwgXCJcXHUyMTBEXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgYW1zLCB0ZXh0b3JkLCBcIkhcIiwgXCJcXHUyMTBEXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgdGV4dG9yZCwgXCJOXCIsIFwiXFx1MjExNVwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIGFtcywgdGV4dG9yZCwgXCJOXCIsIFwiXFx1MjExNVwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHRleHRvcmQsIFwiUFwiLCBcIlxcdTIxMTlcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBhbXMsIHRleHRvcmQsIFwiUFwiLCBcIlxcdTIxMTlcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCB0ZXh0b3JkLCBcIlFcIiwgXCJcXHUyMTFBXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgYW1zLCB0ZXh0b3JkLCBcIlFcIiwgXCJcXHUyMTFBXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgdGV4dG9yZCwgXCJSXCIsIFwiXFx1MjExRFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIGFtcywgdGV4dG9yZCwgXCJSXCIsIFwiXFx1MjExRFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHRleHRvcmQsIFwiWlwiLCBcIlxcdTIxMjRcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBhbXMsIHRleHRvcmQsIFwiWlwiLCBcIlxcdTIxMjRcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgbWF0aG9yZCwgXCJoXCIsIFwiXFx1MjEwRVwiKTsgLy8gaXRhbGljIGgsIFBsYW5jayBjb25zdGFudFxuXG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBtYXRob3JkLCBcImhcIiwgXCJcXHUyMTBFXCIpOyAvLyBUaGUgbmV4dCBsb29wIGxvYWRzIHdpZGUgKHN1cnJvZ2F0ZSBwYWlyKSBjaGFyYWN0ZXJzLlxuLy8gV2Ugc3VwcG9ydCBzb21lIGxldHRlcnMgaW4gdGhlIFVuaWNvZGUgcmFuZ2UgVSsxRDQwMCB0byBVKzFEN0ZGLFxuLy8gTWF0aGVtYXRpY2FsIEFscGhhbnVtZXJpYyBTeW1ib2xzLlxuLy8gU29tZSBlZGl0b3JzIGRvIG5vdCBkZWFsIHdlbGwgd2l0aCB3aWRlIGNoYXJhY3RlcnMuIFNvIGRvbid0IHdyaXRlIHRoZVxuLy8gc3RyaW5nIGludG8gdGhpcyBmaWxlLiBJbnN0ZWFkLCBjcmVhdGUgdGhlIHN0cmluZyBmcm9tIHRoZSBzdXJyb2dhdGUgcGFpci5cblxubGV0IHdpZGVDaGFyID0gXCJcIjtcblxuZm9yIChsZXQgaSA9IDA7IGkgPCBsZXR0ZXJzLmxlbmd0aDsgaSsrKSB7XG4gIGNvbnN0IGNoID0gbGV0dGVycy5jaGFyQXQoaSk7IC8vIFRoZSBoZXggbnVtYmVycyBpbiB0aGUgbmV4dCBsaW5lIGFyZSBhIHN1cnJvZ2F0ZSBwYWlyLlxuICAvLyAweEQ4MzUgaXMgdGhlIGhpZ2ggc3Vycm9nYXRlIGZvciBhbGwgbGV0dGVycyBpbiB0aGUgcmFuZ2Ugd2Ugc3VwcG9ydC5cbiAgLy8gMHhEQzAwIGlzIHRoZSBsb3cgc3Vycm9nYXRlIGZvciBib2xkIEEuXG5cbiAgd2lkZUNoYXIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4RDgzNSwgMHhEQzAwICsgaSk7IC8vIEEtWiBhLXogYm9sZFxuXG4gIGRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBtYXRob3JkLCBjaCwgd2lkZUNoYXIpO1xuICBkZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCB0ZXh0b3JkLCBjaCwgd2lkZUNoYXIpO1xuICB3aWRlQ2hhciA9IFN0cmluZy5mcm9tQ2hhckNvZGUoMHhEODM1LCAweERDMzQgKyBpKTsgLy8gQS1aIGEteiBpdGFsaWNcblxuICBkZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgbWF0aG9yZCwgY2gsIHdpZGVDaGFyKTtcbiAgZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgdGV4dG9yZCwgY2gsIHdpZGVDaGFyKTtcbiAgd2lkZUNoYXIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4RDgzNSwgMHhEQzY4ICsgaSk7IC8vIEEtWiBhLXogYm9sZCBpdGFsaWNcblxuICBkZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgbWF0aG9yZCwgY2gsIHdpZGVDaGFyKTtcbiAgZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgdGV4dG9yZCwgY2gsIHdpZGVDaGFyKTtcbiAgd2lkZUNoYXIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4RDgzNSwgMHhERDA0ICsgaSk7IC8vIEEtWiBhLXogRnJha3R1clxuXG4gIGRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBtYXRob3JkLCBjaCwgd2lkZUNoYXIpO1xuICBkZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCB0ZXh0b3JkLCBjaCwgd2lkZUNoYXIpO1xuICB3aWRlQ2hhciA9IFN0cmluZy5mcm9tQ2hhckNvZGUoMHhEODM1LCAweERENkMgKyBpKTsgLy8gQS1aIGEteiBib2xkIEZyYWt0dXJcblxuICBkZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgbWF0aG9yZCwgY2gsIHdpZGVDaGFyKTtcbiAgZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgdGV4dG9yZCwgY2gsIHdpZGVDaGFyKTtcbiAgd2lkZUNoYXIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4RDgzNSwgMHhEREEwICsgaSk7IC8vIEEtWiBhLXogc2Fucy1zZXJpZlxuXG4gIGRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBtYXRob3JkLCBjaCwgd2lkZUNoYXIpO1xuICBkZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCB0ZXh0b3JkLCBjaCwgd2lkZUNoYXIpO1xuICB3aWRlQ2hhciA9IFN0cmluZy5mcm9tQ2hhckNvZGUoMHhEODM1LCAweERERDQgKyBpKTsgLy8gQS1aIGEteiBzYW5zIGJvbGRcblxuICBkZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgbWF0aG9yZCwgY2gsIHdpZGVDaGFyKTtcbiAgZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgdGV4dG9yZCwgY2gsIHdpZGVDaGFyKTtcbiAgd2lkZUNoYXIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4RDgzNSwgMHhERTA4ICsgaSk7IC8vIEEtWiBhLXogc2FucyBpdGFsaWNcblxuICBkZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgbWF0aG9yZCwgY2gsIHdpZGVDaGFyKTtcbiAgZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgdGV4dG9yZCwgY2gsIHdpZGVDaGFyKTtcbiAgd2lkZUNoYXIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4RDgzNSwgMHhERTcwICsgaSk7IC8vIEEtWiBhLXogbW9ub3NwYWNlXG5cbiAgZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG1hdGhvcmQsIGNoLCB3aWRlQ2hhcik7XG4gIGRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHRleHRvcmQsIGNoLCB3aWRlQ2hhcik7XG5cbiAgaWYgKGkgPCAyNikge1xuICAgIC8vIEthVGVYIGZvbnRzIGhhdmUgb25seSBjYXBpdGFsIGxldHRlcnMgZm9yIGJsYWNrYm9hcmQgYm9sZCBhbmQgc2NyaXB0LlxuICAgIC8vIFNlZSBleGNlcHRpb24gZm9yIGsgYmVsb3cuXG4gICAgd2lkZUNoYXIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4RDgzNSwgMHhERDM4ICsgaSk7IC8vIEEtWiBkb3VibGUgc3RydWNrXG5cbiAgICBkZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgbWF0aG9yZCwgY2gsIHdpZGVDaGFyKTtcbiAgICBkZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCB0ZXh0b3JkLCBjaCwgd2lkZUNoYXIpO1xuICAgIHdpZGVDaGFyID0gU3RyaW5nLmZyb21DaGFyQ29kZSgweEQ4MzUsIDB4REM5QyArIGkpOyAvLyBBLVogc2NyaXB0XG5cbiAgICBkZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgbWF0aG9yZCwgY2gsIHdpZGVDaGFyKTtcbiAgICBkZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCB0ZXh0b3JkLCBjaCwgd2lkZUNoYXIpO1xuICB9IC8vIFRPRE86IEFkZCBib2xkIHNjcmlwdCB3aGVuIGl0IGlzIHN1cHBvcnRlZCBieSBhIEthVGVYIGZvbnQuXG5cbn0gLy8gXCJrXCIgaXMgdGhlIG9ubHkgZG91YmxlIHN0cnVjayBsb3dlciBjYXNlIGxldHRlciBpbiB0aGUgS2FUZVggZm9udHMuXG5cblxud2lkZUNoYXIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4RDgzNSwgMHhERDVDKTsgLy8gayBkb3VibGUgc3RydWNrXG5cbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBtYXRob3JkLCBcImtcIiwgd2lkZUNoYXIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgdGV4dG9yZCwgXCJrXCIsIHdpZGVDaGFyKTsgLy8gTmV4dCwgc29tZSB3aWRlIGNoYXJhY3RlciBudW1lcmFsc1xuXG5mb3IgKGxldCBpID0gMDsgaSA8IDEwOyBpKyspIHtcbiAgY29uc3QgY2ggPSBpLnRvU3RyaW5nKCk7XG4gIHdpZGVDaGFyID0gU3RyaW5nLmZyb21DaGFyQ29kZSgweEQ4MzUsIDB4REZDRSArIGkpOyAvLyAwLTkgYm9sZFxuXG4gIGRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBtYXRob3JkLCBjaCwgd2lkZUNoYXIpO1xuICBkZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCB0ZXh0b3JkLCBjaCwgd2lkZUNoYXIpO1xuICB3aWRlQ2hhciA9IFN0cmluZy5mcm9tQ2hhckNvZGUoMHhEODM1LCAweERGRTIgKyBpKTsgLy8gMC05IHNhbnMgc2VyaWZcblxuICBkZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgbWF0aG9yZCwgY2gsIHdpZGVDaGFyKTtcbiAgZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgdGV4dG9yZCwgY2gsIHdpZGVDaGFyKTtcbiAgd2lkZUNoYXIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4RDgzNSwgMHhERkVDICsgaSk7IC8vIDAtOSBib2xkIHNhbnNcblxuICBkZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgbWF0aG9yZCwgY2gsIHdpZGVDaGFyKTtcbiAgZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgdGV4dG9yZCwgY2gsIHdpZGVDaGFyKTtcbiAgd2lkZUNoYXIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4RDgzNSwgMHhERkY2ICsgaSk7IC8vIDAtOSBtb25vc3BhY2VcblxuICBkZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgbWF0aG9yZCwgY2gsIHdpZGVDaGFyKTtcbiAgZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgdGV4dG9yZCwgY2gsIHdpZGVDaGFyKTtcbn0gLy8gV2UgYWRkIHRoZXNlIExhdGluLTEgbGV0dGVycyBhcyBzeW1ib2xzIGZvciBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSxcbi8vIGJ1dCB0aGV5IGFyZSBub3QgYWN0dWFsbHkgaW4gdGhlIGZvbnQsIG5vciBhcmUgdGhleSBzdXBwb3J0ZWQgYnkgdGhlXG4vLyBVbmljb2RlIGFjY2VudCBtZWNoYW5pc20sIHNvIHRoZXkgZmFsbCBiYWNrIHRvIFRpbWVzIGZvbnQgYW5kIGxvb2sgdWdseS5cbi8vIFRPRE8oZWRlbWFpbmUpOiBGaXggdGhpcy5cblxuXG5jb25zdCBleHRyYUxhdGluID0gXCJcXHUwMGQwXFx1MDBkZVxcdTAwZmVcIjtcblxuZm9yIChsZXQgaSA9IDA7IGkgPCBleHRyYUxhdGluLmxlbmd0aDsgaSsrKSB7XG4gIGNvbnN0IGNoID0gZXh0cmFMYXRpbi5jaGFyQXQoaSk7XG4gIGRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBtYXRob3JkLCBjaCwgY2gpO1xuICBkZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCB0ZXh0b3JkLCBjaCwgY2gpO1xufVxuOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL3dpZGUtY2hhcmFjdGVyLmpzXG4vKipcbiAqIFRoaXMgZmlsZSBwcm92aWRlcyBzdXBwb3J0IGZvciBVbmljb2RlIHJhbmdlIFUrMUQ0MDAgdG8gVSsxRDdGRixcbiAqIE1hdGhlbWF0aWNhbCBBbHBoYW51bWVyaWMgU3ltYm9scy5cbiAqXG4gKiBGdW5jdGlvbiB3aWRlQ2hhcmFjdGVyRm9udCB0YWtlcyBhIHdpZGUgY2hhcmFjdGVyIGFzIGlucHV0IGFuZCByZXR1cm5zXG4gKiB0aGUgZm9udCBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgdG8gcmVuZGVyIGl0IHByb3Blcmx5LlxuICovXG5cbi8qKlxuICogRGF0YSBiZWxvdyBpcyBmcm9tIGh0dHBzOi8vd3d3LnVuaWNvZGUub3JnL2NoYXJ0cy9QREYvVTFENDAwLnBkZlxuICogVGhhdCBkb2N1bWVudCBzb3J0cyBjaGFyYWN0ZXJzIGludG8gZ3JvdXBzIGJ5IGZvbnQgdHlwZSwgc2F5IGJvbGQgb3IgaXRhbGljLlxuICpcbiAqIEluIHRoZSBhcnJheXMgYmVsb3csIGVhY2ggc3ViYXJyYXkgY29uc2lzdHMgdGhyZWUgZWxlbWVudHM6XG4gKiAgICAgICogVGhlIENTUyBjbGFzcyBvZiB0aGF0IGdyb3VwIHdoZW4gaW4gbWF0aCBtb2RlLlxuICogICAgICAqIFRoZSBDU1MgY2xhc3Mgb2YgdGhhdCBncm91cCB3aGVuIGluIHRleHQgbW9kZS5cbiAqICAgICAgKiBUaGUgZm9udCBuYW1lLCBzbyB0aGF0IEthVGVYIGNhbiBnZXQgZm9udCBtZXRyaWNzLlxuICovXG5cbmNvbnN0IHdpZGVMYXRpbkxldHRlckRhdGEgPSBbW1wibWF0aGJmXCIsIFwidGV4dGJmXCIsIFwiTWFpbi1Cb2xkXCJdLCAvLyBBLVogYm9sZCB1cHJpZ2h0XG5bXCJtYXRoYmZcIiwgXCJ0ZXh0YmZcIiwgXCJNYWluLUJvbGRcIl0sIC8vIGEteiBib2xkIHVwcmlnaHRcbltcIm1hdGhub3JtYWxcIiwgXCJ0ZXh0aXRcIiwgXCJNYXRoLUl0YWxpY1wiXSwgLy8gQS1aIGl0YWxpY1xuW1wibWF0aG5vcm1hbFwiLCBcInRleHRpdFwiLCBcIk1hdGgtSXRhbGljXCJdLCAvLyBhLXogaXRhbGljXG5bXCJib2xkc3ltYm9sXCIsIFwiYm9sZHN5bWJvbFwiLCBcIk1haW4tQm9sZEl0YWxpY1wiXSwgLy8gQS1aIGJvbGQgaXRhbGljXG5bXCJib2xkc3ltYm9sXCIsIFwiYm9sZHN5bWJvbFwiLCBcIk1haW4tQm9sZEl0YWxpY1wiXSwgLy8gYS16IGJvbGQgaXRhbGljXG4vLyBNYXAgZmFuY3kgQS1aIGxldHRlcnMgdG8gc2NyaXB0LCBub3QgY2FsbGlncmFwaGljLlxuLy8gVGhpcyBhbGlnbnMgd2l0aCB1bmljb2RlLW1hdGggYW5kIG1hdGggZm9udHMgKGV4Y2VwdCBDYW1icmlhIE1hdGgpLlxuW1wibWF0aHNjclwiLCBcInRleHRzY3JcIiwgXCJTY3JpcHQtUmVndWxhclwiXSwgLy8gQS1aIHNjcmlwdFxuW1wiXCIsIFwiXCIsIFwiXCJdLCAvLyBhLXogc2NyaXB0LiAgTm8gZm9udFxuW1wiXCIsIFwiXCIsIFwiXCJdLCAvLyBBLVogYm9sZCBzY3JpcHQuIE5vIGZvbnRcbltcIlwiLCBcIlwiLCBcIlwiXSwgLy8gYS16IGJvbGQgc2NyaXB0LiBObyBmb250XG5bXCJtYXRoZnJha1wiLCBcInRleHRmcmFrXCIsIFwiRnJha3R1ci1SZWd1bGFyXCJdLCAvLyBBLVogRnJha3R1clxuW1wibWF0aGZyYWtcIiwgXCJ0ZXh0ZnJha1wiLCBcIkZyYWt0dXItUmVndWxhclwiXSwgLy8gYS16IEZyYWt0dXJcbltcIm1hdGhiYlwiLCBcInRleHRiYlwiLCBcIkFNUy1SZWd1bGFyXCJdLCAvLyBBLVogZG91YmxlLXN0cnVja1xuW1wibWF0aGJiXCIsIFwidGV4dGJiXCIsIFwiQU1TLVJlZ3VsYXJcIl0sIC8vIGsgZG91YmxlLXN0cnVja1xuLy8gTm90ZSB0aGF0IHdlIGFyZSB1c2luZyBhIGJvbGQgZm9udCwgYnV0IGZvbnQgbWV0cmljcyBmb3IgcmVndWxhciBGcmFrdHVyLlxuW1wibWF0aGJvbGRmcmFrXCIsIFwidGV4dGJvbGRmcmFrXCIsIFwiRnJha3R1ci1SZWd1bGFyXCJdLCAvLyBBLVogYm9sZCBGcmFrdHVyXG5bXCJtYXRoYm9sZGZyYWtcIiwgXCJ0ZXh0Ym9sZGZyYWtcIiwgXCJGcmFrdHVyLVJlZ3VsYXJcIl0sIC8vIGEteiBib2xkIEZyYWt0dXJcbltcIm1hdGhzZlwiLCBcInRleHRzZlwiLCBcIlNhbnNTZXJpZi1SZWd1bGFyXCJdLCAvLyBBLVogc2Fucy1zZXJpZlxuW1wibWF0aHNmXCIsIFwidGV4dHNmXCIsIFwiU2Fuc1NlcmlmLVJlZ3VsYXJcIl0sIC8vIGEteiBzYW5zLXNlcmlmXG5bXCJtYXRoYm9sZHNmXCIsIFwidGV4dGJvbGRzZlwiLCBcIlNhbnNTZXJpZi1Cb2xkXCJdLCAvLyBBLVogYm9sZCBzYW5zLXNlcmlmXG5bXCJtYXRoYm9sZHNmXCIsIFwidGV4dGJvbGRzZlwiLCBcIlNhbnNTZXJpZi1Cb2xkXCJdLCAvLyBhLXogYm9sZCBzYW5zLXNlcmlmXG5bXCJtYXRoaXRzZlwiLCBcInRleHRpdHNmXCIsIFwiU2Fuc1NlcmlmLUl0YWxpY1wiXSwgLy8gQS1aIGl0YWxpYyBzYW5zLXNlcmlmXG5bXCJtYXRoaXRzZlwiLCBcInRleHRpdHNmXCIsIFwiU2Fuc1NlcmlmLUl0YWxpY1wiXSwgLy8gYS16IGl0YWxpYyBzYW5zLXNlcmlmXG5bXCJcIiwgXCJcIiwgXCJcIl0sIC8vIEEtWiBib2xkIGl0YWxpYyBzYW5zLiBObyBmb250XG5bXCJcIiwgXCJcIiwgXCJcIl0sIC8vIGEteiBib2xkIGl0YWxpYyBzYW5zLiBObyBmb250XG5bXCJtYXRodHRcIiwgXCJ0ZXh0dHRcIiwgXCJUeXBld3JpdGVyLVJlZ3VsYXJcIl0sIC8vIEEtWiBtb25vc3BhY2VcbltcIm1hdGh0dFwiLCBcInRleHR0dFwiLCBcIlR5cGV3cml0ZXItUmVndWxhclwiXSAvLyBhLXogbW9ub3NwYWNlXG5dO1xuY29uc3Qgd2lkZU51bWVyYWxEYXRhID0gW1tcIm1hdGhiZlwiLCBcInRleHRiZlwiLCBcIk1haW4tQm9sZFwiXSwgLy8gMC05IGJvbGRcbltcIlwiLCBcIlwiLCBcIlwiXSwgLy8gMC05IGRvdWJsZS1zdHJ1Y2suIE5vIEthVGVYIGZvbnQuXG5bXCJtYXRoc2ZcIiwgXCJ0ZXh0c2ZcIiwgXCJTYW5zU2VyaWYtUmVndWxhclwiXSwgLy8gMC05IHNhbnMtc2VyaWZcbltcIm1hdGhib2xkc2ZcIiwgXCJ0ZXh0Ym9sZHNmXCIsIFwiU2Fuc1NlcmlmLUJvbGRcIl0sIC8vIDAtOSBib2xkIHNhbnMtc2VyaWZcbltcIm1hdGh0dFwiLCBcInRleHR0dFwiLCBcIlR5cGV3cml0ZXItUmVndWxhclwiXSAvLyAwLTkgbW9ub3NwYWNlXG5dO1xuY29uc3Qgd2lkZUNoYXJhY3RlckZvbnQgPSBmdW5jdGlvbiAod2lkZUNoYXIsIG1vZGUpIHtcbiAgLy8gSUUgZG9lc24ndCBzdXBwb3J0IGNvZGVQb2ludEF0KCkuIFNvIHdvcmsgd2l0aCB0aGUgc3Vycm9nYXRlIHBhaXIuXG4gIGNvbnN0IEggPSB3aWRlQ2hhci5jaGFyQ29kZUF0KDApOyAvLyBoaWdoIHN1cnJvZ2F0ZVxuXG4gIGNvbnN0IEwgPSB3aWRlQ2hhci5jaGFyQ29kZUF0KDEpOyAvLyBsb3cgc3Vycm9nYXRlXG5cbiAgY29uc3QgY29kZVBvaW50ID0gKEggLSAweEQ4MDApICogMHg0MDAgKyAoTCAtIDB4REMwMCkgKyAweDEwMDAwO1xuICBjb25zdCBqID0gbW9kZSA9PT0gXCJtYXRoXCIgPyAwIDogMTsgLy8gY29sdW1uIGluZGV4IGZvciBDU1MgY2xhc3MuXG5cbiAgaWYgKDB4MUQ0MDAgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8IDB4MUQ2QTQpIHtcbiAgICAvLyB3aWRlTGF0aW5MZXR0ZXJEYXRhIGNvbnRhaW5zIGV4YWN0bHkgMjYgY2hhcnMgb24gZWFjaCByb3cuXG4gICAgLy8gU28gd2UgY2FuIGNhbGN1bGF0ZSB0aGUgcmVsZXZhbnQgcm93LiBObyB0cmF2ZXJzZSBuZWNlc3NhcnkuXG4gICAgY29uc3QgaSA9IE1hdGguZmxvb3IoKGNvZGVQb2ludCAtIDB4MUQ0MDApIC8gMjYpO1xuICAgIHJldHVybiBbd2lkZUxhdGluTGV0dGVyRGF0YVtpXVsyXSwgd2lkZUxhdGluTGV0dGVyRGF0YVtpXVtqXV07XG4gIH0gZWxzZSBpZiAoMHgxRDdDRSA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MUQ3RkYpIHtcbiAgICAvLyBOdW1lcmFscywgdGVuIHBlciByb3cuXG4gICAgY29uc3QgaSA9IE1hdGguZmxvb3IoKGNvZGVQb2ludCAtIDB4MUQ3Q0UpIC8gMTApO1xuICAgIHJldHVybiBbd2lkZU51bWVyYWxEYXRhW2ldWzJdLCB3aWRlTnVtZXJhbERhdGFbaV1bal1dO1xuICB9IGVsc2UgaWYgKGNvZGVQb2ludCA9PT0gMHgxRDZBNSB8fCBjb2RlUG9pbnQgPT09IDB4MUQ2QTYpIHtcbiAgICAvLyBkb3RsZXNzIGkgb3IgalxuICAgIHJldHVybiBbd2lkZUxhdGluTGV0dGVyRGF0YVswXVsyXSwgd2lkZUxhdGluTGV0dGVyRGF0YVswXVtqXV07XG4gIH0gZWxzZSBpZiAoMHgxRDZBNiA8IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPCAweDFEN0NFKSB7XG4gICAgLy8gR3JlZWsgbGV0dGVycy4gTm90IHN1cHBvcnRlZCwgeWV0LlxuICAgIHJldHVybiBbXCJcIiwgXCJcIl07XG4gIH0gZWxzZSB7XG4gICAgLy8gV2UgZG9uJ3Qgc3VwcG9ydCBhbnkgd2lkZSBjaGFyYWN0ZXJzIG91dHNpZGUgMUQ0MDDigJMxRDdGRi5cbiAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJVbnN1cHBvcnRlZCBjaGFyYWN0ZXI6IFwiICsgd2lkZUNoYXIpO1xuICB9XG59O1xuOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2J1aWxkQ29tbW9uLmpzXG4vKiBlc2xpbnQgbm8tY29uc29sZTowICovXG5cbi8qKlxuICogVGhpcyBtb2R1bGUgY29udGFpbnMgZ2VuZXJhbCBmdW5jdGlvbnMgdGhhdCBjYW4gYmUgdXNlZCBmb3IgYnVpbGRpbmdcbiAqIGRpZmZlcmVudCBraW5kcyBvZiBkb21UcmVlIG5vZGVzIGluIGEgY29uc2lzdGVudCBtYW5uZXIuXG4gKi9cblxuXG5cblxuXG5cblxuLyoqXG4gKiBMb29rcyB1cCB0aGUgZ2l2ZW4gc3ltYm9sIGluIGZvbnRNZXRyaWNzLCBhZnRlciBhcHBseWluZyBhbnkgc3ltYm9sXG4gKiByZXBsYWNlbWVudHMgZGVmaW5lZCBpbiBzeW1ib2wuanNcbiAqL1xuY29uc3QgbG9va3VwU3ltYm9sID0gZnVuY3Rpb24gKHZhbHVlLCAvLyBUT0RPKCM5NjMpOiBVc2UgYSB1bmlvbiB0eXBlIGZvciB0aGlzLlxuZm9udE5hbWUsIG1vZGUpIHtcbiAgLy8gUmVwbGFjZSB0aGUgdmFsdWUgd2l0aCBpdHMgcmVwbGFjZWQgdmFsdWUgZnJvbSBzeW1ib2wuanNcbiAgaWYgKHNyY19zeW1ib2xzW21vZGVdW3ZhbHVlXSAmJiBzcmNfc3ltYm9sc1ttb2RlXVt2YWx1ZV0ucmVwbGFjZSkge1xuICAgIHZhbHVlID0gc3JjX3N5bWJvbHNbbW9kZV1bdmFsdWVdLnJlcGxhY2U7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHZhbHVlOiB2YWx1ZSxcbiAgICBtZXRyaWNzOiBnZXRDaGFyYWN0ZXJNZXRyaWNzKHZhbHVlLCBmb250TmFtZSwgbW9kZSlcbiAgfTtcbn07XG4vKipcbiAqIE1ha2VzIGEgc3ltYm9sTm9kZSBhZnRlciB0cmFuc2xhdGlvbiB2aWEgdGhlIGxpc3Qgb2Ygc3ltYm9scyBpbiBzeW1ib2xzLmpzLlxuICogQ29ycmVjdGx5IHB1bGxzIG91dCBtZXRyaWNzIGZvciB0aGUgY2hhcmFjdGVyLCBhbmQgb3B0aW9uYWxseSB0YWtlcyBhIGxpc3Qgb2ZcbiAqIGNsYXNzZXMgdG8gYmUgYXR0YWNoZWQgdG8gdGhlIG5vZGUuXG4gKlxuICogVE9ETzogbWFrZSBhcmd1bWVudCBvcmRlciBjbG9zZXIgdG8gbWFrZVNwYW5cbiAqIFRPRE86IGFkZCBhIHNlcGFyYXRlIGFyZ3VtZW50IGZvciBtYXRoIGNsYXNzIChlLmcuIGBtb3BgLCBgbWJpbmApLCB3aGljaFxuICogc2hvdWxkIGlmIHByZXNlbnQgY29tZSBmaXJzdCBpbiBgY2xhc3Nlc2AuXG4gKiBUT0RPKCM5NTMpOiBNYWtlIGBvcHRpb25zYCBtYW5kYXRvcnkgYW5kIGFsd2F5cyBwYXNzIGl0IGluLlxuICovXG5cblxuY29uc3QgbWFrZVN5bWJvbCA9IGZ1bmN0aW9uICh2YWx1ZSwgZm9udE5hbWUsIG1vZGUsIG9wdGlvbnMsIGNsYXNzZXMpIHtcbiAgY29uc3QgbG9va3VwID0gbG9va3VwU3ltYm9sKHZhbHVlLCBmb250TmFtZSwgbW9kZSk7XG4gIGNvbnN0IG1ldHJpY3MgPSBsb29rdXAubWV0cmljcztcbiAgdmFsdWUgPSBsb29rdXAudmFsdWU7XG4gIGxldCBzeW1ib2xOb2RlO1xuXG4gIGlmIChtZXRyaWNzKSB7XG4gICAgbGV0IGl0YWxpYyA9IG1ldHJpY3MuaXRhbGljO1xuXG4gICAgaWYgKG1vZGUgPT09IFwidGV4dFwiIHx8IG9wdGlvbnMgJiYgb3B0aW9ucy5mb250ID09PSBcIm1hdGhpdFwiKSB7XG4gICAgICBpdGFsaWMgPSAwO1xuICAgIH1cblxuICAgIHN5bWJvbE5vZGUgPSBuZXcgU3ltYm9sTm9kZSh2YWx1ZSwgbWV0cmljcy5oZWlnaHQsIG1ldHJpY3MuZGVwdGgsIGl0YWxpYywgbWV0cmljcy5za2V3LCBtZXRyaWNzLndpZHRoLCBjbGFzc2VzKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBUT0RPKGVtaWx5KTogRmlndXJlIG91dCBhIGdvb2Qgd2F5IHRvIG9ubHkgcHJpbnQgdGhpcyBpbiBkZXZlbG9wbWVudFxuICAgIHR5cGVvZiBjb25zb2xlICE9PSBcInVuZGVmaW5lZFwiICYmIGNvbnNvbGUud2FybihcIk5vIGNoYXJhY3RlciBtZXRyaWNzIFwiICsgKFwiZm9yICdcIiArIHZhbHVlICsgXCInIGluIHN0eWxlICdcIiArIGZvbnROYW1lICsgXCInIGFuZCBtb2RlICdcIiArIG1vZGUgKyBcIidcIikpO1xuICAgIHN5bWJvbE5vZGUgPSBuZXcgU3ltYm9sTm9kZSh2YWx1ZSwgMCwgMCwgMCwgMCwgMCwgY2xhc3Nlcyk7XG4gIH1cblxuICBpZiAob3B0aW9ucykge1xuICAgIHN5bWJvbE5vZGUubWF4Rm9udFNpemUgPSBvcHRpb25zLnNpemVNdWx0aXBsaWVyO1xuXG4gICAgaWYgKG9wdGlvbnMuc3R5bGUuaXNUaWdodCgpKSB7XG4gICAgICBzeW1ib2xOb2RlLmNsYXNzZXMucHVzaChcIm10aWdodFwiKTtcbiAgICB9XG5cbiAgICBjb25zdCBjb2xvciA9IG9wdGlvbnMuZ2V0Q29sb3IoKTtcblxuICAgIGlmIChjb2xvcikge1xuICAgICAgc3ltYm9sTm9kZS5zdHlsZS5jb2xvciA9IGNvbG9yO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzeW1ib2xOb2RlO1xufTtcbi8qKlxuICogTWFrZXMgYSBzeW1ib2wgaW4gTWFpbi1SZWd1bGFyIG9yIEFNUy1SZWd1bGFyLlxuICogVXNlZCBmb3IgcmVsLCBiaW4sIG9wZW4sIGNsb3NlLCBpbm5lciwgYW5kIHB1bmN0LlxuICovXG5cblxuY29uc3QgbWF0aHN5bSA9IGZ1bmN0aW9uICh2YWx1ZSwgbW9kZSwgb3B0aW9ucywgY2xhc3Nlcykge1xuICBpZiAoY2xhc3NlcyA9PT0gdm9pZCAwKSB7XG4gICAgY2xhc3NlcyA9IFtdO1xuICB9XG5cbiAgLy8gRGVjaWRlIHdoYXQgZm9udCB0byByZW5kZXIgdGhlIHN5bWJvbCBpbiBieSBpdHMgZW50cnkgaW4gdGhlIHN5bWJvbHNcbiAgLy8gdGFibGUuXG4gIC8vIEhhdmUgYSBzcGVjaWFsIGNhc2UgZm9yIHdoZW4gdGhlIHZhbHVlID0gXFwgYmVjYXVzZSB0aGUgXFwgaXMgdXNlZCBhcyBhXG4gIC8vIHRleHRvcmQgaW4gdW5zdXBwb3J0ZWQgY29tbWFuZCBlcnJvcnMgYnV0IGNhbm5vdCBiZSBwYXJzZWQgYXMgYSByZWd1bGFyXG4gIC8vIHRleHQgb3JkaW5hbCBhbmQgaXMgdGhlcmVmb3JlIG5vdCBwcmVzZW50IGFzIGEgc3ltYm9sIGluIHRoZSBzeW1ib2xzXG4gIC8vIHRhYmxlIGZvciB0ZXh0LCBhcyB3ZWxsIGFzIGEgc3BlY2lhbCBjYXNlIGZvciBib2xkc3ltYm9sIGJlY2F1c2UgaXRcbiAgLy8gY2FuIGJlIHVzZWQgZm9yIGJvbGQgKyBhbmQgLVxuICBpZiAob3B0aW9ucy5mb250ID09PSBcImJvbGRzeW1ib2xcIiAmJiBsb29rdXBTeW1ib2wodmFsdWUsIFwiTWFpbi1Cb2xkXCIsIG1vZGUpLm1ldHJpY3MpIHtcbiAgICByZXR1cm4gbWFrZVN5bWJvbCh2YWx1ZSwgXCJNYWluLUJvbGRcIiwgbW9kZSwgb3B0aW9ucywgY2xhc3Nlcy5jb25jYXQoW1wibWF0aGJmXCJdKSk7XG4gIH0gZWxzZSBpZiAodmFsdWUgPT09IFwiXFxcXFwiIHx8IHNyY19zeW1ib2xzW21vZGVdW3ZhbHVlXS5mb250ID09PSBcIm1haW5cIikge1xuICAgIHJldHVybiBtYWtlU3ltYm9sKHZhbHVlLCBcIk1haW4tUmVndWxhclwiLCBtb2RlLCBvcHRpb25zLCBjbGFzc2VzKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbWFrZVN5bWJvbCh2YWx1ZSwgXCJBTVMtUmVndWxhclwiLCBtb2RlLCBvcHRpb25zLCBjbGFzc2VzLmNvbmNhdChbXCJhbXNybVwiXSkpO1xuICB9XG59O1xuLyoqXG4gKiBEZXRlcm1pbmVzIHdoaWNoIG9mIHRoZSB0d28gZm9udCBuYW1lcyAoTWFpbi1Cb2xkIGFuZCBNYXRoLUJvbGRJdGFsaWMpIGFuZFxuICogY29ycmVzcG9uZGluZyBzdHlsZSB0YWdzIChtYXRoYmYgb3IgYm9sZHN5bWJvbCkgdG8gdXNlIGZvciBmb250IFwiYm9sZHN5bWJvbFwiLFxuICogZGVwZW5kaW5nIG9uIHRoZSBzeW1ib2wuICBVc2UgdGhpcyBmdW5jdGlvbiBpbnN0ZWFkIG9mIGZvbnRNYXAgZm9yIGZvbnRcbiAqIFwiYm9sZHN5bWJvbFwiLlxuICovXG5cblxuY29uc3QgYm9sZHN5bWJvbCA9IGZ1bmN0aW9uICh2YWx1ZSwgbW9kZSwgb3B0aW9ucywgY2xhc3NlcywgdHlwZSkge1xuICBpZiAodHlwZSAhPT0gXCJ0ZXh0b3JkXCIgJiYgbG9va3VwU3ltYm9sKHZhbHVlLCBcIk1hdGgtQm9sZEl0YWxpY1wiLCBtb2RlKS5tZXRyaWNzKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGZvbnROYW1lOiBcIk1hdGgtQm9sZEl0YWxpY1wiLFxuICAgICAgZm9udENsYXNzOiBcImJvbGRzeW1ib2xcIlxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgLy8gU29tZSBnbHlwaHMgZG8gbm90IGV4aXN0IGluIE1hdGgtQm9sZEl0YWxpYyBzbyB3ZSBuZWVkIHRvIHVzZVxuICAgIC8vIE1haW4tQm9sZCBpbnN0ZWFkLlxuICAgIHJldHVybiB7XG4gICAgICBmb250TmFtZTogXCJNYWluLUJvbGRcIixcbiAgICAgIGZvbnRDbGFzczogXCJtYXRoYmZcIlxuICAgIH07XG4gIH1cbn07XG4vKipcbiAqIE1ha2VzIGVpdGhlciBhIG1hdGhvcmQgb3IgdGV4dG9yZCBpbiB0aGUgY29ycmVjdCBmb250IGFuZCBjb2xvci5cbiAqL1xuXG5cbmNvbnN0IG1ha2VPcmQgPSBmdW5jdGlvbiAoZ3JvdXAsIG9wdGlvbnMsIHR5cGUpIHtcbiAgY29uc3QgbW9kZSA9IGdyb3VwLm1vZGU7XG4gIGNvbnN0IHRleHQgPSBncm91cC50ZXh0O1xuICBjb25zdCBjbGFzc2VzID0gW1wibW9yZFwiXTsgLy8gTWF0aCBtb2RlIG9yIE9sZCBmb250IChpLmUuIFxccm0pXG5cbiAgY29uc3QgaXNGb250ID0gbW9kZSA9PT0gXCJtYXRoXCIgfHwgbW9kZSA9PT0gXCJ0ZXh0XCIgJiYgb3B0aW9ucy5mb250O1xuICBjb25zdCBmb250T3JGYW1pbHkgPSBpc0ZvbnQgPyBvcHRpb25zLmZvbnQgOiBvcHRpb25zLmZvbnRGYW1pbHk7XG4gIGxldCB3aWRlRm9udE5hbWUgPSBcIlwiO1xuICBsZXQgd2lkZUZvbnRDbGFzcyA9IFwiXCI7XG5cbiAgaWYgKHRleHQuY2hhckNvZGVBdCgwKSA9PT0gMHhEODM1KSB7XG4gICAgW3dpZGVGb250TmFtZSwgd2lkZUZvbnRDbGFzc10gPSB3aWRlQ2hhcmFjdGVyRm9udCh0ZXh0LCBtb2RlKTtcbiAgfVxuXG4gIGlmICh3aWRlRm9udE5hbWUubGVuZ3RoID4gMCkge1xuICAgIC8vIHN1cnJvZ2F0ZSBwYWlycyBnZXQgc3BlY2lhbCB0cmVhdG1lbnRcbiAgICByZXR1cm4gbWFrZVN5bWJvbCh0ZXh0LCB3aWRlRm9udE5hbWUsIG1vZGUsIG9wdGlvbnMsIGNsYXNzZXMuY29uY2F0KHdpZGVGb250Q2xhc3MpKTtcbiAgfSBlbHNlIGlmIChmb250T3JGYW1pbHkpIHtcbiAgICBsZXQgZm9udE5hbWU7XG4gICAgbGV0IGZvbnRDbGFzc2VzO1xuXG4gICAgaWYgKGZvbnRPckZhbWlseSA9PT0gXCJib2xkc3ltYm9sXCIpIHtcbiAgICAgIGNvbnN0IGZvbnREYXRhID0gYm9sZHN5bWJvbCh0ZXh0LCBtb2RlLCBvcHRpb25zLCBjbGFzc2VzLCB0eXBlKTtcbiAgICAgIGZvbnROYW1lID0gZm9udERhdGEuZm9udE5hbWU7XG4gICAgICBmb250Q2xhc3NlcyA9IFtmb250RGF0YS5mb250Q2xhc3NdO1xuICAgIH0gZWxzZSBpZiAoaXNGb250KSB7XG4gICAgICBmb250TmFtZSA9IGZvbnRNYXBbZm9udE9yRmFtaWx5XS5mb250TmFtZTtcbiAgICAgIGZvbnRDbGFzc2VzID0gW2ZvbnRPckZhbWlseV07XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvbnROYW1lID0gcmV0cmlldmVUZXh0Rm9udE5hbWUoZm9udE9yRmFtaWx5LCBvcHRpb25zLmZvbnRXZWlnaHQsIG9wdGlvbnMuZm9udFNoYXBlKTtcbiAgICAgIGZvbnRDbGFzc2VzID0gW2ZvbnRPckZhbWlseSwgb3B0aW9ucy5mb250V2VpZ2h0LCBvcHRpb25zLmZvbnRTaGFwZV07XG4gICAgfVxuXG4gICAgaWYgKGxvb2t1cFN5bWJvbCh0ZXh0LCBmb250TmFtZSwgbW9kZSkubWV0cmljcykge1xuICAgICAgcmV0dXJuIG1ha2VTeW1ib2wodGV4dCwgZm9udE5hbWUsIG1vZGUsIG9wdGlvbnMsIGNsYXNzZXMuY29uY2F0KGZvbnRDbGFzc2VzKSk7XG4gICAgfSBlbHNlIGlmIChsaWdhdHVyZXMuaGFzT3duUHJvcGVydHkodGV4dCkgJiYgZm9udE5hbWUuc2xpY2UoMCwgMTApID09PSBcIlR5cGV3cml0ZXJcIikge1xuICAgICAgLy8gRGVjb25zdHJ1Y3QgbGlnYXR1cmVzIGluIG1vbm9zcGFjZSBmb250cyAoXFx0ZXh0dHQsIFxcdHQpLlxuICAgICAgY29uc3QgcGFydHMgPSBbXTtcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0ZXh0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHBhcnRzLnB1c2gobWFrZVN5bWJvbCh0ZXh0W2ldLCBmb250TmFtZSwgbW9kZSwgb3B0aW9ucywgY2xhc3Nlcy5jb25jYXQoZm9udENsYXNzZXMpKSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBtYWtlRnJhZ21lbnQocGFydHMpO1xuICAgIH1cbiAgfSAvLyBNYWtlcyBhIHN5bWJvbCBpbiB0aGUgZGVmYXVsdCBmb250IGZvciBtYXRob3JkcyBhbmQgdGV4dG9yZHMuXG5cblxuICBpZiAodHlwZSA9PT0gXCJtYXRob3JkXCIpIHtcbiAgICByZXR1cm4gbWFrZVN5bWJvbCh0ZXh0LCBcIk1hdGgtSXRhbGljXCIsIG1vZGUsIG9wdGlvbnMsIGNsYXNzZXMuY29uY2F0KFtcIm1hdGhub3JtYWxcIl0pKTtcbiAgfSBlbHNlIGlmICh0eXBlID09PSBcInRleHRvcmRcIikge1xuICAgIGNvbnN0IGZvbnQgPSBzcmNfc3ltYm9sc1ttb2RlXVt0ZXh0XSAmJiBzcmNfc3ltYm9sc1ttb2RlXVt0ZXh0XS5mb250O1xuXG4gICAgaWYgKGZvbnQgPT09IFwiYW1zXCIpIHtcbiAgICAgIGNvbnN0IGZvbnROYW1lID0gcmV0cmlldmVUZXh0Rm9udE5hbWUoXCJhbXNybVwiLCBvcHRpb25zLmZvbnRXZWlnaHQsIG9wdGlvbnMuZm9udFNoYXBlKTtcbiAgICAgIHJldHVybiBtYWtlU3ltYm9sKHRleHQsIGZvbnROYW1lLCBtb2RlLCBvcHRpb25zLCBjbGFzc2VzLmNvbmNhdChcImFtc3JtXCIsIG9wdGlvbnMuZm9udFdlaWdodCwgb3B0aW9ucy5mb250U2hhcGUpKTtcbiAgICB9IGVsc2UgaWYgKGZvbnQgPT09IFwibWFpblwiIHx8ICFmb250KSB7XG4gICAgICBjb25zdCBmb250TmFtZSA9IHJldHJpZXZlVGV4dEZvbnROYW1lKFwidGV4dHJtXCIsIG9wdGlvbnMuZm9udFdlaWdodCwgb3B0aW9ucy5mb250U2hhcGUpO1xuICAgICAgcmV0dXJuIG1ha2VTeW1ib2wodGV4dCwgZm9udE5hbWUsIG1vZGUsIG9wdGlvbnMsIGNsYXNzZXMuY29uY2F0KG9wdGlvbnMuZm9udFdlaWdodCwgb3B0aW9ucy5mb250U2hhcGUpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZm9udHMgYWRkZWQgYnkgcGx1Z2luc1xuICAgICAgY29uc3QgZm9udE5hbWUgPSByZXRyaWV2ZVRleHRGb250TmFtZShmb250LCBvcHRpb25zLmZvbnRXZWlnaHQsIG9wdGlvbnMuZm9udFNoYXBlKTsgLy8gV2UgYWRkIGZvbnQgbmFtZSBhcyBhIGNzcyBjbGFzc1xuXG4gICAgICByZXR1cm4gbWFrZVN5bWJvbCh0ZXh0LCBmb250TmFtZSwgbW9kZSwgb3B0aW9ucywgY2xhc3Nlcy5jb25jYXQoZm9udE5hbWUsIG9wdGlvbnMuZm9udFdlaWdodCwgb3B0aW9ucy5mb250U2hhcGUpKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwidW5leHBlY3RlZCB0eXBlOiBcIiArIHR5cGUgKyBcIiBpbiBtYWtlT3JkXCIpO1xuICB9XG59O1xuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgc3Vic2VxdWVudCBzeW1ib2xOb2RlcyBoYXZlIHRoZSBzYW1lIGNsYXNzZXMsIHNrZXcsIG1heEZvbnQsXG4gKiBhbmQgc3R5bGVzLlxuICovXG5cblxuY29uc3QgY2FuQ29tYmluZSA9IChwcmV2LCBuZXh0KSA9PiB7XG4gIGlmIChjcmVhdGVDbGFzcyhwcmV2LmNsYXNzZXMpICE9PSBjcmVhdGVDbGFzcyhuZXh0LmNsYXNzZXMpIHx8IHByZXYuc2tldyAhPT0gbmV4dC5za2V3IHx8IHByZXYubWF4Rm9udFNpemUgIT09IG5leHQubWF4Rm9udFNpemUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gLy8gSWYgcHJldiBhbmQgbmV4dCBib3RoIGFyZSBqdXN0IFwibWJpblwicyBvciBcIm1vcmRcInMgd2UgZG9uJ3QgY29tYmluZSB0aGVtXG4gIC8vIHNvIHRoYXQgdGhlIHByb3BlciBzcGFjaW5nIGNhbiBiZSBwcmVzZXJ2ZWQuXG5cblxuICBpZiAocHJldi5jbGFzc2VzLmxlbmd0aCA9PT0gMSkge1xuICAgIGNvbnN0IGNscyA9IHByZXYuY2xhc3Nlc1swXTtcblxuICAgIGlmIChjbHMgPT09IFwibWJpblwiIHx8IGNscyA9PT0gXCJtb3JkXCIpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBmb3IgKGNvbnN0IHN0eWxlIGluIHByZXYuc3R5bGUpIHtcbiAgICBpZiAocHJldi5zdHlsZS5oYXNPd25Qcm9wZXJ0eShzdHlsZSkgJiYgcHJldi5zdHlsZVtzdHlsZV0gIT09IG5leHQuc3R5bGVbc3R5bGVdKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgZm9yIChjb25zdCBzdHlsZSBpbiBuZXh0LnN0eWxlKSB7XG4gICAgaWYgKG5leHQuc3R5bGUuaGFzT3duUHJvcGVydHkoc3R5bGUpICYmIHByZXYuc3R5bGVbc3R5bGVdICE9PSBuZXh0LnN0eWxlW3N0eWxlXSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcbi8qKlxuICogQ29tYmluZSBjb25zZWN1dGl2ZSBkb21UcmVlLnN5bWJvbE5vZGVzIGludG8gYSBzaW5nbGUgc3ltYm9sTm9kZS5cbiAqIE5vdGU6IHRoaXMgZnVuY3Rpb24gbXV0YXRlcyB0aGUgYXJndW1lbnQuXG4gKi9cblxuXG5jb25zdCB0cnlDb21iaW5lQ2hhcnMgPSBjaGFycyA9PiB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgY2hhcnMubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgY29uc3QgcHJldiA9IGNoYXJzW2ldO1xuICAgIGNvbnN0IG5leHQgPSBjaGFyc1tpICsgMV07XG5cbiAgICBpZiAocHJldiBpbnN0YW5jZW9mIFN5bWJvbE5vZGUgJiYgbmV4dCBpbnN0YW5jZW9mIFN5bWJvbE5vZGUgJiYgY2FuQ29tYmluZShwcmV2LCBuZXh0KSkge1xuICAgICAgcHJldi50ZXh0ICs9IG5leHQudGV4dDtcbiAgICAgIHByZXYuaGVpZ2h0ID0gTWF0aC5tYXgocHJldi5oZWlnaHQsIG5leHQuaGVpZ2h0KTtcbiAgICAgIHByZXYuZGVwdGggPSBNYXRoLm1heChwcmV2LmRlcHRoLCBuZXh0LmRlcHRoKTsgLy8gVXNlIHRoZSBsYXN0IGNoYXJhY3RlcidzIGl0YWxpYyBjb3JyZWN0aW9uIHNpbmNlIHdlIHVzZVxuICAgICAgLy8gaXQgdG8gYWRkIHBhZGRpbmcgdG8gdGhlIHJpZ2h0IG9mIHRoZSBzcGFuIGNyZWF0ZWQgZnJvbVxuICAgICAgLy8gdGhlIGNvbWJpbmVkIGNoYXJhY3RlcnMuXG5cbiAgICAgIHByZXYuaXRhbGljID0gbmV4dC5pdGFsaWM7XG4gICAgICBjaGFycy5zcGxpY2UoaSArIDEsIDEpO1xuICAgICAgaS0tO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjaGFycztcbn07XG4vKipcbiAqIENhbGN1bGF0ZSB0aGUgaGVpZ2h0LCBkZXB0aCwgYW5kIG1heEZvbnRTaXplIG9mIGFuIGVsZW1lbnQgYmFzZWQgb24gaXRzXG4gKiBjaGlsZHJlbi5cbiAqL1xuXG5cbmNvbnN0IHNpemVFbGVtZW50RnJvbUNoaWxkcmVuID0gZnVuY3Rpb24gKGVsZW0pIHtcbiAgbGV0IGhlaWdodCA9IDA7XG4gIGxldCBkZXB0aCA9IDA7XG4gIGxldCBtYXhGb250U2l6ZSA9IDA7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBlbGVtLmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgY2hpbGQgPSBlbGVtLmNoaWxkcmVuW2ldO1xuXG4gICAgaWYgKGNoaWxkLmhlaWdodCA+IGhlaWdodCkge1xuICAgICAgaGVpZ2h0ID0gY2hpbGQuaGVpZ2h0O1xuICAgIH1cblxuICAgIGlmIChjaGlsZC5kZXB0aCA+IGRlcHRoKSB7XG4gICAgICBkZXB0aCA9IGNoaWxkLmRlcHRoO1xuICAgIH1cblxuICAgIGlmIChjaGlsZC5tYXhGb250U2l6ZSA+IG1heEZvbnRTaXplKSB7XG4gICAgICBtYXhGb250U2l6ZSA9IGNoaWxkLm1heEZvbnRTaXplO1xuICAgIH1cbiAgfVxuXG4gIGVsZW0uaGVpZ2h0ID0gaGVpZ2h0O1xuICBlbGVtLmRlcHRoID0gZGVwdGg7XG4gIGVsZW0ubWF4Rm9udFNpemUgPSBtYXhGb250U2l6ZTtcbn07XG4vKipcbiAqIE1ha2VzIGEgc3BhbiB3aXRoIHRoZSBnaXZlbiBsaXN0IG9mIGNsYXNzZXMsIGxpc3Qgb2YgY2hpbGRyZW4sIGFuZCBvcHRpb25zLlxuICpcbiAqIFRPRE8oIzk1Myk6IEVuc3VyZSB0aGF0IGBvcHRpb25zYCBpcyBhbHdheXMgcHJvdmlkZWQgKGN1cnJlbnRseSBzb21lIGNhbGxcbiAqIHNpdGVzIGRvbid0IHBhc3MgaXQpIGFuZCBtYWtlIHRoZSB0eXBlIGJlbG93IG1hbmRhdG9yeS5cbiAqIFRPRE86IGFkZCBhIHNlcGFyYXRlIGFyZ3VtZW50IGZvciBtYXRoIGNsYXNzIChlLmcuIGBtb3BgLCBgbWJpbmApLCB3aGljaFxuICogc2hvdWxkIGlmIHByZXNlbnQgY29tZSBmaXJzdCBpbiBgY2xhc3Nlc2AuXG4gKi9cblxuXG5jb25zdCBtYWtlU3BhbiA9IGZ1bmN0aW9uIChjbGFzc2VzLCBjaGlsZHJlbiwgb3B0aW9ucywgc3R5bGUpIHtcbiAgY29uc3Qgc3BhbiA9IG5ldyBTcGFuKGNsYXNzZXMsIGNoaWxkcmVuLCBvcHRpb25zLCBzdHlsZSk7XG4gIHNpemVFbGVtZW50RnJvbUNoaWxkcmVuKHNwYW4pO1xuICByZXR1cm4gc3Bhbjtcbn07IC8vIFNWRyBvbmUgaXMgc2ltcGxlciAtLSBkb2Vzbid0IHJlcXVpcmUgaGVpZ2h0LCBkZXB0aCwgbWF4LWZvbnQgc2V0dGluZy5cbi8vIFRoaXMgaXMgYWxzbyBhIHNlcGFyYXRlIG1ldGhvZCBmb3IgdHlwZXNhZmV0eS5cblxuXG5jb25zdCBtYWtlU3ZnU3BhbiA9IChjbGFzc2VzLCBjaGlsZHJlbiwgb3B0aW9ucywgc3R5bGUpID0+IG5ldyBTcGFuKGNsYXNzZXMsIGNoaWxkcmVuLCBvcHRpb25zLCBzdHlsZSk7XG5cbmNvbnN0IG1ha2VMaW5lU3BhbiA9IGZ1bmN0aW9uIChjbGFzc05hbWUsIG9wdGlvbnMsIHRoaWNrbmVzcykge1xuICBjb25zdCBsaW5lID0gbWFrZVNwYW4oW2NsYXNzTmFtZV0sIFtdLCBvcHRpb25zKTtcbiAgbGluZS5oZWlnaHQgPSBNYXRoLm1heCh0aGlja25lc3MgfHwgb3B0aW9ucy5mb250TWV0cmljcygpLmRlZmF1bHRSdWxlVGhpY2tuZXNzLCBvcHRpb25zLm1pblJ1bGVUaGlja25lc3MpO1xuICBsaW5lLnN0eWxlLmJvcmRlckJvdHRvbVdpZHRoID0gbWFrZUVtKGxpbmUuaGVpZ2h0KTtcbiAgbGluZS5tYXhGb250U2l6ZSA9IDEuMDtcbiAgcmV0dXJuIGxpbmU7XG59O1xuLyoqXG4gKiBNYWtlcyBhbiBhbmNob3Igd2l0aCB0aGUgZ2l2ZW4gaHJlZiwgbGlzdCBvZiBjbGFzc2VzLCBsaXN0IG9mIGNoaWxkcmVuLFxuICogYW5kIG9wdGlvbnMuXG4gKi9cblxuXG5jb25zdCBtYWtlQW5jaG9yID0gZnVuY3Rpb24gKGhyZWYsIGNsYXNzZXMsIGNoaWxkcmVuLCBvcHRpb25zKSB7XG4gIGNvbnN0IGFuY2hvciA9IG5ldyBBbmNob3IoaHJlZiwgY2xhc3NlcywgY2hpbGRyZW4sIG9wdGlvbnMpO1xuICBzaXplRWxlbWVudEZyb21DaGlsZHJlbihhbmNob3IpO1xuICByZXR1cm4gYW5jaG9yO1xufTtcbi8qKlxuICogTWFrZXMgYSBkb2N1bWVudCBmcmFnbWVudCB3aXRoIHRoZSBnaXZlbiBsaXN0IG9mIGNoaWxkcmVuLlxuICovXG5cblxuY29uc3QgbWFrZUZyYWdtZW50ID0gZnVuY3Rpb24gKGNoaWxkcmVuKSB7XG4gIGNvbnN0IGZyYWdtZW50ID0gbmV3IERvY3VtZW50RnJhZ21lbnQoY2hpbGRyZW4pO1xuICBzaXplRWxlbWVudEZyb21DaGlsZHJlbihmcmFnbWVudCk7XG4gIHJldHVybiBmcmFnbWVudDtcbn07XG4vKipcbiAqIFdyYXBzIGdyb3VwIGluIGEgc3BhbiBpZiBpdCdzIGEgZG9jdW1lbnQgZnJhZ21lbnQsIGFsbG93aW5nIHRvIGFwcGx5IGNsYXNzZXNcbiAqIGFuZCBzdHlsZXNcbiAqL1xuXG5cbmNvbnN0IHdyYXBGcmFnbWVudCA9IGZ1bmN0aW9uIChncm91cCwgb3B0aW9ucykge1xuICBpZiAoZ3JvdXAgaW5zdGFuY2VvZiBEb2N1bWVudEZyYWdtZW50KSB7XG4gICAgcmV0dXJuIG1ha2VTcGFuKFtdLCBbZ3JvdXBdLCBvcHRpb25zKTtcbiAgfVxuXG4gIHJldHVybiBncm91cDtcbn07IC8vIFRoZXNlIGFyZSBleGFjdCBvYmplY3QgdHlwZXMgdG8gY2F0Y2ggdHlwb3MgaW4gdGhlIG5hbWVzIG9mIHRoZSBvcHRpb25hbCBmaWVsZHMuXG5cblxuLy8gQ29tcHV0ZXMgdGhlIHVwZGF0ZWQgYGNoaWxkcmVuYCBsaXN0IGFuZCB0aGUgb3ZlcmFsbCBkZXB0aC5cbi8vXG4vLyBUaGlzIGhlbHBlciBmdW5jdGlvbiBmb3IgbWFrZVZMaXN0IG1ha2VzIGl0IGVhc2llciB0byBlbmZvcmNlIHR5cGUgc2FmZXR5IGJ5XG4vLyBhbGxvd2luZyBlYXJseSBleGl0cyAocmV0dXJucykgaW4gdGhlIGxvZ2ljLlxuY29uc3QgZ2V0Vkxpc3RDaGlsZHJlbkFuZERlcHRoID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICBpZiAocGFyYW1zLnBvc2l0aW9uVHlwZSA9PT0gXCJpbmRpdmlkdWFsU2hpZnRcIikge1xuICAgIGNvbnN0IG9sZENoaWxkcmVuID0gcGFyYW1zLmNoaWxkcmVuO1xuICAgIGNvbnN0IGNoaWxkcmVuID0gW29sZENoaWxkcmVuWzBdXTsgLy8gQWRkIGluIGtlcm5zIHRvIHRoZSBsaXN0IG9mIHBhcmFtcy5jaGlsZHJlbiB0byBnZXQgZWFjaCBlbGVtZW50IHRvIGJlXG4gICAgLy8gc2hpZnRlZCB0byB0aGUgY29ycmVjdCBzcGVjaWZpZWQgc2hpZnRcblxuICAgIGNvbnN0IGRlcHRoID0gLW9sZENoaWxkcmVuWzBdLnNoaWZ0IC0gb2xkQ2hpbGRyZW5bMF0uZWxlbS5kZXB0aDtcbiAgICBsZXQgY3VyclBvcyA9IGRlcHRoO1xuXG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCBvbGRDaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgZGlmZiA9IC1vbGRDaGlsZHJlbltpXS5zaGlmdCAtIGN1cnJQb3MgLSBvbGRDaGlsZHJlbltpXS5lbGVtLmRlcHRoO1xuICAgICAgY29uc3Qgc2l6ZSA9IGRpZmYgLSAob2xkQ2hpbGRyZW5baSAtIDFdLmVsZW0uaGVpZ2h0ICsgb2xkQ2hpbGRyZW5baSAtIDFdLmVsZW0uZGVwdGgpO1xuICAgICAgY3VyclBvcyA9IGN1cnJQb3MgKyBkaWZmO1xuICAgICAgY2hpbGRyZW4ucHVzaCh7XG4gICAgICAgIHR5cGU6IFwia2VyblwiLFxuICAgICAgICBzaXplXG4gICAgICB9KTtcbiAgICAgIGNoaWxkcmVuLnB1c2gob2xkQ2hpbGRyZW5baV0pO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBjaGlsZHJlbixcbiAgICAgIGRlcHRoXG4gICAgfTtcbiAgfVxuXG4gIGxldCBkZXB0aDtcblxuICBpZiAocGFyYW1zLnBvc2l0aW9uVHlwZSA9PT0gXCJ0b3BcIikge1xuICAgIC8vIFdlIGFsd2F5cyBzdGFydCBhdCB0aGUgYm90dG9tLCBzbyBjYWxjdWxhdGUgdGhlIGJvdHRvbSBieSBhZGRpbmcgdXBcbiAgICAvLyBhbGwgdGhlIHNpemVzXG4gICAgbGV0IGJvdHRvbSA9IHBhcmFtcy5wb3NpdGlvbkRhdGE7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhcmFtcy5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgY2hpbGQgPSBwYXJhbXMuY2hpbGRyZW5baV07XG4gICAgICBib3R0b20gLT0gY2hpbGQudHlwZSA9PT0gXCJrZXJuXCIgPyBjaGlsZC5zaXplIDogY2hpbGQuZWxlbS5oZWlnaHQgKyBjaGlsZC5lbGVtLmRlcHRoO1xuICAgIH1cblxuICAgIGRlcHRoID0gYm90dG9tO1xuICB9IGVsc2UgaWYgKHBhcmFtcy5wb3NpdGlvblR5cGUgPT09IFwiYm90dG9tXCIpIHtcbiAgICBkZXB0aCA9IC1wYXJhbXMucG9zaXRpb25EYXRhO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGZpcnN0Q2hpbGQgPSBwYXJhbXMuY2hpbGRyZW5bMF07XG5cbiAgICBpZiAoZmlyc3RDaGlsZC50eXBlICE9PSBcImVsZW1cIikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdGaXJzdCBjaGlsZCBtdXN0IGhhdmUgdHlwZSBcImVsZW1cIi4nKTtcbiAgICB9XG5cbiAgICBpZiAocGFyYW1zLnBvc2l0aW9uVHlwZSA9PT0gXCJzaGlmdFwiKSB7XG4gICAgICBkZXB0aCA9IC1maXJzdENoaWxkLmVsZW0uZGVwdGggLSBwYXJhbXMucG9zaXRpb25EYXRhO1xuICAgIH0gZWxzZSBpZiAocGFyYW1zLnBvc2l0aW9uVHlwZSA9PT0gXCJmaXJzdEJhc2VsaW5lXCIpIHtcbiAgICAgIGRlcHRoID0gLWZpcnN0Q2hpbGQuZWxlbS5kZXB0aDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBwb3NpdGlvblR5cGUgXCIgKyBwYXJhbXMucG9zaXRpb25UeXBlICsgXCIuXCIpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgY2hpbGRyZW46IHBhcmFtcy5jaGlsZHJlbixcbiAgICBkZXB0aFxuICB9O1xufTtcbi8qKlxuICogTWFrZXMgYSB2ZXJ0aWNhbCBsaXN0IGJ5IHN0YWNraW5nIGVsZW1lbnRzIGFuZCBrZXJucyBvbiB0b3Agb2YgZWFjaCBvdGhlci5cbiAqIEFsbG93cyBmb3IgbWFueSBkaWZmZXJlbnQgd2F5cyBvZiBzcGVjaWZ5aW5nIHRoZSBwb3NpdGlvbmluZyBtZXRob2QuXG4gKlxuICogU2VlIFZMaXN0UGFyYW0gZG9jdW1lbnRhdGlvbiBhYm92ZS5cbiAqL1xuXG5cbmNvbnN0IG1ha2VWTGlzdCA9IGZ1bmN0aW9uIChwYXJhbXMsIG9wdGlvbnMpIHtcbiAgY29uc3Qge1xuICAgIGNoaWxkcmVuLFxuICAgIGRlcHRoXG4gIH0gPSBnZXRWTGlzdENoaWxkcmVuQW5kRGVwdGgocGFyYW1zKTsgLy8gQ3JlYXRlIGEgc3RydXQgdGhhdCBpcyB0YWxsZXIgdGhhbiBhbnkgbGlzdCBpdGVtLiBUaGUgc3RydXQgaXMgYWRkZWQgdG9cbiAgLy8gZWFjaCBpdGVtLCB3aGVyZSBpdCB3aWxsIGRldGVybWluZSB0aGUgaXRlbSdzIGJhc2VsaW5lLiBTaW5jZSBpdCBoYXNcbiAgLy8gYG92ZXJmbG93OmhpZGRlbmAsIHRoZSBzdHJ1dCdzIHRvcCBlZGdlIHdpbGwgc2l0IG9uIHRoZSBpdGVtJ3MgbGluZSBib3gnc1xuICAvLyB0b3AgZWRnZSBhbmQgdGhlIHN0cnV0J3MgYm90dG9tIGVkZ2Ugd2lsbCBzaXQgb24gdGhlIGl0ZW0ncyBiYXNlbGluZSxcbiAgLy8gd2l0aCBubyBhZGRpdGlvbmFsIGxpbmUtaGVpZ2h0IHNwYWNpbmcuIFRoaXMgYWxsb3dzIHRoZSBpdGVtIGJhc2VsaW5lIHRvXG4gIC8vIGJlIHBvc2l0aW9uZWQgcHJlY2lzZWx5IHdpdGhvdXQgd29ycnlpbmcgYWJvdXQgZm9udCBhc2NlbnQgYW5kXG4gIC8vIGxpbmUtaGVpZ2h0LlxuXG4gIGxldCBwc3RydXRTaXplID0gMDtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgY2hpbGQgPSBjaGlsZHJlbltpXTtcblxuICAgIGlmIChjaGlsZC50eXBlID09PSBcImVsZW1cIikge1xuICAgICAgY29uc3QgZWxlbSA9IGNoaWxkLmVsZW07XG4gICAgICBwc3RydXRTaXplID0gTWF0aC5tYXgocHN0cnV0U2l6ZSwgZWxlbS5tYXhGb250U2l6ZSwgZWxlbS5oZWlnaHQpO1xuICAgIH1cbiAgfVxuXG4gIHBzdHJ1dFNpemUgKz0gMjtcbiAgY29uc3QgcHN0cnV0ID0gbWFrZVNwYW4oW1wicHN0cnV0XCJdLCBbXSk7XG4gIHBzdHJ1dC5zdHlsZS5oZWlnaHQgPSBtYWtlRW0ocHN0cnV0U2l6ZSk7IC8vIENyZWF0ZSBhIG5ldyBsaXN0IG9mIGFjdHVhbCBjaGlsZHJlbiBhdCB0aGUgY29ycmVjdCBvZmZzZXRzXG5cbiAgY29uc3QgcmVhbENoaWxkcmVuID0gW107XG4gIGxldCBtaW5Qb3MgPSBkZXB0aDtcbiAgbGV0IG1heFBvcyA9IGRlcHRoO1xuICBsZXQgY3VyclBvcyA9IGRlcHRoO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBjaGlsZCA9IGNoaWxkcmVuW2ldO1xuXG4gICAgaWYgKGNoaWxkLnR5cGUgPT09IFwia2VyblwiKSB7XG4gICAgICBjdXJyUG9zICs9IGNoaWxkLnNpemU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGVsZW0gPSBjaGlsZC5lbGVtO1xuICAgICAgY29uc3QgY2xhc3NlcyA9IGNoaWxkLndyYXBwZXJDbGFzc2VzIHx8IFtdO1xuICAgICAgY29uc3Qgc3R5bGUgPSBjaGlsZC53cmFwcGVyU3R5bGUgfHwge307XG4gICAgICBjb25zdCBjaGlsZFdyYXAgPSBtYWtlU3BhbihjbGFzc2VzLCBbcHN0cnV0LCBlbGVtXSwgdW5kZWZpbmVkLCBzdHlsZSk7XG4gICAgICBjaGlsZFdyYXAuc3R5bGUudG9wID0gbWFrZUVtKC1wc3RydXRTaXplIC0gY3VyclBvcyAtIGVsZW0uZGVwdGgpO1xuXG4gICAgICBpZiAoY2hpbGQubWFyZ2luTGVmdCkge1xuICAgICAgICBjaGlsZFdyYXAuc3R5bGUubWFyZ2luTGVmdCA9IGNoaWxkLm1hcmdpbkxlZnQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChjaGlsZC5tYXJnaW5SaWdodCkge1xuICAgICAgICBjaGlsZFdyYXAuc3R5bGUubWFyZ2luUmlnaHQgPSBjaGlsZC5tYXJnaW5SaWdodDtcbiAgICAgIH1cblxuICAgICAgcmVhbENoaWxkcmVuLnB1c2goY2hpbGRXcmFwKTtcbiAgICAgIGN1cnJQb3MgKz0gZWxlbS5oZWlnaHQgKyBlbGVtLmRlcHRoO1xuICAgIH1cblxuICAgIG1pblBvcyA9IE1hdGgubWluKG1pblBvcywgY3VyclBvcyk7XG4gICAgbWF4UG9zID0gTWF0aC5tYXgobWF4UG9zLCBjdXJyUG9zKTtcbiAgfSAvLyBUaGUgdmxpc3QgY29udGVudHMgZ28gaW4gYSB0YWJsZS1jZWxsIHdpdGggYHZlcnRpY2FsLWFsaWduOmJvdHRvbWAuXG4gIC8vIFRoaXMgY2VsbCdzIGJvdHRvbSBlZGdlIHdpbGwgZGV0ZXJtaW5lIHRoZSBjb250YWluaW5nIHRhYmxlJ3MgYmFzZWxpbmVcbiAgLy8gd2l0aG91dCBvdmVybHkgZXhwYW5kaW5nIHRoZSBjb250YWluaW5nIGxpbmUtYm94LlxuXG5cbiAgY29uc3Qgdmxpc3QgPSBtYWtlU3BhbihbXCJ2bGlzdFwiXSwgcmVhbENoaWxkcmVuKTtcbiAgdmxpc3Quc3R5bGUuaGVpZ2h0ID0gbWFrZUVtKG1heFBvcyk7IC8vIEEgc2Vjb25kIHJvdyBpcyB1c2VkIGlmIG5lY2Vzc2FyeSB0byByZXByZXNlbnQgdGhlIHZsaXN0J3MgZGVwdGguXG5cbiAgbGV0IHJvd3M7XG5cbiAgaWYgKG1pblBvcyA8IDApIHtcbiAgICAvLyBXZSB3aWxsIGRlZmluZSBkZXB0aCBpbiBhbiBlbXB0eSBzcGFuIHdpdGggZGlzcGxheTogdGFibGUtY2VsbC5cbiAgICAvLyBJdCBzaG91bGQgcmVuZGVyIHdpdGggdGhlIGhlaWdodCB0aGF0IHdlIGRlZmluZS4gQnV0IENocm9tZSwgaW5cbiAgICAvLyBjb250ZW50ZWRpdGFibGUgbW9kZSBvbmx5LCB0cmVhdHMgdGhhdCBzcGFuIGFzIGlmIGl0IGNvbnRhaW5zIHNvbWVcbiAgICAvLyB0ZXh0IGNvbnRlbnQuIEFuZCB0aGF0IG1pbi1oZWlnaHQgb3Zlci1yaWRlcyBvdXIgZGVzaXJlZCBoZWlnaHQuXG4gICAgLy8gU28gd2UgcHV0IGFub3RoZXIgZW1wdHkgc3BhbiBpbnNpZGUgdGhlIGRlcHRoIHN0cnV0IHNwYW4uXG4gICAgY29uc3QgZW1wdHlTcGFuID0gbWFrZVNwYW4oW10sIFtdKTtcbiAgICBjb25zdCBkZXB0aFN0cnV0ID0gbWFrZVNwYW4oW1widmxpc3RcIl0sIFtlbXB0eVNwYW5dKTtcbiAgICBkZXB0aFN0cnV0LnN0eWxlLmhlaWdodCA9IG1ha2VFbSgtbWluUG9zKTsgLy8gU2FmYXJpIHdhbnRzIHRoZSBmaXJzdCByb3cgdG8gaGF2ZSBpbmxpbmUgY29udGVudDsgb3RoZXJ3aXNlIGl0XG4gICAgLy8gcHV0cyB0aGUgYm90dG9tIG9mIHRoZSAqc2Vjb25kKiByb3cgb24gdGhlIGJhc2VsaW5lLlxuXG4gICAgY29uc3QgdG9wU3RydXQgPSBtYWtlU3BhbihbXCJ2bGlzdC1zXCJdLCBbbmV3IFN5bWJvbE5vZGUoXCJcXHUyMDBiXCIpXSk7XG4gICAgcm93cyA9IFttYWtlU3BhbihbXCJ2bGlzdC1yXCJdLCBbdmxpc3QsIHRvcFN0cnV0XSksIG1ha2VTcGFuKFtcInZsaXN0LXJcIl0sIFtkZXB0aFN0cnV0XSldO1xuICB9IGVsc2Uge1xuICAgIHJvd3MgPSBbbWFrZVNwYW4oW1widmxpc3QtclwiXSwgW3ZsaXN0XSldO1xuICB9XG5cbiAgY29uc3QgdnRhYmxlID0gbWFrZVNwYW4oW1widmxpc3QtdFwiXSwgcm93cyk7XG5cbiAgaWYgKHJvd3MubGVuZ3RoID09PSAyKSB7XG4gICAgdnRhYmxlLmNsYXNzZXMucHVzaChcInZsaXN0LXQyXCIpO1xuICB9XG5cbiAgdnRhYmxlLmhlaWdodCA9IG1heFBvcztcbiAgdnRhYmxlLmRlcHRoID0gLW1pblBvcztcbiAgcmV0dXJuIHZ0YWJsZTtcbn07IC8vIEdsdWUgaXMgYSBjb25jZXB0IGZyb20gVGVYIHdoaWNoIGlzIGEgZmxleGlibGUgc3BhY2UgYmV0d2VlbiBlbGVtZW50cyBpblxuLy8gZWl0aGVyIGEgdmVydGljYWwgb3IgaG9yaXpvbnRhbCBsaXN0LiBJbiBLYVRlWCwgYXQgbGVhc3QgZm9yIG5vdywgaXQnc1xuLy8gc3RhdGljIHNwYWNlIGJldHdlZW4gZWxlbWVudHMgaW4gYSBob3Jpem9udGFsIGxheW91dC5cblxuXG5jb25zdCBtYWtlR2x1ZSA9IChtZWFzdXJlbWVudCwgb3B0aW9ucykgPT4ge1xuICAvLyBNYWtlIGFuIGVtcHR5IHNwYW4gZm9yIHRoZSBzcGFjZVxuICBjb25zdCBydWxlID0gbWFrZVNwYW4oW1wibXNwYWNlXCJdLCBbXSwgb3B0aW9ucyk7XG4gIGNvbnN0IHNpemUgPSBjYWxjdWxhdGVTaXplKG1lYXN1cmVtZW50LCBvcHRpb25zKTtcbiAgcnVsZS5zdHlsZS5tYXJnaW5SaWdodCA9IG1ha2VFbShzaXplKTtcbiAgcmV0dXJuIHJ1bGU7XG59OyAvLyBUYWtlcyBmb250IG9wdGlvbnMsIGFuZCByZXR1cm5zIHRoZSBhcHByb3ByaWF0ZSBmb250TG9va3VwIG5hbWVcblxuXG5jb25zdCByZXRyaWV2ZVRleHRGb250TmFtZSA9IGZ1bmN0aW9uIChmb250RmFtaWx5LCBmb250V2VpZ2h0LCBmb250U2hhcGUpIHtcbiAgbGV0IGJhc2VGb250TmFtZSA9IFwiXCI7XG5cbiAgc3dpdGNoIChmb250RmFtaWx5KSB7XG4gICAgY2FzZSBcImFtc3JtXCI6XG4gICAgICBiYXNlRm9udE5hbWUgPSBcIkFNU1wiO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFwidGV4dHJtXCI6XG4gICAgICBiYXNlRm9udE5hbWUgPSBcIk1haW5cIjtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBcInRleHRzZlwiOlxuICAgICAgYmFzZUZvbnROYW1lID0gXCJTYW5zU2VyaWZcIjtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBcInRleHR0dFwiOlxuICAgICAgYmFzZUZvbnROYW1lID0gXCJUeXBld3JpdGVyXCI7XG4gICAgICBicmVhaztcblxuICAgIGRlZmF1bHQ6XG4gICAgICBiYXNlRm9udE5hbWUgPSBmb250RmFtaWx5O1xuICAgIC8vIHVzZSBmb250cyBhZGRlZCBieSBhIHBsdWdpblxuICB9XG5cbiAgbGV0IGZvbnRTdHlsZXNOYW1lO1xuXG4gIGlmIChmb250V2VpZ2h0ID09PSBcInRleHRiZlwiICYmIGZvbnRTaGFwZSA9PT0gXCJ0ZXh0aXRcIikge1xuICAgIGZvbnRTdHlsZXNOYW1lID0gXCJCb2xkSXRhbGljXCI7XG4gIH0gZWxzZSBpZiAoZm9udFdlaWdodCA9PT0gXCJ0ZXh0YmZcIikge1xuICAgIGZvbnRTdHlsZXNOYW1lID0gXCJCb2xkXCI7XG4gIH0gZWxzZSBpZiAoZm9udFdlaWdodCA9PT0gXCJ0ZXh0aXRcIikge1xuICAgIGZvbnRTdHlsZXNOYW1lID0gXCJJdGFsaWNcIjtcbiAgfSBlbHNlIHtcbiAgICBmb250U3R5bGVzTmFtZSA9IFwiUmVndWxhclwiO1xuICB9XG5cbiAgcmV0dXJuIGJhc2VGb250TmFtZSArIFwiLVwiICsgZm9udFN0eWxlc05hbWU7XG59O1xuLyoqXG4gKiBNYXBzIFRlWCBmb250IGNvbW1hbmRzIHRvIG9iamVjdHMgY29udGFpbmluZzpcbiAqIC0gdmFyaWFudDogc3RyaW5nIHVzZWQgZm9yIFwibWF0aHZhcmlhbnRcIiBhdHRyaWJ1dGUgaW4gYnVpbGRNYXRoTUwuanNcbiAqIC0gZm9udE5hbWU6IHRoZSBcInN0eWxlXCIgcGFyYW1ldGVyIHRvIGZvbnRNZXRyaWNzLmdldENoYXJhY3Rlck1ldHJpY3NcbiAqL1xuLy8gQSBtYXAgYmV0d2VlbiB0ZXggZm9udCBjb21tYW5kcyBhbiBNYXRoTUwgbWF0aHZhcmlhbnQgYXR0cmlidXRlIHZhbHVlc1xuXG5cbmNvbnN0IGZvbnRNYXAgPSB7XG4gIC8vIHN0eWxlc1xuICBcIm1hdGhiZlwiOiB7XG4gICAgdmFyaWFudDogXCJib2xkXCIsXG4gICAgZm9udE5hbWU6IFwiTWFpbi1Cb2xkXCJcbiAgfSxcbiAgXCJtYXRocm1cIjoge1xuICAgIHZhcmlhbnQ6IFwibm9ybWFsXCIsXG4gICAgZm9udE5hbWU6IFwiTWFpbi1SZWd1bGFyXCJcbiAgfSxcbiAgXCJ0ZXh0aXRcIjoge1xuICAgIHZhcmlhbnQ6IFwiaXRhbGljXCIsXG4gICAgZm9udE5hbWU6IFwiTWFpbi1JdGFsaWNcIlxuICB9LFxuICBcIm1hdGhpdFwiOiB7XG4gICAgdmFyaWFudDogXCJpdGFsaWNcIixcbiAgICBmb250TmFtZTogXCJNYWluLUl0YWxpY1wiXG4gIH0sXG4gIFwibWF0aG5vcm1hbFwiOiB7XG4gICAgdmFyaWFudDogXCJpdGFsaWNcIixcbiAgICBmb250TmFtZTogXCJNYXRoLUl0YWxpY1wiXG4gIH0sXG4gIFwibWF0aHNmaXRcIjoge1xuICAgIHZhcmlhbnQ6IFwic2Fucy1zZXJpZi1pdGFsaWNcIixcbiAgICBmb250TmFtZTogXCJTYW5zU2VyaWYtSXRhbGljXCJcbiAgfSxcbiAgLy8gXCJib2xkc3ltYm9sXCIgaXMgbWlzc2luZyBiZWNhdXNlIHRoZXkgcmVxdWlyZSB0aGUgdXNlIG9mIG11bHRpcGxlIGZvbnRzOlxuICAvLyBNYXRoLUJvbGRJdGFsaWMgYW5kIE1haW4tQm9sZC4gIFRoaXMgaXMgaGFuZGxlZCBieSBhIHNwZWNpYWwgY2FzZSBpblxuICAvLyBtYWtlT3JkIHdoaWNoIGVuZHMgdXAgY2FsbGluZyBib2xkc3ltYm9sLlxuICAvLyBmYW1pbGllc1xuICBcIm1hdGhiYlwiOiB7XG4gICAgdmFyaWFudDogXCJkb3VibGUtc3RydWNrXCIsXG4gICAgZm9udE5hbWU6IFwiQU1TLVJlZ3VsYXJcIlxuICB9LFxuICBcIm1hdGhjYWxcIjoge1xuICAgIHZhcmlhbnQ6IFwic2NyaXB0XCIsXG4gICAgZm9udE5hbWU6IFwiQ2FsaWdyYXBoaWMtUmVndWxhclwiXG4gIH0sXG4gIFwibWF0aGZyYWtcIjoge1xuICAgIHZhcmlhbnQ6IFwiZnJha3R1clwiLFxuICAgIGZvbnROYW1lOiBcIkZyYWt0dXItUmVndWxhclwiXG4gIH0sXG4gIFwibWF0aHNjclwiOiB7XG4gICAgdmFyaWFudDogXCJzY3JpcHRcIixcbiAgICBmb250TmFtZTogXCJTY3JpcHQtUmVndWxhclwiXG4gIH0sXG4gIFwibWF0aHNmXCI6IHtcbiAgICB2YXJpYW50OiBcInNhbnMtc2VyaWZcIixcbiAgICBmb250TmFtZTogXCJTYW5zU2VyaWYtUmVndWxhclwiXG4gIH0sXG4gIFwibWF0aHR0XCI6IHtcbiAgICB2YXJpYW50OiBcIm1vbm9zcGFjZVwiLFxuICAgIGZvbnROYW1lOiBcIlR5cGV3cml0ZXItUmVndWxhclwiXG4gIH1cbn07XG5jb25zdCBzdmdEYXRhID0ge1xuICAvLyAgIHBhdGgsIHdpZHRoLCBoZWlnaHRcbiAgdmVjOiBbXCJ2ZWNcIiwgMC40NzEsIDAuNzE0XSxcbiAgLy8gdmFsdWVzIGZyb20gdGhlIGZvbnQgZ2x5cGhcbiAgb2lpbnRTaXplMTogW1wib2lpbnRTaXplMVwiLCAwLjk1NywgMC40OTldLFxuICAvLyBvdmFsIHRvIG92ZXJsYXkgdGhlIGludGVncmFuZFxuICBvaWludFNpemUyOiBbXCJvaWludFNpemUyXCIsIDEuNDcyLCAwLjY1OV0sXG4gIG9paWludFNpemUxOiBbXCJvaWlpbnRTaXplMVwiLCAxLjMwNCwgMC40OTldLFxuICBvaWlpbnRTaXplMjogW1wib2lpaW50U2l6ZTJcIiwgMS45OCwgMC42NTldXG59O1xuXG5jb25zdCBzdGF0aWNTdmcgPSBmdW5jdGlvbiAodmFsdWUsIG9wdGlvbnMpIHtcbiAgLy8gQ3JlYXRlIGEgc3BhbiB3aXRoIGlubGluZSBTVkcgZm9yIHRoZSBlbGVtZW50LlxuICBjb25zdCBbcGF0aE5hbWUsIHdpZHRoLCBoZWlnaHRdID0gc3ZnRGF0YVt2YWx1ZV07XG4gIGNvbnN0IHBhdGggPSBuZXcgUGF0aE5vZGUocGF0aE5hbWUpO1xuICBjb25zdCBzdmdOb2RlID0gbmV3IFN2Z05vZGUoW3BhdGhdLCB7XG4gICAgXCJ3aWR0aFwiOiBtYWtlRW0od2lkdGgpLFxuICAgIFwiaGVpZ2h0XCI6IG1ha2VFbShoZWlnaHQpLFxuICAgIC8vIE92ZXJyaWRlIENTUyBydWxlIGAua2F0ZXggc3ZnIHsgd2lkdGg6IDEwMCUgfWBcbiAgICBcInN0eWxlXCI6IFwid2lkdGg6XCIgKyBtYWtlRW0od2lkdGgpLFxuICAgIFwidmlld0JveFwiOiBcIjAgMCBcIiArIDEwMDAgKiB3aWR0aCArIFwiIFwiICsgMTAwMCAqIGhlaWdodCxcbiAgICBcInByZXNlcnZlQXNwZWN0UmF0aW9cIjogXCJ4TWluWU1pblwiXG4gIH0pO1xuICBjb25zdCBzcGFuID0gbWFrZVN2Z1NwYW4oW1wib3ZlcmxheVwiXSwgW3N2Z05vZGVdLCBvcHRpb25zKTtcbiAgc3Bhbi5oZWlnaHQgPSBoZWlnaHQ7XG4gIHNwYW4uc3R5bGUuaGVpZ2h0ID0gbWFrZUVtKGhlaWdodCk7XG4gIHNwYW4uc3R5bGUud2lkdGggPSBtYWtlRW0od2lkdGgpO1xuICByZXR1cm4gc3Bhbjtcbn07XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGJ1aWxkQ29tbW9uID0gKHtcbiAgZm9udE1hcCxcbiAgbWFrZVN5bWJvbCxcbiAgbWF0aHN5bSxcbiAgbWFrZVNwYW4sXG4gIG1ha2VTdmdTcGFuLFxuICBtYWtlTGluZVNwYW4sXG4gIG1ha2VBbmNob3IsXG4gIG1ha2VGcmFnbWVudCxcbiAgd3JhcEZyYWdtZW50LFxuICBtYWtlVkxpc3QsXG4gIG1ha2VPcmQsXG4gIG1ha2VHbHVlLFxuICBzdGF0aWNTdmcsXG4gIHN2Z0RhdGEsXG4gIHRyeUNvbWJpbmVDaGFyc1xufSk7XG47Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvc3BhY2luZ0RhdGEuanNcbi8qKlxuICogRGVzY3JpYmVzIHNwYWNlcyBiZXR3ZWVuIGRpZmZlcmVudCBjbGFzc2VzIG9mIGF0b21zLlxuICovXG5jb25zdCB0aGluc3BhY2UgPSB7XG4gIG51bWJlcjogMyxcbiAgdW5pdDogXCJtdVwiXG59O1xuY29uc3QgbWVkaXVtc3BhY2UgPSB7XG4gIG51bWJlcjogNCxcbiAgdW5pdDogXCJtdVwiXG59O1xuY29uc3QgdGhpY2tzcGFjZSA9IHtcbiAgbnVtYmVyOiA1LFxuICB1bml0OiBcIm11XCJcbn07IC8vIE1ha2luZyB0aGUgdHlwZSBiZWxvdyBleGFjdCB3aXRoIGFsbCBvcHRpb25hbCBmaWVsZHMgZG9lc24ndCB3b3JrIGR1ZSB0b1xuLy8gLSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svZmxvdy9pc3N1ZXMvNDU4MlxuLy8gLSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svZmxvdy9pc3N1ZXMvNTY4OFxuLy8gSG93ZXZlciwgc2luY2UgKmFsbCogZmllbGRzIGFyZSBvcHRpb25hbCwgJFNoYXBlPD4gd29ya3MgYXMgc3VnZ2VzdGVkIGluIDU2ODhcbi8vIGFib3ZlLlxuXG4vLyBTcGFjaW5nIHJlbGF0aW9uc2hpcHMgZm9yIGRpc3BsYXkgYW5kIHRleHQgc3R5bGVzXG5jb25zdCBzcGFjaW5ncyA9IHtcbiAgbW9yZDoge1xuICAgIG1vcDogdGhpbnNwYWNlLFxuICAgIG1iaW46IG1lZGl1bXNwYWNlLFxuICAgIG1yZWw6IHRoaWNrc3BhY2UsXG4gICAgbWlubmVyOiB0aGluc3BhY2VcbiAgfSxcbiAgbW9wOiB7XG4gICAgbW9yZDogdGhpbnNwYWNlLFxuICAgIG1vcDogdGhpbnNwYWNlLFxuICAgIG1yZWw6IHRoaWNrc3BhY2UsXG4gICAgbWlubmVyOiB0aGluc3BhY2VcbiAgfSxcbiAgbWJpbjoge1xuICAgIG1vcmQ6IG1lZGl1bXNwYWNlLFxuICAgIG1vcDogbWVkaXVtc3BhY2UsXG4gICAgbW9wZW46IG1lZGl1bXNwYWNlLFxuICAgIG1pbm5lcjogbWVkaXVtc3BhY2VcbiAgfSxcbiAgbXJlbDoge1xuICAgIG1vcmQ6IHRoaWNrc3BhY2UsXG4gICAgbW9wOiB0aGlja3NwYWNlLFxuICAgIG1vcGVuOiB0aGlja3NwYWNlLFxuICAgIG1pbm5lcjogdGhpY2tzcGFjZVxuICB9LFxuICBtb3Blbjoge30sXG4gIG1jbG9zZToge1xuICAgIG1vcDogdGhpbnNwYWNlLFxuICAgIG1iaW46IG1lZGl1bXNwYWNlLFxuICAgIG1yZWw6IHRoaWNrc3BhY2UsXG4gICAgbWlubmVyOiB0aGluc3BhY2VcbiAgfSxcbiAgbXB1bmN0OiB7XG4gICAgbW9yZDogdGhpbnNwYWNlLFxuICAgIG1vcDogdGhpbnNwYWNlLFxuICAgIG1yZWw6IHRoaWNrc3BhY2UsXG4gICAgbW9wZW46IHRoaW5zcGFjZSxcbiAgICBtY2xvc2U6IHRoaW5zcGFjZSxcbiAgICBtcHVuY3Q6IHRoaW5zcGFjZSxcbiAgICBtaW5uZXI6IHRoaW5zcGFjZVxuICB9LFxuICBtaW5uZXI6IHtcbiAgICBtb3JkOiB0aGluc3BhY2UsXG4gICAgbW9wOiB0aGluc3BhY2UsXG4gICAgbWJpbjogbWVkaXVtc3BhY2UsXG4gICAgbXJlbDogdGhpY2tzcGFjZSxcbiAgICBtb3BlbjogdGhpbnNwYWNlLFxuICAgIG1wdW5jdDogdGhpbnNwYWNlLFxuICAgIG1pbm5lcjogdGhpbnNwYWNlXG4gIH1cbn07IC8vIFNwYWNpbmcgcmVsYXRpb25zaGlwcyBmb3Igc2NyaXB0IGFuZCBzY3JpcHRzY3JpcHQgc3R5bGVzXG5cbmNvbnN0IHRpZ2h0U3BhY2luZ3MgPSB7XG4gIG1vcmQ6IHtcbiAgICBtb3A6IHRoaW5zcGFjZVxuICB9LFxuICBtb3A6IHtcbiAgICBtb3JkOiB0aGluc3BhY2UsXG4gICAgbW9wOiB0aGluc3BhY2VcbiAgfSxcbiAgbWJpbjoge30sXG4gIG1yZWw6IHt9LFxuICBtb3Blbjoge30sXG4gIG1jbG9zZToge1xuICAgIG1vcDogdGhpbnNwYWNlXG4gIH0sXG4gIG1wdW5jdDoge30sXG4gIG1pbm5lcjoge1xuICAgIG1vcDogdGhpbnNwYWNlXG4gIH1cbn07XG47Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZGVmaW5lRnVuY3Rpb24uanNcbi8qKiBDb250ZXh0IHByb3ZpZGVkIHRvIGZ1bmN0aW9uIGhhbmRsZXJzIGZvciBlcnJvciBtZXNzYWdlcy4gKi9cbi8vIE5vdGU6IHJldmVyc2UgdGhlIG9yZGVyIG9mIHRoZSByZXR1cm4gdHlwZSB1bmlvbiB3aWxsIGNhdXNlIGEgZmxvdyBlcnJvci5cbi8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svZmxvdy9pc3N1ZXMvMzY2My5cbi8vIE1vcmUgZ2VuZXJhbCB2ZXJzaW9uIG9mIGBIdG1sQnVpbGRlcmAgZm9yIG5vZGVzIChlLmcuIFxcc3VtLCBhY2NlbnQgdHlwZXMpXG4vLyB3aG9zZSBwcmVzZW5jZSBpbXBhY3RzIHN1cGVyL3N1YnNjcmlwdGluZy4gSW4gdGhpcyBjYXNlLCBQYXJzZU5vZGU8XCJzdXBzdWJcIj5cbi8vIGRlbGVnYXRlcyBpdHMgSFRNTCBidWlsZGluZyB0byB0aGUgSHRtbEJ1aWxkZXIgY29ycmVzcG9uZGluZyB0byB0aGVzZSBub2Rlcy5cblxuLyoqXG4gKiBGaW5hbCBmdW5jdGlvbiBzcGVjIGZvciB1c2UgYXQgcGFyc2UgdGltZS5cbiAqIFRoaXMgaXMgYWxtb3N0IGlkZW50aWNhbCB0byBgRnVuY3Rpb25Qcm9wU3BlY2AsIGV4Y2VwdCBpdFxuICogMS4gaW5jbHVkZXMgdGhlIGZ1bmN0aW9uIGhhbmRsZXIsIGFuZFxuICogMi4gcmVxdWlyZXMgYWxsIGFyZ3VtZW50cyBleGNlcHQgYXJnVHlwZXMuXG4gKiBJdCBpcyBnZW5lcmF0ZWQgYnkgYGRlZmluZUZ1bmN0aW9uKClgIGJlbG93LlxuICovXG5cbi8qKlxuICogQWxsIHJlZ2lzdGVyZWQgZnVuY3Rpb25zLlxuICogYGZ1bmN0aW9ucy5qc2AganVzdCBleHBvcnRzIHRoaXMgc2FtZSBkaWN0aW9uYXJ5IGFnYWluIGFuZCBtYWtlcyBpdCBwdWJsaWMuXG4gKiBgUGFyc2VyLmpzYCByZXF1aXJlcyB0aGlzIGRpY3Rpb25hcnkuXG4gKi9cbmNvbnN0IF9mdW5jdGlvbnMgPSB7fTtcbi8qKlxuICogQWxsIEhUTUwgYnVpbGRlcnMuIFNob3VsZCBiZSBvbmx5IHVzZWQgaW4gdGhlIGBkZWZpbmUqYCBhbmQgdGhlIGBidWlsZCpNTGBcbiAqIGZ1bmN0aW9ucy5cbiAqL1xuXG5jb25zdCBfaHRtbEdyb3VwQnVpbGRlcnMgPSB7fTtcbi8qKlxuICogQWxsIE1hdGhNTCBidWlsZGVycy4gU2hvdWxkIGJlIG9ubHkgdXNlZCBpbiB0aGUgYGRlZmluZSpgIGFuZCB0aGUgYGJ1aWxkKk1MYFxuICogZnVuY3Rpb25zLlxuICovXG5cbmNvbnN0IF9tYXRobWxHcm91cEJ1aWxkZXJzID0ge307XG5mdW5jdGlvbiBkZWZpbmVGdW5jdGlvbihfcmVmKSB7XG4gIGxldCB7XG4gICAgdHlwZSxcbiAgICBuYW1lcyxcbiAgICBwcm9wcyxcbiAgICBoYW5kbGVyLFxuICAgIGh0bWxCdWlsZGVyLFxuICAgIG1hdGhtbEJ1aWxkZXJcbiAgfSA9IF9yZWY7XG4gIC8vIFNldCBkZWZhdWx0IHZhbHVlcyBvZiBmdW5jdGlvbnNcbiAgY29uc3QgZGF0YSA9IHtcbiAgICB0eXBlLFxuICAgIG51bUFyZ3M6IHByb3BzLm51bUFyZ3MsXG4gICAgYXJnVHlwZXM6IHByb3BzLmFyZ1R5cGVzLFxuICAgIGFsbG93ZWRJbkFyZ3VtZW50OiAhIXByb3BzLmFsbG93ZWRJbkFyZ3VtZW50LFxuICAgIGFsbG93ZWRJblRleHQ6ICEhcHJvcHMuYWxsb3dlZEluVGV4dCxcbiAgICBhbGxvd2VkSW5NYXRoOiBwcm9wcy5hbGxvd2VkSW5NYXRoID09PSB1bmRlZmluZWQgPyB0cnVlIDogcHJvcHMuYWxsb3dlZEluTWF0aCxcbiAgICBudW1PcHRpb25hbEFyZ3M6IHByb3BzLm51bU9wdGlvbmFsQXJncyB8fCAwLFxuICAgIGluZml4OiAhIXByb3BzLmluZml4LFxuICAgIHByaW1pdGl2ZTogISFwcm9wcy5wcmltaXRpdmUsXG4gICAgaGFuZGxlcjogaGFuZGxlclxuICB9O1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbmFtZXMubGVuZ3RoOyArK2kpIHtcbiAgICBfZnVuY3Rpb25zW25hbWVzW2ldXSA9IGRhdGE7XG4gIH1cblxuICBpZiAodHlwZSkge1xuICAgIGlmIChodG1sQnVpbGRlcikge1xuICAgICAgX2h0bWxHcm91cEJ1aWxkZXJzW3R5cGVdID0gaHRtbEJ1aWxkZXI7XG4gICAgfVxuXG4gICAgaWYgKG1hdGhtbEJ1aWxkZXIpIHtcbiAgICAgIF9tYXRobWxHcm91cEJ1aWxkZXJzW3R5cGVdID0gbWF0aG1sQnVpbGRlcjtcbiAgICB9XG4gIH1cbn1cbi8qKlxuICogVXNlIHRoaXMgdG8gcmVnaXN0ZXIgb25seSB0aGUgSFRNTCBhbmQgTWF0aE1MIGJ1aWxkZXJzIGZvciBhIGZ1bmN0aW9uIChlLmcuXG4gKiBpZiB0aGUgZnVuY3Rpb24ncyBQYXJzZU5vZGUgaXMgZ2VuZXJhdGVkIGluIFBhcnNlci5qcyByYXRoZXIgdGhhbiB2aWEgYVxuICogc3RhbmQtYWxvbmUgaGFuZGxlciBwcm92aWRlZCB0byBgZGVmaW5lRnVuY3Rpb25gKS5cbiAqL1xuXG5mdW5jdGlvbiBkZWZpbmVGdW5jdGlvbkJ1aWxkZXJzKF9yZWYyKSB7XG4gIGxldCB7XG4gICAgdHlwZSxcbiAgICBodG1sQnVpbGRlcixcbiAgICBtYXRobWxCdWlsZGVyXG4gIH0gPSBfcmVmMjtcbiAgZGVmaW5lRnVuY3Rpb24oe1xuICAgIHR5cGUsXG4gICAgbmFtZXM6IFtdLFxuICAgIHByb3BzOiB7XG4gICAgICBudW1BcmdzOiAwXG4gICAgfSxcblxuICAgIGhhbmRsZXIoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Nob3VsZCBuZXZlciBiZSBjYWxsZWQuJyk7XG4gICAgfSxcblxuICAgIGh0bWxCdWlsZGVyLFxuICAgIG1hdGhtbEJ1aWxkZXJcbiAgfSk7XG59XG5jb25zdCBub3JtYWxpemVBcmd1bWVudCA9IGZ1bmN0aW9uIChhcmcpIHtcbiAgcmV0dXJuIGFyZy50eXBlID09PSBcIm9yZGdyb3VwXCIgJiYgYXJnLmJvZHkubGVuZ3RoID09PSAxID8gYXJnLmJvZHlbMF0gOiBhcmc7XG59OyAvLyBTaW5jZSB0aGUgY29ycmVzcG9uZGluZyBidWlsZEhUTUwvYnVpbGRNYXRoTUwgZnVuY3Rpb24gZXhwZWN0cyBhXG4vLyBsaXN0IG9mIGVsZW1lbnRzLCB3ZSBub3JtYWxpemUgZm9yIGRpZmZlcmVudCBraW5kcyBvZiBhcmd1bWVudHNcblxuY29uc3Qgb3JkYXJndW1lbnQgPSBmdW5jdGlvbiAoYXJnKSB7XG4gIHJldHVybiBhcmcudHlwZSA9PT0gXCJvcmRncm91cFwiID8gYXJnLmJvZHkgOiBbYXJnXTtcbn07XG47Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvYnVpbGRIVE1MLmpzXG4vKipcbiAqIFRoaXMgZmlsZSBkb2VzIHRoZSBtYWluIHdvcmsgb2YgYnVpbGRpbmcgYSBkb21UcmVlIHN0cnVjdHVyZSBmcm9tIGEgcGFyc2VcbiAqIHRyZWUuIFRoZSBlbnRyeSBwb2ludCBpcyB0aGUgYGJ1aWxkSFRNTGAgZnVuY3Rpb24sIHdoaWNoIHRha2VzIGEgcGFyc2UgdHJlZS5cbiAqIFRoZW4sIHRoZSBidWlsZEV4cHJlc3Npb24sIGJ1aWxkR3JvdXAsIGFuZCB2YXJpb3VzIGdyb3VwQnVpbGRlcnMgZnVuY3Rpb25zXG4gKiBhcmUgY2FsbGVkLCB0byBwcm9kdWNlIGEgZmluYWwgSFRNTCB0cmVlLlxuICovXG5cblxuXG5cblxuXG5cblxuXG5jb25zdCBidWlsZEhUTUxfbWFrZVNwYW4gPSBidWlsZENvbW1vbi5tYWtlU3BhbjsgLy8gQmluYXJ5IGF0b21zIChmaXJzdCBjbGFzcyBgbWJpbmApIGNoYW5nZSBpbnRvIG9yZGluYXJ5IGF0b21zIChgbW9yZGApXG4vLyBkZXBlbmRpbmcgb24gdGhlaXIgc3Vycm91bmRpbmdzLiBTZWUgVGVYYm9vayBwZy4gNDQyLTQ0NiwgUnVsZXMgNSBhbmQgNixcbi8vIGFuZCB0aGUgdGV4dCBiZWZvcmUgUnVsZSAxOS5cblxuY29uc3QgYmluTGVmdENhbmNlbGxlciA9IFtcImxlZnRtb3N0XCIsIFwibWJpblwiLCBcIm1vcGVuXCIsIFwibXJlbFwiLCBcIm1vcFwiLCBcIm1wdW5jdFwiXTtcbmNvbnN0IGJpblJpZ2h0Q2FuY2VsbGVyID0gW1wicmlnaHRtb3N0XCIsIFwibXJlbFwiLCBcIm1jbG9zZVwiLCBcIm1wdW5jdFwiXTtcbmNvbnN0IHN0eWxlTWFwID0ge1xuICBcImRpc3BsYXlcIjogc3JjX1N0eWxlLkRJU1BMQVksXG4gIFwidGV4dFwiOiBzcmNfU3R5bGUuVEVYVCxcbiAgXCJzY3JpcHRcIjogc3JjX1N0eWxlLlNDUklQVCxcbiAgXCJzY3JpcHRzY3JpcHRcIjogc3JjX1N0eWxlLlNDUklQVFNDUklQVFxufTtcbmNvbnN0IERvbUVudW0gPSB7XG4gIG1vcmQ6IFwibW9yZFwiLFxuICBtb3A6IFwibW9wXCIsXG4gIG1iaW46IFwibWJpblwiLFxuICBtcmVsOiBcIm1yZWxcIixcbiAgbW9wZW46IFwibW9wZW5cIixcbiAgbWNsb3NlOiBcIm1jbG9zZVwiLFxuICBtcHVuY3Q6IFwibXB1bmN0XCIsXG4gIG1pbm5lcjogXCJtaW5uZXJcIlxufTtcblxuLyoqXG4gKiBUYWtlIGEgbGlzdCBvZiBub2RlcywgYnVpbGQgdGhlbSBpbiBvcmRlciwgYW5kIHJldHVybiBhIGxpc3Qgb2YgdGhlIGJ1aWx0XG4gKiBub2Rlcy4gZG9jdW1lbnRGcmFnbWVudHMgYXJlIGZsYXR0ZW5lZCBpbnRvIHRoZWlyIGNvbnRlbnRzLCBzbyB0aGVcbiAqIHJldHVybmVkIGxpc3QgY29udGFpbnMgbm8gZnJhZ21lbnRzLiBgaXNSZWFsR3JvdXBgIGlzIHRydWUgaWYgYGV4cHJlc3Npb25gXG4gKiBpcyBhIHJlYWwgZ3JvdXAgKG5vIGF0b21zIHdpbGwgYmUgYWRkZWQgb24gZWl0aGVyIHNpZGUpLCBhcyBvcHBvc2VkIHRvXG4gKiBhIHBhcnRpYWwgZ3JvdXAgKGUuZy4gb25lIGNyZWF0ZWQgYnkgXFxjb2xvcikuIGBzdXJyb3VuZGluZ2AgaXMgYW4gYXJyYXlcbiAqIGNvbnNpc3RpbmcgdHlwZSBvZiBub2RlcyB0aGF0IHdpbGwgYmUgYWRkZWQgdG8gdGhlIGxlZnQgYW5kIHJpZ2h0LlxuICovXG5jb25zdCBidWlsZEV4cHJlc3Npb24gPSBmdW5jdGlvbiAoZXhwcmVzc2lvbiwgb3B0aW9ucywgaXNSZWFsR3JvdXAsIHN1cnJvdW5kaW5nKSB7XG4gIGlmIChzdXJyb3VuZGluZyA9PT0gdm9pZCAwKSB7XG4gICAgc3Vycm91bmRpbmcgPSBbbnVsbCwgbnVsbF07XG4gIH1cblxuICAvLyBQYXJzZSBleHByZXNzaW9ucyBpbnRvIGBncm91cHNgLlxuICBjb25zdCBncm91cHMgPSBbXTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGV4cHJlc3Npb24ubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBvdXRwdXQgPSBidWlsZEdyb3VwKGV4cHJlc3Npb25baV0sIG9wdGlvbnMpO1xuXG4gICAgaWYgKG91dHB1dCBpbnN0YW5jZW9mIERvY3VtZW50RnJhZ21lbnQpIHtcbiAgICAgIGNvbnN0IGNoaWxkcmVuID0gb3V0cHV0LmNoaWxkcmVuO1xuICAgICAgZ3JvdXBzLnB1c2goLi4uY2hpbGRyZW4pO1xuICAgIH0gZWxzZSB7XG4gICAgICBncm91cHMucHVzaChvdXRwdXQpO1xuICAgIH1cbiAgfSAvLyBDb21iaW5lIGNvbnNlY3V0aXZlIGRvbVRyZWUuc3ltYm9sTm9kZXMgaW50byBhIHNpbmdsZSBzeW1ib2xOb2RlLlxuXG5cbiAgYnVpbGRDb21tb24udHJ5Q29tYmluZUNoYXJzKGdyb3Vwcyk7IC8vIElmIGBleHByZXNzaW9uYCBpcyBhIHBhcnRpYWwgZ3JvdXAsIGxldCB0aGUgcGFyZW50IGhhbmRsZSBzcGFjaW5nc1xuICAvLyB0byBhdm9pZCBwcm9jZXNzaW5nIGdyb3VwcyBtdWx0aXBsZSB0aW1lcy5cblxuICBpZiAoIWlzUmVhbEdyb3VwKSB7XG4gICAgcmV0dXJuIGdyb3VwcztcbiAgfVxuXG4gIGxldCBnbHVlT3B0aW9ucyA9IG9wdGlvbnM7XG5cbiAgaWYgKGV4cHJlc3Npb24ubGVuZ3RoID09PSAxKSB7XG4gICAgY29uc3Qgbm9kZSA9IGV4cHJlc3Npb25bMF07XG5cbiAgICBpZiAobm9kZS50eXBlID09PSBcInNpemluZ1wiKSB7XG4gICAgICBnbHVlT3B0aW9ucyA9IG9wdGlvbnMuaGF2aW5nU2l6ZShub2RlLnNpemUpO1xuICAgIH0gZWxzZSBpZiAobm9kZS50eXBlID09PSBcInN0eWxpbmdcIikge1xuICAgICAgZ2x1ZU9wdGlvbnMgPSBvcHRpb25zLmhhdmluZ1N0eWxlKHN0eWxlTWFwW25vZGUuc3R5bGVdKTtcbiAgICB9XG4gIH0gLy8gRHVtbXkgc3BhbnMgZm9yIGRldGVybWluaW5nIHNwYWNpbmdzIGJldHdlZW4gc3Vycm91bmRpbmcgYXRvbXMuXG4gIC8vIElmIGBleHByZXNzaW9uYCBoYXMgbm8gYXRvbXMgb24gdGhlIGxlZnQgb3IgcmlnaHQsIGNsYXNzIFwibGVmdG1vc3RcIlxuICAvLyBvciBcInJpZ2h0bW9zdFwiLCByZXNwZWN0aXZlbHksIGlzIHVzZWQgdG8gaW5kaWNhdGUgaXQuXG5cblxuICBjb25zdCBkdW1teVByZXYgPSBidWlsZEhUTUxfbWFrZVNwYW4oW3N1cnJvdW5kaW5nWzBdIHx8IFwibGVmdG1vc3RcIl0sIFtdLCBvcHRpb25zKTtcbiAgY29uc3QgZHVtbXlOZXh0ID0gYnVpbGRIVE1MX21ha2VTcGFuKFtzdXJyb3VuZGluZ1sxXSB8fCBcInJpZ2h0bW9zdFwiXSwgW10sIG9wdGlvbnMpOyAvLyBUT0RPOiBUaGVzZSBjb2RlIGFzc3VtZXMgdGhhdCBhIG5vZGUncyBtYXRoIGNsYXNzIGlzIHRoZSBmaXJzdCBlbGVtZW50XG4gIC8vIG9mIGl0cyBgY2xhc3Nlc2AgYXJyYXkuIEEgbGF0ZXIgY2xlYW51cCBzaG91bGQgZW5zdXJlIHRoaXMsIGZvclxuICAvLyBpbnN0YW5jZSBieSBjaGFuZ2luZyB0aGUgc2lnbmF0dXJlIG9mIGBtYWtlU3BhbmAuXG4gIC8vIEJlZm9yZSBkZXRlcm1pbmluZyB3aGF0IHNwYWNlcyB0byBpbnNlcnQsIHBlcmZvcm0gYmluIGNhbmNlbGxhdGlvbi5cbiAgLy8gQmluYXJ5IG9wZXJhdG9ycyBjaGFuZ2UgdG8gb3JkaW5hcnkgc3ltYm9scyBpbiBzb21lIGNvbnRleHRzLlxuXG4gIGNvbnN0IGlzUm9vdCA9IGlzUmVhbEdyb3VwID09PSBcInJvb3RcIjtcbiAgdHJhdmVyc2VOb25TcGFjZU5vZGVzKGdyb3VwcywgKG5vZGUsIHByZXYpID0+IHtcbiAgICBjb25zdCBwcmV2VHlwZSA9IHByZXYuY2xhc3Nlc1swXTtcbiAgICBjb25zdCB0eXBlID0gbm9kZS5jbGFzc2VzWzBdO1xuXG4gICAgaWYgKHByZXZUeXBlID09PSBcIm1iaW5cIiAmJiB1dGlscy5jb250YWlucyhiaW5SaWdodENhbmNlbGxlciwgdHlwZSkpIHtcbiAgICAgIHByZXYuY2xhc3Nlc1swXSA9IFwibW9yZFwiO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gXCJtYmluXCIgJiYgdXRpbHMuY29udGFpbnMoYmluTGVmdENhbmNlbGxlciwgcHJldlR5cGUpKSB7XG4gICAgICBub2RlLmNsYXNzZXNbMF0gPSBcIm1vcmRcIjtcbiAgICB9XG4gIH0sIHtcbiAgICBub2RlOiBkdW1teVByZXZcbiAgfSwgZHVtbXlOZXh0LCBpc1Jvb3QpO1xuICB0cmF2ZXJzZU5vblNwYWNlTm9kZXMoZ3JvdXBzLCAobm9kZSwgcHJldikgPT4ge1xuICAgIGNvbnN0IHByZXZUeXBlID0gZ2V0VHlwZU9mRG9tVHJlZShwcmV2KTtcbiAgICBjb25zdCB0eXBlID0gZ2V0VHlwZU9mRG9tVHJlZShub2RlKTsgLy8gJ210aWdodCcgaW5kaWNhdGVzIHRoYXQgdGhlIG5vZGUgaXMgc2NyaXB0IG9yIHNjcmlwdHNjcmlwdCBzdHlsZS5cblxuICAgIGNvbnN0IHNwYWNlID0gcHJldlR5cGUgJiYgdHlwZSA/IG5vZGUuaGFzQ2xhc3MoXCJtdGlnaHRcIikgPyB0aWdodFNwYWNpbmdzW3ByZXZUeXBlXVt0eXBlXSA6IHNwYWNpbmdzW3ByZXZUeXBlXVt0eXBlXSA6IG51bGw7XG5cbiAgICBpZiAoc3BhY2UpIHtcbiAgICAgIC8vIEluc2VydCBnbHVlIChzcGFjaW5nKSBhZnRlciB0aGUgYHByZXZgLlxuICAgICAgcmV0dXJuIGJ1aWxkQ29tbW9uLm1ha2VHbHVlKHNwYWNlLCBnbHVlT3B0aW9ucyk7XG4gICAgfVxuICB9LCB7XG4gICAgbm9kZTogZHVtbXlQcmV2XG4gIH0sIGR1bW15TmV4dCwgaXNSb290KTtcbiAgcmV0dXJuIGdyb3Vwcztcbn07IC8vIERlcHRoLWZpcnN0IHRyYXZlcnNlIG5vbi1zcGFjZSBgbm9kZXNgLCBjYWxsaW5nIGBjYWxsYmFja2Agd2l0aCB0aGUgY3VycmVudCBhbmRcbi8vIHByZXZpb3VzIG5vZGUgYXMgYXJndW1lbnRzLCBvcHRpb25hbGx5IHJldHVybmluZyBhIG5vZGUgdG8gaW5zZXJ0IGFmdGVyIHRoZVxuLy8gcHJldmlvdXMgbm9kZS4gYHByZXZgIGlzIGFuIG9iamVjdCB3aXRoIHRoZSBwcmV2aW91cyBub2RlIGFuZCBgaW5zZXJ0QWZ0ZXJgXG4vLyBmdW5jdGlvbiB0byBpbnNlcnQgYWZ0ZXIgaXQuIGBuZXh0YCBpcyBhIG5vZGUgdGhhdCB3aWxsIGJlIGFkZGVkIHRvIHRoZSByaWdodC5cbi8vIFVzZWQgZm9yIGJpbiBjYW5jZWxsYXRpb24gYW5kIGluc2VydGluZyBzcGFjaW5ncy5cblxuY29uc3QgdHJhdmVyc2VOb25TcGFjZU5vZGVzID0gZnVuY3Rpb24gKG5vZGVzLCBjYWxsYmFjaywgcHJldiwgbmV4dCwgaXNSb290KSB7XG4gIGlmIChuZXh0KSB7XG4gICAgLy8gdGVtcG9yYXJpbHkgYXBwZW5kIHRoZSByaWdodCBub2RlLCBpZiBleGlzdHNcbiAgICBub2Rlcy5wdXNoKG5leHQpO1xuICB9XG5cbiAgbGV0IGkgPSAwO1xuXG4gIGZvciAoOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBub2RlID0gbm9kZXNbaV07XG4gICAgY29uc3QgcGFydGlhbEdyb3VwID0gY2hlY2tQYXJ0aWFsR3JvdXAobm9kZSk7XG5cbiAgICBpZiAocGFydGlhbEdyb3VwKSB7XG4gICAgICAvLyBSZWN1cnNpdmUgREZTXG4gICAgICAvLyAkRmxvd0ZpeE1lOiBtYWtlIG5vZGVzIGEgJFJlYWRPbmx5QXJyYXkgYnkgcmV0dXJuaW5nIGEgbmV3IGFycmF5XG4gICAgICB0cmF2ZXJzZU5vblNwYWNlTm9kZXMocGFydGlhbEdyb3VwLmNoaWxkcmVuLCBjYWxsYmFjaywgcHJldiwgbnVsbCwgaXNSb290KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH0gLy8gSWdub3JlIGV4cGxpY2l0IHNwYWNlcyAoZS5nLiwgXFw7LCBcXCwpIHdoZW4gZGV0ZXJtaW5pbmcgd2hhdCBpbXBsaWNpdFxuICAgIC8vIHNwYWNpbmcgc2hvdWxkIGdvIGJldHdlZW4gYXRvbXMgb2YgZGlmZmVyZW50IGNsYXNzZXNcblxuXG4gICAgY29uc3Qgbm9uc3BhY2UgPSAhbm9kZS5oYXNDbGFzcyhcIm1zcGFjZVwiKTtcblxuICAgIGlmIChub25zcGFjZSkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gY2FsbGJhY2sobm9kZSwgcHJldi5ub2RlKTtcblxuICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICBpZiAocHJldi5pbnNlcnRBZnRlcikge1xuICAgICAgICAgIHByZXYuaW5zZXJ0QWZ0ZXIocmVzdWx0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBpbnNlcnQgYXQgZnJvbnRcbiAgICAgICAgICBub2Rlcy51bnNoaWZ0KHJlc3VsdCk7XG4gICAgICAgICAgaSsrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG5vbnNwYWNlKSB7XG4gICAgICBwcmV2Lm5vZGUgPSBub2RlO1xuICAgIH0gZWxzZSBpZiAoaXNSb290ICYmIG5vZGUuaGFzQ2xhc3MoXCJuZXdsaW5lXCIpKSB7XG4gICAgICBwcmV2Lm5vZGUgPSBidWlsZEhUTUxfbWFrZVNwYW4oW1wibGVmdG1vc3RcIl0pOyAvLyB0cmVhdCBsaWtlIGJlZ2lubmluZyBvZiBsaW5lXG4gICAgfVxuXG4gICAgcHJldi5pbnNlcnRBZnRlciA9IChpbmRleCA9PiBuID0+IHtcbiAgICAgIG5vZGVzLnNwbGljZShpbmRleCArIDEsIDAsIG4pO1xuICAgICAgaSsrO1xuICAgIH0pKGkpO1xuICB9XG5cbiAgaWYgKG5leHQpIHtcbiAgICBub2Rlcy5wb3AoKTtcbiAgfVxufTsgLy8gQ2hlY2sgaWYgZ2l2ZW4gbm9kZSBpcyBhIHBhcnRpYWwgZ3JvdXAsIGkuZS4sIGRvZXMgbm90IGFmZmVjdCBzcGFjaW5nIGFyb3VuZC5cblxuXG5jb25zdCBjaGVja1BhcnRpYWxHcm91cCA9IGZ1bmN0aW9uIChub2RlKSB7XG4gIGlmIChub2RlIGluc3RhbmNlb2YgRG9jdW1lbnRGcmFnbWVudCB8fCBub2RlIGluc3RhbmNlb2YgQW5jaG9yIHx8IG5vZGUgaW5zdGFuY2VvZiBTcGFuICYmIG5vZGUuaGFzQ2xhc3MoXCJlbmNsb3NpbmdcIikpIHtcbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufTsgLy8gUmV0dXJuIHRoZSBvdXRlcm1vc3Qgbm9kZSBvZiBhIGRvbVRyZWUuXG5cblxuY29uc3QgZ2V0T3V0ZXJtb3N0Tm9kZSA9IGZ1bmN0aW9uIChub2RlLCBzaWRlKSB7XG4gIGNvbnN0IHBhcnRpYWxHcm91cCA9IGNoZWNrUGFydGlhbEdyb3VwKG5vZGUpO1xuXG4gIGlmIChwYXJ0aWFsR3JvdXApIHtcbiAgICBjb25zdCBjaGlsZHJlbiA9IHBhcnRpYWxHcm91cC5jaGlsZHJlbjtcblxuICAgIGlmIChjaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgIGlmIChzaWRlID09PSBcInJpZ2h0XCIpIHtcbiAgICAgICAgcmV0dXJuIGdldE91dGVybW9zdE5vZGUoY2hpbGRyZW5bY2hpbGRyZW4ubGVuZ3RoIC0gMV0sIFwicmlnaHRcIik7XG4gICAgICB9IGVsc2UgaWYgKHNpZGUgPT09IFwibGVmdFwiKSB7XG4gICAgICAgIHJldHVybiBnZXRPdXRlcm1vc3ROb2RlKGNoaWxkcmVuWzBdLCBcImxlZnRcIik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5vZGU7XG59OyAvLyBSZXR1cm4gbWF0aCBhdG9tIGNsYXNzIChtY2xhc3MpIG9mIGEgZG9tVHJlZS5cbi8vIElmIGBzaWRlYCBpcyBnaXZlbiwgaXQgd2lsbCBnZXQgdGhlIHR5cGUgb2YgdGhlIG91dGVybW9zdCBub2RlIGF0IGdpdmVuIHNpZGUuXG5cblxuY29uc3QgZ2V0VHlwZU9mRG9tVHJlZSA9IGZ1bmN0aW9uIChub2RlLCBzaWRlKSB7XG4gIGlmICghbm9kZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKHNpZGUpIHtcbiAgICBub2RlID0gZ2V0T3V0ZXJtb3N0Tm9kZShub2RlLCBzaWRlKTtcbiAgfSAvLyBUaGlzIG1ha2VzIGEgbG90IG9mIGFzc3VtcHRpb25zIGFzIHRvIHdoZXJlIHRoZSB0eXBlIG9mIGF0b21cbiAgLy8gYXBwZWFycy4gIFdlIHNob3VsZCBkbyBhIGJldHRlciBqb2Igb2YgZW5mb3JjaW5nIHRoaXMuXG5cblxuICByZXR1cm4gRG9tRW51bVtub2RlLmNsYXNzZXNbMF1dIHx8IG51bGw7XG59O1xuY29uc3QgbWFrZU51bGxEZWxpbWl0ZXIgPSBmdW5jdGlvbiAob3B0aW9ucywgY2xhc3Nlcykge1xuICBjb25zdCBtb3JlQ2xhc3NlcyA9IFtcIm51bGxkZWxpbWl0ZXJcIl0uY29uY2F0KG9wdGlvbnMuYmFzZVNpemluZ0NsYXNzZXMoKSk7XG4gIHJldHVybiBidWlsZEhUTUxfbWFrZVNwYW4oY2xhc3Nlcy5jb25jYXQobW9yZUNsYXNzZXMpKTtcbn07XG4vKipcbiAqIGJ1aWxkR3JvdXAgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgdGFrZXMgYSBncm91cCBhbmQgY2FsbHMgdGhlIGNvcnJlY3QgZ3JvdXBUeXBlXG4gKiBmdW5jdGlvbiBmb3IgaXQuIEl0IGFsc28gaGFuZGxlcyB0aGUgaW50ZXJhY3Rpb24gb2Ygc2l6ZSBhbmQgc3R5bGUgY2hhbmdlc1xuICogYmV0d2VlbiBwYXJlbnRzIGFuZCBjaGlsZHJlbi5cbiAqL1xuXG5jb25zdCBidWlsZEdyb3VwID0gZnVuY3Rpb24gKGdyb3VwLCBvcHRpb25zLCBiYXNlT3B0aW9ucykge1xuICBpZiAoIWdyb3VwKSB7XG4gICAgcmV0dXJuIGJ1aWxkSFRNTF9tYWtlU3BhbigpO1xuICB9XG5cbiAgaWYgKF9odG1sR3JvdXBCdWlsZGVyc1tncm91cC50eXBlXSkge1xuICAgIC8vIENhbGwgdGhlIGdyb3VwQnVpbGRlcnMgZnVuY3Rpb25cbiAgICAvLyAkRmxvd0ZpeE1lXG4gICAgbGV0IGdyb3VwTm9kZSA9IF9odG1sR3JvdXBCdWlsZGVyc1tncm91cC50eXBlXShncm91cCwgb3B0aW9ucyk7IC8vIElmIHRoZSBzaXplIGNoYW5nZWQgYmV0d2VlbiB0aGUgcGFyZW50IGFuZCB0aGUgY3VycmVudCBncm91cCwgYWNjb3VudFxuICAgIC8vIGZvciB0aGF0IHNpemUgZGlmZmVyZW5jZS5cblxuICAgIGlmIChiYXNlT3B0aW9ucyAmJiBvcHRpb25zLnNpemUgIT09IGJhc2VPcHRpb25zLnNpemUpIHtcbiAgICAgIGdyb3VwTm9kZSA9IGJ1aWxkSFRNTF9tYWtlU3BhbihvcHRpb25zLnNpemluZ0NsYXNzZXMoYmFzZU9wdGlvbnMpLCBbZ3JvdXBOb2RlXSwgb3B0aW9ucyk7XG4gICAgICBjb25zdCBtdWx0aXBsaWVyID0gb3B0aW9ucy5zaXplTXVsdGlwbGllciAvIGJhc2VPcHRpb25zLnNpemVNdWx0aXBsaWVyO1xuICAgICAgZ3JvdXBOb2RlLmhlaWdodCAqPSBtdWx0aXBsaWVyO1xuICAgICAgZ3JvdXBOb2RlLmRlcHRoICo9IG11bHRpcGxpZXI7XG4gICAgfVxuXG4gICAgcmV0dXJuIGdyb3VwTm9kZTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJHb3QgZ3JvdXAgb2YgdW5rbm93biB0eXBlOiAnXCIgKyBncm91cC50eXBlICsgXCInXCIpO1xuICB9XG59O1xuLyoqXG4gKiBDb21iaW5lIGFuIGFycmF5IG9mIEhUTUwgRE9NIG5vZGVzIChlLmcuLCB0aGUgb3V0cHV0IG9mIGBidWlsZEV4cHJlc3Npb25gKVxuICogaW50byBhbiB1bmJyZWFrYWJsZSBIVE1MIG5vZGUgb2YgY2xhc3MgLmJhc2UsIHdpdGggcHJvcGVyIHN0cnV0cyB0b1xuICogZ3VhcmFudGVlIGNvcnJlY3QgdmVydGljYWwgZXh0ZW50LiAgYGJ1aWxkSFRNTGAgY2FsbHMgdGhpcyByZXBlYXRlZGx5IHRvXG4gKiBtYWtlIHVwIHRoZSBlbnRpcmUgZXhwcmVzc2lvbiBhcyBhIHNlcXVlbmNlIG9mIHVuYnJlYWthYmxlIHVuaXRzLlxuICovXG5cbmZ1bmN0aW9uIGJ1aWxkSFRNTFVuYnJlYWthYmxlKGNoaWxkcmVuLCBvcHRpb25zKSB7XG4gIC8vIENvbXB1dGUgaGVpZ2h0IGFuZCBkZXB0aCBvZiB0aGlzIGNodW5rLlxuICBjb25zdCBib2R5ID0gYnVpbGRIVE1MX21ha2VTcGFuKFtcImJhc2VcIl0sIGNoaWxkcmVuLCBvcHRpb25zKTsgLy8gQWRkIHN0cnV0LCB3aGljaCBlbnN1cmVzIHRoYXQgdGhlIHRvcCBvZiB0aGUgSFRNTCBlbGVtZW50IGZhbGxzIGF0XG4gIC8vIHRoZSBoZWlnaHQgb2YgdGhlIGV4cHJlc3Npb24sIGFuZCB0aGUgYm90dG9tIG9mIHRoZSBIVE1MIGVsZW1lbnRcbiAgLy8gZmFsbHMgYXQgdGhlIGRlcHRoIG9mIHRoZSBleHByZXNzaW9uLlxuXG4gIGNvbnN0IHN0cnV0ID0gYnVpbGRIVE1MX21ha2VTcGFuKFtcInN0cnV0XCJdKTtcbiAgc3RydXQuc3R5bGUuaGVpZ2h0ID0gbWFrZUVtKGJvZHkuaGVpZ2h0ICsgYm9keS5kZXB0aCk7XG5cbiAgaWYgKGJvZHkuZGVwdGgpIHtcbiAgICBzdHJ1dC5zdHlsZS52ZXJ0aWNhbEFsaWduID0gbWFrZUVtKC1ib2R5LmRlcHRoKTtcbiAgfVxuXG4gIGJvZHkuY2hpbGRyZW4udW5zaGlmdChzdHJ1dCk7XG4gIHJldHVybiBib2R5O1xufVxuLyoqXG4gKiBUYWtlIGFuIGVudGlyZSBwYXJzZSB0cmVlLCBhbmQgYnVpbGQgaXQgaW50byBhbiBhcHByb3ByaWF0ZSBzZXQgb2YgSFRNTFxuICogbm9kZXMuXG4gKi9cblxuXG5mdW5jdGlvbiBidWlsZEhUTUwodHJlZSwgb3B0aW9ucykge1xuICAvLyBTdHJpcCBvZmYgb3V0ZXIgdGFnIHdyYXBwZXIgZm9yIHByb2Nlc3NpbmcgYmVsb3cuXG4gIGxldCB0YWcgPSBudWxsO1xuXG4gIGlmICh0cmVlLmxlbmd0aCA9PT0gMSAmJiB0cmVlWzBdLnR5cGUgPT09IFwidGFnXCIpIHtcbiAgICB0YWcgPSB0cmVlWzBdLnRhZztcbiAgICB0cmVlID0gdHJlZVswXS5ib2R5O1xuICB9IC8vIEJ1aWxkIHRoZSBleHByZXNzaW9uIGNvbnRhaW5lZCBpbiB0aGUgdHJlZVxuXG5cbiAgY29uc3QgZXhwcmVzc2lvbiA9IGJ1aWxkRXhwcmVzc2lvbih0cmVlLCBvcHRpb25zLCBcInJvb3RcIik7XG4gIGxldCBlcW5OdW07XG5cbiAgaWYgKGV4cHJlc3Npb24ubGVuZ3RoID09PSAyICYmIGV4cHJlc3Npb25bMV0uaGFzQ2xhc3MoXCJ0YWdcIikpIHtcbiAgICAvLyBBbiBlbnZpcm9ubWVudCB3aXRoIGF1dG9tYXRpYyBlcXVhdGlvbiBudW1iZXJzLCBlLmcuIHtnYXRoZXJ9LlxuICAgIGVxbk51bSA9IGV4cHJlc3Npb24ucG9wKCk7XG4gIH1cblxuICBjb25zdCBjaGlsZHJlbiA9IFtdOyAvLyBDcmVhdGUgb25lIGJhc2Ugbm9kZSBmb3IgZWFjaCBjaHVuayBiZXR3ZWVuIHBvdGVudGlhbCBsaW5lIGJyZWFrcy5cbiAgLy8gVGhlIFRlWEJvb2sgW3AuMTczXSBzYXlzIFwiQSBmb3JtdWxhIHdpbGwgYmUgYnJva2VuIG9ubHkgYWZ0ZXIgYVxuICAvLyByZWxhdGlvbiBzeW1ib2wgbGlrZSAkPSQgb3IgJDwkIG9yICRcXHJpZ2h0YXJyb3ckLCBvciBhZnRlciBhIGJpbmFyeVxuICAvLyBvcGVyYXRpb24gc3ltYm9sIGxpa2UgJCskIG9yICQtJCBvciAkXFx0aW1lcyQsIHdoZXJlIHRoZSByZWxhdGlvbiBvclxuICAvLyBiaW5hcnkgb3BlcmF0aW9uIGlzIG9uIHRoZSBgYG91dGVyIGxldmVsJycgb2YgdGhlIGZvcm11bGEgKGkuZS4sIG5vdFxuICAvLyBlbmNsb3NlZCBpbiB7Li4ufSBhbmQgbm90IHBhcnQgb2YgYW4gXFxvdmVyIGNvbnN0cnVjdGlvbikuXCJcblxuICBsZXQgcGFydHMgPSBbXTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGV4cHJlc3Npb24ubGVuZ3RoOyBpKyspIHtcbiAgICBwYXJ0cy5wdXNoKGV4cHJlc3Npb25baV0pO1xuXG4gICAgaWYgKGV4cHJlc3Npb25baV0uaGFzQ2xhc3MoXCJtYmluXCIpIHx8IGV4cHJlc3Npb25baV0uaGFzQ2xhc3MoXCJtcmVsXCIpIHx8IGV4cHJlc3Npb25baV0uaGFzQ2xhc3MoXCJhbGxvd2JyZWFrXCIpKSB7XG4gICAgICAvLyBQdXQgYW55IHBvc3Qtb3BlcmF0b3IgZ2x1ZSBvbiBzYW1lIGxpbmUgYXMgb3BlcmF0b3IuXG4gICAgICAvLyBXYXRjaCBmb3IgXFxub2JyZWFrIGFsb25nIHRoZSB3YXksIGFuZCBzdG9wIGF0IFxcbmV3bGluZS5cbiAgICAgIGxldCBub2JyZWFrID0gZmFsc2U7XG5cbiAgICAgIHdoaWxlIChpIDwgZXhwcmVzc2lvbi5sZW5ndGggLSAxICYmIGV4cHJlc3Npb25baSArIDFdLmhhc0NsYXNzKFwibXNwYWNlXCIpICYmICFleHByZXNzaW9uW2kgKyAxXS5oYXNDbGFzcyhcIm5ld2xpbmVcIikpIHtcbiAgICAgICAgaSsrO1xuICAgICAgICBwYXJ0cy5wdXNoKGV4cHJlc3Npb25baV0pO1xuXG4gICAgICAgIGlmIChleHByZXNzaW9uW2ldLmhhc0NsYXNzKFwibm9icmVha1wiKSkge1xuICAgICAgICAgIG5vYnJlYWsgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9IC8vIERvbid0IGFsbG93IGJyZWFrIGlmIFxcbm9icmVhayBhbW9uZyB0aGUgcG9zdC1vcGVyYXRvciBnbHVlLlxuXG5cbiAgICAgIGlmICghbm9icmVhaykge1xuICAgICAgICBjaGlsZHJlbi5wdXNoKGJ1aWxkSFRNTFVuYnJlYWthYmxlKHBhcnRzLCBvcHRpb25zKSk7XG4gICAgICAgIHBhcnRzID0gW107XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChleHByZXNzaW9uW2ldLmhhc0NsYXNzKFwibmV3bGluZVwiKSkge1xuICAgICAgLy8gV3JpdGUgdGhlIGxpbmUgZXhjZXB0IHRoZSBuZXdsaW5lXG4gICAgICBwYXJ0cy5wb3AoKTtcblxuICAgICAgaWYgKHBhcnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY2hpbGRyZW4ucHVzaChidWlsZEhUTUxVbmJyZWFrYWJsZShwYXJ0cywgb3B0aW9ucykpO1xuICAgICAgICBwYXJ0cyA9IFtdO1xuICAgICAgfSAvLyBQdXQgdGhlIG5ld2xpbmUgYXQgdGhlIHRvcCBsZXZlbFxuXG5cbiAgICAgIGNoaWxkcmVuLnB1c2goZXhwcmVzc2lvbltpXSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHBhcnRzLmxlbmd0aCA+IDApIHtcbiAgICBjaGlsZHJlbi5wdXNoKGJ1aWxkSFRNTFVuYnJlYWthYmxlKHBhcnRzLCBvcHRpb25zKSk7XG4gIH0gLy8gTm93LCBpZiB0aGVyZSB3YXMgYSB0YWcsIGJ1aWxkIGl0IHRvbyBhbmQgYXBwZW5kIGl0IGFzIGEgZmluYWwgY2hpbGQuXG5cblxuICBsZXQgdGFnQ2hpbGQ7XG5cbiAgaWYgKHRhZykge1xuICAgIHRhZ0NoaWxkID0gYnVpbGRIVE1MVW5icmVha2FibGUoYnVpbGRFeHByZXNzaW9uKHRhZywgb3B0aW9ucywgdHJ1ZSkpO1xuICAgIHRhZ0NoaWxkLmNsYXNzZXMgPSBbXCJ0YWdcIl07XG4gICAgY2hpbGRyZW4ucHVzaCh0YWdDaGlsZCk7XG4gIH0gZWxzZSBpZiAoZXFuTnVtKSB7XG4gICAgY2hpbGRyZW4ucHVzaChlcW5OdW0pO1xuICB9XG5cbiAgY29uc3QgaHRtbE5vZGUgPSBidWlsZEhUTUxfbWFrZVNwYW4oW1wia2F0ZXgtaHRtbFwiXSwgY2hpbGRyZW4pO1xuICBodG1sTm9kZS5zZXRBdHRyaWJ1dGUoXCJhcmlhLWhpZGRlblwiLCBcInRydWVcIik7IC8vIEFkanVzdCB0aGUgc3RydXQgb2YgdGhlIHRhZyB0byBiZSB0aGUgbWF4aW11bSBoZWlnaHQgb2YgYWxsIGNoaWxkcmVuXG4gIC8vICh0aGUgaGVpZ2h0IG9mIHRoZSBlbmNsb3NpbmcgaHRtbE5vZGUpIGZvciBwcm9wZXIgdmVydGljYWwgYWxpZ25tZW50LlxuXG4gIGlmICh0YWdDaGlsZCkge1xuICAgIGNvbnN0IHN0cnV0ID0gdGFnQ2hpbGQuY2hpbGRyZW5bMF07XG4gICAgc3RydXQuc3R5bGUuaGVpZ2h0ID0gbWFrZUVtKGh0bWxOb2RlLmhlaWdodCArIGh0bWxOb2RlLmRlcHRoKTtcblxuICAgIGlmIChodG1sTm9kZS5kZXB0aCkge1xuICAgICAgc3RydXQuc3R5bGUudmVydGljYWxBbGlnbiA9IG1ha2VFbSgtaHRtbE5vZGUuZGVwdGgpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBodG1sTm9kZTtcbn1cbjsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9tYXRoTUxUcmVlLmpzXG4vKipcbiAqIFRoZXNlIG9iamVjdHMgc3RvcmUgZGF0YSBhYm91dCBNYXRoTUwgbm9kZXMuIFRoaXMgaXMgdGhlIE1hdGhNTCBlcXVpdmFsZW50XG4gKiBvZiB0aGUgdHlwZXMgaW4gZG9tVHJlZS5qcy4gU2luY2UgTWF0aE1MIGhhbmRsZXMgaXRzIG93biByZW5kZXJpbmcsIGFuZFxuICogc2luY2Ugd2UncmUgbWFpbmx5IHVzaW5nIE1hdGhNTCB0byBpbXByb3ZlIGFjY2Vzc2liaWxpdHksIHdlIGRvbid0IG1hbmFnZVxuICogYW55IG9mIHRoZSBzdHlsaW5nIHN0YXRlIHRoYXQgdGhlIHBsYWluIERPTSBub2RlcyBkby5cbiAqXG4gKiBUaGUgYHRvTm9kZWAgYW5kIGB0b01hcmt1cGAgZnVuY3Rpb25zIHdvcmsgc2ltaWxhcmx5IHRvIGhvdyB0aGV5IGRvIGluXG4gKiBkb21UcmVlLmpzLCBjcmVhdGluZyBuYW1lc3BhY2VkIERPTSBub2RlcyBhbmQgSFRNTCB0ZXh0IG1hcmt1cCByZXNwZWN0aXZlbHkuXG4gKi9cblxuXG5cblxuZnVuY3Rpb24gbmV3RG9jdW1lbnRGcmFnbWVudChjaGlsZHJlbikge1xuICByZXR1cm4gbmV3IERvY3VtZW50RnJhZ21lbnQoY2hpbGRyZW4pO1xufVxuLyoqXG4gKiBUaGlzIG5vZGUgcmVwcmVzZW50cyBhIGdlbmVyYWwgcHVycG9zZSBNYXRoTUwgbm9kZSBvZiBhbnkgdHlwZS4gVGhlXG4gKiBjb25zdHJ1Y3RvciByZXF1aXJlcyB0aGUgdHlwZSBvZiBub2RlIHRvIGNyZWF0ZSAoZm9yIGV4YW1wbGUsIGBcIm1vXCJgIG9yXG4gKiBgXCJtc3BhY2VcImAsIGNvcnJlc3BvbmRpbmcgdG8gYDxtbz5gIGFuZCBgPG1zcGFjZT5gIHRhZ3MpLlxuICovXG5cbmNsYXNzIE1hdGhOb2RlIHtcbiAgY29uc3RydWN0b3IodHlwZSwgY2hpbGRyZW4sIGNsYXNzZXMpIHtcbiAgICB0aGlzLnR5cGUgPSB2b2lkIDA7XG4gICAgdGhpcy5hdHRyaWJ1dGVzID0gdm9pZCAwO1xuICAgIHRoaXMuY2hpbGRyZW4gPSB2b2lkIDA7XG4gICAgdGhpcy5jbGFzc2VzID0gdm9pZCAwO1xuICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgdGhpcy5hdHRyaWJ1dGVzID0ge307XG4gICAgdGhpcy5jaGlsZHJlbiA9IGNoaWxkcmVuIHx8IFtdO1xuICAgIHRoaXMuY2xhc3NlcyA9IGNsYXNzZXMgfHwgW107XG4gIH1cbiAgLyoqXG4gICAqIFNldHMgYW4gYXR0cmlidXRlIG9uIGEgTWF0aE1MIG5vZGUuIE1hdGhNTCBkZXBlbmRzIG9uIGF0dHJpYnV0ZXMgdG8gY29udmV5IGFcbiAgICogc2VtYW50aWMgY29udGVudCwgc28gdGhpcyBpcyB1c2VkIGhlYXZpbHkuXG4gICAqL1xuXG5cbiAgc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlKSB7XG4gICAgdGhpcy5hdHRyaWJ1dGVzW25hbWVdID0gdmFsdWU7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgYW4gYXR0cmlidXRlIG9uIGEgTWF0aE1MIG5vZGUuXG4gICAqL1xuXG5cbiAgZ2V0QXR0cmlidXRlKG5hbWUpIHtcbiAgICByZXR1cm4gdGhpcy5hdHRyaWJ1dGVzW25hbWVdO1xuICB9XG4gIC8qKlxuICAgKiBDb252ZXJ0cyB0aGUgbWF0aCBub2RlIGludG8gYSBNYXRoTUwtbmFtZXNwYWNlZCBET00gZWxlbWVudC5cbiAgICovXG5cblxuICB0b05vZGUoKSB7XG4gICAgY29uc3Qgbm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhcImh0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUxcIiwgdGhpcy50eXBlKTtcblxuICAgIGZvciAoY29uc3QgYXR0ciBpbiB0aGlzLmF0dHJpYnV0ZXMpIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5hdHRyaWJ1dGVzLCBhdHRyKSkge1xuICAgICAgICBub2RlLnNldEF0dHJpYnV0ZShhdHRyLCB0aGlzLmF0dHJpYnV0ZXNbYXR0cl0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmNsYXNzZXMubGVuZ3RoID4gMCkge1xuICAgICAgbm9kZS5jbGFzc05hbWUgPSBjcmVhdGVDbGFzcyh0aGlzLmNsYXNzZXMpO1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgLy8gQ29tYmluZSBtdWx0aXBsZSBUZXh0Tm9kZXMgaW50byBvbmUgVGV4dE5vZGUsIHRvIHByZXZlbnRcbiAgICAgIC8vIHNjcmVlbiByZWFkZXJzIGZyb20gcmVhZGluZyBlYWNoIGFzIGEgc2VwYXJhdGUgd29yZCBbIzM5OTVdXG4gICAgICBpZiAodGhpcy5jaGlsZHJlbltpXSBpbnN0YW5jZW9mIFRleHROb2RlICYmIHRoaXMuY2hpbGRyZW5baSArIDFdIGluc3RhbmNlb2YgVGV4dE5vZGUpIHtcbiAgICAgICAgbGV0IHRleHQgPSB0aGlzLmNoaWxkcmVuW2ldLnRvVGV4dCgpICsgdGhpcy5jaGlsZHJlblsrK2ldLnRvVGV4dCgpO1xuXG4gICAgICAgIHdoaWxlICh0aGlzLmNoaWxkcmVuW2kgKyAxXSBpbnN0YW5jZW9mIFRleHROb2RlKSB7XG4gICAgICAgICAgdGV4dCArPSB0aGlzLmNoaWxkcmVuWysraV0udG9UZXh0KCk7XG4gICAgICAgIH1cblxuICAgICAgICBub2RlLmFwcGVuZENoaWxkKG5ldyBUZXh0Tm9kZSh0ZXh0KS50b05vZGUoKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBub2RlLmFwcGVuZENoaWxkKHRoaXMuY2hpbGRyZW5baV0udG9Ob2RlKCkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBub2RlO1xuICB9XG4gIC8qKlxuICAgKiBDb252ZXJ0cyB0aGUgbWF0aCBub2RlIGludG8gYW4gSFRNTCBtYXJrdXAgc3RyaW5nLlxuICAgKi9cblxuXG4gIHRvTWFya3VwKCkge1xuICAgIGxldCBtYXJrdXAgPSBcIjxcIiArIHRoaXMudHlwZTsgLy8gQWRkIHRoZSBhdHRyaWJ1dGVzXG5cbiAgICBmb3IgKGNvbnN0IGF0dHIgaW4gdGhpcy5hdHRyaWJ1dGVzKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuYXR0cmlidXRlcywgYXR0cikpIHtcbiAgICAgICAgbWFya3VwICs9IFwiIFwiICsgYXR0ciArIFwiPVxcXCJcIjtcbiAgICAgICAgbWFya3VwICs9IHV0aWxzLmVzY2FwZSh0aGlzLmF0dHJpYnV0ZXNbYXR0cl0pO1xuICAgICAgICBtYXJrdXAgKz0gXCJcXFwiXCI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY2xhc3Nlcy5sZW5ndGggPiAwKSB7XG4gICAgICBtYXJrdXAgKz0gXCIgY2xhc3MgPVxcXCJcIiArIHV0aWxzLmVzY2FwZShjcmVhdGVDbGFzcyh0aGlzLmNsYXNzZXMpKSArIFwiXFxcIlwiO1xuICAgIH1cblxuICAgIG1hcmt1cCArPSBcIj5cIjtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgbWFya3VwICs9IHRoaXMuY2hpbGRyZW5baV0udG9NYXJrdXAoKTtcbiAgICB9XG5cbiAgICBtYXJrdXAgKz0gXCI8L1wiICsgdGhpcy50eXBlICsgXCI+XCI7XG4gICAgcmV0dXJuIG1hcmt1cDtcbiAgfVxuICAvKipcbiAgICogQ29udmVydHMgdGhlIG1hdGggbm9kZSBpbnRvIGEgc3RyaW5nLCBzaW1pbGFyIHRvIGlubmVyVGV4dCwgYnV0IGVzY2FwZWQuXG4gICAqL1xuXG5cbiAgdG9UZXh0KCkge1xuICAgIHJldHVybiB0aGlzLmNoaWxkcmVuLm1hcChjaGlsZCA9PiBjaGlsZC50b1RleHQoKSkuam9pbihcIlwiKTtcbiAgfVxuXG59XG4vKipcbiAqIFRoaXMgbm9kZSByZXByZXNlbnRzIGEgcGllY2Ugb2YgdGV4dC5cbiAqL1xuXG5jbGFzcyBUZXh0Tm9kZSB7XG4gIGNvbnN0cnVjdG9yKHRleHQpIHtcbiAgICB0aGlzLnRleHQgPSB2b2lkIDA7XG4gICAgdGhpcy50ZXh0ID0gdGV4dDtcbiAgfVxuICAvKipcbiAgICogQ29udmVydHMgdGhlIHRleHQgbm9kZSBpbnRvIGEgRE9NIHRleHQgbm9kZS5cbiAgICovXG5cblxuICB0b05vZGUoKSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRoaXMudGV4dCk7XG4gIH1cbiAgLyoqXG4gICAqIENvbnZlcnRzIHRoZSB0ZXh0IG5vZGUgaW50byBlc2NhcGVkIEhUTUwgbWFya3VwXG4gICAqIChyZXByZXNlbnRpbmcgdGhlIHRleHQgaXRzZWxmKS5cbiAgICovXG5cblxuICB0b01hcmt1cCgpIHtcbiAgICByZXR1cm4gdXRpbHMuZXNjYXBlKHRoaXMudG9UZXh0KCkpO1xuICB9XG4gIC8qKlxuICAgKiBDb252ZXJ0cyB0aGUgdGV4dCBub2RlIGludG8gYSBzdHJpbmdcbiAgICogKHJlcHJlc2VudGluZyB0aGUgdGV4dCBpdHNlbGYpLlxuICAgKi9cblxuXG4gIHRvVGV4dCgpIHtcbiAgICByZXR1cm4gdGhpcy50ZXh0O1xuICB9XG5cbn1cbi8qKlxuICogVGhpcyBub2RlIHJlcHJlc2VudHMgYSBzcGFjZSwgYnV0IG1heSByZW5kZXIgYXMgPG1zcGFjZS4uLi8+IG9yIGFzIHRleHQsXG4gKiBkZXBlbmRpbmcgb24gdGhlIHdpZHRoLlxuICovXG5cbmNsYXNzIFNwYWNlTm9kZSB7XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBTcGFjZSBub2RlIHdpdGggd2lkdGggZ2l2ZW4gaW4gQ1NTIGVtcy5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHdpZHRoKSB7XG4gICAgdGhpcy53aWR0aCA9IHZvaWQgMDtcbiAgICB0aGlzLmNoYXJhY3RlciA9IHZvaWQgMDtcbiAgICB0aGlzLndpZHRoID0gd2lkdGg7IC8vIFNlZSBodHRwczovL3d3dy53My5vcmcvVFIvMjAwMC9XRC1NYXRoTUwyLTIwMDAwMzI4L2NoYXB0ZXI2Lmh0bWxcbiAgICAvLyBmb3IgYSB0YWJsZSBvZiBzcGFjZS1saWtlIGNoYXJhY3RlcnMuICBXZSB1c2UgVW5pY29kZVxuICAgIC8vIHJlcHJlc2VudGF0aW9ucyBpbnN0ZWFkIG9mICZMb25nTmFtZXM7IGFzIGl0J3Mgbm90IGNsZWFyIGhvdyB0b1xuICAgIC8vIG1ha2UgdGhlIGxhdHRlciB2aWEgZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUuXG5cbiAgICBpZiAod2lkdGggPj0gMC4wNTU1NSAmJiB3aWR0aCA8PSAwLjA1NTU2KSB7XG4gICAgICB0aGlzLmNoYXJhY3RlciA9IFwiXFx1MjAwYVwiOyAvLyAmVmVyeVRoaW5TcGFjZTtcbiAgICB9IGVsc2UgaWYgKHdpZHRoID49IDAuMTY2NiAmJiB3aWR0aCA8PSAwLjE2NjcpIHtcbiAgICAgIHRoaXMuY2hhcmFjdGVyID0gXCJcXHUyMDA5XCI7IC8vICZUaGluU3BhY2U7XG4gICAgfSBlbHNlIGlmICh3aWR0aCA+PSAwLjIyMjIgJiYgd2lkdGggPD0gMC4yMjIzKSB7XG4gICAgICB0aGlzLmNoYXJhY3RlciA9IFwiXFx1MjAwNVwiOyAvLyAmTWVkaXVtU3BhY2U7XG4gICAgfSBlbHNlIGlmICh3aWR0aCA+PSAwLjI3NzcgJiYgd2lkdGggPD0gMC4yNzc4KSB7XG4gICAgICB0aGlzLmNoYXJhY3RlciA9IFwiXFx1MjAwNVxcdTIwMGFcIjsgLy8gJlRoaWNrU3BhY2U7XG4gICAgfSBlbHNlIGlmICh3aWR0aCA+PSAtMC4wNTU1NiAmJiB3aWR0aCA8PSAtMC4wNTU1NSkge1xuICAgICAgdGhpcy5jaGFyYWN0ZXIgPSBcIlxcdTIwMGFcXHUyMDYzXCI7IC8vICZOZWdhdGl2ZVZlcnlUaGluU3BhY2U7XG4gICAgfSBlbHNlIGlmICh3aWR0aCA+PSAtMC4xNjY3ICYmIHdpZHRoIDw9IC0wLjE2NjYpIHtcbiAgICAgIHRoaXMuY2hhcmFjdGVyID0gXCJcXHUyMDA5XFx1MjA2M1wiOyAvLyAmTmVnYXRpdmVUaGluU3BhY2U7XG4gICAgfSBlbHNlIGlmICh3aWR0aCA+PSAtMC4yMjIzICYmIHdpZHRoIDw9IC0wLjIyMjIpIHtcbiAgICAgIHRoaXMuY2hhcmFjdGVyID0gXCJcXHUyMDVmXFx1MjA2M1wiOyAvLyAmTmVnYXRpdmVNZWRpdW1TcGFjZTtcbiAgICB9IGVsc2UgaWYgKHdpZHRoID49IC0wLjI3NzggJiYgd2lkdGggPD0gLTAuMjc3Nykge1xuICAgICAgdGhpcy5jaGFyYWN0ZXIgPSBcIlxcdTIwMDVcXHUyMDYzXCI7IC8vICZOZWdhdGl2ZVRoaWNrU3BhY2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2hhcmFjdGVyID0gbnVsbDtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIENvbnZlcnRzIHRoZSBtYXRoIG5vZGUgaW50byBhIE1hdGhNTC1uYW1lc3BhY2VkIERPTSBlbGVtZW50LlxuICAgKi9cblxuXG4gIHRvTm9kZSgpIHtcbiAgICBpZiAodGhpcy5jaGFyYWN0ZXIpIHtcbiAgICAgIHJldHVybiBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0aGlzLmNoYXJhY3Rlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IG5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXCJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MXCIsIFwibXNwYWNlXCIpO1xuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJ3aWR0aFwiLCBtYWtlRW0odGhpcy53aWR0aCkpO1xuICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBDb252ZXJ0cyB0aGUgbWF0aCBub2RlIGludG8gYW4gSFRNTCBtYXJrdXAgc3RyaW5nLlxuICAgKi9cblxuXG4gIHRvTWFya3VwKCkge1xuICAgIGlmICh0aGlzLmNoYXJhY3Rlcikge1xuICAgICAgcmV0dXJuIFwiPG10ZXh0PlwiICsgdGhpcy5jaGFyYWN0ZXIgKyBcIjwvbXRleHQ+XCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBcIjxtc3BhY2Ugd2lkdGg9XFxcIlwiICsgbWFrZUVtKHRoaXMud2lkdGgpICsgXCJcXFwiLz5cIjtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIENvbnZlcnRzIHRoZSBtYXRoIG5vZGUgaW50byBhIHN0cmluZywgc2ltaWxhciB0byBpbm5lclRleHQuXG4gICAqL1xuXG5cbiAgdG9UZXh0KCkge1xuICAgIGlmICh0aGlzLmNoYXJhY3Rlcikge1xuICAgICAgcmV0dXJuIHRoaXMuY2hhcmFjdGVyO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gXCIgXCI7XG4gICAgfVxuICB9XG5cbn1cblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgbWF0aE1MVHJlZSA9ICh7XG4gIE1hdGhOb2RlLFxuICBUZXh0Tm9kZSxcbiAgU3BhY2VOb2RlLFxuICBuZXdEb2N1bWVudEZyYWdtZW50XG59KTtcbjsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9idWlsZE1hdGhNTC5qc1xuLyoqXG4gKiBUaGlzIGZpbGUgY29udmVydHMgYSBwYXJzZSB0cmVlIGludG8gYSBjb3JyZXNwb25kaW5nIE1hdGhNTCB0cmVlLiBUaGUgbWFpblxuICogZW50cnkgcG9pbnQgaXMgdGhlIGBidWlsZE1hdGhNTGAgZnVuY3Rpb24sIHdoaWNoIHRha2VzIGEgcGFyc2UgdHJlZSBmcm9tIHRoZVxuICogcGFyc2VyLlxuICovXG5cblxuXG5cblxuXG5cblxuXG4vKipcbiAqIFRha2VzIGEgc3ltYm9sIGFuZCBjb252ZXJ0cyBpdCBpbnRvIGEgTWF0aE1MIHRleHQgbm9kZSBhZnRlciBwZXJmb3JtaW5nXG4gKiBvcHRpb25hbCByZXBsYWNlbWVudCBmcm9tIHN5bWJvbHMuanMuXG4gKi9cbmNvbnN0IG1ha2VUZXh0ID0gZnVuY3Rpb24gKHRleHQsIG1vZGUsIG9wdGlvbnMpIHtcbiAgaWYgKHNyY19zeW1ib2xzW21vZGVdW3RleHRdICYmIHNyY19zeW1ib2xzW21vZGVdW3RleHRdLnJlcGxhY2UgJiYgdGV4dC5jaGFyQ29kZUF0KDApICE9PSAweEQ4MzUgJiYgIShsaWdhdHVyZXMuaGFzT3duUHJvcGVydHkodGV4dCkgJiYgb3B0aW9ucyAmJiAob3B0aW9ucy5mb250RmFtaWx5ICYmIG9wdGlvbnMuZm9udEZhbWlseS5zbGljZSg0LCA2KSA9PT0gXCJ0dFwiIHx8IG9wdGlvbnMuZm9udCAmJiBvcHRpb25zLmZvbnQuc2xpY2UoNCwgNikgPT09IFwidHRcIikpKSB7XG4gICAgdGV4dCA9IHNyY19zeW1ib2xzW21vZGVdW3RleHRdLnJlcGxhY2U7XG4gIH1cblxuICByZXR1cm4gbmV3IG1hdGhNTFRyZWUuVGV4dE5vZGUodGV4dCk7XG59O1xuLyoqXG4gKiBXcmFwIHRoZSBnaXZlbiBhcnJheSBvZiBub2RlcyBpbiBhbiA8bXJvdz4gbm9kZSBpZiBuZWVkZWQsIGkuZS4sXG4gKiB1bmxlc3MgdGhlIGFycmF5IGhhcyBsZW5ndGggMS4gIEFsd2F5cyByZXR1cm5zIGEgc2luZ2xlIG5vZGUuXG4gKi9cblxuY29uc3QgbWFrZVJvdyA9IGZ1bmN0aW9uIChib2R5KSB7XG4gIGlmIChib2R5Lmxlbmd0aCA9PT0gMSkge1xuICAgIHJldHVybiBib2R5WzBdO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1yb3dcIiwgYm9keSk7XG4gIH1cbn07XG4vKipcbiAqIFJldHVybnMgdGhlIG1hdGggdmFyaWFudCBhcyBhIHN0cmluZyBvciBudWxsIGlmIG5vbmUgaXMgcmVxdWlyZWQuXG4gKi9cblxuY29uc3QgZ2V0VmFyaWFudCA9IGZ1bmN0aW9uIChncm91cCwgb3B0aW9ucykge1xuICAvLyBIYW5kbGUgXFx0ZXh0Li4uIGZvbnQgc3BlY2lmaWVycyBhcyBiZXN0IHdlIGNhbi5cbiAgLy8gTWF0aE1MIGhhcyBhIGxpbWl0ZWQgbGlzdCBvZiBhbGxvd2FibGUgbWF0aHZhcmlhbnQgc3BlY2lmaWVyczsgc2VlXG4gIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9NYXRoTUwzL2NoYXB0ZXIzLmh0bWwjcHJlc20uY29tbWF0dFxuICBpZiAob3B0aW9ucy5mb250RmFtaWx5ID09PSBcInRleHR0dFwiKSB7XG4gICAgcmV0dXJuIFwibW9ub3NwYWNlXCI7XG4gIH0gZWxzZSBpZiAob3B0aW9ucy5mb250RmFtaWx5ID09PSBcInRleHRzZlwiKSB7XG4gICAgaWYgKG9wdGlvbnMuZm9udFNoYXBlID09PSBcInRleHRpdFwiICYmIG9wdGlvbnMuZm9udFdlaWdodCA9PT0gXCJ0ZXh0YmZcIikge1xuICAgICAgcmV0dXJuIFwic2Fucy1zZXJpZi1ib2xkLWl0YWxpY1wiO1xuICAgIH0gZWxzZSBpZiAob3B0aW9ucy5mb250U2hhcGUgPT09IFwidGV4dGl0XCIpIHtcbiAgICAgIHJldHVybiBcInNhbnMtc2VyaWYtaXRhbGljXCI7XG4gICAgfSBlbHNlIGlmIChvcHRpb25zLmZvbnRXZWlnaHQgPT09IFwidGV4dGJmXCIpIHtcbiAgICAgIHJldHVybiBcImJvbGQtc2Fucy1zZXJpZlwiO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gXCJzYW5zLXNlcmlmXCI7XG4gICAgfVxuICB9IGVsc2UgaWYgKG9wdGlvbnMuZm9udFNoYXBlID09PSBcInRleHRpdFwiICYmIG9wdGlvbnMuZm9udFdlaWdodCA9PT0gXCJ0ZXh0YmZcIikge1xuICAgIHJldHVybiBcImJvbGQtaXRhbGljXCI7XG4gIH0gZWxzZSBpZiAob3B0aW9ucy5mb250U2hhcGUgPT09IFwidGV4dGl0XCIpIHtcbiAgICByZXR1cm4gXCJpdGFsaWNcIjtcbiAgfSBlbHNlIGlmIChvcHRpb25zLmZvbnRXZWlnaHQgPT09IFwidGV4dGJmXCIpIHtcbiAgICByZXR1cm4gXCJib2xkXCI7XG4gIH1cblxuICBjb25zdCBmb250ID0gb3B0aW9ucy5mb250O1xuXG4gIGlmICghZm9udCB8fCBmb250ID09PSBcIm1hdGhub3JtYWxcIikge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgbW9kZSA9IGdyb3VwLm1vZGU7XG5cbiAgaWYgKGZvbnQgPT09IFwibWF0aGl0XCIpIHtcbiAgICByZXR1cm4gXCJpdGFsaWNcIjtcbiAgfSBlbHNlIGlmIChmb250ID09PSBcImJvbGRzeW1ib2xcIikge1xuICAgIHJldHVybiBncm91cC50eXBlID09PSBcInRleHRvcmRcIiA/IFwiYm9sZFwiIDogXCJib2xkLWl0YWxpY1wiO1xuICB9IGVsc2UgaWYgKGZvbnQgPT09IFwibWF0aGJmXCIpIHtcbiAgICByZXR1cm4gXCJib2xkXCI7XG4gIH0gZWxzZSBpZiAoZm9udCA9PT0gXCJtYXRoYmJcIikge1xuICAgIHJldHVybiBcImRvdWJsZS1zdHJ1Y2tcIjtcbiAgfSBlbHNlIGlmIChmb250ID09PSBcIm1hdGhzZml0XCIpIHtcbiAgICByZXR1cm4gXCJzYW5zLXNlcmlmLWl0YWxpY1wiO1xuICB9IGVsc2UgaWYgKGZvbnQgPT09IFwibWF0aGZyYWtcIikge1xuICAgIHJldHVybiBcImZyYWt0dXJcIjtcbiAgfSBlbHNlIGlmIChmb250ID09PSBcIm1hdGhzY3JcIiB8fCBmb250ID09PSBcIm1hdGhjYWxcIikge1xuICAgIC8vIE1hdGhNTCBtYWtlcyBubyBkaXN0aW5jdGlvbiBiZXR3ZWVuIHNjcmlwdCBhbmQgY2FsbGlncmFwaGljXG4gICAgcmV0dXJuIFwic2NyaXB0XCI7XG4gIH0gZWxzZSBpZiAoZm9udCA9PT0gXCJtYXRoc2ZcIikge1xuICAgIHJldHVybiBcInNhbnMtc2VyaWZcIjtcbiAgfSBlbHNlIGlmIChmb250ID09PSBcIm1hdGh0dFwiKSB7XG4gICAgcmV0dXJuIFwibW9ub3NwYWNlXCI7XG4gIH1cblxuICBsZXQgdGV4dCA9IGdyb3VwLnRleHQ7XG5cbiAgaWYgKHV0aWxzLmNvbnRhaW5zKFtcIlxcXFxpbWF0aFwiLCBcIlxcXFxqbWF0aFwiXSwgdGV4dCkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmIChzcmNfc3ltYm9sc1ttb2RlXVt0ZXh0XSAmJiBzcmNfc3ltYm9sc1ttb2RlXVt0ZXh0XS5yZXBsYWNlKSB7XG4gICAgdGV4dCA9IHNyY19zeW1ib2xzW21vZGVdW3RleHRdLnJlcGxhY2U7XG4gIH1cblxuICBjb25zdCBmb250TmFtZSA9IGJ1aWxkQ29tbW9uLmZvbnRNYXBbZm9udF0uZm9udE5hbWU7XG5cbiAgaWYgKGdldENoYXJhY3Rlck1ldHJpY3ModGV4dCwgZm9udE5hbWUsIG1vZGUpKSB7XG4gICAgcmV0dXJuIGJ1aWxkQ29tbW9uLmZvbnRNYXBbZm9udF0udmFyaWFudDtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufTtcbi8qKlxuICogQ2hlY2sgZm9yIDxtaT4uPC9taT4gd2hpY2ggaXMgaG93IGEgZG90IHJlbmRlcnMgaW4gTWF0aE1MLFxuICogb3IgPG1vIHNlcGFyYXRvcj1cInRydWVcIiBsc3BhY2U9XCIwZW1cIiByc3BhY2U9XCIwZW1cIj4sPC9tbz5cbiAqIHdoaWNoIGlzIGhvdyBhIGJyYWNlZCBjb21tYSB7LH0gcmVuZGVycyBpbiBNYXRoTUxcbiAqL1xuXG5mdW5jdGlvbiBpc051bWJlclB1bmN0dWF0aW9uKGdyb3VwKSB7XG4gIGlmICghZ3JvdXApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoZ3JvdXAudHlwZSA9PT0gJ21pJyAmJiBncm91cC5jaGlsZHJlbi5sZW5ndGggPT09IDEpIHtcbiAgICBjb25zdCBjaGlsZCA9IGdyb3VwLmNoaWxkcmVuWzBdO1xuICAgIHJldHVybiBjaGlsZCBpbnN0YW5jZW9mIFRleHROb2RlICYmIGNoaWxkLnRleHQgPT09ICcuJztcbiAgfSBlbHNlIGlmIChncm91cC50eXBlID09PSAnbW8nICYmIGdyb3VwLmNoaWxkcmVuLmxlbmd0aCA9PT0gMSAmJiBncm91cC5nZXRBdHRyaWJ1dGUoJ3NlcGFyYXRvcicpID09PSAndHJ1ZScgJiYgZ3JvdXAuZ2V0QXR0cmlidXRlKCdsc3BhY2UnKSA9PT0gJzBlbScgJiYgZ3JvdXAuZ2V0QXR0cmlidXRlKCdyc3BhY2UnKSA9PT0gJzBlbScpIHtcbiAgICBjb25zdCBjaGlsZCA9IGdyb3VwLmNoaWxkcmVuWzBdO1xuICAgIHJldHVybiBjaGlsZCBpbnN0YW5jZW9mIFRleHROb2RlICYmIGNoaWxkLnRleHQgPT09ICcsJztcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbi8qKlxuICogVGFrZXMgYSBsaXN0IG9mIG5vZGVzLCBidWlsZHMgdGhlbSwgYW5kIHJldHVybnMgYSBsaXN0IG9mIHRoZSBnZW5lcmF0ZWRcbiAqIE1hdGhNTCBub2Rlcy4gIEFsc28gY29tYmluZSBjb25zZWN1dGl2ZSA8bXRleHQ+IG91dHB1dHMgaW50byBhIHNpbmdsZVxuICogPG10ZXh0PiB0YWcuXG4gKi9cblxuXG5jb25zdCBidWlsZE1hdGhNTF9idWlsZEV4cHJlc3Npb24gPSBmdW5jdGlvbiAoZXhwcmVzc2lvbiwgb3B0aW9ucywgaXNPcmRncm91cCkge1xuICBpZiAoZXhwcmVzc2lvbi5sZW5ndGggPT09IDEpIHtcbiAgICBjb25zdCBncm91cCA9IGJ1aWxkTWF0aE1MX2J1aWxkR3JvdXAoZXhwcmVzc2lvblswXSwgb3B0aW9ucyk7XG5cbiAgICBpZiAoaXNPcmRncm91cCAmJiBncm91cCBpbnN0YW5jZW9mIE1hdGhOb2RlICYmIGdyb3VwLnR5cGUgPT09IFwibW9cIikge1xuICAgICAgLy8gV2hlbiBUZVggd3JpdGVycyB3YW50IHRvIHN1cHByZXNzIHNwYWNpbmcgb24gYW4gb3BlcmF0b3IsXG4gICAgICAvLyB0aGV5IG9mdGVuIHB1dCB0aGUgb3BlcmF0b3IgYnkgaXRzZWxmIGluc2lkZSBicmFjZXMuXG4gICAgICBncm91cC5zZXRBdHRyaWJ1dGUoXCJsc3BhY2VcIiwgXCIwZW1cIik7XG4gICAgICBncm91cC5zZXRBdHRyaWJ1dGUoXCJyc3BhY2VcIiwgXCIwZW1cIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIFtncm91cF07XG4gIH1cblxuICBjb25zdCBncm91cHMgPSBbXTtcbiAgbGV0IGxhc3RHcm91cDtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGV4cHJlc3Npb24ubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBncm91cCA9IGJ1aWxkTWF0aE1MX2J1aWxkR3JvdXAoZXhwcmVzc2lvbltpXSwgb3B0aW9ucyk7XG5cbiAgICBpZiAoZ3JvdXAgaW5zdGFuY2VvZiBNYXRoTm9kZSAmJiBsYXN0R3JvdXAgaW5zdGFuY2VvZiBNYXRoTm9kZSkge1xuICAgICAgLy8gQ29uY2F0ZW5hdGUgYWRqYWNlbnQgPG10ZXh0PnNcbiAgICAgIGlmIChncm91cC50eXBlID09PSAnbXRleHQnICYmIGxhc3RHcm91cC50eXBlID09PSAnbXRleHQnICYmIGdyb3VwLmdldEF0dHJpYnV0ZSgnbWF0aHZhcmlhbnQnKSA9PT0gbGFzdEdyb3VwLmdldEF0dHJpYnV0ZSgnbWF0aHZhcmlhbnQnKSkge1xuICAgICAgICBsYXN0R3JvdXAuY2hpbGRyZW4ucHVzaCguLi5ncm91cC5jaGlsZHJlbik7XG4gICAgICAgIGNvbnRpbnVlOyAvLyBDb25jYXRlbmF0ZSBhZGphY2VudCA8bW4+c1xuICAgICAgfSBlbHNlIGlmIChncm91cC50eXBlID09PSAnbW4nICYmIGxhc3RHcm91cC50eXBlID09PSAnbW4nKSB7XG4gICAgICAgIGxhc3RHcm91cC5jaGlsZHJlbi5wdXNoKC4uLmdyb3VwLmNoaWxkcmVuKTtcbiAgICAgICAgY29udGludWU7IC8vIENvbmNhdGVuYXRlIDxtbj4uLi48L21uPiBmb2xsb3dlZCBieSA8bWk+LjwvbWk+XG4gICAgICB9IGVsc2UgaWYgKGlzTnVtYmVyUHVuY3R1YXRpb24oZ3JvdXApICYmIGxhc3RHcm91cC50eXBlID09PSAnbW4nKSB7XG4gICAgICAgIGxhc3RHcm91cC5jaGlsZHJlbi5wdXNoKC4uLmdyb3VwLmNoaWxkcmVuKTtcbiAgICAgICAgY29udGludWU7IC8vIENvbmNhdGVuYXRlIDxtaT4uPC9taT4gZm9sbG93ZWQgYnkgPG1uPi4uLjwvbW4+XG4gICAgICB9IGVsc2UgaWYgKGdyb3VwLnR5cGUgPT09ICdtbicgJiYgaXNOdW1iZXJQdW5jdHVhdGlvbihsYXN0R3JvdXApKSB7XG4gICAgICAgIGdyb3VwLmNoaWxkcmVuID0gWy4uLmxhc3RHcm91cC5jaGlsZHJlbiwgLi4uZ3JvdXAuY2hpbGRyZW5dO1xuICAgICAgICBncm91cHMucG9wKCk7IC8vIFB1dCBwcmVjZWRpbmcgPG1uPi4uLjwvbW4+IG9yIDxtaT4uPC9taT4gaW5zaWRlIGJhc2Ugb2ZcbiAgICAgICAgLy8gPG1zdXA+PG1uPi4uLmJhc2UuLi48L21uPi4uLmV4cG9uZW50Li4uPC9tc3VwPiAob3IgPG1zdWI+KVxuICAgICAgfSBlbHNlIGlmICgoZ3JvdXAudHlwZSA9PT0gJ21zdXAnIHx8IGdyb3VwLnR5cGUgPT09ICdtc3ViJykgJiYgZ3JvdXAuY2hpbGRyZW4ubGVuZ3RoID49IDEgJiYgKGxhc3RHcm91cC50eXBlID09PSAnbW4nIHx8IGlzTnVtYmVyUHVuY3R1YXRpb24obGFzdEdyb3VwKSkpIHtcbiAgICAgICAgY29uc3QgYmFzZSA9IGdyb3VwLmNoaWxkcmVuWzBdO1xuXG4gICAgICAgIGlmIChiYXNlIGluc3RhbmNlb2YgTWF0aE5vZGUgJiYgYmFzZS50eXBlID09PSAnbW4nKSB7XG4gICAgICAgICAgYmFzZS5jaGlsZHJlbiA9IFsuLi5sYXN0R3JvdXAuY2hpbGRyZW4sIC4uLmJhc2UuY2hpbGRyZW5dO1xuICAgICAgICAgIGdyb3Vwcy5wb3AoKTtcbiAgICAgICAgfSAvLyBcXG5vdFxuXG4gICAgICB9IGVsc2UgaWYgKGxhc3RHcm91cC50eXBlID09PSAnbWknICYmIGxhc3RHcm91cC5jaGlsZHJlbi5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgY29uc3QgbGFzdENoaWxkID0gbGFzdEdyb3VwLmNoaWxkcmVuWzBdO1xuXG4gICAgICAgIGlmIChsYXN0Q2hpbGQgaW5zdGFuY2VvZiBUZXh0Tm9kZSAmJiBsYXN0Q2hpbGQudGV4dCA9PT0gJ1xcdTAzMzgnICYmIChncm91cC50eXBlID09PSAnbW8nIHx8IGdyb3VwLnR5cGUgPT09ICdtaScgfHwgZ3JvdXAudHlwZSA9PT0gJ21uJykpIHtcbiAgICAgICAgICBjb25zdCBjaGlsZCA9IGdyb3VwLmNoaWxkcmVuWzBdO1xuXG4gICAgICAgICAgaWYgKGNoaWxkIGluc3RhbmNlb2YgVGV4dE5vZGUgJiYgY2hpbGQudGV4dC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAvLyBPdmVybGF5IHdpdGggY29tYmluaW5nIGNoYXJhY3RlciBsb25nIHNvbGlkdXNcbiAgICAgICAgICAgIGNoaWxkLnRleHQgPSBjaGlsZC50ZXh0LnNsaWNlKDAsIDEpICsgXCJcXHUwMzM4XCIgKyBjaGlsZC50ZXh0LnNsaWNlKDEpO1xuICAgICAgICAgICAgZ3JvdXBzLnBvcCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGdyb3Vwcy5wdXNoKGdyb3VwKTtcbiAgICBsYXN0R3JvdXAgPSBncm91cDtcbiAgfVxuXG4gIHJldHVybiBncm91cHM7XG59O1xuLyoqXG4gKiBFcXVpdmFsZW50IHRvIGJ1aWxkRXhwcmVzc2lvbiwgYnV0IHdyYXBzIHRoZSBlbGVtZW50cyBpbiBhbiA8bXJvdz5cbiAqIGlmIHRoZXJlJ3MgbW9yZSB0aGFuIG9uZS4gIFJldHVybnMgYSBzaW5nbGUgbm9kZSBpbnN0ZWFkIG9mIGFuIGFycmF5LlxuICovXG5cbmNvbnN0IGJ1aWxkRXhwcmVzc2lvblJvdyA9IGZ1bmN0aW9uIChleHByZXNzaW9uLCBvcHRpb25zLCBpc09yZGdyb3VwKSB7XG4gIHJldHVybiBtYWtlUm93KGJ1aWxkTWF0aE1MX2J1aWxkRXhwcmVzc2lvbihleHByZXNzaW9uLCBvcHRpb25zLCBpc09yZGdyb3VwKSk7XG59O1xuLyoqXG4gKiBUYWtlcyBhIGdyb3VwIGZyb20gdGhlIHBhcnNlciBhbmQgY2FsbHMgdGhlIGFwcHJvcHJpYXRlIGdyb3VwQnVpbGRlcnMgZnVuY3Rpb25cbiAqIG9uIGl0IHRvIHByb2R1Y2UgYSBNYXRoTUwgbm9kZS5cbiAqL1xuXG5jb25zdCBidWlsZE1hdGhNTF9idWlsZEdyb3VwID0gZnVuY3Rpb24gKGdyb3VwLCBvcHRpb25zKSB7XG4gIGlmICghZ3JvdXApIHtcbiAgICByZXR1cm4gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtcm93XCIpO1xuICB9XG5cbiAgaWYgKF9tYXRobWxHcm91cEJ1aWxkZXJzW2dyb3VwLnR5cGVdKSB7XG4gICAgLy8gQ2FsbCB0aGUgZ3JvdXBCdWlsZGVycyBmdW5jdGlvblxuICAgIC8vICRGbG93Rml4TWVcbiAgICBjb25zdCByZXN1bHQgPSBfbWF0aG1sR3JvdXBCdWlsZGVyc1tncm91cC50eXBlXShncm91cCwgb3B0aW9ucyk7IC8vICRGbG93Rml4TWVcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiR290IGdyb3VwIG9mIHVua25vd24gdHlwZTogJ1wiICsgZ3JvdXAudHlwZSArIFwiJ1wiKTtcbiAgfVxufTtcbi8qKlxuICogVGFrZXMgYSBmdWxsIHBhcnNlIHRyZWUgYW5kIHNldHRpbmdzIGFuZCBidWlsZHMgYSBNYXRoTUwgcmVwcmVzZW50YXRpb24gb2ZcbiAqIGl0LiBJbiBwYXJ0aWN1bGFyLCB3ZSBwdXQgdGhlIGVsZW1lbnRzIGZyb20gYnVpbGRpbmcgdGhlIHBhcnNlIHRyZWUgaW50byBhXG4gKiA8c2VtYW50aWNzPiB0YWcgc28gd2UgY2FuIGFsc28gaW5jbHVkZSB0aGF0IFRlWCBzb3VyY2UgYXMgYW4gYW5ub3RhdGlvbi5cbiAqXG4gKiBOb3RlIHRoYXQgd2UgYWN0dWFsbHkgcmV0dXJuIGEgZG9tVHJlZSBlbGVtZW50IHdpdGggYSBgPG1hdGg+YCBpbnNpZGUgaXQgc29cbiAqIHdlIGNhbiBkbyBhcHByb3ByaWF0ZSBzdHlsaW5nLlxuICovXG5cbmZ1bmN0aW9uIGJ1aWxkTWF0aE1MKHRyZWUsIHRleEV4cHJlc3Npb24sIG9wdGlvbnMsIGlzRGlzcGxheU1vZGUsIGZvck1hdGhtbE9ubHkpIHtcbiAgY29uc3QgZXhwcmVzc2lvbiA9IGJ1aWxkTWF0aE1MX2J1aWxkRXhwcmVzc2lvbih0cmVlLCBvcHRpb25zKTsgLy8gVE9ETzogTWFrZSBhIHBhc3MgdGhydSB0aGUgTWF0aE1MIHNpbWlsYXIgdG8gYnVpbGRIVE1MLnRyYXZlcnNlTm9uU3BhY2VOb2Rlc1xuICAvLyBhbmQgYWRkIHNwYWNpbmcgbm9kZXMuIFRoaXMgaXMgbmVjZXNzYXJ5IG9ubHkgYWRqYWNlbnQgdG8gbWF0aCBvcGVyYXRvcnNcbiAgLy8gbGlrZSBcXHNpbiBvciBcXGxpbSBvciB0byBzdWJzdXAgZWxlbWVudHMgdGhhdCBjb250YWluIG1hdGggb3BlcmF0b3JzLlxuICAvLyBNYXRoTUwgdGFrZXMgY2FyZSBvZiB0aGUgb3RoZXIgc3BhY2luZyBpc3N1ZXMuXG4gIC8vIFdyYXAgdXAgdGhlIGV4cHJlc3Npb24gaW4gYW4gbXJvdyBzbyBpdCBpcyBwcmVzZW50ZWQgaW4gdGhlIHNlbWFudGljc1xuICAvLyB0YWcgY29ycmVjdGx5LCB1bmxlc3MgaXQncyBhIHNpbmdsZSA8bXJvdz4gb3IgPG10YWJsZT4uXG5cbiAgbGV0IHdyYXBwZXI7XG5cbiAgaWYgKGV4cHJlc3Npb24ubGVuZ3RoID09PSAxICYmIGV4cHJlc3Npb25bMF0gaW5zdGFuY2VvZiBNYXRoTm9kZSAmJiB1dGlscy5jb250YWlucyhbXCJtcm93XCIsIFwibXRhYmxlXCJdLCBleHByZXNzaW9uWzBdLnR5cGUpKSB7XG4gICAgd3JhcHBlciA9IGV4cHJlc3Npb25bMF07XG4gIH0gZWxzZSB7XG4gICAgd3JhcHBlciA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXJvd1wiLCBleHByZXNzaW9uKTtcbiAgfSAvLyBCdWlsZCBhIFRlWCBhbm5vdGF0aW9uIG9mIHRoZSBzb3VyY2VcblxuXG4gIGNvbnN0IGFubm90YXRpb24gPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcImFubm90YXRpb25cIiwgW25ldyBtYXRoTUxUcmVlLlRleHROb2RlKHRleEV4cHJlc3Npb24pXSk7XG4gIGFubm90YXRpb24uc2V0QXR0cmlidXRlKFwiZW5jb2RpbmdcIiwgXCJhcHBsaWNhdGlvbi94LXRleFwiKTtcbiAgY29uc3Qgc2VtYW50aWNzID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJzZW1hbnRpY3NcIiwgW3dyYXBwZXIsIGFubm90YXRpb25dKTtcbiAgY29uc3QgbWF0aCA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibWF0aFwiLCBbc2VtYW50aWNzXSk7XG4gIG1hdGguc2V0QXR0cmlidXRlKFwieG1sbnNcIiwgXCJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MXCIpO1xuXG4gIGlmIChpc0Rpc3BsYXlNb2RlKSB7XG4gICAgbWF0aC5zZXRBdHRyaWJ1dGUoXCJkaXNwbGF5XCIsIFwiYmxvY2tcIik7XG4gIH0gLy8gWW91IGNhbid0IHN0eWxlIDxtYXRoPiBub2Rlcywgc28gd2Ugd3JhcCB0aGUgbm9kZSBpbiBhIHNwYW4uXG4gIC8vIE5PVEU6IFRoZSBzcGFuIGNsYXNzIGlzIG5vdCB0eXBlZCB0byBoYXZlIDxtYXRoPiBub2RlcyBhcyBjaGlsZHJlbiwgYW5kXG4gIC8vIHdlIGRvbid0IHdhbnQgdG8gbWFrZSB0aGUgY2hpbGRyZW4gdHlwZSBtb3JlIGdlbmVyaWMgc2luY2UgdGhlIGNoaWxkcmVuXG4gIC8vIG9mIHNwYW4gYXJlIGV4cGVjdGVkIHRvIGhhdmUgbW9yZSBmaWVsZHMgaW4gYGJ1aWxkSHRtbGAgY29udGV4dHMuXG5cblxuICBjb25zdCB3cmFwcGVyQ2xhc3MgPSBmb3JNYXRobWxPbmx5ID8gXCJrYXRleFwiIDogXCJrYXRleC1tYXRobWxcIjsgLy8gJEZsb3dGaXhNZVxuXG4gIHJldHVybiBidWlsZENvbW1vbi5tYWtlU3Bhbihbd3JhcHBlckNsYXNzXSwgW21hdGhdKTtcbn1cbjsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9idWlsZFRyZWUuanNcblxuXG5cblxuXG5cblxuY29uc3Qgb3B0aW9uc0Zyb21TZXR0aW5ncyA9IGZ1bmN0aW9uIChzZXR0aW5ncykge1xuICByZXR1cm4gbmV3IHNyY19PcHRpb25zKHtcbiAgICBzdHlsZTogc2V0dGluZ3MuZGlzcGxheU1vZGUgPyBzcmNfU3R5bGUuRElTUExBWSA6IHNyY19TdHlsZS5URVhULFxuICAgIG1heFNpemU6IHNldHRpbmdzLm1heFNpemUsXG4gICAgbWluUnVsZVRoaWNrbmVzczogc2V0dGluZ3MubWluUnVsZVRoaWNrbmVzc1xuICB9KTtcbn07XG5cbmNvbnN0IGRpc3BsYXlXcmFwID0gZnVuY3Rpb24gKG5vZGUsIHNldHRpbmdzKSB7XG4gIGlmIChzZXR0aW5ncy5kaXNwbGF5TW9kZSkge1xuICAgIGNvbnN0IGNsYXNzZXMgPSBbXCJrYXRleC1kaXNwbGF5XCJdO1xuXG4gICAgaWYgKHNldHRpbmdzLmxlcW5vKSB7XG4gICAgICBjbGFzc2VzLnB1c2goXCJsZXFub1wiKTtcbiAgICB9XG5cbiAgICBpZiAoc2V0dGluZ3MuZmxlcW4pIHtcbiAgICAgIGNsYXNzZXMucHVzaChcImZsZXFuXCIpO1xuICAgIH1cblxuICAgIG5vZGUgPSBidWlsZENvbW1vbi5tYWtlU3BhbihjbGFzc2VzLCBbbm9kZV0pO1xuICB9XG5cbiAgcmV0dXJuIG5vZGU7XG59O1xuXG5jb25zdCBidWlsZFRyZWUgPSBmdW5jdGlvbiAodHJlZSwgZXhwcmVzc2lvbiwgc2V0dGluZ3MpIHtcbiAgY29uc3Qgb3B0aW9ucyA9IG9wdGlvbnNGcm9tU2V0dGluZ3Moc2V0dGluZ3MpO1xuICBsZXQga2F0ZXhOb2RlO1xuXG4gIGlmIChzZXR0aW5ncy5vdXRwdXQgPT09IFwibWF0aG1sXCIpIHtcbiAgICByZXR1cm4gYnVpbGRNYXRoTUwodHJlZSwgZXhwcmVzc2lvbiwgb3B0aW9ucywgc2V0dGluZ3MuZGlzcGxheU1vZGUsIHRydWUpO1xuICB9IGVsc2UgaWYgKHNldHRpbmdzLm91dHB1dCA9PT0gXCJodG1sXCIpIHtcbiAgICBjb25zdCBodG1sTm9kZSA9IGJ1aWxkSFRNTCh0cmVlLCBvcHRpb25zKTtcbiAgICBrYXRleE5vZGUgPSBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJrYXRleFwiXSwgW2h0bWxOb2RlXSk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgbWF0aE1MTm9kZSA9IGJ1aWxkTWF0aE1MKHRyZWUsIGV4cHJlc3Npb24sIG9wdGlvbnMsIHNldHRpbmdzLmRpc3BsYXlNb2RlLCBmYWxzZSk7XG4gICAgY29uc3QgaHRtbE5vZGUgPSBidWlsZEhUTUwodHJlZSwgb3B0aW9ucyk7XG4gICAga2F0ZXhOb2RlID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wia2F0ZXhcIl0sIFttYXRoTUxOb2RlLCBodG1sTm9kZV0pO1xuICB9XG5cbiAgcmV0dXJuIGRpc3BsYXlXcmFwKGthdGV4Tm9kZSwgc2V0dGluZ3MpO1xufTtcbmNvbnN0IGJ1aWxkSFRNTFRyZWUgPSBmdW5jdGlvbiAodHJlZSwgZXhwcmVzc2lvbiwgc2V0dGluZ3MpIHtcbiAgY29uc3Qgb3B0aW9ucyA9IG9wdGlvbnNGcm9tU2V0dGluZ3Moc2V0dGluZ3MpO1xuICBjb25zdCBodG1sTm9kZSA9IGJ1aWxkSFRNTCh0cmVlLCBvcHRpb25zKTtcbiAgY29uc3Qga2F0ZXhOb2RlID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wia2F0ZXhcIl0sIFtodG1sTm9kZV0pO1xuICByZXR1cm4gZGlzcGxheVdyYXAoa2F0ZXhOb2RlLCBzZXR0aW5ncyk7XG59O1xuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3JjX2J1aWxkVHJlZSA9ICgoLyogdW51c2VkIHB1cmUgZXhwcmVzc2lvbiBvciBzdXBlciAqLyBudWxsICYmIChidWlsZFRyZWUpKSk7XG47Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvc3RyZXRjaHkuanNcbi8qKlxuICogVGhpcyBmaWxlIHByb3ZpZGVzIHN1cHBvcnQgdG8gYnVpbGRNYXRoTUwuanMgYW5kIGJ1aWxkSFRNTC5qc1xuICogZm9yIHN0cmV0Y2h5IHdpZGUgZWxlbWVudHMgcmVuZGVyZWQgZnJvbSBTVkcgZmlsZXNcbiAqIGFuZCBvdGhlciBDU1MgdHJpY2tlcnkuXG4gKi9cblxuXG5cblxuXG5jb25zdCBzdHJldGNoeUNvZGVQb2ludCA9IHtcbiAgd2lkZWhhdDogXCJeXCIsXG4gIHdpZGVjaGVjazogXCLLh1wiLFxuICB3aWRldGlsZGU6IFwiflwiLFxuICB1dGlsZGU6IFwiflwiLFxuICBvdmVybGVmdGFycm93OiBcIlxcdTIxOTBcIixcbiAgdW5kZXJsZWZ0YXJyb3c6IFwiXFx1MjE5MFwiLFxuICB4bGVmdGFycm93OiBcIlxcdTIxOTBcIixcbiAgb3ZlcnJpZ2h0YXJyb3c6IFwiXFx1MjE5MlwiLFxuICB1bmRlcnJpZ2h0YXJyb3c6IFwiXFx1MjE5MlwiLFxuICB4cmlnaHRhcnJvdzogXCJcXHUyMTkyXCIsXG4gIHVuZGVyYnJhY2U6IFwiXFx1MjNkZlwiLFxuICBvdmVyYnJhY2U6IFwiXFx1MjNkZVwiLFxuICBvdmVyZ3JvdXA6IFwiXFx1MjNlMFwiLFxuICB1bmRlcmdyb3VwOiBcIlxcdTIzZTFcIixcbiAgb3ZlcmxlZnRyaWdodGFycm93OiBcIlxcdTIxOTRcIixcbiAgdW5kZXJsZWZ0cmlnaHRhcnJvdzogXCJcXHUyMTk0XCIsXG4gIHhsZWZ0cmlnaHRhcnJvdzogXCJcXHUyMTk0XCIsXG4gIE92ZXJyaWdodGFycm93OiBcIlxcdTIxZDJcIixcbiAgeFJpZ2h0YXJyb3c6IFwiXFx1MjFkMlwiLFxuICBvdmVybGVmdGhhcnBvb246IFwiXFx1MjFiY1wiLFxuICB4bGVmdGhhcnBvb251cDogXCJcXHUyMWJjXCIsXG4gIG92ZXJyaWdodGhhcnBvb246IFwiXFx1MjFjMFwiLFxuICB4cmlnaHRoYXJwb29udXA6IFwiXFx1MjFjMFwiLFxuICB4TGVmdGFycm93OiBcIlxcdTIxZDBcIixcbiAgeExlZnRyaWdodGFycm93OiBcIlxcdTIxZDRcIixcbiAgeGhvb2tsZWZ0YXJyb3c6IFwiXFx1MjFhOVwiLFxuICB4aG9va3JpZ2h0YXJyb3c6IFwiXFx1MjFhYVwiLFxuICB4bWFwc3RvOiBcIlxcdTIxYTZcIixcbiAgeHJpZ2h0aGFycG9vbmRvd246IFwiXFx1MjFjMVwiLFxuICB4bGVmdGhhcnBvb25kb3duOiBcIlxcdTIxYmRcIixcbiAgeHJpZ2h0bGVmdGhhcnBvb25zOiBcIlxcdTIxY2NcIixcbiAgeGxlZnRyaWdodGhhcnBvb25zOiBcIlxcdTIxY2JcIixcbiAgeHR3b2hlYWRsZWZ0YXJyb3c6IFwiXFx1MjE5ZVwiLFxuICB4dHdvaGVhZHJpZ2h0YXJyb3c6IFwiXFx1MjFhMFwiLFxuICB4bG9uZ2VxdWFsOiBcIj1cIixcbiAgeHRvZnJvbTogXCJcXHUyMWM0XCIsXG4gIHhyaWdodGxlZnRhcnJvd3M6IFwiXFx1MjFjNFwiLFxuICB4cmlnaHRlcXVpbGlicml1bTogXCJcXHUyMWNjXCIsXG4gIC8vIE5vdCBhIHBlcmZlY3QgbWF0Y2guXG4gIHhsZWZ0ZXF1aWxpYnJpdW06IFwiXFx1MjFjYlwiLFxuICAvLyBOb25lIGJldHRlciBhdmFpbGFibGUuXG4gIFwiXFxcXGNkcmlnaHRhcnJvd1wiOiBcIlxcdTIxOTJcIixcbiAgXCJcXFxcY2RsZWZ0YXJyb3dcIjogXCJcXHUyMTkwXCIsXG4gIFwiXFxcXGNkbG9uZ2VxdWFsXCI6IFwiPVwiXG59O1xuXG5jb25zdCBtYXRoTUxub2RlID0gZnVuY3Rpb24gKGxhYmVsKSB7XG4gIGNvbnN0IG5vZGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1vXCIsIFtuZXcgbWF0aE1MVHJlZS5UZXh0Tm9kZShzdHJldGNoeUNvZGVQb2ludFtsYWJlbC5yZXBsYWNlKC9eXFxcXC8sICcnKV0pXSk7XG4gIG5vZGUuc2V0QXR0cmlidXRlKFwic3RyZXRjaHlcIiwgXCJ0cnVlXCIpO1xuICByZXR1cm4gbm9kZTtcbn07IC8vIE1hbnkgb2YgdGhlIEthVGVYIFNWRyBpbWFnZXMgaGF2ZSBiZWVuIGFkYXB0ZWQgZnJvbSBnbHlwaHMgaW4gS2FUZVggZm9udHMuXG4vLyBDb3B5cmlnaHQgKGMpIDIwMDktMjAxMCwgRGVzaWduIFNjaWVuY2UsIEluYy4gKDx3d3cubWF0aGpheC5vcmc+KVxuLy8gQ29weXJpZ2h0IChjKSAyMDE0LTIwMTcgS2hhbiBBY2FkZW15ICg8d3d3LmtoYW5hY2FkZW15Lm9yZz4pXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgU0lMIE9wZW4gRm9udCBMaWNlbnNlLCBWZXJzaW9uIDEuMS5cbi8vIFNlZSBcXG5odHRwOi8vc2NyaXB0cy5zaWwub3JnL09GTFxuLy8gVmVyeSBMb25nIFNWR3Ncbi8vICAgIE1hbnkgb2YgdGhlIEthVGVYIHN0cmV0Y2h5IHdpZGUgZWxlbWVudHMgdXNlIGEgbG9uZyBTVkcgaW1hZ2UgYW5kIGFuXG4vLyAgICBvdmVyZmxvdzogaGlkZGVuIHRhY3RpYyB0byBhY2hpZXZlIGEgc3RyZXRjaHkgaW1hZ2Ugd2hpbGUgYXZvaWRpbmdcbi8vICAgIGRpc3RvcnRpb24gb2YgYXJyb3doZWFkcyBvciBicmFjZSBjb3JuZXJzLlxuLy8gICAgVGhlIFNWRyB0eXBpY2FsbHkgY29udGFpbnMgYSB2ZXJ5IGxvbmcgKDQwMCBlbSkgYXJyb3cuXG4vLyAgICBUaGUgU1ZHIGlzIGluIGEgY29udGFpbmVyIHNwYW4gdGhhdCBoYXMgb3ZlcmZsb3c6IGhpZGRlbiwgc28gdGhlIHNwYW5cbi8vICAgIGFjdHMgbGlrZSBhIHdpbmRvdyB0aGF0IGV4cG9zZXMgb25seSBwYXJ0IG9mIHRoZSAgU1ZHLlxuLy8gICAgVGhlIFNWRyBhbHdheXMgaGFzIGEgbG9uZ2VyLCB0aGlubmVyIGFzcGVjdCByYXRpbyB0aGFuIHRoZSBjb250YWluZXIgc3Bhbi5cbi8vICAgIEFmdGVyIHRoZSBTVkcgZmlsbHMgMTAwJSBvZiB0aGUgaGVpZ2h0IG9mIHRoZSBjb250YWluZXIgc3Bhbixcbi8vICAgIHRoZXJlIGlzIGEgbG9uZyBhcnJvdyBzaGFmdCBsZWZ0IG92ZXIuIFRoYXQgbGVmdC1vdmVyIHNoYWZ0IGlzIG5vdCBzaG93bi5cbi8vICAgIEluc3RlYWQsIGl0IGlzIHNsaWNlZCBvZmYgYmVjYXVzZSB0aGUgc3BhbidzIENTUyBoYXMgb3ZlcmZsb3c6IGhpZGRlbi5cbi8vICAgIFRodXMsIHRoZSByZWFkZXIgc2VlcyBhbiBhcnJvdyB0aGF0IG1hdGNoZXMgdGhlIHN1YmplY3QgbWF0dGVyIHdpZHRoXG4vLyAgICB3aXRob3V0IGRpc3RvcnRpb24uXG4vLyAgICBTb21lIGZ1bmN0aW9ucywgc3VjaCBhcyBcXGNhbmNlbCwgbmVlZCB0byB2YXJ5IHRoZWlyIGFzcGVjdCByYXRpby4gVGhlc2Vcbi8vICAgIGZ1bmN0aW9ucyBkbyBub3QgZ2V0IHRoZSBvdmVyZmxvdyBTVkcgdHJlYXRtZW50LlxuLy8gU2Vjb25kIEJydXNoIFN0cm9rZVxuLy8gICAgTG93IHJlc29sdXRpb24gbW9uaXRvcnMgc3RydWdnbGUgdG8gZGlzcGxheSBpbWFnZXMgaW4gZmluZSBkZXRhaWwuXG4vLyAgICBTbyBicm93c2VycyBhcHBseSBhbnRpLWFsaWFzaW5nLiBBIGxvbmcgc3RyYWlnaHQgYXJyb3cgc2hhZnQgdGhlcmVmb3JlXG4vLyAgICB3aWxsIHNvbWV0aW1lcyBhcHBlYXIgYXMgaWYgaXQgaGFzIGEgYmx1cnJlZCBlZGdlLlxuLy8gICAgVG8gbWl0aWdhdGUgdGhpcywgdGhlc2UgU1ZHIGZpbGVzIGNvbnRhaW4gYSBzZWNvbmQgXCJicnVzaC1zdHJva2VcIiBvbiB0aGVcbi8vICAgIGFycm93IHNoYWZ0cy4gVGhhdCBpcywgYSBzZWNvbmQgbG9uZyB0aGluIHJlY3Rhbmd1bGFyIFNWRyBwYXRoIGhhcyBiZWVuXG4vLyAgICB3cml0dGVuIGRpcmVjdGx5IG9uIHRvcCBvZiBlYWNoIGFycm93IHNoYWZ0LiBUaGlzIHJlaW5mb3JjZW1lbnQgY2F1c2VzXG4vLyAgICBzb21lIG9mIHRoZSBzY3JlZW4gcGl4ZWxzIHRvIGRpc3BsYXkgYXMgYmxhY2sgaW5zdGVhZCBvZiB0aGUgYW50aS1hbGlhc2VkXG4vLyAgICBncmF5IHBpeGVsIHRoYXQgYSAgc2luZ2xlIHBhdGggd291bGQgZ2VuZXJhdGUuIFNvIHdlIGdldCBhcnJvdyBzaGFmdHNcbi8vICAgIHdob3NlIGVkZ2VzIGFwcGVhciB0byBiZSBzaGFycGVyLlxuLy8gSW4gdGhlIGthdGV4SW1hZ2VzRGF0YSBvYmplY3QganVzdCBiZWxvdywgdGhlIGRpbWVuc2lvbnMgYWxsXG4vLyBjb3JyZXNwb25kIHRvIHBhdGggZ2VvbWV0cnkgaW5zaWRlIHRoZSByZWxldmFudCBTVkcuXG4vLyBGb3IgZXhhbXBsZSwgXFxvdmVycmlnaHRhcnJvdyB1c2VzIHRoZSBzYW1lIGFycm93aGVhZCBhcyBnbHlwaCBVKzIxOTJcbi8vIGZyb20gdGhlIEthVGVYIE1haW4gZm9udC4gVGhlIHNjYWxpbmcgZmFjdG9yIGlzIDEwMDAuXG4vLyBUaGF0IGlzLCBpbnNpZGUgdGhlIGZvbnQsIHRoYXQgYXJyb3doZWFkIGlzIDUyMiB1bml0cyB0YWxsLCB3aGljaFxuLy8gY29ycmVzcG9uZHMgdG8gMC41MjIgZW0gaW5zaWRlIHRoZSBkb2N1bWVudC5cblxuXG5jb25zdCBrYXRleEltYWdlc0RhdGEgPSB7XG4gIC8vICAgcGF0aChzKSwgbWluV2lkdGgsIGhlaWdodCwgYWxpZ25cbiAgb3ZlcnJpZ2h0YXJyb3c6IFtbXCJyaWdodGFycm93XCJdLCAwLjg4OCwgNTIyLCBcInhNYXhZTWluXCJdLFxuICBvdmVybGVmdGFycm93OiBbW1wibGVmdGFycm93XCJdLCAwLjg4OCwgNTIyLCBcInhNaW5ZTWluXCJdLFxuICB1bmRlcnJpZ2h0YXJyb3c6IFtbXCJyaWdodGFycm93XCJdLCAwLjg4OCwgNTIyLCBcInhNYXhZTWluXCJdLFxuICB1bmRlcmxlZnRhcnJvdzogW1tcImxlZnRhcnJvd1wiXSwgMC44ODgsIDUyMiwgXCJ4TWluWU1pblwiXSxcbiAgeHJpZ2h0YXJyb3c6IFtbXCJyaWdodGFycm93XCJdLCAxLjQ2OSwgNTIyLCBcInhNYXhZTWluXCJdLFxuICBcIlxcXFxjZHJpZ2h0YXJyb3dcIjogW1tcInJpZ2h0YXJyb3dcIl0sIDMuMCwgNTIyLCBcInhNYXhZTWluXCJdLFxuICAvLyBDRCBtaW53d2lkdGgyLjVwY1xuICB4bGVmdGFycm93OiBbW1wibGVmdGFycm93XCJdLCAxLjQ2OSwgNTIyLCBcInhNaW5ZTWluXCJdLFxuICBcIlxcXFxjZGxlZnRhcnJvd1wiOiBbW1wibGVmdGFycm93XCJdLCAzLjAsIDUyMiwgXCJ4TWluWU1pblwiXSxcbiAgT3ZlcnJpZ2h0YXJyb3c6IFtbXCJkb3VibGVyaWdodGFycm93XCJdLCAwLjg4OCwgNTYwLCBcInhNYXhZTWluXCJdLFxuICB4UmlnaHRhcnJvdzogW1tcImRvdWJsZXJpZ2h0YXJyb3dcIl0sIDEuNTI2LCA1NjAsIFwieE1heFlNaW5cIl0sXG4gIHhMZWZ0YXJyb3c6IFtbXCJkb3VibGVsZWZ0YXJyb3dcIl0sIDEuNTI2LCA1NjAsIFwieE1pbllNaW5cIl0sXG4gIG92ZXJsZWZ0aGFycG9vbjogW1tcImxlZnRoYXJwb29uXCJdLCAwLjg4OCwgNTIyLCBcInhNaW5ZTWluXCJdLFxuICB4bGVmdGhhcnBvb251cDogW1tcImxlZnRoYXJwb29uXCJdLCAwLjg4OCwgNTIyLCBcInhNaW5ZTWluXCJdLFxuICB4bGVmdGhhcnBvb25kb3duOiBbW1wibGVmdGhhcnBvb25kb3duXCJdLCAwLjg4OCwgNTIyLCBcInhNaW5ZTWluXCJdLFxuICBvdmVycmlnaHRoYXJwb29uOiBbW1wicmlnaHRoYXJwb29uXCJdLCAwLjg4OCwgNTIyLCBcInhNYXhZTWluXCJdLFxuICB4cmlnaHRoYXJwb29udXA6IFtbXCJyaWdodGhhcnBvb25cIl0sIDAuODg4LCA1MjIsIFwieE1heFlNaW5cIl0sXG4gIHhyaWdodGhhcnBvb25kb3duOiBbW1wicmlnaHRoYXJwb29uZG93blwiXSwgMC44ODgsIDUyMiwgXCJ4TWF4WU1pblwiXSxcbiAgeGxvbmdlcXVhbDogW1tcImxvbmdlcXVhbFwiXSwgMC44ODgsIDMzNCwgXCJ4TWluWU1pblwiXSxcbiAgXCJcXFxcY2Rsb25nZXF1YWxcIjogW1tcImxvbmdlcXVhbFwiXSwgMy4wLCAzMzQsIFwieE1pbllNaW5cIl0sXG4gIHh0d29oZWFkbGVmdGFycm93OiBbW1widHdvaGVhZGxlZnRhcnJvd1wiXSwgMC44ODgsIDMzNCwgXCJ4TWluWU1pblwiXSxcbiAgeHR3b2hlYWRyaWdodGFycm93OiBbW1widHdvaGVhZHJpZ2h0YXJyb3dcIl0sIDAuODg4LCAzMzQsIFwieE1heFlNaW5cIl0sXG4gIG92ZXJsZWZ0cmlnaHRhcnJvdzogW1tcImxlZnRhcnJvd1wiLCBcInJpZ2h0YXJyb3dcIl0sIDAuODg4LCA1MjJdLFxuICBvdmVyYnJhY2U6IFtbXCJsZWZ0YnJhY2VcIiwgXCJtaWRicmFjZVwiLCBcInJpZ2h0YnJhY2VcIl0sIDEuNiwgNTQ4XSxcbiAgdW5kZXJicmFjZTogW1tcImxlZnRicmFjZXVuZGVyXCIsIFwibWlkYnJhY2V1bmRlclwiLCBcInJpZ2h0YnJhY2V1bmRlclwiXSwgMS42LCA1NDhdLFxuICB1bmRlcmxlZnRyaWdodGFycm93OiBbW1wibGVmdGFycm93XCIsIFwicmlnaHRhcnJvd1wiXSwgMC44ODgsIDUyMl0sXG4gIHhsZWZ0cmlnaHRhcnJvdzogW1tcImxlZnRhcnJvd1wiLCBcInJpZ2h0YXJyb3dcIl0sIDEuNzUsIDUyMl0sXG4gIHhMZWZ0cmlnaHRhcnJvdzogW1tcImRvdWJsZWxlZnRhcnJvd1wiLCBcImRvdWJsZXJpZ2h0YXJyb3dcIl0sIDEuNzUsIDU2MF0sXG4gIHhyaWdodGxlZnRoYXJwb29uczogW1tcImxlZnRoYXJwb29uZG93bnBsdXNcIiwgXCJyaWdodGhhcnBvb25wbHVzXCJdLCAxLjc1LCA3MTZdLFxuICB4bGVmdHJpZ2h0aGFycG9vbnM6IFtbXCJsZWZ0aGFycG9vbnBsdXNcIiwgXCJyaWdodGhhcnBvb25kb3ducGx1c1wiXSwgMS43NSwgNzE2XSxcbiAgeGhvb2tsZWZ0YXJyb3c6IFtbXCJsZWZ0YXJyb3dcIiwgXCJyaWdodGhvb2tcIl0sIDEuMDgsIDUyMl0sXG4gIHhob29rcmlnaHRhcnJvdzogW1tcImxlZnRob29rXCIsIFwicmlnaHRhcnJvd1wiXSwgMS4wOCwgNTIyXSxcbiAgb3ZlcmxpbmVzZWdtZW50OiBbW1wibGVmdGxpbmVzZWdtZW50XCIsIFwicmlnaHRsaW5lc2VnbWVudFwiXSwgMC44ODgsIDUyMl0sXG4gIHVuZGVybGluZXNlZ21lbnQ6IFtbXCJsZWZ0bGluZXNlZ21lbnRcIiwgXCJyaWdodGxpbmVzZWdtZW50XCJdLCAwLjg4OCwgNTIyXSxcbiAgb3Zlcmdyb3VwOiBbW1wibGVmdGdyb3VwXCIsIFwicmlnaHRncm91cFwiXSwgMC44ODgsIDM0Ml0sXG4gIHVuZGVyZ3JvdXA6IFtbXCJsZWZ0Z3JvdXB1bmRlclwiLCBcInJpZ2h0Z3JvdXB1bmRlclwiXSwgMC44ODgsIDM0Ml0sXG4gIHhtYXBzdG86IFtbXCJsZWZ0bWFwc3RvXCIsIFwicmlnaHRhcnJvd1wiXSwgMS41LCA1MjJdLFxuICB4dG9mcm9tOiBbW1wibGVmdFRvRnJvbVwiLCBcInJpZ2h0VG9Gcm9tXCJdLCAxLjc1LCA1MjhdLFxuICAvLyBUaGUgbmV4dCB0aHJlZSBhcnJvd3MgYXJlIGZyb20gdGhlIG1oY2hlbSBwYWNrYWdlLlxuICAvLyBJbiBtaGNoZW0uc3R5LCBtaW4tbGVuZ3RoIGlzIDIuMGVtLiBCdXQgdGhlc2UgYXJyb3dzIG1pZ2h0IGFwcGVhciBpbiB0aGVcbiAgLy8gZG9jdW1lbnQgYXMgXFx4cmlnaHRhcnJvdyBvciBcXHhyaWdodGxlZnRoYXJwb29ucy4gVGhvc2UgaGF2ZVxuICAvLyBtaW4tbGVuZ3RoID0gMS43NWVtLCBzbyB3ZSBzZXQgbWluLWxlbmd0aCBvbiB0aGVzZSBuZXh0IHRocmVlIHRvIG1hdGNoLlxuICB4cmlnaHRsZWZ0YXJyb3dzOiBbW1wiYmFyYWJvdmVsZWZ0YXJyb3dcIiwgXCJyaWdodGFycm93YWJvdmViYXJcIl0sIDEuNzUsIDkwMV0sXG4gIHhyaWdodGVxdWlsaWJyaXVtOiBbW1wiYmFyYWJvdmVzaG9ydGxlZnRoYXJwb29uXCIsIFwicmlnaHRoYXJwb29uYWJvdmVzaG9ydGJhclwiXSwgMS43NSwgNzE2XSxcbiAgeGxlZnRlcXVpbGlicml1bTogW1tcInNob3J0YmFyYWJvdmVsZWZ0aGFycG9vblwiLCBcInNob3J0cmlnaHRoYXJwb29uYWJvdmViYXJcIl0sIDEuNzUsIDcxNl1cbn07XG5cbmNvbnN0IGdyb3VwTGVuZ3RoID0gZnVuY3Rpb24gKGFyZykge1xuICBpZiAoYXJnLnR5cGUgPT09IFwib3JkZ3JvdXBcIikge1xuICAgIHJldHVybiBhcmcuYm9keS5sZW5ndGg7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIDE7XG4gIH1cbn07XG5cbmNvbnN0IHN2Z1NwYW4gPSBmdW5jdGlvbiAoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgLy8gQ3JlYXRlIGEgc3BhbiB3aXRoIGlubGluZSBTVkcgZm9yIHRoZSBlbGVtZW50LlxuICBmdW5jdGlvbiBidWlsZFN2Z1NwYW5fKCkge1xuICAgIGxldCB2aWV3Qm94V2lkdGggPSA0MDAwMDA7IC8vIGRlZmF1bHRcblxuICAgIGNvbnN0IGxhYmVsID0gZ3JvdXAubGFiZWwuc2xpY2UoMSk7XG5cbiAgICBpZiAodXRpbHMuY29udGFpbnMoW1wid2lkZWhhdFwiLCBcIndpZGVjaGVja1wiLCBcIndpZGV0aWxkZVwiLCBcInV0aWxkZVwiXSwgbGFiZWwpKSB7XG4gICAgICAvLyBFYWNoIHR5cGUgaW4gdGhlIGBpZmAgc3RhdGVtZW50IGNvcnJlc3BvbmRzIHRvIG9uZSBvZiB0aGUgUGFyc2VOb2RlXG4gICAgICAvLyB0eXBlcyBiZWxvdy4gVGhpcyBuYXJyb3dpbmcgaXMgcmVxdWlyZWQgdG8gYWNjZXNzIGBncnAuYmFzZWAuXG4gICAgICAvLyAkRmxvd0ZpeE1lXG4gICAgICBjb25zdCBncnAgPSBncm91cDsgLy8gVGhlcmUgYXJlIGZvdXIgU1ZHIGltYWdlcyBhdmFpbGFibGUgZm9yIGVhY2ggZnVuY3Rpb24uXG4gICAgICAvLyBDaG9vc2UgYSB0YWxsZXIgaW1hZ2Ugd2hlbiB0aGVyZSBhcmUgbW9yZSBjaGFyYWN0ZXJzLlxuXG4gICAgICBjb25zdCBudW1DaGFycyA9IGdyb3VwTGVuZ3RoKGdycC5iYXNlKTtcbiAgICAgIGxldCB2aWV3Qm94SGVpZ2h0O1xuICAgICAgbGV0IHBhdGhOYW1lO1xuICAgICAgbGV0IGhlaWdodDtcblxuICAgICAgaWYgKG51bUNoYXJzID4gNSkge1xuICAgICAgICBpZiAobGFiZWwgPT09IFwid2lkZWhhdFwiIHx8IGxhYmVsID09PSBcIndpZGVjaGVja1wiKSB7XG4gICAgICAgICAgdmlld0JveEhlaWdodCA9IDQyMDtcbiAgICAgICAgICB2aWV3Qm94V2lkdGggPSAyMzY0O1xuICAgICAgICAgIGhlaWdodCA9IDAuNDI7XG4gICAgICAgICAgcGF0aE5hbWUgPSBsYWJlbCArIFwiNFwiO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZpZXdCb3hIZWlnaHQgPSAzMTI7XG4gICAgICAgICAgdmlld0JveFdpZHRoID0gMjM0MDtcbiAgICAgICAgICBoZWlnaHQgPSAwLjM0O1xuICAgICAgICAgIHBhdGhOYW1lID0gXCJ0aWxkZTRcIjtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgaW1nSW5kZXggPSBbMSwgMSwgMiwgMiwgMywgM11bbnVtQ2hhcnNdO1xuXG4gICAgICAgIGlmIChsYWJlbCA9PT0gXCJ3aWRlaGF0XCIgfHwgbGFiZWwgPT09IFwid2lkZWNoZWNrXCIpIHtcbiAgICAgICAgICB2aWV3Qm94V2lkdGggPSBbMCwgMTA2MiwgMjM2NCwgMjM2NCwgMjM2NF1baW1nSW5kZXhdO1xuICAgICAgICAgIHZpZXdCb3hIZWlnaHQgPSBbMCwgMjM5LCAzMDAsIDM2MCwgNDIwXVtpbWdJbmRleF07XG4gICAgICAgICAgaGVpZ2h0ID0gWzAsIDAuMjQsIDAuMywgMC4zLCAwLjM2LCAwLjQyXVtpbWdJbmRleF07XG4gICAgICAgICAgcGF0aE5hbWUgPSBsYWJlbCArIGltZ0luZGV4O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZpZXdCb3hXaWR0aCA9IFswLCA2MDAsIDEwMzMsIDIzMzksIDIzNDBdW2ltZ0luZGV4XTtcbiAgICAgICAgICB2aWV3Qm94SGVpZ2h0ID0gWzAsIDI2MCwgMjg2LCAzMDYsIDMxMl1baW1nSW5kZXhdO1xuICAgICAgICAgIGhlaWdodCA9IFswLCAwLjI2LCAwLjI4NiwgMC4zLCAwLjMwNiwgMC4zNF1baW1nSW5kZXhdO1xuICAgICAgICAgIHBhdGhOYW1lID0gXCJ0aWxkZVwiICsgaW1nSW5kZXg7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgcGF0aCA9IG5ldyBQYXRoTm9kZShwYXRoTmFtZSk7XG4gICAgICBjb25zdCBzdmdOb2RlID0gbmV3IFN2Z05vZGUoW3BhdGhdLCB7XG4gICAgICAgIFwid2lkdGhcIjogXCIxMDAlXCIsXG4gICAgICAgIFwiaGVpZ2h0XCI6IG1ha2VFbShoZWlnaHQpLFxuICAgICAgICBcInZpZXdCb3hcIjogXCIwIDAgXCIgKyB2aWV3Qm94V2lkdGggKyBcIiBcIiArIHZpZXdCb3hIZWlnaHQsXG4gICAgICAgIFwicHJlc2VydmVBc3BlY3RSYXRpb1wiOiBcIm5vbmVcIlxuICAgICAgfSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzcGFuOiBidWlsZENvbW1vbi5tYWtlU3ZnU3BhbihbXSwgW3N2Z05vZGVdLCBvcHRpb25zKSxcbiAgICAgICAgbWluV2lkdGg6IDAsXG4gICAgICAgIGhlaWdodFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgc3BhbnMgPSBbXTtcbiAgICAgIGNvbnN0IGRhdGEgPSBrYXRleEltYWdlc0RhdGFbbGFiZWxdO1xuICAgICAgY29uc3QgW3BhdGhzLCBtaW5XaWR0aCwgdmlld0JveEhlaWdodF0gPSBkYXRhO1xuICAgICAgY29uc3QgaGVpZ2h0ID0gdmlld0JveEhlaWdodCAvIDEwMDA7XG4gICAgICBjb25zdCBudW1TdmdDaGlsZHJlbiA9IHBhdGhzLmxlbmd0aDtcbiAgICAgIGxldCB3aWR0aENsYXNzZXM7XG4gICAgICBsZXQgYWxpZ25zO1xuXG4gICAgICBpZiAobnVtU3ZnQ2hpbGRyZW4gPT09IDEpIHtcbiAgICAgICAgLy8gJEZsb3dGaXhNZTogQWxsIHRoZXNlIGNhc2VzIG11c3QgYmUgb2YgdGhlIDQtdHVwbGUgdHlwZS5cbiAgICAgICAgY29uc3QgYWxpZ24xID0gZGF0YVszXTtcbiAgICAgICAgd2lkdGhDbGFzc2VzID0gW1wiaGlkZS10YWlsXCJdO1xuICAgICAgICBhbGlnbnMgPSBbYWxpZ24xXTtcbiAgICAgIH0gZWxzZSBpZiAobnVtU3ZnQ2hpbGRyZW4gPT09IDIpIHtcbiAgICAgICAgd2lkdGhDbGFzc2VzID0gW1wiaGFsZmFycm93LWxlZnRcIiwgXCJoYWxmYXJyb3ctcmlnaHRcIl07XG4gICAgICAgIGFsaWducyA9IFtcInhNaW5ZTWluXCIsIFwieE1heFlNaW5cIl07XG4gICAgICB9IGVsc2UgaWYgKG51bVN2Z0NoaWxkcmVuID09PSAzKSB7XG4gICAgICAgIHdpZHRoQ2xhc3NlcyA9IFtcImJyYWNlLWxlZnRcIiwgXCJicmFjZS1jZW50ZXJcIiwgXCJicmFjZS1yaWdodFwiXTtcbiAgICAgICAgYWxpZ25zID0gW1wieE1pbllNaW5cIiwgXCJ4TWlkWU1pblwiLCBcInhNYXhZTWluXCJdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ29ycmVjdCBrYXRleEltYWdlc0RhdGEgb3IgdXBkYXRlIGNvZGUgaGVyZSB0byBzdXBwb3J0XFxuICAgICAgICAgICAgICAgICAgICBcIiArIG51bVN2Z0NoaWxkcmVuICsgXCIgY2hpbGRyZW4uXCIpO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bVN2Z0NoaWxkcmVuOyBpKyspIHtcbiAgICAgICAgY29uc3QgcGF0aCA9IG5ldyBQYXRoTm9kZShwYXRoc1tpXSk7XG4gICAgICAgIGNvbnN0IHN2Z05vZGUgPSBuZXcgU3ZnTm9kZShbcGF0aF0sIHtcbiAgICAgICAgICBcIndpZHRoXCI6IFwiNDAwZW1cIixcbiAgICAgICAgICBcImhlaWdodFwiOiBtYWtlRW0oaGVpZ2h0KSxcbiAgICAgICAgICBcInZpZXdCb3hcIjogXCIwIDAgXCIgKyB2aWV3Qm94V2lkdGggKyBcIiBcIiArIHZpZXdCb3hIZWlnaHQsXG4gICAgICAgICAgXCJwcmVzZXJ2ZUFzcGVjdFJhdGlvXCI6IGFsaWduc1tpXSArIFwiIHNsaWNlXCJcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHNwYW4gPSBidWlsZENvbW1vbi5tYWtlU3ZnU3Bhbihbd2lkdGhDbGFzc2VzW2ldXSwgW3N2Z05vZGVdLCBvcHRpb25zKTtcblxuICAgICAgICBpZiAobnVtU3ZnQ2hpbGRyZW4gPT09IDEpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3BhbixcbiAgICAgICAgICAgIG1pbldpZHRoLFxuICAgICAgICAgICAgaGVpZ2h0XG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzcGFuLnN0eWxlLmhlaWdodCA9IG1ha2VFbShoZWlnaHQpO1xuICAgICAgICAgIHNwYW5zLnB1c2goc3Bhbik7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3BhbjogYnVpbGRDb21tb24ubWFrZVNwYW4oW1wic3RyZXRjaHlcIl0sIHNwYW5zLCBvcHRpb25zKSxcbiAgICAgICAgbWluV2lkdGgsXG4gICAgICAgIGhlaWdodFxuICAgICAgfTtcbiAgICB9XG4gIH0gLy8gYnVpbGRTdmdTcGFuXygpXG5cblxuICBjb25zdCB7XG4gICAgc3BhbixcbiAgICBtaW5XaWR0aCxcbiAgICBoZWlnaHRcbiAgfSA9IGJ1aWxkU3ZnU3Bhbl8oKTsgLy8gTm90ZSB0aGF0IHdlIGFyZSByZXR1cm5pbmcgc3Bhbi5kZXB0aCA9IDAuXG4gIC8vIEFueSBhZGp1c3RtZW50cyByZWxhdGl2ZSB0byB0aGUgYmFzZWxpbmUgbXVzdCBiZSBkb25lIGluIGJ1aWxkSFRNTC5cblxuICBzcGFuLmhlaWdodCA9IGhlaWdodDtcbiAgc3Bhbi5zdHlsZS5oZWlnaHQgPSBtYWtlRW0oaGVpZ2h0KTtcblxuICBpZiAobWluV2lkdGggPiAwKSB7XG4gICAgc3Bhbi5zdHlsZS5taW5XaWR0aCA9IG1ha2VFbShtaW5XaWR0aCk7XG4gIH1cblxuICByZXR1cm4gc3Bhbjtcbn07XG5cbmNvbnN0IGVuY2xvc2VTcGFuID0gZnVuY3Rpb24gKGlubmVyLCBsYWJlbCwgdG9wUGFkLCBib3R0b21QYWQsIG9wdGlvbnMpIHtcbiAgLy8gUmV0dXJuIGFuIGltYWdlIHNwYW4gZm9yIFxcY2FuY2VsLCBcXGJjYW5jZWwsIFxceGNhbmNlbCwgXFxmYm94LCBvciBcXGFuZ2xcbiAgbGV0IGltZztcbiAgY29uc3QgdG90YWxIZWlnaHQgPSBpbm5lci5oZWlnaHQgKyBpbm5lci5kZXB0aCArIHRvcFBhZCArIGJvdHRvbVBhZDtcblxuICBpZiAoL2Zib3h8Y29sb3J8YW5nbC8udGVzdChsYWJlbCkpIHtcbiAgICBpbWcgPSBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJzdHJldGNoeVwiLCBsYWJlbF0sIFtdLCBvcHRpb25zKTtcblxuICAgIGlmIChsYWJlbCA9PT0gXCJmYm94XCIpIHtcbiAgICAgIGNvbnN0IGNvbG9yID0gb3B0aW9ucy5jb2xvciAmJiBvcHRpb25zLmdldENvbG9yKCk7XG5cbiAgICAgIGlmIChjb2xvcikge1xuICAgICAgICBpbWcuc3R5bGUuYm9yZGVyQ29sb3IgPSBjb2xvcjtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gXFxjYW5jZWwsIFxcYmNhbmNlbCwgb3IgXFx4Y2FuY2VsXG4gICAgLy8gU2luY2UgXFxjYW5jZWwncyBTVkcgaXMgaW5saW5lIGFuZCBpdCBvbWl0cyB0aGUgdmlld0JveCBhdHRyaWJ1dGUsXG4gICAgLy8gaXRzIHN0cm9rZS13aWR0aCB3aWxsIG5vdCB2YXJ5IHdpdGggc3BhbiBhcmVhLlxuICAgIGNvbnN0IGxpbmVzID0gW107XG5cbiAgICBpZiAoL15bYnhdY2FuY2VsJC8udGVzdChsYWJlbCkpIHtcbiAgICAgIGxpbmVzLnB1c2gobmV3IExpbmVOb2RlKHtcbiAgICAgICAgXCJ4MVwiOiBcIjBcIixcbiAgICAgICAgXCJ5MVwiOiBcIjBcIixcbiAgICAgICAgXCJ4MlwiOiBcIjEwMCVcIixcbiAgICAgICAgXCJ5MlwiOiBcIjEwMCVcIixcbiAgICAgICAgXCJzdHJva2Utd2lkdGhcIjogXCIwLjA0NmVtXCJcbiAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBpZiAoL154P2NhbmNlbCQvLnRlc3QobGFiZWwpKSB7XG4gICAgICBsaW5lcy5wdXNoKG5ldyBMaW5lTm9kZSh7XG4gICAgICAgIFwieDFcIjogXCIwXCIsXG4gICAgICAgIFwieTFcIjogXCIxMDAlXCIsXG4gICAgICAgIFwieDJcIjogXCIxMDAlXCIsXG4gICAgICAgIFwieTJcIjogXCIwXCIsXG4gICAgICAgIFwic3Ryb2tlLXdpZHRoXCI6IFwiMC4wNDZlbVwiXG4gICAgICB9KSk7XG4gICAgfVxuXG4gICAgY29uc3Qgc3ZnTm9kZSA9IG5ldyBTdmdOb2RlKGxpbmVzLCB7XG4gICAgICBcIndpZHRoXCI6IFwiMTAwJVwiLFxuICAgICAgXCJoZWlnaHRcIjogbWFrZUVtKHRvdGFsSGVpZ2h0KVxuICAgIH0pO1xuICAgIGltZyA9IGJ1aWxkQ29tbW9uLm1ha2VTdmdTcGFuKFtdLCBbc3ZnTm9kZV0sIG9wdGlvbnMpO1xuICB9XG5cbiAgaW1nLmhlaWdodCA9IHRvdGFsSGVpZ2h0O1xuICBpbWcuc3R5bGUuaGVpZ2h0ID0gbWFrZUVtKHRvdGFsSGVpZ2h0KTtcbiAgcmV0dXJuIGltZztcbn07XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHN0cmV0Y2h5ID0gKHtcbiAgZW5jbG9zZVNwYW4sXG4gIG1hdGhNTG5vZGUsXG4gIHN2Z1NwYW5cbn0pO1xuOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL3BhcnNlTm9kZS5qc1xuXG5cbi8qKlxuICogQXNzZXJ0cyB0aGF0IHRoZSBub2RlIGlzIG9mIHRoZSBnaXZlbiB0eXBlIGFuZCByZXR1cm5zIGl0IHdpdGggc3RyaWN0ZXJcbiAqIHR5cGluZy4gVGhyb3dzIGlmIHRoZSBub2RlJ3MgdHlwZSBkb2VzIG5vdCBtYXRjaC5cbiAqL1xuZnVuY3Rpb24gYXNzZXJ0Tm9kZVR5cGUobm9kZSwgdHlwZSkge1xuICBpZiAoIW5vZGUgfHwgbm9kZS50eXBlICE9PSB0eXBlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgbm9kZSBvZiB0eXBlIFwiICsgdHlwZSArIFwiLCBidXQgZ290IFwiICsgKG5vZGUgPyBcIm5vZGUgb2YgdHlwZSBcIiArIG5vZGUudHlwZSA6IFN0cmluZyhub2RlKSkpO1xuICB9IC8vICRGbG93Rml4TWUsID49MC4xMjVcblxuXG4gIHJldHVybiBub2RlO1xufVxuLyoqXG4gKiBSZXR1cm5zIHRoZSBub2RlIG1vcmUgc3RyaWN0bHkgdHlwZWQgaWZmIGl0IGlzIG9mIHRoZSBnaXZlbiB0eXBlLiBPdGhlcndpc2UsXG4gKiByZXR1cm5zIG51bGwuXG4gKi9cblxuZnVuY3Rpb24gYXNzZXJ0U3ltYm9sTm9kZVR5cGUobm9kZSkge1xuICBjb25zdCB0eXBlZE5vZGUgPSBjaGVja1N5bWJvbE5vZGVUeXBlKG5vZGUpO1xuXG4gIGlmICghdHlwZWROb2RlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgbm9kZSBvZiBzeW1ib2wgZ3JvdXAgdHlwZSwgYnV0IGdvdCBcIiArIChub2RlID8gXCJub2RlIG9mIHR5cGUgXCIgKyBub2RlLnR5cGUgOiBTdHJpbmcobm9kZSkpKTtcbiAgfVxuXG4gIHJldHVybiB0eXBlZE5vZGU7XG59XG4vKipcbiAqIFJldHVybnMgdGhlIG5vZGUgbW9yZSBzdHJpY3RseSB0eXBlZCBpZmYgaXQgaXMgb2YgdGhlIGdpdmVuIHR5cGUuIE90aGVyd2lzZSxcbiAqIHJldHVybnMgbnVsbC5cbiAqL1xuXG5mdW5jdGlvbiBjaGVja1N5bWJvbE5vZGVUeXBlKG5vZGUpIHtcbiAgaWYgKG5vZGUgJiYgKG5vZGUudHlwZSA9PT0gXCJhdG9tXCIgfHwgTk9OX0FUT01TLmhhc093blByb3BlcnR5KG5vZGUudHlwZSkpKSB7XG4gICAgLy8gJEZsb3dGaXhNZVxuICAgIHJldHVybiBub2RlO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG47Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb25zL2FjY2VudC5qc1xuXG5cblxuXG5cblxuXG5cblxuXG4vLyBOT1RFOiBVbmxpa2UgbW9zdCBgaHRtbEJ1aWxkZXJgcywgdGhpcyBvbmUgaGFuZGxlcyBub3Qgb25seSBcImFjY2VudFwiLCBidXRcbi8vIGFsc28gXCJzdXBzdWJcIiBzaW5jZSBhbiBhY2NlbnQgY2FuIGFmZmVjdCBzdXBlci9zdWJzY3JpcHRpbmcuXG5jb25zdCBodG1sQnVpbGRlciA9IChncnAsIG9wdGlvbnMpID0+IHtcbiAgLy8gQWNjZW50cyBhcmUgaGFuZGxlZCBpbiB0aGUgVGVYYm9vayBwZy4gNDQzLCBydWxlIDEyLlxuICBsZXQgYmFzZTtcbiAgbGV0IGdyb3VwO1xuICBsZXQgc3VwU3ViR3JvdXA7XG5cbiAgaWYgKGdycCAmJiBncnAudHlwZSA9PT0gXCJzdXBzdWJcIikge1xuICAgIC8vIElmIG91ciBiYXNlIGlzIGEgY2hhcmFjdGVyIGJveCwgYW5kIHdlIGhhdmUgc3VwZXJzY3JpcHRzIGFuZFxuICAgIC8vIHN1YnNjcmlwdHMsIHRoZSBzdXBzdWIgd2lsbCBkZWZlciB0byB1cy4gSW4gcGFydGljdWxhciwgd2Ugd2FudFxuICAgIC8vIHRvIGF0dGFjaCB0aGUgc3VwZXJzY3JpcHRzIGFuZCBzdWJzY3JpcHRzIHRvIHRoZSBpbm5lciBib2R5IChzb1xuICAgIC8vIHRoYXQgdGhlIHBvc2l0aW9uIG9mIHRoZSBzdXBlcnNjcmlwdHMgYW5kIHN1YnNjcmlwdHMgd29uJ3QgYmVcbiAgICAvLyBhZmZlY3RlZCBieSB0aGUgaGVpZ2h0IG9mIHRoZSBhY2NlbnQpLiBXZSBhY2NvbXBsaXNoIHRoaXMgYnlcbiAgICAvLyBzdGlja2luZyB0aGUgYmFzZSBvZiB0aGUgYWNjZW50IGludG8gdGhlIGJhc2Ugb2YgdGhlIHN1cHN1YiwgYW5kXG4gICAgLy8gcmVuZGVyaW5nIHRoYXQsIHdoaWxlIGtlZXBpbmcgdHJhY2sgb2Ygd2hlcmUgdGhlIGFjY2VudCBpcy5cbiAgICAvLyBUaGUgcmVhbCBhY2NlbnQgZ3JvdXAgaXMgdGhlIGJhc2Ugb2YgdGhlIHN1cHN1YiBncm91cFxuICAgIGdyb3VwID0gYXNzZXJ0Tm9kZVR5cGUoZ3JwLmJhc2UsIFwiYWNjZW50XCIpOyAvLyBUaGUgY2hhcmFjdGVyIGJveCBpcyB0aGUgYmFzZSBvZiB0aGUgYWNjZW50IGdyb3VwXG5cbiAgICBiYXNlID0gZ3JvdXAuYmFzZTsgLy8gU3RpY2sgdGhlIGNoYXJhY3RlciBib3ggaW50byB0aGUgYmFzZSBvZiB0aGUgc3Vwc3ViIGdyb3VwXG5cbiAgICBncnAuYmFzZSA9IGJhc2U7IC8vIFJlcmVuZGVyIHRoZSBzdXBzdWIgZ3JvdXAgd2l0aCBpdHMgbmV3IGJhc2UsIGFuZCBzdG9yZSB0aGF0XG4gICAgLy8gcmVzdWx0LlxuXG4gICAgc3VwU3ViR3JvdXAgPSBhc3NlcnRTcGFuKGJ1aWxkR3JvdXAoZ3JwLCBvcHRpb25zKSk7IC8vIHJlc2V0IG9yaWdpbmFsIGJhc2VcblxuICAgIGdycC5iYXNlID0gZ3JvdXA7XG4gIH0gZWxzZSB7XG4gICAgZ3JvdXAgPSBhc3NlcnROb2RlVHlwZShncnAsIFwiYWNjZW50XCIpO1xuICAgIGJhc2UgPSBncm91cC5iYXNlO1xuICB9IC8vIEJ1aWxkIHRoZSBiYXNlIGdyb3VwXG5cblxuICBjb25zdCBib2R5ID0gYnVpbGRHcm91cChiYXNlLCBvcHRpb25zLmhhdmluZ0NyYW1wZWRTdHlsZSgpKTsgLy8gRG9lcyB0aGUgYWNjZW50IG5lZWQgdG8gc2hpZnQgZm9yIHRoZSBza2V3IG9mIGEgY2hhcmFjdGVyP1xuXG4gIGNvbnN0IG11c3RTaGlmdCA9IGdyb3VwLmlzU2hpZnR5ICYmIHV0aWxzLmlzQ2hhcmFjdGVyQm94KGJhc2UpOyAvLyBDYWxjdWxhdGUgdGhlIHNrZXcgb2YgdGhlIGFjY2VudC4gVGhpcyBpcyBiYXNlZCBvbiB0aGUgbGluZSBcIklmIHRoZVxuICAvLyBudWNsZXVzIGlzIG5vdCBhIHNpbmdsZSBjaGFyYWN0ZXIsIGxldCBzID0gMDsgb3RoZXJ3aXNlIHNldCBzIHRvIHRoZVxuICAvLyBrZXJuIGFtb3VudCBmb3IgdGhlIG51Y2xldXMgZm9sbG93ZWQgYnkgdGhlIFxcc2tld2NoYXIgb2YgaXRzIGZvbnQuXCJcbiAgLy8gTm90ZSB0aGF0IG91ciBza2V3IG1ldHJpY3MgYXJlIGp1c3QgdGhlIGtlcm4gYmV0d2VlbiBlYWNoIGNoYXJhY3RlclxuICAvLyBhbmQgdGhlIHNrZXdjaGFyLlxuXG4gIGxldCBza2V3ID0gMDtcblxuICBpZiAobXVzdFNoaWZ0KSB7XG4gICAgLy8gSWYgdGhlIGJhc2UgaXMgYSBjaGFyYWN0ZXIgYm94LCB0aGVuIHdlIHdhbnQgdGhlIHNrZXcgb2YgdGhlXG4gICAgLy8gaW5uZXJtb3N0IGNoYXJhY3Rlci4gVG8gZG8gdGhhdCwgd2UgZmluZCB0aGUgaW5uZXJtb3N0IGNoYXJhY3RlcjpcbiAgICBjb25zdCBiYXNlQ2hhciA9IHV0aWxzLmdldEJhc2VFbGVtKGJhc2UpOyAvLyBUaGVuLCB3ZSByZW5kZXIgaXRzIGdyb3VwIHRvIGdldCB0aGUgc3ltYm9sIGluc2lkZSBpdFxuXG4gICAgY29uc3QgYmFzZUdyb3VwID0gYnVpbGRHcm91cChiYXNlQ2hhciwgb3B0aW9ucy5oYXZpbmdDcmFtcGVkU3R5bGUoKSk7IC8vIEZpbmFsbHksIHdlIHB1bGwgdGhlIHNrZXcgb2ZmIG9mIHRoZSBzeW1ib2wuXG5cbiAgICBza2V3ID0gYXNzZXJ0U3ltYm9sRG9tTm9kZShiYXNlR3JvdXApLnNrZXc7IC8vIE5vdGUgdGhhdCB3ZSBub3cgdGhyb3cgYXdheSBiYXNlR3JvdXAsIGJlY2F1c2UgdGhlIGxheWVycyB3ZVxuICAgIC8vIHJlbW92ZWQgd2l0aCBnZXRCYXNlRWxlbSBtaWdodCBjb250YWluIHRoaW5ncyBsaWtlIFxcY29sb3Igd2hpY2hcbiAgICAvLyB3ZSBjYW4ndCBnZXQgcmlkIG9mLlxuICAgIC8vIFRPRE8oZW1pbHkpOiBGaW5kIGEgYmV0dGVyIHdheSB0byBnZXQgdGhlIHNrZXdcbiAgfVxuXG4gIGNvbnN0IGFjY2VudEJlbG93ID0gZ3JvdXAubGFiZWwgPT09IFwiXFxcXGNcIjsgLy8gY2FsY3VsYXRlIHRoZSBhbW91bnQgb2Ygc3BhY2UgYmV0d2VlbiB0aGUgYm9keSBhbmQgdGhlIGFjY2VudFxuXG4gIGxldCBjbGVhcmFuY2UgPSBhY2NlbnRCZWxvdyA/IGJvZHkuaGVpZ2h0ICsgYm9keS5kZXB0aCA6IE1hdGgubWluKGJvZHkuaGVpZ2h0LCBvcHRpb25zLmZvbnRNZXRyaWNzKCkueEhlaWdodCk7IC8vIEJ1aWxkIHRoZSBhY2NlbnRcblxuICBsZXQgYWNjZW50Qm9keTtcblxuICBpZiAoIWdyb3VwLmlzU3RyZXRjaHkpIHtcbiAgICBsZXQgYWNjZW50O1xuICAgIGxldCB3aWR0aDtcblxuICAgIGlmIChncm91cC5sYWJlbCA9PT0gXCJcXFxcdmVjXCIpIHtcbiAgICAgIC8vIEJlZm9yZSB2ZXJzaW9uIDAuOSwgXFx2ZWMgdXNlZCB0aGUgY29tYmluaW5nIGZvbnQgZ2x5cGggVSsyMEQ3LlxuICAgICAgLy8gQnV0IGJyb3dzZXJzLCBlc3BlY2lhbGx5IFNhZmFyaSwgYXJlIG5vdCBjb25zaXN0ZW50IGluIGhvdyB0aGV5XG4gICAgICAvLyByZW5kZXIgY29tYmluaW5nIGNoYXJhY3RlcnMgd2hlbiBub3QgcHJlY2VkZWQgYnkgYSBjaGFyYWN0ZXIuXG4gICAgICAvLyBTbyBub3cgd2UgdXNlIGFuIFNWRy5cbiAgICAgIC8vIElmIFNhZmFyaSByZWZvcm1zLCB3ZSBzaG91bGQgY29uc2lkZXIgcmV2ZXJ0aW5nIHRvIHRoZSBnbHlwaC5cbiAgICAgIGFjY2VudCA9IGJ1aWxkQ29tbW9uLnN0YXRpY1N2ZyhcInZlY1wiLCBvcHRpb25zKTtcbiAgICAgIHdpZHRoID0gYnVpbGRDb21tb24uc3ZnRGF0YS52ZWNbMV07XG4gICAgfSBlbHNlIHtcbiAgICAgIGFjY2VudCA9IGJ1aWxkQ29tbW9uLm1ha2VPcmQoe1xuICAgICAgICBtb2RlOiBncm91cC5tb2RlLFxuICAgICAgICB0ZXh0OiBncm91cC5sYWJlbFxuICAgICAgfSwgb3B0aW9ucywgXCJ0ZXh0b3JkXCIpO1xuICAgICAgYWNjZW50ID0gYXNzZXJ0U3ltYm9sRG9tTm9kZShhY2NlbnQpOyAvLyBSZW1vdmUgdGhlIGl0YWxpYyBjb3JyZWN0aW9uIG9mIHRoZSBhY2NlbnQsIGJlY2F1c2UgaXQgb25seSBzZXJ2ZXMgdG9cbiAgICAgIC8vIHNoaWZ0IHRoZSBhY2NlbnQgb3ZlciB0byBhIHBsYWNlIHdlIGRvbid0IHdhbnQuXG5cbiAgICAgIGFjY2VudC5pdGFsaWMgPSAwO1xuICAgICAgd2lkdGggPSBhY2NlbnQud2lkdGg7XG5cbiAgICAgIGlmIChhY2NlbnRCZWxvdykge1xuICAgICAgICBjbGVhcmFuY2UgKz0gYWNjZW50LmRlcHRoO1xuICAgICAgfVxuICAgIH1cblxuICAgIGFjY2VudEJvZHkgPSBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJhY2NlbnQtYm9keVwiXSwgW2FjY2VudF0pOyAvLyBcIkZ1bGxcIiBhY2NlbnRzIGV4cGFuZCB0aGUgd2lkdGggb2YgdGhlIHJlc3VsdGluZyBzeW1ib2wgdG8gYmVcbiAgICAvLyBhdCBsZWFzdCB0aGUgd2lkdGggb2YgdGhlIGFjY2VudCwgYW5kIG92ZXJsYXAgZGlyZWN0bHkgb250byB0aGVcbiAgICAvLyBjaGFyYWN0ZXIgd2l0aG91dCBhbnkgdmVydGljYWwgb2Zmc2V0LlxuXG4gICAgY29uc3QgYWNjZW50RnVsbCA9IGdyb3VwLmxhYmVsID09PSBcIlxcXFx0ZXh0Y2lyY2xlZFwiO1xuXG4gICAgaWYgKGFjY2VudEZ1bGwpIHtcbiAgICAgIGFjY2VudEJvZHkuY2xhc3Nlcy5wdXNoKCdhY2NlbnQtZnVsbCcpO1xuICAgICAgY2xlYXJhbmNlID0gYm9keS5oZWlnaHQ7XG4gICAgfSAvLyBTaGlmdCB0aGUgYWNjZW50IG92ZXIgYnkgdGhlIHNrZXcuXG5cblxuICAgIGxldCBsZWZ0ID0gc2tldzsgLy8gQ1NTIGRlZmluZXMgYC5rYXRleCAuYWNjZW50IC5hY2NlbnQtYm9keTpub3QoLmFjY2VudC1mdWxsKSB7IHdpZHRoOiAwIH1gXG4gICAgLy8gc28gdGhhdCB0aGUgYWNjZW50IGRvZXNuJ3QgY29udHJpYnV0ZSB0byB0aGUgYm91bmRpbmcgYm94LlxuICAgIC8vIFdlIG5lZWQgdG8gc2hpZnQgdGhlIGNoYXJhY3RlciBieSBpdHMgd2lkdGggKGVmZmVjdGl2ZWx5IGhhbGZcbiAgICAvLyBpdHMgd2lkdGgpIHRvIGNvbXBlbnNhdGUuXG5cbiAgICBpZiAoIWFjY2VudEZ1bGwpIHtcbiAgICAgIGxlZnQgLT0gd2lkdGggLyAyO1xuICAgIH1cblxuICAgIGFjY2VudEJvZHkuc3R5bGUubGVmdCA9IG1ha2VFbShsZWZ0KTsgLy8gXFx0ZXh0Y2lyY2xlZCB1c2VzIHRoZSBcXGJpZ2NpcmMgZ2x5cGgsIHNvIGl0IG5lZWRzIHNvbWVcbiAgICAvLyB2ZXJ0aWNhbCBhZGp1c3RtZW50IHRvIG1hdGNoIExhVGVYLlxuXG4gICAgaWYgKGdyb3VwLmxhYmVsID09PSBcIlxcXFx0ZXh0Y2lyY2xlZFwiKSB7XG4gICAgICBhY2NlbnRCb2R5LnN0eWxlLnRvcCA9IFwiLjJlbVwiO1xuICAgIH1cblxuICAgIGFjY2VudEJvZHkgPSBidWlsZENvbW1vbi5tYWtlVkxpc3Qoe1xuICAgICAgcG9zaXRpb25UeXBlOiBcImZpcnN0QmFzZWxpbmVcIixcbiAgICAgIGNoaWxkcmVuOiBbe1xuICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgZWxlbTogYm9keVxuICAgICAgfSwge1xuICAgICAgICB0eXBlOiBcImtlcm5cIixcbiAgICAgICAgc2l6ZTogLWNsZWFyYW5jZVxuICAgICAgfSwge1xuICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgZWxlbTogYWNjZW50Qm9keVxuICAgICAgfV1cbiAgICB9LCBvcHRpb25zKTtcbiAgfSBlbHNlIHtcbiAgICBhY2NlbnRCb2R5ID0gc3RyZXRjaHkuc3ZnU3Bhbihncm91cCwgb3B0aW9ucyk7XG4gICAgYWNjZW50Qm9keSA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICBwb3NpdGlvblR5cGU6IFwiZmlyc3RCYXNlbGluZVwiLFxuICAgICAgY2hpbGRyZW46IFt7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBib2R5XG4gICAgICB9LCB7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBhY2NlbnRCb2R5LFxuICAgICAgICB3cmFwcGVyQ2xhc3NlczogW1wic3ZnLWFsaWduXCJdLFxuICAgICAgICB3cmFwcGVyU3R5bGU6IHNrZXcgPiAwID8ge1xuICAgICAgICAgIHdpZHRoOiBcImNhbGMoMTAwJSAtIFwiICsgbWFrZUVtKDIgKiBza2V3KSArIFwiKVwiLFxuICAgICAgICAgIG1hcmdpbkxlZnQ6IG1ha2VFbSgyICogc2tldylcbiAgICAgICAgfSA6IHVuZGVmaW5lZFxuICAgICAgfV1cbiAgICB9LCBvcHRpb25zKTtcbiAgfVxuXG4gIGNvbnN0IGFjY2VudFdyYXAgPSBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJtb3JkXCIsIFwiYWNjZW50XCJdLCBbYWNjZW50Qm9keV0sIG9wdGlvbnMpO1xuXG4gIGlmIChzdXBTdWJHcm91cCkge1xuICAgIC8vIEhlcmUsIHdlIHJlcGxhY2UgdGhlIFwiYmFzZVwiIGNoaWxkIG9mIHRoZSBzdXBzdWIgd2l0aCBvdXIgbmV3bHlcbiAgICAvLyBnZW5lcmF0ZWQgYWNjZW50LlxuICAgIHN1cFN1Ykdyb3VwLmNoaWxkcmVuWzBdID0gYWNjZW50V3JhcDsgLy8gU2luY2Ugd2UgZG9uJ3QgcmVydW4gdGhlIGhlaWdodCBjYWxjdWxhdGlvbiBhZnRlciByZXBsYWNpbmcgdGhlXG4gICAgLy8gYWNjZW50LCB3ZSBtYW51YWxseSByZWNhbGN1bGF0ZSBoZWlnaHQuXG5cbiAgICBzdXBTdWJHcm91cC5oZWlnaHQgPSBNYXRoLm1heChhY2NlbnRXcmFwLmhlaWdodCwgc3VwU3ViR3JvdXAuaGVpZ2h0KTsgLy8gQWNjZW50cyBzaG91bGQgYWx3YXlzIGJlIG9yZHMsIGV2ZW4gd2hlbiB0aGVpciBpbm5hcmRzIGFyZSBub3QuXG5cbiAgICBzdXBTdWJHcm91cC5jbGFzc2VzWzBdID0gXCJtb3JkXCI7XG4gICAgcmV0dXJuIHN1cFN1Ykdyb3VwO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBhY2NlbnRXcmFwO1xuICB9XG59O1xuXG5jb25zdCBtYXRobWxCdWlsZGVyID0gKGdyb3VwLCBvcHRpb25zKSA9PiB7XG4gIGNvbnN0IGFjY2VudE5vZGUgPSBncm91cC5pc1N0cmV0Y2h5ID8gc3RyZXRjaHkubWF0aE1Mbm9kZShncm91cC5sYWJlbCkgOiBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1vXCIsIFttYWtlVGV4dChncm91cC5sYWJlbCwgZ3JvdXAubW9kZSldKTtcbiAgY29uc3Qgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibW92ZXJcIiwgW2J1aWxkTWF0aE1MX2J1aWxkR3JvdXAoZ3JvdXAuYmFzZSwgb3B0aW9ucyksIGFjY2VudE5vZGVdKTtcbiAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJhY2NlbnRcIiwgXCJ0cnVlXCIpO1xuICByZXR1cm4gbm9kZTtcbn07XG5cbmNvbnN0IE5PTl9TVFJFVENIWV9BQ0NFTlRfUkVHRVggPSBuZXcgUmVnRXhwKFtcIlxcXFxhY3V0ZVwiLCBcIlxcXFxncmF2ZVwiLCBcIlxcXFxkZG90XCIsIFwiXFxcXHRpbGRlXCIsIFwiXFxcXGJhclwiLCBcIlxcXFxicmV2ZVwiLCBcIlxcXFxjaGVja1wiLCBcIlxcXFxoYXRcIiwgXCJcXFxcdmVjXCIsIFwiXFxcXGRvdFwiLCBcIlxcXFxtYXRocmluZ1wiXS5tYXAoYWNjZW50ID0+IFwiXFxcXFwiICsgYWNjZW50KS5qb2luKFwifFwiKSk7IC8vIEFjY2VudHNcblxuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcImFjY2VudFwiLFxuICBuYW1lczogW1wiXFxcXGFjdXRlXCIsIFwiXFxcXGdyYXZlXCIsIFwiXFxcXGRkb3RcIiwgXCJcXFxcdGlsZGVcIiwgXCJcXFxcYmFyXCIsIFwiXFxcXGJyZXZlXCIsIFwiXFxcXGNoZWNrXCIsIFwiXFxcXGhhdFwiLCBcIlxcXFx2ZWNcIiwgXCJcXFxcZG90XCIsIFwiXFxcXG1hdGhyaW5nXCIsIFwiXFxcXHdpZGVjaGVja1wiLCBcIlxcXFx3aWRlaGF0XCIsIFwiXFxcXHdpZGV0aWxkZVwiLCBcIlxcXFxvdmVycmlnaHRhcnJvd1wiLCBcIlxcXFxvdmVybGVmdGFycm93XCIsIFwiXFxcXE92ZXJyaWdodGFycm93XCIsIFwiXFxcXG92ZXJsZWZ0cmlnaHRhcnJvd1wiLCBcIlxcXFxvdmVyZ3JvdXBcIiwgXCJcXFxcb3ZlcmxpbmVzZWdtZW50XCIsIFwiXFxcXG92ZXJsZWZ0aGFycG9vblwiLCBcIlxcXFxvdmVycmlnaHRoYXJwb29uXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDFcbiAgfSxcbiAgaGFuZGxlcjogKGNvbnRleHQsIGFyZ3MpID0+IHtcbiAgICBjb25zdCBiYXNlID0gbm9ybWFsaXplQXJndW1lbnQoYXJnc1swXSk7XG4gICAgY29uc3QgaXNTdHJldGNoeSA9ICFOT05fU1RSRVRDSFlfQUNDRU5UX1JFR0VYLnRlc3QoY29udGV4dC5mdW5jTmFtZSk7XG4gICAgY29uc3QgaXNTaGlmdHkgPSAhaXNTdHJldGNoeSB8fCBjb250ZXh0LmZ1bmNOYW1lID09PSBcIlxcXFx3aWRlaGF0XCIgfHwgY29udGV4dC5mdW5jTmFtZSA9PT0gXCJcXFxcd2lkZXRpbGRlXCIgfHwgY29udGV4dC5mdW5jTmFtZSA9PT0gXCJcXFxcd2lkZWNoZWNrXCI7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiYWNjZW50XCIsXG4gICAgICBtb2RlOiBjb250ZXh0LnBhcnNlci5tb2RlLFxuICAgICAgbGFiZWw6IGNvbnRleHQuZnVuY05hbWUsXG4gICAgICBpc1N0cmV0Y2h5OiBpc1N0cmV0Y2h5LFxuICAgICAgaXNTaGlmdHk6IGlzU2hpZnR5LFxuICAgICAgYmFzZTogYmFzZVxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyLFxuICBtYXRobWxCdWlsZGVyXG59KTsgLy8gVGV4dC1tb2RlIGFjY2VudHNcblxuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcImFjY2VudFwiLFxuICBuYW1lczogW1wiXFxcXCdcIiwgXCJcXFxcYFwiLCBcIlxcXFxeXCIsIFwiXFxcXH5cIiwgXCJcXFxcPVwiLCBcIlxcXFx1XCIsIFwiXFxcXC5cIiwgJ1xcXFxcIicsIFwiXFxcXGNcIiwgXCJcXFxcclwiLCBcIlxcXFxIXCIsIFwiXFxcXHZcIiwgXCJcXFxcdGV4dGNpcmNsZWRcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMSxcbiAgICBhbGxvd2VkSW5UZXh0OiB0cnVlLFxuICAgIGFsbG93ZWRJbk1hdGg6IHRydWUsXG4gICAgLy8gdW5sZXNzIGluIHN0cmljdCBtb2RlXG4gICAgYXJnVHlwZXM6IFtcInByaW1pdGl2ZVwiXVxuICB9LFxuICBoYW5kbGVyOiAoY29udGV4dCwgYXJncykgPT4ge1xuICAgIGNvbnN0IGJhc2UgPSBhcmdzWzBdO1xuICAgIGxldCBtb2RlID0gY29udGV4dC5wYXJzZXIubW9kZTtcblxuICAgIGlmIChtb2RlID09PSBcIm1hdGhcIikge1xuICAgICAgY29udGV4dC5wYXJzZXIuc2V0dGluZ3MucmVwb3J0Tm9uc3RyaWN0KFwibWF0aFZzVGV4dEFjY2VudHNcIiwgXCJMYVRlWCdzIGFjY2VudCBcIiArIGNvbnRleHQuZnVuY05hbWUgKyBcIiB3b3JrcyBvbmx5IGluIHRleHQgbW9kZVwiKTtcbiAgICAgIG1vZGUgPSBcInRleHRcIjtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJhY2NlbnRcIixcbiAgICAgIG1vZGU6IG1vZGUsXG4gICAgICBsYWJlbDogY29udGV4dC5mdW5jTmFtZSxcbiAgICAgIGlzU3RyZXRjaHk6IGZhbHNlLFxuICAgICAgaXNTaGlmdHk6IHRydWUsXG4gICAgICBiYXNlOiBiYXNlXG4gICAgfTtcbiAgfSxcbiAgaHRtbEJ1aWxkZXIsXG4gIG1hdGhtbEJ1aWxkZXJcbn0pO1xuOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9ucy9hY2NlbnR1bmRlci5qc1xuLy8gSG9yaXpvbnRhbCBvdmVybGFwIGZ1bmN0aW9uc1xuXG5cblxuXG5cblxuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcImFjY2VudFVuZGVyXCIsXG4gIG5hbWVzOiBbXCJcXFxcdW5kZXJsZWZ0YXJyb3dcIiwgXCJcXFxcdW5kZXJyaWdodGFycm93XCIsIFwiXFxcXHVuZGVybGVmdHJpZ2h0YXJyb3dcIiwgXCJcXFxcdW5kZXJncm91cFwiLCBcIlxcXFx1bmRlcmxpbmVzZWdtZW50XCIsIFwiXFxcXHV0aWxkZVwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxXG4gIH0sXG4gIGhhbmRsZXI6IChfcmVmLCBhcmdzKSA9PiB7XG4gICAgbGV0IHtcbiAgICAgIHBhcnNlcixcbiAgICAgIGZ1bmNOYW1lXG4gICAgfSA9IF9yZWY7XG4gICAgY29uc3QgYmFzZSA9IGFyZ3NbMF07XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiYWNjZW50VW5kZXJcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgbGFiZWw6IGZ1bmNOYW1lLFxuICAgICAgYmFzZTogYmFzZVxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiAoZ3JvdXAsIG9wdGlvbnMpID0+IHtcbiAgICAvLyBUcmVhdCB1bmRlciBhY2NlbnRzIG11Y2ggbGlrZSB1bmRlcmxpbmVzLlxuICAgIGNvbnN0IGlubmVyR3JvdXAgPSBidWlsZEdyb3VwKGdyb3VwLmJhc2UsIG9wdGlvbnMpO1xuICAgIGNvbnN0IGFjY2VudEJvZHkgPSBzdHJldGNoeS5zdmdTcGFuKGdyb3VwLCBvcHRpb25zKTtcbiAgICBjb25zdCBrZXJuID0gZ3JvdXAubGFiZWwgPT09IFwiXFxcXHV0aWxkZVwiID8gMC4xMiA6IDA7IC8vIEdlbmVyYXRlIHRoZSB2bGlzdCwgd2l0aCB0aGUgYXBwcm9wcmlhdGUga2VybnNcblxuICAgIGNvbnN0IHZsaXN0ID0gYnVpbGRDb21tb24ubWFrZVZMaXN0KHtcbiAgICAgIHBvc2l0aW9uVHlwZTogXCJ0b3BcIixcbiAgICAgIHBvc2l0aW9uRGF0YTogaW5uZXJHcm91cC5oZWlnaHQsXG4gICAgICBjaGlsZHJlbjogW3tcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IGFjY2VudEJvZHksXG4gICAgICAgIHdyYXBwZXJDbGFzc2VzOiBbXCJzdmctYWxpZ25cIl1cbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJrZXJuXCIsXG4gICAgICAgIHNpemU6IGtlcm5cbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IGlubmVyR3JvdXBcbiAgICAgIH1dXG4gICAgfSwgb3B0aW9ucyk7XG4gICAgcmV0dXJuIGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcIm1vcmRcIiwgXCJhY2NlbnR1bmRlclwiXSwgW3ZsaXN0XSwgb3B0aW9ucyk7XG4gIH0sXG4gIG1hdGhtbEJ1aWxkZXI6IChncm91cCwgb3B0aW9ucykgPT4ge1xuICAgIGNvbnN0IGFjY2VudE5vZGUgPSBzdHJldGNoeS5tYXRoTUxub2RlKGdyb3VwLmxhYmVsKTtcbiAgICBjb25zdCBub2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtdW5kZXJcIiwgW2J1aWxkTWF0aE1MX2J1aWxkR3JvdXAoZ3JvdXAuYmFzZSwgb3B0aW9ucyksIGFjY2VudE5vZGVdKTtcbiAgICBub2RlLnNldEF0dHJpYnV0ZShcImFjY2VudHVuZGVyXCIsIFwidHJ1ZVwiKTtcbiAgICByZXR1cm4gbm9kZTtcbiAgfVxufSk7XG47Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb25zL2Fycm93LmpzXG5cblxuXG5cblxuXG5cbi8vIEhlbHBlciBmdW5jdGlvblxuY29uc3QgcGFkZGVkTm9kZSA9IGdyb3VwID0+IHtcbiAgY29uc3Qgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXBhZGRlZFwiLCBncm91cCA/IFtncm91cF0gOiBbXSk7XG4gIG5vZGUuc2V0QXR0cmlidXRlKFwid2lkdGhcIiwgXCIrMC42ZW1cIik7XG4gIG5vZGUuc2V0QXR0cmlidXRlKFwibHNwYWNlXCIsIFwiMC4zZW1cIik7XG4gIHJldHVybiBub2RlO1xufTsgLy8gU3RyZXRjaHkgYXJyb3dzIHdpdGggYW4gb3B0aW9uYWwgYXJndW1lbnRcblxuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwieEFycm93XCIsXG4gIG5hbWVzOiBbXCJcXFxceGxlZnRhcnJvd1wiLCBcIlxcXFx4cmlnaHRhcnJvd1wiLCBcIlxcXFx4TGVmdGFycm93XCIsIFwiXFxcXHhSaWdodGFycm93XCIsIFwiXFxcXHhsZWZ0cmlnaHRhcnJvd1wiLCBcIlxcXFx4TGVmdHJpZ2h0YXJyb3dcIiwgXCJcXFxceGhvb2tsZWZ0YXJyb3dcIiwgXCJcXFxceGhvb2tyaWdodGFycm93XCIsIFwiXFxcXHhtYXBzdG9cIiwgXCJcXFxceHJpZ2h0aGFycG9vbmRvd25cIiwgXCJcXFxceHJpZ2h0aGFycG9vbnVwXCIsIFwiXFxcXHhsZWZ0aGFycG9vbmRvd25cIiwgXCJcXFxceGxlZnRoYXJwb29udXBcIiwgXCJcXFxceHJpZ2h0bGVmdGhhcnBvb25zXCIsIFwiXFxcXHhsZWZ0cmlnaHRoYXJwb29uc1wiLCBcIlxcXFx4bG9uZ2VxdWFsXCIsIFwiXFxcXHh0d29oZWFkcmlnaHRhcnJvd1wiLCBcIlxcXFx4dHdvaGVhZGxlZnRhcnJvd1wiLCBcIlxcXFx4dG9mcm9tXCIsIC8vIFRoZSBuZXh0IDMgZnVuY3Rpb25zIGFyZSBoZXJlIHRvIHN1cHBvcnQgdGhlIG1oY2hlbSBleHRlbnNpb24uXG4gIC8vIERpcmVjdCB1c2Ugb2YgdGhlc2UgZnVuY3Rpb25zIGlzIGRpc2NvdXJhZ2VkIGFuZCBtYXkgYnJlYWsgc29tZWRheS5cbiAgXCJcXFxceHJpZ2h0bGVmdGFycm93c1wiLCBcIlxcXFx4cmlnaHRlcXVpbGlicml1bVwiLCBcIlxcXFx4bGVmdGVxdWlsaWJyaXVtXCIsIC8vIFRoZSBuZXh0IDMgZnVuY3Rpb25zIGFyZSBoZXJlIG9ubHkgdG8gc3VwcG9ydCB0aGUge0NEfSBlbnZpcm9ubWVudC5cbiAgXCJcXFxcXFxcXGNkcmlnaHRhcnJvd1wiLCBcIlxcXFxcXFxcY2RsZWZ0YXJyb3dcIiwgXCJcXFxcXFxcXGNkbG9uZ2VxdWFsXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDEsXG4gICAgbnVtT3B0aW9uYWxBcmdzOiAxXG4gIH0sXG5cbiAgaGFuZGxlcihfcmVmLCBhcmdzLCBvcHRBcmdzKSB7XG4gICAgbGV0IHtcbiAgICAgIHBhcnNlcixcbiAgICAgIGZ1bmNOYW1lXG4gICAgfSA9IF9yZWY7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwieEFycm93XCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGxhYmVsOiBmdW5jTmFtZSxcbiAgICAgIGJvZHk6IGFyZ3NbMF0sXG4gICAgICBiZWxvdzogb3B0QXJnc1swXVxuICAgIH07XG4gIH0sXG5cbiAgLy8gRmxvdyBpcyB1bmFibGUgdG8gY29ycmVjdGx5IGluZmVyIHRoZSB0eXBlIG9mIGBncm91cGAsIGV2ZW4gdGhvdWdoIGl0J3NcbiAgLy8gdW5hbWJpZ3VvdXNseSBkZXRlcm1pbmVkIGZyb20gdGhlIHBhc3NlZC1pbiBgdHlwZWAgYWJvdmUuXG4gIGh0bWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgY29uc3Qgc3R5bGUgPSBvcHRpb25zLnN0eWxlOyAvLyBCdWlsZCB0aGUgYXJndW1lbnQgZ3JvdXBzIGluIHRoZSBhcHByb3ByaWF0ZSBzdHlsZS5cbiAgICAvLyBSZWY6IGFtc21hdGguZHR4OiAgIFxcaGJveHskXFxzY3JpcHRzdHlsZVxcbWtlcm4jM211eyM2fVxcbWtlcm4jNG11JH0lXG4gICAgLy8gU29tZSBncm91cHMgY2FuIHJldHVybiBkb2N1bWVudCBmcmFnbWVudHMuICBIYW5kbGUgdGhvc2UgYnkgd3JhcHBpbmdcbiAgICAvLyB0aGVtIGluIGEgc3Bhbi5cblxuICAgIGxldCBuZXdPcHRpb25zID0gb3B0aW9ucy5oYXZpbmdTdHlsZShzdHlsZS5zdXAoKSk7XG4gICAgY29uc3QgdXBwZXJHcm91cCA9IGJ1aWxkQ29tbW9uLndyYXBGcmFnbWVudChidWlsZEdyb3VwKGdyb3VwLmJvZHksIG5ld09wdGlvbnMsIG9wdGlvbnMpLCBvcHRpb25zKTtcbiAgICBjb25zdCBhcnJvd1ByZWZpeCA9IGdyb3VwLmxhYmVsLnNsaWNlKDAsIDIpID09PSBcIlxcXFx4XCIgPyBcInhcIiA6IFwiY2RcIjtcbiAgICB1cHBlckdyb3VwLmNsYXNzZXMucHVzaChhcnJvd1ByZWZpeCArIFwiLWFycm93LXBhZFwiKTtcbiAgICBsZXQgbG93ZXJHcm91cDtcblxuICAgIGlmIChncm91cC5iZWxvdykge1xuICAgICAgLy8gQnVpbGQgdGhlIGxvd2VyIGdyb3VwXG4gICAgICBuZXdPcHRpb25zID0gb3B0aW9ucy5oYXZpbmdTdHlsZShzdHlsZS5zdWIoKSk7XG4gICAgICBsb3dlckdyb3VwID0gYnVpbGRDb21tb24ud3JhcEZyYWdtZW50KGJ1aWxkR3JvdXAoZ3JvdXAuYmVsb3csIG5ld09wdGlvbnMsIG9wdGlvbnMpLCBvcHRpb25zKTtcbiAgICAgIGxvd2VyR3JvdXAuY2xhc3Nlcy5wdXNoKGFycm93UHJlZml4ICsgXCItYXJyb3ctcGFkXCIpO1xuICAgIH1cblxuICAgIGNvbnN0IGFycm93Qm9keSA9IHN0cmV0Y2h5LnN2Z1NwYW4oZ3JvdXAsIG9wdGlvbnMpOyAvLyBSZSBzaGlmdDogTm90ZSB0aGF0IHN0cmV0Y2h5LnN2Z1NwYW4gcmV0dXJuZWQgYXJyb3dCb2R5LmRlcHRoID0gMC5cbiAgICAvLyBUaGUgcG9pbnQgd2Ugd2FudCBvbiB0aGUgbWF0aCBheGlzIGlzIGF0IDAuNSAqIGFycm93Qm9keS5oZWlnaHQuXG5cbiAgICBjb25zdCBhcnJvd1NoaWZ0ID0gLW9wdGlvbnMuZm9udE1ldHJpY3MoKS5heGlzSGVpZ2h0ICsgMC41ICogYXJyb3dCb2R5LmhlaWdodDsgLy8gMiBtdSBrZXJuLiBSZWY6IGFtc21hdGguZHR4OiAjN1xcaWYwIzJcXGVsc2VcXG1rZXJuIzJtdVxcZmlcblxuICAgIGxldCB1cHBlclNoaWZ0ID0gLW9wdGlvbnMuZm9udE1ldHJpY3MoKS5heGlzSGVpZ2h0IC0gMC41ICogYXJyb3dCb2R5LmhlaWdodCAtIDAuMTExOyAvLyAwLjExMSBlbSA9IDIgbXVcblxuICAgIGlmICh1cHBlckdyb3VwLmRlcHRoID4gMC4yNSB8fCBncm91cC5sYWJlbCA9PT0gXCJcXFxceGxlZnRlcXVpbGlicml1bVwiKSB7XG4gICAgICB1cHBlclNoaWZ0IC09IHVwcGVyR3JvdXAuZGVwdGg7IC8vIHNoaWZ0IHVwIGlmIGRlcHRoIGVuY3JvYWNoZXNcbiAgICB9IC8vIEdlbmVyYXRlIHRoZSB2bGlzdFxuXG5cbiAgICBsZXQgdmxpc3Q7XG5cbiAgICBpZiAobG93ZXJHcm91cCkge1xuICAgICAgY29uc3QgbG93ZXJTaGlmdCA9IC1vcHRpb25zLmZvbnRNZXRyaWNzKCkuYXhpc0hlaWdodCArIGxvd2VyR3JvdXAuaGVpZ2h0ICsgMC41ICogYXJyb3dCb2R5LmhlaWdodCArIDAuMTExO1xuICAgICAgdmxpc3QgPSBidWlsZENvbW1vbi5tYWtlVkxpc3Qoe1xuICAgICAgICBwb3NpdGlvblR5cGU6IFwiaW5kaXZpZHVhbFNoaWZ0XCIsXG4gICAgICAgIGNoaWxkcmVuOiBbe1xuICAgICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICAgIGVsZW06IHVwcGVyR3JvdXAsXG4gICAgICAgICAgc2hpZnQ6IHVwcGVyU2hpZnRcbiAgICAgICAgfSwge1xuICAgICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICAgIGVsZW06IGFycm93Qm9keSxcbiAgICAgICAgICBzaGlmdDogYXJyb3dTaGlmdFxuICAgICAgICB9LCB7XG4gICAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgICAgZWxlbTogbG93ZXJHcm91cCxcbiAgICAgICAgICBzaGlmdDogbG93ZXJTaGlmdFxuICAgICAgICB9XVxuICAgICAgfSwgb3B0aW9ucyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZsaXN0ID0gYnVpbGRDb21tb24ubWFrZVZMaXN0KHtcbiAgICAgICAgcG9zaXRpb25UeXBlOiBcImluZGl2aWR1YWxTaGlmdFwiLFxuICAgICAgICBjaGlsZHJlbjogW3tcbiAgICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgICBlbGVtOiB1cHBlckdyb3VwLFxuICAgICAgICAgIHNoaWZ0OiB1cHBlclNoaWZ0XG4gICAgICAgIH0sIHtcbiAgICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgICBlbGVtOiBhcnJvd0JvZHksXG4gICAgICAgICAgc2hpZnQ6IGFycm93U2hpZnRcbiAgICAgICAgfV1cbiAgICAgIH0sIG9wdGlvbnMpO1xuICAgIH0gLy8gJEZsb3dGaXhNZTogUmVwbGFjZSB0aGlzIHdpdGggcGFzc2luZyBcInN2Zy1hbGlnblwiIGludG8gbWFrZVZMaXN0LlxuXG5cbiAgICB2bGlzdC5jaGlsZHJlblswXS5jaGlsZHJlblswXS5jaGlsZHJlblsxXS5jbGFzc2VzLnB1c2goXCJzdmctYWxpZ25cIik7XG4gICAgcmV0dXJuIGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcIm1yZWxcIiwgXCJ4LWFycm93XCJdLCBbdmxpc3RdLCBvcHRpb25zKTtcbiAgfSxcblxuICBtYXRobWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgY29uc3QgYXJyb3dOb2RlID0gc3RyZXRjaHkubWF0aE1Mbm9kZShncm91cC5sYWJlbCk7XG4gICAgYXJyb3dOb2RlLnNldEF0dHJpYnV0ZShcIm1pbnNpemVcIiwgZ3JvdXAubGFiZWwuY2hhckF0KDApID09PSBcInhcIiA/IFwiMS43NWVtXCIgOiBcIjMuMGVtXCIpO1xuICAgIGxldCBub2RlO1xuXG4gICAgaWYgKGdyb3VwLmJvZHkpIHtcbiAgICAgIGNvbnN0IHVwcGVyTm9kZSA9IHBhZGRlZE5vZGUoYnVpbGRNYXRoTUxfYnVpbGRHcm91cChncm91cC5ib2R5LCBvcHRpb25zKSk7XG5cbiAgICAgIGlmIChncm91cC5iZWxvdykge1xuICAgICAgICBjb25zdCBsb3dlck5vZGUgPSBwYWRkZWROb2RlKGJ1aWxkTWF0aE1MX2J1aWxkR3JvdXAoZ3JvdXAuYmVsb3csIG9wdGlvbnMpKTtcbiAgICAgICAgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXVuZGVyb3ZlclwiLCBbYXJyb3dOb2RlLCBsb3dlck5vZGUsIHVwcGVyTm9kZV0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibW92ZXJcIiwgW2Fycm93Tm9kZSwgdXBwZXJOb2RlXSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChncm91cC5iZWxvdykge1xuICAgICAgY29uc3QgbG93ZXJOb2RlID0gcGFkZGVkTm9kZShidWlsZE1hdGhNTF9idWlsZEdyb3VwKGdyb3VwLmJlbG93LCBvcHRpb25zKSk7XG4gICAgICBub2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtdW5kZXJcIiwgW2Fycm93Tm9kZSwgbG93ZXJOb2RlXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbi5cbiAgICAgIC8vIFBhcnNlci5qcyB0aHJvd3MgYW4gZXJyb3IgaWYgdGhlcmUgaXMgbm8gYXJndW1lbnQuXG4gICAgICBub2RlID0gcGFkZGVkTm9kZSgpO1xuICAgICAgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibW92ZXJcIiwgW2Fycm93Tm9kZSwgbm9kZV0pO1xuICAgIH1cblxuICAgIHJldHVybiBub2RlO1xuICB9XG5cbn0pO1xuOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9ucy9tY2xhc3MuanNcblxuXG5cblxuXG5cbmNvbnN0IG1jbGFzc19tYWtlU3BhbiA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuO1xuXG5mdW5jdGlvbiBtY2xhc3NfaHRtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgY29uc3QgZWxlbWVudHMgPSBidWlsZEV4cHJlc3Npb24oZ3JvdXAuYm9keSwgb3B0aW9ucywgdHJ1ZSk7XG4gIHJldHVybiBtY2xhc3NfbWFrZVNwYW4oW2dyb3VwLm1jbGFzc10sIGVsZW1lbnRzLCBvcHRpb25zKTtcbn1cblxuZnVuY3Rpb24gbWNsYXNzX21hdGhtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgbGV0IG5vZGU7XG4gIGNvbnN0IGlubmVyID0gYnVpbGRNYXRoTUxfYnVpbGRFeHByZXNzaW9uKGdyb3VwLmJvZHksIG9wdGlvbnMpO1xuXG4gIGlmIChncm91cC5tY2xhc3MgPT09IFwibWlubmVyXCIpIHtcbiAgICBub2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtcGFkZGVkXCIsIGlubmVyKTtcbiAgfSBlbHNlIGlmIChncm91cC5tY2xhc3MgPT09IFwibW9yZFwiKSB7XG4gICAgaWYgKGdyb3VwLmlzQ2hhcmFjdGVyQm94KSB7XG4gICAgICBub2RlID0gaW5uZXJbMF07XG4gICAgICBub2RlLnR5cGUgPSBcIm1pXCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5vZGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1pXCIsIGlubmVyKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKGdyb3VwLmlzQ2hhcmFjdGVyQm94KSB7XG4gICAgICBub2RlID0gaW5uZXJbMF07XG4gICAgICBub2RlLnR5cGUgPSBcIm1vXCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5vZGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1vXCIsIGlubmVyKTtcbiAgICB9IC8vIFNldCBzcGFjaW5nIGJhc2VkIG9uIHdoYXQgaXMgdGhlIG1vc3QgbGlrZWx5IGFkamFjZW50IGF0b20gdHlwZS5cbiAgICAvLyBTZWUgVGVYYm9vayBwMTcwLlxuXG5cbiAgICBpZiAoZ3JvdXAubWNsYXNzID09PSBcIm1iaW5cIikge1xuICAgICAgbm9kZS5hdHRyaWJ1dGVzLmxzcGFjZSA9IFwiMC4yMmVtXCI7IC8vIG1lZGl1bSBzcGFjZVxuXG4gICAgICBub2RlLmF0dHJpYnV0ZXMucnNwYWNlID0gXCIwLjIyZW1cIjtcbiAgICB9IGVsc2UgaWYgKGdyb3VwLm1jbGFzcyA9PT0gXCJtcHVuY3RcIikge1xuICAgICAgbm9kZS5hdHRyaWJ1dGVzLmxzcGFjZSA9IFwiMGVtXCI7XG4gICAgICBub2RlLmF0dHJpYnV0ZXMucnNwYWNlID0gXCIwLjE3ZW1cIjsgLy8gdGhpbnNwYWNlXG4gICAgfSBlbHNlIGlmIChncm91cC5tY2xhc3MgPT09IFwibW9wZW5cIiB8fCBncm91cC5tY2xhc3MgPT09IFwibWNsb3NlXCIpIHtcbiAgICAgIG5vZGUuYXR0cmlidXRlcy5sc3BhY2UgPSBcIjBlbVwiO1xuICAgICAgbm9kZS5hdHRyaWJ1dGVzLnJzcGFjZSA9IFwiMGVtXCI7XG4gICAgfSBlbHNlIGlmIChncm91cC5tY2xhc3MgPT09IFwibWlubmVyXCIpIHtcbiAgICAgIG5vZGUuYXR0cmlidXRlcy5sc3BhY2UgPSBcIjAuMDU1NmVtXCI7IC8vIDEgbXUgaXMgdGhlIG1vc3QgbGlrZWx5IG9wdGlvblxuXG4gICAgICBub2RlLmF0dHJpYnV0ZXMud2lkdGggPSBcIiswLjExMTFlbVwiO1xuICAgIH0gLy8gTWF0aE1MIDxtbz4gZGVmYXVsdCBzcGFjZSBpcyA1LzE4IGVtLCBzbyA8bXJlbD4gbmVlZHMgbm8gYWN0aW9uLlxuICAgIC8vIFJlZjogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvTWF0aE1ML0VsZW1lbnQvbW9cblxuICB9XG5cbiAgcmV0dXJuIG5vZGU7XG59IC8vIE1hdGggY2xhc3MgY29tbWFuZHMgZXhjZXB0IFxcbWF0aG9wXG5cblxuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcIm1jbGFzc1wiLFxuICBuYW1lczogW1wiXFxcXG1hdGhvcmRcIiwgXCJcXFxcbWF0aGJpblwiLCBcIlxcXFxtYXRocmVsXCIsIFwiXFxcXG1hdGhvcGVuXCIsIFwiXFxcXG1hdGhjbG9zZVwiLCBcIlxcXFxtYXRocHVuY3RcIiwgXCJcXFxcbWF0aGlubmVyXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDEsXG4gICAgcHJpbWl0aXZlOiB0cnVlXG4gIH0sXG5cbiAgaGFuZGxlcihfcmVmLCBhcmdzKSB7XG4gICAgbGV0IHtcbiAgICAgIHBhcnNlcixcbiAgICAgIGZ1bmNOYW1lXG4gICAgfSA9IF9yZWY7XG4gICAgY29uc3QgYm9keSA9IGFyZ3NbMF07XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwibWNsYXNzXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIG1jbGFzczogXCJtXCIgKyBmdW5jTmFtZS5zbGljZSg1KSxcbiAgICAgIC8vIFRPRE8oa2V2aW5iKTogZG9uJ3QgcHJlZml4IHdpdGggJ20nXG4gICAgICBib2R5OiBvcmRhcmd1bWVudChib2R5KSxcbiAgICAgIGlzQ2hhcmFjdGVyQm94OiB1dGlscy5pc0NoYXJhY3RlckJveChib2R5KVxuICAgIH07XG4gIH0sXG5cbiAgaHRtbEJ1aWxkZXI6IG1jbGFzc19odG1sQnVpbGRlcixcbiAgbWF0aG1sQnVpbGRlcjogbWNsYXNzX21hdGhtbEJ1aWxkZXJcbn0pO1xuY29uc3QgYmlucmVsQ2xhc3MgPSBhcmcgPT4ge1xuICAvLyBcXGJpbnJlbEAgc3BhY2luZyB2YXJpZXMgd2l0aCAoYmlufHJlbHxvcmQpIG9mIHRoZSBhdG9tIGluIHRoZSBhcmd1bWVudC5cbiAgLy8gKGJ5IHJlbmRlcmluZyBzZXBhcmF0ZWx5IGFuZCB3aXRoIHt9cyBiZWZvcmUgYW5kIGFmdGVyLCBhbmQgbWVhc3VyaW5nXG4gIC8vIHRoZSBjaGFuZ2UgaW4gc3BhY2luZykuICBXZSdsbCBkbyByb3VnaGx5IHRoZSBzYW1lIGJ5IGRldGVjdGluZyB0aGVcbiAgLy8gYXRvbSB0eXBlIGRpcmVjdGx5LlxuICBjb25zdCBhdG9tID0gYXJnLnR5cGUgPT09IFwib3JkZ3JvdXBcIiAmJiBhcmcuYm9keS5sZW5ndGggPyBhcmcuYm9keVswXSA6IGFyZztcblxuICBpZiAoYXRvbS50eXBlID09PSBcImF0b21cIiAmJiAoYXRvbS5mYW1pbHkgPT09IFwiYmluXCIgfHwgYXRvbS5mYW1pbHkgPT09IFwicmVsXCIpKSB7XG4gICAgcmV0dXJuIFwibVwiICsgYXRvbS5mYW1pbHk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIFwibW9yZFwiO1xuICB9XG59OyAvLyBcXEBiaW5yZWx7eH17eX0gcmVuZGVycyBsaWtlIHkgYnV0IGFzIG1iaW4vbXJlbC9tb3JkIGlmIHggaXMgbWJpbi9tcmVsL21vcmQuXG4vLyBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gXFxiaW5yZWxAe3h9XFxiaW5yZWxAQHt5fSBpbiBBTVNUZVguXG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJtY2xhc3NcIixcbiAgbmFtZXM6IFtcIlxcXFxAYmlucmVsXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDJcbiAgfSxcblxuICBoYW5kbGVyKF9yZWYyLCBhcmdzKSB7XG4gICAgbGV0IHtcbiAgICAgIHBhcnNlclxuICAgIH0gPSBfcmVmMjtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJtY2xhc3NcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgbWNsYXNzOiBiaW5yZWxDbGFzcyhhcmdzWzBdKSxcbiAgICAgIGJvZHk6IG9yZGFyZ3VtZW50KGFyZ3NbMV0pLFxuICAgICAgaXNDaGFyYWN0ZXJCb3g6IHV0aWxzLmlzQ2hhcmFjdGVyQm94KGFyZ3NbMV0pXG4gICAgfTtcbiAgfVxuXG59KTsgLy8gQnVpbGQgYSByZWxhdGlvbiBvciBzdGFja2VkIG9wIGJ5IHBsYWNpbmcgb25lIHN5bWJvbCBvbiB0b3Agb2YgYW5vdGhlclxuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwibWNsYXNzXCIsXG4gIG5hbWVzOiBbXCJcXFxcc3RhY2tyZWxcIiwgXCJcXFxcb3ZlcnNldFwiLCBcIlxcXFx1bmRlcnNldFwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAyXG4gIH0sXG5cbiAgaGFuZGxlcihfcmVmMywgYXJncykge1xuICAgIGxldCB7XG4gICAgICBwYXJzZXIsXG4gICAgICBmdW5jTmFtZVxuICAgIH0gPSBfcmVmMztcbiAgICBjb25zdCBiYXNlQXJnID0gYXJnc1sxXTtcbiAgICBjb25zdCBzaGlmdGVkQXJnID0gYXJnc1swXTtcbiAgICBsZXQgbWNsYXNzO1xuXG4gICAgaWYgKGZ1bmNOYW1lICE9PSBcIlxcXFxzdGFja3JlbFwiKSB7XG4gICAgICAvLyBMYVRlWCBhcHBsaWVzIFxcYmlucmVsIHNwYWNpbmcgdG8gXFxvdmVyc2V0IGFuZCBcXHVuZGVyc2V0LlxuICAgICAgbWNsYXNzID0gYmlucmVsQ2xhc3MoYmFzZUFyZyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG1jbGFzcyA9IFwibXJlbFwiOyAvLyBmb3IgXFxzdGFja3JlbFxuICAgIH1cblxuICAgIGNvbnN0IGJhc2VPcCA9IHtcbiAgICAgIHR5cGU6IFwib3BcIixcbiAgICAgIG1vZGU6IGJhc2VBcmcubW9kZSxcbiAgICAgIGxpbWl0czogdHJ1ZSxcbiAgICAgIGFsd2F5c0hhbmRsZVN1cFN1YjogdHJ1ZSxcbiAgICAgIHBhcmVudElzU3VwU3ViOiBmYWxzZSxcbiAgICAgIHN5bWJvbDogZmFsc2UsXG4gICAgICBzdXBwcmVzc0Jhc2VTaGlmdDogZnVuY05hbWUgIT09IFwiXFxcXHN0YWNrcmVsXCIsXG4gICAgICBib2R5OiBvcmRhcmd1bWVudChiYXNlQXJnKVxuICAgIH07XG4gICAgY29uc3Qgc3Vwc3ViID0ge1xuICAgICAgdHlwZTogXCJzdXBzdWJcIixcbiAgICAgIG1vZGU6IHNoaWZ0ZWRBcmcubW9kZSxcbiAgICAgIGJhc2U6IGJhc2VPcCxcbiAgICAgIHN1cDogZnVuY05hbWUgPT09IFwiXFxcXHVuZGVyc2V0XCIgPyBudWxsIDogc2hpZnRlZEFyZyxcbiAgICAgIHN1YjogZnVuY05hbWUgPT09IFwiXFxcXHVuZGVyc2V0XCIgPyBzaGlmdGVkQXJnIDogbnVsbFxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwibWNsYXNzXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIG1jbGFzcyxcbiAgICAgIGJvZHk6IFtzdXBzdWJdLFxuICAgICAgaXNDaGFyYWN0ZXJCb3g6IHV0aWxzLmlzQ2hhcmFjdGVyQm94KHN1cHN1YilcbiAgICB9O1xuICB9LFxuXG4gIGh0bWxCdWlsZGVyOiBtY2xhc3NfaHRtbEJ1aWxkZXIsXG4gIG1hdGhtbEJ1aWxkZXI6IG1jbGFzc19tYXRobWxCdWlsZGVyXG59KTtcbjsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbnMvcG1iLmpzXG5cblxuXG5cblxuXG4vLyBcXHBtYiBpcyBhIHNpbXVsYXRpb24gb2YgYm9sZCBmb250LlxuLy8gVGhlIHZlcnNpb24gb2YgXFxwbWIgaW4gYW1ic3kuc3R5IHdvcmtzIGJ5IHR5cGVzZXR0aW5nIHRocmVlIGNvcGllc1xuLy8gd2l0aCBzbWFsbCBvZmZzZXRzLiBXZSB1c2UgQ1NTIHRleHQtc2hhZG93LlxuLy8gSXQncyBhIGhhY2suIE5vdCBhcyBnb29kIGFzIGEgcmVhbCBib2xkIGZvbnQuIEJldHRlciB0aGFuIG5vdGhpbmcuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwicG1iXCIsXG4gIG5hbWVzOiBbXCJcXFxccG1iXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDEsXG4gICAgYWxsb3dlZEluVGV4dDogdHJ1ZVxuICB9LFxuXG4gIGhhbmRsZXIoX3JlZiwgYXJncykge1xuICAgIGxldCB7XG4gICAgICBwYXJzZXJcbiAgICB9ID0gX3JlZjtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJwbWJcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgbWNsYXNzOiBiaW5yZWxDbGFzcyhhcmdzWzBdKSxcbiAgICAgIGJvZHk6IG9yZGFyZ3VtZW50KGFyZ3NbMF0pXG4gICAgfTtcbiAgfSxcblxuICBodG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIGNvbnN0IGVsZW1lbnRzID0gYnVpbGRFeHByZXNzaW9uKGdyb3VwLmJvZHksIG9wdGlvbnMsIHRydWUpO1xuICAgIGNvbnN0IG5vZGUgPSBidWlsZENvbW1vbi5tYWtlU3BhbihbZ3JvdXAubWNsYXNzXSwgZWxlbWVudHMsIG9wdGlvbnMpO1xuICAgIG5vZGUuc3R5bGUudGV4dFNoYWRvdyA9IFwiMC4wMmVtIDAuMDFlbSAwLjA0cHhcIjtcbiAgICByZXR1cm4gbm9kZTtcbiAgfSxcblxuICBtYXRobWxCdWlsZGVyKGdyb3VwLCBzdHlsZSkge1xuICAgIGNvbnN0IGlubmVyID0gYnVpbGRNYXRoTUxfYnVpbGRFeHByZXNzaW9uKGdyb3VwLmJvZHksIHN0eWxlKTsgLy8gV3JhcCB3aXRoIGFuIDxtc3R5bGU+IGVsZW1lbnQuXG5cbiAgICBjb25zdCBub2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtc3R5bGVcIiwgaW5uZXIpO1xuICAgIG5vZGUuc2V0QXR0cmlidXRlKFwic3R5bGVcIiwgXCJ0ZXh0LXNoYWRvdzogMC4wMmVtIDAuMDFlbSAwLjA0cHhcIik7XG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxufSk7XG47Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZW52aXJvbm1lbnRzL2NkLmpzXG5cblxuXG5cblxuXG5cblxuY29uc3QgY2RBcnJvd0Z1bmN0aW9uTmFtZSA9IHtcbiAgXCI+XCI6IFwiXFxcXFxcXFxjZHJpZ2h0YXJyb3dcIixcbiAgXCI8XCI6IFwiXFxcXFxcXFxjZGxlZnRhcnJvd1wiLFxuICBcIj1cIjogXCJcXFxcXFxcXGNkbG9uZ2VxdWFsXCIsXG4gIFwiQVwiOiBcIlxcXFx1cGFycm93XCIsXG4gIFwiVlwiOiBcIlxcXFxkb3duYXJyb3dcIixcbiAgXCJ8XCI6IFwiXFxcXFZlcnRcIixcbiAgXCIuXCI6IFwibm8gYXJyb3dcIlxufTtcblxuY29uc3QgbmV3Q2VsbCA9ICgpID0+IHtcbiAgLy8gQ3JlYXRlIGFuIGVtcHR5IGNlbGwsIHRvIGJlIGZpbGxlZCBiZWxvdyB3aXRoIHBhcnNlIG5vZGVzLlxuICAvLyBUaGUgcGFyc2VUcmVlIGZyb20gdGhpcyBtb2R1bGUgbXVzdCBiZSBjb25zdHJ1Y3RlZCBsaWtlIHRoZVxuICAvLyBvbmUgY3JlYXRlZCBieSBwYXJzZUFycmF5KCksIHNvIGFuIGVtcHR5IENEIGNlbGwgbXVzdFxuICAvLyBiZSBhIFBhcnNlTm9kZTxcInN0eWxpbmdcIj4uIEFuZCBDRCBpcyBhbHdheXMgZGlzcGxheXN0eWxlLlxuICAvLyBTbyB0aGVzZSB2YWx1ZXMgYXJlIGZpeGVkIGFuZCBmbG93IGNhbiBkbyBpbXBsaWNpdCB0eXBpbmcuXG4gIHJldHVybiB7XG4gICAgdHlwZTogXCJzdHlsaW5nXCIsXG4gICAgYm9keTogW10sXG4gICAgbW9kZTogXCJtYXRoXCIsXG4gICAgc3R5bGU6IFwiZGlzcGxheVwiXG4gIH07XG59O1xuXG5jb25zdCBpc1N0YXJ0T2ZBcnJvdyA9IG5vZGUgPT4ge1xuICByZXR1cm4gbm9kZS50eXBlID09PSBcInRleHRvcmRcIiAmJiBub2RlLnRleHQgPT09IFwiQFwiO1xufTtcblxuY29uc3QgaXNMYWJlbEVuZCA9IChub2RlLCBlbmRDaGFyKSA9PiB7XG4gIHJldHVybiAobm9kZS50eXBlID09PSBcIm1hdGhvcmRcIiB8fCBub2RlLnR5cGUgPT09IFwiYXRvbVwiKSAmJiBub2RlLnRleHQgPT09IGVuZENoYXI7XG59O1xuXG5mdW5jdGlvbiBjZEFycm93KGFycm93Q2hhciwgbGFiZWxzLCBwYXJzZXIpIHtcbiAgLy8gUmV0dXJuIGEgcGFyc2UgdHJlZSBvZiBhbiBhcnJvdyBhbmQgaXRzIGxhYmVscy5cbiAgLy8gVGhpcyBhY3RzIGluIGEgd2F5IHNpbWlsYXIgdG8gYSBtYWNybyBleHBhbnNpb24uXG4gIGNvbnN0IGZ1bmNOYW1lID0gY2RBcnJvd0Z1bmN0aW9uTmFtZVthcnJvd0NoYXJdO1xuXG4gIHN3aXRjaCAoZnVuY05hbWUpIHtcbiAgICBjYXNlIFwiXFxcXFxcXFxjZHJpZ2h0YXJyb3dcIjpcbiAgICBjYXNlIFwiXFxcXFxcXFxjZGxlZnRhcnJvd1wiOlxuICAgICAgcmV0dXJuIHBhcnNlci5jYWxsRnVuY3Rpb24oZnVuY05hbWUsIFtsYWJlbHNbMF1dLCBbbGFiZWxzWzFdXSk7XG5cbiAgICBjYXNlIFwiXFxcXHVwYXJyb3dcIjpcbiAgICBjYXNlIFwiXFxcXGRvd25hcnJvd1wiOlxuICAgICAge1xuICAgICAgICBjb25zdCBsZWZ0TGFiZWwgPSBwYXJzZXIuY2FsbEZ1bmN0aW9uKFwiXFxcXFxcXFxjZGxlZnRcIiwgW2xhYmVsc1swXV0sIFtdKTtcbiAgICAgICAgY29uc3QgYmFyZUFycm93ID0ge1xuICAgICAgICAgIHR5cGU6IFwiYXRvbVwiLFxuICAgICAgICAgIHRleHQ6IGZ1bmNOYW1lLFxuICAgICAgICAgIG1vZGU6IFwibWF0aFwiLFxuICAgICAgICAgIGZhbWlseTogXCJyZWxcIlxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBzaXplZEFycm93ID0gcGFyc2VyLmNhbGxGdW5jdGlvbihcIlxcXFxCaWdcIiwgW2JhcmVBcnJvd10sIFtdKTtcbiAgICAgICAgY29uc3QgcmlnaHRMYWJlbCA9IHBhcnNlci5jYWxsRnVuY3Rpb24oXCJcXFxcXFxcXGNkcmlnaHRcIiwgW2xhYmVsc1sxXV0sIFtdKTtcbiAgICAgICAgY29uc3QgYXJyb3dHcm91cCA9IHtcbiAgICAgICAgICB0eXBlOiBcIm9yZGdyb3VwXCIsXG4gICAgICAgICAgbW9kZTogXCJtYXRoXCIsXG4gICAgICAgICAgYm9keTogW2xlZnRMYWJlbCwgc2l6ZWRBcnJvdywgcmlnaHRMYWJlbF1cbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHBhcnNlci5jYWxsRnVuY3Rpb24oXCJcXFxcXFxcXGNkcGFyZW50XCIsIFthcnJvd0dyb3VwXSwgW10pO1xuICAgICAgfVxuXG4gICAgY2FzZSBcIlxcXFxcXFxcY2Rsb25nZXF1YWxcIjpcbiAgICAgIHJldHVybiBwYXJzZXIuY2FsbEZ1bmN0aW9uKFwiXFxcXFxcXFxjZGxvbmdlcXVhbFwiLCBbXSwgW10pO1xuXG4gICAgY2FzZSBcIlxcXFxWZXJ0XCI6XG4gICAgICB7XG4gICAgICAgIGNvbnN0IGFycm93ID0ge1xuICAgICAgICAgIHR5cGU6IFwidGV4dG9yZFwiLFxuICAgICAgICAgIHRleHQ6IFwiXFxcXFZlcnRcIixcbiAgICAgICAgICBtb2RlOiBcIm1hdGhcIlxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcGFyc2VyLmNhbGxGdW5jdGlvbihcIlxcXFxCaWdcIiwgW2Fycm93XSwgW10pO1xuICAgICAgfVxuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFwidGV4dG9yZFwiLFxuICAgICAgICB0ZXh0OiBcIiBcIixcbiAgICAgICAgbW9kZTogXCJtYXRoXCJcbiAgICAgIH07XG4gIH1cbn1cblxuZnVuY3Rpb24gcGFyc2VDRChwYXJzZXIpIHtcbiAgLy8gR2V0IHRoZSBhcnJheSdzIHBhcnNlIG5vZGVzIHdpdGggXFxcXCB0ZW1wb3JhcmlseSBtYXBwZWQgdG8gXFxjci5cbiAgY29uc3QgcGFyc2VkUm93cyA9IFtdO1xuICBwYXJzZXIuZ3VsbGV0LmJlZ2luR3JvdXAoKTtcbiAgcGFyc2VyLmd1bGxldC5tYWNyb3Muc2V0KFwiXFxcXGNyXCIsIFwiXFxcXFxcXFxcXFxccmVsYXhcIik7XG4gIHBhcnNlci5ndWxsZXQuYmVnaW5Hcm91cCgpO1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25zdGFudC1jb25kaXRpb25cbiAgICAvLyBHZXQgdGhlIHBhcnNlIG5vZGVzIGZvciB0aGUgbmV4dCByb3cuXG4gICAgcGFyc2VkUm93cy5wdXNoKHBhcnNlci5wYXJzZUV4cHJlc3Npb24oZmFsc2UsIFwiXFxcXFxcXFxcIikpO1xuICAgIHBhcnNlci5ndWxsZXQuZW5kR3JvdXAoKTtcbiAgICBwYXJzZXIuZ3VsbGV0LmJlZ2luR3JvdXAoKTtcbiAgICBjb25zdCBuZXh0ID0gcGFyc2VyLmZldGNoKCkudGV4dDtcblxuICAgIGlmIChuZXh0ID09PSBcIiZcIiB8fCBuZXh0ID09PSBcIlxcXFxcXFxcXCIpIHtcbiAgICAgIHBhcnNlci5jb25zdW1lKCk7XG4gICAgfSBlbHNlIGlmIChuZXh0ID09PSBcIlxcXFxlbmRcIikge1xuICAgICAgaWYgKHBhcnNlZFJvd3NbcGFyc2VkUm93cy5sZW5ndGggLSAxXS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcGFyc2VkUm93cy5wb3AoKTsgLy8gZmluYWwgcm93IGVuZGVkIGluIFxcXFxcbiAgICAgIH1cblxuICAgICAgYnJlYWs7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIkV4cGVjdGVkIFxcXFxcXFxcIG9yIFxcXFxjciBvciBcXFxcZW5kXCIsIHBhcnNlci5uZXh0VG9rZW4pO1xuICAgIH1cbiAgfVxuXG4gIGxldCByb3cgPSBbXTtcbiAgY29uc3QgYm9keSA9IFtyb3ddOyAvLyBMb29wIHRocnUgdGhlIHBhcnNlIG5vZGVzLiBDb2xsZWN0IHRoZW0gaW50byBjZWxscyBhbmQgYXJyb3dzLlxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcGFyc2VkUm93cy5sZW5ndGg7IGkrKykge1xuICAgIC8vIFN0YXJ0IGEgbmV3IHJvdy5cbiAgICBjb25zdCByb3dOb2RlcyA9IHBhcnNlZFJvd3NbaV07IC8vIENyZWF0ZSB0aGUgZmlyc3QgY2VsbC5cblxuICAgIGxldCBjZWxsID0gbmV3Q2VsbCgpO1xuXG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCByb3dOb2Rlcy5sZW5ndGg7IGorKykge1xuICAgICAgaWYgKCFpc1N0YXJ0T2ZBcnJvdyhyb3dOb2Rlc1tqXSkpIHtcbiAgICAgICAgLy8gSWYgYSBwYXJzZU5vZGUgaXMgbm90IGFuIGFycm93LCBpdCBnb2VzIGludG8gYSBjZWxsLlxuICAgICAgICBjZWxsLmJvZHkucHVzaChyb3dOb2Rlc1tqXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBQYXJzZSBub2RlIGogaXMgYW4gXCJAXCIsIHRoZSBzdGFydCBvZiBhbiBhcnJvdy5cbiAgICAgICAgLy8gQmVmb3JlIHN0YXJ0aW5nIG9uIHRoZSBhcnJvdywgcHVzaCB0aGUgY2VsbCBpbnRvIGByb3dgLlxuICAgICAgICByb3cucHVzaChjZWxsKTsgLy8gTm93IGNvbGxlY3QgcGFyc2VOb2RlcyBpbnRvIGFuIGFycm93LlxuICAgICAgICAvLyBUaGUgY2hhcmFjdGVyIGFmdGVyIFwiQFwiIGRlZmluZXMgdGhlIGFycm93IHR5cGUuXG5cbiAgICAgICAgaiArPSAxO1xuICAgICAgICBjb25zdCBhcnJvd0NoYXIgPSBhc3NlcnRTeW1ib2xOb2RlVHlwZShyb3dOb2Rlc1tqXSkudGV4dDsgLy8gQ3JlYXRlIHR3byBlbXB0eSBsYWJlbCBub2Rlcy4gV2UgbWF5IG9yIG1heSBub3QgdXNlIHRoZW0uXG5cbiAgICAgICAgY29uc3QgbGFiZWxzID0gbmV3IEFycmF5KDIpO1xuICAgICAgICBsYWJlbHNbMF0gPSB7XG4gICAgICAgICAgdHlwZTogXCJvcmRncm91cFwiLFxuICAgICAgICAgIG1vZGU6IFwibWF0aFwiLFxuICAgICAgICAgIGJvZHk6IFtdXG4gICAgICAgIH07XG4gICAgICAgIGxhYmVsc1sxXSA9IHtcbiAgICAgICAgICB0eXBlOiBcIm9yZGdyb3VwXCIsXG4gICAgICAgICAgbW9kZTogXCJtYXRoXCIsXG4gICAgICAgICAgYm9keTogW11cbiAgICAgICAgfTsgLy8gUHJvY2VzcyB0aGUgYXJyb3cuXG5cbiAgICAgICAgaWYgKFwiPXwuXCIuaW5kZXhPZihhcnJvd0NoYXIpID4gLTEpIHsvLyBUaHJlZSBcImFycm93c1wiLCBgYEA9YCwgYEB8YCwgYW5kIGBALmAsIGRvIG5vdCB0YWtlIGxhYmVscy5cbiAgICAgICAgICAvLyBEbyBub3RoaW5nIGhlcmUuXG4gICAgICAgIH0gZWxzZSBpZiAoXCI8PkFWXCIuaW5kZXhPZihhcnJvd0NoYXIpID4gLTEpIHtcbiAgICAgICAgICAvLyBGb3VyIGFycm93cywgYEA+Pj5gLCBgQDw8PGAsIGBAQUFBYCwgYW5kIGBAVlZWYCwgZWFjaCB0YWtlXG4gICAgICAgICAgLy8gdHdvIG9wdGlvbmFsIGxhYmVscy4gRS5nLiB0aGUgcmlnaHQtcG9pbnQgYXJyb3cgc3ludGF4IGlzXG4gICAgICAgICAgLy8gcmVhbGx5OiAgQD57b3B0aW9uYWwgbGFiZWx9PntvcHRpb25hbCBsYWJlbH0+XG4gICAgICAgICAgLy8gQ29sbGVjdCBwYXJzZU5vZGVzIGludG8gbGFiZWxzLlxuICAgICAgICAgIGZvciAobGV0IGxhYmVsTnVtID0gMDsgbGFiZWxOdW0gPCAyOyBsYWJlbE51bSsrKSB7XG4gICAgICAgICAgICBsZXQgaW5MYWJlbCA9IHRydWU7XG5cbiAgICAgICAgICAgIGZvciAobGV0IGsgPSBqICsgMTsgayA8IHJvd05vZGVzLmxlbmd0aDsgaysrKSB7XG4gICAgICAgICAgICAgIGlmIChpc0xhYmVsRW5kKHJvd05vZGVzW2tdLCBhcnJvd0NoYXIpKSB7XG4gICAgICAgICAgICAgICAgaW5MYWJlbCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGogPSBrO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKGlzU3RhcnRPZkFycm93KHJvd05vZGVzW2tdKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIk1pc3NpbmcgYSBcIiArIGFycm93Q2hhciArIFwiIGNoYXJhY3RlciB0byBjb21wbGV0ZSBhIENEIGFycm93LlwiLCByb3dOb2Rlc1trXSk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBsYWJlbHNbbGFiZWxOdW1dLmJvZHkucHVzaChyb3dOb2Rlc1trXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChpbkxhYmVsKSB7XG4gICAgICAgICAgICAgIC8vIGlzTGFiZWxFbmQgbmV2ZXIgcmV0dXJuZWQgYSB0cnVlLlxuICAgICAgICAgICAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJNaXNzaW5nIGEgXCIgKyBhcnJvd0NoYXIgKyBcIiBjaGFyYWN0ZXIgdG8gY29tcGxldGUgYSBDRCBhcnJvdy5cIiwgcm93Tm9kZXNbal0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJFeHBlY3RlZCBvbmUgb2YgXFxcIjw+QVY9fC5cXFwiIGFmdGVyIEBcIiwgcm93Tm9kZXNbal0pO1xuICAgICAgICB9IC8vIE5vdyBqb2luIHRoZSBhcnJvdyB0byBpdHMgbGFiZWxzLlxuXG5cbiAgICAgICAgY29uc3QgYXJyb3cgPSBjZEFycm93KGFycm93Q2hhciwgbGFiZWxzLCBwYXJzZXIpOyAvLyBXcmFwIHRoZSBhcnJvdyBpbiAgUGFyc2VOb2RlPFwic3R5bGluZ1wiPi5cbiAgICAgICAgLy8gVGhpcyBpcyBkb25lIHRvIG1hdGNoIHBhcnNlQXJyYXkoKSBiZWhhdmlvci5cblxuICAgICAgICBjb25zdCB3cmFwcGVkQXJyb3cgPSB7XG4gICAgICAgICAgdHlwZTogXCJzdHlsaW5nXCIsXG4gICAgICAgICAgYm9keTogW2Fycm93XSxcbiAgICAgICAgICBtb2RlOiBcIm1hdGhcIixcbiAgICAgICAgICBzdHlsZTogXCJkaXNwbGF5XCIgLy8gQ0QgaXMgYWx3YXlzIGRpc3BsYXlzdHlsZS5cblxuICAgICAgICB9O1xuICAgICAgICByb3cucHVzaCh3cmFwcGVkQXJyb3cpOyAvLyBJbiBDRCdzIHN5bnRheCwgY2VsbHMgYXJlIGltcGxpY2l0LiBUaGF0IGlzLCBldmVyeXRoaW5nIHRoYXRcbiAgICAgICAgLy8gaXMgbm90IGFuIGFycm93IGdldHMgY29sbGVjdGVkIGludG8gYSBjZWxsLiBTbyBjcmVhdGUgYW4gZW1wdHlcbiAgICAgICAgLy8gY2VsbCBub3cuIEl0IHdpbGwgY29sbGVjdCB1cGNvbWluZyBwYXJzZU5vZGVzLlxuXG4gICAgICAgIGNlbGwgPSBuZXdDZWxsKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGkgJSAyID09PSAwKSB7XG4gICAgICAvLyBFdmVuLW51bWJlcmVkIHJvd3MgY29uc2lzdCBvZjogY2VsbCwgYXJyb3csIGNlbGwsIGFycm93LCAuLi4gY2VsbFxuICAgICAgLy8gVGhlIGxhc3QgY2VsbCBpcyBub3QgeWV0IHB1c2hlZCBpbnRvIGByb3dgLCBzbzpcbiAgICAgIHJvdy5wdXNoKGNlbGwpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBPZGQtbnVtYmVyZWQgcm93cyBjb25zaXN0IG9mOiB2ZXJ0IGFycm93LCBlbXB0eSBjZWxsLCAuLi4gdmVydCBhcnJvd1xuICAgICAgLy8gUmVtb3ZlIHRoZSBlbXB0eSBjZWxsIHRoYXQgd2FzIHBsYWNlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIGByb3dgLlxuICAgICAgcm93LnNoaWZ0KCk7XG4gICAgfVxuXG4gICAgcm93ID0gW107XG4gICAgYm9keS5wdXNoKHJvdyk7XG4gIH0gLy8gRW5kIHJvdyBncm91cFxuXG5cbiAgcGFyc2VyLmd1bGxldC5lbmRHcm91cCgpOyAvLyBFbmQgYXJyYXkgZ3JvdXAgZGVmaW5pbmcgXFxcXFxuXG4gIHBhcnNlci5ndWxsZXQuZW5kR3JvdXAoKTsgLy8gZGVmaW5lIGNvbHVtbiBzZXBhcmF0aW9uLlxuXG4gIGNvbnN0IGNvbHMgPSBuZXcgQXJyYXkoYm9keVswXS5sZW5ndGgpLmZpbGwoe1xuICAgIHR5cGU6IFwiYWxpZ25cIixcbiAgICBhbGlnbjogXCJjXCIsXG4gICAgcHJlZ2FwOiAwLjI1LFxuICAgIC8vIENEIHBhY2thZ2Ugc2V0cyBcXGVuc2tpcCBiZXR3ZWVuIGNvbHVtbnMuXG4gICAgcG9zdGdhcDogMC4yNSAvLyBTbyBwcmUgYW5kIHBvc3QgZWFjaCBnZXQgaGFsZiBhbiBcXGVuc2tpcCwgaS5lLiAwLjI1ZW0uXG5cbiAgfSk7XG4gIHJldHVybiB7XG4gICAgdHlwZTogXCJhcnJheVwiLFxuICAgIG1vZGU6IFwibWF0aFwiLFxuICAgIGJvZHksXG4gICAgYXJyYXlzdHJldGNoOiAxLFxuICAgIGFkZEpvdDogdHJ1ZSxcbiAgICByb3dHYXBzOiBbbnVsbF0sXG4gICAgY29scyxcbiAgICBjb2xTZXBhcmF0aW9uVHlwZTogXCJDRFwiLFxuICAgIGhMaW5lc0JlZm9yZVJvdzogbmV3IEFycmF5KGJvZHkubGVuZ3RoICsgMSkuZmlsbChbXSlcbiAgfTtcbn0gLy8gVGhlIGZ1bmN0aW9ucyBiZWxvdyBhcmUgbm90IGF2YWlsYWJsZSBmb3IgZ2VuZXJhbCB1c2UuXG4vLyBUaGV5IGFyZSBoZXJlIG9ubHkgZm9yIGludGVybmFsIHVzZSBieSB0aGUge0NEfSBlbnZpcm9ubWVudCBpbiBwbGFjaW5nIGxhYmVsc1xuLy8gbmV4dCB0byB2ZXJ0aWNhbCBhcnJvd3MuXG4vLyBXZSBkb24ndCBuZWVkIGFueSBzdWNoIGZ1bmN0aW9ucyBmb3IgaG9yaXpvbnRhbCBhcnJvd3MgYmVjYXVzZSB3ZSBjYW4gcmV1c2Vcbi8vIHRoZSBmdW5jdGlvbmFsaXR5IHRoYXQgYWxyZWFkeSBleGlzdHMgZm9yIGV4dGVuc2libGUgYXJyb3dzLlxuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwiY2RsYWJlbFwiLFxuICBuYW1lczogW1wiXFxcXFxcXFxjZGxlZnRcIiwgXCJcXFxcXFxcXGNkcmlnaHRcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMVxuICB9LFxuXG4gIGhhbmRsZXIoX3JlZiwgYXJncykge1xuICAgIGxldCB7XG4gICAgICBwYXJzZXIsXG4gICAgICBmdW5jTmFtZVxuICAgIH0gPSBfcmVmO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImNkbGFiZWxcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgc2lkZTogZnVuY05hbWUuc2xpY2UoNCksXG4gICAgICBsYWJlbDogYXJnc1swXVxuICAgIH07XG4gIH0sXG5cbiAgaHRtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICBjb25zdCBuZXdPcHRpb25zID0gb3B0aW9ucy5oYXZpbmdTdHlsZShvcHRpb25zLnN0eWxlLnN1cCgpKTtcbiAgICBjb25zdCBsYWJlbCA9IGJ1aWxkQ29tbW9uLndyYXBGcmFnbWVudChidWlsZEdyb3VwKGdyb3VwLmxhYmVsLCBuZXdPcHRpb25zLCBvcHRpb25zKSwgb3B0aW9ucyk7XG4gICAgbGFiZWwuY2xhc3Nlcy5wdXNoKFwiY2QtbGFiZWwtXCIgKyBncm91cC5zaWRlKTtcbiAgICBsYWJlbC5zdHlsZS5ib3R0b20gPSBtYWtlRW0oMC44IC0gbGFiZWwuZGVwdGgpOyAvLyBaZXJvIG91dCBsYWJlbCBoZWlnaHQgJiBkZXB0aCwgc28gdmVydGljYWwgYWxpZ24gb2YgYXJyb3cgaXMgc2V0XG4gICAgLy8gYnkgdGhlIGFycm93IGhlaWdodCwgbm90IGJ5IHRoZSBsYWJlbC5cblxuICAgIGxhYmVsLmhlaWdodCA9IDA7XG4gICAgbGFiZWwuZGVwdGggPSAwO1xuICAgIHJldHVybiBsYWJlbDtcbiAgfSxcblxuICBtYXRobWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgbGV0IGxhYmVsID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtcm93XCIsIFtidWlsZE1hdGhNTF9idWlsZEdyb3VwKGdyb3VwLmxhYmVsLCBvcHRpb25zKV0pO1xuICAgIGxhYmVsID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtcGFkZGVkXCIsIFtsYWJlbF0pO1xuICAgIGxhYmVsLnNldEF0dHJpYnV0ZShcIndpZHRoXCIsIFwiMFwiKTtcblxuICAgIGlmIChncm91cC5zaWRlID09PSBcImxlZnRcIikge1xuICAgICAgbGFiZWwuc2V0QXR0cmlidXRlKFwibHNwYWNlXCIsIFwiLTF3aWR0aFwiKTtcbiAgICB9IC8vIFdlIGhhdmUgdG8gZ3Vlc3MgYXQgdmVydGljYWwgYWxpZ25tZW50LiBXZSBrbm93IHRoZSBhcnJvdyBpcyAxLjhlbSB0YWxsLFxuICAgIC8vIEJ1dCB3ZSBkb24ndCBrbm93IHRoZSBoZWlnaHQgb3IgZGVwdGggb2YgdGhlIGxhYmVsLlxuXG5cbiAgICBsYWJlbC5zZXRBdHRyaWJ1dGUoXCJ2b2Zmc2V0XCIsIFwiMC43ZW1cIik7XG4gICAgbGFiZWwgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1zdHlsZVwiLCBbbGFiZWxdKTtcbiAgICBsYWJlbC5zZXRBdHRyaWJ1dGUoXCJkaXNwbGF5c3R5bGVcIiwgXCJmYWxzZVwiKTtcbiAgICBsYWJlbC5zZXRBdHRyaWJ1dGUoXCJzY3JpcHRsZXZlbFwiLCBcIjFcIik7XG4gICAgcmV0dXJuIGxhYmVsO1xuICB9XG5cbn0pO1xuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcImNkbGFiZWxwYXJlbnRcIixcbiAgbmFtZXM6IFtcIlxcXFxcXFxcY2RwYXJlbnRcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMVxuICB9LFxuXG4gIGhhbmRsZXIoX3JlZjIsIGFyZ3MpIHtcbiAgICBsZXQge1xuICAgICAgcGFyc2VyXG4gICAgfSA9IF9yZWYyO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImNkbGFiZWxwYXJlbnRcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgZnJhZ21lbnQ6IGFyZ3NbMF1cbiAgICB9O1xuICB9LFxuXG4gIGh0bWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgLy8gV3JhcCB0aGUgdmVydGljYWwgYXJyb3cgYW5kIGl0cyBsYWJlbHMuXG4gICAgLy8gVGhlIHBhcmVudCBnZXRzIHBvc2l0aW9uOiByZWxhdGl2ZS4gVGhlIGNoaWxkIGdldHMgcG9zaXRpb246IGFic29sdXRlLlxuICAgIC8vIFNvIENTUyBjYW4gbG9jYXRlIHRoZSBsYWJlbCBjb3JyZWN0bHkuXG4gICAgY29uc3QgcGFyZW50ID0gYnVpbGRDb21tb24ud3JhcEZyYWdtZW50KGJ1aWxkR3JvdXAoZ3JvdXAuZnJhZ21lbnQsIG9wdGlvbnMpLCBvcHRpb25zKTtcbiAgICBwYXJlbnQuY2xhc3Nlcy5wdXNoKFwiY2QtdmVydC1hcnJvd1wiKTtcbiAgICByZXR1cm4gcGFyZW50O1xuICB9LFxuXG4gIG1hdGhtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtcm93XCIsIFtidWlsZE1hdGhNTF9idWlsZEdyb3VwKGdyb3VwLmZyYWdtZW50LCBvcHRpb25zKV0pO1xuICB9XG5cbn0pO1xuOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9ucy9jaGFyLmpzXG5cblxuIC8vIFxcQGNoYXIgaXMgYW4gaW50ZXJuYWwgZnVuY3Rpb24gdGhhdCB0YWtlcyBhIGdyb3VwZWQgZGVjaW1hbCBhcmd1bWVudCBsaWtlXG4vLyB7MTIzfSBhbmQgY29udmVydHMgaW50byBzeW1ib2wgd2l0aCBjb2RlIDEyMy4gIEl0IGlzIHVzZWQgYnkgdGhlICptYWNybypcbi8vIFxcY2hhciBkZWZpbmVkIGluIG1hY3Jvcy5qcy5cblxuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcInRleHRvcmRcIixcbiAgbmFtZXM6IFtcIlxcXFxAY2hhclwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxLFxuICAgIGFsbG93ZWRJblRleHQ6IHRydWVcbiAgfSxcblxuICBoYW5kbGVyKF9yZWYsIGFyZ3MpIHtcbiAgICBsZXQge1xuICAgICAgcGFyc2VyXG4gICAgfSA9IF9yZWY7XG4gICAgY29uc3QgYXJnID0gYXNzZXJ0Tm9kZVR5cGUoYXJnc1swXSwgXCJvcmRncm91cFwiKTtcbiAgICBjb25zdCBncm91cCA9IGFyZy5ib2R5O1xuICAgIGxldCBudW1iZXIgPSBcIlwiO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBncm91cC5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qgbm9kZSA9IGFzc2VydE5vZGVUeXBlKGdyb3VwW2ldLCBcInRleHRvcmRcIik7XG4gICAgICBudW1iZXIgKz0gbm9kZS50ZXh0O1xuICAgIH1cblxuICAgIGxldCBjb2RlID0gcGFyc2VJbnQobnVtYmVyKTtcbiAgICBsZXQgdGV4dDtcblxuICAgIGlmIChpc05hTihjb2RlKSkge1xuICAgICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiXFxcXEBjaGFyIGhhcyBub24tbnVtZXJpYyBhcmd1bWVudCBcIiArIG51bWJlcik7IC8vIElmIHdlIGRyb3AgSUUgc3VwcG9ydCwgdGhlIGZvbGxvd2luZyBjb2RlIGNvdWxkIGJlIHJlcGxhY2VkIHdpdGhcbiAgICAgIC8vIHRleHQgPSBTdHJpbmcuZnJvbUNvZGVQb2ludChjb2RlKVxuICAgIH0gZWxzZSBpZiAoY29kZSA8IDAgfHwgY29kZSA+PSAweDEwZmZmZikge1xuICAgICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiXFxcXEBjaGFyIHdpdGggaW52YWxpZCBjb2RlIHBvaW50IFwiICsgbnVtYmVyKTtcbiAgICB9IGVsc2UgaWYgKGNvZGUgPD0gMHhmZmZmKSB7XG4gICAgICB0ZXh0ID0gU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQXN0cmFsIGNvZGUgcG9pbnQ7IHNwbGl0IGludG8gc3Vycm9nYXRlIGhhbHZlc1xuICAgICAgY29kZSAtPSAweDEwMDAwO1xuICAgICAgdGV4dCA9IFN0cmluZy5mcm9tQ2hhckNvZGUoKGNvZGUgPj4gMTApICsgMHhkODAwLCAoY29kZSAmIDB4M2ZmKSArIDB4ZGMwMCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwidGV4dG9yZFwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICB0ZXh0OiB0ZXh0XG4gICAgfTtcbiAgfVxuXG59KTtcbjsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbnMvY29sb3IuanNcblxuXG5cblxuXG5cblxuY29uc3QgY29sb3JfaHRtbEJ1aWxkZXIgPSAoZ3JvdXAsIG9wdGlvbnMpID0+IHtcbiAgY29uc3QgZWxlbWVudHMgPSBidWlsZEV4cHJlc3Npb24oZ3JvdXAuYm9keSwgb3B0aW9ucy53aXRoQ29sb3IoZ3JvdXAuY29sb3IpLCBmYWxzZSk7IC8vIFxcY29sb3IgaXNuJ3Qgc3VwcG9zZWQgdG8gYWZmZWN0IHRoZSB0eXBlIG9mIHRoZSBlbGVtZW50cyBpdCBjb250YWlucy5cbiAgLy8gVG8gYWNjb21wbGlzaCB0aGlzLCB3ZSB3cmFwIHRoZSByZXN1bHRzIGluIGEgZnJhZ21lbnQsIHNvIHRoZSBpbm5lclxuICAvLyBlbGVtZW50cyB3aWxsIGJlIGFibGUgdG8gZGlyZWN0bHkgaW50ZXJhY3Qgd2l0aCB0aGVpciBuZWlnaGJvcnMuIEZvclxuICAvLyBleGFtcGxlLCBgXFxjb2xvcntyZWR9ezIgK30gM2AgaGFzIHRoZSBzYW1lIHNwYWNpbmcgYXMgYDIgKyAzYFxuXG4gIHJldHVybiBidWlsZENvbW1vbi5tYWtlRnJhZ21lbnQoZWxlbWVudHMpO1xufTtcblxuY29uc3QgY29sb3JfbWF0aG1sQnVpbGRlciA9IChncm91cCwgb3B0aW9ucykgPT4ge1xuICBjb25zdCBpbm5lciA9IGJ1aWxkTWF0aE1MX2J1aWxkRXhwcmVzc2lvbihncm91cC5ib2R5LCBvcHRpb25zLndpdGhDb2xvcihncm91cC5jb2xvcikpO1xuICBjb25zdCBub2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtc3R5bGVcIiwgaW5uZXIpO1xuICBub2RlLnNldEF0dHJpYnV0ZShcIm1hdGhjb2xvclwiLCBncm91cC5jb2xvcik7XG4gIHJldHVybiBub2RlO1xufTtcblxuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcImNvbG9yXCIsXG4gIG5hbWVzOiBbXCJcXFxcdGV4dGNvbG9yXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDIsXG4gICAgYWxsb3dlZEluVGV4dDogdHJ1ZSxcbiAgICBhcmdUeXBlczogW1wiY29sb3JcIiwgXCJvcmlnaW5hbFwiXVxuICB9LFxuXG4gIGhhbmRsZXIoX3JlZiwgYXJncykge1xuICAgIGxldCB7XG4gICAgICBwYXJzZXJcbiAgICB9ID0gX3JlZjtcbiAgICBjb25zdCBjb2xvciA9IGFzc2VydE5vZGVUeXBlKGFyZ3NbMF0sIFwiY29sb3ItdG9rZW5cIikuY29sb3I7XG4gICAgY29uc3QgYm9keSA9IGFyZ3NbMV07XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiY29sb3JcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgY29sb3IsXG4gICAgICBib2R5OiBvcmRhcmd1bWVudChib2R5KVxuICAgIH07XG4gIH0sXG5cbiAgaHRtbEJ1aWxkZXI6IGNvbG9yX2h0bWxCdWlsZGVyLFxuICBtYXRobWxCdWlsZGVyOiBjb2xvcl9tYXRobWxCdWlsZGVyXG59KTtcbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJjb2xvclwiLFxuICBuYW1lczogW1wiXFxcXGNvbG9yXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDEsXG4gICAgYWxsb3dlZEluVGV4dDogdHJ1ZSxcbiAgICBhcmdUeXBlczogW1wiY29sb3JcIl1cbiAgfSxcblxuICBoYW5kbGVyKF9yZWYyLCBhcmdzKSB7XG4gICAgbGV0IHtcbiAgICAgIHBhcnNlcixcbiAgICAgIGJyZWFrT25Ub2tlblRleHRcbiAgICB9ID0gX3JlZjI7XG4gICAgY29uc3QgY29sb3IgPSBhc3NlcnROb2RlVHlwZShhcmdzWzBdLCBcImNvbG9yLXRva2VuXCIpLmNvbG9yOyAvLyBTZXQgbWFjcm8gXFxjdXJyZW50QGNvbG9yIGluIGN1cnJlbnQgbmFtZXNwYWNlIHRvIHN0b3JlIHRoZSBjdXJyZW50XG4gICAgLy8gY29sb3IsIG1pbWlja2luZyB0aGUgYmVoYXZpb3Igb2YgY29sb3Iuc3R5LlxuICAgIC8vIFRoaXMgaXMgY3VycmVudGx5IHVzZWQganVzdCB0byBjb3JyZWN0bHkgY29sb3IgYSBcXHJpZ2h0XG4gICAgLy8gdGhhdCBmb2xsb3dzIGEgXFxjb2xvciBjb21tYW5kLlxuXG4gICAgcGFyc2VyLmd1bGxldC5tYWNyb3Muc2V0KFwiXFxcXGN1cnJlbnRAY29sb3JcIiwgY29sb3IpOyAvLyBQYXJzZSBvdXQgdGhlIGltcGxpY2l0IGJvZHkgdGhhdCBzaG91bGQgYmUgY29sb3JlZC5cblxuICAgIGNvbnN0IGJvZHkgPSBwYXJzZXIucGFyc2VFeHByZXNzaW9uKHRydWUsIGJyZWFrT25Ub2tlblRleHQpO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImNvbG9yXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGNvbG9yLFxuICAgICAgYm9keVxuICAgIH07XG4gIH0sXG5cbiAgaHRtbEJ1aWxkZXI6IGNvbG9yX2h0bWxCdWlsZGVyLFxuICBtYXRobWxCdWlsZGVyOiBjb2xvcl9tYXRobWxCdWlsZGVyXG59KTtcbjsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbnMvY3IuanNcbi8vIFJvdyBicmVha3Mgd2l0aGluIHRhYnVsYXIgZW52aXJvbm1lbnRzLCBhbmQgbGluZSBicmVha3MgYXQgdG9wIGxldmVsXG5cblxuXG5cbiAvLyBcXERlY2xhcmVSb2J1c3RDb21tYW5kXFxcXHsuLi5cXEB4bmV3bGluZX1cblxuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcImNyXCIsXG4gIG5hbWVzOiBbXCJcXFxcXFxcXFwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAwLFxuICAgIG51bU9wdGlvbmFsQXJnczogMCxcbiAgICBhbGxvd2VkSW5UZXh0OiB0cnVlXG4gIH0sXG5cbiAgaGFuZGxlcihfcmVmLCBhcmdzLCBvcHRBcmdzKSB7XG4gICAgbGV0IHtcbiAgICAgIHBhcnNlclxuICAgIH0gPSBfcmVmO1xuICAgIGNvbnN0IHNpemUgPSBwYXJzZXIuZ3VsbGV0LmZ1dHVyZSgpLnRleHQgPT09IFwiW1wiID8gcGFyc2VyLnBhcnNlU2l6ZUdyb3VwKHRydWUpIDogbnVsbDtcbiAgICBjb25zdCBuZXdMaW5lID0gIXBhcnNlci5zZXR0aW5ncy5kaXNwbGF5TW9kZSB8fCAhcGFyc2VyLnNldHRpbmdzLnVzZVN0cmljdEJlaGF2aW9yKFwibmV3TGluZUluRGlzcGxheU1vZGVcIiwgXCJJbiBMYVRlWCwgXFxcXFxcXFwgb3IgXFxcXG5ld2xpbmUgXCIgKyBcImRvZXMgbm90aGluZyBpbiBkaXNwbGF5IG1vZGVcIik7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiY3JcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgbmV3TGluZSxcbiAgICAgIHNpemU6IHNpemUgJiYgYXNzZXJ0Tm9kZVR5cGUoc2l6ZSwgXCJzaXplXCIpLnZhbHVlXG4gICAgfTtcbiAgfSxcblxuICAvLyBUaGUgZm9sbG93aW5nIGJ1aWxkZXJzIGFyZSBjYWxsZWQgb25seSBhdCB0aGUgdG9wIGxldmVsLFxuICAvLyBub3Qgd2l0aGluIHRhYnVsYXIvYXJyYXkgZW52aXJvbm1lbnRzLlxuICBodG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIGNvbnN0IHNwYW4gPSBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJtc3BhY2VcIl0sIFtdLCBvcHRpb25zKTtcblxuICAgIGlmIChncm91cC5uZXdMaW5lKSB7XG4gICAgICBzcGFuLmNsYXNzZXMucHVzaChcIm5ld2xpbmVcIik7XG5cbiAgICAgIGlmIChncm91cC5zaXplKSB7XG4gICAgICAgIHNwYW4uc3R5bGUubWFyZ2luVG9wID0gbWFrZUVtKGNhbGN1bGF0ZVNpemUoZ3JvdXAuc2l6ZSwgb3B0aW9ucykpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzcGFuO1xuICB9LFxuXG4gIG1hdGhtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICBjb25zdCBub2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtc3BhY2VcIik7XG5cbiAgICBpZiAoZ3JvdXAubmV3TGluZSkge1xuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJsaW5lYnJlYWtcIiwgXCJuZXdsaW5lXCIpO1xuXG4gICAgICBpZiAoZ3JvdXAuc2l6ZSkge1xuICAgICAgICBub2RlLnNldEF0dHJpYnV0ZShcImhlaWdodFwiLCBtYWtlRW0oY2FsY3VsYXRlU2l6ZShncm91cC5zaXplLCBvcHRpb25zKSkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBub2RlO1xuICB9XG5cbn0pO1xuOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9ucy9kZWYuanNcblxuXG5cbmNvbnN0IGdsb2JhbE1hcCA9IHtcbiAgXCJcXFxcZ2xvYmFsXCI6IFwiXFxcXGdsb2JhbFwiLFxuICBcIlxcXFxsb25nXCI6IFwiXFxcXFxcXFxnbG9iYWxsb25nXCIsXG4gIFwiXFxcXFxcXFxnbG9iYWxsb25nXCI6IFwiXFxcXFxcXFxnbG9iYWxsb25nXCIsXG4gIFwiXFxcXGRlZlwiOiBcIlxcXFxnZGVmXCIsXG4gIFwiXFxcXGdkZWZcIjogXCJcXFxcZ2RlZlwiLFxuICBcIlxcXFxlZGVmXCI6IFwiXFxcXHhkZWZcIixcbiAgXCJcXFxceGRlZlwiOiBcIlxcXFx4ZGVmXCIsXG4gIFwiXFxcXGxldFwiOiBcIlxcXFxcXFxcZ2xvYmFsbGV0XCIsXG4gIFwiXFxcXGZ1dHVyZWxldFwiOiBcIlxcXFxcXFxcZ2xvYmFsZnV0dXJlXCJcbn07XG5cbmNvbnN0IGNoZWNrQ29udHJvbFNlcXVlbmNlID0gdG9rID0+IHtcbiAgY29uc3QgbmFtZSA9IHRvay50ZXh0O1xuXG4gIGlmICgvXig/OltcXFxce30kJiNeX118RU9GKSQvLnRlc3QobmFtZSkpIHtcbiAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJFeHBlY3RlZCBhIGNvbnRyb2wgc2VxdWVuY2VcIiwgdG9rKTtcbiAgfVxuXG4gIHJldHVybiBuYW1lO1xufTtcblxuY29uc3QgZ2V0UkhTID0gcGFyc2VyID0+IHtcbiAgbGV0IHRvayA9IHBhcnNlci5ndWxsZXQucG9wVG9rZW4oKTtcblxuICBpZiAodG9rLnRleHQgPT09IFwiPVwiKSB7XG4gICAgLy8gY29uc3VtZSBvcHRpb25hbCBlcXVhbHNcbiAgICB0b2sgPSBwYXJzZXIuZ3VsbGV0LnBvcFRva2VuKCk7XG5cbiAgICBpZiAodG9rLnRleHQgPT09IFwiIFwiKSB7XG4gICAgICAvLyBjb25zdW1lIG9uZSBvcHRpb25hbCBzcGFjZVxuICAgICAgdG9rID0gcGFyc2VyLmd1bGxldC5wb3BUb2tlbigpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0b2s7XG59O1xuXG5jb25zdCBsZXRDb21tYW5kID0gKHBhcnNlciwgbmFtZSwgdG9rLCBnbG9iYWwpID0+IHtcbiAgbGV0IG1hY3JvID0gcGFyc2VyLmd1bGxldC5tYWNyb3MuZ2V0KHRvay50ZXh0KTtcblxuICBpZiAobWFjcm8gPT0gbnVsbCkge1xuICAgIC8vIGRvbid0IGV4cGFuZCBpdCBsYXRlciBldmVuIGlmIGEgbWFjcm8gd2l0aCB0aGUgc2FtZSBuYW1lIGlzIGRlZmluZWRcbiAgICAvLyBlLmcuLCBcXGxldFxcZm9vPVxcZnJhYyBcXGRlZlxcZnJhY3tcXHJlbGF4fSBcXGZyYWMxMlxuICAgIHRvay5ub2V4cGFuZCA9IHRydWU7XG4gICAgbWFjcm8gPSB7XG4gICAgICB0b2tlbnM6IFt0b2tdLFxuICAgICAgbnVtQXJnczogMCxcbiAgICAgIC8vIHJlcHJvZHVjZSB0aGUgc2FtZSBiZWhhdmlvciBpbiBleHBhbnNpb25cbiAgICAgIHVuZXhwYW5kYWJsZTogIXBhcnNlci5ndWxsZXQuaXNFeHBhbmRhYmxlKHRvay50ZXh0KVxuICAgIH07XG4gIH1cblxuICBwYXJzZXIuZ3VsbGV0Lm1hY3Jvcy5zZXQobmFtZSwgbWFjcm8sIGdsb2JhbCk7XG59OyAvLyA8YXNzaWdubWVudD4gLT4gPG5vbi1tYWNybyBhc3NpZ25tZW50Pnw8bWFjcm8gYXNzaWdubWVudD5cbi8vIDxub24tbWFjcm8gYXNzaWdubWVudD4gLT4gPHNpbXBsZSBhc3NpZ25tZW50PnxcXGdsb2JhbDxub24tbWFjcm8gYXNzaWdubWVudD5cbi8vIDxtYWNybyBhc3NpZ25tZW50PiAtPiA8ZGVmaW5pdGlvbj58PHByZWZpeD48bWFjcm8gYXNzaWdubWVudD5cbi8vIDxwcmVmaXg+IC0+IFxcZ2xvYmFsfFxcbG9uZ3xcXG91dGVyXG5cblxuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcImludGVybmFsXCIsXG4gIG5hbWVzOiBbXCJcXFxcZ2xvYmFsXCIsIFwiXFxcXGxvbmdcIiwgXCJcXFxcXFxcXGdsb2JhbGxvbmdcIiAvLyBjYW7igJl0IGJlIGVudGVyZWQgZGlyZWN0bHlcbiAgXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAwLFxuICAgIGFsbG93ZWRJblRleHQ6IHRydWVcbiAgfSxcblxuICBoYW5kbGVyKF9yZWYpIHtcbiAgICBsZXQge1xuICAgICAgcGFyc2VyLFxuICAgICAgZnVuY05hbWVcbiAgICB9ID0gX3JlZjtcbiAgICBwYXJzZXIuY29uc3VtZVNwYWNlcygpO1xuICAgIGNvbnN0IHRva2VuID0gcGFyc2VyLmZldGNoKCk7XG5cbiAgICBpZiAoZ2xvYmFsTWFwW3Rva2VuLnRleHRdKSB7XG4gICAgICAvLyBLYVRlWCBkb2Vzbid0IGhhdmUgXFxwYXIsIHNvIGlnbm9yZSBcXGxvbmdcbiAgICAgIGlmIChmdW5jTmFtZSA9PT0gXCJcXFxcZ2xvYmFsXCIgfHwgZnVuY05hbWUgPT09IFwiXFxcXFxcXFxnbG9iYWxsb25nXCIpIHtcbiAgICAgICAgdG9rZW4udGV4dCA9IGdsb2JhbE1hcFt0b2tlbi50ZXh0XTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGFzc2VydE5vZGVUeXBlKHBhcnNlci5wYXJzZUZ1bmN0aW9uKCksIFwiaW50ZXJuYWxcIik7XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiSW52YWxpZCB0b2tlbiBhZnRlciBtYWNybyBwcmVmaXhcIiwgdG9rZW4pO1xuICB9XG5cbn0pOyAvLyBCYXNpYyBzdXBwb3J0IGZvciBtYWNybyBkZWZpbml0aW9uczogXFxkZWYsIFxcZ2RlZiwgXFxlZGVmLCBcXHhkZWZcbi8vIDxkZWZpbml0aW9uPiAtPiA8ZGVmPjxjb250cm9sIHNlcXVlbmNlPjxkZWZpbml0aW9uIHRleHQ+XG4vLyA8ZGVmPiAtPiBcXGRlZnxcXGdkZWZ8XFxlZGVmfFxceGRlZlxuLy8gPGRlZmluaXRpb24gdGV4dD4gLT4gPHBhcmFtZXRlciB0ZXh0PjxsZWZ0IGJyYWNlPjxiYWxhbmNlZCB0ZXh0PjxyaWdodCBicmFjZT5cblxuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcImludGVybmFsXCIsXG4gIG5hbWVzOiBbXCJcXFxcZGVmXCIsIFwiXFxcXGdkZWZcIiwgXCJcXFxcZWRlZlwiLCBcIlxcXFx4ZGVmXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDAsXG4gICAgYWxsb3dlZEluVGV4dDogdHJ1ZSxcbiAgICBwcmltaXRpdmU6IHRydWVcbiAgfSxcblxuICBoYW5kbGVyKF9yZWYyKSB7XG4gICAgbGV0IHtcbiAgICAgIHBhcnNlcixcbiAgICAgIGZ1bmNOYW1lXG4gICAgfSA9IF9yZWYyO1xuICAgIGxldCB0b2sgPSBwYXJzZXIuZ3VsbGV0LnBvcFRva2VuKCk7XG4gICAgY29uc3QgbmFtZSA9IHRvay50ZXh0O1xuXG4gICAgaWYgKC9eKD86W1xcXFx7fSQmI15fXXxFT0YpJC8udGVzdChuYW1lKSkge1xuICAgICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiRXhwZWN0ZWQgYSBjb250cm9sIHNlcXVlbmNlXCIsIHRvayk7XG4gICAgfVxuXG4gICAgbGV0IG51bUFyZ3MgPSAwO1xuICAgIGxldCBpbnNlcnQ7XG4gICAgY29uc3QgZGVsaW1pdGVycyA9IFtbXV07IC8vIDxwYXJhbWV0ZXIgdGV4dD4gY29udGFpbnMgbm8gYnJhY2VzXG5cbiAgICB3aGlsZSAocGFyc2VyLmd1bGxldC5mdXR1cmUoKS50ZXh0ICE9PSBcIntcIikge1xuICAgICAgdG9rID0gcGFyc2VyLmd1bGxldC5wb3BUb2tlbigpO1xuXG4gICAgICBpZiAodG9rLnRleHQgPT09IFwiI1wiKSB7XG4gICAgICAgIC8vIElmIHRoZSB2ZXJ5IGxhc3QgY2hhcmFjdGVyIG9mIHRoZSA8cGFyYW1ldGVyIHRleHQ+IGlzICMsIHNvIHRoYXRcbiAgICAgICAgLy8gdGhpcyAjIGlzIGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5IHssIFRlWCB3aWxsIGJlaGF2ZSBhcyBpZiB0aGUge1xuICAgICAgICAvLyBoYWQgYmVlbiBpbnNlcnRlZCBhdCB0aGUgcmlnaHQgZW5kIG9mIGJvdGggdGhlIHBhcmFtZXRlciB0ZXh0XG4gICAgICAgIC8vIGFuZCB0aGUgcmVwbGFjZW1lbnQgdGV4dC5cbiAgICAgICAgaWYgKHBhcnNlci5ndWxsZXQuZnV0dXJlKCkudGV4dCA9PT0gXCJ7XCIpIHtcbiAgICAgICAgICBpbnNlcnQgPSBwYXJzZXIuZ3VsbGV0LmZ1dHVyZSgpO1xuICAgICAgICAgIGRlbGltaXRlcnNbbnVtQXJnc10ucHVzaChcIntcIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH0gLy8gQSBwYXJhbWV0ZXIsIHRoZSBmaXJzdCBhcHBlYXJhbmNlIG9mICMgbXVzdCBiZSBmb2xsb3dlZCBieSAxLFxuICAgICAgICAvLyB0aGUgbmV4dCBieSAyLCBhbmQgc28gb247IHVwIHRvIG5pbmUgI+KAmXMgYXJlIGFsbG93ZWRcblxuXG4gICAgICAgIHRvayA9IHBhcnNlci5ndWxsZXQucG9wVG9rZW4oKTtcblxuICAgICAgICBpZiAoIS9eWzEtOV0kLy50ZXN0KHRvay50ZXh0KSkge1xuICAgICAgICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIkludmFsaWQgYXJndW1lbnQgbnVtYmVyIFxcXCJcIiArIHRvay50ZXh0ICsgXCJcXFwiXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBhcnNlSW50KHRvay50ZXh0KSAhPT0gbnVtQXJncyArIDEpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJBcmd1bWVudCBudW1iZXIgXFxcIlwiICsgdG9rLnRleHQgKyBcIlxcXCIgb3V0IG9mIG9yZGVyXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgbnVtQXJncysrO1xuICAgICAgICBkZWxpbWl0ZXJzLnB1c2goW10pO1xuICAgICAgfSBlbHNlIGlmICh0b2sudGV4dCA9PT0gXCJFT0ZcIikge1xuICAgICAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJFeHBlY3RlZCBhIG1hY3JvIGRlZmluaXRpb25cIik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWxpbWl0ZXJzW251bUFyZ3NdLnB1c2godG9rLnRleHQpO1xuICAgICAgfVxuICAgIH0gLy8gcmVwbGFjZW1lbnQgdGV4dCwgZW5jbG9zZWQgaW4gJ3snIGFuZCAnfScgYW5kIHByb3Blcmx5IG5lc3RlZFxuXG5cbiAgICBsZXQge1xuICAgICAgdG9rZW5zXG4gICAgfSA9IHBhcnNlci5ndWxsZXQuY29uc3VtZUFyZygpO1xuXG4gICAgaWYgKGluc2VydCkge1xuICAgICAgdG9rZW5zLnVuc2hpZnQoaW5zZXJ0KTtcbiAgICB9XG5cbiAgICBpZiAoZnVuY05hbWUgPT09IFwiXFxcXGVkZWZcIiB8fCBmdW5jTmFtZSA9PT0gXCJcXFxceGRlZlwiKSB7XG4gICAgICB0b2tlbnMgPSBwYXJzZXIuZ3VsbGV0LmV4cGFuZFRva2Vucyh0b2tlbnMpO1xuICAgICAgdG9rZW5zLnJldmVyc2UoKTsgLy8gdG8gZml0IGluIHdpdGggc3RhY2sgb3JkZXJcbiAgICB9IC8vIEZpbmFsIGFyZyBpcyB0aGUgZXhwYW5zaW9uIG9mIHRoZSBtYWNyb1xuXG5cbiAgICBwYXJzZXIuZ3VsbGV0Lm1hY3Jvcy5zZXQobmFtZSwge1xuICAgICAgdG9rZW5zLFxuICAgICAgbnVtQXJncyxcbiAgICAgIGRlbGltaXRlcnNcbiAgICB9LCBmdW5jTmFtZSA9PT0gZ2xvYmFsTWFwW2Z1bmNOYW1lXSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiaW50ZXJuYWxcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlXG4gICAgfTtcbiAgfVxuXG59KTsgLy8gPHNpbXBsZSBhc3NpZ25tZW50PiAtPiA8bGV0IGFzc2lnbm1lbnQ+XG4vLyA8bGV0IGFzc2lnbm1lbnQ+IC0+IFxcZnV0dXJlbGV0PGNvbnRyb2wgc2VxdWVuY2U+PHRva2VuPjx0b2tlbj5cbi8vICAgICB8IFxcbGV0PGNvbnRyb2wgc2VxdWVuY2U+PGVxdWFscz48b25lIG9wdGlvbmFsIHNwYWNlPjx0b2tlbj5cbi8vIDxlcXVhbHM+IC0+IDxvcHRpb25hbCBzcGFjZXM+fDxvcHRpb25hbCBzcGFjZXM+PVxuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwiaW50ZXJuYWxcIixcbiAgbmFtZXM6IFtcIlxcXFxsZXRcIiwgXCJcXFxcXFxcXGdsb2JhbGxldFwiIC8vIGNhbuKAmXQgYmUgZW50ZXJlZCBkaXJlY3RseVxuICBdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDAsXG4gICAgYWxsb3dlZEluVGV4dDogdHJ1ZSxcbiAgICBwcmltaXRpdmU6IHRydWVcbiAgfSxcblxuICBoYW5kbGVyKF9yZWYzKSB7XG4gICAgbGV0IHtcbiAgICAgIHBhcnNlcixcbiAgICAgIGZ1bmNOYW1lXG4gICAgfSA9IF9yZWYzO1xuICAgIGNvbnN0IG5hbWUgPSBjaGVja0NvbnRyb2xTZXF1ZW5jZShwYXJzZXIuZ3VsbGV0LnBvcFRva2VuKCkpO1xuICAgIHBhcnNlci5ndWxsZXQuY29uc3VtZVNwYWNlcygpO1xuICAgIGNvbnN0IHRvayA9IGdldFJIUyhwYXJzZXIpO1xuICAgIGxldENvbW1hbmQocGFyc2VyLCBuYW1lLCB0b2ssIGZ1bmNOYW1lID09PSBcIlxcXFxcXFxcZ2xvYmFsbGV0XCIpO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImludGVybmFsXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZVxuICAgIH07XG4gIH1cblxufSk7IC8vIHJlZjogaHR0cHM6Ly93d3cudHVnLm9yZy9UVUdib2F0L3RiMDktMy90YjIyYmVjaHRvbHNoZWltLnBkZlxuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwiaW50ZXJuYWxcIixcbiAgbmFtZXM6IFtcIlxcXFxmdXR1cmVsZXRcIiwgXCJcXFxcXFxcXGdsb2JhbGZ1dHVyZVwiIC8vIGNhbuKAmXQgYmUgZW50ZXJlZCBkaXJlY3RseVxuICBdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDAsXG4gICAgYWxsb3dlZEluVGV4dDogdHJ1ZSxcbiAgICBwcmltaXRpdmU6IHRydWVcbiAgfSxcblxuICBoYW5kbGVyKF9yZWY0KSB7XG4gICAgbGV0IHtcbiAgICAgIHBhcnNlcixcbiAgICAgIGZ1bmNOYW1lXG4gICAgfSA9IF9yZWY0O1xuICAgIGNvbnN0IG5hbWUgPSBjaGVja0NvbnRyb2xTZXF1ZW5jZShwYXJzZXIuZ3VsbGV0LnBvcFRva2VuKCkpO1xuICAgIGNvbnN0IG1pZGRsZSA9IHBhcnNlci5ndWxsZXQucG9wVG9rZW4oKTtcbiAgICBjb25zdCB0b2sgPSBwYXJzZXIuZ3VsbGV0LnBvcFRva2VuKCk7XG4gICAgbGV0Q29tbWFuZChwYXJzZXIsIG5hbWUsIHRvaywgZnVuY05hbWUgPT09IFwiXFxcXFxcXFxnbG9iYWxmdXR1cmVcIik7XG4gICAgcGFyc2VyLmd1bGxldC5wdXNoVG9rZW4odG9rKTtcbiAgICBwYXJzZXIuZ3VsbGV0LnB1c2hUb2tlbihtaWRkbGUpO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImludGVybmFsXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZVxuICAgIH07XG4gIH1cblxufSk7XG47Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZGVsaW1pdGVyLmpzXG4vKipcbiAqIFRoaXMgZmlsZSBkZWFscyB3aXRoIGNyZWF0aW5nIGRlbGltaXRlcnMgb2YgdmFyaW91cyBzaXplcy4gVGhlIFRlWGJvb2tcbiAqIGRpc2N1c3NlcyB0aGVzZSByb3V0aW5lcyBvbiBwYWdlIDQ0MS00NDIsIGluIHRoZSBcIkFub3RoZXIgc3Vicm91dGluZSBzZXRzIGJveFxuICogeCB0byBhIHNwZWNpZmllZCB2YXJpYWJsZSBkZWxpbWl0ZXJcIiBwYXJhZ3JhcGguXG4gKlxuICogVGhlcmUgYXJlIHRocmVlIG1haW4gcm91dGluZXMgaGVyZS4gYG1ha2VTbWFsbERlbGltYCBtYWtlcyBhIGRlbGltaXRlciBpbiB0aGVcbiAqIG5vcm1hbCBmb250LCBidXQgaW4gZWl0aGVyIHRleHQsIHNjcmlwdCwgb3Igc2NyaXB0c2NyaXB0IHN0eWxlLlxuICogYG1ha2VMYXJnZURlbGltYCBtYWtlcyBhIGRlbGltaXRlciBpbiB0ZXh0c3R5bGUsIGJ1dCBpbiBvbmUgb2YgdGhlIFNpemUxLFxuICogU2l6ZTIsIFNpemUzLCBvciBTaXplNCBmb250cy4gYG1ha2VTdGFja2VkRGVsaW1gIG1ha2VzIGEgZGVsaW1pdGVyIG91dCBvZlxuICogc21hbGxlciBwaWVjZXMgdGhhdCBhcmUgc3RhY2tlZCBvbiB0b3Agb2Ygb25lIGFub3RoZXIuXG4gKlxuICogVGhlIGZ1bmN0aW9ucyB0YWtlIGEgcGFyYW1ldGVyIGBjZW50ZXJgLCB3aGljaCBkZXRlcm1pbmVzIGlmIHRoZSBkZWxpbWl0ZXJcbiAqIHNob3VsZCBiZSBjZW50ZXJlZCBhcm91bmQgdGhlIGF4aXMuXG4gKlxuICogVGhlbiwgdGhlcmUgYXJlIHRocmVlIGV4cG9zZWQgZnVuY3Rpb25zLiBgc2l6ZWREZWxpbWAgbWFrZXMgYSBkZWxpbWl0ZXIgaW5cbiAqIG9uZSBvZiB0aGUgZ2l2ZW4gc2l6ZXMuIFRoaXMgaXMgdXNlZCBmb3IgdGhpbmdzIGxpa2UgYFxcYmlnbGAuXG4gKiBgY3VzdG9tU2l6ZWREZWxpbWAgbWFrZXMgYSBkZWxpbWl0ZXIgd2l0aCBhIGdpdmVuIHRvdGFsIGhlaWdodCtkZXB0aC4gSXQgaXNcbiAqIGNhbGxlZCBpbiBwbGFjZXMgbGlrZSBgXFxzcXJ0YC4gYGxlZnRSaWdodERlbGltYCBtYWtlcyBhbiBhcHByb3ByaWF0ZVxuICogZGVsaW1pdGVyIHdoaWNoIHN1cnJvdW5kcyBhbiBleHByZXNzaW9uIG9mIGEgZ2l2ZW4gaGVpZ2h0IGFuIGRlcHRoLiBJdCBpc1xuICogdXNlZCBpbiBgXFxsZWZ0YCBhbmQgYFxccmlnaHRgLlxuICovXG5cblxuXG5cblxuXG5cblxuXG5cblxuLyoqXG4gKiBHZXQgdGhlIG1ldHJpY3MgZm9yIGEgZ2l2ZW4gc3ltYm9sIGFuZCBmb250LCBhZnRlciB0cmFuc2Zvcm1hdGlvbiAoaS5lLlxuICogYWZ0ZXIgZm9sbG93aW5nIHJlcGxhY2VtZW50IGZyb20gc3ltYm9scy5qcylcbiAqL1xuY29uc3QgZ2V0TWV0cmljcyA9IGZ1bmN0aW9uIChzeW1ib2wsIGZvbnQsIG1vZGUpIHtcbiAgY29uc3QgcmVwbGFjZSA9IHNyY19zeW1ib2xzLm1hdGhbc3ltYm9sXSAmJiBzcmNfc3ltYm9scy5tYXRoW3N5bWJvbF0ucmVwbGFjZTtcbiAgY29uc3QgbWV0cmljcyA9IGdldENoYXJhY3Rlck1ldHJpY3MocmVwbGFjZSB8fCBzeW1ib2wsIGZvbnQsIG1vZGUpO1xuXG4gIGlmICghbWV0cmljcykge1xuICAgIHRocm93IG5ldyBFcnJvcihcIlVuc3VwcG9ydGVkIHN5bWJvbCBcIiArIHN5bWJvbCArIFwiIGFuZCBmb250IHNpemUgXCIgKyBmb250ICsgXCIuXCIpO1xuICB9XG5cbiAgcmV0dXJuIG1ldHJpY3M7XG59O1xuLyoqXG4gKiBQdXRzIGEgZGVsaW1pdGVyIHNwYW4gaW4gYSBnaXZlbiBzdHlsZSwgYW5kIGFkZHMgYXBwcm9wcmlhdGUgaGVpZ2h0LCBkZXB0aCxcbiAqIGFuZCBtYXhGb250U2l6ZXMuXG4gKi9cblxuXG5jb25zdCBzdHlsZVdyYXAgPSBmdW5jdGlvbiAoZGVsaW0sIHRvU3R5bGUsIG9wdGlvbnMsIGNsYXNzZXMpIHtcbiAgY29uc3QgbmV3T3B0aW9ucyA9IG9wdGlvbnMuaGF2aW5nQmFzZVN0eWxlKHRvU3R5bGUpO1xuICBjb25zdCBzcGFuID0gYnVpbGRDb21tb24ubWFrZVNwYW4oY2xhc3Nlcy5jb25jYXQobmV3T3B0aW9ucy5zaXppbmdDbGFzc2VzKG9wdGlvbnMpKSwgW2RlbGltXSwgb3B0aW9ucyk7XG4gIGNvbnN0IGRlbGltU2l6ZU11bHRpcGxpZXIgPSBuZXdPcHRpb25zLnNpemVNdWx0aXBsaWVyIC8gb3B0aW9ucy5zaXplTXVsdGlwbGllcjtcbiAgc3Bhbi5oZWlnaHQgKj0gZGVsaW1TaXplTXVsdGlwbGllcjtcbiAgc3Bhbi5kZXB0aCAqPSBkZWxpbVNpemVNdWx0aXBsaWVyO1xuICBzcGFuLm1heEZvbnRTaXplID0gbmV3T3B0aW9ucy5zaXplTXVsdGlwbGllcjtcbiAgcmV0dXJuIHNwYW47XG59O1xuXG5jb25zdCBjZW50ZXJTcGFuID0gZnVuY3Rpb24gKHNwYW4sIG9wdGlvbnMsIHN0eWxlKSB7XG4gIGNvbnN0IG5ld09wdGlvbnMgPSBvcHRpb25zLmhhdmluZ0Jhc2VTdHlsZShzdHlsZSk7XG4gIGNvbnN0IHNoaWZ0ID0gKDEgLSBvcHRpb25zLnNpemVNdWx0aXBsaWVyIC8gbmV3T3B0aW9ucy5zaXplTXVsdGlwbGllcikgKiBvcHRpb25zLmZvbnRNZXRyaWNzKCkuYXhpc0hlaWdodDtcbiAgc3Bhbi5jbGFzc2VzLnB1c2goXCJkZWxpbWNlbnRlclwiKTtcbiAgc3Bhbi5zdHlsZS50b3AgPSBtYWtlRW0oc2hpZnQpO1xuICBzcGFuLmhlaWdodCAtPSBzaGlmdDtcbiAgc3Bhbi5kZXB0aCArPSBzaGlmdDtcbn07XG4vKipcbiAqIE1ha2VzIGEgc21hbGwgZGVsaW1pdGVyLiBUaGlzIGlzIGEgZGVsaW1pdGVyIHRoYXQgY29tZXMgaW4gdGhlIE1haW4tUmVndWxhclxuICogZm9udCwgYnV0IGlzIHJlc3R5bGVkIHRvIGVpdGhlciBiZSBpbiB0ZXh0c3R5bGUsIHNjcmlwdHN0eWxlLCBvclxuICogc2NyaXB0c2NyaXB0c3R5bGUuXG4gKi9cblxuXG5jb25zdCBtYWtlU21hbGxEZWxpbSA9IGZ1bmN0aW9uIChkZWxpbSwgc3R5bGUsIGNlbnRlciwgb3B0aW9ucywgbW9kZSwgY2xhc3Nlcykge1xuICBjb25zdCB0ZXh0ID0gYnVpbGRDb21tb24ubWFrZVN5bWJvbChkZWxpbSwgXCJNYWluLVJlZ3VsYXJcIiwgbW9kZSwgb3B0aW9ucyk7XG4gIGNvbnN0IHNwYW4gPSBzdHlsZVdyYXAodGV4dCwgc3R5bGUsIG9wdGlvbnMsIGNsYXNzZXMpO1xuXG4gIGlmIChjZW50ZXIpIHtcbiAgICBjZW50ZXJTcGFuKHNwYW4sIG9wdGlvbnMsIHN0eWxlKTtcbiAgfVxuXG4gIHJldHVybiBzcGFuO1xufTtcbi8qKlxuICogQnVpbGRzIGEgc3ltYm9sIGluIHRoZSBnaXZlbiBmb250IHNpemUgKG5vdGUgc2l6ZSBpcyBhbiBpbnRlZ2VyKVxuICovXG5cblxuY29uc3QgbWF0aHJtU2l6ZSA9IGZ1bmN0aW9uICh2YWx1ZSwgc2l6ZSwgbW9kZSwgb3B0aW9ucykge1xuICByZXR1cm4gYnVpbGRDb21tb24ubWFrZVN5bWJvbCh2YWx1ZSwgXCJTaXplXCIgKyBzaXplICsgXCItUmVndWxhclwiLCBtb2RlLCBvcHRpb25zKTtcbn07XG4vKipcbiAqIE1ha2VzIGEgbGFyZ2UgZGVsaW1pdGVyLiBUaGlzIGlzIGEgZGVsaW1pdGVyIHRoYXQgY29tZXMgaW4gdGhlIFNpemUxLCBTaXplMixcbiAqIFNpemUzLCBvciBTaXplNCBmb250cy4gSXQgaXMgYWx3YXlzIHJlbmRlcmVkIGluIHRleHRzdHlsZS5cbiAqL1xuXG5cbmNvbnN0IG1ha2VMYXJnZURlbGltID0gZnVuY3Rpb24gKGRlbGltLCBzaXplLCBjZW50ZXIsIG9wdGlvbnMsIG1vZGUsIGNsYXNzZXMpIHtcbiAgY29uc3QgaW5uZXIgPSBtYXRocm1TaXplKGRlbGltLCBzaXplLCBtb2RlLCBvcHRpb25zKTtcbiAgY29uc3Qgc3BhbiA9IHN0eWxlV3JhcChidWlsZENvbW1vbi5tYWtlU3BhbihbXCJkZWxpbXNpemluZ1wiLCBcInNpemVcIiArIHNpemVdLCBbaW5uZXJdLCBvcHRpb25zKSwgc3JjX1N0eWxlLlRFWFQsIG9wdGlvbnMsIGNsYXNzZXMpO1xuXG4gIGlmIChjZW50ZXIpIHtcbiAgICBjZW50ZXJTcGFuKHNwYW4sIG9wdGlvbnMsIHNyY19TdHlsZS5URVhUKTtcbiAgfVxuXG4gIHJldHVybiBzcGFuO1xufTtcbi8qKlxuICogTWFrZSBhIHNwYW4gZnJvbSBhIGZvbnQgZ2x5cGggd2l0aCB0aGUgZ2l2ZW4gb2Zmc2V0IGFuZCBpbiB0aGUgZ2l2ZW4gZm9udC5cbiAqIFRoaXMgaXMgdXNlZCBpbiBtYWtlU3RhY2tlZERlbGltIHRvIG1ha2UgdGhlIHN0YWNraW5nIHBpZWNlcyBmb3IgdGhlIGRlbGltaXRlci5cbiAqL1xuXG5cbmNvbnN0IG1ha2VHbHlwaFNwYW4gPSBmdW5jdGlvbiAoc3ltYm9sLCBmb250LCBtb2RlKSB7XG4gIGxldCBzaXplQ2xhc3M7IC8vIEFwcGx5IHRoZSBjb3JyZWN0IENTUyBjbGFzcyB0byBjaG9vc2UgdGhlIHJpZ2h0IGZvbnQuXG5cbiAgaWYgKGZvbnQgPT09IFwiU2l6ZTEtUmVndWxhclwiKSB7XG4gICAgc2l6ZUNsYXNzID0gXCJkZWxpbS1zaXplMVwiO1xuICB9IGVsc2VcbiAgICAvKiBpZiAoZm9udCA9PT0gXCJTaXplNC1SZWd1bGFyXCIpICovXG4gICAge1xuICAgICAgc2l6ZUNsYXNzID0gXCJkZWxpbS1zaXplNFwiO1xuICAgIH1cblxuICBjb25zdCBjb3JuZXIgPSBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJkZWxpbXNpemluZ2lubmVyXCIsIHNpemVDbGFzc10sIFtidWlsZENvbW1vbi5tYWtlU3BhbihbXSwgW2J1aWxkQ29tbW9uLm1ha2VTeW1ib2woc3ltYm9sLCBmb250LCBtb2RlKV0pXSk7IC8vIFNpbmNlIHRoaXMgd2lsbCBiZSBwYXNzZWQgaW50byBgbWFrZVZMaXN0YCBpbiB0aGUgZW5kLCB3cmFwIHRoZSBlbGVtZW50XG4gIC8vIGluIHRoZSBhcHByb3ByaWF0ZSB0YWcgdGhhdCBWTGlzdCB1c2VzLlxuXG4gIHJldHVybiB7XG4gICAgdHlwZTogXCJlbGVtXCIsXG4gICAgZWxlbTogY29ybmVyXG4gIH07XG59O1xuXG5jb25zdCBtYWtlSW5uZXIgPSBmdW5jdGlvbiAoY2gsIGhlaWdodCwgb3B0aW9ucykge1xuICAvLyBDcmVhdGUgYSBzcGFuIHdpdGggaW5saW5lIFNWRyBmb3IgdGhlIGlubmVyIHBhcnQgb2YgYSB0YWxsIHN0YWNrZWQgZGVsaW1pdGVyLlxuICBjb25zdCB3aWR0aCA9IGZvbnRNZXRyaWNzRGF0YVsnU2l6ZTQtUmVndWxhciddW2NoLmNoYXJDb2RlQXQoMCldID8gZm9udE1ldHJpY3NEYXRhWydTaXplNC1SZWd1bGFyJ11bY2guY2hhckNvZGVBdCgwKV1bNF0gOiBmb250TWV0cmljc0RhdGFbJ1NpemUxLVJlZ3VsYXInXVtjaC5jaGFyQ29kZUF0KDApXVs0XTtcbiAgY29uc3QgcGF0aCA9IG5ldyBQYXRoTm9kZShcImlubmVyXCIsIGlubmVyUGF0aChjaCwgTWF0aC5yb3VuZCgxMDAwICogaGVpZ2h0KSkpO1xuICBjb25zdCBzdmdOb2RlID0gbmV3IFN2Z05vZGUoW3BhdGhdLCB7XG4gICAgXCJ3aWR0aFwiOiBtYWtlRW0od2lkdGgpLFxuICAgIFwiaGVpZ2h0XCI6IG1ha2VFbShoZWlnaHQpLFxuICAgIC8vIE92ZXJyaWRlIENTUyBydWxlIGAua2F0ZXggc3ZnIHsgd2lkdGg6IDEwMCUgfWBcbiAgICBcInN0eWxlXCI6IFwid2lkdGg6XCIgKyBtYWtlRW0od2lkdGgpLFxuICAgIFwidmlld0JveFwiOiBcIjAgMCBcIiArIDEwMDAgKiB3aWR0aCArIFwiIFwiICsgTWF0aC5yb3VuZCgxMDAwICogaGVpZ2h0KSxcbiAgICBcInByZXNlcnZlQXNwZWN0UmF0aW9cIjogXCJ4TWluWU1pblwiXG4gIH0pO1xuICBjb25zdCBzcGFuID0gYnVpbGRDb21tb24ubWFrZVN2Z1NwYW4oW10sIFtzdmdOb2RlXSwgb3B0aW9ucyk7XG4gIHNwYW4uaGVpZ2h0ID0gaGVpZ2h0O1xuICBzcGFuLnN0eWxlLmhlaWdodCA9IG1ha2VFbShoZWlnaHQpO1xuICBzcGFuLnN0eWxlLndpZHRoID0gbWFrZUVtKHdpZHRoKTtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBcImVsZW1cIixcbiAgICBlbGVtOiBzcGFuXG4gIH07XG59OyAvLyBIZWxwZXJzIGZvciBtYWtlU3RhY2tlZERlbGltXG5cblxuY29uc3QgbGFwSW5FbXMgPSAwLjAwODtcbmNvbnN0IGxhcCA9IHtcbiAgdHlwZTogXCJrZXJuXCIsXG4gIHNpemU6IC0xICogbGFwSW5FbXNcbn07XG5jb25zdCB2ZXJ0cyA9IFtcInxcIiwgXCJcXFxcbHZlcnRcIiwgXCJcXFxccnZlcnRcIiwgXCJcXFxcdmVydFwiXTtcbmNvbnN0IGRvdWJsZVZlcnRzID0gW1wiXFxcXHxcIiwgXCJcXFxcbFZlcnRcIiwgXCJcXFxcclZlcnRcIiwgXCJcXFxcVmVydFwiXTtcbi8qKlxuICogTWFrZSBhIHN0YWNrZWQgZGVsaW1pdGVyIG91dCBvZiBhIGdpdmVuIGRlbGltaXRlciwgd2l0aCB0aGUgdG90YWwgaGVpZ2h0IGF0XG4gKiBsZWFzdCBgaGVpZ2h0VG90YWxgLiBUaGlzIHJvdXRpbmUgaXMgbWVudGlvbmVkIG9uIHBhZ2UgNDQyIG9mIHRoZSBUZVhib29rLlxuICovXG5cbmNvbnN0IG1ha2VTdGFja2VkRGVsaW0gPSBmdW5jdGlvbiAoZGVsaW0sIGhlaWdodFRvdGFsLCBjZW50ZXIsIG9wdGlvbnMsIG1vZGUsIGNsYXNzZXMpIHtcbiAgLy8gVGhlcmUgYXJlIGZvdXIgcGFydHMsIHRoZSB0b3AsIGFuIG9wdGlvbmFsIG1pZGRsZSwgYSByZXBlYXRlZCBwYXJ0LCBhbmQgYVxuICAvLyBib3R0b20uXG4gIGxldCB0b3A7XG4gIGxldCBtaWRkbGU7XG4gIGxldCByZXBlYXQ7XG4gIGxldCBib3R0b207XG4gIGxldCBzdmdMYWJlbCA9IFwiXCI7XG4gIGxldCB2aWV3Qm94V2lkdGggPSAwO1xuICB0b3AgPSByZXBlYXQgPSBib3R0b20gPSBkZWxpbTtcbiAgbWlkZGxlID0gbnVsbDsgLy8gQWxzbyBrZWVwIHRyYWNrIG9mIHdoYXQgZm9udCB0aGUgZGVsaW1pdGVycyBhcmUgaW5cblxuICBsZXQgZm9udCA9IFwiU2l6ZTEtUmVndWxhclwiOyAvLyBXZSBzZXQgdGhlIHBhcnRzIGFuZCBmb250IGJhc2VkIG9uIHRoZSBzeW1ib2wuIE5vdGUgdGhhdCB3ZSB1c2VcbiAgLy8gJ1xcdTIzZDAnIGluc3RlYWQgb2YgJ3wnIGFuZCAnXFx1MjAxNicgaW5zdGVhZCBvZiAnXFxcXHwnIGZvciB0aGVcbiAgLy8gcmVwZWF0cyBvZiB0aGUgYXJyb3dzXG5cbiAgaWYgKGRlbGltID09PSBcIlxcXFx1cGFycm93XCIpIHtcbiAgICByZXBlYXQgPSBib3R0b20gPSBcIlxcdTIzZDBcIjtcbiAgfSBlbHNlIGlmIChkZWxpbSA9PT0gXCJcXFxcVXBhcnJvd1wiKSB7XG4gICAgcmVwZWF0ID0gYm90dG9tID0gXCJcXHUyMDE2XCI7XG4gIH0gZWxzZSBpZiAoZGVsaW0gPT09IFwiXFxcXGRvd25hcnJvd1wiKSB7XG4gICAgdG9wID0gcmVwZWF0ID0gXCJcXHUyM2QwXCI7XG4gIH0gZWxzZSBpZiAoZGVsaW0gPT09IFwiXFxcXERvd25hcnJvd1wiKSB7XG4gICAgdG9wID0gcmVwZWF0ID0gXCJcXHUyMDE2XCI7XG4gIH0gZWxzZSBpZiAoZGVsaW0gPT09IFwiXFxcXHVwZG93bmFycm93XCIpIHtcbiAgICB0b3AgPSBcIlxcXFx1cGFycm93XCI7XG4gICAgcmVwZWF0ID0gXCJcXHUyM2QwXCI7XG4gICAgYm90dG9tID0gXCJcXFxcZG93bmFycm93XCI7XG4gIH0gZWxzZSBpZiAoZGVsaW0gPT09IFwiXFxcXFVwZG93bmFycm93XCIpIHtcbiAgICB0b3AgPSBcIlxcXFxVcGFycm93XCI7XG4gICAgcmVwZWF0ID0gXCJcXHUyMDE2XCI7XG4gICAgYm90dG9tID0gXCJcXFxcRG93bmFycm93XCI7XG4gIH0gZWxzZSBpZiAodXRpbHMuY29udGFpbnModmVydHMsIGRlbGltKSkge1xuICAgIHJlcGVhdCA9IFwiXFx1MjIyM1wiO1xuICAgIHN2Z0xhYmVsID0gXCJ2ZXJ0XCI7XG4gICAgdmlld0JveFdpZHRoID0gMzMzO1xuICB9IGVsc2UgaWYgKHV0aWxzLmNvbnRhaW5zKGRvdWJsZVZlcnRzLCBkZWxpbSkpIHtcbiAgICByZXBlYXQgPSBcIlxcdTIyMjVcIjtcbiAgICBzdmdMYWJlbCA9IFwiZG91YmxldmVydFwiO1xuICAgIHZpZXdCb3hXaWR0aCA9IDU1NjtcbiAgfSBlbHNlIGlmIChkZWxpbSA9PT0gXCJbXCIgfHwgZGVsaW0gPT09IFwiXFxcXGxicmFja1wiKSB7XG4gICAgdG9wID0gXCJcXHUyM2ExXCI7XG4gICAgcmVwZWF0ID0gXCJcXHUyM2EyXCI7XG4gICAgYm90dG9tID0gXCJcXHUyM2EzXCI7XG4gICAgZm9udCA9IFwiU2l6ZTQtUmVndWxhclwiO1xuICAgIHN2Z0xhYmVsID0gXCJsYnJhY2tcIjtcbiAgICB2aWV3Qm94V2lkdGggPSA2Njc7XG4gIH0gZWxzZSBpZiAoZGVsaW0gPT09IFwiXVwiIHx8IGRlbGltID09PSBcIlxcXFxyYnJhY2tcIikge1xuICAgIHRvcCA9IFwiXFx1MjNhNFwiO1xuICAgIHJlcGVhdCA9IFwiXFx1MjNhNVwiO1xuICAgIGJvdHRvbSA9IFwiXFx1MjNhNlwiO1xuICAgIGZvbnQgPSBcIlNpemU0LVJlZ3VsYXJcIjtcbiAgICBzdmdMYWJlbCA9IFwicmJyYWNrXCI7XG4gICAgdmlld0JveFdpZHRoID0gNjY3O1xuICB9IGVsc2UgaWYgKGRlbGltID09PSBcIlxcXFxsZmxvb3JcIiB8fCBkZWxpbSA9PT0gXCJcXHUyMzBhXCIpIHtcbiAgICByZXBlYXQgPSB0b3AgPSBcIlxcdTIzYTJcIjtcbiAgICBib3R0b20gPSBcIlxcdTIzYTNcIjtcbiAgICBmb250ID0gXCJTaXplNC1SZWd1bGFyXCI7XG4gICAgc3ZnTGFiZWwgPSBcImxmbG9vclwiO1xuICAgIHZpZXdCb3hXaWR0aCA9IDY2NztcbiAgfSBlbHNlIGlmIChkZWxpbSA9PT0gXCJcXFxcbGNlaWxcIiB8fCBkZWxpbSA9PT0gXCJcXHUyMzA4XCIpIHtcbiAgICB0b3AgPSBcIlxcdTIzYTFcIjtcbiAgICByZXBlYXQgPSBib3R0b20gPSBcIlxcdTIzYTJcIjtcbiAgICBmb250ID0gXCJTaXplNC1SZWd1bGFyXCI7XG4gICAgc3ZnTGFiZWwgPSBcImxjZWlsXCI7XG4gICAgdmlld0JveFdpZHRoID0gNjY3O1xuICB9IGVsc2UgaWYgKGRlbGltID09PSBcIlxcXFxyZmxvb3JcIiB8fCBkZWxpbSA9PT0gXCJcXHUyMzBiXCIpIHtcbiAgICByZXBlYXQgPSB0b3AgPSBcIlxcdTIzYTVcIjtcbiAgICBib3R0b20gPSBcIlxcdTIzYTZcIjtcbiAgICBmb250ID0gXCJTaXplNC1SZWd1bGFyXCI7XG4gICAgc3ZnTGFiZWwgPSBcInJmbG9vclwiO1xuICAgIHZpZXdCb3hXaWR0aCA9IDY2NztcbiAgfSBlbHNlIGlmIChkZWxpbSA9PT0gXCJcXFxccmNlaWxcIiB8fCBkZWxpbSA9PT0gXCJcXHUyMzA5XCIpIHtcbiAgICB0b3AgPSBcIlxcdTIzYTRcIjtcbiAgICByZXBlYXQgPSBib3R0b20gPSBcIlxcdTIzYTVcIjtcbiAgICBmb250ID0gXCJTaXplNC1SZWd1bGFyXCI7XG4gICAgc3ZnTGFiZWwgPSBcInJjZWlsXCI7XG4gICAgdmlld0JveFdpZHRoID0gNjY3O1xuICB9IGVsc2UgaWYgKGRlbGltID09PSBcIihcIiB8fCBkZWxpbSA9PT0gXCJcXFxcbHBhcmVuXCIpIHtcbiAgICB0b3AgPSBcIlxcdTIzOWJcIjtcbiAgICByZXBlYXQgPSBcIlxcdTIzOWNcIjtcbiAgICBib3R0b20gPSBcIlxcdTIzOWRcIjtcbiAgICBmb250ID0gXCJTaXplNC1SZWd1bGFyXCI7XG4gICAgc3ZnTGFiZWwgPSBcImxwYXJlblwiO1xuICAgIHZpZXdCb3hXaWR0aCA9IDg3NTtcbiAgfSBlbHNlIGlmIChkZWxpbSA9PT0gXCIpXCIgfHwgZGVsaW0gPT09IFwiXFxcXHJwYXJlblwiKSB7XG4gICAgdG9wID0gXCJcXHUyMzllXCI7XG4gICAgcmVwZWF0ID0gXCJcXHUyMzlmXCI7XG4gICAgYm90dG9tID0gXCJcXHUyM2EwXCI7XG4gICAgZm9udCA9IFwiU2l6ZTQtUmVndWxhclwiO1xuICAgIHN2Z0xhYmVsID0gXCJycGFyZW5cIjtcbiAgICB2aWV3Qm94V2lkdGggPSA4NzU7XG4gIH0gZWxzZSBpZiAoZGVsaW0gPT09IFwiXFxcXHtcIiB8fCBkZWxpbSA9PT0gXCJcXFxcbGJyYWNlXCIpIHtcbiAgICB0b3AgPSBcIlxcdTIzYTdcIjtcbiAgICBtaWRkbGUgPSBcIlxcdTIzYThcIjtcbiAgICBib3R0b20gPSBcIlxcdTIzYTlcIjtcbiAgICByZXBlYXQgPSBcIlxcdTIzYWFcIjtcbiAgICBmb250ID0gXCJTaXplNC1SZWd1bGFyXCI7XG4gIH0gZWxzZSBpZiAoZGVsaW0gPT09IFwiXFxcXH1cIiB8fCBkZWxpbSA9PT0gXCJcXFxccmJyYWNlXCIpIHtcbiAgICB0b3AgPSBcIlxcdTIzYWJcIjtcbiAgICBtaWRkbGUgPSBcIlxcdTIzYWNcIjtcbiAgICBib3R0b20gPSBcIlxcdTIzYWRcIjtcbiAgICByZXBlYXQgPSBcIlxcdTIzYWFcIjtcbiAgICBmb250ID0gXCJTaXplNC1SZWd1bGFyXCI7XG4gIH0gZWxzZSBpZiAoZGVsaW0gPT09IFwiXFxcXGxncm91cFwiIHx8IGRlbGltID09PSBcIlxcdTI3ZWVcIikge1xuICAgIHRvcCA9IFwiXFx1MjNhN1wiO1xuICAgIGJvdHRvbSA9IFwiXFx1MjNhOVwiO1xuICAgIHJlcGVhdCA9IFwiXFx1MjNhYVwiO1xuICAgIGZvbnQgPSBcIlNpemU0LVJlZ3VsYXJcIjtcbiAgfSBlbHNlIGlmIChkZWxpbSA9PT0gXCJcXFxccmdyb3VwXCIgfHwgZGVsaW0gPT09IFwiXFx1MjdlZlwiKSB7XG4gICAgdG9wID0gXCJcXHUyM2FiXCI7XG4gICAgYm90dG9tID0gXCJcXHUyM2FkXCI7XG4gICAgcmVwZWF0ID0gXCJcXHUyM2FhXCI7XG4gICAgZm9udCA9IFwiU2l6ZTQtUmVndWxhclwiO1xuICB9IGVsc2UgaWYgKGRlbGltID09PSBcIlxcXFxsbW91c3RhY2hlXCIgfHwgZGVsaW0gPT09IFwiXFx1MjNiMFwiKSB7XG4gICAgdG9wID0gXCJcXHUyM2E3XCI7XG4gICAgYm90dG9tID0gXCJcXHUyM2FkXCI7XG4gICAgcmVwZWF0ID0gXCJcXHUyM2FhXCI7XG4gICAgZm9udCA9IFwiU2l6ZTQtUmVndWxhclwiO1xuICB9IGVsc2UgaWYgKGRlbGltID09PSBcIlxcXFxybW91c3RhY2hlXCIgfHwgZGVsaW0gPT09IFwiXFx1MjNiMVwiKSB7XG4gICAgdG9wID0gXCJcXHUyM2FiXCI7XG4gICAgYm90dG9tID0gXCJcXHUyM2E5XCI7XG4gICAgcmVwZWF0ID0gXCJcXHUyM2FhXCI7XG4gICAgZm9udCA9IFwiU2l6ZTQtUmVndWxhclwiO1xuICB9IC8vIEdldCB0aGUgbWV0cmljcyBvZiB0aGUgZm91ciBzZWN0aW9uc1xuXG5cbiAgY29uc3QgdG9wTWV0cmljcyA9IGdldE1ldHJpY3ModG9wLCBmb250LCBtb2RlKTtcbiAgY29uc3QgdG9wSGVpZ2h0VG90YWwgPSB0b3BNZXRyaWNzLmhlaWdodCArIHRvcE1ldHJpY3MuZGVwdGg7XG4gIGNvbnN0IHJlcGVhdE1ldHJpY3MgPSBnZXRNZXRyaWNzKHJlcGVhdCwgZm9udCwgbW9kZSk7XG4gIGNvbnN0IHJlcGVhdEhlaWdodFRvdGFsID0gcmVwZWF0TWV0cmljcy5oZWlnaHQgKyByZXBlYXRNZXRyaWNzLmRlcHRoO1xuICBjb25zdCBib3R0b21NZXRyaWNzID0gZ2V0TWV0cmljcyhib3R0b20sIGZvbnQsIG1vZGUpO1xuICBjb25zdCBib3R0b21IZWlnaHRUb3RhbCA9IGJvdHRvbU1ldHJpY3MuaGVpZ2h0ICsgYm90dG9tTWV0cmljcy5kZXB0aDtcbiAgbGV0IG1pZGRsZUhlaWdodFRvdGFsID0gMDtcbiAgbGV0IG1pZGRsZUZhY3RvciA9IDE7XG5cbiAgaWYgKG1pZGRsZSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IG1pZGRsZU1ldHJpY3MgPSBnZXRNZXRyaWNzKG1pZGRsZSwgZm9udCwgbW9kZSk7XG4gICAgbWlkZGxlSGVpZ2h0VG90YWwgPSBtaWRkbGVNZXRyaWNzLmhlaWdodCArIG1pZGRsZU1ldHJpY3MuZGVwdGg7XG4gICAgbWlkZGxlRmFjdG9yID0gMjsgLy8gcmVwZWF0IHN5bW1ldHJpY2FsbHkgYWJvdmUgYW5kIGJlbG93IG1pZGRsZVxuICB9IC8vIENhbGN1bGF0ZSB0aGUgbWluaW1hbCBoZWlnaHQgdGhhdCB0aGUgZGVsaW1pdGVyIGNhbiBoYXZlLlxuICAvLyBJdCBpcyBhdCBsZWFzdCB0aGUgc2l6ZSBvZiB0aGUgdG9wLCBib3R0b20sIGFuZCBvcHRpb25hbCBtaWRkbGUgY29tYmluZWQuXG5cblxuICBjb25zdCBtaW5IZWlnaHQgPSB0b3BIZWlnaHRUb3RhbCArIGJvdHRvbUhlaWdodFRvdGFsICsgbWlkZGxlSGVpZ2h0VG90YWw7IC8vIENvbXB1dGUgdGhlIG51bWJlciBvZiBjb3BpZXMgb2YgdGhlIHJlcGVhdCBzeW1ib2wgd2Ugd2lsbCBuZWVkXG5cbiAgY29uc3QgcmVwZWF0Q291bnQgPSBNYXRoLm1heCgwLCBNYXRoLmNlaWwoKGhlaWdodFRvdGFsIC0gbWluSGVpZ2h0KSAvIChtaWRkbGVGYWN0b3IgKiByZXBlYXRIZWlnaHRUb3RhbCkpKTsgLy8gQ29tcHV0ZSB0aGUgdG90YWwgaGVpZ2h0IG9mIHRoZSBkZWxpbWl0ZXIgaW5jbHVkaW5nIGFsbCB0aGUgc3ltYm9sc1xuXG4gIGNvbnN0IHJlYWxIZWlnaHRUb3RhbCA9IG1pbkhlaWdodCArIHJlcGVhdENvdW50ICogbWlkZGxlRmFjdG9yICogcmVwZWF0SGVpZ2h0VG90YWw7IC8vIFRoZSBjZW50ZXIgb2YgdGhlIGRlbGltaXRlciBpcyBwbGFjZWQgYXQgdGhlIGNlbnRlciBvZiB0aGUgYXhpcy4gTm90ZVxuICAvLyB0aGF0IGluIHRoaXMgY29udGV4dCwgXCJjZW50ZXJcIiBtZWFucyB0aGF0IHRoZSBkZWxpbWl0ZXIgc2hvdWxkIGJlXG4gIC8vIGNlbnRlcmVkIGFyb3VuZCB0aGUgYXhpcyBpbiB0aGUgY3VycmVudCBzdHlsZSwgd2hpbGUgbm9ybWFsbHkgaXQgaXNcbiAgLy8gY2VudGVyZWQgYXJvdW5kIHRoZSBheGlzIGluIHRleHRzdHlsZS5cblxuICBsZXQgYXhpc0hlaWdodCA9IG9wdGlvbnMuZm9udE1ldHJpY3MoKS5heGlzSGVpZ2h0O1xuXG4gIGlmIChjZW50ZXIpIHtcbiAgICBheGlzSGVpZ2h0ICo9IG9wdGlvbnMuc2l6ZU11bHRpcGxpZXI7XG4gIH0gLy8gQ2FsY3VsYXRlIHRoZSBkZXB0aFxuXG5cbiAgY29uc3QgZGVwdGggPSByZWFsSGVpZ2h0VG90YWwgLyAyIC0gYXhpc0hlaWdodDsgLy8gTm93LCB3ZSBzdGFydCBidWlsZGluZyB0aGUgcGllY2VzIHRoYXQgd2lsbCBnbyBpbnRvIHRoZSB2bGlzdFxuICAvLyBLZWVwIGEgbGlzdCBvZiB0aGUgcGllY2VzIG9mIHRoZSBzdGFja2VkIGRlbGltaXRlclxuXG4gIGNvbnN0IHN0YWNrID0gW107XG5cbiAgaWYgKHN2Z0xhYmVsLmxlbmd0aCA+IDApIHtcbiAgICAvLyBJbnN0ZWFkIG9mIHN0YWNraW5nIGdseXBocywgY3JlYXRlIGEgc2luZ2xlIFNWRy5cbiAgICAvLyBUaGlzIGV2YWRlcyBicm93c2VyIHByb2JsZW1zIHdpdGggaW1wcmVjaXNlIHBvc2l0aW9uaW5nIG9mIHNwYW5zLlxuICAgIGNvbnN0IG1pZEhlaWdodCA9IHJlYWxIZWlnaHRUb3RhbCAtIHRvcEhlaWdodFRvdGFsIC0gYm90dG9tSGVpZ2h0VG90YWw7XG4gICAgY29uc3Qgdmlld0JveEhlaWdodCA9IE1hdGgucm91bmQocmVhbEhlaWdodFRvdGFsICogMTAwMCk7XG4gICAgY29uc3QgcGF0aFN0ciA9IHRhbGxEZWxpbShzdmdMYWJlbCwgTWF0aC5yb3VuZChtaWRIZWlnaHQgKiAxMDAwKSk7XG4gICAgY29uc3QgcGF0aCA9IG5ldyBQYXRoTm9kZShzdmdMYWJlbCwgcGF0aFN0cik7XG4gICAgY29uc3Qgd2lkdGggPSAodmlld0JveFdpZHRoIC8gMTAwMCkudG9GaXhlZCgzKSArIFwiZW1cIjtcbiAgICBjb25zdCBoZWlnaHQgPSAodmlld0JveEhlaWdodCAvIDEwMDApLnRvRml4ZWQoMykgKyBcImVtXCI7XG4gICAgY29uc3Qgc3ZnID0gbmV3IFN2Z05vZGUoW3BhdGhdLCB7XG4gICAgICBcIndpZHRoXCI6IHdpZHRoLFxuICAgICAgXCJoZWlnaHRcIjogaGVpZ2h0LFxuICAgICAgXCJ2aWV3Qm94XCI6IFwiMCAwIFwiICsgdmlld0JveFdpZHRoICsgXCIgXCIgKyB2aWV3Qm94SGVpZ2h0XG4gICAgfSk7XG4gICAgY29uc3Qgd3JhcHBlciA9IGJ1aWxkQ29tbW9uLm1ha2VTdmdTcGFuKFtdLCBbc3ZnXSwgb3B0aW9ucyk7XG4gICAgd3JhcHBlci5oZWlnaHQgPSB2aWV3Qm94SGVpZ2h0IC8gMTAwMDtcbiAgICB3cmFwcGVyLnN0eWxlLndpZHRoID0gd2lkdGg7XG4gICAgd3JhcHBlci5zdHlsZS5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgc3RhY2sucHVzaCh7XG4gICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgIGVsZW06IHdyYXBwZXJcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICAvLyBTdGFjayBnbHlwaHNcbiAgICAvLyBTdGFydCBieSBhZGRpbmcgdGhlIGJvdHRvbSBzeW1ib2xcbiAgICBzdGFjay5wdXNoKG1ha2VHbHlwaFNwYW4oYm90dG9tLCBmb250LCBtb2RlKSk7XG4gICAgc3RhY2sucHVzaChsYXApOyAvLyBvdmVybGFwXG5cbiAgICBpZiAobWlkZGxlID09PSBudWxsKSB7XG4gICAgICAvLyBUaGUgbWlkZGxlIHNlY3Rpb24gd2lsbCBiZSBhbiBTVkcuIE1ha2UgaXQgYW4gZXh0cmEgMC4wMTZlbSB0YWxsLlxuICAgICAgLy8gV2UnbGwgb3ZlcmxhcCBieSAwLjAwOGVtIGF0IHRvcCBhbmQgYm90dG9tLlxuICAgICAgY29uc3QgaW5uZXJIZWlnaHQgPSByZWFsSGVpZ2h0VG90YWwgLSB0b3BIZWlnaHRUb3RhbCAtIGJvdHRvbUhlaWdodFRvdGFsICsgMiAqIGxhcEluRW1zO1xuICAgICAgc3RhY2sucHVzaChtYWtlSW5uZXIocmVwZWF0LCBpbm5lckhlaWdodCwgb3B0aW9ucykpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBXaGVuIHRoZXJlIGlzIGEgbWlkZGxlIGJpdCwgd2UgbmVlZCB0aGUgbWlkZGxlIHBhcnQgYW5kIHR3byByZXBlYXRlZFxuICAgICAgLy8gc2VjdGlvbnNcbiAgICAgIGNvbnN0IGlubmVySGVpZ2h0ID0gKHJlYWxIZWlnaHRUb3RhbCAtIHRvcEhlaWdodFRvdGFsIC0gYm90dG9tSGVpZ2h0VG90YWwgLSBtaWRkbGVIZWlnaHRUb3RhbCkgLyAyICsgMiAqIGxhcEluRW1zO1xuICAgICAgc3RhY2sucHVzaChtYWtlSW5uZXIocmVwZWF0LCBpbm5lckhlaWdodCwgb3B0aW9ucykpOyAvLyBOb3cgaW5zZXJ0IHRoZSBtaWRkbGUgb2YgdGhlIGJyYWNlLlxuXG4gICAgICBzdGFjay5wdXNoKGxhcCk7XG4gICAgICBzdGFjay5wdXNoKG1ha2VHbHlwaFNwYW4obWlkZGxlLCBmb250LCBtb2RlKSk7XG4gICAgICBzdGFjay5wdXNoKGxhcCk7XG4gICAgICBzdGFjay5wdXNoKG1ha2VJbm5lcihyZXBlYXQsIGlubmVySGVpZ2h0LCBvcHRpb25zKSk7XG4gICAgfSAvLyBBZGQgdGhlIHRvcCBzeW1ib2xcblxuXG4gICAgc3RhY2sucHVzaChsYXApO1xuICAgIHN0YWNrLnB1c2gobWFrZUdseXBoU3Bhbih0b3AsIGZvbnQsIG1vZGUpKTtcbiAgfSAvLyBGaW5hbGx5LCBidWlsZCB0aGUgdmxpc3RcblxuXG4gIGNvbnN0IG5ld09wdGlvbnMgPSBvcHRpb25zLmhhdmluZ0Jhc2VTdHlsZShzcmNfU3R5bGUuVEVYVCk7XG4gIGNvbnN0IGlubmVyID0gYnVpbGRDb21tb24ubWFrZVZMaXN0KHtcbiAgICBwb3NpdGlvblR5cGU6IFwiYm90dG9tXCIsXG4gICAgcG9zaXRpb25EYXRhOiBkZXB0aCxcbiAgICBjaGlsZHJlbjogc3RhY2tcbiAgfSwgbmV3T3B0aW9ucyk7XG4gIHJldHVybiBzdHlsZVdyYXAoYnVpbGRDb21tb24ubWFrZVNwYW4oW1wiZGVsaW1zaXppbmdcIiwgXCJtdWx0XCJdLCBbaW5uZXJdLCBuZXdPcHRpb25zKSwgc3JjX1N0eWxlLlRFWFQsIG9wdGlvbnMsIGNsYXNzZXMpO1xufTsgLy8gQWxsIHN1cmRzIGhhdmUgMC4wOGVtIHBhZGRpbmcgYWJvdmUgdGhlIHZpbmN1bHVtIGluc2lkZSB0aGUgU1ZHLlxuLy8gVGhhdCBrZWVwcyBicm93c2VyIHNwYW4gaGVpZ2h0IHJvdW5kaW5nIGVycm9yIGZyb20gcGluY2hpbmcgdGhlIGxpbmUuXG5cblxuY29uc3QgdmJQYWQgPSA4MDsgLy8gcGFkZGluZyBhYm92ZSB0aGUgc3VyZCwgbWVhc3VyZWQgaW5zaWRlIHRoZSB2aWV3Qm94LlxuXG5jb25zdCBlbVBhZCA9IDAuMDg7IC8vIHBhZGRpbmcsIGluIGVtcywgbWVhc3VyZWQgaW4gdGhlIGRvY3VtZW50LlxuXG5jb25zdCBzcXJ0U3ZnID0gZnVuY3Rpb24gKHNxcnROYW1lLCBoZWlnaHQsIHZpZXdCb3hIZWlnaHQsIGV4dHJhVmluY3VsdW0sIG9wdGlvbnMpIHtcbiAgY29uc3QgcGF0aCA9IHNxcnRQYXRoKHNxcnROYW1lLCBleHRyYVZpbmN1bHVtLCB2aWV3Qm94SGVpZ2h0KTtcbiAgY29uc3QgcGF0aE5vZGUgPSBuZXcgUGF0aE5vZGUoc3FydE5hbWUsIHBhdGgpO1xuICBjb25zdCBzdmcgPSBuZXcgU3ZnTm9kZShbcGF0aE5vZGVdLCB7XG4gICAgLy8gTm90ZTogMTAwMDoxIHJhdGlvIG9mIHZpZXdCb3ggdG8gZG9jdW1lbnQgZW0gd2lkdGguXG4gICAgXCJ3aWR0aFwiOiBcIjQwMGVtXCIsXG4gICAgXCJoZWlnaHRcIjogbWFrZUVtKGhlaWdodCksXG4gICAgXCJ2aWV3Qm94XCI6IFwiMCAwIDQwMDAwMCBcIiArIHZpZXdCb3hIZWlnaHQsXG4gICAgXCJwcmVzZXJ2ZUFzcGVjdFJhdGlvXCI6IFwieE1pbllNaW4gc2xpY2VcIlxuICB9KTtcbiAgcmV0dXJuIGJ1aWxkQ29tbW9uLm1ha2VTdmdTcGFuKFtcImhpZGUtdGFpbFwiXSwgW3N2Z10sIG9wdGlvbnMpO1xufTtcbi8qKlxuICogTWFrZSBhIHNxcnQgaW1hZ2Ugb2YgdGhlIGdpdmVuIGhlaWdodCxcbiAqL1xuXG5cbmNvbnN0IG1ha2VTcXJ0SW1hZ2UgPSBmdW5jdGlvbiAoaGVpZ2h0LCBvcHRpb25zKSB7XG4gIC8vIERlZmluZSBhIG5ld09wdGlvbnMgdGhhdCByZW1vdmVzIHRoZSBlZmZlY3Qgb2Ygc2l6ZSBjaGFuZ2VzIHN1Y2ggYXMgXFxIdWdlLlxuICAvLyBXZSBkb24ndCBwaWNrIGRpZmZlcmVudCBhIGhlaWdodCBzdXJkIGZvciBcXEh1Z2UuIEZvciBpdCwgd2Ugc2NhbGUgdXAuXG4gIGNvbnN0IG5ld09wdGlvbnMgPSBvcHRpb25zLmhhdmluZ0Jhc2VTaXppbmcoKTsgLy8gUGljayB0aGUgZGVzaXJlZCBzdXJkIGdseXBoIGZyb20gYSBzZXF1ZW5jZSBvZiBzdXJkcy5cblxuICBjb25zdCBkZWxpbSA9IHRyYXZlcnNlU2VxdWVuY2UoXCJcXFxcc3VyZFwiLCBoZWlnaHQgKiBuZXdPcHRpb25zLnNpemVNdWx0aXBsaWVyLCBzdGFja0xhcmdlRGVsaW1pdGVyU2VxdWVuY2UsIG5ld09wdGlvbnMpO1xuICBsZXQgc2l6ZU11bHRpcGxpZXIgPSBuZXdPcHRpb25zLnNpemVNdWx0aXBsaWVyOyAvLyBkZWZhdWx0XG4gIC8vIFRoZSBzdGFuZGFyZCBzcXJ0IFNWR3MgZWFjaCBoYXZlIGEgMC4wNGVtIHRoaWNrIHZpbmN1bHVtLlxuICAvLyBJZiBTZXR0aW5ncy5taW5SdWxlVGhpY2tuZXNzIGlzIGxhcmdlciB0aGFuIHRoYXQsIHdlIGFkZCBleHRyYVZpbmN1bHVtLlxuXG4gIGNvbnN0IGV4dHJhVmluY3VsdW0gPSBNYXRoLm1heCgwLCBvcHRpb25zLm1pblJ1bGVUaGlja25lc3MgLSBvcHRpb25zLmZvbnRNZXRyaWNzKCkuc3FydFJ1bGVUaGlja25lc3MpOyAvLyBDcmVhdGUgYSBzcGFuIGNvbnRhaW5pbmcgYW4gU1ZHIGltYWdlIG9mIGEgc3FydCBzeW1ib2wuXG5cbiAgbGV0IHNwYW47XG4gIGxldCBzcGFuSGVpZ2h0ID0gMDtcbiAgbGV0IHRleEhlaWdodCA9IDA7XG4gIGxldCB2aWV3Qm94SGVpZ2h0ID0gMDtcbiAgbGV0IGFkdmFuY2VXaWR0aDsgLy8gV2UgY3JlYXRlIHZpZXdCb3hlcyB3aXRoIDgwIHVuaXRzIG9mIFwicGFkZGluZ1wiIGFib3ZlIGVhY2ggc3VyZC5cbiAgLy8gVGhlbiBicm93c2VyIHJvdW5kaW5nIGVycm9yIG9uIHRoZSBwYXJlbnQgc3BhbiBoZWlnaHQgd2lsbCBub3RcbiAgLy8gZW5jcm9hY2ggb24gdGhlIGluayBvZiB0aGUgdmluY3VsdW0uIEJ1dCB0aGF0IHBhZGRpbmcgaXMgbm90XG4gIC8vIGluY2x1ZGVkIGluIHRoZSBUZVgtbGlrZSBgaGVpZ2h0YCB1c2VkIGZvciBjYWxjdWxhdGlvbiBvZlxuICAvLyB2ZXJ0aWNhbCBhbGlnbm1lbnQuIFNvIHRleEhlaWdodCA9IHNwYW4uaGVpZ2h0IDwgc3Bhbi5zdHlsZS5oZWlnaHQuXG5cbiAgaWYgKGRlbGltLnR5cGUgPT09IFwic21hbGxcIikge1xuICAgIC8vIEdldCBhbiBTVkcgdGhhdCBpcyBkZXJpdmVkIGZyb20gZ2x5cGggVSsyMjFBIGluIGZvbnQgS2FUZVgtTWFpbi5cbiAgICAvLyAxMDAwIHVuaXQgbm9ybWFsIGdseXBoIGhlaWdodC5cbiAgICB2aWV3Qm94SGVpZ2h0ID0gMTAwMCArIDEwMDAgKiBleHRyYVZpbmN1bHVtICsgdmJQYWQ7XG5cbiAgICBpZiAoaGVpZ2h0IDwgMS4wKSB7XG4gICAgICBzaXplTXVsdGlwbGllciA9IDEuMDsgLy8gbWltaWMgYSBcXHRleHRmb250IHJhZGljYWxcbiAgICB9IGVsc2UgaWYgKGhlaWdodCA8IDEuNCkge1xuICAgICAgc2l6ZU11bHRpcGxpZXIgPSAwLjc7IC8vIG1pbWljIGEgXFxzY3JpcHRmb250IHJhZGljYWxcbiAgICB9XG5cbiAgICBzcGFuSGVpZ2h0ID0gKDEuMCArIGV4dHJhVmluY3VsdW0gKyBlbVBhZCkgLyBzaXplTXVsdGlwbGllcjtcbiAgICB0ZXhIZWlnaHQgPSAoMS4wMCArIGV4dHJhVmluY3VsdW0pIC8gc2l6ZU11bHRpcGxpZXI7XG4gICAgc3BhbiA9IHNxcnRTdmcoXCJzcXJ0TWFpblwiLCBzcGFuSGVpZ2h0LCB2aWV3Qm94SGVpZ2h0LCBleHRyYVZpbmN1bHVtLCBvcHRpb25zKTtcbiAgICBzcGFuLnN0eWxlLm1pbldpZHRoID0gXCIwLjg1M2VtXCI7XG4gICAgYWR2YW5jZVdpZHRoID0gMC44MzMgLyBzaXplTXVsdGlwbGllcjsgLy8gZnJvbSB0aGUgZm9udC5cbiAgfSBlbHNlIGlmIChkZWxpbS50eXBlID09PSBcImxhcmdlXCIpIHtcbiAgICAvLyBUaGVzZSBTVkdzIGNvbWUgZnJvbSBmb250czogS2FUZVhfU2l6ZTEsIF9TaXplMiwgZXRjLlxuICAgIHZpZXdCb3hIZWlnaHQgPSAoMTAwMCArIHZiUGFkKSAqIHNpemVUb01heEhlaWdodFtkZWxpbS5zaXplXTtcbiAgICB0ZXhIZWlnaHQgPSAoc2l6ZVRvTWF4SGVpZ2h0W2RlbGltLnNpemVdICsgZXh0cmFWaW5jdWx1bSkgLyBzaXplTXVsdGlwbGllcjtcbiAgICBzcGFuSGVpZ2h0ID0gKHNpemVUb01heEhlaWdodFtkZWxpbS5zaXplXSArIGV4dHJhVmluY3VsdW0gKyBlbVBhZCkgLyBzaXplTXVsdGlwbGllcjtcbiAgICBzcGFuID0gc3FydFN2ZyhcInNxcnRTaXplXCIgKyBkZWxpbS5zaXplLCBzcGFuSGVpZ2h0LCB2aWV3Qm94SGVpZ2h0LCBleHRyYVZpbmN1bHVtLCBvcHRpb25zKTtcbiAgICBzcGFuLnN0eWxlLm1pbldpZHRoID0gXCIxLjAyZW1cIjtcbiAgICBhZHZhbmNlV2lkdGggPSAxLjAgLyBzaXplTXVsdGlwbGllcjsgLy8gMS4wIGZyb20gdGhlIGZvbnQuXG4gIH0gZWxzZSB7XG4gICAgLy8gVGFsbCBzcXJ0LiBJbiBUZVgsIHRoaXMgd291bGQgYmUgc3RhY2tlZCB1c2luZyBtdWx0aXBsZSBnbHlwaHMuXG4gICAgLy8gV2UnbGwgdXNlIGEgc2luZ2xlIFNWRyB0byBhY2NvbXBsaXNoIHRoZSBzYW1lIHRoaW5nLlxuICAgIHNwYW5IZWlnaHQgPSBoZWlnaHQgKyBleHRyYVZpbmN1bHVtICsgZW1QYWQ7XG4gICAgdGV4SGVpZ2h0ID0gaGVpZ2h0ICsgZXh0cmFWaW5jdWx1bTtcbiAgICB2aWV3Qm94SGVpZ2h0ID0gTWF0aC5mbG9vcigxMDAwICogaGVpZ2h0ICsgZXh0cmFWaW5jdWx1bSkgKyB2YlBhZDtcbiAgICBzcGFuID0gc3FydFN2ZyhcInNxcnRUYWxsXCIsIHNwYW5IZWlnaHQsIHZpZXdCb3hIZWlnaHQsIGV4dHJhVmluY3VsdW0sIG9wdGlvbnMpO1xuICAgIHNwYW4uc3R5bGUubWluV2lkdGggPSBcIjAuNzQyZW1cIjtcbiAgICBhZHZhbmNlV2lkdGggPSAxLjA1NjtcbiAgfVxuXG4gIHNwYW4uaGVpZ2h0ID0gdGV4SGVpZ2h0O1xuICBzcGFuLnN0eWxlLmhlaWdodCA9IG1ha2VFbShzcGFuSGVpZ2h0KTtcbiAgcmV0dXJuIHtcbiAgICBzcGFuLFxuICAgIGFkdmFuY2VXaWR0aCxcbiAgICAvLyBDYWxjdWxhdGUgdGhlIGFjdHVhbCBsaW5lIHdpZHRoLlxuICAgIC8vIFRoaXMgYWN0dWFsbHkgc2hvdWxkIGRlcGVuZCBvbiB0aGUgY2hvc2VuIGZvbnQgLS0gZS5nLiBcXGJvbGRtYXRoXG4gICAgLy8gc2hvdWxkIHVzZSB0aGUgdGhpY2tlciBzdXJkIHN5bWJvbHMgZnJvbSBlLmcuIEthVGVYX01haW4tQm9sZCwgYW5kXG4gICAgLy8gaGF2ZSB0aGlja2VyIHJ1bGVzLlxuICAgIHJ1bGVXaWR0aDogKG9wdGlvbnMuZm9udE1ldHJpY3MoKS5zcXJ0UnVsZVRoaWNrbmVzcyArIGV4dHJhVmluY3VsdW0pICogc2l6ZU11bHRpcGxpZXJcbiAgfTtcbn07IC8vIFRoZXJlIGFyZSB0aHJlZSBraW5kcyBvZiBkZWxpbWl0ZXJzLCBkZWxpbWl0ZXJzIHRoYXQgc3RhY2sgd2hlbiB0aGV5IGJlY29tZVxuLy8gdG9vIGxhcmdlXG5cblxuY29uc3Qgc3RhY2tMYXJnZURlbGltaXRlcnMgPSBbXCIoXCIsIFwiXFxcXGxwYXJlblwiLCBcIilcIiwgXCJcXFxccnBhcmVuXCIsIFwiW1wiLCBcIlxcXFxsYnJhY2tcIiwgXCJdXCIsIFwiXFxcXHJicmFja1wiLCBcIlxcXFx7XCIsIFwiXFxcXGxicmFjZVwiLCBcIlxcXFx9XCIsIFwiXFxcXHJicmFjZVwiLCBcIlxcXFxsZmxvb3JcIiwgXCJcXFxccmZsb29yXCIsIFwiXFx1MjMwYVwiLCBcIlxcdTIzMGJcIiwgXCJcXFxcbGNlaWxcIiwgXCJcXFxccmNlaWxcIiwgXCJcXHUyMzA4XCIsIFwiXFx1MjMwOVwiLCBcIlxcXFxzdXJkXCJdOyAvLyBkZWxpbWl0ZXJzIHRoYXQgYWx3YXlzIHN0YWNrXG5cbmNvbnN0IHN0YWNrQWx3YXlzRGVsaW1pdGVycyA9IFtcIlxcXFx1cGFycm93XCIsIFwiXFxcXGRvd25hcnJvd1wiLCBcIlxcXFx1cGRvd25hcnJvd1wiLCBcIlxcXFxVcGFycm93XCIsIFwiXFxcXERvd25hcnJvd1wiLCBcIlxcXFxVcGRvd25hcnJvd1wiLCBcInxcIiwgXCJcXFxcfFwiLCBcIlxcXFx2ZXJ0XCIsIFwiXFxcXFZlcnRcIiwgXCJcXFxcbHZlcnRcIiwgXCJcXFxccnZlcnRcIiwgXCJcXFxcbFZlcnRcIiwgXCJcXFxcclZlcnRcIiwgXCJcXFxcbGdyb3VwXCIsIFwiXFxcXHJncm91cFwiLCBcIlxcdTI3ZWVcIiwgXCJcXHUyN2VmXCIsIFwiXFxcXGxtb3VzdGFjaGVcIiwgXCJcXFxccm1vdXN0YWNoZVwiLCBcIlxcdTIzYjBcIiwgXCJcXHUyM2IxXCJdOyAvLyBhbmQgZGVsaW1pdGVycyB0aGF0IG5ldmVyIHN0YWNrXG5cbmNvbnN0IHN0YWNrTmV2ZXJEZWxpbWl0ZXJzID0gW1wiPFwiLCBcIj5cIiwgXCJcXFxcbGFuZ2xlXCIsIFwiXFxcXHJhbmdsZVwiLCBcIi9cIiwgXCJcXFxcYmFja3NsYXNoXCIsIFwiXFxcXGx0XCIsIFwiXFxcXGd0XCJdOyAvLyBNZXRyaWNzIG9mIHRoZSBkaWZmZXJlbnQgc2l6ZXMuIEZvdW5kIGJ5IGxvb2tpbmcgYXQgVGVYJ3Mgb3V0cHV0IG9mXG4vLyAkXFxiaWdsfCAvLyBcXEJpZ2x8IFxcYmlnZ2x8IFxcQmlnZ2x8IFxcc2hvd2xpc3RzJFxuLy8gVXNlZCB0byBjcmVhdGUgc3RhY2tlZCBkZWxpbWl0ZXJzIG9mIGFwcHJvcHJpYXRlIHNpemVzIGluIG1ha2VTaXplZERlbGltLlxuXG5jb25zdCBzaXplVG9NYXhIZWlnaHQgPSBbMCwgMS4yLCAxLjgsIDIuNCwgMy4wXTtcbi8qKlxuICogVXNlZCB0byBjcmVhdGUgYSBkZWxpbWl0ZXIgb2YgYSBzcGVjaWZpYyBzaXplLCB3aGVyZSBgc2l6ZWAgaXMgMSwgMiwgMywgb3IgNC5cbiAqL1xuXG5jb25zdCBtYWtlU2l6ZWREZWxpbSA9IGZ1bmN0aW9uIChkZWxpbSwgc2l6ZSwgb3B0aW9ucywgbW9kZSwgY2xhc3Nlcykge1xuICAvLyA8IGFuZCA+IHR1cm4gaW50byBcXGxhbmdsZSBhbmQgXFxyYW5nbGUgaW4gZGVsaW1pdGVyc1xuICBpZiAoZGVsaW0gPT09IFwiPFwiIHx8IGRlbGltID09PSBcIlxcXFxsdFwiIHx8IGRlbGltID09PSBcIlxcdTI3ZThcIikge1xuICAgIGRlbGltID0gXCJcXFxcbGFuZ2xlXCI7XG4gIH0gZWxzZSBpZiAoZGVsaW0gPT09IFwiPlwiIHx8IGRlbGltID09PSBcIlxcXFxndFwiIHx8IGRlbGltID09PSBcIlxcdTI3ZTlcIikge1xuICAgIGRlbGltID0gXCJcXFxccmFuZ2xlXCI7XG4gIH0gLy8gU2l6ZWQgZGVsaW1pdGVycyBhcmUgbmV2ZXIgY2VudGVyZWQuXG5cblxuICBpZiAodXRpbHMuY29udGFpbnMoc3RhY2tMYXJnZURlbGltaXRlcnMsIGRlbGltKSB8fCB1dGlscy5jb250YWlucyhzdGFja05ldmVyRGVsaW1pdGVycywgZGVsaW0pKSB7XG4gICAgcmV0dXJuIG1ha2VMYXJnZURlbGltKGRlbGltLCBzaXplLCBmYWxzZSwgb3B0aW9ucywgbW9kZSwgY2xhc3Nlcyk7XG4gIH0gZWxzZSBpZiAodXRpbHMuY29udGFpbnMoc3RhY2tBbHdheXNEZWxpbWl0ZXJzLCBkZWxpbSkpIHtcbiAgICByZXR1cm4gbWFrZVN0YWNrZWREZWxpbShkZWxpbSwgc2l6ZVRvTWF4SGVpZ2h0W3NpemVdLCBmYWxzZSwgb3B0aW9ucywgbW9kZSwgY2xhc3Nlcyk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiSWxsZWdhbCBkZWxpbWl0ZXI6ICdcIiArIGRlbGltICsgXCInXCIpO1xuICB9XG59O1xuLyoqXG4gKiBUaGVyZSBhcmUgdGhyZWUgZGlmZmVyZW50IHNlcXVlbmNlcyBvZiBkZWxpbWl0ZXIgc2l6ZXMgdGhhdCB0aGUgZGVsaW1pdGVyc1xuICogZm9sbG93IGRlcGVuZGluZyBvbiB0aGUga2luZCBvZiBkZWxpbWl0ZXIuIFRoaXMgaXMgdXNlZCB3aGVuIGNyZWF0aW5nIGN1c3RvbVxuICogc2l6ZWQgZGVsaW1pdGVycyB0byBkZWNpZGUgd2hldGhlciB0byBjcmVhdGUgYSBzbWFsbCwgbGFyZ2UsIG9yIHN0YWNrZWRcbiAqIGRlbGltaXRlci5cbiAqXG4gKiBJbiByZWFsIFRlWCwgdGhlc2Ugc2VxdWVuY2VzIGFyZW4ndCBleHBsaWNpdGx5IGRlZmluZWQsIGJ1dCBhcmUgaW5zdGVhZFxuICogZGVmaW5lZCBpbnNpZGUgdGhlIGZvbnQgbWV0cmljcy4gU2luY2UgdGhlcmUgYXJlIG9ubHkgdGhyZWUgc2VxdWVuY2VzIHRoYXRcbiAqIGFyZSBwb3NzaWJsZSBmb3IgdGhlIGRlbGltaXRlcnMgdGhhdCBUZVggZGVmaW5lcywgaXQgaXMgZWFzaWVyIHRvIGp1c3QgZW5jb2RlXG4gKiB0aGVtIGV4cGxpY2l0bHkgaGVyZS5cbiAqL1xuXG5cbi8vIERlbGltaXRlcnMgdGhhdCBuZXZlciBzdGFjayB0cnkgc21hbGwgZGVsaW1pdGVycyBhbmQgbGFyZ2UgZGVsaW1pdGVycyBvbmx5XG5jb25zdCBzdGFja05ldmVyRGVsaW1pdGVyU2VxdWVuY2UgPSBbe1xuICB0eXBlOiBcInNtYWxsXCIsXG4gIHN0eWxlOiBzcmNfU3R5bGUuU0NSSVBUU0NSSVBUXG59LCB7XG4gIHR5cGU6IFwic21hbGxcIixcbiAgc3R5bGU6IHNyY19TdHlsZS5TQ1JJUFRcbn0sIHtcbiAgdHlwZTogXCJzbWFsbFwiLFxuICBzdHlsZTogc3JjX1N0eWxlLlRFWFRcbn0sIHtcbiAgdHlwZTogXCJsYXJnZVwiLFxuICBzaXplOiAxXG59LCB7XG4gIHR5cGU6IFwibGFyZ2VcIixcbiAgc2l6ZTogMlxufSwge1xuICB0eXBlOiBcImxhcmdlXCIsXG4gIHNpemU6IDNcbn0sIHtcbiAgdHlwZTogXCJsYXJnZVwiLFxuICBzaXplOiA0XG59XTsgLy8gRGVsaW1pdGVycyB0aGF0IGFsd2F5cyBzdGFjayB0cnkgdGhlIHNtYWxsIGRlbGltaXRlcnMgZmlyc3QsIHRoZW4gc3RhY2tcblxuY29uc3Qgc3RhY2tBbHdheXNEZWxpbWl0ZXJTZXF1ZW5jZSA9IFt7XG4gIHR5cGU6IFwic21hbGxcIixcbiAgc3R5bGU6IHNyY19TdHlsZS5TQ1JJUFRTQ1JJUFRcbn0sIHtcbiAgdHlwZTogXCJzbWFsbFwiLFxuICBzdHlsZTogc3JjX1N0eWxlLlNDUklQVFxufSwge1xuICB0eXBlOiBcInNtYWxsXCIsXG4gIHN0eWxlOiBzcmNfU3R5bGUuVEVYVFxufSwge1xuICB0eXBlOiBcInN0YWNrXCJcbn1dOyAvLyBEZWxpbWl0ZXJzIHRoYXQgc3RhY2sgd2hlbiBsYXJnZSB0cnkgdGhlIHNtYWxsIGFuZCB0aGVuIGxhcmdlIGRlbGltaXRlcnMsIGFuZFxuLy8gc3RhY2sgYWZ0ZXJ3YXJkc1xuXG5jb25zdCBzdGFja0xhcmdlRGVsaW1pdGVyU2VxdWVuY2UgPSBbe1xuICB0eXBlOiBcInNtYWxsXCIsXG4gIHN0eWxlOiBzcmNfU3R5bGUuU0NSSVBUU0NSSVBUXG59LCB7XG4gIHR5cGU6IFwic21hbGxcIixcbiAgc3R5bGU6IHNyY19TdHlsZS5TQ1JJUFRcbn0sIHtcbiAgdHlwZTogXCJzbWFsbFwiLFxuICBzdHlsZTogc3JjX1N0eWxlLlRFWFRcbn0sIHtcbiAgdHlwZTogXCJsYXJnZVwiLFxuICBzaXplOiAxXG59LCB7XG4gIHR5cGU6IFwibGFyZ2VcIixcbiAgc2l6ZTogMlxufSwge1xuICB0eXBlOiBcImxhcmdlXCIsXG4gIHNpemU6IDNcbn0sIHtcbiAgdHlwZTogXCJsYXJnZVwiLFxuICBzaXplOiA0XG59LCB7XG4gIHR5cGU6IFwic3RhY2tcIlxufV07XG4vKipcbiAqIEdldCB0aGUgZm9udCB1c2VkIGluIGEgZGVsaW1pdGVyIGJhc2VkIG9uIHdoYXQga2luZCBvZiBkZWxpbWl0ZXIgaXQgaXMuXG4gKiBUT0RPKCM5NjMpIFVzZSBtb3JlIHNwZWNpZmljIGZvbnQgZmFtaWx5IHJldHVybiB0eXBlIG9uY2UgdGhhdCBpcyBpbnRyb2R1Y2VkLlxuICovXG5cbmNvbnN0IGRlbGltVHlwZVRvRm9udCA9IGZ1bmN0aW9uICh0eXBlKSB7XG4gIGlmICh0eXBlLnR5cGUgPT09IFwic21hbGxcIikge1xuICAgIHJldHVybiBcIk1haW4tUmVndWxhclwiO1xuICB9IGVsc2UgaWYgKHR5cGUudHlwZSA9PT0gXCJsYXJnZVwiKSB7XG4gICAgcmV0dXJuIFwiU2l6ZVwiICsgdHlwZS5zaXplICsgXCItUmVndWxhclwiO1xuICB9IGVsc2UgaWYgKHR5cGUudHlwZSA9PT0gXCJzdGFja1wiKSB7XG4gICAgcmV0dXJuIFwiU2l6ZTQtUmVndWxhclwiO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkFkZCBzdXBwb3J0IGZvciBkZWxpbSB0eXBlICdcIiArIHR5cGUudHlwZSArIFwiJyBoZXJlLlwiKTtcbiAgfVxufTtcbi8qKlxuICogVHJhdmVyc2UgYSBzZXF1ZW5jZSBvZiB0eXBlcyBvZiBkZWxpbWl0ZXJzIHRvIGRlY2lkZSB3aGF0IGtpbmQgb2YgZGVsaW1pdGVyXG4gKiBzaG91bGQgYmUgdXNlZCB0byBjcmVhdGUgYSBkZWxpbWl0ZXIgb2YgdGhlIGdpdmVuIGhlaWdodCtkZXB0aC5cbiAqL1xuXG5cbmNvbnN0IHRyYXZlcnNlU2VxdWVuY2UgPSBmdW5jdGlvbiAoZGVsaW0sIGhlaWdodCwgc2VxdWVuY2UsIG9wdGlvbnMpIHtcbiAgLy8gSGVyZSwgd2UgY2hvb3NlIHRoZSBpbmRleCB3ZSBzaG91bGQgc3RhcnQgYXQgaW4gdGhlIHNlcXVlbmNlcy4gSW4gc21hbGxlclxuICAvLyBzaXplcyAod2hpY2ggY29ycmVzcG9uZCB0byBsYXJnZXIgbnVtYmVycyBpbiBzdHlsZS5zaXplKSB3ZSBzdGFydCBlYXJsaWVyXG4gIC8vIGluIHRoZSBzZXF1ZW5jZS4gVGh1cywgc2NyaXB0c2NyaXB0IHN0YXJ0cyBhdCBpbmRleCAzLTM9MCwgc2NyaXB0IHN0YXJ0c1xuICAvLyBhdCBpbmRleCAzLTI9MSwgdGV4dCBzdGFydHMgYXQgMy0xPTIsIGFuZCBkaXNwbGF5IHN0YXJ0cyBhdCBtaW4oMiwzLTApPTJcbiAgY29uc3Qgc3RhcnQgPSBNYXRoLm1pbigyLCAzIC0gb3B0aW9ucy5zdHlsZS5zaXplKTtcblxuICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPCBzZXF1ZW5jZS5sZW5ndGg7IGkrKykge1xuICAgIGlmIChzZXF1ZW5jZVtpXS50eXBlID09PSBcInN0YWNrXCIpIHtcbiAgICAgIC8vIFRoaXMgaXMgYWx3YXlzIHRoZSBsYXN0IGRlbGltaXRlciwgc28gd2UganVzdCBicmVhayB0aGUgbG9vcCBub3cuXG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBjb25zdCBtZXRyaWNzID0gZ2V0TWV0cmljcyhkZWxpbSwgZGVsaW1UeXBlVG9Gb250KHNlcXVlbmNlW2ldKSwgXCJtYXRoXCIpO1xuICAgIGxldCBoZWlnaHREZXB0aCA9IG1ldHJpY3MuaGVpZ2h0ICsgbWV0cmljcy5kZXB0aDsgLy8gU21hbGwgZGVsaW1pdGVycyBhcmUgc2NhbGVkIGRvd24gdmVyc2lvbnMgb2YgdGhlIHNhbWUgZm9udCwgc28gd2VcbiAgICAvLyBhY2NvdW50IGZvciB0aGUgc3R5bGUgY2hhbmdlIHNpemUuXG5cbiAgICBpZiAoc2VxdWVuY2VbaV0udHlwZSA9PT0gXCJzbWFsbFwiKSB7XG4gICAgICBjb25zdCBuZXdPcHRpb25zID0gb3B0aW9ucy5oYXZpbmdCYXNlU3R5bGUoc2VxdWVuY2VbaV0uc3R5bGUpO1xuICAgICAgaGVpZ2h0RGVwdGggKj0gbmV3T3B0aW9ucy5zaXplTXVsdGlwbGllcjtcbiAgICB9IC8vIENoZWNrIGlmIHRoZSBkZWxpbWl0ZXIgYXQgdGhpcyBzaXplIHdvcmtzIGZvciB0aGUgZ2l2ZW4gaGVpZ2h0LlxuXG5cbiAgICBpZiAoaGVpZ2h0RGVwdGggPiBoZWlnaHQpIHtcbiAgICAgIHJldHVybiBzZXF1ZW5jZVtpXTtcbiAgICB9XG4gIH0gLy8gSWYgd2UgcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBzZXF1ZW5jZSwgcmV0dXJuIHRoZSBsYXN0IHNlcXVlbmNlIGVsZW1lbnQuXG5cblxuICByZXR1cm4gc2VxdWVuY2Vbc2VxdWVuY2UubGVuZ3RoIC0gMV07XG59O1xuLyoqXG4gKiBNYWtlIGEgZGVsaW1pdGVyIG9mIGEgZ2l2ZW4gaGVpZ2h0K2RlcHRoLCB3aXRoIG9wdGlvbmFsIGNlbnRlcmluZy4gSGVyZSwgd2VcbiAqIHRyYXZlcnNlIHRoZSBzZXF1ZW5jZXMsIGFuZCBjcmVhdGUgYSBkZWxpbWl0ZXIgdGhhdCB0aGUgc2VxdWVuY2UgdGVsbHMgdXMgdG8uXG4gKi9cblxuXG5jb25zdCBtYWtlQ3VzdG9tU2l6ZWREZWxpbSA9IGZ1bmN0aW9uIChkZWxpbSwgaGVpZ2h0LCBjZW50ZXIsIG9wdGlvbnMsIG1vZGUsIGNsYXNzZXMpIHtcbiAgaWYgKGRlbGltID09PSBcIjxcIiB8fCBkZWxpbSA9PT0gXCJcXFxcbHRcIiB8fCBkZWxpbSA9PT0gXCJcXHUyN2U4XCIpIHtcbiAgICBkZWxpbSA9IFwiXFxcXGxhbmdsZVwiO1xuICB9IGVsc2UgaWYgKGRlbGltID09PSBcIj5cIiB8fCBkZWxpbSA9PT0gXCJcXFxcZ3RcIiB8fCBkZWxpbSA9PT0gXCJcXHUyN2U5XCIpIHtcbiAgICBkZWxpbSA9IFwiXFxcXHJhbmdsZVwiO1xuICB9IC8vIERlY2lkZSB3aGF0IHNlcXVlbmNlIHRvIHVzZVxuXG5cbiAgbGV0IHNlcXVlbmNlO1xuXG4gIGlmICh1dGlscy5jb250YWlucyhzdGFja05ldmVyRGVsaW1pdGVycywgZGVsaW0pKSB7XG4gICAgc2VxdWVuY2UgPSBzdGFja05ldmVyRGVsaW1pdGVyU2VxdWVuY2U7XG4gIH0gZWxzZSBpZiAodXRpbHMuY29udGFpbnMoc3RhY2tMYXJnZURlbGltaXRlcnMsIGRlbGltKSkge1xuICAgIHNlcXVlbmNlID0gc3RhY2tMYXJnZURlbGltaXRlclNlcXVlbmNlO1xuICB9IGVsc2Uge1xuICAgIHNlcXVlbmNlID0gc3RhY2tBbHdheXNEZWxpbWl0ZXJTZXF1ZW5jZTtcbiAgfSAvLyBMb29rIHRocm91Z2ggdGhlIHNlcXVlbmNlXG5cblxuICBjb25zdCBkZWxpbVR5cGUgPSB0cmF2ZXJzZVNlcXVlbmNlKGRlbGltLCBoZWlnaHQsIHNlcXVlbmNlLCBvcHRpb25zKTsgLy8gR2V0IHRoZSBkZWxpbWl0ZXIgZnJvbSBmb250IGdseXBocy5cbiAgLy8gRGVwZW5kaW5nIG9uIHRoZSBzZXF1ZW5jZSBlbGVtZW50IHdlIGRlY2lkZWQgb24sIGNhbGwgdGhlXG4gIC8vIGFwcHJvcHJpYXRlIGZ1bmN0aW9uLlxuXG4gIGlmIChkZWxpbVR5cGUudHlwZSA9PT0gXCJzbWFsbFwiKSB7XG4gICAgcmV0dXJuIG1ha2VTbWFsbERlbGltKGRlbGltLCBkZWxpbVR5cGUuc3R5bGUsIGNlbnRlciwgb3B0aW9ucywgbW9kZSwgY2xhc3Nlcyk7XG4gIH0gZWxzZSBpZiAoZGVsaW1UeXBlLnR5cGUgPT09IFwibGFyZ2VcIikge1xuICAgIHJldHVybiBtYWtlTGFyZ2VEZWxpbShkZWxpbSwgZGVsaW1UeXBlLnNpemUsIGNlbnRlciwgb3B0aW9ucywgbW9kZSwgY2xhc3Nlcyk7XG4gIH0gZWxzZVxuICAgIC8qIGlmIChkZWxpbVR5cGUudHlwZSA9PT0gXCJzdGFja1wiKSAqL1xuICAgIHtcbiAgICAgIHJldHVybiBtYWtlU3RhY2tlZERlbGltKGRlbGltLCBoZWlnaHQsIGNlbnRlciwgb3B0aW9ucywgbW9kZSwgY2xhc3Nlcyk7XG4gICAgfVxufTtcbi8qKlxuICogTWFrZSBhIGRlbGltaXRlciBmb3IgdXNlIHdpdGggYFxcbGVmdGAgYW5kIGBcXHJpZ2h0YCwgZ2l2ZW4gYSBoZWlnaHQgYW5kIGRlcHRoXG4gKiBvZiBhbiBleHByZXNzaW9uIHRoYXQgdGhlIGRlbGltaXRlcnMgc3Vycm91bmQuXG4gKi9cblxuXG5jb25zdCBtYWtlTGVmdFJpZ2h0RGVsaW0gPSBmdW5jdGlvbiAoZGVsaW0sIGhlaWdodCwgZGVwdGgsIG9wdGlvbnMsIG1vZGUsIGNsYXNzZXMpIHtcbiAgLy8gV2UgYWx3YXlzIGNlbnRlciBcXGxlZnQvXFxyaWdodCBkZWxpbWl0ZXJzLCBzbyB0aGUgYXhpcyBpcyBhbHdheXMgc2hpZnRlZFxuICBjb25zdCBheGlzSGVpZ2h0ID0gb3B0aW9ucy5mb250TWV0cmljcygpLmF4aXNIZWlnaHQgKiBvcHRpb25zLnNpemVNdWx0aXBsaWVyOyAvLyBUYWtlbiBmcm9tIFRlWCBzb3VyY2UsIHRleC53ZWIsIGZ1bmN0aW9uIG1ha2VfbGVmdF9yaWdodFxuXG4gIGNvbnN0IGRlbGltaXRlckZhY3RvciA9IDkwMTtcbiAgY29uc3QgZGVsaW1pdGVyRXh0ZW5kID0gNS4wIC8gb3B0aW9ucy5mb250TWV0cmljcygpLnB0UGVyRW07XG4gIGNvbnN0IG1heERpc3RGcm9tQXhpcyA9IE1hdGgubWF4KGhlaWdodCAtIGF4aXNIZWlnaHQsIGRlcHRoICsgYXhpc0hlaWdodCk7XG4gIGNvbnN0IHRvdGFsSGVpZ2h0ID0gTWF0aC5tYXgoIC8vIEluIHJlYWwgVGVYLCBjYWxjdWxhdGlvbnMgYXJlIGRvbmUgdXNpbmcgaW50ZWdyYWwgdmFsdWVzIHdoaWNoIGFyZVxuICAvLyA2NTUzNiBwZXIgcHQsIG9yIDY1NTM2MCBwZXIgZW0uIFNvLCB0aGUgZGl2aXNpb24gaGVyZSB0cnVuY2F0ZXMgaW5cbiAgLy8gVGVYIGJ1dCBkb2Vzbid0IGhlcmUsIHByb2R1Y2luZyBkaWZmZXJlbnQgcmVzdWx0cy4gSWYgd2Ugd2FudGVkIHRvXG4gIC8vIGV4YWN0bHkgbWF0Y2ggVGVYJ3MgY2FsY3VsYXRpb24sIHdlIGNvdWxkIGRvXG4gIC8vICAgTWF0aC5mbG9vcig2NTUzNjAgKiBtYXhEaXN0RnJvbUF4aXMgLyA1MDApICpcbiAgLy8gICAgZGVsaW1pdGVyRmFjdG9yIC8gNjU1MzYwXG4gIC8vIChUbyBzZWUgdGhlIGRpZmZlcmVuY2UsIGNvbXBhcmVcbiAgLy8gICAgeF57eF57XFxsZWZ0KFxccnVsZXswLjFlbX17MC42OGVtfVxccmlnaHQpfX1cbiAgLy8gaW4gVGVYIGFuZCBLYVRlWClcbiAgbWF4RGlzdEZyb21BeGlzIC8gNTAwICogZGVsaW1pdGVyRmFjdG9yLCAyICogbWF4RGlzdEZyb21BeGlzIC0gZGVsaW1pdGVyRXh0ZW5kKTsgLy8gRmluYWxseSwgd2UgZGVmZXIgdG8gYG1ha2VDdXN0b21TaXplZERlbGltYCB3aXRoIG91ciBjYWxjdWxhdGVkIHRvdGFsXG4gIC8vIGhlaWdodFxuXG4gIHJldHVybiBtYWtlQ3VzdG9tU2l6ZWREZWxpbShkZWxpbSwgdG90YWxIZWlnaHQsIHRydWUsIG9wdGlvbnMsIG1vZGUsIGNsYXNzZXMpO1xufTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgZGVsaW1pdGVyID0gKHtcbiAgc3FydEltYWdlOiBtYWtlU3FydEltYWdlLFxuICBzaXplZERlbGltOiBtYWtlU2l6ZWREZWxpbSxcbiAgc2l6ZVRvTWF4SGVpZ2h0OiBzaXplVG9NYXhIZWlnaHQsXG4gIGN1c3RvbVNpemVkRGVsaW06IG1ha2VDdXN0b21TaXplZERlbGltLFxuICBsZWZ0UmlnaHREZWxpbTogbWFrZUxlZnRSaWdodERlbGltXG59KTtcbjsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbnMvZGVsaW1zaXppbmcuanNcblxuXG5cblxuXG5cblxuXG5cblxuLy8gRXh0cmEgZGF0YSBuZWVkZWQgZm9yIHRoZSBkZWxpbWl0ZXIgaGFuZGxlciBkb3duIGJlbG93XG5jb25zdCBkZWxpbWl0ZXJTaXplcyA9IHtcbiAgXCJcXFxcYmlnbFwiOiB7XG4gICAgbWNsYXNzOiBcIm1vcGVuXCIsXG4gICAgc2l6ZTogMVxuICB9LFxuICBcIlxcXFxCaWdsXCI6IHtcbiAgICBtY2xhc3M6IFwibW9wZW5cIixcbiAgICBzaXplOiAyXG4gIH0sXG4gIFwiXFxcXGJpZ2dsXCI6IHtcbiAgICBtY2xhc3M6IFwibW9wZW5cIixcbiAgICBzaXplOiAzXG4gIH0sXG4gIFwiXFxcXEJpZ2dsXCI6IHtcbiAgICBtY2xhc3M6IFwibW9wZW5cIixcbiAgICBzaXplOiA0XG4gIH0sXG4gIFwiXFxcXGJpZ3JcIjoge1xuICAgIG1jbGFzczogXCJtY2xvc2VcIixcbiAgICBzaXplOiAxXG4gIH0sXG4gIFwiXFxcXEJpZ3JcIjoge1xuICAgIG1jbGFzczogXCJtY2xvc2VcIixcbiAgICBzaXplOiAyXG4gIH0sXG4gIFwiXFxcXGJpZ2dyXCI6IHtcbiAgICBtY2xhc3M6IFwibWNsb3NlXCIsXG4gICAgc2l6ZTogM1xuICB9LFxuICBcIlxcXFxCaWdnclwiOiB7XG4gICAgbWNsYXNzOiBcIm1jbG9zZVwiLFxuICAgIHNpemU6IDRcbiAgfSxcbiAgXCJcXFxcYmlnbVwiOiB7XG4gICAgbWNsYXNzOiBcIm1yZWxcIixcbiAgICBzaXplOiAxXG4gIH0sXG4gIFwiXFxcXEJpZ21cIjoge1xuICAgIG1jbGFzczogXCJtcmVsXCIsXG4gICAgc2l6ZTogMlxuICB9LFxuICBcIlxcXFxiaWdnbVwiOiB7XG4gICAgbWNsYXNzOiBcIm1yZWxcIixcbiAgICBzaXplOiAzXG4gIH0sXG4gIFwiXFxcXEJpZ2dtXCI6IHtcbiAgICBtY2xhc3M6IFwibXJlbFwiLFxuICAgIHNpemU6IDRcbiAgfSxcbiAgXCJcXFxcYmlnXCI6IHtcbiAgICBtY2xhc3M6IFwibW9yZFwiLFxuICAgIHNpemU6IDFcbiAgfSxcbiAgXCJcXFxcQmlnXCI6IHtcbiAgICBtY2xhc3M6IFwibW9yZFwiLFxuICAgIHNpemU6IDJcbiAgfSxcbiAgXCJcXFxcYmlnZ1wiOiB7XG4gICAgbWNsYXNzOiBcIm1vcmRcIixcbiAgICBzaXplOiAzXG4gIH0sXG4gIFwiXFxcXEJpZ2dcIjoge1xuICAgIG1jbGFzczogXCJtb3JkXCIsXG4gICAgc2l6ZTogNFxuICB9XG59O1xuY29uc3QgZGVsaW1pdGVycyA9IFtcIihcIiwgXCJcXFxcbHBhcmVuXCIsIFwiKVwiLCBcIlxcXFxycGFyZW5cIiwgXCJbXCIsIFwiXFxcXGxicmFja1wiLCBcIl1cIiwgXCJcXFxccmJyYWNrXCIsIFwiXFxcXHtcIiwgXCJcXFxcbGJyYWNlXCIsIFwiXFxcXH1cIiwgXCJcXFxccmJyYWNlXCIsIFwiXFxcXGxmbG9vclwiLCBcIlxcXFxyZmxvb3JcIiwgXCJcXHUyMzBhXCIsIFwiXFx1MjMwYlwiLCBcIlxcXFxsY2VpbFwiLCBcIlxcXFxyY2VpbFwiLCBcIlxcdTIzMDhcIiwgXCJcXHUyMzA5XCIsIFwiPFwiLCBcIj5cIiwgXCJcXFxcbGFuZ2xlXCIsIFwiXFx1MjdlOFwiLCBcIlxcXFxyYW5nbGVcIiwgXCJcXHUyN2U5XCIsIFwiXFxcXGx0XCIsIFwiXFxcXGd0XCIsIFwiXFxcXGx2ZXJ0XCIsIFwiXFxcXHJ2ZXJ0XCIsIFwiXFxcXGxWZXJ0XCIsIFwiXFxcXHJWZXJ0XCIsIFwiXFxcXGxncm91cFwiLCBcIlxcXFxyZ3JvdXBcIiwgXCJcXHUyN2VlXCIsIFwiXFx1MjdlZlwiLCBcIlxcXFxsbW91c3RhY2hlXCIsIFwiXFxcXHJtb3VzdGFjaGVcIiwgXCJcXHUyM2IwXCIsIFwiXFx1MjNiMVwiLCBcIi9cIiwgXCJcXFxcYmFja3NsYXNoXCIsIFwifFwiLCBcIlxcXFx2ZXJ0XCIsIFwiXFxcXHxcIiwgXCJcXFxcVmVydFwiLCBcIlxcXFx1cGFycm93XCIsIFwiXFxcXFVwYXJyb3dcIiwgXCJcXFxcZG93bmFycm93XCIsIFwiXFxcXERvd25hcnJvd1wiLCBcIlxcXFx1cGRvd25hcnJvd1wiLCBcIlxcXFxVcGRvd25hcnJvd1wiLCBcIi5cIl07XG5cbi8vIERlbGltaXRlciBmdW5jdGlvbnNcbmZ1bmN0aW9uIGNoZWNrRGVsaW1pdGVyKGRlbGltLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN5bURlbGltID0gY2hlY2tTeW1ib2xOb2RlVHlwZShkZWxpbSk7XG5cbiAgaWYgKHN5bURlbGltICYmIHV0aWxzLmNvbnRhaW5zKGRlbGltaXRlcnMsIHN5bURlbGltLnRleHQpKSB7XG4gICAgcmV0dXJuIHN5bURlbGltO1xuICB9IGVsc2UgaWYgKHN5bURlbGltKSB7XG4gICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiSW52YWxpZCBkZWxpbWl0ZXIgJ1wiICsgc3ltRGVsaW0udGV4dCArIFwiJyBhZnRlciAnXCIgKyBjb250ZXh0LmZ1bmNOYW1lICsgXCInXCIsIGRlbGltKTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJJbnZhbGlkIGRlbGltaXRlciB0eXBlICdcIiArIGRlbGltLnR5cGUgKyBcIidcIiwgZGVsaW0pO1xuICB9XG59XG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJkZWxpbXNpemluZ1wiLFxuICBuYW1lczogW1wiXFxcXGJpZ2xcIiwgXCJcXFxcQmlnbFwiLCBcIlxcXFxiaWdnbFwiLCBcIlxcXFxCaWdnbFwiLCBcIlxcXFxiaWdyXCIsIFwiXFxcXEJpZ3JcIiwgXCJcXFxcYmlnZ3JcIiwgXCJcXFxcQmlnZ3JcIiwgXCJcXFxcYmlnbVwiLCBcIlxcXFxCaWdtXCIsIFwiXFxcXGJpZ2dtXCIsIFwiXFxcXEJpZ2dtXCIsIFwiXFxcXGJpZ1wiLCBcIlxcXFxCaWdcIiwgXCJcXFxcYmlnZ1wiLCBcIlxcXFxCaWdnXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDEsXG4gICAgYXJnVHlwZXM6IFtcInByaW1pdGl2ZVwiXVxuICB9LFxuICBoYW5kbGVyOiAoY29udGV4dCwgYXJncykgPT4ge1xuICAgIGNvbnN0IGRlbGltID0gY2hlY2tEZWxpbWl0ZXIoYXJnc1swXSwgY29udGV4dCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiZGVsaW1zaXppbmdcIixcbiAgICAgIG1vZGU6IGNvbnRleHQucGFyc2VyLm1vZGUsXG4gICAgICBzaXplOiBkZWxpbWl0ZXJTaXplc1tjb250ZXh0LmZ1bmNOYW1lXS5zaXplLFxuICAgICAgbWNsYXNzOiBkZWxpbWl0ZXJTaXplc1tjb250ZXh0LmZ1bmNOYW1lXS5tY2xhc3MsXG4gICAgICBkZWxpbTogZGVsaW0udGV4dFxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiAoZ3JvdXAsIG9wdGlvbnMpID0+IHtcbiAgICBpZiAoZ3JvdXAuZGVsaW0gPT09IFwiLlwiKSB7XG4gICAgICAvLyBFbXB0eSBkZWxpbWl0ZXJzIHN0aWxsIGNvdW50IGFzIGVsZW1lbnRzLCBldmVuIHRob3VnaCB0aGV5IGRvbid0XG4gICAgICAvLyBzaG93IGFueXRoaW5nLlxuICAgICAgcmV0dXJuIGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtncm91cC5tY2xhc3NdKTtcbiAgICB9IC8vIFVzZSBkZWxpbWl0ZXIuc2l6ZWREZWxpbSB0byBnZW5lcmF0ZSB0aGUgZGVsaW1pdGVyLlxuXG5cbiAgICByZXR1cm4gZGVsaW1pdGVyLnNpemVkRGVsaW0oZ3JvdXAuZGVsaW0sIGdyb3VwLnNpemUsIG9wdGlvbnMsIGdyb3VwLm1vZGUsIFtncm91cC5tY2xhc3NdKTtcbiAgfSxcbiAgbWF0aG1sQnVpbGRlcjogZ3JvdXAgPT4ge1xuICAgIGNvbnN0IGNoaWxkcmVuID0gW107XG5cbiAgICBpZiAoZ3JvdXAuZGVsaW0gIT09IFwiLlwiKSB7XG4gICAgICBjaGlsZHJlbi5wdXNoKG1ha2VUZXh0KGdyb3VwLmRlbGltLCBncm91cC5tb2RlKSk7XG4gICAgfVxuXG4gICAgY29uc3Qgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibW9cIiwgY2hpbGRyZW4pO1xuXG4gICAgaWYgKGdyb3VwLm1jbGFzcyA9PT0gXCJtb3BlblwiIHx8IGdyb3VwLm1jbGFzcyA9PT0gXCJtY2xvc2VcIikge1xuICAgICAgLy8gT25seSBzb21lIG9mIHRoZSBkZWxpbXNpemluZyBmdW5jdGlvbnMgYWN0IGFzIGZlbmNlcywgYW5kIHRoZXlcbiAgICAgIC8vIHJldHVybiBcIm1vcGVuXCIgb3IgXCJtY2xvc2VcIiBtY2xhc3MuXG4gICAgICBub2RlLnNldEF0dHJpYnV0ZShcImZlbmNlXCIsIFwidHJ1ZVwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRXhwbGljaXRseSBkaXNhYmxlIGZlbmNpbmcgaWYgaXQncyBub3QgYSBmZW5jZSwgdG8gb3ZlcnJpZGUgdGhlXG4gICAgICAvLyBkZWZhdWx0cy5cbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwiZmVuY2VcIiwgXCJmYWxzZVwiKTtcbiAgICB9XG5cbiAgICBub2RlLnNldEF0dHJpYnV0ZShcInN0cmV0Y2h5XCIsIFwidHJ1ZVwiKTtcbiAgICBjb25zdCBzaXplID0gbWFrZUVtKGRlbGltaXRlci5zaXplVG9NYXhIZWlnaHRbZ3JvdXAuc2l6ZV0pO1xuICAgIG5vZGUuc2V0QXR0cmlidXRlKFwibWluc2l6ZVwiLCBzaXplKTtcbiAgICBub2RlLnNldEF0dHJpYnV0ZShcIm1heHNpemVcIiwgc2l6ZSk7XG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cbn0pO1xuXG5mdW5jdGlvbiBhc3NlcnRQYXJzZWQoZ3JvdXApIHtcbiAgaWYgKCFncm91cC5ib2R5KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQnVnOiBUaGUgbGVmdHJpZ2h0IFBhcnNlTm9kZSB3YXNuJ3QgZnVsbHkgcGFyc2VkLlwiKTtcbiAgfVxufVxuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwibGVmdHJpZ2h0LXJpZ2h0XCIsXG4gIG5hbWVzOiBbXCJcXFxccmlnaHRcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMSxcbiAgICBwcmltaXRpdmU6IHRydWVcbiAgfSxcbiAgaGFuZGxlcjogKGNvbnRleHQsIGFyZ3MpID0+IHtcbiAgICAvLyBcXGxlZnQgY2FzZSBiZWxvdyB0cmlnZ2VycyBwYXJzaW5nIG9mIFxccmlnaHQgaW5cbiAgICAvLyAgIGBjb25zdCByaWdodCA9IHBhcnNlci5wYXJzZUZ1bmN0aW9uKCk7YFxuICAgIC8vIHVzZXMgdGhpcyByZXR1cm4gdmFsdWUuXG4gICAgY29uc3QgY29sb3IgPSBjb250ZXh0LnBhcnNlci5ndWxsZXQubWFjcm9zLmdldChcIlxcXFxjdXJyZW50QGNvbG9yXCIpO1xuXG4gICAgaWYgKGNvbG9yICYmIHR5cGVvZiBjb2xvciAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiXFxcXGN1cnJlbnRAY29sb3Igc2V0IHRvIG5vbi1zdHJpbmcgaW4gXFxcXHJpZ2h0XCIpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImxlZnRyaWdodC1yaWdodFwiLFxuICAgICAgbW9kZTogY29udGV4dC5wYXJzZXIubW9kZSxcbiAgICAgIGRlbGltOiBjaGVja0RlbGltaXRlcihhcmdzWzBdLCBjb250ZXh0KS50ZXh0LFxuICAgICAgY29sb3IgLy8gdW5kZWZpbmVkIGlmIG5vdCBzZXQgdmlhIFxcY29sb3JcblxuICAgIH07XG4gIH1cbn0pO1xuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcImxlZnRyaWdodFwiLFxuICBuYW1lczogW1wiXFxcXGxlZnRcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMSxcbiAgICBwcmltaXRpdmU6IHRydWVcbiAgfSxcbiAgaGFuZGxlcjogKGNvbnRleHQsIGFyZ3MpID0+IHtcbiAgICBjb25zdCBkZWxpbSA9IGNoZWNrRGVsaW1pdGVyKGFyZ3NbMF0sIGNvbnRleHQpO1xuICAgIGNvbnN0IHBhcnNlciA9IGNvbnRleHQucGFyc2VyOyAvLyBQYXJzZSBvdXQgdGhlIGltcGxpY2l0IGJvZHlcblxuICAgICsrcGFyc2VyLmxlZnRyaWdodERlcHRoOyAvLyBwYXJzZUV4cHJlc3Npb24gc3RvcHMgYmVmb3JlICdcXFxccmlnaHQnXG5cbiAgICBjb25zdCBib2R5ID0gcGFyc2VyLnBhcnNlRXhwcmVzc2lvbihmYWxzZSk7XG4gICAgLS1wYXJzZXIubGVmdHJpZ2h0RGVwdGg7IC8vIENoZWNrIHRoZSBuZXh0IHRva2VuXG5cbiAgICBwYXJzZXIuZXhwZWN0KFwiXFxcXHJpZ2h0XCIsIGZhbHNlKTtcbiAgICBjb25zdCByaWdodCA9IGFzc2VydE5vZGVUeXBlKHBhcnNlci5wYXJzZUZ1bmN0aW9uKCksIFwibGVmdHJpZ2h0LXJpZ2h0XCIpO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImxlZnRyaWdodFwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBib2R5LFxuICAgICAgbGVmdDogZGVsaW0udGV4dCxcbiAgICAgIHJpZ2h0OiByaWdodC5kZWxpbSxcbiAgICAgIHJpZ2h0Q29sb3I6IHJpZ2h0LmNvbG9yXG4gICAgfTtcbiAgfSxcbiAgaHRtbEJ1aWxkZXI6IChncm91cCwgb3B0aW9ucykgPT4ge1xuICAgIGFzc2VydFBhcnNlZChncm91cCk7IC8vIEJ1aWxkIHRoZSBpbm5lciBleHByZXNzaW9uXG5cbiAgICBjb25zdCBpbm5lciA9IGJ1aWxkRXhwcmVzc2lvbihncm91cC5ib2R5LCBvcHRpb25zLCB0cnVlLCBbXCJtb3BlblwiLCBcIm1jbG9zZVwiXSk7XG4gICAgbGV0IGlubmVySGVpZ2h0ID0gMDtcbiAgICBsZXQgaW5uZXJEZXB0aCA9IDA7XG4gICAgbGV0IGhhZE1pZGRsZSA9IGZhbHNlOyAvLyBDYWxjdWxhdGUgaXRzIGhlaWdodCBhbmQgZGVwdGhcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5uZXIubGVuZ3RoOyBpKyspIHtcbiAgICAgIC8vIFByb3BlcnR5IGBpc01pZGRsZWAgbm90IGRlZmluZWQgb24gYHNwYW5gLiBTZWUgY29tbWVudCBpblxuICAgICAgLy8gXCJtaWRkbGVcIidzIGh0bWxCdWlsZGVyLlxuICAgICAgLy8gJEZsb3dGaXhNZVxuICAgICAgaWYgKGlubmVyW2ldLmlzTWlkZGxlKSB7XG4gICAgICAgIGhhZE1pZGRsZSA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbm5lckhlaWdodCA9IE1hdGgubWF4KGlubmVyW2ldLmhlaWdodCwgaW5uZXJIZWlnaHQpO1xuICAgICAgICBpbm5lckRlcHRoID0gTWF0aC5tYXgoaW5uZXJbaV0uZGVwdGgsIGlubmVyRGVwdGgpO1xuICAgICAgfVxuICAgIH0gLy8gVGhlIHNpemUgb2YgZGVsaW1pdGVycyBpcyB0aGUgc2FtZSwgcmVnYXJkbGVzcyBvZiB3aGF0IHN0eWxlIHdlIGFyZVxuICAgIC8vIGluLiBUaHVzLCB0byBjb3JyZWN0bHkgY2FsY3VsYXRlIHRoZSBzaXplIG9mIGRlbGltaXRlciB3ZSBuZWVkIGFyb3VuZFxuICAgIC8vIGEgZ3JvdXAsIHdlIHNjYWxlIGRvd24gdGhlIGlubmVyIHNpemUgYmFzZWQgb24gdGhlIHNpemUuXG5cblxuICAgIGlubmVySGVpZ2h0ICo9IG9wdGlvbnMuc2l6ZU11bHRpcGxpZXI7XG4gICAgaW5uZXJEZXB0aCAqPSBvcHRpb25zLnNpemVNdWx0aXBsaWVyO1xuICAgIGxldCBsZWZ0RGVsaW07XG5cbiAgICBpZiAoZ3JvdXAubGVmdCA9PT0gXCIuXCIpIHtcbiAgICAgIC8vIEVtcHR5IGRlbGltaXRlcnMgaW4gXFxsZWZ0IGFuZCBcXHJpZ2h0IG1ha2UgbnVsbCBkZWxpbWl0ZXIgc3BhY2VzLlxuICAgICAgbGVmdERlbGltID0gbWFrZU51bGxEZWxpbWl0ZXIob3B0aW9ucywgW1wibW9wZW5cIl0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBPdGhlcndpc2UsIHVzZSBsZWZ0UmlnaHREZWxpbSB0byBnZW5lcmF0ZSB0aGUgY29ycmVjdCBzaXplZFxuICAgICAgLy8gZGVsaW1pdGVyLlxuICAgICAgbGVmdERlbGltID0gZGVsaW1pdGVyLmxlZnRSaWdodERlbGltKGdyb3VwLmxlZnQsIGlubmVySGVpZ2h0LCBpbm5lckRlcHRoLCBvcHRpb25zLCBncm91cC5tb2RlLCBbXCJtb3BlblwiXSk7XG4gICAgfSAvLyBBZGQgaXQgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgZXhwcmVzc2lvblxuXG5cbiAgICBpbm5lci51bnNoaWZ0KGxlZnREZWxpbSk7IC8vIEhhbmRsZSBtaWRkbGUgZGVsaW1pdGVyc1xuXG4gICAgaWYgKGhhZE1pZGRsZSkge1xuICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBpbm5lci5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBtaWRkbGVEZWxpbSA9IGlubmVyW2ldOyAvLyBQcm9wZXJ0eSBgaXNNaWRkbGVgIG5vdCBkZWZpbmVkIG9uIGBzcGFuYC4gU2VlIGNvbW1lbnQgaW5cbiAgICAgICAgLy8gXCJtaWRkbGVcIidzIGh0bWxCdWlsZGVyLlxuICAgICAgICAvLyAkRmxvd0ZpeE1lXG5cbiAgICAgICAgY29uc3QgaXNNaWRkbGUgPSBtaWRkbGVEZWxpbS5pc01pZGRsZTtcblxuICAgICAgICBpZiAoaXNNaWRkbGUpIHtcbiAgICAgICAgICAvLyBBcHBseSB0aGUgb3B0aW9ucyB0aGF0IHdlcmUgYWN0aXZlIHdoZW4gXFxtaWRkbGUgd2FzIGNhbGxlZFxuICAgICAgICAgIGlubmVyW2ldID0gZGVsaW1pdGVyLmxlZnRSaWdodERlbGltKGlzTWlkZGxlLmRlbGltLCBpbm5lckhlaWdodCwgaW5uZXJEZXB0aCwgaXNNaWRkbGUub3B0aW9ucywgZ3JvdXAubW9kZSwgW10pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IHJpZ2h0RGVsaW07IC8vIFNhbWUgZm9yIHRoZSByaWdodCBkZWxpbWl0ZXIsIGJ1dCB1c2luZyBjb2xvciBzcGVjaWZpZWQgYnkgXFxjb2xvclxuXG4gICAgaWYgKGdyb3VwLnJpZ2h0ID09PSBcIi5cIikge1xuICAgICAgcmlnaHREZWxpbSA9IG1ha2VOdWxsRGVsaW1pdGVyKG9wdGlvbnMsIFtcIm1jbG9zZVwiXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGNvbG9yT3B0aW9ucyA9IGdyb3VwLnJpZ2h0Q29sb3IgPyBvcHRpb25zLndpdGhDb2xvcihncm91cC5yaWdodENvbG9yKSA6IG9wdGlvbnM7XG4gICAgICByaWdodERlbGltID0gZGVsaW1pdGVyLmxlZnRSaWdodERlbGltKGdyb3VwLnJpZ2h0LCBpbm5lckhlaWdodCwgaW5uZXJEZXB0aCwgY29sb3JPcHRpb25zLCBncm91cC5tb2RlLCBbXCJtY2xvc2VcIl0pO1xuICAgIH0gLy8gQWRkIGl0IHRvIHRoZSBlbmQgb2YgdGhlIGV4cHJlc3Npb24uXG5cblxuICAgIGlubmVyLnB1c2gocmlnaHREZWxpbSk7XG4gICAgcmV0dXJuIGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcIm1pbm5lclwiXSwgaW5uZXIsIG9wdGlvbnMpO1xuICB9LFxuICBtYXRobWxCdWlsZGVyOiAoZ3JvdXAsIG9wdGlvbnMpID0+IHtcbiAgICBhc3NlcnRQYXJzZWQoZ3JvdXApO1xuICAgIGNvbnN0IGlubmVyID0gYnVpbGRNYXRoTUxfYnVpbGRFeHByZXNzaW9uKGdyb3VwLmJvZHksIG9wdGlvbnMpO1xuXG4gICAgaWYgKGdyb3VwLmxlZnQgIT09IFwiLlwiKSB7XG4gICAgICBjb25zdCBsZWZ0Tm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibW9cIiwgW21ha2VUZXh0KGdyb3VwLmxlZnQsIGdyb3VwLm1vZGUpXSk7XG4gICAgICBsZWZ0Tm9kZS5zZXRBdHRyaWJ1dGUoXCJmZW5jZVwiLCBcInRydWVcIik7XG4gICAgICBpbm5lci51bnNoaWZ0KGxlZnROb2RlKTtcbiAgICB9XG5cbiAgICBpZiAoZ3JvdXAucmlnaHQgIT09IFwiLlwiKSB7XG4gICAgICBjb25zdCByaWdodE5vZGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1vXCIsIFttYWtlVGV4dChncm91cC5yaWdodCwgZ3JvdXAubW9kZSldKTtcbiAgICAgIHJpZ2h0Tm9kZS5zZXRBdHRyaWJ1dGUoXCJmZW5jZVwiLCBcInRydWVcIik7XG5cbiAgICAgIGlmIChncm91cC5yaWdodENvbG9yKSB7XG4gICAgICAgIHJpZ2h0Tm9kZS5zZXRBdHRyaWJ1dGUoXCJtYXRoY29sb3JcIiwgZ3JvdXAucmlnaHRDb2xvcik7XG4gICAgICB9XG5cbiAgICAgIGlubmVyLnB1c2gocmlnaHROb2RlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWFrZVJvdyhpbm5lcik7XG4gIH1cbn0pO1xuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcIm1pZGRsZVwiLFxuICBuYW1lczogW1wiXFxcXG1pZGRsZVwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxLFxuICAgIHByaW1pdGl2ZTogdHJ1ZVxuICB9LFxuICBoYW5kbGVyOiAoY29udGV4dCwgYXJncykgPT4ge1xuICAgIGNvbnN0IGRlbGltID0gY2hlY2tEZWxpbWl0ZXIoYXJnc1swXSwgY29udGV4dCk7XG5cbiAgICBpZiAoIWNvbnRleHQucGFyc2VyLmxlZnRyaWdodERlcHRoKSB7XG4gICAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJcXFxcbWlkZGxlIHdpdGhvdXQgcHJlY2VkaW5nIFxcXFxsZWZ0XCIsIGRlbGltKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJtaWRkbGVcIixcbiAgICAgIG1vZGU6IGNvbnRleHQucGFyc2VyLm1vZGUsXG4gICAgICBkZWxpbTogZGVsaW0udGV4dFxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiAoZ3JvdXAsIG9wdGlvbnMpID0+IHtcbiAgICBsZXQgbWlkZGxlRGVsaW07XG5cbiAgICBpZiAoZ3JvdXAuZGVsaW0gPT09IFwiLlwiKSB7XG4gICAgICBtaWRkbGVEZWxpbSA9IG1ha2VOdWxsRGVsaW1pdGVyKG9wdGlvbnMsIFtdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbWlkZGxlRGVsaW0gPSBkZWxpbWl0ZXIuc2l6ZWREZWxpbShncm91cC5kZWxpbSwgMSwgb3B0aW9ucywgZ3JvdXAubW9kZSwgW10pO1xuICAgICAgY29uc3QgaXNNaWRkbGUgPSB7XG4gICAgICAgIGRlbGltOiBncm91cC5kZWxpbSxcbiAgICAgICAgb3B0aW9uc1xuICAgICAgfTsgLy8gUHJvcGVydHkgYGlzTWlkZGxlYCBub3QgZGVmaW5lZCBvbiBgc3BhbmAuIEl0IGlzIG9ubHkgdXNlZCBpblxuICAgICAgLy8gdGhpcyBmaWxlIGFib3ZlLlxuICAgICAgLy8gVE9ETzogRml4IHRoaXMgdmlvbGF0aW9uIG9mIHRoZSBgc3BhbmAgdHlwZSBhbmQgcG9zc2libHkgcmVuYW1lXG4gICAgICAvLyB0aGluZ3Mgc2luY2UgYGlzTWlkZGxlYCBzb3VuZHMgbGlrZSBhIGJvb2xlYW4sIGJ1dCBpcyBhIHN0cnVjdC5cbiAgICAgIC8vICRGbG93Rml4TWVcblxuICAgICAgbWlkZGxlRGVsaW0uaXNNaWRkbGUgPSBpc01pZGRsZTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWlkZGxlRGVsaW07XG4gIH0sXG4gIG1hdGhtbEJ1aWxkZXI6IChncm91cCwgb3B0aW9ucykgPT4ge1xuICAgIC8vIEEgRmlyZWZveCBcXG1pZGRsZSB3aWxsIHN0cmV0Y2ggYSBjaGFyYWN0ZXIgdmVydGljYWxseSBvbmx5IGlmIGl0XG4gICAgLy8gaXMgaW4gdGhlIGZlbmNlIHBhcnQgb2YgdGhlIG9wZXJhdG9yIGRpY3Rpb25hcnkgYXQ6XG4gICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL01hdGhNTDMvYXBwZW5kaXhjLmh0bWwuXG4gICAgLy8gU28gd2UgbmVlZCB0byBhdm9pZCBVKzIyMjMgYW5kIHVzZSBwbGFpbiBcInxcIiBpbnN0ZWFkLlxuICAgIGNvbnN0IHRleHROb2RlID0gZ3JvdXAuZGVsaW0gPT09IFwiXFxcXHZlcnRcIiB8fCBncm91cC5kZWxpbSA9PT0gXCJ8XCIgPyBtYWtlVGV4dChcInxcIiwgXCJ0ZXh0XCIpIDogbWFrZVRleHQoZ3JvdXAuZGVsaW0sIGdyb3VwLm1vZGUpO1xuICAgIGNvbnN0IG1pZGRsZU5vZGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1vXCIsIFt0ZXh0Tm9kZV0pO1xuICAgIG1pZGRsZU5vZGUuc2V0QXR0cmlidXRlKFwiZmVuY2VcIiwgXCJ0cnVlXCIpOyAvLyBNYXRoTUwgZ2l2ZXMgNS8xOGVtIHNwYWNpbmcgdG8gZWFjaCA8bW8+IGVsZW1lbnQuXG4gICAgLy8gXFxtaWRkbGUgc2hvdWxkIGdldCBkZWxpbWl0ZXIgc3BhY2luZyBpbnN0ZWFkLlxuXG4gICAgbWlkZGxlTm9kZS5zZXRBdHRyaWJ1dGUoXCJsc3BhY2VcIiwgXCIwLjA1ZW1cIik7XG4gICAgbWlkZGxlTm9kZS5zZXRBdHRyaWJ1dGUoXCJyc3BhY2VcIiwgXCIwLjA1ZW1cIik7XG4gICAgcmV0dXJuIG1pZGRsZU5vZGU7XG4gIH1cbn0pO1xuOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9ucy9lbmNsb3NlLmpzXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5jb25zdCBlbmNsb3NlX2h0bWxCdWlsZGVyID0gKGdyb3VwLCBvcHRpb25zKSA9PiB7XG4gIC8vIFxcY2FuY2VsLCBcXGJjYW5jZWwsIFxceGNhbmNlbCwgXFxzb3V0LCBcXGZib3gsIFxcY29sb3Jib3gsIFxcZmNvbG9yYm94LCBcXHBoYXNlXG4gIC8vIFNvbWUgZ3JvdXBzIGNhbiByZXR1cm4gZG9jdW1lbnQgZnJhZ21lbnRzLiAgSGFuZGxlIHRob3NlIGJ5IHdyYXBwaW5nXG4gIC8vIHRoZW0gaW4gYSBzcGFuLlxuICBjb25zdCBpbm5lciA9IGJ1aWxkQ29tbW9uLndyYXBGcmFnbWVudChidWlsZEdyb3VwKGdyb3VwLmJvZHksIG9wdGlvbnMpLCBvcHRpb25zKTtcbiAgY29uc3QgbGFiZWwgPSBncm91cC5sYWJlbC5zbGljZSgxKTtcbiAgbGV0IHNjYWxlID0gb3B0aW9ucy5zaXplTXVsdGlwbGllcjtcbiAgbGV0IGltZztcbiAgbGV0IGltZ1NoaWZ0ID0gMDsgLy8gSW4gdGhlIExhVGVYIGNhbmNlbCBwYWNrYWdlLCBsaW5lIGdlb21ldHJ5IGlzIHNsaWdodGx5IGRpZmZlcmVudFxuICAvLyBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgc3ViamVjdCBpcyB3aWRlciB0aGFuIGl0IGlzIHRhbGwsIG9yIHZpY2UgdmVyc2EuXG4gIC8vIFdlIGRvbid0IGtub3cgdGhlIHdpZHRoIG9mIGEgZ3JvdXAsIHNvIGFzIGEgcHJveHksIHdlIHRlc3QgaWZcbiAgLy8gdGhlIHN1YmplY3QgaXMgYSBzaW5nbGUgY2hhcmFjdGVyLiBUaGlzIGNhcHR1cmVzIG1vc3Qgb2YgdGhlXG4gIC8vIHN1YmplY3RzIHRoYXQgc2hvdWxkIGdldCB0aGUgXCJ0YWxsXCIgdHJlYXRtZW50LlxuXG4gIGNvbnN0IGlzU2luZ2xlQ2hhciA9IHV0aWxzLmlzQ2hhcmFjdGVyQm94KGdyb3VwLmJvZHkpO1xuXG4gIGlmIChsYWJlbCA9PT0gXCJzb3V0XCIpIHtcbiAgICBpbWcgPSBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJzdHJldGNoeVwiLCBcInNvdXRcIl0pO1xuICAgIGltZy5oZWlnaHQgPSBvcHRpb25zLmZvbnRNZXRyaWNzKCkuZGVmYXVsdFJ1bGVUaGlja25lc3MgLyBzY2FsZTtcbiAgICBpbWdTaGlmdCA9IC0wLjUgKiBvcHRpb25zLmZvbnRNZXRyaWNzKCkueEhlaWdodDtcbiAgfSBlbHNlIGlmIChsYWJlbCA9PT0gXCJwaGFzZVwiKSB7XG4gICAgLy8gU2V0IGEgY291cGxlIG9mIGRpbWVuc2lvbnMgZnJvbSB0aGUgc3RlaW5tZXR6IHBhY2thZ2UuXG4gICAgY29uc3QgbGluZVdlaWdodCA9IGNhbGN1bGF0ZVNpemUoe1xuICAgICAgbnVtYmVyOiAwLjYsXG4gICAgICB1bml0OiBcInB0XCJcbiAgICB9LCBvcHRpb25zKTtcbiAgICBjb25zdCBjbGVhcmFuY2UgPSBjYWxjdWxhdGVTaXplKHtcbiAgICAgIG51bWJlcjogMC4zNSxcbiAgICAgIHVuaXQ6IFwiZXhcIlxuICAgIH0sIG9wdGlvbnMpOyAvLyBQcmV2ZW50IHNpemUgY2hhbmdlcyBsaWtlIFxcSHVnZSBmcm9tIGFmZmVjdGluZyBsaW5lIHRoaWNrbmVzc1xuXG4gICAgY29uc3QgbmV3T3B0aW9ucyA9IG9wdGlvbnMuaGF2aW5nQmFzZVNpemluZygpO1xuICAgIHNjYWxlID0gc2NhbGUgLyBuZXdPcHRpb25zLnNpemVNdWx0aXBsaWVyO1xuICAgIGNvbnN0IGFuZ2xlSGVpZ2h0ID0gaW5uZXIuaGVpZ2h0ICsgaW5uZXIuZGVwdGggKyBsaW5lV2VpZ2h0ICsgY2xlYXJhbmNlOyAvLyBSZXNlcnZlIGEgbGVmdCBwYWQgZm9yIHRoZSBhbmdsZS5cblxuICAgIGlubmVyLnN0eWxlLnBhZGRpbmdMZWZ0ID0gbWFrZUVtKGFuZ2xlSGVpZ2h0IC8gMiArIGxpbmVXZWlnaHQpOyAvLyBDcmVhdGUgYW4gU1ZHXG5cbiAgICBjb25zdCB2aWV3Qm94SGVpZ2h0ID0gTWF0aC5mbG9vcigxMDAwICogYW5nbGVIZWlnaHQgKiBzY2FsZSk7XG4gICAgY29uc3QgcGF0aCA9IHBoYXNlUGF0aCh2aWV3Qm94SGVpZ2h0KTtcbiAgICBjb25zdCBzdmdOb2RlID0gbmV3IFN2Z05vZGUoW25ldyBQYXRoTm9kZShcInBoYXNlXCIsIHBhdGgpXSwge1xuICAgICAgXCJ3aWR0aFwiOiBcIjQwMGVtXCIsXG4gICAgICBcImhlaWdodFwiOiBtYWtlRW0odmlld0JveEhlaWdodCAvIDEwMDApLFxuICAgICAgXCJ2aWV3Qm94XCI6IFwiMCAwIDQwMDAwMCBcIiArIHZpZXdCb3hIZWlnaHQsXG4gICAgICBcInByZXNlcnZlQXNwZWN0UmF0aW9cIjogXCJ4TWluWU1pbiBzbGljZVwiXG4gICAgfSk7IC8vIFdyYXAgaXQgaW4gYSBzcGFuIHdpdGggb3ZlcmZsb3c6IGhpZGRlbi5cblxuICAgIGltZyA9IGJ1aWxkQ29tbW9uLm1ha2VTdmdTcGFuKFtcImhpZGUtdGFpbFwiXSwgW3N2Z05vZGVdLCBvcHRpb25zKTtcbiAgICBpbWcuc3R5bGUuaGVpZ2h0ID0gbWFrZUVtKGFuZ2xlSGVpZ2h0KTtcbiAgICBpbWdTaGlmdCA9IGlubmVyLmRlcHRoICsgbGluZVdlaWdodCArIGNsZWFyYW5jZTtcbiAgfSBlbHNlIHtcbiAgICAvLyBBZGQgaG9yaXpvbnRhbCBwYWRkaW5nXG4gICAgaWYgKC9jYW5jZWwvLnRlc3QobGFiZWwpKSB7XG4gICAgICBpZiAoIWlzU2luZ2xlQ2hhcikge1xuICAgICAgICBpbm5lci5jbGFzc2VzLnB1c2goXCJjYW5jZWwtcGFkXCIpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAobGFiZWwgPT09IFwiYW5nbFwiKSB7XG4gICAgICBpbm5lci5jbGFzc2VzLnB1c2goXCJhbmdscGFkXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpbm5lci5jbGFzc2VzLnB1c2goXCJib3hwYWRcIik7XG4gICAgfSAvLyBBZGQgdmVydGljYWwgcGFkZGluZ1xuXG5cbiAgICBsZXQgdG9wUGFkID0gMDtcbiAgICBsZXQgYm90dG9tUGFkID0gMDtcbiAgICBsZXQgcnVsZVRoaWNrbmVzcyA9IDA7IC8vIHJlZjogY2FuY2VsIHBhY2thZ2U6IFxcYWR2YW5jZVxcdG90YWxoZWlnaHQyXFxwQCAlIFwiKzJcIlxuXG4gICAgaWYgKC9ib3gvLnRlc3QobGFiZWwpKSB7XG4gICAgICBydWxlVGhpY2tuZXNzID0gTWF0aC5tYXgob3B0aW9ucy5mb250TWV0cmljcygpLmZib3hydWxlLCAvLyBkZWZhdWx0XG4gICAgICBvcHRpb25zLm1pblJ1bGVUaGlja25lc3MgLy8gVXNlciBvdmVycmlkZS5cbiAgICAgICk7XG4gICAgICB0b3BQYWQgPSBvcHRpb25zLmZvbnRNZXRyaWNzKCkuZmJveHNlcCArIChsYWJlbCA9PT0gXCJjb2xvcmJveFwiID8gMCA6IHJ1bGVUaGlja25lc3MpO1xuICAgICAgYm90dG9tUGFkID0gdG9wUGFkO1xuICAgIH0gZWxzZSBpZiAobGFiZWwgPT09IFwiYW5nbFwiKSB7XG4gICAgICBydWxlVGhpY2tuZXNzID0gTWF0aC5tYXgob3B0aW9ucy5mb250TWV0cmljcygpLmRlZmF1bHRSdWxlVGhpY2tuZXNzLCBvcHRpb25zLm1pblJ1bGVUaGlja25lc3MpO1xuICAgICAgdG9wUGFkID0gNCAqIHJ1bGVUaGlja25lc3M7IC8vIGdhcCA9IDMgw5cgbGluZSwgcGx1cyB0aGUgbGluZSBpdHNlbGYuXG5cbiAgICAgIGJvdHRvbVBhZCA9IE1hdGgubWF4KDAsIDAuMjUgLSBpbm5lci5kZXB0aCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRvcFBhZCA9IGlzU2luZ2xlQ2hhciA/IDAuMiA6IDA7XG4gICAgICBib3R0b21QYWQgPSB0b3BQYWQ7XG4gICAgfVxuXG4gICAgaW1nID0gc3RyZXRjaHkuZW5jbG9zZVNwYW4oaW5uZXIsIGxhYmVsLCB0b3BQYWQsIGJvdHRvbVBhZCwgb3B0aW9ucyk7XG5cbiAgICBpZiAoL2Zib3h8Ym94ZWR8ZmNvbG9yYm94Ly50ZXN0KGxhYmVsKSkge1xuICAgICAgaW1nLnN0eWxlLmJvcmRlclN0eWxlID0gXCJzb2xpZFwiO1xuICAgICAgaW1nLnN0eWxlLmJvcmRlcldpZHRoID0gbWFrZUVtKHJ1bGVUaGlja25lc3MpO1xuICAgIH0gZWxzZSBpZiAobGFiZWwgPT09IFwiYW5nbFwiICYmIHJ1bGVUaGlja25lc3MgIT09IDAuMDQ5KSB7XG4gICAgICBpbWcuc3R5bGUuYm9yZGVyVG9wV2lkdGggPSBtYWtlRW0ocnVsZVRoaWNrbmVzcyk7XG4gICAgICBpbWcuc3R5bGUuYm9yZGVyUmlnaHRXaWR0aCA9IG1ha2VFbShydWxlVGhpY2tuZXNzKTtcbiAgICB9XG5cbiAgICBpbWdTaGlmdCA9IGlubmVyLmRlcHRoICsgYm90dG9tUGFkO1xuXG4gICAgaWYgKGdyb3VwLmJhY2tncm91bmRDb2xvcikge1xuICAgICAgaW1nLnN0eWxlLmJhY2tncm91bmRDb2xvciA9IGdyb3VwLmJhY2tncm91bmRDb2xvcjtcblxuICAgICAgaWYgKGdyb3VwLmJvcmRlckNvbG9yKSB7XG4gICAgICAgIGltZy5zdHlsZS5ib3JkZXJDb2xvciA9IGdyb3VwLmJvcmRlckNvbG9yO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGxldCB2bGlzdDtcblxuICBpZiAoZ3JvdXAuYmFja2dyb3VuZENvbG9yKSB7XG4gICAgdmxpc3QgPSBidWlsZENvbW1vbi5tYWtlVkxpc3Qoe1xuICAgICAgcG9zaXRpb25UeXBlOiBcImluZGl2aWR1YWxTaGlmdFwiLFxuICAgICAgY2hpbGRyZW46IFsvLyBQdXQgdGhlIGNvbG9yIGJhY2tncm91bmQgYmVoaW5kIGlubmVyO1xuICAgICAge1xuICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgZWxlbTogaW1nLFxuICAgICAgICBzaGlmdDogaW1nU2hpZnRcbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IGlubmVyLFxuICAgICAgICBzaGlmdDogMFxuICAgICAgfV1cbiAgICB9LCBvcHRpb25zKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBjbGFzc2VzID0gL2NhbmNlbHxwaGFzZS8udGVzdChsYWJlbCkgPyBbXCJzdmctYWxpZ25cIl0gOiBbXTtcbiAgICB2bGlzdCA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICBwb3NpdGlvblR5cGU6IFwiaW5kaXZpZHVhbFNoaWZ0XCIsXG4gICAgICBjaGlsZHJlbjogWy8vIFdyaXRlIHRoZSBcXGNhbmNlbCBzdHJva2Ugb24gdG9wIG9mIGlubmVyLlxuICAgICAge1xuICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgZWxlbTogaW5uZXIsXG4gICAgICAgIHNoaWZ0OiAwXG4gICAgICB9LCB7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBpbWcsXG4gICAgICAgIHNoaWZ0OiBpbWdTaGlmdCxcbiAgICAgICAgd3JhcHBlckNsYXNzZXM6IGNsYXNzZXNcbiAgICAgIH1dXG4gICAgfSwgb3B0aW9ucyk7XG4gIH1cblxuICBpZiAoL2NhbmNlbC8udGVzdChsYWJlbCkpIHtcbiAgICAvLyBUaGUgY2FuY2VsIHBhY2thZ2UgZG9jdW1lbnRhdGlvbiBzYXlzIHRoYXQgY2FuY2VsIGxpbmVzIGFkZCB0aGVpciBoZWlnaHRcbiAgICAvLyB0byB0aGUgZXhwcmVzc2lvbiwgYnV0IHRlc3RzIHNob3cgdGhhdCBpc24ndCBob3cgaXQgYWN0dWFsbHkgd29ya3MuXG4gICAgdmxpc3QuaGVpZ2h0ID0gaW5uZXIuaGVpZ2h0O1xuICAgIHZsaXN0LmRlcHRoID0gaW5uZXIuZGVwdGg7XG4gIH1cblxuICBpZiAoL2NhbmNlbC8udGVzdChsYWJlbCkgJiYgIWlzU2luZ2xlQ2hhcikge1xuICAgIC8vIGNhbmNlbCBkb2VzIG5vdCBjcmVhdGUgaG9yaXogc3BhY2UgZm9yIGl0cyBsaW5lIGV4dGVuc2lvbi5cbiAgICByZXR1cm4gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wibW9yZFwiLCBcImNhbmNlbC1sYXBcIl0sIFt2bGlzdF0sIG9wdGlvbnMpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJtb3JkXCJdLCBbdmxpc3RdLCBvcHRpb25zKTtcbiAgfVxufTtcblxuY29uc3QgZW5jbG9zZV9tYXRobWxCdWlsZGVyID0gKGdyb3VwLCBvcHRpb25zKSA9PiB7XG4gIGxldCBmYm94c2VwID0gMDtcbiAgY29uc3Qgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKGdyb3VwLmxhYmVsLmluZGV4T2YoXCJjb2xvcmJveFwiKSA+IC0xID8gXCJtcGFkZGVkXCIgOiBcIm1lbmNsb3NlXCIsIFtidWlsZE1hdGhNTF9idWlsZEdyb3VwKGdyb3VwLmJvZHksIG9wdGlvbnMpXSk7XG5cbiAgc3dpdGNoIChncm91cC5sYWJlbCkge1xuICAgIGNhc2UgXCJcXFxcY2FuY2VsXCI6XG4gICAgICBub2RlLnNldEF0dHJpYnV0ZShcIm5vdGF0aW9uXCIsIFwidXBkaWFnb25hbHN0cmlrZVwiKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBcIlxcXFxiY2FuY2VsXCI6XG4gICAgICBub2RlLnNldEF0dHJpYnV0ZShcIm5vdGF0aW9uXCIsIFwiZG93bmRpYWdvbmFsc3RyaWtlXCIpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFwiXFxcXHBoYXNlXCI6XG4gICAgICBub2RlLnNldEF0dHJpYnV0ZShcIm5vdGF0aW9uXCIsIFwicGhhc29yYW5nbGVcIik7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgXCJcXFxcc291dFwiOlxuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJub3RhdGlvblwiLCBcImhvcml6b250YWxzdHJpa2VcIik7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgXCJcXFxcZmJveFwiOlxuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJub3RhdGlvblwiLCBcImJveFwiKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBcIlxcXFxhbmdsXCI6XG4gICAgICBub2RlLnNldEF0dHJpYnV0ZShcIm5vdGF0aW9uXCIsIFwiYWN0dWFyaWFsXCIpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFwiXFxcXGZjb2xvcmJveFwiOlxuICAgIGNhc2UgXCJcXFxcY29sb3Jib3hcIjpcbiAgICAgIC8vIDxtZW5jbG9zZT4gZG9lc24ndCBoYXZlIGEgZ29vZCBub3RhdGlvbiBvcHRpb24uIFNvIHVzZSA8bXBhZGRlZD5cbiAgICAgIC8vIGluc3RlYWQuIFNldCBzb21lIGF0dHJpYnV0ZXMgdGhhdCBjb21lIGluY2x1ZGVkIHdpdGggPG1lbmNsb3NlPi5cbiAgICAgIGZib3hzZXAgPSBvcHRpb25zLmZvbnRNZXRyaWNzKCkuZmJveHNlcCAqIG9wdGlvbnMuZm9udE1ldHJpY3MoKS5wdFBlckVtO1xuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJ3aWR0aFwiLCBcIitcIiArIDIgKiBmYm94c2VwICsgXCJwdFwiKTtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwiaGVpZ2h0XCIsIFwiK1wiICsgMiAqIGZib3hzZXAgKyBcInB0XCIpO1xuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJsc3BhY2VcIiwgZmJveHNlcCArIFwicHRcIik7IC8vXG5cbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwidm9mZnNldFwiLCBmYm94c2VwICsgXCJwdFwiKTtcblxuICAgICAgaWYgKGdyb3VwLmxhYmVsID09PSBcIlxcXFxmY29sb3Jib3hcIikge1xuICAgICAgICBjb25zdCB0aGsgPSBNYXRoLm1heChvcHRpb25zLmZvbnRNZXRyaWNzKCkuZmJveHJ1bGUsIC8vIGRlZmF1bHRcbiAgICAgICAgb3B0aW9ucy5taW5SdWxlVGhpY2tuZXNzIC8vIHVzZXIgb3ZlcnJpZGVcbiAgICAgICAgKTtcbiAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJzdHlsZVwiLCBcImJvcmRlcjogXCIgKyB0aGsgKyBcImVtIHNvbGlkIFwiICsgU3RyaW5nKGdyb3VwLmJvcmRlckNvbG9yKSk7XG4gICAgICB9XG5cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBcIlxcXFx4Y2FuY2VsXCI6XG4gICAgICBub2RlLnNldEF0dHJpYnV0ZShcIm5vdGF0aW9uXCIsIFwidXBkaWFnb25hbHN0cmlrZSBkb3duZGlhZ29uYWxzdHJpa2VcIik7XG4gICAgICBicmVhaztcbiAgfVxuXG4gIGlmIChncm91cC5iYWNrZ3JvdW5kQ29sb3IpIHtcbiAgICBub2RlLnNldEF0dHJpYnV0ZShcIm1hdGhiYWNrZ3JvdW5kXCIsIGdyb3VwLmJhY2tncm91bmRDb2xvcik7XG4gIH1cblxuICByZXR1cm4gbm9kZTtcbn07XG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJlbmNsb3NlXCIsXG4gIG5hbWVzOiBbXCJcXFxcY29sb3Jib3hcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMixcbiAgICBhbGxvd2VkSW5UZXh0OiB0cnVlLFxuICAgIGFyZ1R5cGVzOiBbXCJjb2xvclwiLCBcInRleHRcIl1cbiAgfSxcblxuICBoYW5kbGVyKF9yZWYsIGFyZ3MsIG9wdEFyZ3MpIHtcbiAgICBsZXQge1xuICAgICAgcGFyc2VyLFxuICAgICAgZnVuY05hbWVcbiAgICB9ID0gX3JlZjtcbiAgICBjb25zdCBjb2xvciA9IGFzc2VydE5vZGVUeXBlKGFyZ3NbMF0sIFwiY29sb3ItdG9rZW5cIikuY29sb3I7XG4gICAgY29uc3QgYm9keSA9IGFyZ3NbMV07XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiZW5jbG9zZVwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBsYWJlbDogZnVuY05hbWUsXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IGNvbG9yLFxuICAgICAgYm9keVxuICAgIH07XG4gIH0sXG5cbiAgaHRtbEJ1aWxkZXI6IGVuY2xvc2VfaHRtbEJ1aWxkZXIsXG4gIG1hdGhtbEJ1aWxkZXI6IGVuY2xvc2VfbWF0aG1sQnVpbGRlclxufSk7XG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwiZW5jbG9zZVwiLFxuICBuYW1lczogW1wiXFxcXGZjb2xvcmJveFwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAzLFxuICAgIGFsbG93ZWRJblRleHQ6IHRydWUsXG4gICAgYXJnVHlwZXM6IFtcImNvbG9yXCIsIFwiY29sb3JcIiwgXCJ0ZXh0XCJdXG4gIH0sXG5cbiAgaGFuZGxlcihfcmVmMiwgYXJncywgb3B0QXJncykge1xuICAgIGxldCB7XG4gICAgICBwYXJzZXIsXG4gICAgICBmdW5jTmFtZVxuICAgIH0gPSBfcmVmMjtcbiAgICBjb25zdCBib3JkZXJDb2xvciA9IGFzc2VydE5vZGVUeXBlKGFyZ3NbMF0sIFwiY29sb3ItdG9rZW5cIikuY29sb3I7XG4gICAgY29uc3QgYmFja2dyb3VuZENvbG9yID0gYXNzZXJ0Tm9kZVR5cGUoYXJnc1sxXSwgXCJjb2xvci10b2tlblwiKS5jb2xvcjtcbiAgICBjb25zdCBib2R5ID0gYXJnc1syXTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJlbmNsb3NlXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGxhYmVsOiBmdW5jTmFtZSxcbiAgICAgIGJhY2tncm91bmRDb2xvcixcbiAgICAgIGJvcmRlckNvbG9yLFxuICAgICAgYm9keVxuICAgIH07XG4gIH0sXG5cbiAgaHRtbEJ1aWxkZXI6IGVuY2xvc2VfaHRtbEJ1aWxkZXIsXG4gIG1hdGhtbEJ1aWxkZXI6IGVuY2xvc2VfbWF0aG1sQnVpbGRlclxufSk7XG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwiZW5jbG9zZVwiLFxuICBuYW1lczogW1wiXFxcXGZib3hcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMSxcbiAgICBhcmdUeXBlczogW1wiaGJveFwiXSxcbiAgICBhbGxvd2VkSW5UZXh0OiB0cnVlXG4gIH0sXG5cbiAgaGFuZGxlcihfcmVmMywgYXJncykge1xuICAgIGxldCB7XG4gICAgICBwYXJzZXJcbiAgICB9ID0gX3JlZjM7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiZW5jbG9zZVwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBsYWJlbDogXCJcXFxcZmJveFwiLFxuICAgICAgYm9keTogYXJnc1swXVxuICAgIH07XG4gIH1cblxufSk7XG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwiZW5jbG9zZVwiLFxuICBuYW1lczogW1wiXFxcXGNhbmNlbFwiLCBcIlxcXFxiY2FuY2VsXCIsIFwiXFxcXHhjYW5jZWxcIiwgXCJcXFxcc291dFwiLCBcIlxcXFxwaGFzZVwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxXG4gIH0sXG5cbiAgaGFuZGxlcihfcmVmNCwgYXJncykge1xuICAgIGxldCB7XG4gICAgICBwYXJzZXIsXG4gICAgICBmdW5jTmFtZVxuICAgIH0gPSBfcmVmNDtcbiAgICBjb25zdCBib2R5ID0gYXJnc1swXTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJlbmNsb3NlXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGxhYmVsOiBmdW5jTmFtZSxcbiAgICAgIGJvZHlcbiAgICB9O1xuICB9LFxuXG4gIGh0bWxCdWlsZGVyOiBlbmNsb3NlX2h0bWxCdWlsZGVyLFxuICBtYXRobWxCdWlsZGVyOiBlbmNsb3NlX21hdGhtbEJ1aWxkZXJcbn0pO1xuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcImVuY2xvc2VcIixcbiAgbmFtZXM6IFtcIlxcXFxhbmdsXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDEsXG4gICAgYXJnVHlwZXM6IFtcImhib3hcIl0sXG4gICAgYWxsb3dlZEluVGV4dDogZmFsc2VcbiAgfSxcblxuICBoYW5kbGVyKF9yZWY1LCBhcmdzKSB7XG4gICAgbGV0IHtcbiAgICAgIHBhcnNlclxuICAgIH0gPSBfcmVmNTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJlbmNsb3NlXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGxhYmVsOiBcIlxcXFxhbmdsXCIsXG4gICAgICBib2R5OiBhcmdzWzBdXG4gICAgfTtcbiAgfVxuXG59KTtcbjsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9kZWZpbmVFbnZpcm9ubWVudC5qc1xuXG5cbi8qKlxuICogQWxsIHJlZ2lzdGVyZWQgZW52aXJvbm1lbnRzLlxuICogYGVudmlyb25tZW50cy5qc2AgZXhwb3J0cyB0aGlzIHNhbWUgZGljdGlvbmFyeSBhZ2FpbiBhbmQgbWFrZXMgaXQgcHVibGljLlxuICogYFBhcnNlci5qc2AgcmVxdWlyZXMgdGhpcyBkaWN0aW9uYXJ5IHZpYSBgZW52aXJvbm1lbnRzLmpzYC5cbiAqL1xuY29uc3QgX2Vudmlyb25tZW50cyA9IHt9O1xuZnVuY3Rpb24gZGVmaW5lRW52aXJvbm1lbnQoX3JlZikge1xuICBsZXQge1xuICAgIHR5cGUsXG4gICAgbmFtZXMsXG4gICAgcHJvcHMsXG4gICAgaGFuZGxlcixcbiAgICBodG1sQnVpbGRlcixcbiAgICBtYXRobWxCdWlsZGVyXG4gIH0gPSBfcmVmO1xuICAvLyBTZXQgZGVmYXVsdCB2YWx1ZXMgb2YgZW52aXJvbm1lbnRzLlxuICBjb25zdCBkYXRhID0ge1xuICAgIHR5cGUsXG4gICAgbnVtQXJnczogcHJvcHMubnVtQXJncyB8fCAwLFxuICAgIGFsbG93ZWRJblRleHQ6IGZhbHNlLFxuICAgIG51bU9wdGlvbmFsQXJnczogMCxcbiAgICBoYW5kbGVyXG4gIH07XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBuYW1lcy5sZW5ndGg7ICsraSkge1xuICAgIC8vIFRPRE86IFRoZSB2YWx1ZSB0eXBlIG9mIF9lbnZpcm9ubWVudHMgc2hvdWxkIGJlIGEgdHlwZSB1bmlvbiBvZiBhbGxcbiAgICAvLyBwb3NzaWJsZSBgRW52U3BlYzw+YCBwb3NzaWJpbGl0aWVzIGluc3RlYWQgb2YgYEVudlNwZWM8Kj5gLCB3aGljaCBpc1xuICAgIC8vIGFuIGV4aXN0ZW50aWFsIHR5cGUuXG4gICAgX2Vudmlyb25tZW50c1tuYW1lc1tpXV0gPSBkYXRhO1xuICB9XG5cbiAgaWYgKGh0bWxCdWlsZGVyKSB7XG4gICAgX2h0bWxHcm91cEJ1aWxkZXJzW3R5cGVdID0gaHRtbEJ1aWxkZXI7XG4gIH1cblxuICBpZiAobWF0aG1sQnVpbGRlcikge1xuICAgIF9tYXRobWxHcm91cEJ1aWxkZXJzW3R5cGVdID0gbWF0aG1sQnVpbGRlcjtcbiAgfVxufVxuOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2RlZmluZU1hY3JvLmpzXG5cblxuLyoqXG4gKiBBbGwgcmVnaXN0ZXJlZCBnbG9iYWwvYnVpbHQtaW4gbWFjcm9zLlxuICogYG1hY3Jvcy5qc2AgZXhwb3J0cyB0aGlzIHNhbWUgZGljdGlvbmFyeSBhZ2FpbiBhbmQgbWFrZXMgaXQgcHVibGljLlxuICogYFBhcnNlci5qc2AgcmVxdWlyZXMgdGhpcyBkaWN0aW9uYXJ5IHZpYSBgbWFjcm9zLmpzYC5cbiAqL1xuY29uc3QgX21hY3JvcyA9IHt9OyAvLyBUaGlzIGZ1bmN0aW9uIG1pZ2h0IG9uZSBkYXkgYWNjZXB0IGFuIGFkZGl0aW9uYWwgYXJndW1lbnQgYW5kIGRvIG1vcmUgdGhpbmdzLlxuXG5mdW5jdGlvbiBkZWZpbmVNYWNybyhuYW1lLCBib2R5KSB7XG4gIF9tYWNyb3NbbmFtZV0gPSBib2R5O1xufVxuOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL1NvdXJjZUxvY2F0aW9uLmpzXG4vKipcbiAqIExleGluZyBvciBwYXJzaW5nIHBvc2l0aW9uYWwgaW5mb3JtYXRpb24gZm9yIGVycm9yIHJlcG9ydGluZy5cbiAqIFRoaXMgb2JqZWN0IGlzIGltbXV0YWJsZS5cbiAqL1xuY2xhc3MgU291cmNlTG9jYXRpb24ge1xuICAvLyBUaGUgKyBwcmVmaXggaW5kaWNhdGVzIHRoYXQgdGhlc2UgZmllbGRzIGFyZW4ndCB3cml0ZWFibGVcbiAgLy8gTGV4ZXIgaG9sZGluZyB0aGUgaW5wdXQgc3RyaW5nLlxuICAvLyBTdGFydCBvZmZzZXQsIHplcm8tYmFzZWQgaW5jbHVzaXZlLlxuICAvLyBFbmQgb2Zmc2V0LCB6ZXJvLWJhc2VkIGV4Y2x1c2l2ZS5cbiAgY29uc3RydWN0b3IobGV4ZXIsIHN0YXJ0LCBlbmQpIHtcbiAgICB0aGlzLmxleGVyID0gdm9pZCAwO1xuICAgIHRoaXMuc3RhcnQgPSB2b2lkIDA7XG4gICAgdGhpcy5lbmQgPSB2b2lkIDA7XG4gICAgdGhpcy5sZXhlciA9IGxleGVyO1xuICAgIHRoaXMuc3RhcnQgPSBzdGFydDtcbiAgICB0aGlzLmVuZCA9IGVuZDtcbiAgfVxuICAvKipcbiAgICogTWVyZ2VzIHR3byBgU291cmNlTG9jYXRpb25gcyBmcm9tIGxvY2F0aW9uIHByb3ZpZGVycywgZ2l2ZW4gdGhleSBhcmVcbiAgICogcHJvdmlkZWQgaW4gb3JkZXIgb2YgYXBwZWFyYW5jZS5cbiAgICogLSBSZXR1cm5zIHRoZSBmaXJzdCBvbmUncyBsb2NhdGlvbiBpZiBvbmx5IHRoZSBmaXJzdCBpcyBwcm92aWRlZC5cbiAgICogLSBSZXR1cm5zIGEgbWVyZ2VkIHJhbmdlIG9mIHRoZSBmaXJzdCBhbmQgdGhlIGxhc3QgaWYgYm90aCBhcmUgcHJvdmlkZWRcbiAgICogICBhbmQgdGhlaXIgbGV4ZXJzIG1hdGNoLlxuICAgKiAtIE90aGVyd2lzZSwgcmV0dXJucyBudWxsLlxuICAgKi9cblxuXG4gIHN0YXRpYyByYW5nZShmaXJzdCwgc2Vjb25kKSB7XG4gICAgaWYgKCFzZWNvbmQpIHtcbiAgICAgIHJldHVybiBmaXJzdCAmJiBmaXJzdC5sb2M7XG4gICAgfSBlbHNlIGlmICghZmlyc3QgfHwgIWZpcnN0LmxvYyB8fCAhc2Vjb25kLmxvYyB8fCBmaXJzdC5sb2MubGV4ZXIgIT09IHNlY29uZC5sb2MubGV4ZXIpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbmV3IFNvdXJjZUxvY2F0aW9uKGZpcnN0LmxvYy5sZXhlciwgZmlyc3QubG9jLnN0YXJ0LCBzZWNvbmQubG9jLmVuZCk7XG4gICAgfVxuICB9XG5cbn1cbjsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9Ub2tlbi5qc1xuXG4vKipcbiAqIEludGVyZmFjZSByZXF1aXJlZCB0byBicmVhayBjaXJjdWxhciBkZXBlbmRlbmN5IGJldHdlZW4gVG9rZW4sIExleGVyLCBhbmRcbiAqIFBhcnNlRXJyb3IuXG4gKi9cblxuLyoqXG4gKiBUaGUgcmVzdWx0aW5nIHRva2VuIHJldHVybmVkIGZyb20gYGxleGAuXG4gKlxuICogSXQgY29uc2lzdHMgb2YgdGhlIHRva2VuIHRleHQgcGx1cyBzb21lIHBvc2l0aW9uIGluZm9ybWF0aW9uLlxuICogVGhlIHBvc2l0aW9uIGluZm9ybWF0aW9uIGlzIGVzc2VudGlhbGx5IGEgcmFuZ2UgaW4gYW4gaW5wdXQgc3RyaW5nLFxuICogYnV0IGluc3RlYWQgb2YgcmVmZXJlbmNpbmcgdGhlIGJhcmUgaW5wdXQgc3RyaW5nLCB3ZSByZWZlciB0byB0aGUgbGV4ZXIuXG4gKiBUaGF0IHdheSBpdCBpcyBwb3NzaWJsZSB0byBhdHRhY2ggZXh0cmEgbWV0YWRhdGEgdG8gdGhlIGlucHV0IHN0cmluZyxcbiAqIGxpa2UgZm9yIGV4YW1wbGUgYSBmaWxlIG5hbWUgb3Igc2ltaWxhci5cbiAqXG4gKiBUaGUgcG9zaXRpb24gaW5mb3JtYXRpb24gaXMgb3B0aW9uYWwsIHNvIGl0IGlzIE9LIHRvIGNvbnN0cnVjdCBzeW50aGV0aWNcbiAqIHRva2VucyBpZiBhcHByb3ByaWF0ZS4gTm90IHByb3ZpZGluZyBhdmFpbGFibGUgcG9zaXRpb24gaW5mb3JtYXRpb24gbWF5XG4gKiBsZWFkIHRvIGRlZ3JhZGVkIGVycm9yIHJlcG9ydGluZywgdGhvdWdoLlxuICovXG5jbGFzcyBUb2tlbiB7XG4gIC8vIGRvbid0IGV4cGFuZCB0aGUgdG9rZW5cbiAgLy8gdXNlZCBpbiBcXG5vZXhwYW5kXG4gIGNvbnN0cnVjdG9yKHRleHQsIC8vIHRoZSB0ZXh0IG9mIHRoaXMgdG9rZW5cbiAgbG9jKSB7XG4gICAgdGhpcy50ZXh0ID0gdm9pZCAwO1xuICAgIHRoaXMubG9jID0gdm9pZCAwO1xuICAgIHRoaXMubm9leHBhbmQgPSB2b2lkIDA7XG4gICAgdGhpcy50cmVhdEFzUmVsYXggPSB2b2lkIDA7XG4gICAgdGhpcy50ZXh0ID0gdGV4dDtcbiAgICB0aGlzLmxvYyA9IGxvYztcbiAgfVxuICAvKipcbiAgICogR2l2ZW4gYSBwYWlyIG9mIHRva2VucyAodGhpcyBhbmQgZW5kVG9rZW4pLCBjb21wdXRlIGEgYFRva2VuYCBlbmNvbXBhc3NpbmdcbiAgICogdGhlIHdob2xlIGlucHV0IHJhbmdlIGVuY2xvc2VkIGJ5IHRoZXNlIHR3by5cbiAgICovXG5cblxuICByYW5nZShlbmRUb2tlbiwgLy8gbGFzdCB0b2tlbiBvZiB0aGUgcmFuZ2UsIGluY2x1c2l2ZVxuICB0ZXh0IC8vIHRoZSB0ZXh0IG9mIHRoZSBuZXdseSBjb25zdHJ1Y3RlZCB0b2tlblxuICApIHtcbiAgICByZXR1cm4gbmV3IFRva2VuKHRleHQsIFNvdXJjZUxvY2F0aW9uLnJhbmdlKHRoaXMsIGVuZFRva2VuKSk7XG4gIH1cblxufVxuOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Vudmlyb25tZW50cy9hcnJheS5qc1xuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vLyBIZWxwZXIgZnVuY3Rpb25zXG5mdW5jdGlvbiBnZXRITGluZXMocGFyc2VyKSB7XG4gIC8vIFJldHVybiBhbiBhcnJheS4gVGhlIGFycmF5IGxlbmd0aCA9IG51bWJlciBvZiBobGluZXMuXG4gIC8vIEVhY2ggZWxlbWVudCBpbiB0aGUgYXJyYXkgdGVsbHMgaWYgdGhlIGxpbmUgaXMgZGFzaGVkLlxuICBjb25zdCBobGluZUluZm8gPSBbXTtcbiAgcGFyc2VyLmNvbnN1bWVTcGFjZXMoKTtcbiAgbGV0IG54dCA9IHBhcnNlci5mZXRjaCgpLnRleHQ7XG5cbiAgaWYgKG54dCA9PT0gXCJcXFxccmVsYXhcIikge1xuICAgIC8vIFxccmVsYXggaXMgYW4gYXJ0aWZhY3Qgb2YgdGhlIFxcY3IgbWFjcm8gYmVsb3dcbiAgICBwYXJzZXIuY29uc3VtZSgpO1xuICAgIHBhcnNlci5jb25zdW1lU3BhY2VzKCk7XG4gICAgbnh0ID0gcGFyc2VyLmZldGNoKCkudGV4dDtcbiAgfVxuXG4gIHdoaWxlIChueHQgPT09IFwiXFxcXGhsaW5lXCIgfHwgbnh0ID09PSBcIlxcXFxoZGFzaGxpbmVcIikge1xuICAgIHBhcnNlci5jb25zdW1lKCk7XG4gICAgaGxpbmVJbmZvLnB1c2gobnh0ID09PSBcIlxcXFxoZGFzaGxpbmVcIik7XG4gICAgcGFyc2VyLmNvbnN1bWVTcGFjZXMoKTtcbiAgICBueHQgPSBwYXJzZXIuZmV0Y2goKS50ZXh0O1xuICB9XG5cbiAgcmV0dXJuIGhsaW5lSW5mbztcbn1cblxuY29uc3QgdmFsaWRhdGVBbXNFbnZpcm9ubWVudENvbnRleHQgPSBjb250ZXh0ID0+IHtcbiAgY29uc3Qgc2V0dGluZ3MgPSBjb250ZXh0LnBhcnNlci5zZXR0aW5ncztcblxuICBpZiAoIXNldHRpbmdzLmRpc3BsYXlNb2RlKSB7XG4gICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwie1wiICsgY29udGV4dC5lbnZOYW1lICsgXCJ9IGNhbiBiZSB1c2VkIG9ubHkgaW5cIiArIFwiIGRpc3BsYXkgbW9kZS5cIik7XG4gIH1cbn07IC8vIGF1dG9UYWcgKGFuIGFyZ3VtZW50IHRvIHBhcnNlQXJyYXkpIGNhbiBiZSBvbmUgb2YgdGhyZWUgdmFsdWVzOlxuLy8gKiB1bmRlZmluZWQ6IFJlZ3VsYXIgKG5vdC10b3AtbGV2ZWwpIGFycmF5OyBubyB0YWdzIG9uIGVhY2ggcm93XG4vLyAqIHRydWU6IEF1dG9tYXRpYyBlcXVhdGlvbiBudW1iZXJpbmcsIG92ZXJyaWRhYmxlIGJ5IFxcdGFnXG4vLyAqIGZhbHNlOiBUYWdzIGFsbG93ZWQgb24gZWFjaCByb3csIGJ1dCBubyBhdXRvbWF0aWMgbnVtYmVyaW5nXG4vLyBUaGlzIGZ1bmN0aW9uICpkb2Vzbid0KiB3b3JrIHdpdGggdGhlIFwic3BsaXRcIiBlbnZpcm9ubWVudCBuYW1lLlxuXG5cbmZ1bmN0aW9uIGdldEF1dG9UYWcobmFtZSkge1xuICBpZiAobmFtZS5pbmRleE9mKFwiZWRcIikgPT09IC0xKSB7XG4gICAgcmV0dXJuIG5hbWUuaW5kZXhPZihcIipcIikgPT09IC0xO1xuICB9IC8vIHJldHVybiB1bmRlZmluZWQ7XG5cbn1cbi8qKlxuICogUGFyc2UgdGhlIGJvZHkgb2YgdGhlIGVudmlyb25tZW50LCB3aXRoIHJvd3MgZGVsaW1pdGVkIGJ5IFxcXFwgYW5kXG4gKiBjb2x1bW5zIGRlbGltaXRlZCBieSAmLCBhbmQgY3JlYXRlIGEgbmVzdGVkIGxpc3QgaW4gcm93LW1ham9yIG9yZGVyXG4gKiB3aXRoIG9uZSBncm91cCBwZXIgY2VsbC4gIElmIGdpdmVuIGFuIG9wdGlvbmFsIGFyZ3VtZW50IHN0eWxlXG4gKiAoXCJ0ZXh0XCIsIFwiZGlzcGxheVwiLCBldGMuKSwgdGhlbiBlYWNoIGNlbGwgaXMgY2FzdCBpbnRvIHRoYXQgc3R5bGUuXG4gKi9cblxuXG5mdW5jdGlvbiBwYXJzZUFycmF5KHBhcnNlciwgX3JlZiwgc3R5bGUpIHtcbiAgbGV0IHtcbiAgICBoc2tpcEJlZm9yZUFuZEFmdGVyLFxuICAgIGFkZEpvdCxcbiAgICBjb2xzLFxuICAgIGFycmF5c3RyZXRjaCxcbiAgICBjb2xTZXBhcmF0aW9uVHlwZSxcbiAgICBhdXRvVGFnLFxuICAgIHNpbmdsZVJvdyxcbiAgICBlbXB0eVNpbmdsZVJvdyxcbiAgICBtYXhOdW1Db2xzLFxuICAgIGxlcW5vXG4gIH0gPSBfcmVmO1xuICBwYXJzZXIuZ3VsbGV0LmJlZ2luR3JvdXAoKTtcblxuICBpZiAoIXNpbmdsZVJvdykge1xuICAgIC8vIFxcY3IgaXMgZXF1aXZhbGVudCB0byBcXFxcIHdpdGhvdXQgdGhlIG9wdGlvbmFsIHNpemUgYXJndW1lbnQgKHNlZSBiZWxvdylcbiAgICAvLyBUT0RPOiBwcm92aWRlIGhlbHBmdWwgZXJyb3Igd2hlbiBcXGNyIGlzIHVzZWQgb3V0c2lkZSBhcnJheSBlbnZpcm9ubWVudFxuICAgIHBhcnNlci5ndWxsZXQubWFjcm9zLnNldChcIlxcXFxjclwiLCBcIlxcXFxcXFxcXFxcXHJlbGF4XCIpO1xuICB9IC8vIEdldCBjdXJyZW50IGFycmF5c3RyZXRjaCBpZiBpdCdzIG5vdCBzZXQgYnkgdGhlIGVudmlyb25tZW50XG5cblxuICBpZiAoIWFycmF5c3RyZXRjaCkge1xuICAgIGNvbnN0IHN0cmV0Y2ggPSBwYXJzZXIuZ3VsbGV0LmV4cGFuZE1hY3JvQXNUZXh0KFwiXFxcXGFycmF5c3RyZXRjaFwiKTtcblxuICAgIGlmIChzdHJldGNoID09IG51bGwpIHtcbiAgICAgIC8vIERlZmF1bHQgXFxhcnJheXN0cmV0Y2ggZnJvbSBsdHRhYi5kdHhcbiAgICAgIGFycmF5c3RyZXRjaCA9IDE7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFycmF5c3RyZXRjaCA9IHBhcnNlRmxvYXQoc3RyZXRjaCk7XG5cbiAgICAgIGlmICghYXJyYXlzdHJldGNoIHx8IGFycmF5c3RyZXRjaCA8IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiSW52YWxpZCBcXFxcYXJyYXlzdHJldGNoOiBcIiArIHN0cmV0Y2gpO1xuICAgICAgfVxuICAgIH1cbiAgfSAvLyBTdGFydCBncm91cCBmb3IgZmlyc3QgY2VsbFxuXG5cbiAgcGFyc2VyLmd1bGxldC5iZWdpbkdyb3VwKCk7XG4gIGxldCByb3cgPSBbXTtcbiAgY29uc3QgYm9keSA9IFtyb3ddO1xuICBjb25zdCByb3dHYXBzID0gW107XG4gIGNvbnN0IGhMaW5lc0JlZm9yZVJvdyA9IFtdO1xuICBjb25zdCB0YWdzID0gYXV0b1RhZyAhPSBudWxsID8gW10gOiB1bmRlZmluZWQ7IC8vIGFtc21hdGggdXNlcyBcXGdsb2JhbFxcQGVxbnN3dHJ1ZSBhbmQgXFxnbG9iYWxcXEBlcW5zd2ZhbHNlIHRvIHJlcHJlc2VudFxuICAvLyB3aGV0aGVyIHRoaXMgcm93IHNob3VsZCBoYXZlIGFuIGVxdWF0aW9uIG51bWJlci4gIFNpbXVsYXRlIHRoaXMgd2l0aFxuICAvLyBhIFxcQGVxbnN3IG1hY3JvIHNldCB0byAxIG9yIDAuXG5cbiAgZnVuY3Rpb24gYmVnaW5Sb3coKSB7XG4gICAgaWYgKGF1dG9UYWcpIHtcbiAgICAgIHBhcnNlci5ndWxsZXQubWFjcm9zLnNldChcIlxcXFxAZXFuc3dcIiwgXCIxXCIsIHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGVuZFJvdygpIHtcbiAgICBpZiAodGFncykge1xuICAgICAgaWYgKHBhcnNlci5ndWxsZXQubWFjcm9zLmdldChcIlxcXFxkZkB0YWdcIikpIHtcbiAgICAgICAgdGFncy5wdXNoKHBhcnNlci5zdWJwYXJzZShbbmV3IFRva2VuKFwiXFxcXGRmQHRhZ1wiKV0pKTtcbiAgICAgICAgcGFyc2VyLmd1bGxldC5tYWNyb3Muc2V0KFwiXFxcXGRmQHRhZ1wiLCB1bmRlZmluZWQsIHRydWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGFncy5wdXNoKEJvb2xlYW4oYXV0b1RhZykgJiYgcGFyc2VyLmd1bGxldC5tYWNyb3MuZ2V0KFwiXFxcXEBlcW5zd1wiKSA9PT0gXCIxXCIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGJlZ2luUm93KCk7IC8vIFRlc3QgZm9yIFxcaGxpbmUgYXQgdGhlIHRvcCBvZiB0aGUgYXJyYXkuXG5cbiAgaExpbmVzQmVmb3JlUm93LnB1c2goZ2V0SExpbmVzKHBhcnNlcikpO1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25zdGFudC1jb25kaXRpb25cbiAgICAvLyBQYXJzZSBlYWNoIGNlbGwgaW4gaXRzIG93biBncm91cCAobmFtZXNwYWNlKVxuICAgIGxldCBjZWxsID0gcGFyc2VyLnBhcnNlRXhwcmVzc2lvbihmYWxzZSwgc2luZ2xlUm93ID8gXCJcXFxcZW5kXCIgOiBcIlxcXFxcXFxcXCIpO1xuICAgIHBhcnNlci5ndWxsZXQuZW5kR3JvdXAoKTtcbiAgICBwYXJzZXIuZ3VsbGV0LmJlZ2luR3JvdXAoKTtcbiAgICBjZWxsID0ge1xuICAgICAgdHlwZTogXCJvcmRncm91cFwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBib2R5OiBjZWxsXG4gICAgfTtcblxuICAgIGlmIChzdHlsZSkge1xuICAgICAgY2VsbCA9IHtcbiAgICAgICAgdHlwZTogXCJzdHlsaW5nXCIsXG4gICAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgICBzdHlsZSxcbiAgICAgICAgYm9keTogW2NlbGxdXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJvdy5wdXNoKGNlbGwpO1xuICAgIGNvbnN0IG5leHQgPSBwYXJzZXIuZmV0Y2goKS50ZXh0O1xuXG4gICAgaWYgKG5leHQgPT09IFwiJlwiKSB7XG4gICAgICBpZiAobWF4TnVtQ29scyAmJiByb3cubGVuZ3RoID09PSBtYXhOdW1Db2xzKSB7XG4gICAgICAgIGlmIChzaW5nbGVSb3cgfHwgY29sU2VwYXJhdGlvblR5cGUpIHtcbiAgICAgICAgICAvLyB7ZXF1YXRpb259IG9yIHtzcGxpdH1cbiAgICAgICAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJUb28gbWFueSB0YWIgY2hhcmFjdGVyczogJlwiLCBwYXJzZXIubmV4dFRva2VuKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyB7YXJyYXl9IGVudmlyb25tZW50XG4gICAgICAgICAgcGFyc2VyLnNldHRpbmdzLnJlcG9ydE5vbnN0cmljdChcInRleHRFbnZcIiwgXCJUb28gZmV3IGNvbHVtbnMgXCIgKyBcInNwZWNpZmllZCBpbiB0aGUge2FycmF5fSBjb2x1bW4gYXJndW1lbnQuXCIpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHBhcnNlci5jb25zdW1lKCk7XG4gICAgfSBlbHNlIGlmIChuZXh0ID09PSBcIlxcXFxlbmRcIikge1xuICAgICAgZW5kUm93KCk7IC8vIEFycmF5cyB0ZXJtaW5hdGUgbmV3bGluZXMgd2l0aCBgXFxjcmNyYCB3aGljaCBjb25zdW1lcyBhIGBcXGNyYCBpZlxuICAgICAgLy8gdGhlIGxhc3QgbGluZSBpcyBlbXB0eS4gIEhvd2V2ZXIsIEFNUyBlbnZpcm9ubWVudHMga2VlcCB0aGVcbiAgICAgIC8vIGVtcHR5IHJvdyBpZiBpdCdzIHRoZSBvbmx5IG9uZS5cbiAgICAgIC8vIE5PVEU6IEN1cnJlbnRseSwgYGNlbGxgIGlzIHRoZSBsYXN0IGl0ZW0gYWRkZWQgaW50byBgcm93YC5cblxuICAgICAgaWYgKHJvdy5sZW5ndGggPT09IDEgJiYgY2VsbC50eXBlID09PSBcInN0eWxpbmdcIiAmJiBjZWxsLmJvZHlbMF0uYm9keS5sZW5ndGggPT09IDAgJiYgKGJvZHkubGVuZ3RoID4gMSB8fCAhZW1wdHlTaW5nbGVSb3cpKSB7XG4gICAgICAgIGJvZHkucG9wKCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChoTGluZXNCZWZvcmVSb3cubGVuZ3RoIDwgYm9keS5sZW5ndGggKyAxKSB7XG4gICAgICAgIGhMaW5lc0JlZm9yZVJvdy5wdXNoKFtdKTtcbiAgICAgIH1cblxuICAgICAgYnJlYWs7XG4gICAgfSBlbHNlIGlmIChuZXh0ID09PSBcIlxcXFxcXFxcXCIpIHtcbiAgICAgIHBhcnNlci5jb25zdW1lKCk7XG4gICAgICBsZXQgc2l6ZTsgLy8gXFxkZWZcXExldEB7XFxsZXRcXFxcXFxtYXRoQGNyfVxuICAgICAgLy8gXFxkZWZcXG1hdGhAY3J7Li4uXFxtYXRoQGNyQH1cbiAgICAgIC8vIFxcZGVmXFxtYXRoQGNyQHtcXG5ld0BpZm5leHRjaGFyW1xcbWF0aEBjckBAe1xcbWF0aEBjckBAW1xcekBdfX1cbiAgICAgIC8vIFxcZGVmXFxtYXRoQGNyQEBbIzFdey4uLlxcbWF0aEBjckBAQC4uLn1cbiAgICAgIC8vIFxcZGVmXFxtYXRoQGNyQEBAe1xcY3J9XG5cbiAgICAgIGlmIChwYXJzZXIuZ3VsbGV0LmZ1dHVyZSgpLnRleHQgIT09IFwiIFwiKSB7XG4gICAgICAgIHNpemUgPSBwYXJzZXIucGFyc2VTaXplR3JvdXAodHJ1ZSk7XG4gICAgICB9XG5cbiAgICAgIHJvd0dhcHMucHVzaChzaXplID8gc2l6ZS52YWx1ZSA6IG51bGwpO1xuICAgICAgZW5kUm93KCk7IC8vIGNoZWNrIGZvciBcXGhsaW5lKHMpIGZvbGxvd2luZyB0aGUgcm93IHNlcGFyYXRvclxuXG4gICAgICBoTGluZXNCZWZvcmVSb3cucHVzaChnZXRITGluZXMocGFyc2VyKSk7XG4gICAgICByb3cgPSBbXTtcbiAgICAgIGJvZHkucHVzaChyb3cpO1xuICAgICAgYmVnaW5Sb3coKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiRXhwZWN0ZWQgJiBvciBcXFxcXFxcXCBvciBcXFxcY3Igb3IgXFxcXGVuZFwiLCBwYXJzZXIubmV4dFRva2VuKTtcbiAgICB9XG4gIH0gLy8gRW5kIGNlbGwgZ3JvdXBcblxuXG4gIHBhcnNlci5ndWxsZXQuZW5kR3JvdXAoKTsgLy8gRW5kIGFycmF5IGdyb3VwIGRlZmluaW5nIFxcY3JcblxuICBwYXJzZXIuZ3VsbGV0LmVuZEdyb3VwKCk7XG4gIHJldHVybiB7XG4gICAgdHlwZTogXCJhcnJheVwiLFxuICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgIGFkZEpvdCxcbiAgICBhcnJheXN0cmV0Y2gsXG4gICAgYm9keSxcbiAgICBjb2xzLFxuICAgIHJvd0dhcHMsXG4gICAgaHNraXBCZWZvcmVBbmRBZnRlcixcbiAgICBoTGluZXNCZWZvcmVSb3csXG4gICAgY29sU2VwYXJhdGlvblR5cGUsXG4gICAgdGFncyxcbiAgICBsZXFub1xuICB9O1xufSAvLyBEZWNpZGVzIG9uIGEgc3R5bGUgZm9yIGNlbGxzIGluIGFuIGFycmF5IGFjY29yZGluZyB0byB3aGV0aGVyIHRoZSBnaXZlblxuLy8gZW52aXJvbm1lbnQgbmFtZSBzdGFydHMgd2l0aCB0aGUgbGV0dGVyICdkJy5cblxuXG5mdW5jdGlvbiBkQ2VsbFN0eWxlKGVudk5hbWUpIHtcbiAgaWYgKGVudk5hbWUuc2xpY2UoMCwgMSkgPT09IFwiZFwiKSB7XG4gICAgcmV0dXJuIFwiZGlzcGxheVwiO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBcInRleHRcIjtcbiAgfVxufVxuXG5jb25zdCBhcnJheV9odG1sQnVpbGRlciA9IGZ1bmN0aW9uIChncm91cCwgb3B0aW9ucykge1xuICBsZXQgcjtcbiAgbGV0IGM7XG4gIGNvbnN0IG5yID0gZ3JvdXAuYm9keS5sZW5ndGg7XG4gIGNvbnN0IGhMaW5lc0JlZm9yZVJvdyA9IGdyb3VwLmhMaW5lc0JlZm9yZVJvdztcbiAgbGV0IG5jID0gMDtcbiAgbGV0IGJvZHkgPSBuZXcgQXJyYXkobnIpO1xuICBjb25zdCBobGluZXMgPSBbXTtcbiAgY29uc3QgcnVsZVRoaWNrbmVzcyA9IE1hdGgubWF4KCAvLyBGcm9tIExhVGVYIFxcc2hvd3RoZVxcYXJyYXlydWxld2lkdGguIEVxdWFscyAwLjA0IGVtLlxuICBvcHRpb25zLmZvbnRNZXRyaWNzKCkuYXJyYXlSdWxlV2lkdGgsIG9wdGlvbnMubWluUnVsZVRoaWNrbmVzcyAvLyBVc2VyIG92ZXJyaWRlLlxuICApOyAvLyBIb3Jpem9udGFsIHNwYWNpbmdcblxuICBjb25zdCBwdCA9IDEgLyBvcHRpb25zLmZvbnRNZXRyaWNzKCkucHRQZXJFbTtcbiAgbGV0IGFycmF5Y29sc2VwID0gNSAqIHB0OyAvLyBkZWZhdWx0IHZhbHVlLCBpLmUuIFxcYXJyYXljb2xzZXAgaW4gYXJ0aWNsZS5jbHNcblxuICBpZiAoZ3JvdXAuY29sU2VwYXJhdGlvblR5cGUgJiYgZ3JvdXAuY29sU2VwYXJhdGlvblR5cGUgPT09IFwic21hbGxcIikge1xuICAgIC8vIFdlJ3JlIGluIGEge3NtYWxsbWF0cml4fS4gRGVmYXVsdCBjb2x1bW4gc3BhY2UgaXMgXFx0aGlja3NwYWNlLFxuICAgIC8vIGkuZS4gNS8xOGVtID0gMC4yNzc4ZW0sIHBlciBhbXNtYXRoLmR0eCBmb3Ige3NtYWxsbWF0cml4fS5cbiAgICAvLyBCdXQgdGhhdCBuZWVkcyBhZGp1c3RtZW50IGJlY2F1c2UgTGFUZVggYXBwbGllcyBcXHNjcmlwdHN0eWxlIHRvIHRoZVxuICAgIC8vIGVudGlyZSBhcnJheSwgaW5jbHVkaW5nIHRoZSBjb2xzcGFjZSwgYnV0IHRoaXMgZnVuY3Rpb24gYXBwbGllc1xuICAgIC8vIFxcc2NyaXB0c3R5bGUgb25seSBpbnNpZGUgZWFjaCBlbGVtZW50LlxuICAgIGNvbnN0IGxvY2FsTXVsdGlwbGllciA9IG9wdGlvbnMuaGF2aW5nU3R5bGUoc3JjX1N0eWxlLlNDUklQVCkuc2l6ZU11bHRpcGxpZXI7XG4gICAgYXJyYXljb2xzZXAgPSAwLjI3NzggKiAobG9jYWxNdWx0aXBsaWVyIC8gb3B0aW9ucy5zaXplTXVsdGlwbGllcik7XG4gIH0gLy8gVmVydGljYWwgc3BhY2luZ1xuXG5cbiAgY29uc3QgYmFzZWxpbmVza2lwID0gZ3JvdXAuY29sU2VwYXJhdGlvblR5cGUgPT09IFwiQ0RcIiA/IGNhbGN1bGF0ZVNpemUoe1xuICAgIG51bWJlcjogMyxcbiAgICB1bml0OiBcImV4XCJcbiAgfSwgb3B0aW9ucykgOiAxMiAqIHB0OyAvLyBzZWUgc2l6ZTEwLmNsb1xuICAvLyBEZWZhdWx0IFxcam90IGZyb20gbHRtYXRoLmR0eFxuICAvLyBUT0RPKGVkZW1haW5lKTogYWxsb3cgb3ZlcnJpZGluZyBcXGpvdCB2aWEgXFxzZXRsZW5ndGggKCM2ODcpXG5cbiAgY29uc3Qgam90ID0gMyAqIHB0O1xuICBjb25zdCBhcnJheXNraXAgPSBncm91cC5hcnJheXN0cmV0Y2ggKiBiYXNlbGluZXNraXA7XG4gIGNvbnN0IGFyc3RydXRIZWlnaHQgPSAwLjcgKiBhcnJheXNraXA7IC8vIFxcc3RydXRib3ggaW4gbHRmc3N0cmMuZHR4IGFuZFxuXG4gIGNvbnN0IGFyc3RydXREZXB0aCA9IDAuMyAqIGFycmF5c2tpcDsgLy8gXFxAYXJzdHJ1dGJveCBpbiBsdHRhYi5kdHhcblxuICBsZXQgdG90YWxIZWlnaHQgPSAwOyAvLyBTZXQgYSBwb3NpdGlvbiBmb3IgXFxobGluZShzKSBhdCB0aGUgdG9wIG9mIHRoZSBhcnJheSwgaWYgYW55LlxuXG4gIGZ1bmN0aW9uIHNldEhMaW5lUG9zKGhsaW5lc0luR2FwKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBobGluZXNJbkdhcC5sZW5ndGg7ICsraSkge1xuICAgICAgaWYgKGkgPiAwKSB7XG4gICAgICAgIHRvdGFsSGVpZ2h0ICs9IDAuMjU7XG4gICAgICB9XG5cbiAgICAgIGhsaW5lcy5wdXNoKHtcbiAgICAgICAgcG9zOiB0b3RhbEhlaWdodCxcbiAgICAgICAgaXNEYXNoZWQ6IGhsaW5lc0luR2FwW2ldXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBzZXRITGluZVBvcyhoTGluZXNCZWZvcmVSb3dbMF0pO1xuXG4gIGZvciAociA9IDA7IHIgPCBncm91cC5ib2R5Lmxlbmd0aDsgKytyKSB7XG4gICAgY29uc3QgaW5yb3cgPSBncm91cC5ib2R5W3JdO1xuICAgIGxldCBoZWlnaHQgPSBhcnN0cnV0SGVpZ2h0OyAvLyBcXEBhcnJheSBhZGRzIGFuIFxcQGFyc3RydXRcblxuICAgIGxldCBkZXB0aCA9IGFyc3RydXREZXB0aDsgLy8gdG8gZWFjaCB0b3cgKHZpYSB0aGUgdGVtcGxhdGUpXG5cbiAgICBpZiAobmMgPCBpbnJvdy5sZW5ndGgpIHtcbiAgICAgIG5jID0gaW5yb3cubGVuZ3RoO1xuICAgIH1cblxuICAgIGNvbnN0IG91dHJvdyA9IG5ldyBBcnJheShpbnJvdy5sZW5ndGgpO1xuXG4gICAgZm9yIChjID0gMDsgYyA8IGlucm93Lmxlbmd0aDsgKytjKSB7XG4gICAgICBjb25zdCBlbHQgPSBidWlsZEdyb3VwKGlucm93W2NdLCBvcHRpb25zKTtcblxuICAgICAgaWYgKGRlcHRoIDwgZWx0LmRlcHRoKSB7XG4gICAgICAgIGRlcHRoID0gZWx0LmRlcHRoO1xuICAgICAgfVxuXG4gICAgICBpZiAoaGVpZ2h0IDwgZWx0LmhlaWdodCkge1xuICAgICAgICBoZWlnaHQgPSBlbHQuaGVpZ2h0O1xuICAgICAgfVxuXG4gICAgICBvdXRyb3dbY10gPSBlbHQ7XG4gICAgfVxuXG4gICAgY29uc3Qgcm93R2FwID0gZ3JvdXAucm93R2Fwc1tyXTtcbiAgICBsZXQgZ2FwID0gMDtcblxuICAgIGlmIChyb3dHYXApIHtcbiAgICAgIGdhcCA9IGNhbGN1bGF0ZVNpemUocm93R2FwLCBvcHRpb25zKTtcblxuICAgICAgaWYgKGdhcCA+IDApIHtcbiAgICAgICAgLy8gXFxAYXJnYXJyYXljclxuICAgICAgICBnYXAgKz0gYXJzdHJ1dERlcHRoO1xuXG4gICAgICAgIGlmIChkZXB0aCA8IGdhcCkge1xuICAgICAgICAgIGRlcHRoID0gZ2FwOyAvLyBcXEB4YXJnYXJyYXljclxuICAgICAgICB9XG5cbiAgICAgICAgZ2FwID0gMDtcbiAgICAgIH1cbiAgICB9IC8vIEluIEFNUyBtdWx0aWxpbmUgZW52aXJvbm1lbnRzIHN1Y2ggYXMgYWxpZ25lZCBhbmQgZ2F0aGVyZWQsIHJvd3NcbiAgICAvLyBjb3JyZXNwb25kIHRvIGxpbmVzIHRoYXQgaGF2ZSBhZGRpdGlvbmFsIFxcam90IGFkZGVkIHRvIHRoZVxuICAgIC8vIFxcYmFzZWxpbmVza2lwIHZpYSBcXG9wZW51cC5cblxuXG4gICAgaWYgKGdyb3VwLmFkZEpvdCkge1xuICAgICAgZGVwdGggKz0gam90O1xuICAgIH1cblxuICAgIG91dHJvdy5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgb3V0cm93LmRlcHRoID0gZGVwdGg7XG4gICAgdG90YWxIZWlnaHQgKz0gaGVpZ2h0O1xuICAgIG91dHJvdy5wb3MgPSB0b3RhbEhlaWdodDtcbiAgICB0b3RhbEhlaWdodCArPSBkZXB0aCArIGdhcDsgLy8gXFxAeWFyZ2FycmF5Y3JcblxuICAgIGJvZHlbcl0gPSBvdXRyb3c7IC8vIFNldCBhIHBvc2l0aW9uIGZvciBcXGhsaW5lKHMpLCBpZiBhbnkuXG5cbiAgICBzZXRITGluZVBvcyhoTGluZXNCZWZvcmVSb3dbciArIDFdKTtcbiAgfVxuXG4gIGNvbnN0IG9mZnNldCA9IHRvdGFsSGVpZ2h0IC8gMiArIG9wdGlvbnMuZm9udE1ldHJpY3MoKS5heGlzSGVpZ2h0O1xuICBjb25zdCBjb2xEZXNjcmlwdGlvbnMgPSBncm91cC5jb2xzIHx8IFtdO1xuICBjb25zdCBjb2xzID0gW107XG4gIGxldCBjb2xTZXA7XG4gIGxldCBjb2xEZXNjck51bTtcbiAgY29uc3QgdGFnU3BhbnMgPSBbXTtcblxuICBpZiAoZ3JvdXAudGFncyAmJiBncm91cC50YWdzLnNvbWUodGFnID0+IHRhZykpIHtcbiAgICAvLyBBbiBlbnZpcm9ubWVudCB3aXRoIG1hbnVhbCB0YWdzIGFuZC9vciBhdXRvbWF0aWMgZXF1YXRpb24gbnVtYmVycy5cbiAgICAvLyBDcmVhdGUgbm9kZShzKSwgdGhlIGxhdHRlciBvZiB3aGljaCB0cmlnZ2VyIENTUyBjb3VudGVyIGluY3JlbWVudC5cbiAgICBmb3IgKHIgPSAwOyByIDwgbnI7ICsrcikge1xuICAgICAgY29uc3QgcncgPSBib2R5W3JdO1xuICAgICAgY29uc3Qgc2hpZnQgPSBydy5wb3MgLSBvZmZzZXQ7XG4gICAgICBjb25zdCB0YWcgPSBncm91cC50YWdzW3JdO1xuICAgICAgbGV0IHRhZ1NwYW47XG5cbiAgICAgIGlmICh0YWcgPT09IHRydWUpIHtcbiAgICAgICAgLy8gYXV0b21hdGljIG51bWJlcmluZ1xuICAgICAgICB0YWdTcGFuID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wiZXFuLW51bVwiXSwgW10sIG9wdGlvbnMpO1xuICAgICAgfSBlbHNlIGlmICh0YWcgPT09IGZhbHNlKSB7XG4gICAgICAgIC8vIFxcbm9udW1iZXIvXFxub3RhZyBvciBzdGFycmVkIGVudmlyb25tZW50XG4gICAgICAgIHRhZ1NwYW4gPSBidWlsZENvbW1vbi5tYWtlU3BhbihbXSwgW10sIG9wdGlvbnMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gbWFudWFsIFxcdGFnXG4gICAgICAgIHRhZ1NwYW4gPSBidWlsZENvbW1vbi5tYWtlU3BhbihbXSwgYnVpbGRFeHByZXNzaW9uKHRhZywgb3B0aW9ucywgdHJ1ZSksIG9wdGlvbnMpO1xuICAgICAgfVxuXG4gICAgICB0YWdTcGFuLmRlcHRoID0gcncuZGVwdGg7XG4gICAgICB0YWdTcGFuLmhlaWdodCA9IHJ3LmhlaWdodDtcbiAgICAgIHRhZ1NwYW5zLnB1c2goe1xuICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgZWxlbTogdGFnU3BhbixcbiAgICAgICAgc2hpZnRcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGZvciAoYyA9IDAsIGNvbERlc2NyTnVtID0gMDsgLy8gQ29udGludWUgd2hpbGUgZWl0aGVyIHRoZXJlIGFyZSBtb3JlIGNvbHVtbnMgb3IgbW9yZSBjb2x1bW5cbiAgLy8gZGVzY3JpcHRpb25zLCBzbyB0cmFpbGluZyBzZXBhcmF0b3JzIGRvbid0IGdldCBsb3N0LlxuICBjIDwgbmMgfHwgY29sRGVzY3JOdW0gPCBjb2xEZXNjcmlwdGlvbnMubGVuZ3RoOyArK2MsICsrY29sRGVzY3JOdW0pIHtcbiAgICBsZXQgY29sRGVzY3IgPSBjb2xEZXNjcmlwdGlvbnNbY29sRGVzY3JOdW1dIHx8IHt9O1xuICAgIGxldCBmaXJzdFNlcGFyYXRvciA9IHRydWU7XG5cbiAgICB3aGlsZSAoY29sRGVzY3IudHlwZSA9PT0gXCJzZXBhcmF0b3JcIikge1xuICAgICAgLy8gSWYgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSBzZXBhcmF0b3IgaW4gYSByb3csIGFkZCBhIHNwYWNlXG4gICAgICAvLyBiZXR3ZWVuIHRoZW0uXG4gICAgICBpZiAoIWZpcnN0U2VwYXJhdG9yKSB7XG4gICAgICAgIGNvbFNlcCA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcImFycmF5Y29sc2VwXCJdLCBbXSk7XG4gICAgICAgIGNvbFNlcC5zdHlsZS53aWR0aCA9IG1ha2VFbShvcHRpb25zLmZvbnRNZXRyaWNzKCkuZG91YmxlUnVsZVNlcCk7XG4gICAgICAgIGNvbHMucHVzaChjb2xTZXApO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29sRGVzY3Iuc2VwYXJhdG9yID09PSBcInxcIiB8fCBjb2xEZXNjci5zZXBhcmF0b3IgPT09IFwiOlwiKSB7XG4gICAgICAgIGNvbnN0IGxpbmVUeXBlID0gY29sRGVzY3Iuc2VwYXJhdG9yID09PSBcInxcIiA/IFwic29saWRcIiA6IFwiZGFzaGVkXCI7XG4gICAgICAgIGNvbnN0IHNlcGFyYXRvciA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcInZlcnRpY2FsLXNlcGFyYXRvclwiXSwgW10sIG9wdGlvbnMpO1xuICAgICAgICBzZXBhcmF0b3Iuc3R5bGUuaGVpZ2h0ID0gbWFrZUVtKHRvdGFsSGVpZ2h0KTtcbiAgICAgICAgc2VwYXJhdG9yLnN0eWxlLmJvcmRlclJpZ2h0V2lkdGggPSBtYWtlRW0ocnVsZVRoaWNrbmVzcyk7XG4gICAgICAgIHNlcGFyYXRvci5zdHlsZS5ib3JkZXJSaWdodFN0eWxlID0gbGluZVR5cGU7XG4gICAgICAgIHNlcGFyYXRvci5zdHlsZS5tYXJnaW4gPSBcIjAgXCIgKyBtYWtlRW0oLXJ1bGVUaGlja25lc3MgLyAyKTtcbiAgICAgICAgY29uc3Qgc2hpZnQgPSB0b3RhbEhlaWdodCAtIG9mZnNldDtcblxuICAgICAgICBpZiAoc2hpZnQpIHtcbiAgICAgICAgICBzZXBhcmF0b3Iuc3R5bGUudmVydGljYWxBbGlnbiA9IG1ha2VFbSgtc2hpZnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29scy5wdXNoKHNlcGFyYXRvcik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJJbnZhbGlkIHNlcGFyYXRvciB0eXBlOiBcIiArIGNvbERlc2NyLnNlcGFyYXRvcik7XG4gICAgICB9XG5cbiAgICAgIGNvbERlc2NyTnVtKys7XG4gICAgICBjb2xEZXNjciA9IGNvbERlc2NyaXB0aW9uc1tjb2xEZXNjck51bV0gfHwge307XG4gICAgICBmaXJzdFNlcGFyYXRvciA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChjID49IG5jKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBsZXQgc2Vwd2lkdGg7XG5cbiAgICBpZiAoYyA+IDAgfHwgZ3JvdXAuaHNraXBCZWZvcmVBbmRBZnRlcikge1xuICAgICAgc2Vwd2lkdGggPSB1dGlscy5kZWZsdChjb2xEZXNjci5wcmVnYXAsIGFycmF5Y29sc2VwKTtcblxuICAgICAgaWYgKHNlcHdpZHRoICE9PSAwKSB7XG4gICAgICAgIGNvbFNlcCA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcImFycmF5Y29sc2VwXCJdLCBbXSk7XG4gICAgICAgIGNvbFNlcC5zdHlsZS53aWR0aCA9IG1ha2VFbShzZXB3aWR0aCk7XG4gICAgICAgIGNvbHMucHVzaChjb2xTZXApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBjb2wgPSBbXTtcblxuICAgIGZvciAociA9IDA7IHIgPCBucjsgKytyKSB7XG4gICAgICBjb25zdCByb3cgPSBib2R5W3JdO1xuICAgICAgY29uc3QgZWxlbSA9IHJvd1tjXTtcblxuICAgICAgaWYgKCFlbGVtKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzaGlmdCA9IHJvdy5wb3MgLSBvZmZzZXQ7XG4gICAgICBlbGVtLmRlcHRoID0gcm93LmRlcHRoO1xuICAgICAgZWxlbS5oZWlnaHQgPSByb3cuaGVpZ2h0O1xuICAgICAgY29sLnB1c2goe1xuICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgZWxlbTogZWxlbSxcbiAgICAgICAgc2hpZnQ6IHNoaWZ0XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb2wgPSBidWlsZENvbW1vbi5tYWtlVkxpc3Qoe1xuICAgICAgcG9zaXRpb25UeXBlOiBcImluZGl2aWR1YWxTaGlmdFwiLFxuICAgICAgY2hpbGRyZW46IGNvbFxuICAgIH0sIG9wdGlvbnMpO1xuICAgIGNvbCA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcImNvbC1hbGlnbi1cIiArIChjb2xEZXNjci5hbGlnbiB8fCBcImNcIildLCBbY29sXSk7XG4gICAgY29scy5wdXNoKGNvbCk7XG5cbiAgICBpZiAoYyA8IG5jIC0gMSB8fCBncm91cC5oc2tpcEJlZm9yZUFuZEFmdGVyKSB7XG4gICAgICBzZXB3aWR0aCA9IHV0aWxzLmRlZmx0KGNvbERlc2NyLnBvc3RnYXAsIGFycmF5Y29sc2VwKTtcblxuICAgICAgaWYgKHNlcHdpZHRoICE9PSAwKSB7XG4gICAgICAgIGNvbFNlcCA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcImFycmF5Y29sc2VwXCJdLCBbXSk7XG4gICAgICAgIGNvbFNlcC5zdHlsZS53aWR0aCA9IG1ha2VFbShzZXB3aWR0aCk7XG4gICAgICAgIGNvbHMucHVzaChjb2xTZXApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGJvZHkgPSBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJtdGFibGVcIl0sIGNvbHMpOyAvLyBBZGQgXFxobGluZShzKSwgaWYgYW55LlxuXG4gIGlmIChobGluZXMubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IGxpbmUgPSBidWlsZENvbW1vbi5tYWtlTGluZVNwYW4oXCJobGluZVwiLCBvcHRpb25zLCBydWxlVGhpY2tuZXNzKTtcbiAgICBjb25zdCBkYXNoZXMgPSBidWlsZENvbW1vbi5tYWtlTGluZVNwYW4oXCJoZGFzaGxpbmVcIiwgb3B0aW9ucywgcnVsZVRoaWNrbmVzcyk7XG4gICAgY29uc3Qgdkxpc3RFbGVtcyA9IFt7XG4gICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgIGVsZW06IGJvZHksXG4gICAgICBzaGlmdDogMFxuICAgIH1dO1xuXG4gICAgd2hpbGUgKGhsaW5lcy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBobGluZSA9IGhsaW5lcy5wb3AoKTtcbiAgICAgIGNvbnN0IGxpbmVTaGlmdCA9IGhsaW5lLnBvcyAtIG9mZnNldDtcblxuICAgICAgaWYgKGhsaW5lLmlzRGFzaGVkKSB7XG4gICAgICAgIHZMaXN0RWxlbXMucHVzaCh7XG4gICAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgICAgZWxlbTogZGFzaGVzLFxuICAgICAgICAgIHNoaWZ0OiBsaW5lU2hpZnRcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2TGlzdEVsZW1zLnB1c2goe1xuICAgICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICAgIGVsZW06IGxpbmUsXG4gICAgICAgICAgc2hpZnQ6IGxpbmVTaGlmdFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBib2R5ID0gYnVpbGRDb21tb24ubWFrZVZMaXN0KHtcbiAgICAgIHBvc2l0aW9uVHlwZTogXCJpbmRpdmlkdWFsU2hpZnRcIixcbiAgICAgIGNoaWxkcmVuOiB2TGlzdEVsZW1zXG4gICAgfSwgb3B0aW9ucyk7XG4gIH1cblxuICBpZiAodGFnU3BhbnMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcIm1vcmRcIl0sIFtib2R5XSwgb3B0aW9ucyk7XG4gIH0gZWxzZSB7XG4gICAgbGV0IGVxbk51bUNvbCA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICBwb3NpdGlvblR5cGU6IFwiaW5kaXZpZHVhbFNoaWZ0XCIsXG4gICAgICBjaGlsZHJlbjogdGFnU3BhbnNcbiAgICB9LCBvcHRpb25zKTtcbiAgICBlcW5OdW1Db2wgPSBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJ0YWdcIl0sIFtlcW5OdW1Db2xdLCBvcHRpb25zKTtcbiAgICByZXR1cm4gYnVpbGRDb21tb24ubWFrZUZyYWdtZW50KFtib2R5LCBlcW5OdW1Db2xdKTtcbiAgfVxufTtcblxuY29uc3QgYWxpZ25NYXAgPSB7XG4gIGM6IFwiY2VudGVyIFwiLFxuICBsOiBcImxlZnQgXCIsXG4gIHI6IFwicmlnaHQgXCJcbn07XG5cbmNvbnN0IGFycmF5X21hdGhtbEJ1aWxkZXIgPSBmdW5jdGlvbiAoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgY29uc3QgdGJsID0gW107XG4gIGNvbnN0IGdsdWUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm10ZFwiLCBbXSwgW1wibXRyLWdsdWVcIl0pO1xuICBjb25zdCB0YWcgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm10ZFwiLCBbXSwgW1wibW1sLWVxbi1udW1cIl0pO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZ3JvdXAuYm9keS5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IHJ3ID0gZ3JvdXAuYm9keVtpXTtcbiAgICBjb25zdCByb3cgPSBbXTtcblxuICAgIGZvciAobGV0IGogPSAwOyBqIDwgcncubGVuZ3RoOyBqKyspIHtcbiAgICAgIHJvdy5wdXNoKG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXRkXCIsIFtidWlsZE1hdGhNTF9idWlsZEdyb3VwKHJ3W2pdLCBvcHRpb25zKV0pKTtcbiAgICB9XG5cbiAgICBpZiAoZ3JvdXAudGFncyAmJiBncm91cC50YWdzW2ldKSB7XG4gICAgICByb3cudW5zaGlmdChnbHVlKTtcbiAgICAgIHJvdy5wdXNoKGdsdWUpO1xuXG4gICAgICBpZiAoZ3JvdXAubGVxbm8pIHtcbiAgICAgICAgcm93LnVuc2hpZnQodGFnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJvdy5wdXNoKHRhZyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGJsLnB1c2gobmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtdHJcIiwgcm93KSk7XG4gIH1cblxuICBsZXQgdGFibGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm10YWJsZVwiLCB0YmwpOyAvLyBTZXQgY29sdW1uIGFsaWdubWVudCwgcm93IHNwYWNpbmcsIGNvbHVtbiBzcGFjaW5nLCBhbmRcbiAgLy8gYXJyYXkgbGluZXMgYnkgc2V0dGluZyBhdHRyaWJ1dGVzIG9uIHRoZSB0YWJsZSBlbGVtZW50LlxuICAvLyBTZXQgdGhlIHJvdyBzcGFjaW5nLiBJbiBNYXRoTUwsIHdlIHNwZWNpZnkgYSBnYXAgZGlzdGFuY2UuXG4gIC8vIFdlIGRvIG5vdCB1c2Ugcm93R2FwW10gYmVjYXVzZSBNYXRoTUwgYXV0b21hdGljYWxseSBpbmNyZWFzZXNcbiAgLy8gY2VsbCBoZWlnaHQgd2l0aCB0aGUgaGVpZ2h0L2RlcHRoIG9mIHRoZSBlbGVtZW50IGNvbnRlbnQuXG4gIC8vIExhVGVYIFxcYXJyYXlzdHJldGNoIG11bHRpcGxpZXMgdGhlIHJvdyBiYXNlbGluZS10by1iYXNlbGluZSBkaXN0YW5jZS5cbiAgLy8gV2Ugc2ltdWxhdGUgdGhpcyBieSBhZGRpbmcgKGFycmF5c3RyZXRjaCAtIDEpZW0gdG8gdGhlIGdhcC4gVGhpc1xuICAvLyBkb2VzIGEgcmVhc29uYWJsZSBqb2Igb2YgYWRqdXN0aW5nIGFycmF5cyBjb250YWluaW5nIDEgZW0gdGFsbCBjb250ZW50LlxuICAvLyBUaGUgMC4xNiBhbmQgMC4wOSB2YWx1ZXMgYXJlIGZvdW5kIGVtcGlyaWNhbGx5LiBUaGV5IHByb2R1Y2UgYW4gYXJyYXlcbiAgLy8gc2ltaWxhciB0byBMYVRlWCBhbmQgaW4gd2hpY2ggY29udGVudCBkb2VzIG5vdCBpbnRlcmZlcmUgd2l0aCBcXGhsaW5lcy5cblxuICBjb25zdCBnYXAgPSBncm91cC5hcnJheXN0cmV0Y2ggPT09IDAuNSA/IDAuMSAvLyB7c21hbGxtYXRyaXh9LCB7c3ViYXJyYXl9XG4gIDogMC4xNiArIGdyb3VwLmFycmF5c3RyZXRjaCAtIDEgKyAoZ3JvdXAuYWRkSm90ID8gMC4wOSA6IDApO1xuICB0YWJsZS5zZXRBdHRyaWJ1dGUoXCJyb3dzcGFjaW5nXCIsIG1ha2VFbShnYXApKTsgLy8gTWF0aE1MIHRhYmxlIGxpbmVzIGdvIG9ubHkgYmV0d2VlbiBjZWxscy5cbiAgLy8gVG8gcGxhY2UgYSBsaW5lIG9uIGFuIGVkZ2Ugd2UnbGwgdXNlIDxtZW5jbG9zZT4sIGlmIG5lY2Vzc2FyeS5cblxuICBsZXQgbWVuY2xvc2UgPSBcIlwiO1xuICBsZXQgYWxpZ24gPSBcIlwiO1xuXG4gIGlmIChncm91cC5jb2xzICYmIGdyb3VwLmNvbHMubGVuZ3RoID4gMCkge1xuICAgIC8vIEZpbmQgY29sdW1uIGFsaWdubWVudCwgY29sdW1uIHNwYWNpbmcsIGFuZCAgdmVydGljYWwgbGluZXMuXG4gICAgY29uc3QgY29scyA9IGdyb3VwLmNvbHM7XG4gICAgbGV0IGNvbHVtbkxpbmVzID0gXCJcIjtcbiAgICBsZXQgcHJldlR5cGVXYXNBbGlnbiA9IGZhbHNlO1xuICAgIGxldCBpU3RhcnQgPSAwO1xuICAgIGxldCBpRW5kID0gY29scy5sZW5ndGg7XG5cbiAgICBpZiAoY29sc1swXS50eXBlID09PSBcInNlcGFyYXRvclwiKSB7XG4gICAgICBtZW5jbG9zZSArPSBcInRvcCBcIjtcbiAgICAgIGlTdGFydCA9IDE7XG4gICAgfVxuXG4gICAgaWYgKGNvbHNbY29scy5sZW5ndGggLSAxXS50eXBlID09PSBcInNlcGFyYXRvclwiKSB7XG4gICAgICBtZW5jbG9zZSArPSBcImJvdHRvbSBcIjtcbiAgICAgIGlFbmQgLT0gMTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gaVN0YXJ0OyBpIDwgaUVuZDsgaSsrKSB7XG4gICAgICBpZiAoY29sc1tpXS50eXBlID09PSBcImFsaWduXCIpIHtcbiAgICAgICAgYWxpZ24gKz0gYWxpZ25NYXBbY29sc1tpXS5hbGlnbl07XG5cbiAgICAgICAgaWYgKHByZXZUeXBlV2FzQWxpZ24pIHtcbiAgICAgICAgICBjb2x1bW5MaW5lcyArPSBcIm5vbmUgXCI7XG4gICAgICAgIH1cblxuICAgICAgICBwcmV2VHlwZVdhc0FsaWduID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAoY29sc1tpXS50eXBlID09PSBcInNlcGFyYXRvclwiKSB7XG4gICAgICAgIC8vIE1hdGhNTCBhY2NlcHRzIG9ubHkgc2luZ2xlIGxpbmVzIGJldHdlZW4gY2VsbHMuXG4gICAgICAgIC8vIFNvIHdlIHJlYWQgb25seSB0aGUgZmlyc3Qgb2YgY29uc2VjdXRpdmUgc2VwYXJhdG9ycy5cbiAgICAgICAgaWYgKHByZXZUeXBlV2FzQWxpZ24pIHtcbiAgICAgICAgICBjb2x1bW5MaW5lcyArPSBjb2xzW2ldLnNlcGFyYXRvciA9PT0gXCJ8XCIgPyBcInNvbGlkIFwiIDogXCJkYXNoZWQgXCI7XG4gICAgICAgICAgcHJldlR5cGVXYXNBbGlnbiA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGFibGUuc2V0QXR0cmlidXRlKFwiY29sdW1uYWxpZ25cIiwgYWxpZ24udHJpbSgpKTtcblxuICAgIGlmICgvW3NkXS8udGVzdChjb2x1bW5MaW5lcykpIHtcbiAgICAgIHRhYmxlLnNldEF0dHJpYnV0ZShcImNvbHVtbmxpbmVzXCIsIGNvbHVtbkxpbmVzLnRyaW0oKSk7XG4gICAgfVxuICB9IC8vIFNldCBjb2x1bW4gc3BhY2luZy5cblxuXG4gIGlmIChncm91cC5jb2xTZXBhcmF0aW9uVHlwZSA9PT0gXCJhbGlnblwiKSB7XG4gICAgY29uc3QgY29scyA9IGdyb3VwLmNvbHMgfHwgW107XG4gICAgbGV0IHNwYWNpbmcgPSBcIlwiO1xuXG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCBjb2xzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBzcGFjaW5nICs9IGkgJSAyID8gXCIwZW0gXCIgOiBcIjFlbSBcIjtcbiAgICB9XG5cbiAgICB0YWJsZS5zZXRBdHRyaWJ1dGUoXCJjb2x1bW5zcGFjaW5nXCIsIHNwYWNpbmcudHJpbSgpKTtcbiAgfSBlbHNlIGlmIChncm91cC5jb2xTZXBhcmF0aW9uVHlwZSA9PT0gXCJhbGlnbmF0XCIgfHwgZ3JvdXAuY29sU2VwYXJhdGlvblR5cGUgPT09IFwiZ2F0aGVyXCIpIHtcbiAgICB0YWJsZS5zZXRBdHRyaWJ1dGUoXCJjb2x1bW5zcGFjaW5nXCIsIFwiMGVtXCIpO1xuICB9IGVsc2UgaWYgKGdyb3VwLmNvbFNlcGFyYXRpb25UeXBlID09PSBcInNtYWxsXCIpIHtcbiAgICB0YWJsZS5zZXRBdHRyaWJ1dGUoXCJjb2x1bW5zcGFjaW5nXCIsIFwiMC4yNzc4ZW1cIik7XG4gIH0gZWxzZSBpZiAoZ3JvdXAuY29sU2VwYXJhdGlvblR5cGUgPT09IFwiQ0RcIikge1xuICAgIHRhYmxlLnNldEF0dHJpYnV0ZShcImNvbHVtbnNwYWNpbmdcIiwgXCIwLjVlbVwiKTtcbiAgfSBlbHNlIHtcbiAgICB0YWJsZS5zZXRBdHRyaWJ1dGUoXCJjb2x1bW5zcGFjaW5nXCIsIFwiMWVtXCIpO1xuICB9IC8vIEFkZHJlc3MgXFxobGluZSBhbmQgXFxoZGFzaGxpbmVcblxuXG4gIGxldCByb3dMaW5lcyA9IFwiXCI7XG4gIGNvbnN0IGhsaW5lcyA9IGdyb3VwLmhMaW5lc0JlZm9yZVJvdztcbiAgbWVuY2xvc2UgKz0gaGxpbmVzWzBdLmxlbmd0aCA+IDAgPyBcImxlZnQgXCIgOiBcIlwiO1xuICBtZW5jbG9zZSArPSBobGluZXNbaGxpbmVzLmxlbmd0aCAtIDFdLmxlbmd0aCA+IDAgPyBcInJpZ2h0IFwiIDogXCJcIjtcblxuICBmb3IgKGxldCBpID0gMTsgaSA8IGhsaW5lcy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICByb3dMaW5lcyArPSBobGluZXNbaV0ubGVuZ3RoID09PSAwID8gXCJub25lIFwiIC8vIE1hdGhNTCBhY2NlcHRzIG9ubHkgYSBzaW5nbGUgbGluZSBiZXR3ZWVuIHJvd3MuIFJlYWQgb25lIGVsZW1lbnQuXG4gICAgOiBobGluZXNbaV1bMF0gPyBcImRhc2hlZCBcIiA6IFwic29saWQgXCI7XG4gIH1cblxuICBpZiAoL1tzZF0vLnRlc3Qocm93TGluZXMpKSB7XG4gICAgdGFibGUuc2V0QXR0cmlidXRlKFwicm93bGluZXNcIiwgcm93TGluZXMudHJpbSgpKTtcbiAgfVxuXG4gIGlmIChtZW5jbG9zZSAhPT0gXCJcIikge1xuICAgIHRhYmxlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtZW5jbG9zZVwiLCBbdGFibGVdKTtcbiAgICB0YWJsZS5zZXRBdHRyaWJ1dGUoXCJub3RhdGlvblwiLCBtZW5jbG9zZS50cmltKCkpO1xuICB9XG5cbiAgaWYgKGdyb3VwLmFycmF5c3RyZXRjaCAmJiBncm91cC5hcnJheXN0cmV0Y2ggPCAxKSB7XG4gICAgLy8gQSBzbWFsbCBhcnJheS4gV3JhcCBpbiBzY3JpcHRzdHlsZSBzbyByb3cgZ2FwIGlzIG5vdCB0b28gbGFyZ2UuXG4gICAgdGFibGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1zdHlsZVwiLCBbdGFibGVdKTtcbiAgICB0YWJsZS5zZXRBdHRyaWJ1dGUoXCJzY3JpcHRsZXZlbFwiLCBcIjFcIik7XG4gIH1cblxuICByZXR1cm4gdGFibGU7XG59OyAvLyBDb252ZW5pZW5jZSBmdW5jdGlvbiBmb3IgYWxpZ24sIGFsaWduKiwgYWxpZ25lZCwgYWxpZ25hdCwgYWxpZ25hdCosIGFsaWduZWRhdC5cblxuXG5jb25zdCBhbGlnbmVkSGFuZGxlciA9IGZ1bmN0aW9uIChjb250ZXh0LCBhcmdzKSB7XG4gIGlmIChjb250ZXh0LmVudk5hbWUuaW5kZXhPZihcImVkXCIpID09PSAtMSkge1xuICAgIHZhbGlkYXRlQW1zRW52aXJvbm1lbnRDb250ZXh0KGNvbnRleHQpO1xuICB9XG5cbiAgY29uc3QgY29scyA9IFtdO1xuICBjb25zdCBzZXBhcmF0aW9uVHlwZSA9IGNvbnRleHQuZW52TmFtZS5pbmRleE9mKFwiYXRcIikgPiAtMSA/IFwiYWxpZ25hdFwiIDogXCJhbGlnblwiO1xuICBjb25zdCBpc1NwbGl0ID0gY29udGV4dC5lbnZOYW1lID09PSBcInNwbGl0XCI7XG4gIGNvbnN0IHJlcyA9IHBhcnNlQXJyYXkoY29udGV4dC5wYXJzZXIsIHtcbiAgICBjb2xzLFxuICAgIGFkZEpvdDogdHJ1ZSxcbiAgICBhdXRvVGFnOiBpc1NwbGl0ID8gdW5kZWZpbmVkIDogZ2V0QXV0b1RhZyhjb250ZXh0LmVudk5hbWUpLFxuICAgIGVtcHR5U2luZ2xlUm93OiB0cnVlLFxuICAgIGNvbFNlcGFyYXRpb25UeXBlOiBzZXBhcmF0aW9uVHlwZSxcbiAgICBtYXhOdW1Db2xzOiBpc1NwbGl0ID8gMiA6IHVuZGVmaW5lZCxcbiAgICBsZXFubzogY29udGV4dC5wYXJzZXIuc2V0dGluZ3MubGVxbm9cbiAgfSwgXCJkaXNwbGF5XCIpOyAvLyBEZXRlcm1pbmluZyBudW1iZXIgb2YgY29sdW1ucy5cbiAgLy8gMS4gSWYgdGhlIGZpcnN0IGFyZ3VtZW50IGlzIGdpdmVuLCB3ZSB1c2UgaXQgYXMgYSBudW1iZXIgb2YgY29sdW1ucyxcbiAgLy8gICAgYW5kIG1ha2VzIHN1cmUgdGhhdCBlYWNoIHJvdyBkb2Vzbid0IGV4Y2VlZCB0aGF0IG51bWJlci5cbiAgLy8gMi4gT3RoZXJ3aXNlLCBqdXN0IGNvdW50IG51bWJlciBvZiBjb2x1bW5zID0gbWF4aW11bSBudW1iZXJcbiAgLy8gICAgb2YgY2VsbHMgaW4gZWFjaCByb3cgKFwiYWxpZ25lZFwiIG1vZGUgLS0gaXNBbGlnbmVkIHdpbGwgYmUgdHJ1ZSkuXG4gIC8vXG4gIC8vIEF0IHRoZSBzYW1lIHRpbWUsIHByZXBlbmQgZW1wdHkgZ3JvdXAge30gYXQgYmVnaW5uaW5nIG9mIGV2ZXJ5IHNlY29uZFxuICAvLyBjZWxsIGluIGVhY2ggcm93IChzdGFydGluZyB3aXRoIHNlY29uZCBjZWxsKSBzbyB0aGF0IG9wZXJhdG9ycyBiZWNvbWVcbiAgLy8gYmluYXJ5LiAgVGhpcyBiZWhhdmlvciBpcyBpbXBsZW1lbnRlZCBpbiBhbXNtYXRoJ3MgXFxzdGFydEBhbGlnbmVkLlxuXG4gIGxldCBudW1NYXRocztcbiAgbGV0IG51bUNvbHMgPSAwO1xuICBjb25zdCBlbXB0eUdyb3VwID0ge1xuICAgIHR5cGU6IFwib3JkZ3JvdXBcIixcbiAgICBtb2RlOiBjb250ZXh0Lm1vZGUsXG4gICAgYm9keTogW11cbiAgfTtcblxuICBpZiAoYXJnc1swXSAmJiBhcmdzWzBdLnR5cGUgPT09IFwib3JkZ3JvdXBcIikge1xuICAgIGxldCBhcmcwID0gXCJcIjtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJnc1swXS5ib2R5Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCB0ZXh0b3JkID0gYXNzZXJ0Tm9kZVR5cGUoYXJnc1swXS5ib2R5W2ldLCBcInRleHRvcmRcIik7XG4gICAgICBhcmcwICs9IHRleHRvcmQudGV4dDtcbiAgICB9XG5cbiAgICBudW1NYXRocyA9IE51bWJlcihhcmcwKTtcbiAgICBudW1Db2xzID0gbnVtTWF0aHMgKiAyO1xuICB9XG5cbiAgY29uc3QgaXNBbGlnbmVkID0gIW51bUNvbHM7XG4gIHJlcy5ib2R5LmZvckVhY2goZnVuY3Rpb24gKHJvdykge1xuICAgIGZvciAobGV0IGkgPSAxOyBpIDwgcm93Lmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICAvLyBNb2RpZnkgb3JkZ3JvdXAgbm9kZSB3aXRoaW4gc3R5bGluZyBub2RlXG4gICAgICBjb25zdCBzdHlsaW5nID0gYXNzZXJ0Tm9kZVR5cGUocm93W2ldLCBcInN0eWxpbmdcIik7XG4gICAgICBjb25zdCBvcmRncm91cCA9IGFzc2VydE5vZGVUeXBlKHN0eWxpbmcuYm9keVswXSwgXCJvcmRncm91cFwiKTtcbiAgICAgIG9yZGdyb3VwLmJvZHkudW5zaGlmdChlbXB0eUdyb3VwKTtcbiAgICB9XG5cbiAgICBpZiAoIWlzQWxpZ25lZCkge1xuICAgICAgLy8gQ2FzZSAxXG4gICAgICBjb25zdCBjdXJNYXRocyA9IHJvdy5sZW5ndGggLyAyO1xuXG4gICAgICBpZiAobnVtTWF0aHMgPCBjdXJNYXRocykge1xuICAgICAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJUb28gbWFueSBtYXRoIGluIGEgcm93OiBcIiArIChcImV4cGVjdGVkIFwiICsgbnVtTWF0aHMgKyBcIiwgYnV0IGdvdCBcIiArIGN1ck1hdGhzKSwgcm93WzBdKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG51bUNvbHMgPCByb3cubGVuZ3RoKSB7XG4gICAgICAvLyBDYXNlIDJcbiAgICAgIG51bUNvbHMgPSByb3cubGVuZ3RoO1xuICAgIH1cbiAgfSk7IC8vIEFkanVzdGluZyBhbGlnbm1lbnQuXG4gIC8vIEluIGFsaWduZWQgbW9kZSwgd2UgYWRkIG9uZSBcXHFxdWFkIGJldHdlZW4gY29sdW1ucztcbiAgLy8gb3RoZXJ3aXNlIHdlIGFkZCBub3RoaW5nLlxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtQ29sczsgKytpKSB7XG4gICAgbGV0IGFsaWduID0gXCJyXCI7XG4gICAgbGV0IHByZWdhcCA9IDA7XG5cbiAgICBpZiAoaSAlIDIgPT09IDEpIHtcbiAgICAgIGFsaWduID0gXCJsXCI7XG4gICAgfSBlbHNlIGlmIChpID4gMCAmJiBpc0FsaWduZWQpIHtcbiAgICAgIC8vIFwiYWxpZ25lZFwiIG1vZGUuXG4gICAgICBwcmVnYXAgPSAxOyAvLyBhZGQgb25lIFxccXVhZFxuICAgIH1cblxuICAgIGNvbHNbaV0gPSB7XG4gICAgICB0eXBlOiBcImFsaWduXCIsXG4gICAgICBhbGlnbjogYWxpZ24sXG4gICAgICBwcmVnYXA6IHByZWdhcCxcbiAgICAgIHBvc3RnYXA6IDBcbiAgICB9O1xuICB9XG5cbiAgcmVzLmNvbFNlcGFyYXRpb25UeXBlID0gaXNBbGlnbmVkID8gXCJhbGlnblwiIDogXCJhbGlnbmF0XCI7XG4gIHJldHVybiByZXM7XG59OyAvLyBBcnJheXMgYXJlIHBhcnQgb2YgTGFUZVgsIGRlZmluZWQgaW4gbHR0YWIuZHR4IHNvIGl0cyBkb2N1bWVudGF0aW9uXG4vLyBpcyBwYXJ0IG9mIHRoZSBzb3VyY2UyZS5wZGYgZmlsZSBvZiBMYVRlWDJlIHNvdXJjZSBkb2N1bWVudGF0aW9uLlxuLy8ge2RhcnJheX0gaXMgYW4ge2FycmF5fSBlbnZpcm9ubWVudCB3aGVyZSBjZWxscyBhcmUgc2V0IGluIFxcZGlzcGxheXN0eWxlLFxuLy8gYXMgZGVmaW5lZCBpbiBuY2NtYXRoLnN0eS5cblxuXG5kZWZpbmVFbnZpcm9ubWVudCh7XG4gIHR5cGU6IFwiYXJyYXlcIixcbiAgbmFtZXM6IFtcImFycmF5XCIsIFwiZGFycmF5XCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDFcbiAgfSxcblxuICBoYW5kbGVyKGNvbnRleHQsIGFyZ3MpIHtcbiAgICAvLyBTaW5jZSBubyB0eXBlcyBhcmUgc3BlY2lmaWVkIGFib3ZlLCB0aGUgdHdvIHBvc3NpYmlsaXRpZXMgYXJlXG4gICAgLy8gLSBUaGUgYXJndW1lbnQgaXMgd3JhcHBlZCBpbiB7fSBvciBbXSwgaW4gd2hpY2ggY2FzZSBQYXJzZXInc1xuICAgIC8vICAgcGFyc2VHcm91cCgpIHJldHVybnMgYW4gXCJvcmRncm91cFwiIHdyYXBwaW5nIHNvbWUgc3ltYm9sIG5vZGUuXG4gICAgLy8gLSBUaGUgYXJndW1lbnQgaXMgYSBiYXJlIHN5bWJvbCBub2RlLlxuICAgIGNvbnN0IHN5bU5vZGUgPSBjaGVja1N5bWJvbE5vZGVUeXBlKGFyZ3NbMF0pO1xuICAgIGNvbnN0IGNvbGFsaWduID0gc3ltTm9kZSA/IFthcmdzWzBdXSA6IGFzc2VydE5vZGVUeXBlKGFyZ3NbMF0sIFwib3JkZ3JvdXBcIikuYm9keTtcbiAgICBjb25zdCBjb2xzID0gY29sYWxpZ24ubWFwKGZ1bmN0aW9uIChuZGUpIHtcbiAgICAgIGNvbnN0IG5vZGUgPSBhc3NlcnRTeW1ib2xOb2RlVHlwZShuZGUpO1xuICAgICAgY29uc3QgY2EgPSBub2RlLnRleHQ7XG5cbiAgICAgIGlmIChcImxjclwiLmluZGV4T2YoY2EpICE9PSAtMSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHR5cGU6IFwiYWxpZ25cIixcbiAgICAgICAgICBhbGlnbjogY2FcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSBpZiAoY2EgPT09IFwifFwiKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdHlwZTogXCJzZXBhcmF0b3JcIixcbiAgICAgICAgICBzZXBhcmF0b3I6IFwifFwiXG4gICAgICAgIH07XG4gICAgICB9IGVsc2UgaWYgKGNhID09PSBcIjpcIikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHR5cGU6IFwic2VwYXJhdG9yXCIsXG4gICAgICAgICAgc2VwYXJhdG9yOiBcIjpcIlxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJVbmtub3duIGNvbHVtbiBhbGlnbm1lbnQ6IFwiICsgY2EsIG5kZSk7XG4gICAgfSk7XG4gICAgY29uc3QgcmVzID0ge1xuICAgICAgY29scyxcbiAgICAgIGhza2lwQmVmb3JlQW5kQWZ0ZXI6IHRydWUsXG4gICAgICAvLyBcXEBwcmVhbWJsZSBpbiBsdHRhYi5kdHhcbiAgICAgIG1heE51bUNvbHM6IGNvbHMubGVuZ3RoXG4gICAgfTtcbiAgICByZXR1cm4gcGFyc2VBcnJheShjb250ZXh0LnBhcnNlciwgcmVzLCBkQ2VsbFN0eWxlKGNvbnRleHQuZW52TmFtZSkpO1xuICB9LFxuXG4gIGh0bWxCdWlsZGVyOiBhcnJheV9odG1sQnVpbGRlcixcbiAgbWF0aG1sQnVpbGRlcjogYXJyYXlfbWF0aG1sQnVpbGRlclxufSk7IC8vIFRoZSBtYXRyaXggZW52aXJvbm1lbnRzIG9mIGFtc21hdGggYnVpbGRzIG9uIHRoZSBhcnJheSBlbnZpcm9ubWVudFxuLy8gb2YgTGFUZVgsIHdoaWNoIGlzIGRpc2N1c3NlZCBhYm92ZS5cbi8vIFRoZSBtYXRodG9vbHMgcGFja2FnZSBhZGRzIHN0YXJyZWQgdmVyc2lvbnMgb2YgdGhlIHNhbWUgZW52aXJvbm1lbnRzLlxuLy8gVGhlc2UgaGF2ZSBhbiBvcHRpb25hbCBhcmd1bWVudCB0byBjaG9vc2UgbGVmdHxjZW50ZXJ8cmlnaHQganVzdGlmaWNhdGlvbi5cblxuZGVmaW5lRW52aXJvbm1lbnQoe1xuICB0eXBlOiBcImFycmF5XCIsXG4gIG5hbWVzOiBbXCJtYXRyaXhcIiwgXCJwbWF0cml4XCIsIFwiYm1hdHJpeFwiLCBcIkJtYXRyaXhcIiwgXCJ2bWF0cml4XCIsIFwiVm1hdHJpeFwiLCBcIm1hdHJpeCpcIiwgXCJwbWF0cml4KlwiLCBcImJtYXRyaXgqXCIsIFwiQm1hdHJpeCpcIiwgXCJ2bWF0cml4KlwiLCBcIlZtYXRyaXgqXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDBcbiAgfSxcblxuICBoYW5kbGVyKGNvbnRleHQpIHtcbiAgICBjb25zdCBkZWxpbWl0ZXJzID0ge1xuICAgICAgXCJtYXRyaXhcIjogbnVsbCxcbiAgICAgIFwicG1hdHJpeFwiOiBbXCIoXCIsIFwiKVwiXSxcbiAgICAgIFwiYm1hdHJpeFwiOiBbXCJbXCIsIFwiXVwiXSxcbiAgICAgIFwiQm1hdHJpeFwiOiBbXCJcXFxce1wiLCBcIlxcXFx9XCJdLFxuICAgICAgXCJ2bWF0cml4XCI6IFtcInxcIiwgXCJ8XCJdLFxuICAgICAgXCJWbWF0cml4XCI6IFtcIlxcXFxWZXJ0XCIsIFwiXFxcXFZlcnRcIl1cbiAgICB9W2NvbnRleHQuZW52TmFtZS5yZXBsYWNlKFwiKlwiLCBcIlwiKV07IC8vIFxcaHNraXAgLVxcYXJyYXljb2xzZXAgaW4gYW1zbWF0aFxuXG4gICAgbGV0IGNvbEFsaWduID0gXCJjXCI7XG4gICAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICAgIGhza2lwQmVmb3JlQW5kQWZ0ZXI6IGZhbHNlLFxuICAgICAgY29sczogW3tcbiAgICAgICAgdHlwZTogXCJhbGlnblwiLFxuICAgICAgICBhbGlnbjogY29sQWxpZ25cbiAgICAgIH1dXG4gICAgfTtcblxuICAgIGlmIChjb250ZXh0LmVudk5hbWUuY2hhckF0KGNvbnRleHQuZW52TmFtZS5sZW5ndGggLSAxKSA9PT0gXCIqXCIpIHtcbiAgICAgIC8vIEl0J3Mgb25lIG9mIHRoZSBtYXRodG9vbHMgc3RhcnJlZCBmdW5jdGlvbnMuXG4gICAgICAvLyBQYXJzZSB0aGUgb3B0aW9uYWwgYWxpZ25tZW50IGFyZ3VtZW50LlxuICAgICAgY29uc3QgcGFyc2VyID0gY29udGV4dC5wYXJzZXI7XG4gICAgICBwYXJzZXIuY29uc3VtZVNwYWNlcygpO1xuXG4gICAgICBpZiAocGFyc2VyLmZldGNoKCkudGV4dCA9PT0gXCJbXCIpIHtcbiAgICAgICAgcGFyc2VyLmNvbnN1bWUoKTtcbiAgICAgICAgcGFyc2VyLmNvbnN1bWVTcGFjZXMoKTtcbiAgICAgICAgY29sQWxpZ24gPSBwYXJzZXIuZmV0Y2goKS50ZXh0O1xuXG4gICAgICAgIGlmIChcImxjclwiLmluZGV4T2YoY29sQWxpZ24pID09PSAtMSkge1xuICAgICAgICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIkV4cGVjdGVkIGwgb3IgYyBvciByXCIsIHBhcnNlci5uZXh0VG9rZW4pO1xuICAgICAgICB9XG5cbiAgICAgICAgcGFyc2VyLmNvbnN1bWUoKTtcbiAgICAgICAgcGFyc2VyLmNvbnN1bWVTcGFjZXMoKTtcbiAgICAgICAgcGFyc2VyLmV4cGVjdChcIl1cIik7XG4gICAgICAgIHBhcnNlci5jb25zdW1lKCk7XG4gICAgICAgIHBheWxvYWQuY29scyA9IFt7XG4gICAgICAgICAgdHlwZTogXCJhbGlnblwiLFxuICAgICAgICAgIGFsaWduOiBjb2xBbGlnblxuICAgICAgICB9XTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCByZXMgPSBwYXJzZUFycmF5KGNvbnRleHQucGFyc2VyLCBwYXlsb2FkLCBkQ2VsbFN0eWxlKGNvbnRleHQuZW52TmFtZSkpOyAvLyBQb3B1bGF0ZSBjb2xzIHdpdGggdGhlIGNvcnJlY3QgbnVtYmVyIG9mIGNvbHVtbiBhbGlnbm1lbnQgc3BlY3MuXG5cbiAgICBjb25zdCBudW1Db2xzID0gTWF0aC5tYXgoMCwgLi4ucmVzLmJvZHkubWFwKHJvdyA9PiByb3cubGVuZ3RoKSk7XG4gICAgcmVzLmNvbHMgPSBuZXcgQXJyYXkobnVtQ29scykuZmlsbCh7XG4gICAgICB0eXBlOiBcImFsaWduXCIsXG4gICAgICBhbGlnbjogY29sQWxpZ25cbiAgICB9KTtcbiAgICByZXR1cm4gZGVsaW1pdGVycyA/IHtcbiAgICAgIHR5cGU6IFwibGVmdHJpZ2h0XCIsXG4gICAgICBtb2RlOiBjb250ZXh0Lm1vZGUsXG4gICAgICBib2R5OiBbcmVzXSxcbiAgICAgIGxlZnQ6IGRlbGltaXRlcnNbMF0sXG4gICAgICByaWdodDogZGVsaW1pdGVyc1sxXSxcbiAgICAgIHJpZ2h0Q29sb3I6IHVuZGVmaW5lZCAvLyBcXHJpZ2h0IHVuaW5mbHVlbmNlZCBieSBcXGNvbG9yIGluIGFycmF5XG5cbiAgICB9IDogcmVzO1xuICB9LFxuXG4gIGh0bWxCdWlsZGVyOiBhcnJheV9odG1sQnVpbGRlcixcbiAgbWF0aG1sQnVpbGRlcjogYXJyYXlfbWF0aG1sQnVpbGRlclxufSk7XG5kZWZpbmVFbnZpcm9ubWVudCh7XG4gIHR5cGU6IFwiYXJyYXlcIixcbiAgbmFtZXM6IFtcInNtYWxsbWF0cml4XCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDBcbiAgfSxcblxuICBoYW5kbGVyKGNvbnRleHQpIHtcbiAgICBjb25zdCBwYXlsb2FkID0ge1xuICAgICAgYXJyYXlzdHJldGNoOiAwLjVcbiAgICB9O1xuICAgIGNvbnN0IHJlcyA9IHBhcnNlQXJyYXkoY29udGV4dC5wYXJzZXIsIHBheWxvYWQsIFwic2NyaXB0XCIpO1xuICAgIHJlcy5jb2xTZXBhcmF0aW9uVHlwZSA9IFwic21hbGxcIjtcbiAgICByZXR1cm4gcmVzO1xuICB9LFxuXG4gIGh0bWxCdWlsZGVyOiBhcnJheV9odG1sQnVpbGRlcixcbiAgbWF0aG1sQnVpbGRlcjogYXJyYXlfbWF0aG1sQnVpbGRlclxufSk7XG5kZWZpbmVFbnZpcm9ubWVudCh7XG4gIHR5cGU6IFwiYXJyYXlcIixcbiAgbmFtZXM6IFtcInN1YmFycmF5XCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDFcbiAgfSxcblxuICBoYW5kbGVyKGNvbnRleHQsIGFyZ3MpIHtcbiAgICAvLyBQYXJzaW5nIG9mIHtzdWJhcnJheX0gaXMgc2ltaWxhciB0byB7YXJyYXl9XG4gICAgY29uc3Qgc3ltTm9kZSA9IGNoZWNrU3ltYm9sTm9kZVR5cGUoYXJnc1swXSk7XG4gICAgY29uc3QgY29sYWxpZ24gPSBzeW1Ob2RlID8gW2FyZ3NbMF1dIDogYXNzZXJ0Tm9kZVR5cGUoYXJnc1swXSwgXCJvcmRncm91cFwiKS5ib2R5O1xuICAgIGNvbnN0IGNvbHMgPSBjb2xhbGlnbi5tYXAoZnVuY3Rpb24gKG5kZSkge1xuICAgICAgY29uc3Qgbm9kZSA9IGFzc2VydFN5bWJvbE5vZGVUeXBlKG5kZSk7XG4gICAgICBjb25zdCBjYSA9IG5vZGUudGV4dDsgLy8ge3N1YmFycmF5fSBvbmx5IHJlY29nbml6ZXMgXCJsXCIgJiBcImNcIlxuXG4gICAgICBpZiAoXCJsY1wiLmluZGV4T2YoY2EpICE9PSAtMSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHR5cGU6IFwiYWxpZ25cIixcbiAgICAgICAgICBhbGlnbjogY2FcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiVW5rbm93biBjb2x1bW4gYWxpZ25tZW50OiBcIiArIGNhLCBuZGUpO1xuICAgIH0pO1xuXG4gICAgaWYgKGNvbHMubGVuZ3RoID4gMSkge1xuICAgICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwie3N1YmFycmF5fSBjYW4gY29udGFpbiBvbmx5IG9uZSBjb2x1bW5cIik7XG4gICAgfVxuXG4gICAgbGV0IHJlcyA9IHtcbiAgICAgIGNvbHMsXG4gICAgICBoc2tpcEJlZm9yZUFuZEFmdGVyOiBmYWxzZSxcbiAgICAgIGFycmF5c3RyZXRjaDogMC41XG4gICAgfTtcbiAgICByZXMgPSBwYXJzZUFycmF5KGNvbnRleHQucGFyc2VyLCByZXMsIFwic2NyaXB0XCIpO1xuXG4gICAgaWYgKHJlcy5ib2R5Lmxlbmd0aCA+IDAgJiYgcmVzLmJvZHlbMF0ubGVuZ3RoID4gMSkge1xuICAgICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwie3N1YmFycmF5fSBjYW4gY29udGFpbiBvbmx5IG9uZSBjb2x1bW5cIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcztcbiAgfSxcblxuICBodG1sQnVpbGRlcjogYXJyYXlfaHRtbEJ1aWxkZXIsXG4gIG1hdGhtbEJ1aWxkZXI6IGFycmF5X21hdGhtbEJ1aWxkZXJcbn0pOyAvLyBBIGNhc2VzIGVudmlyb25tZW50IChpbiBhbXNtYXRoLnN0eSkgaXMgYWxtb3N0IGVxdWl2YWxlbnQgdG9cbi8vIFxcZGVmXFxhcnJheXN0cmV0Y2h7MS4yfSVcbi8vIFxcbGVmdFxce1xcYmVnaW57YXJyYXl9e0B7fWxAe1xccXVhZH1sQHt9fSDigKYgXFxlbmR7YXJyYXl9XFxyaWdodC5cbi8vIHtkY2FzZXN9IGlzIGEge2Nhc2VzfSBlbnZpcm9ubWVudCB3aGVyZSBjZWxscyBhcmUgc2V0IGluIFxcZGlzcGxheXN0eWxlLFxuLy8gYXMgZGVmaW5lZCBpbiBtYXRodG9vbHMuc3R5LlxuLy8ge3JjYXNlc30gaXMgYW5vdGhlciBtYXRodG9vbHMgZW52aXJvbm1lbnQuIEl0J3MgYnJhY2UgaXMgb24gdGhlIHJpZ2h0IHNpZGUuXG5cbmRlZmluZUVudmlyb25tZW50KHtcbiAgdHlwZTogXCJhcnJheVwiLFxuICBuYW1lczogW1wiY2FzZXNcIiwgXCJkY2FzZXNcIiwgXCJyY2FzZXNcIiwgXCJkcmNhc2VzXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDBcbiAgfSxcblxuICBoYW5kbGVyKGNvbnRleHQpIHtcbiAgICBjb25zdCBwYXlsb2FkID0ge1xuICAgICAgYXJyYXlzdHJldGNoOiAxLjIsXG4gICAgICBjb2xzOiBbe1xuICAgICAgICB0eXBlOiBcImFsaWduXCIsXG4gICAgICAgIGFsaWduOiBcImxcIixcbiAgICAgICAgcHJlZ2FwOiAwLFxuICAgICAgICAvLyBUT0RPKGtldmluYikgZ2V0IHRoZSBjdXJyZW50IHN0eWxlLlxuICAgICAgICAvLyBGb3Igbm93IHdlIHVzZSB0aGUgbWV0cmljcyBmb3IgVEVYVCBzdHlsZSB3aGljaCBpcyB3aGF0IHdlIHdlcmVcbiAgICAgICAgLy8gZG9pbmcgYmVmb3JlLiAgQmVmb3JlIGF0dGVtcHRpbmcgdG8gZ2V0IHRoZSBjdXJyZW50IHN0eWxlIHdlXG4gICAgICAgIC8vIHNob3VsZCBsb29rIGF0IFRlWCdzIGJlaGF2aW9yIGVzcGVjaWFsbHkgZm9yIFxcb3ZlciBhbmQgbWF0cmljZXMuXG4gICAgICAgIHBvc3RnYXA6IDEuMFxuICAgICAgICAvKiAxZW0gcXVhZCAqL1xuXG4gICAgICB9LCB7XG4gICAgICAgIHR5cGU6IFwiYWxpZ25cIixcbiAgICAgICAgYWxpZ246IFwibFwiLFxuICAgICAgICBwcmVnYXA6IDAsXG4gICAgICAgIHBvc3RnYXA6IDBcbiAgICAgIH1dXG4gICAgfTtcbiAgICBjb25zdCByZXMgPSBwYXJzZUFycmF5KGNvbnRleHQucGFyc2VyLCBwYXlsb2FkLCBkQ2VsbFN0eWxlKGNvbnRleHQuZW52TmFtZSkpO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImxlZnRyaWdodFwiLFxuICAgICAgbW9kZTogY29udGV4dC5tb2RlLFxuICAgICAgYm9keTogW3Jlc10sXG4gICAgICBsZWZ0OiBjb250ZXh0LmVudk5hbWUuaW5kZXhPZihcInJcIikgPiAtMSA/IFwiLlwiIDogXCJcXFxce1wiLFxuICAgICAgcmlnaHQ6IGNvbnRleHQuZW52TmFtZS5pbmRleE9mKFwiclwiKSA+IC0xID8gXCJcXFxcfVwiIDogXCIuXCIsXG4gICAgICByaWdodENvbG9yOiB1bmRlZmluZWRcbiAgICB9O1xuICB9LFxuXG4gIGh0bWxCdWlsZGVyOiBhcnJheV9odG1sQnVpbGRlcixcbiAgbWF0aG1sQnVpbGRlcjogYXJyYXlfbWF0aG1sQnVpbGRlclxufSk7IC8vIEluIHRoZSBhbGlnbiBlbnZpcm9ubWVudCwgb25lIHVzZXMgYW1wZXJzYW5kcywgJiwgdG8gc3BlY2lmeSBudW1iZXIgb2Zcbi8vIGNvbHVtbnMgaW4gZWFjaCByb3csIGFuZCB0byBsb2NhdGUgc3BhY2luZyBiZXR3ZWVuIGVhY2ggY29sdW1uLlxuLy8gYWxpZ24gZ2V0cyBhdXRvbWF0aWMgbnVtYmVyaW5nLiBhbGlnbiogYW5kIGFsaWduZWQgZG8gbm90LlxuLy8gVGhlIGFsaWduZWRhdCBlbnZpcm9ubWVudCBjYW4gYmUgdXNlZCBpbiBtYXRoIG1vZGUuXG4vLyBOb3RlIHRoYXQgd2UgYXNzdW1lIFxcbm9tYWxsaW5lc2tpcGxpbWl0IHRvIGJlIHplcm8sXG4vLyBzbyB0aGF0IFxcc3RydXRAIGlzIHRoZSBzYW1lIGFzIFxcc3RydXQuXG5cbmRlZmluZUVudmlyb25tZW50KHtcbiAgdHlwZTogXCJhcnJheVwiLFxuICBuYW1lczogW1wiYWxpZ25cIiwgXCJhbGlnbipcIiwgXCJhbGlnbmVkXCIsIFwic3BsaXRcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMFxuICB9LFxuICBoYW5kbGVyOiBhbGlnbmVkSGFuZGxlcixcbiAgaHRtbEJ1aWxkZXI6IGFycmF5X2h0bWxCdWlsZGVyLFxuICBtYXRobWxCdWlsZGVyOiBhcnJheV9tYXRobWxCdWlsZGVyXG59KTsgLy8gQSBnYXRoZXJlZCBlbnZpcm9ubWVudCBpcyBsaWtlIGFuIGFycmF5IGVudmlyb25tZW50IHdpdGggb25lIGNlbnRlcmVkXG4vLyBjb2x1bW4sIGJ1dCB3aGVyZSByb3dzIGFyZSBjb25zaWRlcmVkIGxpbmVzIHNvIGdldCBcXGpvdCBsaW5lIHNwYWNpbmdcbi8vIGFuZCBjb250ZW50cyBhcmUgc2V0IGluIFxcZGlzcGxheXN0eWxlLlxuXG5kZWZpbmVFbnZpcm9ubWVudCh7XG4gIHR5cGU6IFwiYXJyYXlcIixcbiAgbmFtZXM6IFtcImdhdGhlcmVkXCIsIFwiZ2F0aGVyXCIsIFwiZ2F0aGVyKlwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAwXG4gIH0sXG5cbiAgaGFuZGxlcihjb250ZXh0KSB7XG4gICAgaWYgKHV0aWxzLmNvbnRhaW5zKFtcImdhdGhlclwiLCBcImdhdGhlcipcIl0sIGNvbnRleHQuZW52TmFtZSkpIHtcbiAgICAgIHZhbGlkYXRlQW1zRW52aXJvbm1lbnRDb250ZXh0KGNvbnRleHQpO1xuICAgIH1cblxuICAgIGNvbnN0IHJlcyA9IHtcbiAgICAgIGNvbHM6IFt7XG4gICAgICAgIHR5cGU6IFwiYWxpZ25cIixcbiAgICAgICAgYWxpZ246IFwiY1wiXG4gICAgICB9XSxcbiAgICAgIGFkZEpvdDogdHJ1ZSxcbiAgICAgIGNvbFNlcGFyYXRpb25UeXBlOiBcImdhdGhlclwiLFxuICAgICAgYXV0b1RhZzogZ2V0QXV0b1RhZyhjb250ZXh0LmVudk5hbWUpLFxuICAgICAgZW1wdHlTaW5nbGVSb3c6IHRydWUsXG4gICAgICBsZXFubzogY29udGV4dC5wYXJzZXIuc2V0dGluZ3MubGVxbm9cbiAgICB9O1xuICAgIHJldHVybiBwYXJzZUFycmF5KGNvbnRleHQucGFyc2VyLCByZXMsIFwiZGlzcGxheVwiKTtcbiAgfSxcblxuICBodG1sQnVpbGRlcjogYXJyYXlfaHRtbEJ1aWxkZXIsXG4gIG1hdGhtbEJ1aWxkZXI6IGFycmF5X21hdGhtbEJ1aWxkZXJcbn0pOyAvLyBhbGlnbmF0IGVudmlyb25tZW50IGlzIGxpa2UgYW4gYWxpZ24gZW52aXJvbm1lbnQsIGJ1dCBvbmUgbXVzdCBleHBsaWNpdGx5XG4vLyBzcGVjaWZ5IG1heGltdW0gbnVtYmVyIG9mIGNvbHVtbnMgaW4gZWFjaCByb3csIGFuZCBjYW4gYWRqdXN0IHNwYWNpbmcgYmV0d2VlblxuLy8gZWFjaCBjb2x1bW5zLlxuXG5kZWZpbmVFbnZpcm9ubWVudCh7XG4gIHR5cGU6IFwiYXJyYXlcIixcbiAgbmFtZXM6IFtcImFsaWduYXRcIiwgXCJhbGlnbmF0KlwiLCBcImFsaWduZWRhdFwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxXG4gIH0sXG4gIGhhbmRsZXI6IGFsaWduZWRIYW5kbGVyLFxuICBodG1sQnVpbGRlcjogYXJyYXlfaHRtbEJ1aWxkZXIsXG4gIG1hdGhtbEJ1aWxkZXI6IGFycmF5X21hdGhtbEJ1aWxkZXJcbn0pO1xuZGVmaW5lRW52aXJvbm1lbnQoe1xuICB0eXBlOiBcImFycmF5XCIsXG4gIG5hbWVzOiBbXCJlcXVhdGlvblwiLCBcImVxdWF0aW9uKlwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAwXG4gIH0sXG5cbiAgaGFuZGxlcihjb250ZXh0KSB7XG4gICAgdmFsaWRhdGVBbXNFbnZpcm9ubWVudENvbnRleHQoY29udGV4dCk7XG4gICAgY29uc3QgcmVzID0ge1xuICAgICAgYXV0b1RhZzogZ2V0QXV0b1RhZyhjb250ZXh0LmVudk5hbWUpLFxuICAgICAgZW1wdHlTaW5nbGVSb3c6IHRydWUsXG4gICAgICBzaW5nbGVSb3c6IHRydWUsXG4gICAgICBtYXhOdW1Db2xzOiAxLFxuICAgICAgbGVxbm86IGNvbnRleHQucGFyc2VyLnNldHRpbmdzLmxlcW5vXG4gICAgfTtcbiAgICByZXR1cm4gcGFyc2VBcnJheShjb250ZXh0LnBhcnNlciwgcmVzLCBcImRpc3BsYXlcIik7XG4gIH0sXG5cbiAgaHRtbEJ1aWxkZXI6IGFycmF5X2h0bWxCdWlsZGVyLFxuICBtYXRobWxCdWlsZGVyOiBhcnJheV9tYXRobWxCdWlsZGVyXG59KTtcbmRlZmluZUVudmlyb25tZW50KHtcbiAgdHlwZTogXCJhcnJheVwiLFxuICBuYW1lczogW1wiQ0RcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMFxuICB9LFxuXG4gIGhhbmRsZXIoY29udGV4dCkge1xuICAgIHZhbGlkYXRlQW1zRW52aXJvbm1lbnRDb250ZXh0KGNvbnRleHQpO1xuICAgIHJldHVybiBwYXJzZUNEKGNvbnRleHQucGFyc2VyKTtcbiAgfSxcblxuICBodG1sQnVpbGRlcjogYXJyYXlfaHRtbEJ1aWxkZXIsXG4gIG1hdGhtbEJ1aWxkZXI6IGFycmF5X21hdGhtbEJ1aWxkZXJcbn0pO1xuZGVmaW5lTWFjcm8oXCJcXFxcbm9udW1iZXJcIiwgXCJcXFxcZ2RlZlxcXFxAZXFuc3d7MH1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxub3RhZ1wiLCBcIlxcXFxub251bWJlclwiKTsgLy8gQ2F0Y2ggXFxobGluZSBvdXRzaWRlIGFycmF5IGVudmlyb25tZW50XG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJ0ZXh0XCIsXG4gIC8vIERvZXNuJ3QgbWF0dGVyIHdoYXQgdGhpcyBpcy5cbiAgbmFtZXM6IFtcIlxcXFxobGluZVwiLCBcIlxcXFxoZGFzaGxpbmVcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMCxcbiAgICBhbGxvd2VkSW5UZXh0OiB0cnVlLFxuICAgIGFsbG93ZWRJbk1hdGg6IHRydWVcbiAgfSxcblxuICBoYW5kbGVyKGNvbnRleHQsIGFyZ3MpIHtcbiAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoY29udGV4dC5mdW5jTmFtZSArIFwiIHZhbGlkIG9ubHkgd2l0aGluIGFycmF5IGVudmlyb25tZW50XCIpO1xuICB9XG5cbn0pO1xuOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Vudmlyb25tZW50cy5qc1xuXG5jb25zdCBlbnZpcm9ubWVudHMgPSBfZW52aXJvbm1lbnRzO1xuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3JjX2Vudmlyb25tZW50cyA9IChlbnZpcm9ubWVudHMpOyAvLyBBbGwgZW52aXJvbm1lbnQgZGVmaW5pdGlvbnMgc2hvdWxkIGJlIGltcG9ydGVkIGJlbG93XG5cblxuOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9ucy9lbnZpcm9ubWVudC5qc1xuXG5cblxuIC8vIEVudmlyb25tZW50IGRlbGltaXRlcnMuIEhUTUwvTWF0aE1MIHJlbmRlcmluZyBpcyBkZWZpbmVkIGluIHRoZSBjb3JyZXNwb25kaW5nXG4vLyBkZWZpbmVFbnZpcm9ubWVudCBkZWZpbml0aW9ucy5cblxuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcImVudmlyb25tZW50XCIsXG4gIG5hbWVzOiBbXCJcXFxcYmVnaW5cIiwgXCJcXFxcZW5kXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDEsXG4gICAgYXJnVHlwZXM6IFtcInRleHRcIl1cbiAgfSxcblxuICBoYW5kbGVyKF9yZWYsIGFyZ3MpIHtcbiAgICBsZXQge1xuICAgICAgcGFyc2VyLFxuICAgICAgZnVuY05hbWVcbiAgICB9ID0gX3JlZjtcbiAgICBjb25zdCBuYW1lR3JvdXAgPSBhcmdzWzBdO1xuXG4gICAgaWYgKG5hbWVHcm91cC50eXBlICE9PSBcIm9yZGdyb3VwXCIpIHtcbiAgICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIkludmFsaWQgZW52aXJvbm1lbnQgbmFtZVwiLCBuYW1lR3JvdXApO1xuICAgIH1cblxuICAgIGxldCBlbnZOYW1lID0gXCJcIjtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbmFtZUdyb3VwLmJvZHkubGVuZ3RoOyArK2kpIHtcbiAgICAgIGVudk5hbWUgKz0gYXNzZXJ0Tm9kZVR5cGUobmFtZUdyb3VwLmJvZHlbaV0sIFwidGV4dG9yZFwiKS50ZXh0O1xuICAgIH1cblxuICAgIGlmIChmdW5jTmFtZSA9PT0gXCJcXFxcYmVnaW5cIikge1xuICAgICAgLy8gYmVnaW4uLi5lbmQgaXMgc2ltaWxhciB0byBsZWZ0Li4ucmlnaHRcbiAgICAgIGlmICghc3JjX2Vudmlyb25tZW50cy5oYXNPd25Qcm9wZXJ0eShlbnZOYW1lKSkge1xuICAgICAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJObyBzdWNoIGVudmlyb25tZW50OiBcIiArIGVudk5hbWUsIG5hbWVHcm91cCk7XG4gICAgICB9IC8vIEJ1aWxkIHRoZSBlbnZpcm9ubWVudCBvYmplY3QuIEFyZ3VtZW50cyBhbmQgb3RoZXIgaW5mb3JtYXRpb24gd2lsbFxuICAgICAgLy8gYmUgbWFkZSBhdmFpbGFibGUgdG8gdGhlIGJlZ2luIGFuZCBlbmQgbWV0aG9kcyB1c2luZyBwcm9wZXJ0aWVzLlxuXG5cbiAgICAgIGNvbnN0IGVudiA9IHNyY19lbnZpcm9ubWVudHNbZW52TmFtZV07XG4gICAgICBjb25zdCB7XG4gICAgICAgIGFyZ3MsXG4gICAgICAgIG9wdEFyZ3NcbiAgICAgIH0gPSBwYXJzZXIucGFyc2VBcmd1bWVudHMoXCJcXFxcYmVnaW57XCIgKyBlbnZOYW1lICsgXCJ9XCIsIGVudik7XG4gICAgICBjb25zdCBjb250ZXh0ID0ge1xuICAgICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgICAgZW52TmFtZSxcbiAgICAgICAgcGFyc2VyXG4gICAgICB9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gZW52LmhhbmRsZXIoY29udGV4dCwgYXJncywgb3B0QXJncyk7XG4gICAgICBwYXJzZXIuZXhwZWN0KFwiXFxcXGVuZFwiLCBmYWxzZSk7XG4gICAgICBjb25zdCBlbmROYW1lVG9rZW4gPSBwYXJzZXIubmV4dFRva2VuO1xuICAgICAgY29uc3QgZW5kID0gYXNzZXJ0Tm9kZVR5cGUocGFyc2VyLnBhcnNlRnVuY3Rpb24oKSwgXCJlbnZpcm9ubWVudFwiKTtcblxuICAgICAgaWYgKGVuZC5uYW1lICE9PSBlbnZOYW1lKSB7XG4gICAgICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIk1pc21hdGNoOiBcXFxcYmVnaW57XCIgKyBlbnZOYW1lICsgXCJ9IG1hdGNoZWQgYnkgXFxcXGVuZHtcIiArIGVuZC5uYW1lICsgXCJ9XCIsIGVuZE5hbWVUb2tlbik7XG4gICAgICB9IC8vICRGbG93Rml4TWUsIFwiZW52aXJvbm1lbnRcIiBoYW5kbGVyIHJldHVybnMgYW4gZW52aXJvbm1lbnQgUGFyc2VOb2RlXG5cblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJlbnZpcm9ubWVudFwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBuYW1lOiBlbnZOYW1lLFxuICAgICAgbmFtZUdyb3VwXG4gICAgfTtcbiAgfVxuXG59KTtcbjsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbnMvZm9udC5qc1xuLy8gVE9ETyhrZXZpbmIpOiBpbXBsZW1lbnQgXFxcXHNsIGFuZCBcXFxcc2NcblxuXG5cblxuXG5cbmNvbnN0IGZvbnRfaHRtbEJ1aWxkZXIgPSAoZ3JvdXAsIG9wdGlvbnMpID0+IHtcbiAgY29uc3QgZm9udCA9IGdyb3VwLmZvbnQ7XG4gIGNvbnN0IG5ld09wdGlvbnMgPSBvcHRpb25zLndpdGhGb250KGZvbnQpO1xuICByZXR1cm4gYnVpbGRHcm91cChncm91cC5ib2R5LCBuZXdPcHRpb25zKTtcbn07XG5cbmNvbnN0IGZvbnRfbWF0aG1sQnVpbGRlciA9IChncm91cCwgb3B0aW9ucykgPT4ge1xuICBjb25zdCBmb250ID0gZ3JvdXAuZm9udDtcbiAgY29uc3QgbmV3T3B0aW9ucyA9IG9wdGlvbnMud2l0aEZvbnQoZm9udCk7XG4gIHJldHVybiBidWlsZE1hdGhNTF9idWlsZEdyb3VwKGdyb3VwLmJvZHksIG5ld09wdGlvbnMpO1xufTtcblxuY29uc3QgZm9udEFsaWFzZXMgPSB7XG4gIFwiXFxcXEJiYlwiOiBcIlxcXFxtYXRoYmJcIixcbiAgXCJcXFxcYm9sZFwiOiBcIlxcXFxtYXRoYmZcIixcbiAgXCJcXFxcZnJha1wiOiBcIlxcXFxtYXRoZnJha1wiLFxuICBcIlxcXFxibVwiOiBcIlxcXFxib2xkc3ltYm9sXCJcbn07XG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwiZm9udFwiLFxuICBuYW1lczogWy8vIHN0eWxlcywgZXhjZXB0IFxcYm9sZHN5bWJvbCBkZWZpbmVkIGJlbG93XG4gIFwiXFxcXG1hdGhybVwiLCBcIlxcXFxtYXRoaXRcIiwgXCJcXFxcbWF0aGJmXCIsIFwiXFxcXG1hdGhub3JtYWxcIiwgXCJcXFxcbWF0aHNmaXRcIiwgLy8gZmFtaWxpZXNcbiAgXCJcXFxcbWF0aGJiXCIsIFwiXFxcXG1hdGhjYWxcIiwgXCJcXFxcbWF0aGZyYWtcIiwgXCJcXFxcbWF0aHNjclwiLCBcIlxcXFxtYXRoc2ZcIiwgXCJcXFxcbWF0aHR0XCIsIC8vIGFsaWFzZXMsIGV4Y2VwdCBcXGJtIGRlZmluZWQgYmVsb3dcbiAgXCJcXFxcQmJiXCIsIFwiXFxcXGJvbGRcIiwgXCJcXFxcZnJha1wiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxLFxuICAgIGFsbG93ZWRJbkFyZ3VtZW50OiB0cnVlXG4gIH0sXG4gIGhhbmRsZXI6IChfcmVmLCBhcmdzKSA9PiB7XG4gICAgbGV0IHtcbiAgICAgIHBhcnNlcixcbiAgICAgIGZ1bmNOYW1lXG4gICAgfSA9IF9yZWY7XG4gICAgY29uc3QgYm9keSA9IG5vcm1hbGl6ZUFyZ3VtZW50KGFyZ3NbMF0pO1xuICAgIGxldCBmdW5jID0gZnVuY05hbWU7XG5cbiAgICBpZiAoZnVuYyBpbiBmb250QWxpYXNlcykge1xuICAgICAgZnVuYyA9IGZvbnRBbGlhc2VzW2Z1bmNdO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImZvbnRcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgZm9udDogZnVuYy5zbGljZSgxKSxcbiAgICAgIGJvZHlcbiAgICB9O1xuICB9LFxuICBodG1sQnVpbGRlcjogZm9udF9odG1sQnVpbGRlcixcbiAgbWF0aG1sQnVpbGRlcjogZm9udF9tYXRobWxCdWlsZGVyXG59KTtcbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJtY2xhc3NcIixcbiAgbmFtZXM6IFtcIlxcXFxib2xkc3ltYm9sXCIsIFwiXFxcXGJtXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDFcbiAgfSxcbiAgaGFuZGxlcjogKF9yZWYyLCBhcmdzKSA9PiB7XG4gICAgbGV0IHtcbiAgICAgIHBhcnNlclxuICAgIH0gPSBfcmVmMjtcbiAgICBjb25zdCBib2R5ID0gYXJnc1swXTtcbiAgICBjb25zdCBpc0NoYXJhY3RlckJveCA9IHV0aWxzLmlzQ2hhcmFjdGVyQm94KGJvZHkpOyAvLyBhbXNic3kuc3R5J3MgXFxib2xkc3ltYm9sIHVzZXMgXFxiaW5yZWwgc3BhY2luZyB0byBpbmhlcml0IHRoZVxuICAgIC8vIGFyZ3VtZW50J3MgYmlufHJlbHxvcmQgc3RhdHVzXG5cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJtY2xhc3NcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgbWNsYXNzOiBiaW5yZWxDbGFzcyhib2R5KSxcbiAgICAgIGJvZHk6IFt7XG4gICAgICAgIHR5cGU6IFwiZm9udFwiLFxuICAgICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgICAgZm9udDogXCJib2xkc3ltYm9sXCIsXG4gICAgICAgIGJvZHlcbiAgICAgIH1dLFxuICAgICAgaXNDaGFyYWN0ZXJCb3g6IGlzQ2hhcmFjdGVyQm94XG4gICAgfTtcbiAgfVxufSk7IC8vIE9sZCBmb250IGNoYW5naW5nIGZ1bmN0aW9uc1xuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwiZm9udFwiLFxuICBuYW1lczogW1wiXFxcXHJtXCIsIFwiXFxcXHNmXCIsIFwiXFxcXHR0XCIsIFwiXFxcXGJmXCIsIFwiXFxcXGl0XCIsIFwiXFxcXGNhbFwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAwLFxuICAgIGFsbG93ZWRJblRleHQ6IHRydWVcbiAgfSxcbiAgaGFuZGxlcjogKF9yZWYzLCBhcmdzKSA9PiB7XG4gICAgbGV0IHtcbiAgICAgIHBhcnNlcixcbiAgICAgIGZ1bmNOYW1lLFxuICAgICAgYnJlYWtPblRva2VuVGV4dFxuICAgIH0gPSBfcmVmMztcbiAgICBjb25zdCB7XG4gICAgICBtb2RlXG4gICAgfSA9IHBhcnNlcjtcbiAgICBjb25zdCBib2R5ID0gcGFyc2VyLnBhcnNlRXhwcmVzc2lvbih0cnVlLCBicmVha09uVG9rZW5UZXh0KTtcbiAgICBjb25zdCBzdHlsZSA9IFwibWF0aFwiICsgZnVuY05hbWUuc2xpY2UoMSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiZm9udFwiLFxuICAgICAgbW9kZTogbW9kZSxcbiAgICAgIGZvbnQ6IHN0eWxlLFxuICAgICAgYm9keToge1xuICAgICAgICB0eXBlOiBcIm9yZGdyb3VwXCIsXG4gICAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgICBib2R5XG4gICAgICB9XG4gICAgfTtcbiAgfSxcbiAgaHRtbEJ1aWxkZXI6IGZvbnRfaHRtbEJ1aWxkZXIsXG4gIG1hdGhtbEJ1aWxkZXI6IGZvbnRfbWF0aG1sQnVpbGRlclxufSk7XG47Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb25zL2dlbmZyYWMuanNcblxuXG5cblxuXG5cblxuXG5cblxuXG5jb25zdCBhZGp1c3RTdHlsZSA9IChzaXplLCBvcmlnaW5hbFN0eWxlKSA9PiB7XG4gIC8vIEZpZ3VyZSBvdXQgd2hhdCBzdHlsZSB0aGlzIGZyYWN0aW9uIHNob3VsZCBiZSBpbiBiYXNlZCBvbiB0aGVcbiAgLy8gZnVuY3Rpb24gdXNlZFxuICBsZXQgc3R5bGUgPSBvcmlnaW5hbFN0eWxlO1xuXG4gIGlmIChzaXplID09PSBcImRpc3BsYXlcIikge1xuICAgIC8vIEdldCBkaXNwbGF5IHN0eWxlIGFzIGEgZGVmYXVsdC5cbiAgICAvLyBJZiBpbmNvbWluZyBzdHlsZSBpcyBzdWIvc3VwLCB1c2Ugc3R5bGUudGV4dCgpIHRvIGdldCBjb3JyZWN0IHNpemUuXG4gICAgc3R5bGUgPSBzdHlsZS5pZCA+PSBzcmNfU3R5bGUuU0NSSVBULmlkID8gc3R5bGUudGV4dCgpIDogc3JjX1N0eWxlLkRJU1BMQVk7XG4gIH0gZWxzZSBpZiAoc2l6ZSA9PT0gXCJ0ZXh0XCIgJiYgc3R5bGUuc2l6ZSA9PT0gc3JjX1N0eWxlLkRJU1BMQVkuc2l6ZSkge1xuICAgIC8vIFdlJ3JlIGluIGEgXFx0ZnJhYyBidXQgaW5jb21pbmcgc3R5bGUgaXMgZGlzcGxheXN0eWxlLCBzbzpcbiAgICBzdHlsZSA9IHNyY19TdHlsZS5URVhUO1xuICB9IGVsc2UgaWYgKHNpemUgPT09IFwic2NyaXB0XCIpIHtcbiAgICBzdHlsZSA9IHNyY19TdHlsZS5TQ1JJUFQ7XG4gIH0gZWxzZSBpZiAoc2l6ZSA9PT0gXCJzY3JpcHRzY3JpcHRcIikge1xuICAgIHN0eWxlID0gc3JjX1N0eWxlLlNDUklQVFNDUklQVDtcbiAgfVxuXG4gIHJldHVybiBzdHlsZTtcbn07XG5cbmNvbnN0IGdlbmZyYWNfaHRtbEJ1aWxkZXIgPSAoZ3JvdXAsIG9wdGlvbnMpID0+IHtcbiAgLy8gRnJhY3Rpb25zIGFyZSBoYW5kbGVkIGluIHRoZSBUZVhib29rIG9uIHBhZ2VzIDQ0NC00NDUsIHJ1bGVzIDE1KGEtZSkuXG4gIGNvbnN0IHN0eWxlID0gYWRqdXN0U3R5bGUoZ3JvdXAuc2l6ZSwgb3B0aW9ucy5zdHlsZSk7XG4gIGNvbnN0IG5zdHlsZSA9IHN0eWxlLmZyYWNOdW0oKTtcbiAgY29uc3QgZHN0eWxlID0gc3R5bGUuZnJhY0RlbigpO1xuICBsZXQgbmV3T3B0aW9ucztcbiAgbmV3T3B0aW9ucyA9IG9wdGlvbnMuaGF2aW5nU3R5bGUobnN0eWxlKTtcbiAgY29uc3QgbnVtZXJtID0gYnVpbGRHcm91cChncm91cC5udW1lciwgbmV3T3B0aW9ucywgb3B0aW9ucyk7XG5cbiAgaWYgKGdyb3VwLmNvbnRpbnVlZCkge1xuICAgIC8vIFxcY2ZyYWMgaW5zZXJ0cyBhIFxcc3RydXQgaW50byB0aGUgbnVtZXJhdG9yLlxuICAgIC8vIEdldCBcXHN0cnV0IGRpbWVuc2lvbnMgZnJvbSBUZVhib29rIHBhZ2UgMzUzLlxuICAgIGNvbnN0IGhTdHJ1dCA9IDguNSAvIG9wdGlvbnMuZm9udE1ldHJpY3MoKS5wdFBlckVtO1xuICAgIGNvbnN0IGRTdHJ1dCA9IDMuNSAvIG9wdGlvbnMuZm9udE1ldHJpY3MoKS5wdFBlckVtO1xuICAgIG51bWVybS5oZWlnaHQgPSBudW1lcm0uaGVpZ2h0IDwgaFN0cnV0ID8gaFN0cnV0IDogbnVtZXJtLmhlaWdodDtcbiAgICBudW1lcm0uZGVwdGggPSBudW1lcm0uZGVwdGggPCBkU3RydXQgPyBkU3RydXQgOiBudW1lcm0uZGVwdGg7XG4gIH1cblxuICBuZXdPcHRpb25zID0gb3B0aW9ucy5oYXZpbmdTdHlsZShkc3R5bGUpO1xuICBjb25zdCBkZW5vbW0gPSBidWlsZEdyb3VwKGdyb3VwLmRlbm9tLCBuZXdPcHRpb25zLCBvcHRpb25zKTtcbiAgbGV0IHJ1bGU7XG4gIGxldCBydWxlV2lkdGg7XG4gIGxldCBydWxlU3BhY2luZztcblxuICBpZiAoZ3JvdXAuaGFzQmFyTGluZSkge1xuICAgIGlmIChncm91cC5iYXJTaXplKSB7XG4gICAgICBydWxlV2lkdGggPSBjYWxjdWxhdGVTaXplKGdyb3VwLmJhclNpemUsIG9wdGlvbnMpO1xuICAgICAgcnVsZSA9IGJ1aWxkQ29tbW9uLm1ha2VMaW5lU3BhbihcImZyYWMtbGluZVwiLCBvcHRpb25zLCBydWxlV2lkdGgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBydWxlID0gYnVpbGRDb21tb24ubWFrZUxpbmVTcGFuKFwiZnJhYy1saW5lXCIsIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIHJ1bGVXaWR0aCA9IHJ1bGUuaGVpZ2h0O1xuICAgIHJ1bGVTcGFjaW5nID0gcnVsZS5oZWlnaHQ7XG4gIH0gZWxzZSB7XG4gICAgcnVsZSA9IG51bGw7XG4gICAgcnVsZVdpZHRoID0gMDtcbiAgICBydWxlU3BhY2luZyA9IG9wdGlvbnMuZm9udE1ldHJpY3MoKS5kZWZhdWx0UnVsZVRoaWNrbmVzcztcbiAgfSAvLyBSdWxlIDE1YlxuXG5cbiAgbGV0IG51bVNoaWZ0O1xuICBsZXQgY2xlYXJhbmNlO1xuICBsZXQgZGVub21TaGlmdDtcblxuICBpZiAoc3R5bGUuc2l6ZSA9PT0gc3JjX1N0eWxlLkRJU1BMQVkuc2l6ZSB8fCBncm91cC5zaXplID09PSBcImRpc3BsYXlcIikge1xuICAgIG51bVNoaWZ0ID0gb3B0aW9ucy5mb250TWV0cmljcygpLm51bTE7XG5cbiAgICBpZiAocnVsZVdpZHRoID4gMCkge1xuICAgICAgY2xlYXJhbmNlID0gMyAqIHJ1bGVTcGFjaW5nO1xuICAgIH0gZWxzZSB7XG4gICAgICBjbGVhcmFuY2UgPSA3ICogcnVsZVNwYWNpbmc7XG4gICAgfVxuXG4gICAgZGVub21TaGlmdCA9IG9wdGlvbnMuZm9udE1ldHJpY3MoKS5kZW5vbTE7XG4gIH0gZWxzZSB7XG4gICAgaWYgKHJ1bGVXaWR0aCA+IDApIHtcbiAgICAgIG51bVNoaWZ0ID0gb3B0aW9ucy5mb250TWV0cmljcygpLm51bTI7XG4gICAgICBjbGVhcmFuY2UgPSBydWxlU3BhY2luZztcbiAgICB9IGVsc2Uge1xuICAgICAgbnVtU2hpZnQgPSBvcHRpb25zLmZvbnRNZXRyaWNzKCkubnVtMztcbiAgICAgIGNsZWFyYW5jZSA9IDMgKiBydWxlU3BhY2luZztcbiAgICB9XG5cbiAgICBkZW5vbVNoaWZ0ID0gb3B0aW9ucy5mb250TWV0cmljcygpLmRlbm9tMjtcbiAgfVxuXG4gIGxldCBmcmFjO1xuXG4gIGlmICghcnVsZSkge1xuICAgIC8vIFJ1bGUgMTVjXG4gICAgY29uc3QgY2FuZGlkYXRlQ2xlYXJhbmNlID0gbnVtU2hpZnQgLSBudW1lcm0uZGVwdGggLSAoZGVub21tLmhlaWdodCAtIGRlbm9tU2hpZnQpO1xuXG4gICAgaWYgKGNhbmRpZGF0ZUNsZWFyYW5jZSA8IGNsZWFyYW5jZSkge1xuICAgICAgbnVtU2hpZnQgKz0gMC41ICogKGNsZWFyYW5jZSAtIGNhbmRpZGF0ZUNsZWFyYW5jZSk7XG4gICAgICBkZW5vbVNoaWZ0ICs9IDAuNSAqIChjbGVhcmFuY2UgLSBjYW5kaWRhdGVDbGVhcmFuY2UpO1xuICAgIH1cblxuICAgIGZyYWMgPSBidWlsZENvbW1vbi5tYWtlVkxpc3Qoe1xuICAgICAgcG9zaXRpb25UeXBlOiBcImluZGl2aWR1YWxTaGlmdFwiLFxuICAgICAgY2hpbGRyZW46IFt7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBkZW5vbW0sXG4gICAgICAgIHNoaWZ0OiBkZW5vbVNoaWZ0XG4gICAgICB9LCB7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBudW1lcm0sXG4gICAgICAgIHNoaWZ0OiAtbnVtU2hpZnRcbiAgICAgIH1dXG4gICAgfSwgb3B0aW9ucyk7XG4gIH0gZWxzZSB7XG4gICAgLy8gUnVsZSAxNWRcbiAgICBjb25zdCBheGlzSGVpZ2h0ID0gb3B0aW9ucy5mb250TWV0cmljcygpLmF4aXNIZWlnaHQ7XG5cbiAgICBpZiAobnVtU2hpZnQgLSBudW1lcm0uZGVwdGggLSAoYXhpc0hlaWdodCArIDAuNSAqIHJ1bGVXaWR0aCkgPCBjbGVhcmFuY2UpIHtcbiAgICAgIG51bVNoaWZ0ICs9IGNsZWFyYW5jZSAtIChudW1TaGlmdCAtIG51bWVybS5kZXB0aCAtIChheGlzSGVpZ2h0ICsgMC41ICogcnVsZVdpZHRoKSk7XG4gICAgfVxuXG4gICAgaWYgKGF4aXNIZWlnaHQgLSAwLjUgKiBydWxlV2lkdGggLSAoZGVub21tLmhlaWdodCAtIGRlbm9tU2hpZnQpIDwgY2xlYXJhbmNlKSB7XG4gICAgICBkZW5vbVNoaWZ0ICs9IGNsZWFyYW5jZSAtIChheGlzSGVpZ2h0IC0gMC41ICogcnVsZVdpZHRoIC0gKGRlbm9tbS5oZWlnaHQgLSBkZW5vbVNoaWZ0KSk7XG4gICAgfVxuXG4gICAgY29uc3QgbWlkU2hpZnQgPSAtKGF4aXNIZWlnaHQgLSAwLjUgKiBydWxlV2lkdGgpO1xuICAgIGZyYWMgPSBidWlsZENvbW1vbi5tYWtlVkxpc3Qoe1xuICAgICAgcG9zaXRpb25UeXBlOiBcImluZGl2aWR1YWxTaGlmdFwiLFxuICAgICAgY2hpbGRyZW46IFt7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBkZW5vbW0sXG4gICAgICAgIHNoaWZ0OiBkZW5vbVNoaWZ0XG4gICAgICB9LCB7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBydWxlLFxuICAgICAgICBzaGlmdDogbWlkU2hpZnRcbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IG51bWVybSxcbiAgICAgICAgc2hpZnQ6IC1udW1TaGlmdFxuICAgICAgfV1cbiAgICB9LCBvcHRpb25zKTtcbiAgfSAvLyBTaW5jZSB3ZSBtYW51YWxseSBjaGFuZ2UgdGhlIHN0eWxlIHNvbWV0aW1lcyAod2l0aCBcXGRmcmFjIG9yIFxcdGZyYWMpLFxuICAvLyBhY2NvdW50IGZvciB0aGUgcG9zc2libGUgc2l6ZSBjaGFuZ2UgaGVyZS5cblxuXG4gIG5ld09wdGlvbnMgPSBvcHRpb25zLmhhdmluZ1N0eWxlKHN0eWxlKTtcbiAgZnJhYy5oZWlnaHQgKj0gbmV3T3B0aW9ucy5zaXplTXVsdGlwbGllciAvIG9wdGlvbnMuc2l6ZU11bHRpcGxpZXI7XG4gIGZyYWMuZGVwdGggKj0gbmV3T3B0aW9ucy5zaXplTXVsdGlwbGllciAvIG9wdGlvbnMuc2l6ZU11bHRpcGxpZXI7IC8vIFJ1bGUgMTVlXG5cbiAgbGV0IGRlbGltU2l6ZTtcblxuICBpZiAoc3R5bGUuc2l6ZSA9PT0gc3JjX1N0eWxlLkRJU1BMQVkuc2l6ZSkge1xuICAgIGRlbGltU2l6ZSA9IG9wdGlvbnMuZm9udE1ldHJpY3MoKS5kZWxpbTE7XG4gIH0gZWxzZSBpZiAoc3R5bGUuc2l6ZSA9PT0gc3JjX1N0eWxlLlNDUklQVFNDUklQVC5zaXplKSB7XG4gICAgZGVsaW1TaXplID0gb3B0aW9ucy5oYXZpbmdTdHlsZShzcmNfU3R5bGUuU0NSSVBUKS5mb250TWV0cmljcygpLmRlbGltMjtcbiAgfSBlbHNlIHtcbiAgICBkZWxpbVNpemUgPSBvcHRpb25zLmZvbnRNZXRyaWNzKCkuZGVsaW0yO1xuICB9XG5cbiAgbGV0IGxlZnREZWxpbTtcbiAgbGV0IHJpZ2h0RGVsaW07XG5cbiAgaWYgKGdyb3VwLmxlZnREZWxpbSA9PSBudWxsKSB7XG4gICAgbGVmdERlbGltID0gbWFrZU51bGxEZWxpbWl0ZXIob3B0aW9ucywgW1wibW9wZW5cIl0pO1xuICB9IGVsc2Uge1xuICAgIGxlZnREZWxpbSA9IGRlbGltaXRlci5jdXN0b21TaXplZERlbGltKGdyb3VwLmxlZnREZWxpbSwgZGVsaW1TaXplLCB0cnVlLCBvcHRpb25zLmhhdmluZ1N0eWxlKHN0eWxlKSwgZ3JvdXAubW9kZSwgW1wibW9wZW5cIl0pO1xuICB9XG5cbiAgaWYgKGdyb3VwLmNvbnRpbnVlZCkge1xuICAgIHJpZ2h0RGVsaW0gPSBidWlsZENvbW1vbi5tYWtlU3BhbihbXSk7IC8vIHplcm8gd2lkdGggZm9yIFxcY2ZyYWNcbiAgfSBlbHNlIGlmIChncm91cC5yaWdodERlbGltID09IG51bGwpIHtcbiAgICByaWdodERlbGltID0gbWFrZU51bGxEZWxpbWl0ZXIob3B0aW9ucywgW1wibWNsb3NlXCJdKTtcbiAgfSBlbHNlIHtcbiAgICByaWdodERlbGltID0gZGVsaW1pdGVyLmN1c3RvbVNpemVkRGVsaW0oZ3JvdXAucmlnaHREZWxpbSwgZGVsaW1TaXplLCB0cnVlLCBvcHRpb25zLmhhdmluZ1N0eWxlKHN0eWxlKSwgZ3JvdXAubW9kZSwgW1wibWNsb3NlXCJdKTtcbiAgfVxuXG4gIHJldHVybiBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJtb3JkXCJdLmNvbmNhdChuZXdPcHRpb25zLnNpemluZ0NsYXNzZXMob3B0aW9ucykpLCBbbGVmdERlbGltLCBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJtZnJhY1wiXSwgW2ZyYWNdKSwgcmlnaHREZWxpbV0sIG9wdGlvbnMpO1xufTtcblxuY29uc3QgZ2VuZnJhY19tYXRobWxCdWlsZGVyID0gKGdyb3VwLCBvcHRpb25zKSA9PiB7XG4gIGxldCBub2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtZnJhY1wiLCBbYnVpbGRNYXRoTUxfYnVpbGRHcm91cChncm91cC5udW1lciwgb3B0aW9ucyksIGJ1aWxkTWF0aE1MX2J1aWxkR3JvdXAoZ3JvdXAuZGVub20sIG9wdGlvbnMpXSk7XG5cbiAgaWYgKCFncm91cC5oYXNCYXJMaW5lKSB7XG4gICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJsaW5ldGhpY2tuZXNzXCIsIFwiMHB4XCIpO1xuICB9IGVsc2UgaWYgKGdyb3VwLmJhclNpemUpIHtcbiAgICBjb25zdCBydWxlV2lkdGggPSBjYWxjdWxhdGVTaXplKGdyb3VwLmJhclNpemUsIG9wdGlvbnMpO1xuICAgIG5vZGUuc2V0QXR0cmlidXRlKFwibGluZXRoaWNrbmVzc1wiLCBtYWtlRW0ocnVsZVdpZHRoKSk7XG4gIH1cblxuICBjb25zdCBzdHlsZSA9IGFkanVzdFN0eWxlKGdyb3VwLnNpemUsIG9wdGlvbnMuc3R5bGUpO1xuXG4gIGlmIChzdHlsZS5zaXplICE9PSBvcHRpb25zLnN0eWxlLnNpemUpIHtcbiAgICBub2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtc3R5bGVcIiwgW25vZGVdKTtcbiAgICBjb25zdCBpc0Rpc3BsYXkgPSBzdHlsZS5zaXplID09PSBzcmNfU3R5bGUuRElTUExBWS5zaXplID8gXCJ0cnVlXCIgOiBcImZhbHNlXCI7XG4gICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJkaXNwbGF5c3R5bGVcIiwgaXNEaXNwbGF5KTtcbiAgICBub2RlLnNldEF0dHJpYnV0ZShcInNjcmlwdGxldmVsXCIsIFwiMFwiKTtcbiAgfVxuXG4gIGlmIChncm91cC5sZWZ0RGVsaW0gIT0gbnVsbCB8fCBncm91cC5yaWdodERlbGltICE9IG51bGwpIHtcbiAgICBjb25zdCB3aXRoRGVsaW1zID0gW107XG5cbiAgICBpZiAoZ3JvdXAubGVmdERlbGltICE9IG51bGwpIHtcbiAgICAgIGNvbnN0IGxlZnRPcCA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibW9cIiwgW25ldyBtYXRoTUxUcmVlLlRleHROb2RlKGdyb3VwLmxlZnREZWxpbS5yZXBsYWNlKFwiXFxcXFwiLCBcIlwiKSldKTtcbiAgICAgIGxlZnRPcC5zZXRBdHRyaWJ1dGUoXCJmZW5jZVwiLCBcInRydWVcIik7XG4gICAgICB3aXRoRGVsaW1zLnB1c2gobGVmdE9wKTtcbiAgICB9XG5cbiAgICB3aXRoRGVsaW1zLnB1c2gobm9kZSk7XG5cbiAgICBpZiAoZ3JvdXAucmlnaHREZWxpbSAhPSBudWxsKSB7XG4gICAgICBjb25zdCByaWdodE9wID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtb1wiLCBbbmV3IG1hdGhNTFRyZWUuVGV4dE5vZGUoZ3JvdXAucmlnaHREZWxpbS5yZXBsYWNlKFwiXFxcXFwiLCBcIlwiKSldKTtcbiAgICAgIHJpZ2h0T3Auc2V0QXR0cmlidXRlKFwiZmVuY2VcIiwgXCJ0cnVlXCIpO1xuICAgICAgd2l0aERlbGltcy5wdXNoKHJpZ2h0T3ApO1xuICAgIH1cblxuICAgIHJldHVybiBtYWtlUm93KHdpdGhEZWxpbXMpO1xuICB9XG5cbiAgcmV0dXJuIG5vZGU7XG59O1xuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwiZ2VuZnJhY1wiLFxuICBuYW1lczogW1wiXFxcXGRmcmFjXCIsIFwiXFxcXGZyYWNcIiwgXCJcXFxcdGZyYWNcIiwgXCJcXFxcZGJpbm9tXCIsIFwiXFxcXGJpbm9tXCIsIFwiXFxcXHRiaW5vbVwiLCBcIlxcXFxcXFxcYXRvcGZyYWNcIiwgLy8gY2Fu4oCZdCBiZSBlbnRlcmVkIGRpcmVjdGx5XG4gIFwiXFxcXFxcXFxicmFjZWZyYWNcIiwgXCJcXFxcXFxcXGJyYWNrZnJhY1wiIC8vIGRpdHRvXG4gIF0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMixcbiAgICBhbGxvd2VkSW5Bcmd1bWVudDogdHJ1ZVxuICB9LFxuICBoYW5kbGVyOiAoX3JlZiwgYXJncykgPT4ge1xuICAgIGxldCB7XG4gICAgICBwYXJzZXIsXG4gICAgICBmdW5jTmFtZVxuICAgIH0gPSBfcmVmO1xuICAgIGNvbnN0IG51bWVyID0gYXJnc1swXTtcbiAgICBjb25zdCBkZW5vbSA9IGFyZ3NbMV07XG4gICAgbGV0IGhhc0JhckxpbmU7XG4gICAgbGV0IGxlZnREZWxpbSA9IG51bGw7XG4gICAgbGV0IHJpZ2h0RGVsaW0gPSBudWxsO1xuICAgIGxldCBzaXplID0gXCJhdXRvXCI7XG5cbiAgICBzd2l0Y2ggKGZ1bmNOYW1lKSB7XG4gICAgICBjYXNlIFwiXFxcXGRmcmFjXCI6XG4gICAgICBjYXNlIFwiXFxcXGZyYWNcIjpcbiAgICAgIGNhc2UgXCJcXFxcdGZyYWNcIjpcbiAgICAgICAgaGFzQmFyTGluZSA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFwiXFxcXFxcXFxhdG9wZnJhY1wiOlxuICAgICAgICBoYXNCYXJMaW5lID0gZmFsc2U7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFwiXFxcXGRiaW5vbVwiOlxuICAgICAgY2FzZSBcIlxcXFxiaW5vbVwiOlxuICAgICAgY2FzZSBcIlxcXFx0Ymlub21cIjpcbiAgICAgICAgaGFzQmFyTGluZSA9IGZhbHNlO1xuICAgICAgICBsZWZ0RGVsaW0gPSBcIihcIjtcbiAgICAgICAgcmlnaHREZWxpbSA9IFwiKVwiO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcIlxcXFxcXFxcYnJhY2VmcmFjXCI6XG4gICAgICAgIGhhc0JhckxpbmUgPSBmYWxzZTtcbiAgICAgICAgbGVmdERlbGltID0gXCJcXFxce1wiO1xuICAgICAgICByaWdodERlbGltID0gXCJcXFxcfVwiO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcIlxcXFxcXFxcYnJhY2tmcmFjXCI6XG4gICAgICAgIGhhc0JhckxpbmUgPSBmYWxzZTtcbiAgICAgICAgbGVmdERlbGltID0gXCJbXCI7XG4gICAgICAgIHJpZ2h0RGVsaW0gPSBcIl1cIjtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVucmVjb2duaXplZCBnZW5mcmFjIGNvbW1hbmRcIik7XG4gICAgfVxuXG4gICAgc3dpdGNoIChmdW5jTmFtZSkge1xuICAgICAgY2FzZSBcIlxcXFxkZnJhY1wiOlxuICAgICAgY2FzZSBcIlxcXFxkYmlub21cIjpcbiAgICAgICAgc2l6ZSA9IFwiZGlzcGxheVwiO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcIlxcXFx0ZnJhY1wiOlxuICAgICAgY2FzZSBcIlxcXFx0Ymlub21cIjpcbiAgICAgICAgc2l6ZSA9IFwidGV4dFwiO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJnZW5mcmFjXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGNvbnRpbnVlZDogZmFsc2UsXG4gICAgICBudW1lcixcbiAgICAgIGRlbm9tLFxuICAgICAgaGFzQmFyTGluZSxcbiAgICAgIGxlZnREZWxpbSxcbiAgICAgIHJpZ2h0RGVsaW0sXG4gICAgICBzaXplLFxuICAgICAgYmFyU2l6ZTogbnVsbFxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiBnZW5mcmFjX2h0bWxCdWlsZGVyLFxuICBtYXRobWxCdWlsZGVyOiBnZW5mcmFjX21hdGhtbEJ1aWxkZXJcbn0pO1xuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcImdlbmZyYWNcIixcbiAgbmFtZXM6IFtcIlxcXFxjZnJhY1wiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAyXG4gIH0sXG4gIGhhbmRsZXI6IChfcmVmMiwgYXJncykgPT4ge1xuICAgIGxldCB7XG4gICAgICBwYXJzZXIsXG4gICAgICBmdW5jTmFtZVxuICAgIH0gPSBfcmVmMjtcbiAgICBjb25zdCBudW1lciA9IGFyZ3NbMF07XG4gICAgY29uc3QgZGVub20gPSBhcmdzWzFdO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImdlbmZyYWNcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgY29udGludWVkOiB0cnVlLFxuICAgICAgbnVtZXIsXG4gICAgICBkZW5vbSxcbiAgICAgIGhhc0JhckxpbmU6IHRydWUsXG4gICAgICBsZWZ0RGVsaW06IG51bGwsXG4gICAgICByaWdodERlbGltOiBudWxsLFxuICAgICAgc2l6ZTogXCJkaXNwbGF5XCIsXG4gICAgICBiYXJTaXplOiBudWxsXG4gICAgfTtcbiAgfVxufSk7IC8vIEluZml4IGdlbmVyYWxpemVkIGZyYWN0aW9ucyAtLSB0aGVzZSBhcmUgbm90IHJlbmRlcmVkIGRpcmVjdGx5LCBidXQgcmVwbGFjZWRcbi8vIGltbWVkaWF0ZWx5IGJ5IG9uZSBvZiB0aGUgdmFyaWFudHMgYWJvdmUuXG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJpbmZpeFwiLFxuICBuYW1lczogW1wiXFxcXG92ZXJcIiwgXCJcXFxcY2hvb3NlXCIsIFwiXFxcXGF0b3BcIiwgXCJcXFxcYnJhY2VcIiwgXCJcXFxcYnJhY2tcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMCxcbiAgICBpbmZpeDogdHJ1ZVxuICB9LFxuXG4gIGhhbmRsZXIoX3JlZjMpIHtcbiAgICBsZXQge1xuICAgICAgcGFyc2VyLFxuICAgICAgZnVuY05hbWUsXG4gICAgICB0b2tlblxuICAgIH0gPSBfcmVmMztcbiAgICBsZXQgcmVwbGFjZVdpdGg7XG5cbiAgICBzd2l0Y2ggKGZ1bmNOYW1lKSB7XG4gICAgICBjYXNlIFwiXFxcXG92ZXJcIjpcbiAgICAgICAgcmVwbGFjZVdpdGggPSBcIlxcXFxmcmFjXCI7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFwiXFxcXGNob29zZVwiOlxuICAgICAgICByZXBsYWNlV2l0aCA9IFwiXFxcXGJpbm9tXCI7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFwiXFxcXGF0b3BcIjpcbiAgICAgICAgcmVwbGFjZVdpdGggPSBcIlxcXFxcXFxcYXRvcGZyYWNcIjtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJcXFxcYnJhY2VcIjpcbiAgICAgICAgcmVwbGFjZVdpdGggPSBcIlxcXFxcXFxcYnJhY2VmcmFjXCI7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFwiXFxcXGJyYWNrXCI6XG4gICAgICAgIHJlcGxhY2VXaXRoID0gXCJcXFxcXFxcXGJyYWNrZnJhY1wiO1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5yZWNvZ25pemVkIGluZml4IGdlbmZyYWMgY29tbWFuZFwiKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJpbmZpeFwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICByZXBsYWNlV2l0aCxcbiAgICAgIHRva2VuXG4gICAgfTtcbiAgfVxuXG59KTtcbmNvbnN0IHN0eWxBcnJheSA9IFtcImRpc3BsYXlcIiwgXCJ0ZXh0XCIsIFwic2NyaXB0XCIsIFwic2NyaXB0c2NyaXB0XCJdO1xuXG5jb25zdCBkZWxpbUZyb21WYWx1ZSA9IGZ1bmN0aW9uIChkZWxpbVN0cmluZykge1xuICBsZXQgZGVsaW0gPSBudWxsO1xuXG4gIGlmIChkZWxpbVN0cmluZy5sZW5ndGggPiAwKSB7XG4gICAgZGVsaW0gPSBkZWxpbVN0cmluZztcbiAgICBkZWxpbSA9IGRlbGltID09PSBcIi5cIiA/IG51bGwgOiBkZWxpbTtcbiAgfVxuXG4gIHJldHVybiBkZWxpbTtcbn07XG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJnZW5mcmFjXCIsXG4gIG5hbWVzOiBbXCJcXFxcZ2VuZnJhY1wiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiA2LFxuICAgIGFsbG93ZWRJbkFyZ3VtZW50OiB0cnVlLFxuICAgIGFyZ1R5cGVzOiBbXCJtYXRoXCIsIFwibWF0aFwiLCBcInNpemVcIiwgXCJ0ZXh0XCIsIFwibWF0aFwiLCBcIm1hdGhcIl1cbiAgfSxcblxuICBoYW5kbGVyKF9yZWY0LCBhcmdzKSB7XG4gICAgbGV0IHtcbiAgICAgIHBhcnNlclxuICAgIH0gPSBfcmVmNDtcbiAgICBjb25zdCBudW1lciA9IGFyZ3NbNF07XG4gICAgY29uc3QgZGVub20gPSBhcmdzWzVdOyAvLyBMb29rIGludG8gdGhlIHBhcnNlIG5vZGVzIHRvIGdldCB0aGUgZGVzaXJlZCBkZWxpbWl0ZXJzLlxuXG4gICAgY29uc3QgbGVmdE5vZGUgPSBub3JtYWxpemVBcmd1bWVudChhcmdzWzBdKTtcbiAgICBjb25zdCBsZWZ0RGVsaW0gPSBsZWZ0Tm9kZS50eXBlID09PSBcImF0b21cIiAmJiBsZWZ0Tm9kZS5mYW1pbHkgPT09IFwib3BlblwiID8gZGVsaW1Gcm9tVmFsdWUobGVmdE5vZGUudGV4dCkgOiBudWxsO1xuICAgIGNvbnN0IHJpZ2h0Tm9kZSA9IG5vcm1hbGl6ZUFyZ3VtZW50KGFyZ3NbMV0pO1xuICAgIGNvbnN0IHJpZ2h0RGVsaW0gPSByaWdodE5vZGUudHlwZSA9PT0gXCJhdG9tXCIgJiYgcmlnaHROb2RlLmZhbWlseSA9PT0gXCJjbG9zZVwiID8gZGVsaW1Gcm9tVmFsdWUocmlnaHROb2RlLnRleHQpIDogbnVsbDtcbiAgICBjb25zdCBiYXJOb2RlID0gYXNzZXJ0Tm9kZVR5cGUoYXJnc1syXSwgXCJzaXplXCIpO1xuICAgIGxldCBoYXNCYXJMaW5lO1xuICAgIGxldCBiYXJTaXplID0gbnVsbDtcblxuICAgIGlmIChiYXJOb2RlLmlzQmxhbmspIHtcbiAgICAgIC8vIFxcZ2VuZnJhYyBhY3RzIGRpZmZlcmVudGx5IHRoYW4gXFxhYm92ZS5cbiAgICAgIC8vIFxcZ2VuZnJhYyB0cmVhdHMgYW4gZW1wdHkgc2l6ZSBncm91cCBhcyBhIHNpZ25hbCB0byB1c2UgYVxuICAgICAgLy8gc3RhbmRhcmQgYmFyIHNpemUuIFxcYWJvdmUgd291bGQgc2VlIHNpemUgPSAwIGFuZCBvbWl0IHRoZSBiYXIuXG4gICAgICBoYXNCYXJMaW5lID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgYmFyU2l6ZSA9IGJhck5vZGUudmFsdWU7XG4gICAgICBoYXNCYXJMaW5lID0gYmFyU2l6ZS5udW1iZXIgPiAwO1xuICAgIH0gLy8gRmluZCBvdXQgaWYgd2Ugd2FudCBkaXNwbGF5c3R5bGUsIHRleHRzdHlsZSwgZXRjLlxuXG5cbiAgICBsZXQgc2l6ZSA9IFwiYXV0b1wiO1xuICAgIGxldCBzdHlsID0gYXJnc1szXTtcblxuICAgIGlmIChzdHlsLnR5cGUgPT09IFwib3JkZ3JvdXBcIikge1xuICAgICAgaWYgKHN0eWwuYm9keS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IHRleHRPcmQgPSBhc3NlcnROb2RlVHlwZShzdHlsLmJvZHlbMF0sIFwidGV4dG9yZFwiKTtcbiAgICAgICAgc2l6ZSA9IHN0eWxBcnJheVtOdW1iZXIodGV4dE9yZC50ZXh0KV07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0eWwgPSBhc3NlcnROb2RlVHlwZShzdHlsLCBcInRleHRvcmRcIik7XG4gICAgICBzaXplID0gc3R5bEFycmF5W051bWJlcihzdHlsLnRleHQpXTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJnZW5mcmFjXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIG51bWVyLFxuICAgICAgZGVub20sXG4gICAgICBjb250aW51ZWQ6IGZhbHNlLFxuICAgICAgaGFzQmFyTGluZSxcbiAgICAgIGJhclNpemUsXG4gICAgICBsZWZ0RGVsaW0sXG4gICAgICByaWdodERlbGltLFxuICAgICAgc2l6ZVxuICAgIH07XG4gIH0sXG5cbiAgaHRtbEJ1aWxkZXI6IGdlbmZyYWNfaHRtbEJ1aWxkZXIsXG4gIG1hdGhtbEJ1aWxkZXI6IGdlbmZyYWNfbWF0aG1sQnVpbGRlclxufSk7IC8vIFxcYWJvdmUgaXMgYW4gaW5maXggZnJhY3Rpb24gdGhhdCBhbHNvIGRlZmluZXMgYSBmcmFjdGlvbiBiYXIgc2l6ZS5cblxuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcImluZml4XCIsXG4gIG5hbWVzOiBbXCJcXFxcYWJvdmVcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMSxcbiAgICBhcmdUeXBlczogW1wic2l6ZVwiXSxcbiAgICBpbmZpeDogdHJ1ZVxuICB9LFxuXG4gIGhhbmRsZXIoX3JlZjUsIGFyZ3MpIHtcbiAgICBsZXQge1xuICAgICAgcGFyc2VyLFxuICAgICAgZnVuY05hbWUsXG4gICAgICB0b2tlblxuICAgIH0gPSBfcmVmNTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJpbmZpeFwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICByZXBsYWNlV2l0aDogXCJcXFxcXFxcXGFib3ZlZnJhY1wiLFxuICAgICAgc2l6ZTogYXNzZXJ0Tm9kZVR5cGUoYXJnc1swXSwgXCJzaXplXCIpLnZhbHVlLFxuICAgICAgdG9rZW5cbiAgICB9O1xuICB9XG5cbn0pO1xuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcImdlbmZyYWNcIixcbiAgbmFtZXM6IFtcIlxcXFxcXFxcYWJvdmVmcmFjXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDMsXG4gICAgYXJnVHlwZXM6IFtcIm1hdGhcIiwgXCJzaXplXCIsIFwibWF0aFwiXVxuICB9LFxuICBoYW5kbGVyOiAoX3JlZjYsIGFyZ3MpID0+IHtcbiAgICBsZXQge1xuICAgICAgcGFyc2VyLFxuICAgICAgZnVuY05hbWVcbiAgICB9ID0gX3JlZjY7XG4gICAgY29uc3QgbnVtZXIgPSBhcmdzWzBdO1xuICAgIGNvbnN0IGJhclNpemUgPSBhc3NlcnQoYXNzZXJ0Tm9kZVR5cGUoYXJnc1sxXSwgXCJpbmZpeFwiKS5zaXplKTtcbiAgICBjb25zdCBkZW5vbSA9IGFyZ3NbMl07XG4gICAgY29uc3QgaGFzQmFyTGluZSA9IGJhclNpemUubnVtYmVyID4gMDtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJnZW5mcmFjXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIG51bWVyLFxuICAgICAgZGVub20sXG4gICAgICBjb250aW51ZWQ6IGZhbHNlLFxuICAgICAgaGFzQmFyTGluZSxcbiAgICAgIGJhclNpemUsXG4gICAgICBsZWZ0RGVsaW06IG51bGwsXG4gICAgICByaWdodERlbGltOiBudWxsLFxuICAgICAgc2l6ZTogXCJhdXRvXCJcbiAgICB9O1xuICB9LFxuICBodG1sQnVpbGRlcjogZ2VuZnJhY19odG1sQnVpbGRlcixcbiAgbWF0aG1sQnVpbGRlcjogZ2VuZnJhY19tYXRobWxCdWlsZGVyXG59KTtcbjsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbnMvaG9yaXpCcmFjZS5qc1xuXG5cblxuXG5cblxuXG5cbi8vIE5PVEU6IFVubGlrZSBtb3N0IGBodG1sQnVpbGRlcmBzLCB0aGlzIG9uZSBoYW5kbGVzIG5vdCBvbmx5IFwiaG9yaXpCcmFjZVwiLCBidXRcbi8vIGFsc28gXCJzdXBzdWJcIiBzaW5jZSBhbiBvdmVyL3VuZGVyYnJhY2UgY2FuIGFmZmVjdCBzdXBlci9zdWJzY3JpcHRpbmcuXG5jb25zdCBob3JpekJyYWNlX2h0bWxCdWlsZGVyID0gKGdycCwgb3B0aW9ucykgPT4ge1xuICBjb25zdCBzdHlsZSA9IG9wdGlvbnMuc3R5bGU7IC8vIFB1bGwgb3V0IHRoZSBgUGFyc2VOb2RlPFwiaG9yaXpCcmFjZVwiPmAgaWYgYGdycGAgaXMgYSBcInN1cHN1YlwiIG5vZGUuXG5cbiAgbGV0IHN1cFN1Ykdyb3VwO1xuICBsZXQgZ3JvdXA7XG5cbiAgaWYgKGdycC50eXBlID09PSBcInN1cHN1YlwiKSB7XG4gICAgLy8gUmVmOiBMYVRlWCBzb3VyY2UyZTogfX19fVxcbGltaXRzfVxuICAgIC8vIGkuZS4gTGFUZVggdHJlYXRzIHRoZSBicmFjZSBzaW1pbGFyIHRvIGFuIG9wIGFuZCBwYXNzZXMgaXRcbiAgICAvLyB3aXRoIFxcbGltaXRzLCBzbyB3ZSBuZWVkIHRvIGFzc2lnbiBzdXBzdWIgc3R5bGUuXG4gICAgc3VwU3ViR3JvdXAgPSBncnAuc3VwID8gYnVpbGRHcm91cChncnAuc3VwLCBvcHRpb25zLmhhdmluZ1N0eWxlKHN0eWxlLnN1cCgpKSwgb3B0aW9ucykgOiBidWlsZEdyb3VwKGdycC5zdWIsIG9wdGlvbnMuaGF2aW5nU3R5bGUoc3R5bGUuc3ViKCkpLCBvcHRpb25zKTtcbiAgICBncm91cCA9IGFzc2VydE5vZGVUeXBlKGdycC5iYXNlLCBcImhvcml6QnJhY2VcIik7XG4gIH0gZWxzZSB7XG4gICAgZ3JvdXAgPSBhc3NlcnROb2RlVHlwZShncnAsIFwiaG9yaXpCcmFjZVwiKTtcbiAgfSAvLyBCdWlsZCB0aGUgYmFzZSBncm91cFxuXG5cbiAgY29uc3QgYm9keSA9IGJ1aWxkR3JvdXAoZ3JvdXAuYmFzZSwgb3B0aW9ucy5oYXZpbmdCYXNlU3R5bGUoc3JjX1N0eWxlLkRJU1BMQVkpKTsgLy8gQ3JlYXRlIHRoZSBzdHJldGNoeSBlbGVtZW50XG5cbiAgY29uc3QgYnJhY2VCb2R5ID0gc3RyZXRjaHkuc3ZnU3Bhbihncm91cCwgb3B0aW9ucyk7IC8vIEdlbmVyYXRlIHRoZSB2bGlzdCwgd2l0aCB0aGUgYXBwcm9wcmlhdGUga2VybnMgICAgICAgIOKUj+KUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUk1xuICAvLyBUaGlzIGZpcnN0IHZsaXN0IGNvbnRhaW5zIHRoZSBjb250ZW50IGFuZCB0aGUgYnJhY2U6ICAgZXF1YXRpb25cblxuICBsZXQgdmxpc3Q7XG5cbiAgaWYgKGdyb3VwLmlzT3Zlcikge1xuICAgIHZsaXN0ID0gYnVpbGRDb21tb24ubWFrZVZMaXN0KHtcbiAgICAgIHBvc2l0aW9uVHlwZTogXCJmaXJzdEJhc2VsaW5lXCIsXG4gICAgICBjaGlsZHJlbjogW3tcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IGJvZHlcbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJrZXJuXCIsXG4gICAgICAgIHNpemU6IDAuMVxuICAgICAgfSwge1xuICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgZWxlbTogYnJhY2VCb2R5XG4gICAgICB9XVxuICAgIH0sIG9wdGlvbnMpOyAvLyAkRmxvd0ZpeE1lOiBSZXBsYWNlIHRoaXMgd2l0aCBwYXNzaW5nIFwic3ZnLWFsaWduXCIgaW50byBtYWtlVkxpc3QuXG5cbiAgICB2bGlzdC5jaGlsZHJlblswXS5jaGlsZHJlblswXS5jaGlsZHJlblsxXS5jbGFzc2VzLnB1c2goXCJzdmctYWxpZ25cIik7XG4gIH0gZWxzZSB7XG4gICAgdmxpc3QgPSBidWlsZENvbW1vbi5tYWtlVkxpc3Qoe1xuICAgICAgcG9zaXRpb25UeXBlOiBcImJvdHRvbVwiLFxuICAgICAgcG9zaXRpb25EYXRhOiBib2R5LmRlcHRoICsgMC4xICsgYnJhY2VCb2R5LmhlaWdodCxcbiAgICAgIGNoaWxkcmVuOiBbe1xuICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgZWxlbTogYnJhY2VCb2R5XG4gICAgICB9LCB7XG4gICAgICAgIHR5cGU6IFwia2VyblwiLFxuICAgICAgICBzaXplOiAwLjFcbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IGJvZHlcbiAgICAgIH1dXG4gICAgfSwgb3B0aW9ucyk7IC8vICRGbG93Rml4TWU6IFJlcGxhY2UgdGhpcyB3aXRoIHBhc3NpbmcgXCJzdmctYWxpZ25cIiBpbnRvIG1ha2VWTGlzdC5cblxuICAgIHZsaXN0LmNoaWxkcmVuWzBdLmNoaWxkcmVuWzBdLmNoaWxkcmVuWzBdLmNsYXNzZXMucHVzaChcInN2Zy1hbGlnblwiKTtcbiAgfVxuXG4gIGlmIChzdXBTdWJHcm91cCkge1xuICAgIC8vIFRvIHdyaXRlIHRoZSBzdXBzdWIsIHdyYXAgdGhlIGZpcnN0IHZsaXN0IGluIGFub3RoZXIgdmxpc3Q6XG4gICAgLy8gVGhleSBjYW4ndCBhbGwgZ28gaW4gdGhlIHNhbWUgdmxpc3QsIGJlY2F1c2UgdGhlIG5vdGUgbWlnaHQgYmVcbiAgICAvLyB3aWRlciB0aGFuIHRoZSBlcXVhdGlvbi4gV2Ugd2FudCB0aGUgZXF1YXRpb24gdG8gY29udHJvbCB0aGVcbiAgICAvLyBicmFjZSB3aWR0aC5cbiAgICAvLyAgICAgIG5vdGUgICAgICAgICAgbG9uZyBub3RlICAgICAgICAgICBsb25nIG5vdGVcbiAgICAvLyAgIOKUj+KUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUkyAgIG9yICAgIOKUj+KUgeKUgeKUgeKUkyAgICAgbm90ICAgIOKUj+KUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUk1xuICAgIC8vICAgIGVxdWF0aW9uICAgICAgICAgICBlcW4gICAgICAgICAgICAgICAgIGVxblxuICAgIGNvbnN0IHZTcGFuID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wibW9yZFwiLCBncm91cC5pc092ZXIgPyBcIm1vdmVyXCIgOiBcIm11bmRlclwiXSwgW3ZsaXN0XSwgb3B0aW9ucyk7XG5cbiAgICBpZiAoZ3JvdXAuaXNPdmVyKSB7XG4gICAgICB2bGlzdCA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICAgIHBvc2l0aW9uVHlwZTogXCJmaXJzdEJhc2VsaW5lXCIsXG4gICAgICAgIGNoaWxkcmVuOiBbe1xuICAgICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICAgIGVsZW06IHZTcGFuXG4gICAgICAgIH0sIHtcbiAgICAgICAgICB0eXBlOiBcImtlcm5cIixcbiAgICAgICAgICBzaXplOiAwLjJcbiAgICAgICAgfSwge1xuICAgICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICAgIGVsZW06IHN1cFN1Ykdyb3VwXG4gICAgICAgIH1dXG4gICAgICB9LCBvcHRpb25zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmxpc3QgPSBidWlsZENvbW1vbi5tYWtlVkxpc3Qoe1xuICAgICAgICBwb3NpdGlvblR5cGU6IFwiYm90dG9tXCIsXG4gICAgICAgIHBvc2l0aW9uRGF0YTogdlNwYW4uZGVwdGggKyAwLjIgKyBzdXBTdWJHcm91cC5oZWlnaHQgKyBzdXBTdWJHcm91cC5kZXB0aCxcbiAgICAgICAgY2hpbGRyZW46IFt7XG4gICAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgICAgZWxlbTogc3VwU3ViR3JvdXBcbiAgICAgICAgfSwge1xuICAgICAgICAgIHR5cGU6IFwia2VyblwiLFxuICAgICAgICAgIHNpemU6IDAuMlxuICAgICAgICB9LCB7XG4gICAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgICAgZWxlbTogdlNwYW5cbiAgICAgICAgfV1cbiAgICAgIH0sIG9wdGlvbnMpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJtb3JkXCIsIGdyb3VwLmlzT3ZlciA/IFwibW92ZXJcIiA6IFwibXVuZGVyXCJdLCBbdmxpc3RdLCBvcHRpb25zKTtcbn07XG5cbmNvbnN0IGhvcml6QnJhY2VfbWF0aG1sQnVpbGRlciA9IChncm91cCwgb3B0aW9ucykgPT4ge1xuICBjb25zdCBhY2NlbnROb2RlID0gc3RyZXRjaHkubWF0aE1Mbm9kZShncm91cC5sYWJlbCk7XG4gIHJldHVybiBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShncm91cC5pc092ZXIgPyBcIm1vdmVyXCIgOiBcIm11bmRlclwiLCBbYnVpbGRNYXRoTUxfYnVpbGRHcm91cChncm91cC5iYXNlLCBvcHRpb25zKSwgYWNjZW50Tm9kZV0pO1xufTsgLy8gSG9yaXpvbnRhbCBzdHJldGNoeSBicmFjZXNcblxuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwiaG9yaXpCcmFjZVwiLFxuICBuYW1lczogW1wiXFxcXG92ZXJicmFjZVwiLCBcIlxcXFx1bmRlcmJyYWNlXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDFcbiAgfSxcblxuICBoYW5kbGVyKF9yZWYsIGFyZ3MpIHtcbiAgICBsZXQge1xuICAgICAgcGFyc2VyLFxuICAgICAgZnVuY05hbWVcbiAgICB9ID0gX3JlZjtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJob3JpekJyYWNlXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGxhYmVsOiBmdW5jTmFtZSxcbiAgICAgIGlzT3ZlcjogL15cXFxcb3Zlci8udGVzdChmdW5jTmFtZSksXG4gICAgICBiYXNlOiBhcmdzWzBdXG4gICAgfTtcbiAgfSxcblxuICBodG1sQnVpbGRlcjogaG9yaXpCcmFjZV9odG1sQnVpbGRlcixcbiAgbWF0aG1sQnVpbGRlcjogaG9yaXpCcmFjZV9tYXRobWxCdWlsZGVyXG59KTtcbjsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbnMvaHJlZi5qc1xuXG5cblxuXG5cblxuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcImhyZWZcIixcbiAgbmFtZXM6IFtcIlxcXFxocmVmXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDIsXG4gICAgYXJnVHlwZXM6IFtcInVybFwiLCBcIm9yaWdpbmFsXCJdLFxuICAgIGFsbG93ZWRJblRleHQ6IHRydWVcbiAgfSxcbiAgaGFuZGxlcjogKF9yZWYsIGFyZ3MpID0+IHtcbiAgICBsZXQge1xuICAgICAgcGFyc2VyXG4gICAgfSA9IF9yZWY7XG4gICAgY29uc3QgYm9keSA9IGFyZ3NbMV07XG4gICAgY29uc3QgaHJlZiA9IGFzc2VydE5vZGVUeXBlKGFyZ3NbMF0sIFwidXJsXCIpLnVybDtcblxuICAgIGlmICghcGFyc2VyLnNldHRpbmdzLmlzVHJ1c3RlZCh7XG4gICAgICBjb21tYW5kOiBcIlxcXFxocmVmXCIsXG4gICAgICB1cmw6IGhyZWZcbiAgICB9KSkge1xuICAgICAgcmV0dXJuIHBhcnNlci5mb3JtYXRVbnN1cHBvcnRlZENtZChcIlxcXFxocmVmXCIpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImhyZWZcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgaHJlZixcbiAgICAgIGJvZHk6IG9yZGFyZ3VtZW50KGJvZHkpXG4gICAgfTtcbiAgfSxcbiAgaHRtbEJ1aWxkZXI6IChncm91cCwgb3B0aW9ucykgPT4ge1xuICAgIGNvbnN0IGVsZW1lbnRzID0gYnVpbGRFeHByZXNzaW9uKGdyb3VwLmJvZHksIG9wdGlvbnMsIGZhbHNlKTtcbiAgICByZXR1cm4gYnVpbGRDb21tb24ubWFrZUFuY2hvcihncm91cC5ocmVmLCBbXSwgZWxlbWVudHMsIG9wdGlvbnMpO1xuICB9LFxuICBtYXRobWxCdWlsZGVyOiAoZ3JvdXAsIG9wdGlvbnMpID0+IHtcbiAgICBsZXQgbWF0aCA9IGJ1aWxkRXhwcmVzc2lvblJvdyhncm91cC5ib2R5LCBvcHRpb25zKTtcblxuICAgIGlmICghKG1hdGggaW5zdGFuY2VvZiBNYXRoTm9kZSkpIHtcbiAgICAgIG1hdGggPSBuZXcgTWF0aE5vZGUoXCJtcm93XCIsIFttYXRoXSk7XG4gICAgfVxuXG4gICAgbWF0aC5zZXRBdHRyaWJ1dGUoXCJocmVmXCIsIGdyb3VwLmhyZWYpO1xuICAgIHJldHVybiBtYXRoO1xuICB9XG59KTtcbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJocmVmXCIsXG4gIG5hbWVzOiBbXCJcXFxcdXJsXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDEsXG4gICAgYXJnVHlwZXM6IFtcInVybFwiXSxcbiAgICBhbGxvd2VkSW5UZXh0OiB0cnVlXG4gIH0sXG4gIGhhbmRsZXI6IChfcmVmMiwgYXJncykgPT4ge1xuICAgIGxldCB7XG4gICAgICBwYXJzZXJcbiAgICB9ID0gX3JlZjI7XG4gICAgY29uc3QgaHJlZiA9IGFzc2VydE5vZGVUeXBlKGFyZ3NbMF0sIFwidXJsXCIpLnVybDtcblxuICAgIGlmICghcGFyc2VyLnNldHRpbmdzLmlzVHJ1c3RlZCh7XG4gICAgICBjb21tYW5kOiBcIlxcXFx1cmxcIixcbiAgICAgIHVybDogaHJlZlxuICAgIH0pKSB7XG4gICAgICByZXR1cm4gcGFyc2VyLmZvcm1hdFVuc3VwcG9ydGVkQ21kKFwiXFxcXHVybFwiKTtcbiAgICB9XG5cbiAgICBjb25zdCBjaGFycyA9IFtdO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBocmVmLmxlbmd0aDsgaSsrKSB7XG4gICAgICBsZXQgYyA9IGhyZWZbaV07XG5cbiAgICAgIGlmIChjID09PSBcIn5cIikge1xuICAgICAgICBjID0gXCJcXFxcdGV4dGFzY2lpdGlsZGVcIjtcbiAgICAgIH1cblxuICAgICAgY2hhcnMucHVzaCh7XG4gICAgICAgIHR5cGU6IFwidGV4dG9yZFwiLFxuICAgICAgICBtb2RlOiBcInRleHRcIixcbiAgICAgICAgdGV4dDogY1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgYm9keSA9IHtcbiAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBmb250OiBcIlxcXFx0ZXh0dHRcIixcbiAgICAgIGJvZHk6IGNoYXJzXG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJocmVmXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGhyZWYsXG4gICAgICBib2R5OiBvcmRhcmd1bWVudChib2R5KVxuICAgIH07XG4gIH1cbn0pO1xuOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9ucy9oYm94LmpzXG5cblxuXG5cbiAvLyBcXGhib3ggaXMgcHJvdmlkZWQgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBMYVRlWCBcXHZjZW50ZXIuXG4vLyBJbiBMYVRlWCwgXFx2Y2VudGVyIGNhbiBhY3Qgb25seSBvbiBhIGJveCwgYXMgaW5cbi8vIFxcdmNlbnRlcntcXGhib3h7JFxcZnJhY3thK2J9e1xcZGZyYWN7Y317ZH19JH19XG4vLyBUaGlzIGZ1bmN0aW9uIGJ5IGl0c2VsZiBkb2Vzbid0IGRvIGFueXRoaW5nIGJ1dCBwcmV2ZW50IGEgc29mdCBsaW5lIGJyZWFrLlxuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwiaGJveFwiLFxuICBuYW1lczogW1wiXFxcXGhib3hcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMSxcbiAgICBhcmdUeXBlczogW1widGV4dFwiXSxcbiAgICBhbGxvd2VkSW5UZXh0OiB0cnVlLFxuICAgIHByaW1pdGl2ZTogdHJ1ZVxuICB9LFxuXG4gIGhhbmRsZXIoX3JlZiwgYXJncykge1xuICAgIGxldCB7XG4gICAgICBwYXJzZXJcbiAgICB9ID0gX3JlZjtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJoYm94XCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGJvZHk6IG9yZGFyZ3VtZW50KGFyZ3NbMF0pXG4gICAgfTtcbiAgfSxcblxuICBodG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIGNvbnN0IGVsZW1lbnRzID0gYnVpbGRFeHByZXNzaW9uKGdyb3VwLmJvZHksIG9wdGlvbnMsIGZhbHNlKTtcbiAgICByZXR1cm4gYnVpbGRDb21tb24ubWFrZUZyYWdtZW50KGVsZW1lbnRzKTtcbiAgfSxcblxuICBtYXRobWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXJvd1wiLCBidWlsZE1hdGhNTF9idWlsZEV4cHJlc3Npb24oZ3JvdXAuYm9keSwgb3B0aW9ucykpO1xuICB9XG5cbn0pO1xuOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9ucy9odG1sLmpzXG5cblxuXG5cblxuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwiaHRtbFwiLFxuICBuYW1lczogW1wiXFxcXGh0bWxDbGFzc1wiLCBcIlxcXFxodG1sSWRcIiwgXCJcXFxcaHRtbFN0eWxlXCIsIFwiXFxcXGh0bWxEYXRhXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDIsXG4gICAgYXJnVHlwZXM6IFtcInJhd1wiLCBcIm9yaWdpbmFsXCJdLFxuICAgIGFsbG93ZWRJblRleHQ6IHRydWVcbiAgfSxcbiAgaGFuZGxlcjogKF9yZWYsIGFyZ3MpID0+IHtcbiAgICBsZXQge1xuICAgICAgcGFyc2VyLFxuICAgICAgZnVuY05hbWUsXG4gICAgICB0b2tlblxuICAgIH0gPSBfcmVmO1xuICAgIGNvbnN0IHZhbHVlID0gYXNzZXJ0Tm9kZVR5cGUoYXJnc1swXSwgXCJyYXdcIikuc3RyaW5nO1xuICAgIGNvbnN0IGJvZHkgPSBhcmdzWzFdO1xuXG4gICAgaWYgKHBhcnNlci5zZXR0aW5ncy5zdHJpY3QpIHtcbiAgICAgIHBhcnNlci5zZXR0aW5ncy5yZXBvcnROb25zdHJpY3QoXCJodG1sRXh0ZW5zaW9uXCIsIFwiSFRNTCBleHRlbnNpb24gaXMgZGlzYWJsZWQgb24gc3RyaWN0IG1vZGVcIik7XG4gICAgfVxuXG4gICAgbGV0IHRydXN0Q29udGV4dDtcbiAgICBjb25zdCBhdHRyaWJ1dGVzID0ge307XG5cbiAgICBzd2l0Y2ggKGZ1bmNOYW1lKSB7XG4gICAgICBjYXNlIFwiXFxcXGh0bWxDbGFzc1wiOlxuICAgICAgICBhdHRyaWJ1dGVzLmNsYXNzID0gdmFsdWU7XG4gICAgICAgIHRydXN0Q29udGV4dCA9IHtcbiAgICAgICAgICBjb21tYW5kOiBcIlxcXFxodG1sQ2xhc3NcIixcbiAgICAgICAgICBjbGFzczogdmFsdWVcbiAgICAgICAgfTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJcXFxcaHRtbElkXCI6XG4gICAgICAgIGF0dHJpYnV0ZXMuaWQgPSB2YWx1ZTtcbiAgICAgICAgdHJ1c3RDb250ZXh0ID0ge1xuICAgICAgICAgIGNvbW1hbmQ6IFwiXFxcXGh0bWxJZFwiLFxuICAgICAgICAgIGlkOiB2YWx1ZVxuICAgICAgICB9O1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcIlxcXFxodG1sU3R5bGVcIjpcbiAgICAgICAgYXR0cmlidXRlcy5zdHlsZSA9IHZhbHVlO1xuICAgICAgICB0cnVzdENvbnRleHQgPSB7XG4gICAgICAgICAgY29tbWFuZDogXCJcXFxcaHRtbFN0eWxlXCIsXG4gICAgICAgICAgc3R5bGU6IHZhbHVlXG4gICAgICAgIH07XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFwiXFxcXGh0bWxEYXRhXCI6XG4gICAgICAgIHtcbiAgICAgICAgICBjb25zdCBkYXRhID0gdmFsdWUuc3BsaXQoXCIsXCIpO1xuXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBrZXlWYWwgPSBkYXRhW2ldLnNwbGl0KFwiPVwiKTtcblxuICAgICAgICAgICAgaWYgKGtleVZhbC5sZW5ndGggIT09IDIpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiRXJyb3IgcGFyc2luZyBrZXktdmFsdWUgZm9yIFxcXFxodG1sRGF0YVwiKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYXR0cmlidXRlc1tcImRhdGEtXCIgKyBrZXlWYWxbMF0udHJpbSgpXSA9IGtleVZhbFsxXS50cmltKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdHJ1c3RDb250ZXh0ID0ge1xuICAgICAgICAgICAgY29tbWFuZDogXCJcXFxcaHRtbERhdGFcIixcbiAgICAgICAgICAgIGF0dHJpYnV0ZXNcbiAgICAgICAgICB9O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVucmVjb2duaXplZCBodG1sIGNvbW1hbmRcIik7XG4gICAgfVxuXG4gICAgaWYgKCFwYXJzZXIuc2V0dGluZ3MuaXNUcnVzdGVkKHRydXN0Q29udGV4dCkpIHtcbiAgICAgIHJldHVybiBwYXJzZXIuZm9ybWF0VW5zdXBwb3J0ZWRDbWQoZnVuY05hbWUpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImh0bWxcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgYXR0cmlidXRlcyxcbiAgICAgIGJvZHk6IG9yZGFyZ3VtZW50KGJvZHkpXG4gICAgfTtcbiAgfSxcbiAgaHRtbEJ1aWxkZXI6IChncm91cCwgb3B0aW9ucykgPT4ge1xuICAgIGNvbnN0IGVsZW1lbnRzID0gYnVpbGRFeHByZXNzaW9uKGdyb3VwLmJvZHksIG9wdGlvbnMsIGZhbHNlKTtcbiAgICBjb25zdCBjbGFzc2VzID0gW1wiZW5jbG9zaW5nXCJdO1xuXG4gICAgaWYgKGdyb3VwLmF0dHJpYnV0ZXMuY2xhc3MpIHtcbiAgICAgIGNsYXNzZXMucHVzaCguLi5ncm91cC5hdHRyaWJ1dGVzLmNsYXNzLnRyaW0oKS5zcGxpdCgvXFxzKy8pKTtcbiAgICB9XG5cbiAgICBjb25zdCBzcGFuID0gYnVpbGRDb21tb24ubWFrZVNwYW4oY2xhc3NlcywgZWxlbWVudHMsIG9wdGlvbnMpO1xuXG4gICAgZm9yIChjb25zdCBhdHRyIGluIGdyb3VwLmF0dHJpYnV0ZXMpIHtcbiAgICAgIGlmIChhdHRyICE9PSBcImNsYXNzXCIgJiYgZ3JvdXAuYXR0cmlidXRlcy5oYXNPd25Qcm9wZXJ0eShhdHRyKSkge1xuICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShhdHRyLCBncm91cC5hdHRyaWJ1dGVzW2F0dHJdKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc3BhbjtcbiAgfSxcbiAgbWF0aG1sQnVpbGRlcjogKGdyb3VwLCBvcHRpb25zKSA9PiB7XG4gICAgcmV0dXJuIGJ1aWxkRXhwcmVzc2lvblJvdyhncm91cC5ib2R5LCBvcHRpb25zKTtcbiAgfVxufSk7XG47Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb25zL2h0bWxtYXRobWwuanNcblxuXG5cblxuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcImh0bWxtYXRobWxcIixcbiAgbmFtZXM6IFtcIlxcXFxodG1sQG1hdGhtbFwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAyLFxuICAgIGFsbG93ZWRJblRleHQ6IHRydWVcbiAgfSxcbiAgaGFuZGxlcjogKF9yZWYsIGFyZ3MpID0+IHtcbiAgICBsZXQge1xuICAgICAgcGFyc2VyXG4gICAgfSA9IF9yZWY7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiaHRtbG1hdGhtbFwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBodG1sOiBvcmRhcmd1bWVudChhcmdzWzBdKSxcbiAgICAgIG1hdGhtbDogb3JkYXJndW1lbnQoYXJnc1sxXSlcbiAgICB9O1xuICB9LFxuICBodG1sQnVpbGRlcjogKGdyb3VwLCBvcHRpb25zKSA9PiB7XG4gICAgY29uc3QgZWxlbWVudHMgPSBidWlsZEV4cHJlc3Npb24oZ3JvdXAuaHRtbCwgb3B0aW9ucywgZmFsc2UpO1xuICAgIHJldHVybiBidWlsZENvbW1vbi5tYWtlRnJhZ21lbnQoZWxlbWVudHMpO1xuICB9LFxuICBtYXRobWxCdWlsZGVyOiAoZ3JvdXAsIG9wdGlvbnMpID0+IHtcbiAgICByZXR1cm4gYnVpbGRFeHByZXNzaW9uUm93KGdyb3VwLm1hdGhtbCwgb3B0aW9ucyk7XG4gIH1cbn0pO1xuOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9ucy9pbmNsdWRlZ3JhcGhpY3MuanNcblxuXG5cblxuXG5cblxuY29uc3Qgc2l6ZURhdGEgPSBmdW5jdGlvbiAoc3RyKSB7XG4gIGlmICgvXlstK10/ICooXFxkKyhcXC5cXGQqKT98XFwuXFxkKykkLy50ZXN0KHN0cikpIHtcbiAgICAvLyBzdHIgaXMgYSBudW1iZXIgd2l0aCBubyB1bml0IHNwZWNpZmllZC5cbiAgICAvLyBkZWZhdWx0IHVuaXQgaXMgYnAsIHBlciBncmFwaGl4IHBhY2thZ2UuXG4gICAgcmV0dXJuIHtcbiAgICAgIG51bWJlcjogK3N0cixcbiAgICAgIHVuaXQ6IFwiYnBcIlxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgbWF0Y2ggPSAvKFstK10/KSAqKFxcZCsoPzpcXC5cXGQqKT98XFwuXFxkKykgKihbYS16XXsyfSkvLmV4ZWMoc3RyKTtcblxuICAgIGlmICghbWF0Y2gpIHtcbiAgICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIkludmFsaWQgc2l6ZTogJ1wiICsgc3RyICsgXCInIGluIFxcXFxpbmNsdWRlZ3JhcGhpY3NcIik7XG4gICAgfVxuXG4gICAgY29uc3QgZGF0YSA9IHtcbiAgICAgIG51bWJlcjogKyhtYXRjaFsxXSArIG1hdGNoWzJdKSxcbiAgICAgIC8vIHNpZ24gKyBtYWduaXR1ZGUsIGNhc3QgdG8gbnVtYmVyXG4gICAgICB1bml0OiBtYXRjaFszXVxuICAgIH07XG5cbiAgICBpZiAoIXZhbGlkVW5pdChkYXRhKSkge1xuICAgICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiSW52YWxpZCB1bml0OiAnXCIgKyBkYXRhLnVuaXQgKyBcIicgaW4gXFxcXGluY2x1ZGVncmFwaGljcy5cIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cbn07XG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJpbmNsdWRlZ3JhcGhpY3NcIixcbiAgbmFtZXM6IFtcIlxcXFxpbmNsdWRlZ3JhcGhpY3NcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMSxcbiAgICBudW1PcHRpb25hbEFyZ3M6IDEsXG4gICAgYXJnVHlwZXM6IFtcInJhd1wiLCBcInVybFwiXSxcbiAgICBhbGxvd2VkSW5UZXh0OiBmYWxzZVxuICB9LFxuICBoYW5kbGVyOiAoX3JlZiwgYXJncywgb3B0QXJncykgPT4ge1xuICAgIGxldCB7XG4gICAgICBwYXJzZXJcbiAgICB9ID0gX3JlZjtcbiAgICBsZXQgd2lkdGggPSB7XG4gICAgICBudW1iZXI6IDAsXG4gICAgICB1bml0OiBcImVtXCJcbiAgICB9O1xuICAgIGxldCBoZWlnaHQgPSB7XG4gICAgICBudW1iZXI6IDAuOSxcbiAgICAgIHVuaXQ6IFwiZW1cIlxuICAgIH07IC8vIHNvcnRhIGNoYXJhY3RlciBzaXplZC5cblxuICAgIGxldCB0b3RhbGhlaWdodCA9IHtcbiAgICAgIG51bWJlcjogMCxcbiAgICAgIHVuaXQ6IFwiZW1cIlxuICAgIH07XG4gICAgbGV0IGFsdCA9IFwiXCI7XG5cbiAgICBpZiAob3B0QXJnc1swXSkge1xuICAgICAgY29uc3QgYXR0cmlidXRlU3RyID0gYXNzZXJ0Tm9kZVR5cGUob3B0QXJnc1swXSwgXCJyYXdcIikuc3RyaW5nOyAvLyBQYXJzZXIuanMgZG9lcyBub3QgcGFyc2Uga2V5L3ZhbHVlIHBhaXJzLiBXZSBnZXQgYSBzdHJpbmcuXG5cbiAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVTdHIuc3BsaXQoXCIsXCIpO1xuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGF0dHJpYnV0ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3Qga2V5VmFsID0gYXR0cmlidXRlc1tpXS5zcGxpdChcIj1cIik7XG5cbiAgICAgICAgaWYgKGtleVZhbC5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICBjb25zdCBzdHIgPSBrZXlWYWxbMV0udHJpbSgpO1xuXG4gICAgICAgICAgc3dpdGNoIChrZXlWYWxbMF0udHJpbSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiYWx0XCI6XG4gICAgICAgICAgICAgIGFsdCA9IHN0cjtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgXCJ3aWR0aFwiOlxuICAgICAgICAgICAgICB3aWR0aCA9IHNpemVEYXRhKHN0cik7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIFwiaGVpZ2h0XCI6XG4gICAgICAgICAgICAgIGhlaWdodCA9IHNpemVEYXRhKHN0cik7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIFwidG90YWxoZWlnaHRcIjpcbiAgICAgICAgICAgICAgdG90YWxoZWlnaHQgPSBzaXplRGF0YShzdHIpO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiSW52YWxpZCBrZXk6ICdcIiArIGtleVZhbFswXSArIFwiJyBpbiBcXFxcaW5jbHVkZWdyYXBoaWNzLlwiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBzcmMgPSBhc3NlcnROb2RlVHlwZShhcmdzWzBdLCBcInVybFwiKS51cmw7XG5cbiAgICBpZiAoYWx0ID09PSBcIlwiKSB7XG4gICAgICAvLyBObyBhbHQgZ2l2ZW4uIFVzZSB0aGUgZmlsZSBuYW1lLiBTdHJpcCBhd2F5IHRoZSBwYXRoLlxuICAgICAgYWx0ID0gc3JjO1xuICAgICAgYWx0ID0gYWx0LnJlcGxhY2UoL14uKltcXFxcL10vLCAnJyk7XG4gICAgICBhbHQgPSBhbHQuc3Vic3RyaW5nKDAsIGFsdC5sYXN0SW5kZXhPZignLicpKTtcbiAgICB9XG5cbiAgICBpZiAoIXBhcnNlci5zZXR0aW5ncy5pc1RydXN0ZWQoe1xuICAgICAgY29tbWFuZDogXCJcXFxcaW5jbHVkZWdyYXBoaWNzXCIsXG4gICAgICB1cmw6IHNyY1xuICAgIH0pKSB7XG4gICAgICByZXR1cm4gcGFyc2VyLmZvcm1hdFVuc3VwcG9ydGVkQ21kKFwiXFxcXGluY2x1ZGVncmFwaGljc1wiKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJpbmNsdWRlZ3JhcGhpY3NcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgYWx0OiBhbHQsXG4gICAgICB3aWR0aDogd2lkdGgsXG4gICAgICBoZWlnaHQ6IGhlaWdodCxcbiAgICAgIHRvdGFsaGVpZ2h0OiB0b3RhbGhlaWdodCxcbiAgICAgIHNyYzogc3JjXG4gICAgfTtcbiAgfSxcbiAgaHRtbEJ1aWxkZXI6IChncm91cCwgb3B0aW9ucykgPT4ge1xuICAgIGNvbnN0IGhlaWdodCA9IGNhbGN1bGF0ZVNpemUoZ3JvdXAuaGVpZ2h0LCBvcHRpb25zKTtcbiAgICBsZXQgZGVwdGggPSAwO1xuXG4gICAgaWYgKGdyb3VwLnRvdGFsaGVpZ2h0Lm51bWJlciA+IDApIHtcbiAgICAgIGRlcHRoID0gY2FsY3VsYXRlU2l6ZShncm91cC50b3RhbGhlaWdodCwgb3B0aW9ucykgLSBoZWlnaHQ7XG4gICAgfVxuXG4gICAgbGV0IHdpZHRoID0gMDtcblxuICAgIGlmIChncm91cC53aWR0aC5udW1iZXIgPiAwKSB7XG4gICAgICB3aWR0aCA9IGNhbGN1bGF0ZVNpemUoZ3JvdXAud2lkdGgsIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIGNvbnN0IHN0eWxlID0ge1xuICAgICAgaGVpZ2h0OiBtYWtlRW0oaGVpZ2h0ICsgZGVwdGgpXG4gICAgfTtcblxuICAgIGlmICh3aWR0aCA+IDApIHtcbiAgICAgIHN0eWxlLndpZHRoID0gbWFrZUVtKHdpZHRoKTtcbiAgICB9XG5cbiAgICBpZiAoZGVwdGggPiAwKSB7XG4gICAgICBzdHlsZS52ZXJ0aWNhbEFsaWduID0gbWFrZUVtKC1kZXB0aCk7XG4gICAgfVxuXG4gICAgY29uc3Qgbm9kZSA9IG5ldyBJbWcoZ3JvdXAuc3JjLCBncm91cC5hbHQsIHN0eWxlKTtcbiAgICBub2RlLmhlaWdodCA9IGhlaWdodDtcbiAgICBub2RlLmRlcHRoID0gZGVwdGg7XG4gICAgcmV0dXJuIG5vZGU7XG4gIH0sXG4gIG1hdGhtbEJ1aWxkZXI6IChncm91cCwgb3B0aW9ucykgPT4ge1xuICAgIGNvbnN0IG5vZGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1nbHlwaFwiLCBbXSk7XG4gICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJhbHRcIiwgZ3JvdXAuYWx0KTtcbiAgICBjb25zdCBoZWlnaHQgPSBjYWxjdWxhdGVTaXplKGdyb3VwLmhlaWdodCwgb3B0aW9ucyk7XG4gICAgbGV0IGRlcHRoID0gMDtcblxuICAgIGlmIChncm91cC50b3RhbGhlaWdodC5udW1iZXIgPiAwKSB7XG4gICAgICBkZXB0aCA9IGNhbGN1bGF0ZVNpemUoZ3JvdXAudG90YWxoZWlnaHQsIG9wdGlvbnMpIC0gaGVpZ2h0O1xuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJ2YWxpZ25cIiwgbWFrZUVtKC1kZXB0aCkpO1xuICAgIH1cblxuICAgIG5vZGUuc2V0QXR0cmlidXRlKFwiaGVpZ2h0XCIsIG1ha2VFbShoZWlnaHQgKyBkZXB0aCkpO1xuXG4gICAgaWYgKGdyb3VwLndpZHRoLm51bWJlciA+IDApIHtcbiAgICAgIGNvbnN0IHdpZHRoID0gY2FsY3VsYXRlU2l6ZShncm91cC53aWR0aCwgb3B0aW9ucyk7XG4gICAgICBub2RlLnNldEF0dHJpYnV0ZShcIndpZHRoXCIsIG1ha2VFbSh3aWR0aCkpO1xuICAgIH1cblxuICAgIG5vZGUuc2V0QXR0cmlidXRlKFwic3JjXCIsIGdyb3VwLnNyYyk7XG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cbn0pO1xuOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9ucy9rZXJuLmpzXG4vLyBIb3Jpem9udGFsIHNwYWNpbmcgY29tbWFuZHNcblxuXG5cblxuIC8vIFRPRE86IFxcaHNraXAgYW5kIFxcbXNraXAgc2hvdWxkIHN1cHBvcnQgcGx1cyBhbmQgbWludXMgaW4gbGVuZ3Roc1xuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwia2VyblwiLFxuICBuYW1lczogW1wiXFxcXGtlcm5cIiwgXCJcXFxcbWtlcm5cIiwgXCJcXFxcaHNraXBcIiwgXCJcXFxcbXNraXBcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMSxcbiAgICBhcmdUeXBlczogW1wic2l6ZVwiXSxcbiAgICBwcmltaXRpdmU6IHRydWUsXG4gICAgYWxsb3dlZEluVGV4dDogdHJ1ZVxuICB9LFxuXG4gIGhhbmRsZXIoX3JlZiwgYXJncykge1xuICAgIGxldCB7XG4gICAgICBwYXJzZXIsXG4gICAgICBmdW5jTmFtZVxuICAgIH0gPSBfcmVmO1xuICAgIGNvbnN0IHNpemUgPSBhc3NlcnROb2RlVHlwZShhcmdzWzBdLCBcInNpemVcIik7XG5cbiAgICBpZiAocGFyc2VyLnNldHRpbmdzLnN0cmljdCkge1xuICAgICAgY29uc3QgbWF0aEZ1bmN0aW9uID0gZnVuY05hbWVbMV0gPT09ICdtJzsgLy8gXFxta2VybiwgXFxtc2tpcFxuXG4gICAgICBjb25zdCBtdVVuaXQgPSBzaXplLnZhbHVlLnVuaXQgPT09ICdtdSc7XG5cbiAgICAgIGlmIChtYXRoRnVuY3Rpb24pIHtcbiAgICAgICAgaWYgKCFtdVVuaXQpIHtcbiAgICAgICAgICBwYXJzZXIuc2V0dGluZ3MucmVwb3J0Tm9uc3RyaWN0KFwibWF0aFZzVGV4dFVuaXRzXCIsIFwiTGFUZVgncyBcIiArIGZ1bmNOYW1lICsgXCIgc3VwcG9ydHMgb25seSBtdSB1bml0cywgXCIgKyAoXCJub3QgXCIgKyBzaXplLnZhbHVlLnVuaXQgKyBcIiB1bml0c1wiKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGFyc2VyLm1vZGUgIT09IFwibWF0aFwiKSB7XG4gICAgICAgICAgcGFyc2VyLnNldHRpbmdzLnJlcG9ydE5vbnN0cmljdChcIm1hdGhWc1RleHRVbml0c1wiLCBcIkxhVGVYJ3MgXCIgKyBmdW5jTmFtZSArIFwiIHdvcmtzIG9ubHkgaW4gbWF0aCBtb2RlXCIpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyAhbWF0aEZ1bmN0aW9uXG4gICAgICAgIGlmIChtdVVuaXQpIHtcbiAgICAgICAgICBwYXJzZXIuc2V0dGluZ3MucmVwb3J0Tm9uc3RyaWN0KFwibWF0aFZzVGV4dFVuaXRzXCIsIFwiTGFUZVgncyBcIiArIGZ1bmNOYW1lICsgXCIgZG9lc24ndCBzdXBwb3J0IG11IHVuaXRzXCIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwia2VyblwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBkaW1lbnNpb246IHNpemUudmFsdWVcbiAgICB9O1xuICB9LFxuXG4gIGh0bWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIGJ1aWxkQ29tbW9uLm1ha2VHbHVlKGdyb3VwLmRpbWVuc2lvbiwgb3B0aW9ucyk7XG4gIH0sXG5cbiAgbWF0aG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIGNvbnN0IGRpbWVuc2lvbiA9IGNhbGN1bGF0ZVNpemUoZ3JvdXAuZGltZW5zaW9uLCBvcHRpb25zKTtcbiAgICByZXR1cm4gbmV3IG1hdGhNTFRyZWUuU3BhY2VOb2RlKGRpbWVuc2lvbik7XG4gIH1cblxufSk7XG47Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb25zL2xhcC5qc1xuLy8gSG9yaXpvbnRhbCBvdmVybGFwIGZ1bmN0aW9uc1xuXG5cblxuXG5cblxuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcImxhcFwiLFxuICBuYW1lczogW1wiXFxcXG1hdGhsbGFwXCIsIFwiXFxcXG1hdGhybGFwXCIsIFwiXFxcXG1hdGhjbGFwXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDEsXG4gICAgYWxsb3dlZEluVGV4dDogdHJ1ZVxuICB9LFxuICBoYW5kbGVyOiAoX3JlZiwgYXJncykgPT4ge1xuICAgIGxldCB7XG4gICAgICBwYXJzZXIsXG4gICAgICBmdW5jTmFtZVxuICAgIH0gPSBfcmVmO1xuICAgIGNvbnN0IGJvZHkgPSBhcmdzWzBdO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImxhcFwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBhbGlnbm1lbnQ6IGZ1bmNOYW1lLnNsaWNlKDUpLFxuICAgICAgYm9keVxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiAoZ3JvdXAsIG9wdGlvbnMpID0+IHtcbiAgICAvLyBtYXRobGxhcCwgbWF0aHJsYXAsIG1hdGhjbGFwXG4gICAgbGV0IGlubmVyO1xuXG4gICAgaWYgKGdyb3VwLmFsaWdubWVudCA9PT0gXCJjbGFwXCIpIHtcbiAgICAgIC8vIHJlZjogaHR0cHM6Ly93d3cubWF0aC5sc3UuZWR1L35hcGVybGlzL3B1YmxpY2F0aW9ucy9tYXRoY2xhcC9cbiAgICAgIGlubmVyID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW10sIFtidWlsZEdyb3VwKGdyb3VwLmJvZHksIG9wdGlvbnMpXSk7IC8vIHdyYXAsIHNpbmNlIENTUyB3aWxsIGNlbnRlciBhIC5jbGFwID4gLmlubmVyID4gc3BhblxuXG4gICAgICBpbm5lciA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcImlubmVyXCJdLCBbaW5uZXJdLCBvcHRpb25zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaW5uZXIgPSBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJpbm5lclwiXSwgW2J1aWxkR3JvdXAoZ3JvdXAuYm9keSwgb3B0aW9ucyldKTtcbiAgICB9XG5cbiAgICBjb25zdCBmaXggPSBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJmaXhcIl0sIFtdKTtcbiAgICBsZXQgbm9kZSA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtncm91cC5hbGlnbm1lbnRdLCBbaW5uZXIsIGZpeF0sIG9wdGlvbnMpOyAvLyBBdCB0aGlzIHBvaW50LCB3ZSBoYXZlIGNvcnJlY3RseSBzZXQgaG9yaXpvbnRhbCBhbGlnbm1lbnQgb2YgdGhlXG4gICAgLy8gdHdvIGl0ZW1zIGludm9sdmVkIGluIHRoZSBsYXAuXG4gICAgLy8gTmV4dCwgdXNlIGEgc3RydXQgdG8gc2V0IHRoZSBoZWlnaHQgb2YgdGhlIEhUTUwgYm91bmRpbmcgYm94LlxuICAgIC8vIE90aGVyd2lzZSwgYSB0YWxsIGFyZ3VtZW50IG1heSBiZSBtaXNwbGFjZWQuXG4gICAgLy8gVGhpcyBjb2RlIHJlc29sdmVkIGlzc3VlICMxMTUzXG5cbiAgICBjb25zdCBzdHJ1dCA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcInN0cnV0XCJdKTtcbiAgICBzdHJ1dC5zdHlsZS5oZWlnaHQgPSBtYWtlRW0obm9kZS5oZWlnaHQgKyBub2RlLmRlcHRoKTtcblxuICAgIGlmIChub2RlLmRlcHRoKSB7XG4gICAgICBzdHJ1dC5zdHlsZS52ZXJ0aWNhbEFsaWduID0gbWFrZUVtKC1ub2RlLmRlcHRoKTtcbiAgICB9XG5cbiAgICBub2RlLmNoaWxkcmVuLnVuc2hpZnQoc3RydXQpOyAvLyBOZXh0LCBwcmV2ZW50IHZlcnRpY2FsIG1pc3BsYWNlbWVudCB3aGVuIG5leHQgdG8gc29tZXRoaW5nIHRhbGwuXG4gICAgLy8gVGhpcyBjb2RlIHJlc29sdmVzIGlzc3VlICMxMjM0XG5cbiAgICBub2RlID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW1widGhpbmJveFwiXSwgW25vZGVdLCBvcHRpb25zKTtcbiAgICByZXR1cm4gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wibW9yZFwiLCBcInZib3hcIl0sIFtub2RlXSwgb3B0aW9ucyk7XG4gIH0sXG4gIG1hdGhtbEJ1aWxkZXI6IChncm91cCwgb3B0aW9ucykgPT4ge1xuICAgIC8vIG1hdGhsbGFwLCBtYXRocmxhcCwgbWF0aGNsYXBcbiAgICBjb25zdCBub2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtcGFkZGVkXCIsIFtidWlsZE1hdGhNTF9idWlsZEdyb3VwKGdyb3VwLmJvZHksIG9wdGlvbnMpXSk7XG5cbiAgICBpZiAoZ3JvdXAuYWxpZ25tZW50ICE9PSBcInJsYXBcIikge1xuICAgICAgY29uc3Qgb2Zmc2V0ID0gZ3JvdXAuYWxpZ25tZW50ID09PSBcImxsYXBcIiA/IFwiLTFcIiA6IFwiLTAuNVwiO1xuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJsc3BhY2VcIiwgb2Zmc2V0ICsgXCJ3aWR0aFwiKTtcbiAgICB9XG5cbiAgICBub2RlLnNldEF0dHJpYnV0ZShcIndpZHRoXCIsIFwiMHB4XCIpO1xuICAgIHJldHVybiBub2RlO1xuICB9XG59KTtcbjsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbnMvbWF0aC5qc1xuXG4gLy8gU3dpdGNoaW5nIGZyb20gdGV4dCBtb2RlIGJhY2sgdG8gbWF0aCBtb2RlXG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJzdHlsaW5nXCIsXG4gIG5hbWVzOiBbXCJcXFxcKFwiLCBcIiRcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMCxcbiAgICBhbGxvd2VkSW5UZXh0OiB0cnVlLFxuICAgIGFsbG93ZWRJbk1hdGg6IGZhbHNlXG4gIH0sXG5cbiAgaGFuZGxlcihfcmVmLCBhcmdzKSB7XG4gICAgbGV0IHtcbiAgICAgIGZ1bmNOYW1lLFxuICAgICAgcGFyc2VyXG4gICAgfSA9IF9yZWY7XG4gICAgY29uc3Qgb3V0ZXJNb2RlID0gcGFyc2VyLm1vZGU7XG4gICAgcGFyc2VyLnN3aXRjaE1vZGUoXCJtYXRoXCIpO1xuICAgIGNvbnN0IGNsb3NlID0gZnVuY05hbWUgPT09IFwiXFxcXChcIiA/IFwiXFxcXClcIiA6IFwiJFwiO1xuICAgIGNvbnN0IGJvZHkgPSBwYXJzZXIucGFyc2VFeHByZXNzaW9uKGZhbHNlLCBjbG9zZSk7XG4gICAgcGFyc2VyLmV4cGVjdChjbG9zZSk7XG4gICAgcGFyc2VyLnN3aXRjaE1vZGUob3V0ZXJNb2RlKTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJzdHlsaW5nXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIHN0eWxlOiBcInRleHRcIixcbiAgICAgIGJvZHlcbiAgICB9O1xuICB9XG5cbn0pOyAvLyBDaGVjayBmb3IgZXh0cmEgY2xvc2luZyBtYXRoIGRlbGltaXRlcnNcblxuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcInRleHRcIixcbiAgLy8gRG9lc24ndCBtYXR0ZXIgd2hhdCB0aGlzIGlzLlxuICBuYW1lczogW1wiXFxcXClcIiwgXCJcXFxcXVwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAwLFxuICAgIGFsbG93ZWRJblRleHQ6IHRydWUsXG4gICAgYWxsb3dlZEluTWF0aDogZmFsc2VcbiAgfSxcblxuICBoYW5kbGVyKGNvbnRleHQsIGFyZ3MpIHtcbiAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJNaXNtYXRjaGVkIFwiICsgY29udGV4dC5mdW5jTmFtZSk7XG4gIH1cblxufSk7XG47Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb25zL21hdGhjaG9pY2UuanNcblxuXG5cblxuXG5cbmNvbnN0IGNob29zZU1hdGhTdHlsZSA9IChncm91cCwgb3B0aW9ucykgPT4ge1xuICBzd2l0Y2ggKG9wdGlvbnMuc3R5bGUuc2l6ZSkge1xuICAgIGNhc2Ugc3JjX1N0eWxlLkRJU1BMQVkuc2l6ZTpcbiAgICAgIHJldHVybiBncm91cC5kaXNwbGF5O1xuXG4gICAgY2FzZSBzcmNfU3R5bGUuVEVYVC5zaXplOlxuICAgICAgcmV0dXJuIGdyb3VwLnRleHQ7XG5cbiAgICBjYXNlIHNyY19TdHlsZS5TQ1JJUFQuc2l6ZTpcbiAgICAgIHJldHVybiBncm91cC5zY3JpcHQ7XG5cbiAgICBjYXNlIHNyY19TdHlsZS5TQ1JJUFRTQ1JJUFQuc2l6ZTpcbiAgICAgIHJldHVybiBncm91cC5zY3JpcHRzY3JpcHQ7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGdyb3VwLnRleHQ7XG4gIH1cbn07XG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJtYXRoY2hvaWNlXCIsXG4gIG5hbWVzOiBbXCJcXFxcbWF0aGNob2ljZVwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiA0LFxuICAgIHByaW1pdGl2ZTogdHJ1ZVxuICB9LFxuICBoYW5kbGVyOiAoX3JlZiwgYXJncykgPT4ge1xuICAgIGxldCB7XG4gICAgICBwYXJzZXJcbiAgICB9ID0gX3JlZjtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJtYXRoY2hvaWNlXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGRpc3BsYXk6IG9yZGFyZ3VtZW50KGFyZ3NbMF0pLFxuICAgICAgdGV4dDogb3JkYXJndW1lbnQoYXJnc1sxXSksXG4gICAgICBzY3JpcHQ6IG9yZGFyZ3VtZW50KGFyZ3NbMl0pLFxuICAgICAgc2NyaXB0c2NyaXB0OiBvcmRhcmd1bWVudChhcmdzWzNdKVxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiAoZ3JvdXAsIG9wdGlvbnMpID0+IHtcbiAgICBjb25zdCBib2R5ID0gY2hvb3NlTWF0aFN0eWxlKGdyb3VwLCBvcHRpb25zKTtcbiAgICBjb25zdCBlbGVtZW50cyA9IGJ1aWxkRXhwcmVzc2lvbihib2R5LCBvcHRpb25zLCBmYWxzZSk7XG4gICAgcmV0dXJuIGJ1aWxkQ29tbW9uLm1ha2VGcmFnbWVudChlbGVtZW50cyk7XG4gIH0sXG4gIG1hdGhtbEJ1aWxkZXI6IChncm91cCwgb3B0aW9ucykgPT4ge1xuICAgIGNvbnN0IGJvZHkgPSBjaG9vc2VNYXRoU3R5bGUoZ3JvdXAsIG9wdGlvbnMpO1xuICAgIHJldHVybiBidWlsZEV4cHJlc3Npb25Sb3coYm9keSwgb3B0aW9ucyk7XG4gIH1cbn0pO1xuOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9ucy91dGlscy9hc3NlbWJsZVN1cFN1Yi5qc1xuXG5cblxuIC8vIEZvciBhbiBvcGVyYXRvciB3aXRoIGxpbWl0cywgYXNzZW1ibGUgdGhlIGJhc2UsIHN1cCwgYW5kIHN1YiBpbnRvIGEgc3Bhbi5cblxuY29uc3QgYXNzZW1ibGVTdXBTdWIgPSAoYmFzZSwgc3VwR3JvdXAsIHN1Ykdyb3VwLCBvcHRpb25zLCBzdHlsZSwgc2xhbnQsIGJhc2VTaGlmdCkgPT4ge1xuICBiYXNlID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW10sIFtiYXNlXSk7XG4gIGNvbnN0IHN1YklzU2luZ2xlQ2hhcmFjdGVyID0gc3ViR3JvdXAgJiYgdXRpbHMuaXNDaGFyYWN0ZXJCb3goc3ViR3JvdXApO1xuICBsZXQgc3ViO1xuICBsZXQgc3VwOyAvLyBXZSBtYW51YWxseSBoYXZlIHRvIGhhbmRsZSB0aGUgc3VwZXJzY3JpcHRzIGFuZCBzdWJzY3JpcHRzLiBUaGlzLFxuICAvLyBhc2lkZSBmcm9tIHRoZSBrZXJuIGNhbGN1bGF0aW9ucywgaXMgY29waWVkIGZyb20gc3Vwc3ViLlxuXG4gIGlmIChzdXBHcm91cCkge1xuICAgIGNvbnN0IGVsZW0gPSBidWlsZEdyb3VwKHN1cEdyb3VwLCBvcHRpb25zLmhhdmluZ1N0eWxlKHN0eWxlLnN1cCgpKSwgb3B0aW9ucyk7XG4gICAgc3VwID0ge1xuICAgICAgZWxlbSxcbiAgICAgIGtlcm46IE1hdGgubWF4KG9wdGlvbnMuZm9udE1ldHJpY3MoKS5iaWdPcFNwYWNpbmcxLCBvcHRpb25zLmZvbnRNZXRyaWNzKCkuYmlnT3BTcGFjaW5nMyAtIGVsZW0uZGVwdGgpXG4gICAgfTtcbiAgfVxuXG4gIGlmIChzdWJHcm91cCkge1xuICAgIGNvbnN0IGVsZW0gPSBidWlsZEdyb3VwKHN1Ykdyb3VwLCBvcHRpb25zLmhhdmluZ1N0eWxlKHN0eWxlLnN1YigpKSwgb3B0aW9ucyk7XG4gICAgc3ViID0ge1xuICAgICAgZWxlbSxcbiAgICAgIGtlcm46IE1hdGgubWF4KG9wdGlvbnMuZm9udE1ldHJpY3MoKS5iaWdPcFNwYWNpbmcyLCBvcHRpb25zLmZvbnRNZXRyaWNzKCkuYmlnT3BTcGFjaW5nNCAtIGVsZW0uaGVpZ2h0KVxuICAgIH07XG4gIH0gLy8gQnVpbGQgdGhlIGZpbmFsIGdyb3VwIGFzIGEgdmxpc3Qgb2YgdGhlIHBvc3NpYmxlIHN1YnNjcmlwdCwgYmFzZSxcbiAgLy8gYW5kIHBvc3NpYmxlIHN1cGVyc2NyaXB0LlxuXG5cbiAgbGV0IGZpbmFsR3JvdXA7XG5cbiAgaWYgKHN1cCAmJiBzdWIpIHtcbiAgICBjb25zdCBib3R0b20gPSBvcHRpb25zLmZvbnRNZXRyaWNzKCkuYmlnT3BTcGFjaW5nNSArIHN1Yi5lbGVtLmhlaWdodCArIHN1Yi5lbGVtLmRlcHRoICsgc3ViLmtlcm4gKyBiYXNlLmRlcHRoICsgYmFzZVNoaWZ0O1xuICAgIGZpbmFsR3JvdXAgPSBidWlsZENvbW1vbi5tYWtlVkxpc3Qoe1xuICAgICAgcG9zaXRpb25UeXBlOiBcImJvdHRvbVwiLFxuICAgICAgcG9zaXRpb25EYXRhOiBib3R0b20sXG4gICAgICBjaGlsZHJlbjogW3tcbiAgICAgICAgdHlwZTogXCJrZXJuXCIsXG4gICAgICAgIHNpemU6IG9wdGlvbnMuZm9udE1ldHJpY3MoKS5iaWdPcFNwYWNpbmc1XG4gICAgICB9LCB7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBzdWIuZWxlbSxcbiAgICAgICAgbWFyZ2luTGVmdDogbWFrZUVtKC1zbGFudClcbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJrZXJuXCIsXG4gICAgICAgIHNpemU6IHN1Yi5rZXJuXG4gICAgICB9LCB7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBiYXNlXG4gICAgICB9LCB7XG4gICAgICAgIHR5cGU6IFwia2VyblwiLFxuICAgICAgICBzaXplOiBzdXAua2VyblxuICAgICAgfSwge1xuICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgZWxlbTogc3VwLmVsZW0sXG4gICAgICAgIG1hcmdpbkxlZnQ6IG1ha2VFbShzbGFudClcbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJrZXJuXCIsXG4gICAgICAgIHNpemU6IG9wdGlvbnMuZm9udE1ldHJpY3MoKS5iaWdPcFNwYWNpbmc1XG4gICAgICB9XVxuICAgIH0sIG9wdGlvbnMpO1xuICB9IGVsc2UgaWYgKHN1Yikge1xuICAgIGNvbnN0IHRvcCA9IGJhc2UuaGVpZ2h0IC0gYmFzZVNoaWZ0OyAvLyBTaGlmdCB0aGUgbGltaXRzIGJ5IHRoZSBzbGFudCBvZiB0aGUgc3ltYm9sLiBOb3RlXG4gICAgLy8gdGhhdCB3ZSBhcmUgc3VwcG9zZWQgdG8gc2hpZnQgdGhlIGxpbWl0cyBieSAxLzIgb2YgdGhlIHNsYW50LFxuICAgIC8vIGJ1dCBzaW5jZSB3ZSBhcmUgY2VudGVyaW5nIHRoZSBsaW1pdHMgYWRkaW5nIGEgZnVsbCBzbGFudCBvZlxuICAgIC8vIG1hcmdpbiB3aWxsIHNoaWZ0IGJ5IDEvMiB0aGF0LlxuXG4gICAgZmluYWxHcm91cCA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICBwb3NpdGlvblR5cGU6IFwidG9wXCIsXG4gICAgICBwb3NpdGlvbkRhdGE6IHRvcCxcbiAgICAgIGNoaWxkcmVuOiBbe1xuICAgICAgICB0eXBlOiBcImtlcm5cIixcbiAgICAgICAgc2l6ZTogb3B0aW9ucy5mb250TWV0cmljcygpLmJpZ09wU3BhY2luZzVcbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IHN1Yi5lbGVtLFxuICAgICAgICBtYXJnaW5MZWZ0OiBtYWtlRW0oLXNsYW50KVxuICAgICAgfSwge1xuICAgICAgICB0eXBlOiBcImtlcm5cIixcbiAgICAgICAgc2l6ZTogc3ViLmtlcm5cbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IGJhc2VcbiAgICAgIH1dXG4gICAgfSwgb3B0aW9ucyk7XG4gIH0gZWxzZSBpZiAoc3VwKSB7XG4gICAgY29uc3QgYm90dG9tID0gYmFzZS5kZXB0aCArIGJhc2VTaGlmdDtcbiAgICBmaW5hbEdyb3VwID0gYnVpbGRDb21tb24ubWFrZVZMaXN0KHtcbiAgICAgIHBvc2l0aW9uVHlwZTogXCJib3R0b21cIixcbiAgICAgIHBvc2l0aW9uRGF0YTogYm90dG9tLFxuICAgICAgY2hpbGRyZW46IFt7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBiYXNlXG4gICAgICB9LCB7XG4gICAgICAgIHR5cGU6IFwia2VyblwiLFxuICAgICAgICBzaXplOiBzdXAua2VyblxuICAgICAgfSwge1xuICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgZWxlbTogc3VwLmVsZW0sXG4gICAgICAgIG1hcmdpbkxlZnQ6IG1ha2VFbShzbGFudClcbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJrZXJuXCIsXG4gICAgICAgIHNpemU6IG9wdGlvbnMuZm9udE1ldHJpY3MoKS5iaWdPcFNwYWNpbmc1XG4gICAgICB9XVxuICAgIH0sIG9wdGlvbnMpO1xuICB9IGVsc2Uge1xuICAgIC8vIFRoaXMgY2FzZSBwcm9iYWJseSBzaG91bGRuJ3Qgb2NjdXIgKHRoaXMgd291bGQgbWVhbiB0aGVcbiAgICAvLyBzdXBzdWIgd2FzIHNlbmRpbmcgdXMgYSBncm91cCB3aXRoIG5vIHN1cGVyc2NyaXB0IG9yXG4gICAgLy8gc3Vic2NyaXB0KSBidXQgYmUgc2FmZS5cbiAgICByZXR1cm4gYmFzZTtcbiAgfVxuXG4gIGNvbnN0IHBhcnRzID0gW2ZpbmFsR3JvdXBdO1xuXG4gIGlmIChzdWIgJiYgc2xhbnQgIT09IDAgJiYgIXN1YklzU2luZ2xlQ2hhcmFjdGVyKSB7XG4gICAgLy8gQSBuZWdhdGl2ZSBtYXJnaW4tbGVmdCB3YXMgYXBwbGllZCB0byB0aGUgbG93ZXIgbGltaXQuXG4gICAgLy8gQXZvaWQgYW4gb3ZlcmxhcCBieSBwbGFjaW5nIGEgc3BhY2VyIG9uIHRoZSBsZWZ0IG9uIHRoZSBncm91cC5cbiAgICBjb25zdCBzcGFjZXIgPSBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJtc3BhY2VcIl0sIFtdLCBvcHRpb25zKTtcbiAgICBzcGFjZXIuc3R5bGUubWFyZ2luUmlnaHQgPSBtYWtlRW0oc2xhbnQpO1xuICAgIHBhcnRzLnVuc2hpZnQoc3BhY2VyKTtcbiAgfVxuXG4gIHJldHVybiBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJtb3BcIiwgXCJvcC1saW1pdHNcIl0sIHBhcnRzLCBvcHRpb25zKTtcbn07XG47Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb25zL29wLmpzXG4vLyBMaW1pdHMsIHN5bWJvbHNcblxuXG5cblxuXG5cblxuXG5cblxuXG4vLyBNb3N0IG9wZXJhdG9ycyBoYXZlIGEgbGFyZ2Ugc3VjY2Vzc29yIHN5bWJvbCwgYnV0IHRoZXNlIGRvbid0LlxuY29uc3Qgbm9TdWNjZXNzb3IgPSBbXCJcXFxcc21hbGxpbnRcIl07IC8vIE5PVEU6IFVubGlrZSBtb3N0IGBodG1sQnVpbGRlcmBzLCB0aGlzIG9uZSBoYW5kbGVzIG5vdCBvbmx5IFwib3BcIiwgYnV0IGFsc29cbi8vIFwic3Vwc3ViXCIgc2luY2Ugc29tZSBvZiB0aGVtIChsaWtlIFxcaW50KSBjYW4gYWZmZWN0IHN1cGVyL3N1YnNjcmlwdGluZy5cblxuY29uc3Qgb3BfaHRtbEJ1aWxkZXIgPSAoZ3JwLCBvcHRpb25zKSA9PiB7XG4gIC8vIE9wZXJhdG9ycyBhcmUgaGFuZGxlZCBpbiB0aGUgVGVYYm9vayBwZy4gNDQzLTQ0NCwgcnVsZSAxMyhhKS5cbiAgbGV0IHN1cEdyb3VwO1xuICBsZXQgc3ViR3JvdXA7XG4gIGxldCBoYXNMaW1pdHMgPSBmYWxzZTtcbiAgbGV0IGdyb3VwO1xuXG4gIGlmIChncnAudHlwZSA9PT0gXCJzdXBzdWJcIikge1xuICAgIC8vIElmIHdlIGhhdmUgbGltaXRzLCBzdXBzdWIgd2lsbCBwYXNzIHVzIGl0cyBncm91cCB0byBoYW5kbGUuIFB1bGxcbiAgICAvLyBvdXQgdGhlIHN1cGVyc2NyaXB0IGFuZCBzdWJzY3JpcHQgYW5kIHNldCB0aGUgZ3JvdXAgdG8gdGhlIG9wIGluXG4gICAgLy8gaXRzIGJhc2UuXG4gICAgc3VwR3JvdXAgPSBncnAuc3VwO1xuICAgIHN1Ykdyb3VwID0gZ3JwLnN1YjtcbiAgICBncm91cCA9IGFzc2VydE5vZGVUeXBlKGdycC5iYXNlLCBcIm9wXCIpO1xuICAgIGhhc0xpbWl0cyA9IHRydWU7XG4gIH0gZWxzZSB7XG4gICAgZ3JvdXAgPSBhc3NlcnROb2RlVHlwZShncnAsIFwib3BcIik7XG4gIH1cblxuICBjb25zdCBzdHlsZSA9IG9wdGlvbnMuc3R5bGU7XG4gIGxldCBsYXJnZSA9IGZhbHNlO1xuXG4gIGlmIChzdHlsZS5zaXplID09PSBzcmNfU3R5bGUuRElTUExBWS5zaXplICYmIGdyb3VwLnN5bWJvbCAmJiAhdXRpbHMuY29udGFpbnMobm9TdWNjZXNzb3IsIGdyb3VwLm5hbWUpKSB7XG4gICAgLy8gTW9zdCBzeW1ib2wgb3BlcmF0b3JzIGdldCBsYXJnZXIgaW4gZGlzcGxheXN0eWxlIChydWxlIDEzKVxuICAgIGxhcmdlID0gdHJ1ZTtcbiAgfVxuXG4gIGxldCBiYXNlO1xuXG4gIGlmIChncm91cC5zeW1ib2wpIHtcbiAgICAvLyBJZiB0aGlzIGlzIGEgc3ltYm9sLCBjcmVhdGUgdGhlIHN5bWJvbC5cbiAgICBjb25zdCBmb250TmFtZSA9IGxhcmdlID8gXCJTaXplMi1SZWd1bGFyXCIgOiBcIlNpemUxLVJlZ3VsYXJcIjtcbiAgICBsZXQgc3Rhc2ggPSBcIlwiO1xuXG4gICAgaWYgKGdyb3VwLm5hbWUgPT09IFwiXFxcXG9paW50XCIgfHwgZ3JvdXAubmFtZSA9PT0gXCJcXFxcb2lpaW50XCIpIHtcbiAgICAgIC8vIE5vIGZvbnQgZ2x5cGhzIHlldCwgc28gdXNlIGEgZ2x5cGggdy9vIHRoZSBvdmFsLlxuICAgICAgLy8gVE9ETzogV2hlbiBmb250IGdseXBocyBhcmUgYXZhaWxhYmxlLCBkZWxldGUgdGhpcyBjb2RlLlxuICAgICAgc3Rhc2ggPSBncm91cC5uYW1lLnNsaWNlKDEpO1xuICAgICAgZ3JvdXAubmFtZSA9IHN0YXNoID09PSBcIm9paW50XCIgPyBcIlxcXFxpaW50XCIgOiBcIlxcXFxpaWludFwiO1xuICAgIH1cblxuICAgIGJhc2UgPSBidWlsZENvbW1vbi5tYWtlU3ltYm9sKGdyb3VwLm5hbWUsIGZvbnROYW1lLCBcIm1hdGhcIiwgb3B0aW9ucywgW1wibW9wXCIsIFwib3Atc3ltYm9sXCIsIGxhcmdlID8gXCJsYXJnZS1vcFwiIDogXCJzbWFsbC1vcFwiXSk7XG5cbiAgICBpZiAoc3Rhc2gubGVuZ3RoID4gMCkge1xuICAgICAgLy8gV2UncmUgaW4gXFxvaWludCBvciBcXG9paWludC4gT3ZlcmxheSB0aGUgb3ZhbC5cbiAgICAgIC8vIFRPRE86IFdoZW4gZm9udCBnbHlwaHMgYXJlIGF2YWlsYWJsZSwgZGVsZXRlIHRoaXMgY29kZS5cbiAgICAgIGNvbnN0IGl0YWxpYyA9IGJhc2UuaXRhbGljO1xuICAgICAgY29uc3Qgb3ZhbCA9IGJ1aWxkQ29tbW9uLnN0YXRpY1N2ZyhzdGFzaCArIFwiU2l6ZVwiICsgKGxhcmdlID8gXCIyXCIgOiBcIjFcIiksIG9wdGlvbnMpO1xuICAgICAgYmFzZSA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICAgIHBvc2l0aW9uVHlwZTogXCJpbmRpdmlkdWFsU2hpZnRcIixcbiAgICAgICAgY2hpbGRyZW46IFt7XG4gICAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgICAgZWxlbTogYmFzZSxcbiAgICAgICAgICBzaGlmdDogMFxuICAgICAgICB9LCB7XG4gICAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgICAgZWxlbTogb3ZhbCxcbiAgICAgICAgICBzaGlmdDogbGFyZ2UgPyAwLjA4IDogMFxuICAgICAgICB9XVxuICAgICAgfSwgb3B0aW9ucyk7XG4gICAgICBncm91cC5uYW1lID0gXCJcXFxcXCIgKyBzdGFzaDtcbiAgICAgIGJhc2UuY2xhc3Nlcy51bnNoaWZ0KFwibW9wXCIpOyAvLyAkRmxvd0ZpeE1lXG5cbiAgICAgIGJhc2UuaXRhbGljID0gaXRhbGljO1xuICAgIH1cbiAgfSBlbHNlIGlmIChncm91cC5ib2R5KSB7XG4gICAgLy8gSWYgdGhpcyBpcyBhIGxpc3QsIGNvbXBvc2UgdGhhdCBsaXN0LlxuICAgIGNvbnN0IGlubmVyID0gYnVpbGRFeHByZXNzaW9uKGdyb3VwLmJvZHksIG9wdGlvbnMsIHRydWUpO1xuXG4gICAgaWYgKGlubmVyLmxlbmd0aCA9PT0gMSAmJiBpbm5lclswXSBpbnN0YW5jZW9mIFN5bWJvbE5vZGUpIHtcbiAgICAgIGJhc2UgPSBpbm5lclswXTtcbiAgICAgIGJhc2UuY2xhc3Nlc1swXSA9IFwibW9wXCI7IC8vIHJlcGxhY2Ugb2xkIG1jbGFzc1xuICAgIH0gZWxzZSB7XG4gICAgICBiYXNlID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wibW9wXCJdLCBpbm5lciwgb3B0aW9ucyk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIE90aGVyd2lzZSwgdGhpcyBpcyBhIHRleHQgb3BlcmF0b3IuIEJ1aWxkIHRoZSB0ZXh0IGZyb20gdGhlXG4gICAgLy8gb3BlcmF0b3IncyBuYW1lLlxuICAgIGNvbnN0IG91dHB1dCA9IFtdO1xuXG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCBncm91cC5uYW1lLmxlbmd0aDsgaSsrKSB7XG4gICAgICBvdXRwdXQucHVzaChidWlsZENvbW1vbi5tYXRoc3ltKGdyb3VwLm5hbWVbaV0sIGdyb3VwLm1vZGUsIG9wdGlvbnMpKTtcbiAgICB9XG5cbiAgICBiYXNlID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wibW9wXCJdLCBvdXRwdXQsIG9wdGlvbnMpO1xuICB9IC8vIElmIGNvbnRlbnQgb2Ygb3AgaXMgYSBzaW5nbGUgc3ltYm9sLCBzaGlmdCBpdCB2ZXJ0aWNhbGx5LlxuXG5cbiAgbGV0IGJhc2VTaGlmdCA9IDA7XG4gIGxldCBzbGFudCA9IDA7XG5cbiAgaWYgKChiYXNlIGluc3RhbmNlb2YgU3ltYm9sTm9kZSB8fCBncm91cC5uYW1lID09PSBcIlxcXFxvaWludFwiIHx8IGdyb3VwLm5hbWUgPT09IFwiXFxcXG9paWludFwiKSAmJiAhZ3JvdXAuc3VwcHJlc3NCYXNlU2hpZnQpIHtcbiAgICAvLyBXZSBzdXBwcmVzcyB0aGUgc2hpZnQgb2YgdGhlIGJhc2Ugb2YgXFxvdmVyc2V0IGFuZCBcXHVuZGVyc2V0LiBPdGhlcndpc2UsXG4gICAgLy8gc2hpZnQgdGhlIHN5bWJvbCBzbyBpdHMgY2VudGVyIGxpZXMgb24gdGhlIGF4aXMgKHJ1bGUgMTMpLiBJdFxuICAgIC8vIGFwcGVhcnMgdGhhdCBvdXIgZm9udHMgaGF2ZSB0aGUgY2VudGVycyBvZiB0aGUgc3ltYm9scyBhbHJlYWR5XG4gICAgLy8gYWxtb3N0IG9uIHRoZSBheGlzLCBzbyB0aGVzZSBudW1iZXJzIGFyZSB2ZXJ5IHNtYWxsLiBOb3RlIHdlXG4gICAgLy8gZG9uJ3QgYWN0dWFsbHkgYXBwbHkgdGhpcyBoZXJlLCBidXQgaW5zdGVhZCBpdCBpcyB1c2VkIGVpdGhlciBpblxuICAgIC8vIHRoZSB2bGlzdCBjcmVhdGlvbiBvciBzZXBhcmF0ZWx5IHdoZW4gdGhlcmUgYXJlIG5vIGxpbWl0cy5cbiAgICBiYXNlU2hpZnQgPSAoYmFzZS5oZWlnaHQgLSBiYXNlLmRlcHRoKSAvIDIgLSBvcHRpb25zLmZvbnRNZXRyaWNzKCkuYXhpc0hlaWdodDsgLy8gVGhlIHNsYW50IG9mIHRoZSBzeW1ib2wgaXMganVzdCBpdHMgaXRhbGljIGNvcnJlY3Rpb24uXG4gICAgLy8gJEZsb3dGaXhNZVxuXG4gICAgc2xhbnQgPSBiYXNlLml0YWxpYztcbiAgfVxuXG4gIGlmIChoYXNMaW1pdHMpIHtcbiAgICByZXR1cm4gYXNzZW1ibGVTdXBTdWIoYmFzZSwgc3VwR3JvdXAsIHN1Ykdyb3VwLCBvcHRpb25zLCBzdHlsZSwgc2xhbnQsIGJhc2VTaGlmdCk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKGJhc2VTaGlmdCkge1xuICAgICAgYmFzZS5zdHlsZS5wb3NpdGlvbiA9IFwicmVsYXRpdmVcIjtcbiAgICAgIGJhc2Uuc3R5bGUudG9wID0gbWFrZUVtKGJhc2VTaGlmdCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJhc2U7XG4gIH1cbn07XG5cbmNvbnN0IG9wX21hdGhtbEJ1aWxkZXIgPSAoZ3JvdXAsIG9wdGlvbnMpID0+IHtcbiAgbGV0IG5vZGU7XG5cbiAgaWYgKGdyb3VwLnN5bWJvbCkge1xuICAgIC8vIFRoaXMgaXMgYSBzeW1ib2wuIEp1c3QgYWRkIHRoZSBzeW1ib2wuXG4gICAgbm9kZSA9IG5ldyBNYXRoTm9kZShcIm1vXCIsIFttYWtlVGV4dChncm91cC5uYW1lLCBncm91cC5tb2RlKV0pO1xuXG4gICAgaWYgKHV0aWxzLmNvbnRhaW5zKG5vU3VjY2Vzc29yLCBncm91cC5uYW1lKSkge1xuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJsYXJnZW9wXCIsIFwiZmFsc2VcIik7XG4gICAgfVxuICB9IGVsc2UgaWYgKGdyb3VwLmJvZHkpIHtcbiAgICAvLyBUaGlzIGlzIGFuIG9wZXJhdG9yIHdpdGggY2hpbGRyZW4uIEFkZCB0aGVtLlxuICAgIG5vZGUgPSBuZXcgTWF0aE5vZGUoXCJtb1wiLCBidWlsZE1hdGhNTF9idWlsZEV4cHJlc3Npb24oZ3JvdXAuYm9keSwgb3B0aW9ucykpO1xuICB9IGVsc2Uge1xuICAgIC8vIFRoaXMgaXMgYSB0ZXh0IG9wZXJhdG9yLiBBZGQgYWxsIG9mIHRoZSBjaGFyYWN0ZXJzIGZyb20gdGhlXG4gICAgLy8gb3BlcmF0b3IncyBuYW1lLlxuICAgIG5vZGUgPSBuZXcgTWF0aE5vZGUoXCJtaVwiLCBbbmV3IFRleHROb2RlKGdyb3VwLm5hbWUuc2xpY2UoMSkpXSk7IC8vIEFwcGVuZCBhbiA8bW8+JkFwcGx5RnVuY3Rpb247PC9tbz4uXG4gICAgLy8gcmVmOiBodHRwczovL3d3dy53My5vcmcvVFIvUkVDLU1hdGhNTC9jaGFwM18yLmh0bWwjc2VjMy4yLjRcblxuICAgIGNvbnN0IG9wZXJhdG9yID0gbmV3IE1hdGhOb2RlKFwibW9cIiwgW21ha2VUZXh0KFwiXFx1MjA2MVwiLCBcInRleHRcIildKTtcblxuICAgIGlmIChncm91cC5wYXJlbnRJc1N1cFN1Yikge1xuICAgICAgbm9kZSA9IG5ldyBNYXRoTm9kZShcIm1yb3dcIiwgW25vZGUsIG9wZXJhdG9yXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5vZGUgPSBuZXdEb2N1bWVudEZyYWdtZW50KFtub2RlLCBvcGVyYXRvcl0pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBub2RlO1xufTtcblxuY29uc3Qgc2luZ2xlQ2hhckJpZ09wcyA9IHtcbiAgXCJcXHUyMjBGXCI6IFwiXFxcXHByb2RcIixcbiAgXCJcXHUyMjEwXCI6IFwiXFxcXGNvcHJvZFwiLFxuICBcIlxcdTIyMTFcIjogXCJcXFxcc3VtXCIsXG4gIFwiXFx1MjJjMFwiOiBcIlxcXFxiaWd3ZWRnZVwiLFxuICBcIlxcdTIyYzFcIjogXCJcXFxcYmlndmVlXCIsXG4gIFwiXFx1MjJjMlwiOiBcIlxcXFxiaWdjYXBcIixcbiAgXCJcXHUyMmMzXCI6IFwiXFxcXGJpZ2N1cFwiLFxuICBcIlxcdTJhMDBcIjogXCJcXFxcYmlnb2RvdFwiLFxuICBcIlxcdTJhMDFcIjogXCJcXFxcYmlnb3BsdXNcIixcbiAgXCJcXHUyYTAyXCI6IFwiXFxcXGJpZ290aW1lc1wiLFxuICBcIlxcdTJhMDRcIjogXCJcXFxcYmlndXBsdXNcIixcbiAgXCJcXHUyYTA2XCI6IFwiXFxcXGJpZ3NxY3VwXCJcbn07XG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwib3BcIixcbiAgbmFtZXM6IFtcIlxcXFxjb3Byb2RcIiwgXCJcXFxcYmlndmVlXCIsIFwiXFxcXGJpZ3dlZGdlXCIsIFwiXFxcXGJpZ3VwbHVzXCIsIFwiXFxcXGJpZ2NhcFwiLCBcIlxcXFxiaWdjdXBcIiwgXCJcXFxcaW50b3BcIiwgXCJcXFxccHJvZFwiLCBcIlxcXFxzdW1cIiwgXCJcXFxcYmlnb3RpbWVzXCIsIFwiXFxcXGJpZ29wbHVzXCIsIFwiXFxcXGJpZ29kb3RcIiwgXCJcXFxcYmlnc3FjdXBcIiwgXCJcXFxcc21hbGxpbnRcIiwgXCJcXHUyMjBGXCIsIFwiXFx1MjIxMFwiLCBcIlxcdTIyMTFcIiwgXCJcXHUyMmMwXCIsIFwiXFx1MjJjMVwiLCBcIlxcdTIyYzJcIiwgXCJcXHUyMmMzXCIsIFwiXFx1MmEwMFwiLCBcIlxcdTJhMDFcIiwgXCJcXHUyYTAyXCIsIFwiXFx1MmEwNFwiLCBcIlxcdTJhMDZcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMFxuICB9LFxuICBoYW5kbGVyOiAoX3JlZiwgYXJncykgPT4ge1xuICAgIGxldCB7XG4gICAgICBwYXJzZXIsXG4gICAgICBmdW5jTmFtZVxuICAgIH0gPSBfcmVmO1xuICAgIGxldCBmTmFtZSA9IGZ1bmNOYW1lO1xuXG4gICAgaWYgKGZOYW1lLmxlbmd0aCA9PT0gMSkge1xuICAgICAgZk5hbWUgPSBzaW5nbGVDaGFyQmlnT3BzW2ZOYW1lXTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJvcFwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBsaW1pdHM6IHRydWUsXG4gICAgICBwYXJlbnRJc1N1cFN1YjogZmFsc2UsXG4gICAgICBzeW1ib2w6IHRydWUsXG4gICAgICBuYW1lOiBmTmFtZVxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiBvcF9odG1sQnVpbGRlcixcbiAgbWF0aG1sQnVpbGRlcjogb3BfbWF0aG1sQnVpbGRlclxufSk7IC8vIE5vdGU6IGNhbGxpbmcgZGVmaW5lRnVuY3Rpb24gd2l0aCBhIHR5cGUgdGhhdCdzIGFscmVhZHkgYmVlbiBkZWZpbmVkIG9ubHlcbi8vIHdvcmtzIGJlY2F1c2UgdGhlIHNhbWUgaHRtbEJ1aWxkZXIgYW5kIG1hdGhtbEJ1aWxkZXIgYXJlIGJlaW5nIHVzZWQuXG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJvcFwiLFxuICBuYW1lczogW1wiXFxcXG1hdGhvcFwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxLFxuICAgIHByaW1pdGl2ZTogdHJ1ZVxuICB9LFxuICBoYW5kbGVyOiAoX3JlZjIsIGFyZ3MpID0+IHtcbiAgICBsZXQge1xuICAgICAgcGFyc2VyXG4gICAgfSA9IF9yZWYyO1xuICAgIGNvbnN0IGJvZHkgPSBhcmdzWzBdO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcIm9wXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGxpbWl0czogZmFsc2UsXG4gICAgICBwYXJlbnRJc1N1cFN1YjogZmFsc2UsXG4gICAgICBzeW1ib2w6IGZhbHNlLFxuICAgICAgYm9keTogb3JkYXJndW1lbnQoYm9keSlcbiAgICB9O1xuICB9LFxuICBodG1sQnVpbGRlcjogb3BfaHRtbEJ1aWxkZXIsXG4gIG1hdGhtbEJ1aWxkZXI6IG9wX21hdGhtbEJ1aWxkZXJcbn0pOyAvLyBUaGVyZSBhcmUgMiBmbGFncyBmb3Igb3BlcmF0b3JzOyB3aGV0aGVyIHRoZXkgcHJvZHVjZSBsaW1pdHMgaW5cbi8vIGRpc3BsYXlzdHlsZSwgYW5kIHdoZXRoZXIgdGhleSBhcmUgc3ltYm9scyBhbmQgc2hvdWxkIGdyb3cgaW5cbi8vIGRpc3BsYXlzdHlsZS4gVGhlc2UgZm91ciBncm91cHMgY292ZXIgdGhlIGZvdXIgcG9zc2libGUgY2hvaWNlcy5cblxuY29uc3Qgc2luZ2xlQ2hhckludGVncmFscyA9IHtcbiAgXCJcXHUyMjJiXCI6IFwiXFxcXGludFwiLFxuICBcIlxcdTIyMmNcIjogXCJcXFxcaWludFwiLFxuICBcIlxcdTIyMmRcIjogXCJcXFxcaWlpbnRcIixcbiAgXCJcXHUyMjJlXCI6IFwiXFxcXG9pbnRcIixcbiAgXCJcXHUyMjJmXCI6IFwiXFxcXG9paW50XCIsXG4gIFwiXFx1MjIzMFwiOiBcIlxcXFxvaWlpbnRcIlxufTsgLy8gTm8gbGltaXRzLCBub3Qgc3ltYm9sc1xuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwib3BcIixcbiAgbmFtZXM6IFtcIlxcXFxhcmNzaW5cIiwgXCJcXFxcYXJjY29zXCIsIFwiXFxcXGFyY3RhblwiLCBcIlxcXFxhcmN0Z1wiLCBcIlxcXFxhcmNjdGdcIiwgXCJcXFxcYXJnXCIsIFwiXFxcXGNoXCIsIFwiXFxcXGNvc1wiLCBcIlxcXFxjb3NlY1wiLCBcIlxcXFxjb3NoXCIsIFwiXFxcXGNvdFwiLCBcIlxcXFxjb3RnXCIsIFwiXFxcXGNvdGhcIiwgXCJcXFxcY3NjXCIsIFwiXFxcXGN0Z1wiLCBcIlxcXFxjdGhcIiwgXCJcXFxcZGVnXCIsIFwiXFxcXGRpbVwiLCBcIlxcXFxleHBcIiwgXCJcXFxcaG9tXCIsIFwiXFxcXGtlclwiLCBcIlxcXFxsZ1wiLCBcIlxcXFxsblwiLCBcIlxcXFxsb2dcIiwgXCJcXFxcc2VjXCIsIFwiXFxcXHNpblwiLCBcIlxcXFxzaW5oXCIsIFwiXFxcXHNoXCIsIFwiXFxcXHRhblwiLCBcIlxcXFx0YW5oXCIsIFwiXFxcXHRnXCIsIFwiXFxcXHRoXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDBcbiAgfSxcblxuICBoYW5kbGVyKF9yZWYzKSB7XG4gICAgbGV0IHtcbiAgICAgIHBhcnNlcixcbiAgICAgIGZ1bmNOYW1lXG4gICAgfSA9IF9yZWYzO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcIm9wXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGxpbWl0czogZmFsc2UsXG4gICAgICBwYXJlbnRJc1N1cFN1YjogZmFsc2UsXG4gICAgICBzeW1ib2w6IGZhbHNlLFxuICAgICAgbmFtZTogZnVuY05hbWVcbiAgICB9O1xuICB9LFxuXG4gIGh0bWxCdWlsZGVyOiBvcF9odG1sQnVpbGRlcixcbiAgbWF0aG1sQnVpbGRlcjogb3BfbWF0aG1sQnVpbGRlclxufSk7IC8vIExpbWl0cywgbm90IHN5bWJvbHNcblxuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcIm9wXCIsXG4gIG5hbWVzOiBbXCJcXFxcZGV0XCIsIFwiXFxcXGdjZFwiLCBcIlxcXFxpbmZcIiwgXCJcXFxcbGltXCIsIFwiXFxcXG1heFwiLCBcIlxcXFxtaW5cIiwgXCJcXFxcUHJcIiwgXCJcXFxcc3VwXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDBcbiAgfSxcblxuICBoYW5kbGVyKF9yZWY0KSB7XG4gICAgbGV0IHtcbiAgICAgIHBhcnNlcixcbiAgICAgIGZ1bmNOYW1lXG4gICAgfSA9IF9yZWY0O1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcIm9wXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGxpbWl0czogdHJ1ZSxcbiAgICAgIHBhcmVudElzU3VwU3ViOiBmYWxzZSxcbiAgICAgIHN5bWJvbDogZmFsc2UsXG4gICAgICBuYW1lOiBmdW5jTmFtZVxuICAgIH07XG4gIH0sXG5cbiAgaHRtbEJ1aWxkZXI6IG9wX2h0bWxCdWlsZGVyLFxuICBtYXRobWxCdWlsZGVyOiBvcF9tYXRobWxCdWlsZGVyXG59KTsgLy8gTm8gbGltaXRzLCBzeW1ib2xzXG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJvcFwiLFxuICBuYW1lczogW1wiXFxcXGludFwiLCBcIlxcXFxpaW50XCIsIFwiXFxcXGlpaW50XCIsIFwiXFxcXG9pbnRcIiwgXCJcXFxcb2lpbnRcIiwgXCJcXFxcb2lpaW50XCIsIFwiXFx1MjIyYlwiLCBcIlxcdTIyMmNcIiwgXCJcXHUyMjJkXCIsIFwiXFx1MjIyZVwiLCBcIlxcdTIyMmZcIiwgXCJcXHUyMjMwXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDBcbiAgfSxcblxuICBoYW5kbGVyKF9yZWY1KSB7XG4gICAgbGV0IHtcbiAgICAgIHBhcnNlcixcbiAgICAgIGZ1bmNOYW1lXG4gICAgfSA9IF9yZWY1O1xuICAgIGxldCBmTmFtZSA9IGZ1bmNOYW1lO1xuXG4gICAgaWYgKGZOYW1lLmxlbmd0aCA9PT0gMSkge1xuICAgICAgZk5hbWUgPSBzaW5nbGVDaGFySW50ZWdyYWxzW2ZOYW1lXTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJvcFwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBsaW1pdHM6IGZhbHNlLFxuICAgICAgcGFyZW50SXNTdXBTdWI6IGZhbHNlLFxuICAgICAgc3ltYm9sOiB0cnVlLFxuICAgICAgbmFtZTogZk5hbWVcbiAgICB9O1xuICB9LFxuXG4gIGh0bWxCdWlsZGVyOiBvcF9odG1sQnVpbGRlcixcbiAgbWF0aG1sQnVpbGRlcjogb3BfbWF0aG1sQnVpbGRlclxufSk7XG47Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb25zL29wZXJhdG9ybmFtZS5qc1xuXG5cblxuXG5cblxuXG5cblxuLy8gTk9URTogVW5saWtlIG1vc3QgYGh0bWxCdWlsZGVyYHMsIHRoaXMgb25lIGhhbmRsZXMgbm90IG9ubHlcbi8vIFwib3BlcmF0b3JuYW1lXCIsIGJ1dCBhbHNvICBcInN1cHN1YlwiIHNpbmNlIFxcb3BlcmF0b3JuYW1lKiBjYW5cbi8vIGFmZmVjdCBzdXBlci9zdWJzY3JpcHRpbmcuXG5jb25zdCBvcGVyYXRvcm5hbWVfaHRtbEJ1aWxkZXIgPSAoZ3JwLCBvcHRpb25zKSA9PiB7XG4gIC8vIE9wZXJhdG9ycyBhcmUgaGFuZGxlZCBpbiB0aGUgVGVYYm9vayBwZy4gNDQzLTQ0NCwgcnVsZSAxMyhhKS5cbiAgbGV0IHN1cEdyb3VwO1xuICBsZXQgc3ViR3JvdXA7XG4gIGxldCBoYXNMaW1pdHMgPSBmYWxzZTtcbiAgbGV0IGdyb3VwO1xuXG4gIGlmIChncnAudHlwZSA9PT0gXCJzdXBzdWJcIikge1xuICAgIC8vIElmIHdlIGhhdmUgbGltaXRzLCBzdXBzdWIgd2lsbCBwYXNzIHVzIGl0cyBncm91cCB0byBoYW5kbGUuIFB1bGxcbiAgICAvLyBvdXQgdGhlIHN1cGVyc2NyaXB0IGFuZCBzdWJzY3JpcHQgYW5kIHNldCB0aGUgZ3JvdXAgdG8gdGhlIG9wIGluXG4gICAgLy8gaXRzIGJhc2UuXG4gICAgc3VwR3JvdXAgPSBncnAuc3VwO1xuICAgIHN1Ykdyb3VwID0gZ3JwLnN1YjtcbiAgICBncm91cCA9IGFzc2VydE5vZGVUeXBlKGdycC5iYXNlLCBcIm9wZXJhdG9ybmFtZVwiKTtcbiAgICBoYXNMaW1pdHMgPSB0cnVlO1xuICB9IGVsc2Uge1xuICAgIGdyb3VwID0gYXNzZXJ0Tm9kZVR5cGUoZ3JwLCBcIm9wZXJhdG9ybmFtZVwiKTtcbiAgfVxuXG4gIGxldCBiYXNlO1xuXG4gIGlmIChncm91cC5ib2R5Lmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCBib2R5ID0gZ3JvdXAuYm9keS5tYXAoY2hpbGQgPT4ge1xuICAgICAgLy8gJEZsb3dGaXhNZTogQ2hlY2sgaWYgdGhlIG5vZGUgaGFzIGEgc3RyaW5nIGB0ZXh0YCBwcm9wZXJ0eS5cbiAgICAgIGNvbnN0IGNoaWxkVGV4dCA9IGNoaWxkLnRleHQ7XG5cbiAgICAgIGlmICh0eXBlb2YgY2hpbGRUZXh0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0b3JkXCIsXG4gICAgICAgICAgbW9kZTogY2hpbGQubW9kZSxcbiAgICAgICAgICB0ZXh0OiBjaGlsZFRleHRcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBjaGlsZDtcbiAgICAgIH1cbiAgICB9KTsgLy8gQ29uc29saWRhdGUgZnVuY3Rpb24gbmFtZXMgaW50byBzeW1ib2wgY2hhcmFjdGVycy5cblxuICAgIGNvbnN0IGV4cHJlc3Npb24gPSBidWlsZEV4cHJlc3Npb24oYm9keSwgb3B0aW9ucy53aXRoRm9udChcIm1hdGhybVwiKSwgdHJ1ZSk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGV4cHJlc3Npb24ubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGNoaWxkID0gZXhwcmVzc2lvbltpXTtcblxuICAgICAgaWYgKGNoaWxkIGluc3RhbmNlb2YgU3ltYm9sTm9kZSkge1xuICAgICAgICAvLyBQZXIgYW1zb3BuIHBhY2thZ2UsXG4gICAgICAgIC8vIGNoYW5nZSBtaW51cyB0byBoeXBoZW4gYW5kIFxcYXN0IHRvIGFzdGVyaXNrXG4gICAgICAgIGNoaWxkLnRleHQgPSBjaGlsZC50ZXh0LnJlcGxhY2UoL1xcdTIyMTIvLCBcIi1cIikucmVwbGFjZSgvXFx1MjIxNy8sIFwiKlwiKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBiYXNlID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wibW9wXCJdLCBleHByZXNzaW9uLCBvcHRpb25zKTtcbiAgfSBlbHNlIHtcbiAgICBiYXNlID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wibW9wXCJdLCBbXSwgb3B0aW9ucyk7XG4gIH1cblxuICBpZiAoaGFzTGltaXRzKSB7XG4gICAgcmV0dXJuIGFzc2VtYmxlU3VwU3ViKGJhc2UsIHN1cEdyb3VwLCBzdWJHcm91cCwgb3B0aW9ucywgb3B0aW9ucy5zdHlsZSwgMCwgMCk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGJhc2U7XG4gIH1cbn07XG5cbmNvbnN0IG9wZXJhdG9ybmFtZV9tYXRobWxCdWlsZGVyID0gKGdyb3VwLCBvcHRpb25zKSA9PiB7XG4gIC8vIFRoZSBzdGVwcyB0YWtlbiBoZXJlIGFyZSBzaW1pbGFyIHRvIHRoZSBodG1sIHZlcnNpb24uXG4gIGxldCBleHByZXNzaW9uID0gYnVpbGRNYXRoTUxfYnVpbGRFeHByZXNzaW9uKGdyb3VwLmJvZHksIG9wdGlvbnMud2l0aEZvbnQoXCJtYXRocm1cIikpOyAvLyBJcyBleHByZXNzaW9uIGEgc3RyaW5nIG9yIGhhcyBpdCBzb21ldGhpbmcgbGlrZSBhIGZyYWN0aW9uP1xuXG4gIGxldCBpc0FsbFN0cmluZyA9IHRydWU7IC8vIGRlZmF1bHRcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGV4cHJlc3Npb24ubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBub2RlID0gZXhwcmVzc2lvbltpXTtcblxuICAgIGlmIChub2RlIGluc3RhbmNlb2YgbWF0aE1MVHJlZS5TcGFjZU5vZGUpIHsvLyBEbyBub3RoaW5nXG4gICAgfSBlbHNlIGlmIChub2RlIGluc3RhbmNlb2YgbWF0aE1MVHJlZS5NYXRoTm9kZSkge1xuICAgICAgc3dpdGNoIChub2RlLnR5cGUpIHtcbiAgICAgICAgY2FzZSBcIm1pXCI6XG4gICAgICAgIGNhc2UgXCJtblwiOlxuICAgICAgICBjYXNlIFwibXNcIjpcbiAgICAgICAgY2FzZSBcIm1zcGFjZVwiOlxuICAgICAgICBjYXNlIFwibXRleHRcIjpcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgLy8gRG8gbm90aGluZyB5ZXQuXG5cbiAgICAgICAgY2FzZSBcIm1vXCI6XG4gICAgICAgICAge1xuICAgICAgICAgICAgY29uc3QgY2hpbGQgPSBub2RlLmNoaWxkcmVuWzBdO1xuXG4gICAgICAgICAgICBpZiAobm9kZS5jaGlsZHJlbi5sZW5ndGggPT09IDEgJiYgY2hpbGQgaW5zdGFuY2VvZiBtYXRoTUxUcmVlLlRleHROb2RlKSB7XG4gICAgICAgICAgICAgIGNoaWxkLnRleHQgPSBjaGlsZC50ZXh0LnJlcGxhY2UoL1xcdTIyMTIvLCBcIi1cIikucmVwbGFjZSgvXFx1MjIxNy8sIFwiKlwiKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGlzQWxsU3RyaW5nID0gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGlzQWxsU3RyaW5nID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlzQWxsU3RyaW5nID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgaWYgKGlzQWxsU3RyaW5nKSB7XG4gICAgLy8gV3JpdGUgYSBzaW5nbGUgVGV4dE5vZGUgaW5zdGVhZCBvZiBtdWx0aXBsZSBuZXN0ZWQgdGFncy5cbiAgICBjb25zdCB3b3JkID0gZXhwcmVzc2lvbi5tYXAobm9kZSA9PiBub2RlLnRvVGV4dCgpKS5qb2luKFwiXCIpO1xuICAgIGV4cHJlc3Npb24gPSBbbmV3IG1hdGhNTFRyZWUuVGV4dE5vZGUod29yZCldO1xuICB9XG5cbiAgY29uc3QgaWRlbnRpZmllciA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibWlcIiwgZXhwcmVzc2lvbik7XG4gIGlkZW50aWZpZXIuc2V0QXR0cmlidXRlKFwibWF0aHZhcmlhbnRcIiwgXCJub3JtYWxcIik7IC8vIFxcdTIwNjEgaXMgdGhlIHNhbWUgYXMgJkFwcGx5RnVuY3Rpb247XG4gIC8vIHJlZjogaHR0cHM6Ly93d3cudzNzY2hvb2xzLmNvbS9jaGFyc2V0cy9yZWZfaHRtbF9lbnRpdGllc19hLmFzcFxuXG4gIGNvbnN0IG9wZXJhdG9yID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtb1wiLCBbbWFrZVRleHQoXCJcXHUyMDYxXCIsIFwidGV4dFwiKV0pO1xuXG4gIGlmIChncm91cC5wYXJlbnRJc1N1cFN1Yikge1xuICAgIHJldHVybiBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1yb3dcIiwgW2lkZW50aWZpZXIsIG9wZXJhdG9yXSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG1hdGhNTFRyZWUubmV3RG9jdW1lbnRGcmFnbWVudChbaWRlbnRpZmllciwgb3BlcmF0b3JdKTtcbiAgfVxufTsgLy8gXFxvcGVyYXRvcm5hbWVcbi8vIGFtc29wbi5kdHg6IFxcbWF0aG9weyMxXFxrZXJuXFx6QFxcb3BlcmF0b3JAZm9udCMzfVxcbmV3bWNvZGVzQFxuXG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJvcGVyYXRvcm5hbWVcIixcbiAgbmFtZXM6IFtcIlxcXFxvcGVyYXRvcm5hbWVAXCIsIFwiXFxcXG9wZXJhdG9ybmFtZXdpdGhsaW1pdHNcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMVxuICB9LFxuICBoYW5kbGVyOiAoX3JlZiwgYXJncykgPT4ge1xuICAgIGxldCB7XG4gICAgICBwYXJzZXIsXG4gICAgICBmdW5jTmFtZVxuICAgIH0gPSBfcmVmO1xuICAgIGNvbnN0IGJvZHkgPSBhcmdzWzBdO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcIm9wZXJhdG9ybmFtZVwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBib2R5OiBvcmRhcmd1bWVudChib2R5KSxcbiAgICAgIGFsd2F5c0hhbmRsZVN1cFN1YjogZnVuY05hbWUgPT09IFwiXFxcXG9wZXJhdG9ybmFtZXdpdGhsaW1pdHNcIixcbiAgICAgIGxpbWl0czogZmFsc2UsXG4gICAgICBwYXJlbnRJc1N1cFN1YjogZmFsc2VcbiAgICB9O1xuICB9LFxuICBodG1sQnVpbGRlcjogb3BlcmF0b3JuYW1lX2h0bWxCdWlsZGVyLFxuICBtYXRobWxCdWlsZGVyOiBvcGVyYXRvcm5hbWVfbWF0aG1sQnVpbGRlclxufSk7XG5kZWZpbmVNYWNybyhcIlxcXFxvcGVyYXRvcm5hbWVcIiwgXCJcXFxcQGlmc3RhclxcXFxvcGVyYXRvcm5hbWV3aXRobGltaXRzXFxcXG9wZXJhdG9ybmFtZUBcIik7XG47Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb25zL29yZGdyb3VwLmpzXG5cblxuXG5cbmRlZmluZUZ1bmN0aW9uQnVpbGRlcnMoe1xuICB0eXBlOiBcIm9yZGdyb3VwXCIsXG5cbiAgaHRtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICBpZiAoZ3JvdXAuc2VtaXNpbXBsZSkge1xuICAgICAgcmV0dXJuIGJ1aWxkQ29tbW9uLm1ha2VGcmFnbWVudChidWlsZEV4cHJlc3Npb24oZ3JvdXAuYm9keSwgb3B0aW9ucywgZmFsc2UpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wibW9yZFwiXSwgYnVpbGRFeHByZXNzaW9uKGdyb3VwLmJvZHksIG9wdGlvbnMsIHRydWUpLCBvcHRpb25zKTtcbiAgfSxcblxuICBtYXRobWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIGJ1aWxkRXhwcmVzc2lvblJvdyhncm91cC5ib2R5LCBvcHRpb25zLCB0cnVlKTtcbiAgfVxuXG59KTtcbjsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbnMvb3ZlcmxpbmUuanNcblxuXG5cblxuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwib3ZlcmxpbmVcIixcbiAgbmFtZXM6IFtcIlxcXFxvdmVybGluZVwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxXG4gIH0sXG5cbiAgaGFuZGxlcihfcmVmLCBhcmdzKSB7XG4gICAgbGV0IHtcbiAgICAgIHBhcnNlclxuICAgIH0gPSBfcmVmO1xuICAgIGNvbnN0IGJvZHkgPSBhcmdzWzBdO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcIm92ZXJsaW5lXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGJvZHlcbiAgICB9O1xuICB9LFxuXG4gIGh0bWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgLy8gT3ZlcmxpbmVzIGFyZSBoYW5kbGVkIGluIHRoZSBUZVhib29rIHBnIDQ0MywgUnVsZSA5LlxuICAgIC8vIEJ1aWxkIHRoZSBpbm5lciBncm91cCBpbiB0aGUgY3JhbXBlZCBzdHlsZS5cbiAgICBjb25zdCBpbm5lckdyb3VwID0gYnVpbGRHcm91cChncm91cC5ib2R5LCBvcHRpb25zLmhhdmluZ0NyYW1wZWRTdHlsZSgpKTsgLy8gQ3JlYXRlIHRoZSBsaW5lIGFib3ZlIHRoZSBib2R5XG5cbiAgICBjb25zdCBsaW5lID0gYnVpbGRDb21tb24ubWFrZUxpbmVTcGFuKFwib3ZlcmxpbmUtbGluZVwiLCBvcHRpb25zKTsgLy8gR2VuZXJhdGUgdGhlIHZsaXN0LCB3aXRoIHRoZSBhcHByb3ByaWF0ZSBrZXJuc1xuXG4gICAgY29uc3QgZGVmYXVsdFJ1bGVUaGlja25lc3MgPSBvcHRpb25zLmZvbnRNZXRyaWNzKCkuZGVmYXVsdFJ1bGVUaGlja25lc3M7XG4gICAgY29uc3Qgdmxpc3QgPSBidWlsZENvbW1vbi5tYWtlVkxpc3Qoe1xuICAgICAgcG9zaXRpb25UeXBlOiBcImZpcnN0QmFzZWxpbmVcIixcbiAgICAgIGNoaWxkcmVuOiBbe1xuICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgZWxlbTogaW5uZXJHcm91cFxuICAgICAgfSwge1xuICAgICAgICB0eXBlOiBcImtlcm5cIixcbiAgICAgICAgc2l6ZTogMyAqIGRlZmF1bHRSdWxlVGhpY2tuZXNzXG4gICAgICB9LCB7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBsaW5lXG4gICAgICB9LCB7XG4gICAgICAgIHR5cGU6IFwia2VyblwiLFxuICAgICAgICBzaXplOiBkZWZhdWx0UnVsZVRoaWNrbmVzc1xuICAgICAgfV1cbiAgICB9LCBvcHRpb25zKTtcbiAgICByZXR1cm4gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wibW9yZFwiLCBcIm92ZXJsaW5lXCJdLCBbdmxpc3RdLCBvcHRpb25zKTtcbiAgfSxcblxuICBtYXRobWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgY29uc3Qgb3BlcmF0b3IgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1vXCIsIFtuZXcgbWF0aE1MVHJlZS5UZXh0Tm9kZShcIlxcdTIwM2VcIildKTtcbiAgICBvcGVyYXRvci5zZXRBdHRyaWJ1dGUoXCJzdHJldGNoeVwiLCBcInRydWVcIik7XG4gICAgY29uc3Qgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibW92ZXJcIiwgW2J1aWxkTWF0aE1MX2J1aWxkR3JvdXAoZ3JvdXAuYm9keSwgb3B0aW9ucyksIG9wZXJhdG9yXSk7XG4gICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJhY2NlbnRcIiwgXCJ0cnVlXCIpO1xuICAgIHJldHVybiBub2RlO1xuICB9XG5cbn0pO1xuOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9ucy9waGFudG9tLmpzXG5cblxuXG5cblxuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcInBoYW50b21cIixcbiAgbmFtZXM6IFtcIlxcXFxwaGFudG9tXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDEsXG4gICAgYWxsb3dlZEluVGV4dDogdHJ1ZVxuICB9LFxuICBoYW5kbGVyOiAoX3JlZiwgYXJncykgPT4ge1xuICAgIGxldCB7XG4gICAgICBwYXJzZXJcbiAgICB9ID0gX3JlZjtcbiAgICBjb25zdCBib2R5ID0gYXJnc1swXTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJwaGFudG9tXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGJvZHk6IG9yZGFyZ3VtZW50KGJvZHkpXG4gICAgfTtcbiAgfSxcbiAgaHRtbEJ1aWxkZXI6IChncm91cCwgb3B0aW9ucykgPT4ge1xuICAgIGNvbnN0IGVsZW1lbnRzID0gYnVpbGRFeHByZXNzaW9uKGdyb3VwLmJvZHksIG9wdGlvbnMud2l0aFBoYW50b20oKSwgZmFsc2UpOyAvLyBcXHBoYW50b20gaXNuJ3Qgc3VwcG9zZWQgdG8gYWZmZWN0IHRoZSBlbGVtZW50cyBpdCBjb250YWlucy5cbiAgICAvLyBTZWUgXCJjb2xvclwiIGZvciBtb3JlIGRldGFpbHMuXG5cbiAgICByZXR1cm4gYnVpbGRDb21tb24ubWFrZUZyYWdtZW50KGVsZW1lbnRzKTtcbiAgfSxcbiAgbWF0aG1sQnVpbGRlcjogKGdyb3VwLCBvcHRpb25zKSA9PiB7XG4gICAgY29uc3QgaW5uZXIgPSBidWlsZE1hdGhNTF9idWlsZEV4cHJlc3Npb24oZ3JvdXAuYm9keSwgb3B0aW9ucyk7XG4gICAgcmV0dXJuIG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXBoYW50b21cIiwgaW5uZXIpO1xuICB9XG59KTtcbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJocGhhbnRvbVwiLFxuICBuYW1lczogW1wiXFxcXGhwaGFudG9tXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDEsXG4gICAgYWxsb3dlZEluVGV4dDogdHJ1ZVxuICB9LFxuICBoYW5kbGVyOiAoX3JlZjIsIGFyZ3MpID0+IHtcbiAgICBsZXQge1xuICAgICAgcGFyc2VyXG4gICAgfSA9IF9yZWYyO1xuICAgIGNvbnN0IGJvZHkgPSBhcmdzWzBdO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImhwaGFudG9tXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGJvZHlcbiAgICB9O1xuICB9LFxuICBodG1sQnVpbGRlcjogKGdyb3VwLCBvcHRpb25zKSA9PiB7XG4gICAgbGV0IG5vZGUgPSBidWlsZENvbW1vbi5tYWtlU3BhbihbXSwgW2J1aWxkR3JvdXAoZ3JvdXAuYm9keSwgb3B0aW9ucy53aXRoUGhhbnRvbSgpKV0pO1xuICAgIG5vZGUuaGVpZ2h0ID0gMDtcbiAgICBub2RlLmRlcHRoID0gMDtcblxuICAgIGlmIChub2RlLmNoaWxkcmVuKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGUuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbm9kZS5jaGlsZHJlbltpXS5oZWlnaHQgPSAwO1xuICAgICAgICBub2RlLmNoaWxkcmVuW2ldLmRlcHRoID0gMDtcbiAgICAgIH1cbiAgICB9IC8vIFNlZSBzbWFzaCBmb3IgY29tbWVudCByZTogdXNlIG9mIG1ha2VWTGlzdFxuXG5cbiAgICBub2RlID0gYnVpbGRDb21tb24ubWFrZVZMaXN0KHtcbiAgICAgIHBvc2l0aW9uVHlwZTogXCJmaXJzdEJhc2VsaW5lXCIsXG4gICAgICBjaGlsZHJlbjogW3tcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IG5vZGVcbiAgICAgIH1dXG4gICAgfSwgb3B0aW9ucyk7IC8vIEZvciBzcGFjaW5nLCBUZVggdHJlYXRzIFxcc21hc2ggYXMgYSBtYXRoIGdyb3VwIChzYW1lIHNwYWNpbmcgYXMgb3JkKS5cblxuICAgIHJldHVybiBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJtb3JkXCJdLCBbbm9kZV0sIG9wdGlvbnMpO1xuICB9LFxuICBtYXRobWxCdWlsZGVyOiAoZ3JvdXAsIG9wdGlvbnMpID0+IHtcbiAgICBjb25zdCBpbm5lciA9IGJ1aWxkTWF0aE1MX2J1aWxkRXhwcmVzc2lvbihvcmRhcmd1bWVudChncm91cC5ib2R5KSwgb3B0aW9ucyk7XG4gICAgY29uc3QgcGhhbnRvbSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXBoYW50b21cIiwgaW5uZXIpO1xuICAgIGNvbnN0IG5vZGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1wYWRkZWRcIiwgW3BoYW50b21dKTtcbiAgICBub2RlLnNldEF0dHJpYnV0ZShcImhlaWdodFwiLCBcIjBweFwiKTtcbiAgICBub2RlLnNldEF0dHJpYnV0ZShcImRlcHRoXCIsIFwiMHB4XCIpO1xuICAgIHJldHVybiBub2RlO1xuICB9XG59KTtcbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJ2cGhhbnRvbVwiLFxuICBuYW1lczogW1wiXFxcXHZwaGFudG9tXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDEsXG4gICAgYWxsb3dlZEluVGV4dDogdHJ1ZVxuICB9LFxuICBoYW5kbGVyOiAoX3JlZjMsIGFyZ3MpID0+IHtcbiAgICBsZXQge1xuICAgICAgcGFyc2VyXG4gICAgfSA9IF9yZWYzO1xuICAgIGNvbnN0IGJvZHkgPSBhcmdzWzBdO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcInZwaGFudG9tXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGJvZHlcbiAgICB9O1xuICB9LFxuICBodG1sQnVpbGRlcjogKGdyb3VwLCBvcHRpb25zKSA9PiB7XG4gICAgY29uc3QgaW5uZXIgPSBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJpbm5lclwiXSwgW2J1aWxkR3JvdXAoZ3JvdXAuYm9keSwgb3B0aW9ucy53aXRoUGhhbnRvbSgpKV0pO1xuICAgIGNvbnN0IGZpeCA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcImZpeFwiXSwgW10pO1xuICAgIHJldHVybiBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJtb3JkXCIsIFwicmxhcFwiXSwgW2lubmVyLCBmaXhdLCBvcHRpb25zKTtcbiAgfSxcbiAgbWF0aG1sQnVpbGRlcjogKGdyb3VwLCBvcHRpb25zKSA9PiB7XG4gICAgY29uc3QgaW5uZXIgPSBidWlsZE1hdGhNTF9idWlsZEV4cHJlc3Npb24ob3JkYXJndW1lbnQoZ3JvdXAuYm9keSksIG9wdGlvbnMpO1xuICAgIGNvbnN0IHBoYW50b20gPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1waGFudG9tXCIsIGlubmVyKTtcbiAgICBjb25zdCBub2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtcGFkZGVkXCIsIFtwaGFudG9tXSk7XG4gICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJ3aWR0aFwiLCBcIjBweFwiKTtcbiAgICByZXR1cm4gbm9kZTtcbiAgfVxufSk7XG47Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb25zL3JhaXNlYm94LmpzXG5cblxuXG5cblxuXG4gLy8gQm94IG1hbmlwdWxhdGlvblxuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwicmFpc2Vib3hcIixcbiAgbmFtZXM6IFtcIlxcXFxyYWlzZWJveFwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAyLFxuICAgIGFyZ1R5cGVzOiBbXCJzaXplXCIsIFwiaGJveFwiXSxcbiAgICBhbGxvd2VkSW5UZXh0OiB0cnVlXG4gIH0sXG5cbiAgaGFuZGxlcihfcmVmLCBhcmdzKSB7XG4gICAgbGV0IHtcbiAgICAgIHBhcnNlclxuICAgIH0gPSBfcmVmO1xuICAgIGNvbnN0IGFtb3VudCA9IGFzc2VydE5vZGVUeXBlKGFyZ3NbMF0sIFwic2l6ZVwiKS52YWx1ZTtcbiAgICBjb25zdCBib2R5ID0gYXJnc1sxXTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJyYWlzZWJveFwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBkeTogYW1vdW50LFxuICAgICAgYm9keVxuICAgIH07XG4gIH0sXG5cbiAgaHRtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICBjb25zdCBib2R5ID0gYnVpbGRHcm91cChncm91cC5ib2R5LCBvcHRpb25zKTtcbiAgICBjb25zdCBkeSA9IGNhbGN1bGF0ZVNpemUoZ3JvdXAuZHksIG9wdGlvbnMpO1xuICAgIHJldHVybiBidWlsZENvbW1vbi5tYWtlVkxpc3Qoe1xuICAgICAgcG9zaXRpb25UeXBlOiBcInNoaWZ0XCIsXG4gICAgICBwb3NpdGlvbkRhdGE6IC1keSxcbiAgICAgIGNoaWxkcmVuOiBbe1xuICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgZWxlbTogYm9keVxuICAgICAgfV1cbiAgICB9LCBvcHRpb25zKTtcbiAgfSxcblxuICBtYXRobWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgY29uc3Qgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXBhZGRlZFwiLCBbYnVpbGRNYXRoTUxfYnVpbGRHcm91cChncm91cC5ib2R5LCBvcHRpb25zKV0pO1xuICAgIGNvbnN0IGR5ID0gZ3JvdXAuZHkubnVtYmVyICsgZ3JvdXAuZHkudW5pdDtcbiAgICBub2RlLnNldEF0dHJpYnV0ZShcInZvZmZzZXRcIiwgZHkpO1xuICAgIHJldHVybiBub2RlO1xuICB9XG5cbn0pO1xuOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9ucy9yZWxheC5qc1xuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwiaW50ZXJuYWxcIixcbiAgbmFtZXM6IFtcIlxcXFxyZWxheFwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAwLFxuICAgIGFsbG93ZWRJblRleHQ6IHRydWUsXG4gICAgYWxsb3dlZEluQXJndW1lbnQ6IHRydWVcbiAgfSxcblxuICBoYW5kbGVyKF9yZWYpIHtcbiAgICBsZXQge1xuICAgICAgcGFyc2VyXG4gICAgfSA9IF9yZWY7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiaW50ZXJuYWxcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlXG4gICAgfTtcbiAgfVxuXG59KTtcbjsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbnMvcnVsZS5qc1xuXG5cblxuXG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJydWxlXCIsXG4gIG5hbWVzOiBbXCJcXFxccnVsZVwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAyLFxuICAgIG51bU9wdGlvbmFsQXJnczogMSxcbiAgICBhbGxvd2VkSW5UZXh0OiB0cnVlLFxuICAgIGFsbG93ZWRJbk1hdGg6IHRydWUsXG4gICAgYXJnVHlwZXM6IFtcInNpemVcIiwgXCJzaXplXCIsIFwic2l6ZVwiXVxuICB9LFxuXG4gIGhhbmRsZXIoX3JlZiwgYXJncywgb3B0QXJncykge1xuICAgIGxldCB7XG4gICAgICBwYXJzZXJcbiAgICB9ID0gX3JlZjtcbiAgICBjb25zdCBzaGlmdCA9IG9wdEFyZ3NbMF07XG4gICAgY29uc3Qgd2lkdGggPSBhc3NlcnROb2RlVHlwZShhcmdzWzBdLCBcInNpemVcIik7XG4gICAgY29uc3QgaGVpZ2h0ID0gYXNzZXJ0Tm9kZVR5cGUoYXJnc1sxXSwgXCJzaXplXCIpO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcInJ1bGVcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgc2hpZnQ6IHNoaWZ0ICYmIGFzc2VydE5vZGVUeXBlKHNoaWZ0LCBcInNpemVcIikudmFsdWUsXG4gICAgICB3aWR0aDogd2lkdGgudmFsdWUsXG4gICAgICBoZWlnaHQ6IGhlaWdodC52YWx1ZVxuICAgIH07XG4gIH0sXG5cbiAgaHRtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICAvLyBNYWtlIGFuIGVtcHR5IHNwYW4gZm9yIHRoZSBydWxlXG4gICAgY29uc3QgcnVsZSA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcIm1vcmRcIiwgXCJydWxlXCJdLCBbXSwgb3B0aW9ucyk7IC8vIENhbGN1bGF0ZSB0aGUgc2hpZnQsIHdpZHRoLCBhbmQgaGVpZ2h0IG9mIHRoZSBydWxlLCBhbmQgYWNjb3VudCBmb3IgdW5pdHNcblxuICAgIGNvbnN0IHdpZHRoID0gY2FsY3VsYXRlU2l6ZShncm91cC53aWR0aCwgb3B0aW9ucyk7XG4gICAgY29uc3QgaGVpZ2h0ID0gY2FsY3VsYXRlU2l6ZShncm91cC5oZWlnaHQsIG9wdGlvbnMpO1xuICAgIGNvbnN0IHNoaWZ0ID0gZ3JvdXAuc2hpZnQgPyBjYWxjdWxhdGVTaXplKGdyb3VwLnNoaWZ0LCBvcHRpb25zKSA6IDA7IC8vIFN0eWxlIHRoZSBydWxlIHRvIHRoZSByaWdodCBzaXplXG5cbiAgICBydWxlLnN0eWxlLmJvcmRlclJpZ2h0V2lkdGggPSBtYWtlRW0od2lkdGgpO1xuICAgIHJ1bGUuc3R5bGUuYm9yZGVyVG9wV2lkdGggPSBtYWtlRW0oaGVpZ2h0KTtcbiAgICBydWxlLnN0eWxlLmJvdHRvbSA9IG1ha2VFbShzaGlmdCk7IC8vIFJlY29yZCB0aGUgaGVpZ2h0IGFuZCB3aWR0aFxuXG4gICAgcnVsZS53aWR0aCA9IHdpZHRoO1xuICAgIHJ1bGUuaGVpZ2h0ID0gaGVpZ2h0ICsgc2hpZnQ7XG4gICAgcnVsZS5kZXB0aCA9IC1zaGlmdDsgLy8gRm9udCBzaXplIGlzIHRoZSBudW1iZXIgbGFyZ2UgZW5vdWdoIHRoYXQgdGhlIGJyb3dzZXIgd2lsbFxuICAgIC8vIHJlc2VydmUgYXQgbGVhc3QgYGFic0hlaWdodGAgc3BhY2UgYWJvdmUgdGhlIGJhc2VsaW5lLlxuICAgIC8vIFRoZSAxLjEyNSBmYWN0b3Igd2FzIGVtcGlyaWNhbGx5IGRldGVybWluZWRcblxuICAgIHJ1bGUubWF4Rm9udFNpemUgPSBoZWlnaHQgKiAxLjEyNSAqIG9wdGlvbnMuc2l6ZU11bHRpcGxpZXI7XG4gICAgcmV0dXJuIHJ1bGU7XG4gIH0sXG5cbiAgbWF0aG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIGNvbnN0IHdpZHRoID0gY2FsY3VsYXRlU2l6ZShncm91cC53aWR0aCwgb3B0aW9ucyk7XG4gICAgY29uc3QgaGVpZ2h0ID0gY2FsY3VsYXRlU2l6ZShncm91cC5oZWlnaHQsIG9wdGlvbnMpO1xuICAgIGNvbnN0IHNoaWZ0ID0gZ3JvdXAuc2hpZnQgPyBjYWxjdWxhdGVTaXplKGdyb3VwLnNoaWZ0LCBvcHRpb25zKSA6IDA7XG4gICAgY29uc3QgY29sb3IgPSBvcHRpb25zLmNvbG9yICYmIG9wdGlvbnMuZ2V0Q29sb3IoKSB8fCBcImJsYWNrXCI7XG4gICAgY29uc3QgcnVsZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXNwYWNlXCIpO1xuICAgIHJ1bGUuc2V0QXR0cmlidXRlKFwibWF0aGJhY2tncm91bmRcIiwgY29sb3IpO1xuICAgIHJ1bGUuc2V0QXR0cmlidXRlKFwid2lkdGhcIiwgbWFrZUVtKHdpZHRoKSk7XG4gICAgcnVsZS5zZXRBdHRyaWJ1dGUoXCJoZWlnaHRcIiwgbWFrZUVtKGhlaWdodCkpO1xuICAgIGNvbnN0IHdyYXBwZXIgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1wYWRkZWRcIiwgW3J1bGVdKTtcblxuICAgIGlmIChzaGlmdCA+PSAwKSB7XG4gICAgICB3cmFwcGVyLnNldEF0dHJpYnV0ZShcImhlaWdodFwiLCBtYWtlRW0oc2hpZnQpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgd3JhcHBlci5zZXRBdHRyaWJ1dGUoXCJoZWlnaHRcIiwgbWFrZUVtKHNoaWZ0KSk7XG4gICAgICB3cmFwcGVyLnNldEF0dHJpYnV0ZShcImRlcHRoXCIsIG1ha2VFbSgtc2hpZnQpKTtcbiAgICB9XG5cbiAgICB3cmFwcGVyLnNldEF0dHJpYnV0ZShcInZvZmZzZXRcIiwgbWFrZUVtKHNoaWZ0KSk7XG4gICAgcmV0dXJuIHdyYXBwZXI7XG4gIH1cblxufSk7XG47Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb25zL3NpemluZy5qc1xuXG5cblxuXG5cblxuZnVuY3Rpb24gc2l6aW5nR3JvdXAodmFsdWUsIG9wdGlvbnMsIGJhc2VPcHRpb25zKSB7XG4gIGNvbnN0IGlubmVyID0gYnVpbGRFeHByZXNzaW9uKHZhbHVlLCBvcHRpb25zLCBmYWxzZSk7XG4gIGNvbnN0IG11bHRpcGxpZXIgPSBvcHRpb25zLnNpemVNdWx0aXBsaWVyIC8gYmFzZU9wdGlvbnMuc2l6ZU11bHRpcGxpZXI7IC8vIEFkZCBzaXplLXJlc2V0dGluZyBjbGFzc2VzIHRvIHRoZSBpbm5lciBsaXN0IGFuZCBzZXQgbWF4Rm9udFNpemVcbiAgLy8gbWFudWFsbHkuIEhhbmRsZSBuZXN0ZWQgc2l6ZSBjaGFuZ2VzLlxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgaW5uZXIubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBwb3MgPSBpbm5lcltpXS5jbGFzc2VzLmluZGV4T2YoXCJzaXppbmdcIik7XG5cbiAgICBpZiAocG9zIDwgMCkge1xuICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoaW5uZXJbaV0uY2xhc3Nlcywgb3B0aW9ucy5zaXppbmdDbGFzc2VzKGJhc2VPcHRpb25zKSk7XG4gICAgfSBlbHNlIGlmIChpbm5lcltpXS5jbGFzc2VzW3BvcyArIDFdID09PSBcInJlc2V0LXNpemVcIiArIG9wdGlvbnMuc2l6ZSkge1xuICAgICAgLy8gVGhpcyBpcyBhIG5lc3RlZCBzaXplIGNoYW5nZTogZS5nLiwgaW5uZXJbaV0gaXMgdGhlIFwiYlwiIGluXG4gICAgICAvLyBgXFxIdWdlIGEgXFxzbWFsbCBiYC4gT3ZlcnJpZGUgdGhlIG9sZCBzaXplICh0aGUgYHJlc2V0LWAgY2xhc3MpXG4gICAgICAvLyBidXQgbm90IHRoZSBuZXcgc2l6ZS5cbiAgICAgIGlubmVyW2ldLmNsYXNzZXNbcG9zICsgMV0gPSBcInJlc2V0LXNpemVcIiArIGJhc2VPcHRpb25zLnNpemU7XG4gICAgfVxuXG4gICAgaW5uZXJbaV0uaGVpZ2h0ICo9IG11bHRpcGxpZXI7XG4gICAgaW5uZXJbaV0uZGVwdGggKj0gbXVsdGlwbGllcjtcbiAgfVxuXG4gIHJldHVybiBidWlsZENvbW1vbi5tYWtlRnJhZ21lbnQoaW5uZXIpO1xufVxuY29uc3Qgc2l6ZUZ1bmNzID0gW1wiXFxcXHRpbnlcIiwgXCJcXFxcc2l4cHRzaXplXCIsIFwiXFxcXHNjcmlwdHNpemVcIiwgXCJcXFxcZm9vdG5vdGVzaXplXCIsIFwiXFxcXHNtYWxsXCIsIFwiXFxcXG5vcm1hbHNpemVcIiwgXCJcXFxcbGFyZ2VcIiwgXCJcXFxcTGFyZ2VcIiwgXCJcXFxcTEFSR0VcIiwgXCJcXFxcaHVnZVwiLCBcIlxcXFxIdWdlXCJdO1xuY29uc3Qgc2l6aW5nX2h0bWxCdWlsZGVyID0gKGdyb3VwLCBvcHRpb25zKSA9PiB7XG4gIC8vIEhhbmRsZSBzaXppbmcgb3BlcmF0b3JzIGxpa2UgXFxIdWdlLiBSZWFsIFRlWCBkb2Vzbid0IGFjdHVhbGx5IGFsbG93XG4gIC8vIHRoZXNlIGZ1bmN0aW9ucyBpbnNpZGUgb2YgbWF0aCBleHByZXNzaW9ucywgc28gd2UgZG8gc29tZSBzcGVjaWFsXG4gIC8vIGhhbmRsaW5nLlxuICBjb25zdCBuZXdPcHRpb25zID0gb3B0aW9ucy5oYXZpbmdTaXplKGdyb3VwLnNpemUpO1xuICByZXR1cm4gc2l6aW5nR3JvdXAoZ3JvdXAuYm9keSwgbmV3T3B0aW9ucywgb3B0aW9ucyk7XG59O1xuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcInNpemluZ1wiLFxuICBuYW1lczogc2l6ZUZ1bmNzLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDAsXG4gICAgYWxsb3dlZEluVGV4dDogdHJ1ZVxuICB9LFxuICBoYW5kbGVyOiAoX3JlZiwgYXJncykgPT4ge1xuICAgIGxldCB7XG4gICAgICBicmVha09uVG9rZW5UZXh0LFxuICAgICAgZnVuY05hbWUsXG4gICAgICBwYXJzZXJcbiAgICB9ID0gX3JlZjtcbiAgICBjb25zdCBib2R5ID0gcGFyc2VyLnBhcnNlRXhwcmVzc2lvbihmYWxzZSwgYnJlYWtPblRva2VuVGV4dCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwic2l6aW5nXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIC8vIEZpZ3VyZSBvdXQgd2hhdCBzaXplIHRvIHVzZSBiYXNlZCBvbiB0aGUgbGlzdCBvZiBmdW5jdGlvbnMgYWJvdmVcbiAgICAgIHNpemU6IHNpemVGdW5jcy5pbmRleE9mKGZ1bmNOYW1lKSArIDEsXG4gICAgICBib2R5XG4gICAgfTtcbiAgfSxcbiAgaHRtbEJ1aWxkZXI6IHNpemluZ19odG1sQnVpbGRlcixcbiAgbWF0aG1sQnVpbGRlcjogKGdyb3VwLCBvcHRpb25zKSA9PiB7XG4gICAgY29uc3QgbmV3T3B0aW9ucyA9IG9wdGlvbnMuaGF2aW5nU2l6ZShncm91cC5zaXplKTtcbiAgICBjb25zdCBpbm5lciA9IGJ1aWxkTWF0aE1MX2J1aWxkRXhwcmVzc2lvbihncm91cC5ib2R5LCBuZXdPcHRpb25zKTtcbiAgICBjb25zdCBub2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtc3R5bGVcIiwgaW5uZXIpOyAvLyBUT0RPKGVtaWx5KTogVGhpcyBkb2Vzbid0IHByb2R1Y2UgdGhlIGNvcnJlY3Qgc2l6ZSBmb3IgbmVzdGVkIHNpemVcbiAgICAvLyBjaGFuZ2VzLCBiZWNhdXNlIHdlIGRvbid0IGtlZXAgc3RhdGUgb2Ygd2hhdCBzdHlsZSB3ZSdyZSBjdXJyZW50bHlcbiAgICAvLyBpbiwgc28gd2UgY2FuJ3QgcmVzZXQgdGhlIHNpemUgdG8gbm9ybWFsIGJlZm9yZSBjaGFuZ2luZyBpdC4gIE5vd1xuICAgIC8vIHRoYXQgd2UncmUgcGFzc2luZyBhbiBvcHRpb25zIHBhcmFtZXRlciB3ZSBzaG91bGQgYmUgYWJsZSB0byBmaXhcbiAgICAvLyB0aGlzLlxuXG4gICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJtYXRoc2l6ZVwiLCBtYWtlRW0obmV3T3B0aW9ucy5zaXplTXVsdGlwbGllcikpO1xuICAgIHJldHVybiBub2RlO1xuICB9XG59KTtcbjsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbnMvc21hc2guanNcbi8vIHNtYXNoLCB3aXRoIG9wdGlvbmFsIFt0Yl0sIGFzIGluIEFNU1xuXG5cblxuXG5cblxuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcInNtYXNoXCIsXG4gIG5hbWVzOiBbXCJcXFxcc21hc2hcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMSxcbiAgICBudW1PcHRpb25hbEFyZ3M6IDEsXG4gICAgYWxsb3dlZEluVGV4dDogdHJ1ZVxuICB9LFxuICBoYW5kbGVyOiAoX3JlZiwgYXJncywgb3B0QXJncykgPT4ge1xuICAgIGxldCB7XG4gICAgICBwYXJzZXJcbiAgICB9ID0gX3JlZjtcbiAgICBsZXQgc21hc2hIZWlnaHQgPSBmYWxzZTtcbiAgICBsZXQgc21hc2hEZXB0aCA9IGZhbHNlO1xuICAgIGNvbnN0IHRiQXJnID0gb3B0QXJnc1swXSAmJiBhc3NlcnROb2RlVHlwZShvcHRBcmdzWzBdLCBcIm9yZGdyb3VwXCIpO1xuXG4gICAgaWYgKHRiQXJnKSB7XG4gICAgICAvLyBPcHRpb25hbCBbdGJdIGFyZ3VtZW50IGlzIGVuZ2FnZWQuXG4gICAgICAvLyByZWY6IGFtc21hdGg6IFxccmVuZXdjb21tYW5ke1xcc21hc2h9WzFdW3RiXXslXG4gICAgICAvLyAgICAgICAgICAgICAgIGRlZlxcbWJAdHtcXGh0fVxcZGVmXFxtYkBie1xcZHB9XFxkZWZcXG1iQHRie1xcaHRcXHpAXFx6QFxcZHB9JVxuICAgICAgbGV0IGxldHRlciA9IFwiXCI7XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGJBcmcuYm9keS5sZW5ndGg7ICsraSkge1xuICAgICAgICBjb25zdCBub2RlID0gdGJBcmcuYm9keVtpXTsgLy8gJEZsb3dGaXhNZTogTm90IGV2ZXJ5IG5vZGUgdHlwZSBoYXMgYSBgdGV4dGAgcHJvcGVydHkuXG5cbiAgICAgICAgbGV0dGVyID0gbm9kZS50ZXh0O1xuXG4gICAgICAgIGlmIChsZXR0ZXIgPT09IFwidFwiKSB7XG4gICAgICAgICAgc21hc2hIZWlnaHQgPSB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKGxldHRlciA9PT0gXCJiXCIpIHtcbiAgICAgICAgICBzbWFzaERlcHRoID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzbWFzaEhlaWdodCA9IGZhbHNlO1xuICAgICAgICAgIHNtYXNoRGVwdGggPSBmYWxzZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzbWFzaEhlaWdodCA9IHRydWU7XG4gICAgICBzbWFzaERlcHRoID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25zdCBib2R5ID0gYXJnc1swXTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJzbWFzaFwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBib2R5LFxuICAgICAgc21hc2hIZWlnaHQsXG4gICAgICBzbWFzaERlcHRoXG4gICAgfTtcbiAgfSxcbiAgaHRtbEJ1aWxkZXI6IChncm91cCwgb3B0aW9ucykgPT4ge1xuICAgIGNvbnN0IG5vZGUgPSBidWlsZENvbW1vbi5tYWtlU3BhbihbXSwgW2J1aWxkR3JvdXAoZ3JvdXAuYm9keSwgb3B0aW9ucyldKTtcblxuICAgIGlmICghZ3JvdXAuc21hc2hIZWlnaHQgJiYgIWdyb3VwLnNtYXNoRGVwdGgpIHtcbiAgICAgIHJldHVybiBub2RlO1xuICAgIH1cblxuICAgIGlmIChncm91cC5zbWFzaEhlaWdodCkge1xuICAgICAgbm9kZS5oZWlnaHQgPSAwOyAvLyBJbiBvcmRlciB0byBpbmZsdWVuY2UgbWFrZVZMaXN0LCB3ZSBoYXZlIHRvIHJlc2V0IHRoZSBjaGlsZHJlbi5cblxuICAgICAgaWYgKG5vZGUuY2hpbGRyZW4pIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBub2RlLmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgbm9kZS5jaGlsZHJlbltpXS5oZWlnaHQgPSAwO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGdyb3VwLnNtYXNoRGVwdGgpIHtcbiAgICAgIG5vZGUuZGVwdGggPSAwO1xuXG4gICAgICBpZiAobm9kZS5jaGlsZHJlbikge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGUuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBub2RlLmNoaWxkcmVuW2ldLmRlcHRoID0gMDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gLy8gQXQgdGhpcyBwb2ludCwgd2UndmUgcmVzZXQgdGhlIFRlWC1saWtlIGhlaWdodCBhbmQgZGVwdGggdmFsdWVzLlxuICAgIC8vIEJ1dCB0aGUgc3BhbiBzdGlsbCBoYXMgYW4gSFRNTCBsaW5lIGhlaWdodC5cbiAgICAvLyBtYWtlVkxpc3QgYXBwbGllcyBcImRpc3BsYXk6IHRhYmxlLWNlbGxcIiwgd2hpY2ggcHJldmVudHMgdGhlIGJyb3dzZXJcbiAgICAvLyBmcm9tIGFjdGluZyBvbiB0aGF0IGxpbmUgaGVpZ2h0LiBTbyB3ZSdsbCBjYWxsIG1ha2VWTGlzdCBub3cuXG5cblxuICAgIGNvbnN0IHNtYXNoZWROb2RlID0gYnVpbGRDb21tb24ubWFrZVZMaXN0KHtcbiAgICAgIHBvc2l0aW9uVHlwZTogXCJmaXJzdEJhc2VsaW5lXCIsXG4gICAgICBjaGlsZHJlbjogW3tcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IG5vZGVcbiAgICAgIH1dXG4gICAgfSwgb3B0aW9ucyk7IC8vIEZvciBzcGFjaW5nLCBUZVggdHJlYXRzIFxcaHBoYW50b20gYXMgYSBtYXRoIGdyb3VwIChzYW1lIHNwYWNpbmcgYXMgb3JkKS5cblxuICAgIHJldHVybiBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJtb3JkXCJdLCBbc21hc2hlZE5vZGVdLCBvcHRpb25zKTtcbiAgfSxcbiAgbWF0aG1sQnVpbGRlcjogKGdyb3VwLCBvcHRpb25zKSA9PiB7XG4gICAgY29uc3Qgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXBhZGRlZFwiLCBbYnVpbGRNYXRoTUxfYnVpbGRHcm91cChncm91cC5ib2R5LCBvcHRpb25zKV0pO1xuXG4gICAgaWYgKGdyb3VwLnNtYXNoSGVpZ2h0KSB7XG4gICAgICBub2RlLnNldEF0dHJpYnV0ZShcImhlaWdodFwiLCBcIjBweFwiKTtcbiAgICB9XG5cbiAgICBpZiAoZ3JvdXAuc21hc2hEZXB0aCkge1xuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJkZXB0aFwiLCBcIjBweFwiKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfVxufSk7XG47Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb25zL3NxcnQuanNcblxuXG5cblxuXG5cblxuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwic3FydFwiLFxuICBuYW1lczogW1wiXFxcXHNxcnRcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMSxcbiAgICBudW1PcHRpb25hbEFyZ3M6IDFcbiAgfSxcblxuICBoYW5kbGVyKF9yZWYsIGFyZ3MsIG9wdEFyZ3MpIHtcbiAgICBsZXQge1xuICAgICAgcGFyc2VyXG4gICAgfSA9IF9yZWY7XG4gICAgY29uc3QgaW5kZXggPSBvcHRBcmdzWzBdO1xuICAgIGNvbnN0IGJvZHkgPSBhcmdzWzBdO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcInNxcnRcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgYm9keSxcbiAgICAgIGluZGV4XG4gICAgfTtcbiAgfSxcblxuICBodG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIC8vIFNxdWFyZSByb290cyBhcmUgaGFuZGxlZCBpbiB0aGUgVGVYYm9vayBwZy4gNDQzLCBSdWxlIDExLlxuICAgIC8vIEZpcnN0LCB3ZSBkbyB0aGUgc2FtZSBzdGVwcyBhcyBpbiBvdmVybGluZSB0byBidWlsZCB0aGUgaW5uZXIgZ3JvdXBcbiAgICAvLyBhbmQgbGluZVxuICAgIGxldCBpbm5lciA9IGJ1aWxkR3JvdXAoZ3JvdXAuYm9keSwgb3B0aW9ucy5oYXZpbmdDcmFtcGVkU3R5bGUoKSk7XG5cbiAgICBpZiAoaW5uZXIuaGVpZ2h0ID09PSAwKSB7XG4gICAgICAvLyBSZW5kZXIgYSBzbWFsbCBzdXJkLlxuICAgICAgaW5uZXIuaGVpZ2h0ID0gb3B0aW9ucy5mb250TWV0cmljcygpLnhIZWlnaHQ7XG4gICAgfSAvLyBTb21lIGdyb3VwcyBjYW4gcmV0dXJuIGRvY3VtZW50IGZyYWdtZW50cy4gIEhhbmRsZSB0aG9zZSBieSB3cmFwcGluZ1xuICAgIC8vIHRoZW0gaW4gYSBzcGFuLlxuXG5cbiAgICBpbm5lciA9IGJ1aWxkQ29tbW9uLndyYXBGcmFnbWVudChpbm5lciwgb3B0aW9ucyk7IC8vIENhbGN1bGF0ZSB0aGUgbWluaW11bSBzaXplIGZvciB0aGUgXFxzdXJkIGRlbGltaXRlclxuXG4gICAgY29uc3QgbWV0cmljcyA9IG9wdGlvbnMuZm9udE1ldHJpY3MoKTtcbiAgICBjb25zdCB0aGV0YSA9IG1ldHJpY3MuZGVmYXVsdFJ1bGVUaGlja25lc3M7XG4gICAgbGV0IHBoaSA9IHRoZXRhO1xuXG4gICAgaWYgKG9wdGlvbnMuc3R5bGUuaWQgPCBzcmNfU3R5bGUuVEVYVC5pZCkge1xuICAgICAgcGhpID0gb3B0aW9ucy5mb250TWV0cmljcygpLnhIZWlnaHQ7XG4gICAgfSAvLyBDYWxjdWxhdGUgdGhlIGNsZWFyYW5jZSBiZXR3ZWVuIHRoZSBib2R5IGFuZCBsaW5lXG5cblxuICAgIGxldCBsaW5lQ2xlYXJhbmNlID0gdGhldGEgKyBwaGkgLyA0O1xuICAgIGNvbnN0IG1pbkRlbGltaXRlckhlaWdodCA9IGlubmVyLmhlaWdodCArIGlubmVyLmRlcHRoICsgbGluZUNsZWFyYW5jZSArIHRoZXRhOyAvLyBDcmVhdGUgYSBzcXJ0IFNWRyBvZiB0aGUgcmVxdWlyZWQgbWluaW11bSBzaXplXG5cbiAgICBjb25zdCB7XG4gICAgICBzcGFuOiBpbWcsXG4gICAgICBydWxlV2lkdGgsXG4gICAgICBhZHZhbmNlV2lkdGhcbiAgICB9ID0gZGVsaW1pdGVyLnNxcnRJbWFnZShtaW5EZWxpbWl0ZXJIZWlnaHQsIG9wdGlvbnMpO1xuICAgIGNvbnN0IGRlbGltRGVwdGggPSBpbWcuaGVpZ2h0IC0gcnVsZVdpZHRoOyAvLyBBZGp1c3QgdGhlIGNsZWFyYW5jZSBiYXNlZCBvbiB0aGUgZGVsaW1pdGVyIHNpemVcblxuICAgIGlmIChkZWxpbURlcHRoID4gaW5uZXIuaGVpZ2h0ICsgaW5uZXIuZGVwdGggKyBsaW5lQ2xlYXJhbmNlKSB7XG4gICAgICBsaW5lQ2xlYXJhbmNlID0gKGxpbmVDbGVhcmFuY2UgKyBkZWxpbURlcHRoIC0gaW5uZXIuaGVpZ2h0IC0gaW5uZXIuZGVwdGgpIC8gMjtcbiAgICB9IC8vIFNoaWZ0IHRoZSBzcXJ0IGltYWdlXG5cblxuICAgIGNvbnN0IGltZ1NoaWZ0ID0gaW1nLmhlaWdodCAtIGlubmVyLmhlaWdodCAtIGxpbmVDbGVhcmFuY2UgLSBydWxlV2lkdGg7XG4gICAgaW5uZXIuc3R5bGUucGFkZGluZ0xlZnQgPSBtYWtlRW0oYWR2YW5jZVdpZHRoKTsgLy8gT3ZlcmxheSB0aGUgaW1hZ2UgYW5kIHRoZSBhcmd1bWVudC5cblxuICAgIGNvbnN0IGJvZHkgPSBidWlsZENvbW1vbi5tYWtlVkxpc3Qoe1xuICAgICAgcG9zaXRpb25UeXBlOiBcImZpcnN0QmFzZWxpbmVcIixcbiAgICAgIGNoaWxkcmVuOiBbe1xuICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgZWxlbTogaW5uZXIsXG4gICAgICAgIHdyYXBwZXJDbGFzc2VzOiBbXCJzdmctYWxpZ25cIl1cbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJrZXJuXCIsXG4gICAgICAgIHNpemU6IC0oaW5uZXIuaGVpZ2h0ICsgaW1nU2hpZnQpXG4gICAgICB9LCB7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBpbWdcbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJrZXJuXCIsXG4gICAgICAgIHNpemU6IHJ1bGVXaWR0aFxuICAgICAgfV1cbiAgICB9LCBvcHRpb25zKTtcblxuICAgIGlmICghZ3JvdXAuaW5kZXgpIHtcbiAgICAgIHJldHVybiBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJtb3JkXCIsIFwic3FydFwiXSwgW2JvZHldLCBvcHRpb25zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSGFuZGxlIHRoZSBvcHRpb25hbCByb290IGluZGV4XG4gICAgICAvLyBUaGUgaW5kZXggaXMgYWx3YXlzIGluIHNjcmlwdHNjcmlwdCBzdHlsZVxuICAgICAgY29uc3QgbmV3T3B0aW9ucyA9IG9wdGlvbnMuaGF2aW5nU3R5bGUoc3JjX1N0eWxlLlNDUklQVFNDUklQVCk7XG4gICAgICBjb25zdCByb290bSA9IGJ1aWxkR3JvdXAoZ3JvdXAuaW5kZXgsIG5ld09wdGlvbnMsIG9wdGlvbnMpOyAvLyBUaGUgYW1vdW50IHRoZSBpbmRleCBpcyBzaGlmdGVkIGJ5LiBUaGlzIGlzIHRha2VuIGZyb20gdGhlIFRlWFxuICAgICAgLy8gc291cmNlLCBpbiB0aGUgZGVmaW5pdGlvbiBvZiBgXFxyQEB0YC5cblxuICAgICAgY29uc3QgdG9TaGlmdCA9IDAuNiAqIChib2R5LmhlaWdodCAtIGJvZHkuZGVwdGgpOyAvLyBCdWlsZCBhIFZMaXN0IHdpdGggdGhlIHN1cGVyc2NyaXB0IHNoaWZ0ZWQgdXAgY29ycmVjdGx5XG5cbiAgICAgIGNvbnN0IHJvb3RWTGlzdCA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICAgIHBvc2l0aW9uVHlwZTogXCJzaGlmdFwiLFxuICAgICAgICBwb3NpdGlvbkRhdGE6IC10b1NoaWZ0LFxuICAgICAgICBjaGlsZHJlbjogW3tcbiAgICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgICBlbGVtOiByb290bVxuICAgICAgICB9XVxuICAgICAgfSwgb3B0aW9ucyk7IC8vIEFkZCBhIGNsYXNzIHN1cnJvdW5kaW5nIGl0IHNvIHdlIGNhbiBhZGQgb24gdGhlIGFwcHJvcHJpYXRlXG4gICAgICAvLyBrZXJuaW5nXG5cbiAgICAgIGNvbnN0IHJvb3RWTGlzdFdyYXAgPSBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJyb290XCJdLCBbcm9vdFZMaXN0XSk7XG4gICAgICByZXR1cm4gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wibW9yZFwiLCBcInNxcnRcIl0sIFtyb290Vkxpc3RXcmFwLCBib2R5XSwgb3B0aW9ucyk7XG4gICAgfVxuICB9LFxuXG4gIG1hdGhtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICBjb25zdCB7XG4gICAgICBib2R5LFxuICAgICAgaW5kZXhcbiAgICB9ID0gZ3JvdXA7XG4gICAgcmV0dXJuIGluZGV4ID8gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtcm9vdFwiLCBbYnVpbGRNYXRoTUxfYnVpbGRHcm91cChib2R5LCBvcHRpb25zKSwgYnVpbGRNYXRoTUxfYnVpbGRHcm91cChpbmRleCwgb3B0aW9ucyldKSA6IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXNxcnRcIiwgW2J1aWxkTWF0aE1MX2J1aWxkR3JvdXAoYm9keSwgb3B0aW9ucyldKTtcbiAgfVxuXG59KTtcbjsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbnMvc3R5bGluZy5qc1xuXG5cblxuXG5cbmNvbnN0IHN0eWxpbmdfc3R5bGVNYXAgPSB7XG4gIFwiZGlzcGxheVwiOiBzcmNfU3R5bGUuRElTUExBWSxcbiAgXCJ0ZXh0XCI6IHNyY19TdHlsZS5URVhULFxuICBcInNjcmlwdFwiOiBzcmNfU3R5bGUuU0NSSVBULFxuICBcInNjcmlwdHNjcmlwdFwiOiBzcmNfU3R5bGUuU0NSSVBUU0NSSVBUXG59O1xuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcInN0eWxpbmdcIixcbiAgbmFtZXM6IFtcIlxcXFxkaXNwbGF5c3R5bGVcIiwgXCJcXFxcdGV4dHN0eWxlXCIsIFwiXFxcXHNjcmlwdHN0eWxlXCIsIFwiXFxcXHNjcmlwdHNjcmlwdHN0eWxlXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDAsXG4gICAgYWxsb3dlZEluVGV4dDogdHJ1ZSxcbiAgICBwcmltaXRpdmU6IHRydWVcbiAgfSxcblxuICBoYW5kbGVyKF9yZWYsIGFyZ3MpIHtcbiAgICBsZXQge1xuICAgICAgYnJlYWtPblRva2VuVGV4dCxcbiAgICAgIGZ1bmNOYW1lLFxuICAgICAgcGFyc2VyXG4gICAgfSA9IF9yZWY7XG4gICAgLy8gcGFyc2Ugb3V0IHRoZSBpbXBsaWNpdCBib2R5XG4gICAgY29uc3QgYm9keSA9IHBhcnNlci5wYXJzZUV4cHJlc3Npb24odHJ1ZSwgYnJlYWtPblRva2VuVGV4dCk7IC8vIFRPRE86IFJlZmFjdG9yIHRvIGF2b2lkIGR1cGxpY2F0aW5nIHN0eWxlTWFwIGluIG11bHRpcGxlIHBsYWNlcyAoZS5nLlxuICAgIC8vIGhlcmUgYW5kIGluIGJ1aWxkSFRNTCBhbmQgZGUtZHVwZSB0aGUgZW51bWVyYXRpb24gb2YgYWxsIHRoZSBzdHlsZXMpLlxuICAgIC8vICRGbG93Rml4TWU6IFRoZSBuYW1lcyBhYm92ZSBleGFjdGx5IG1hdGNoIHRoZSBzdHlsZXMuXG5cbiAgICBjb25zdCBzdHlsZSA9IGZ1bmNOYW1lLnNsaWNlKDEsIGZ1bmNOYW1lLmxlbmd0aCAtIDUpO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcInN0eWxpbmdcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgLy8gRmlndXJlIG91dCB3aGF0IHN0eWxlIHRvIHVzZSBieSBwdWxsaW5nIG91dCB0aGUgc3R5bGUgZnJvbVxuICAgICAgLy8gdGhlIGZ1bmN0aW9uIG5hbWVcbiAgICAgIHN0eWxlLFxuICAgICAgYm9keVxuICAgIH07XG4gIH0sXG5cbiAgaHRtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICAvLyBTdHlsZSBjaGFuZ2VzIGFyZSBoYW5kbGVkIGluIHRoZSBUZVhib29rIG9uIHBnLiA0NDIsIFJ1bGUgMy5cbiAgICBjb25zdCBuZXdTdHlsZSA9IHN0eWxpbmdfc3R5bGVNYXBbZ3JvdXAuc3R5bGVdO1xuICAgIGNvbnN0IG5ld09wdGlvbnMgPSBvcHRpb25zLmhhdmluZ1N0eWxlKG5ld1N0eWxlKS53aXRoRm9udCgnJyk7XG4gICAgcmV0dXJuIHNpemluZ0dyb3VwKGdyb3VwLmJvZHksIG5ld09wdGlvbnMsIG9wdGlvbnMpO1xuICB9LFxuXG4gIG1hdGhtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICAvLyBGaWd1cmUgb3V0IHdoYXQgc3R5bGUgd2UncmUgY2hhbmdpbmcgdG8uXG4gICAgY29uc3QgbmV3U3R5bGUgPSBzdHlsaW5nX3N0eWxlTWFwW2dyb3VwLnN0eWxlXTtcbiAgICBjb25zdCBuZXdPcHRpb25zID0gb3B0aW9ucy5oYXZpbmdTdHlsZShuZXdTdHlsZSk7XG4gICAgY29uc3QgaW5uZXIgPSBidWlsZE1hdGhNTF9idWlsZEV4cHJlc3Npb24oZ3JvdXAuYm9keSwgbmV3T3B0aW9ucyk7XG4gICAgY29uc3Qgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXN0eWxlXCIsIGlubmVyKTtcbiAgICBjb25zdCBzdHlsZUF0dHJpYnV0ZXMgPSB7XG4gICAgICBcImRpc3BsYXlcIjogW1wiMFwiLCBcInRydWVcIl0sXG4gICAgICBcInRleHRcIjogW1wiMFwiLCBcImZhbHNlXCJdLFxuICAgICAgXCJzY3JpcHRcIjogW1wiMVwiLCBcImZhbHNlXCJdLFxuICAgICAgXCJzY3JpcHRzY3JpcHRcIjogW1wiMlwiLCBcImZhbHNlXCJdXG4gICAgfTtcbiAgICBjb25zdCBhdHRyID0gc3R5bGVBdHRyaWJ1dGVzW2dyb3VwLnN0eWxlXTtcbiAgICBub2RlLnNldEF0dHJpYnV0ZShcInNjcmlwdGxldmVsXCIsIGF0dHJbMF0pO1xuICAgIG5vZGUuc2V0QXR0cmlidXRlKFwiZGlzcGxheXN0eWxlXCIsIGF0dHJbMV0pO1xuICAgIHJldHVybiBub2RlO1xuICB9XG5cbn0pO1xuOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9ucy9zdXBzdWIuanNcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vKipcbiAqIFNvbWV0aW1lcywgZ3JvdXBzIHBlcmZvcm0gc3BlY2lhbCBydWxlcyB3aGVuIHRoZXkgaGF2ZSBzdXBlcnNjcmlwdHMgb3JcbiAqIHN1YnNjcmlwdHMgYXR0YWNoZWQgdG8gdGhlbS4gVGhpcyBmdW5jdGlvbiBsZXRzIHRoZSBgc3Vwc3ViYCBncm91cCBrbm93IHRoYXRcbiAqIFNvbWV0aW1lcywgZ3JvdXBzIHBlcmZvcm0gc3BlY2lhbCBydWxlcyB3aGVuIHRoZXkgaGF2ZSBzdXBlcnNjcmlwdHMgb3JcbiAqIGl0cyBpbm5lciBlbGVtZW50IHNob3VsZCBoYW5kbGUgdGhlIHN1cGVyc2NyaXB0cyBhbmQgc3Vic2NyaXB0cyBpbnN0ZWFkIG9mXG4gKiBoYW5kbGluZyB0aGVtIGl0c2VsZi5cbiAqL1xuY29uc3QgaHRtbEJ1aWxkZXJEZWxlZ2F0ZSA9IGZ1bmN0aW9uIChncm91cCwgb3B0aW9ucykge1xuICBjb25zdCBiYXNlID0gZ3JvdXAuYmFzZTtcblxuICBpZiAoIWJhc2UpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfSBlbHNlIGlmIChiYXNlLnR5cGUgPT09IFwib3BcIikge1xuICAgIC8vIE9wZXJhdG9ycyBoYW5kbGUgc3Vwc3VicyBkaWZmZXJlbnRseSB3aGVuIHRoZXkgaGF2ZSBsaW1pdHNcbiAgICAvLyAoZS5nLiBgXFxkaXNwbGF5c3R5bGVcXHN1bV8yXjNgKVxuICAgIGNvbnN0IGRlbGVnYXRlID0gYmFzZS5saW1pdHMgJiYgKG9wdGlvbnMuc3R5bGUuc2l6ZSA9PT0gc3JjX1N0eWxlLkRJU1BMQVkuc2l6ZSB8fCBiYXNlLmFsd2F5c0hhbmRsZVN1cFN1Yik7XG4gICAgcmV0dXJuIGRlbGVnYXRlID8gb3BfaHRtbEJ1aWxkZXIgOiBudWxsO1xuICB9IGVsc2UgaWYgKGJhc2UudHlwZSA9PT0gXCJvcGVyYXRvcm5hbWVcIikge1xuICAgIGNvbnN0IGRlbGVnYXRlID0gYmFzZS5hbHdheXNIYW5kbGVTdXBTdWIgJiYgKG9wdGlvbnMuc3R5bGUuc2l6ZSA9PT0gc3JjX1N0eWxlLkRJU1BMQVkuc2l6ZSB8fCBiYXNlLmxpbWl0cyk7XG4gICAgcmV0dXJuIGRlbGVnYXRlID8gb3BlcmF0b3JuYW1lX2h0bWxCdWlsZGVyIDogbnVsbDtcbiAgfSBlbHNlIGlmIChiYXNlLnR5cGUgPT09IFwiYWNjZW50XCIpIHtcbiAgICByZXR1cm4gdXRpbHMuaXNDaGFyYWN0ZXJCb3goYmFzZS5iYXNlKSA/IGh0bWxCdWlsZGVyIDogbnVsbDtcbiAgfSBlbHNlIGlmIChiYXNlLnR5cGUgPT09IFwiaG9yaXpCcmFjZVwiKSB7XG4gICAgY29uc3QgaXNTdXAgPSAhZ3JvdXAuc3ViO1xuICAgIHJldHVybiBpc1N1cCA9PT0gYmFzZS5pc092ZXIgPyBob3JpekJyYWNlX2h0bWxCdWlsZGVyIDogbnVsbDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufTsgLy8gU3VwZXIgc2NyaXB0cyBhbmQgc3Vic2NyaXB0cywgd2hvc2UgcHJlY2lzZSBwbGFjZW1lbnQgY2FuIGRlcGVuZCBvbiBvdGhlclxuLy8gZnVuY3Rpb25zIHRoYXQgcHJlY2VkZSB0aGVtLlxuXG5cbmRlZmluZUZ1bmN0aW9uQnVpbGRlcnMoe1xuICB0eXBlOiBcInN1cHN1YlwiLFxuXG4gIGh0bWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgLy8gU3VwZXJzY3JpcHQgYW5kIHN1YnNjcmlwdHMgYXJlIGhhbmRsZWQgaW4gdGhlIFRlWGJvb2sgb24gcGFnZVxuICAgIC8vIDQ0NS00NDYsIHJ1bGVzIDE4KGEtZikuXG4gICAgLy8gSGVyZSBpcyB3aGVyZSB3ZSBkZWZlciB0byB0aGUgaW5uZXIgZ3JvdXAgaWYgaXQgc2hvdWxkIGhhbmRsZVxuICAgIC8vIHN1cGVyc2NyaXB0cyBhbmQgc3Vic2NyaXB0cyBpdHNlbGYuXG4gICAgY29uc3QgYnVpbGRlckRlbGVnYXRlID0gaHRtbEJ1aWxkZXJEZWxlZ2F0ZShncm91cCwgb3B0aW9ucyk7XG5cbiAgICBpZiAoYnVpbGRlckRlbGVnYXRlKSB7XG4gICAgICByZXR1cm4gYnVpbGRlckRlbGVnYXRlKGdyb3VwLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICBjb25zdCB7XG4gICAgICBiYXNlOiB2YWx1ZUJhc2UsXG4gICAgICBzdXA6IHZhbHVlU3VwLFxuICAgICAgc3ViOiB2YWx1ZVN1YlxuICAgIH0gPSBncm91cDtcbiAgICBjb25zdCBiYXNlID0gYnVpbGRHcm91cCh2YWx1ZUJhc2UsIG9wdGlvbnMpO1xuICAgIGxldCBzdXBtO1xuICAgIGxldCBzdWJtO1xuICAgIGNvbnN0IG1ldHJpY3MgPSBvcHRpb25zLmZvbnRNZXRyaWNzKCk7IC8vIFJ1bGUgMThhXG5cbiAgICBsZXQgc3VwU2hpZnQgPSAwO1xuICAgIGxldCBzdWJTaGlmdCA9IDA7XG4gICAgY29uc3QgaXNDaGFyYWN0ZXJCb3ggPSB2YWx1ZUJhc2UgJiYgdXRpbHMuaXNDaGFyYWN0ZXJCb3godmFsdWVCYXNlKTtcblxuICAgIGlmICh2YWx1ZVN1cCkge1xuICAgICAgY29uc3QgbmV3T3B0aW9ucyA9IG9wdGlvbnMuaGF2aW5nU3R5bGUob3B0aW9ucy5zdHlsZS5zdXAoKSk7XG4gICAgICBzdXBtID0gYnVpbGRHcm91cCh2YWx1ZVN1cCwgbmV3T3B0aW9ucywgb3B0aW9ucyk7XG5cbiAgICAgIGlmICghaXNDaGFyYWN0ZXJCb3gpIHtcbiAgICAgICAgc3VwU2hpZnQgPSBiYXNlLmhlaWdodCAtIG5ld09wdGlvbnMuZm9udE1ldHJpY3MoKS5zdXBEcm9wICogbmV3T3B0aW9ucy5zaXplTXVsdGlwbGllciAvIG9wdGlvbnMuc2l6ZU11bHRpcGxpZXI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHZhbHVlU3ViKSB7XG4gICAgICBjb25zdCBuZXdPcHRpb25zID0gb3B0aW9ucy5oYXZpbmdTdHlsZShvcHRpb25zLnN0eWxlLnN1YigpKTtcbiAgICAgIHN1Ym0gPSBidWlsZEdyb3VwKHZhbHVlU3ViLCBuZXdPcHRpb25zLCBvcHRpb25zKTtcblxuICAgICAgaWYgKCFpc0NoYXJhY3RlckJveCkge1xuICAgICAgICBzdWJTaGlmdCA9IGJhc2UuZGVwdGggKyBuZXdPcHRpb25zLmZvbnRNZXRyaWNzKCkuc3ViRHJvcCAqIG5ld09wdGlvbnMuc2l6ZU11bHRpcGxpZXIgLyBvcHRpb25zLnNpemVNdWx0aXBsaWVyO1xuICAgICAgfVxuICAgIH0gLy8gUnVsZSAxOGNcblxuXG4gICAgbGV0IG1pblN1cFNoaWZ0O1xuXG4gICAgaWYgKG9wdGlvbnMuc3R5bGUgPT09IHNyY19TdHlsZS5ESVNQTEFZKSB7XG4gICAgICBtaW5TdXBTaGlmdCA9IG1ldHJpY3Muc3VwMTtcbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMuc3R5bGUuY3JhbXBlZCkge1xuICAgICAgbWluU3VwU2hpZnQgPSBtZXRyaWNzLnN1cDM7XG4gICAgfSBlbHNlIHtcbiAgICAgIG1pblN1cFNoaWZ0ID0gbWV0cmljcy5zdXAyO1xuICAgIH0gLy8gc2NyaXB0c3BhY2UgaXMgYSBmb250LXNpemUtaW5kZXBlbmRlbnQgc2l6ZSwgc28gc2NhbGUgaXRcbiAgICAvLyBhcHByb3ByaWF0ZWx5IGZvciB1c2UgYXMgdGhlIG1hcmdpblJpZ2h0LlxuXG5cbiAgICBjb25zdCBtdWx0aXBsaWVyID0gb3B0aW9ucy5zaXplTXVsdGlwbGllcjtcbiAgICBjb25zdCBtYXJnaW5SaWdodCA9IG1ha2VFbSgwLjUgLyBtZXRyaWNzLnB0UGVyRW0gLyBtdWx0aXBsaWVyKTtcbiAgICBsZXQgbWFyZ2luTGVmdCA9IG51bGw7XG5cbiAgICBpZiAoc3VibSkge1xuICAgICAgLy8gU3Vic2NyaXB0cyBzaG91bGRuJ3QgYmUgc2hpZnRlZCBieSB0aGUgYmFzZSdzIGl0YWxpYyBjb3JyZWN0aW9uLlxuICAgICAgLy8gQWNjb3VudCBmb3IgdGhhdCBieSBzaGlmdGluZyB0aGUgc3Vic2NyaXB0IGJhY2sgdGhlIGFwcHJvcHJpYXRlXG4gICAgICAvLyBhbW91bnQuIE5vdGUgd2Ugb25seSBkbyB0aGlzIHdoZW4gdGhlIGJhc2UgaXMgYSBzaW5nbGUgc3ltYm9sLlxuICAgICAgY29uc3QgaXNPaWludCA9IGdyb3VwLmJhc2UgJiYgZ3JvdXAuYmFzZS50eXBlID09PSBcIm9wXCIgJiYgZ3JvdXAuYmFzZS5uYW1lICYmIChncm91cC5iYXNlLm5hbWUgPT09IFwiXFxcXG9paW50XCIgfHwgZ3JvdXAuYmFzZS5uYW1lID09PSBcIlxcXFxvaWlpbnRcIik7XG5cbiAgICAgIGlmIChiYXNlIGluc3RhbmNlb2YgU3ltYm9sTm9kZSB8fCBpc09paW50KSB7XG4gICAgICAgIC8vICRGbG93Rml4TWVcbiAgICAgICAgbWFyZ2luTGVmdCA9IG1ha2VFbSgtYmFzZS5pdGFsaWMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBzdXBzdWI7XG5cbiAgICBpZiAoc3VwbSAmJiBzdWJtKSB7XG4gICAgICBzdXBTaGlmdCA9IE1hdGgubWF4KHN1cFNoaWZ0LCBtaW5TdXBTaGlmdCwgc3VwbS5kZXB0aCArIDAuMjUgKiBtZXRyaWNzLnhIZWlnaHQpO1xuICAgICAgc3ViU2hpZnQgPSBNYXRoLm1heChzdWJTaGlmdCwgbWV0cmljcy5zdWIyKTtcbiAgICAgIGNvbnN0IHJ1bGVXaWR0aCA9IG1ldHJpY3MuZGVmYXVsdFJ1bGVUaGlja25lc3M7IC8vIFJ1bGUgMThlXG5cbiAgICAgIGNvbnN0IG1heFdpZHRoID0gNCAqIHJ1bGVXaWR0aDtcblxuICAgICAgaWYgKHN1cFNoaWZ0IC0gc3VwbS5kZXB0aCAtIChzdWJtLmhlaWdodCAtIHN1YlNoaWZ0KSA8IG1heFdpZHRoKSB7XG4gICAgICAgIHN1YlNoaWZ0ID0gbWF4V2lkdGggLSAoc3VwU2hpZnQgLSBzdXBtLmRlcHRoKSArIHN1Ym0uaGVpZ2h0O1xuICAgICAgICBjb25zdCBwc2kgPSAwLjggKiBtZXRyaWNzLnhIZWlnaHQgLSAoc3VwU2hpZnQgLSBzdXBtLmRlcHRoKTtcblxuICAgICAgICBpZiAocHNpID4gMCkge1xuICAgICAgICAgIHN1cFNoaWZ0ICs9IHBzaTtcbiAgICAgICAgICBzdWJTaGlmdCAtPSBwc2k7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3Qgdmxpc3RFbGVtID0gW3tcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IHN1Ym0sXG4gICAgICAgIHNoaWZ0OiBzdWJTaGlmdCxcbiAgICAgICAgbWFyZ2luUmlnaHQsXG4gICAgICAgIG1hcmdpbkxlZnRcbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IHN1cG0sXG4gICAgICAgIHNoaWZ0OiAtc3VwU2hpZnQsXG4gICAgICAgIG1hcmdpblJpZ2h0XG4gICAgICB9XTtcbiAgICAgIHN1cHN1YiA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICAgIHBvc2l0aW9uVHlwZTogXCJpbmRpdmlkdWFsU2hpZnRcIixcbiAgICAgICAgY2hpbGRyZW46IHZsaXN0RWxlbVxuICAgICAgfSwgb3B0aW9ucyk7XG4gICAgfSBlbHNlIGlmIChzdWJtKSB7XG4gICAgICAvLyBSdWxlIDE4YlxuICAgICAgc3ViU2hpZnQgPSBNYXRoLm1heChzdWJTaGlmdCwgbWV0cmljcy5zdWIxLCBzdWJtLmhlaWdodCAtIDAuOCAqIG1ldHJpY3MueEhlaWdodCk7XG4gICAgICBjb25zdCB2bGlzdEVsZW0gPSBbe1xuICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgZWxlbTogc3VibSxcbiAgICAgICAgbWFyZ2luTGVmdCxcbiAgICAgICAgbWFyZ2luUmlnaHRcbiAgICAgIH1dO1xuICAgICAgc3Vwc3ViID0gYnVpbGRDb21tb24ubWFrZVZMaXN0KHtcbiAgICAgICAgcG9zaXRpb25UeXBlOiBcInNoaWZ0XCIsXG4gICAgICAgIHBvc2l0aW9uRGF0YTogc3ViU2hpZnQsXG4gICAgICAgIGNoaWxkcmVuOiB2bGlzdEVsZW1cbiAgICAgIH0sIG9wdGlvbnMpO1xuICAgIH0gZWxzZSBpZiAoc3VwbSkge1xuICAgICAgLy8gUnVsZSAxOGMsIGRcbiAgICAgIHN1cFNoaWZ0ID0gTWF0aC5tYXgoc3VwU2hpZnQsIG1pblN1cFNoaWZ0LCBzdXBtLmRlcHRoICsgMC4yNSAqIG1ldHJpY3MueEhlaWdodCk7XG4gICAgICBzdXBzdWIgPSBidWlsZENvbW1vbi5tYWtlVkxpc3Qoe1xuICAgICAgICBwb3NpdGlvblR5cGU6IFwic2hpZnRcIixcbiAgICAgICAgcG9zaXRpb25EYXRhOiAtc3VwU2hpZnQsXG4gICAgICAgIGNoaWxkcmVuOiBbe1xuICAgICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICAgIGVsZW06IHN1cG0sXG4gICAgICAgICAgbWFyZ2luUmlnaHRcbiAgICAgICAgfV1cbiAgICAgIH0sIG9wdGlvbnMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJzdXBzdWIgbXVzdCBoYXZlIGVpdGhlciBzdXAgb3Igc3ViLlwiKTtcbiAgICB9IC8vIFdyYXAgdGhlIHN1cHN1YiB2bGlzdCBpbiBhIHNwYW4ubXN1cHN1YiB0byByZXNldCB0ZXh0LWFsaWduLlxuXG5cbiAgICBjb25zdCBtY2xhc3MgPSBnZXRUeXBlT2ZEb21UcmVlKGJhc2UsIFwicmlnaHRcIikgfHwgXCJtb3JkXCI7XG4gICAgcmV0dXJuIGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFttY2xhc3NdLCBbYmFzZSwgYnVpbGRDb21tb24ubWFrZVNwYW4oW1wibXN1cHN1YlwiXSwgW3N1cHN1Yl0pXSwgb3B0aW9ucyk7XG4gIH0sXG5cbiAgbWF0aG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIC8vIElzIHRoZSBpbm5lciBncm91cCBhIHJlbGV2YW50IGhvcml6b250YWwgYnJhY2U/XG4gICAgbGV0IGlzQnJhY2UgPSBmYWxzZTtcbiAgICBsZXQgaXNPdmVyO1xuICAgIGxldCBpc1N1cDtcblxuICAgIGlmIChncm91cC5iYXNlICYmIGdyb3VwLmJhc2UudHlwZSA9PT0gXCJob3JpekJyYWNlXCIpIHtcbiAgICAgIGlzU3VwID0gISFncm91cC5zdXA7XG5cbiAgICAgIGlmIChpc1N1cCA9PT0gZ3JvdXAuYmFzZS5pc092ZXIpIHtcbiAgICAgICAgaXNCcmFjZSA9IHRydWU7XG4gICAgICAgIGlzT3ZlciA9IGdyb3VwLmJhc2UuaXNPdmVyO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChncm91cC5iYXNlICYmIChncm91cC5iYXNlLnR5cGUgPT09IFwib3BcIiB8fCBncm91cC5iYXNlLnR5cGUgPT09IFwib3BlcmF0b3JuYW1lXCIpKSB7XG4gICAgICBncm91cC5iYXNlLnBhcmVudElzU3VwU3ViID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25zdCBjaGlsZHJlbiA9IFtidWlsZE1hdGhNTF9idWlsZEdyb3VwKGdyb3VwLmJhc2UsIG9wdGlvbnMpXTtcblxuICAgIGlmIChncm91cC5zdWIpIHtcbiAgICAgIGNoaWxkcmVuLnB1c2goYnVpbGRNYXRoTUxfYnVpbGRHcm91cChncm91cC5zdWIsIG9wdGlvbnMpKTtcbiAgICB9XG5cbiAgICBpZiAoZ3JvdXAuc3VwKSB7XG4gICAgICBjaGlsZHJlbi5wdXNoKGJ1aWxkTWF0aE1MX2J1aWxkR3JvdXAoZ3JvdXAuc3VwLCBvcHRpb25zKSk7XG4gICAgfVxuXG4gICAgbGV0IG5vZGVUeXBlO1xuXG4gICAgaWYgKGlzQnJhY2UpIHtcbiAgICAgIG5vZGVUeXBlID0gaXNPdmVyID8gXCJtb3ZlclwiIDogXCJtdW5kZXJcIjtcbiAgICB9IGVsc2UgaWYgKCFncm91cC5zdWIpIHtcbiAgICAgIGNvbnN0IGJhc2UgPSBncm91cC5iYXNlO1xuXG4gICAgICBpZiAoYmFzZSAmJiBiYXNlLnR5cGUgPT09IFwib3BcIiAmJiBiYXNlLmxpbWl0cyAmJiAob3B0aW9ucy5zdHlsZSA9PT0gc3JjX1N0eWxlLkRJU1BMQVkgfHwgYmFzZS5hbHdheXNIYW5kbGVTdXBTdWIpKSB7XG4gICAgICAgIG5vZGVUeXBlID0gXCJtb3ZlclwiO1xuICAgICAgfSBlbHNlIGlmIChiYXNlICYmIGJhc2UudHlwZSA9PT0gXCJvcGVyYXRvcm5hbWVcIiAmJiBiYXNlLmFsd2F5c0hhbmRsZVN1cFN1YiAmJiAoYmFzZS5saW1pdHMgfHwgb3B0aW9ucy5zdHlsZSA9PT0gc3JjX1N0eWxlLkRJU1BMQVkpKSB7XG4gICAgICAgIG5vZGVUeXBlID0gXCJtb3ZlclwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbm9kZVR5cGUgPSBcIm1zdXBcIjtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCFncm91cC5zdXApIHtcbiAgICAgIGNvbnN0IGJhc2UgPSBncm91cC5iYXNlO1xuXG4gICAgICBpZiAoYmFzZSAmJiBiYXNlLnR5cGUgPT09IFwib3BcIiAmJiBiYXNlLmxpbWl0cyAmJiAob3B0aW9ucy5zdHlsZSA9PT0gc3JjX1N0eWxlLkRJU1BMQVkgfHwgYmFzZS5hbHdheXNIYW5kbGVTdXBTdWIpKSB7XG4gICAgICAgIG5vZGVUeXBlID0gXCJtdW5kZXJcIjtcbiAgICAgIH0gZWxzZSBpZiAoYmFzZSAmJiBiYXNlLnR5cGUgPT09IFwib3BlcmF0b3JuYW1lXCIgJiYgYmFzZS5hbHdheXNIYW5kbGVTdXBTdWIgJiYgKGJhc2UubGltaXRzIHx8IG9wdGlvbnMuc3R5bGUgPT09IHNyY19TdHlsZS5ESVNQTEFZKSkge1xuICAgICAgICBub2RlVHlwZSA9IFwibXVuZGVyXCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBub2RlVHlwZSA9IFwibXN1YlwiO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBiYXNlID0gZ3JvdXAuYmFzZTtcblxuICAgICAgaWYgKGJhc2UgJiYgYmFzZS50eXBlID09PSBcIm9wXCIgJiYgYmFzZS5saW1pdHMgJiYgb3B0aW9ucy5zdHlsZSA9PT0gc3JjX1N0eWxlLkRJU1BMQVkpIHtcbiAgICAgICAgbm9kZVR5cGUgPSBcIm11bmRlcm92ZXJcIjtcbiAgICAgIH0gZWxzZSBpZiAoYmFzZSAmJiBiYXNlLnR5cGUgPT09IFwib3BlcmF0b3JuYW1lXCIgJiYgYmFzZS5hbHdheXNIYW5kbGVTdXBTdWIgJiYgKG9wdGlvbnMuc3R5bGUgPT09IHNyY19TdHlsZS5ESVNQTEFZIHx8IGJhc2UubGltaXRzKSkge1xuICAgICAgICBub2RlVHlwZSA9IFwibXVuZGVyb3ZlclwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbm9kZVR5cGUgPSBcIm1zdWJzdXBcIjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUobm9kZVR5cGUsIGNoaWxkcmVuKTtcbiAgfVxuXG59KTtcbjsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbnMvc3ltYm9sc09wLmpzXG5cblxuXG4gLy8gT3BlcmF0b3IgUGFyc2VOb2RlcyBjcmVhdGVkIGluIFBhcnNlci5qcyBmcm9tIHN5bWJvbCBHcm91cHMgaW4gc3JjL3N5bWJvbHMuanMuXG5cbmRlZmluZUZ1bmN0aW9uQnVpbGRlcnMoe1xuICB0eXBlOiBcImF0b21cIixcblxuICBodG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIHJldHVybiBidWlsZENvbW1vbi5tYXRoc3ltKGdyb3VwLnRleHQsIGdyb3VwLm1vZGUsIG9wdGlvbnMsIFtcIm1cIiArIGdyb3VwLmZhbWlseV0pO1xuICB9LFxuXG4gIG1hdGhtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICBjb25zdCBub2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtb1wiLCBbbWFrZVRleHQoZ3JvdXAudGV4dCwgZ3JvdXAubW9kZSldKTtcblxuICAgIGlmIChncm91cC5mYW1pbHkgPT09IFwiYmluXCIpIHtcbiAgICAgIGNvbnN0IHZhcmlhbnQgPSBnZXRWYXJpYW50KGdyb3VwLCBvcHRpb25zKTtcblxuICAgICAgaWYgKHZhcmlhbnQgPT09IFwiYm9sZC1pdGFsaWNcIikge1xuICAgICAgICBub2RlLnNldEF0dHJpYnV0ZShcIm1hdGh2YXJpYW50XCIsIHZhcmlhbnQpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZ3JvdXAuZmFtaWx5ID09PSBcInB1bmN0XCIpIHtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwic2VwYXJhdG9yXCIsIFwidHJ1ZVwiKTtcbiAgICB9IGVsc2UgaWYgKGdyb3VwLmZhbWlseSA9PT0gXCJvcGVuXCIgfHwgZ3JvdXAuZmFtaWx5ID09PSBcImNsb3NlXCIpIHtcbiAgICAgIC8vIERlbGltcyBidWlsdCBoZXJlIHNob3VsZCBub3Qgc3RyZXRjaCB2ZXJ0aWNhbGx5LlxuICAgICAgLy8gU2VlIGRlbGltc2l6aW5nLmpzIGZvciBzdHJldGNoeSBkZWxpbXMuXG4gICAgICBub2RlLnNldEF0dHJpYnV0ZShcInN0cmV0Y2h5XCIsIFwiZmFsc2VcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxufSk7XG47Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb25zL3N5bWJvbHNPcmQuanNcblxuXG5cblxuLy8gXCJtYXRob3JkXCIgYW5kIFwidGV4dG9yZFwiIFBhcnNlTm9kZXMgY3JlYXRlZCBpbiBQYXJzZXIuanMgZnJvbSBzeW1ib2wgR3JvdXBzIGluXG4vLyBzcmMvc3ltYm9scy5qcy5cbmNvbnN0IGRlZmF1bHRWYXJpYW50ID0ge1xuICBcIm1pXCI6IFwiaXRhbGljXCIsXG4gIFwibW5cIjogXCJub3JtYWxcIixcbiAgXCJtdGV4dFwiOiBcIm5vcm1hbFwiXG59O1xuZGVmaW5lRnVuY3Rpb25CdWlsZGVycyh7XG4gIHR5cGU6IFwibWF0aG9yZFwiLFxuXG4gIGh0bWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIGJ1aWxkQ29tbW9uLm1ha2VPcmQoZ3JvdXAsIG9wdGlvbnMsIFwibWF0aG9yZFwiKTtcbiAgfSxcblxuICBtYXRobWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgY29uc3Qgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibWlcIiwgW21ha2VUZXh0KGdyb3VwLnRleHQsIGdyb3VwLm1vZGUsIG9wdGlvbnMpXSk7XG4gICAgY29uc3QgdmFyaWFudCA9IGdldFZhcmlhbnQoZ3JvdXAsIG9wdGlvbnMpIHx8IFwiaXRhbGljXCI7XG5cbiAgICBpZiAodmFyaWFudCAhPT0gZGVmYXVsdFZhcmlhbnRbbm9kZS50eXBlXSkge1xuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJtYXRodmFyaWFudFwiLCB2YXJpYW50KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuXG59KTtcbmRlZmluZUZ1bmN0aW9uQnVpbGRlcnMoe1xuICB0eXBlOiBcInRleHRvcmRcIixcblxuICBodG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIHJldHVybiBidWlsZENvbW1vbi5tYWtlT3JkKGdyb3VwLCBvcHRpb25zLCBcInRleHRvcmRcIik7XG4gIH0sXG5cbiAgbWF0aG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIGNvbnN0IHRleHQgPSBtYWtlVGV4dChncm91cC50ZXh0LCBncm91cC5tb2RlLCBvcHRpb25zKTtcbiAgICBjb25zdCB2YXJpYW50ID0gZ2V0VmFyaWFudChncm91cCwgb3B0aW9ucykgfHwgXCJub3JtYWxcIjtcbiAgICBsZXQgbm9kZTtcblxuICAgIGlmIChncm91cC5tb2RlID09PSAndGV4dCcpIHtcbiAgICAgIG5vZGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm10ZXh0XCIsIFt0ZXh0XSk7XG4gICAgfSBlbHNlIGlmICgvWzAtOV0vLnRlc3QoZ3JvdXAudGV4dCkpIHtcbiAgICAgIG5vZGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1uXCIsIFt0ZXh0XSk7XG4gICAgfSBlbHNlIGlmIChncm91cC50ZXh0ID09PSBcIlxcXFxwcmltZVwiKSB7XG4gICAgICBub2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtb1wiLCBbdGV4dF0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBub2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtaVwiLCBbdGV4dF0pO1xuICAgIH1cblxuICAgIGlmICh2YXJpYW50ICE9PSBkZWZhdWx0VmFyaWFudFtub2RlLnR5cGVdKSB7XG4gICAgICBub2RlLnNldEF0dHJpYnV0ZShcIm1hdGh2YXJpYW50XCIsIHZhcmlhbnQpO1xuICAgIH1cblxuICAgIHJldHVybiBub2RlO1xuICB9XG5cbn0pO1xuOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9ucy9zeW1ib2xzU3BhY2luZy5qc1xuXG5cblxuIC8vIEEgbWFwIG9mIENTUy1iYXNlZCBzcGFjaW5nIGZ1bmN0aW9ucyB0byB0aGVpciBDU1MgY2xhc3MuXG5cbmNvbnN0IGNzc1NwYWNlID0ge1xuICBcIlxcXFxub2JyZWFrXCI6IFwibm9icmVha1wiLFxuICBcIlxcXFxhbGxvd2JyZWFrXCI6IFwiYWxsb3dicmVha1wiXG59OyAvLyBBIGxvb2t1cCB0YWJsZSB0byBkZXRlcm1pbmUgd2hldGhlciBhIHNwYWNpbmcgZnVuY3Rpb24vc3ltYm9sIHNob3VsZCBiZVxuLy8gdHJlYXRlZCBsaWtlIGEgcmVndWxhciBzcGFjZSBjaGFyYWN0ZXIuICBJZiBhIHN5bWJvbCBvciBjb21tYW5kIGlzIGEga2V5XG4vLyBpbiB0aGlzIHRhYmxlLCB0aGVuIGl0IHNob3VsZCBiZSBhIHJlZ3VsYXIgc3BhY2UgY2hhcmFjdGVyLiAgRnVydGhlcm1vcmUsXG4vLyB0aGUgYXNzb2NpYXRlZCB2YWx1ZSBtYXkgaGF2ZSBhIGBjbGFzc05hbWVgIHNwZWNpZnlpbmcgYW4gZXh0cmEgQ1NTIGNsYXNzXG4vLyB0byBhZGQgdG8gdGhlIGNyZWF0ZWQgYHNwYW5gLlxuXG5jb25zdCByZWd1bGFyU3BhY2UgPSB7XG4gIFwiIFwiOiB7fSxcbiAgXCJcXFxcIFwiOiB7fSxcbiAgXCJ+XCI6IHtcbiAgICBjbGFzc05hbWU6IFwibm9icmVha1wiXG4gIH0sXG4gIFwiXFxcXHNwYWNlXCI6IHt9LFxuICBcIlxcXFxub2JyZWFrc3BhY2VcIjoge1xuICAgIGNsYXNzTmFtZTogXCJub2JyZWFrXCJcbiAgfVxufTsgLy8gUGFyc2VOb2RlPFwic3BhY2luZ1wiPiBjcmVhdGVkIGluIFBhcnNlci5qcyBmcm9tIHRoZSBcInNwYWNpbmdcIiBzeW1ib2wgR3JvdXBzIGluXG4vLyBzcmMvc3ltYm9scy5qcy5cblxuZGVmaW5lRnVuY3Rpb25CdWlsZGVycyh7XG4gIHR5cGU6IFwic3BhY2luZ1wiLFxuXG4gIGh0bWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgaWYgKHJlZ3VsYXJTcGFjZS5oYXNPd25Qcm9wZXJ0eShncm91cC50ZXh0KSkge1xuICAgICAgY29uc3QgY2xhc3NOYW1lID0gcmVndWxhclNwYWNlW2dyb3VwLnRleHRdLmNsYXNzTmFtZSB8fCBcIlwiOyAvLyBTcGFjZXMgYXJlIGdlbmVyYXRlZCBieSBhZGRpbmcgYW4gYWN0dWFsIHNwYWNlLiBFYWNoIG9mIHRoZXNlXG4gICAgICAvLyB0aGluZ3MgaGFzIGFuIGVudHJ5IGluIHRoZSBzeW1ib2xzIHRhYmxlLCBzbyB0aGVzZSB3aWxsIGJlIHR1cm5lZFxuICAgICAgLy8gaW50byBhcHByb3ByaWF0ZSBvdXRwdXRzLlxuXG4gICAgICBpZiAoZ3JvdXAubW9kZSA9PT0gXCJ0ZXh0XCIpIHtcbiAgICAgICAgY29uc3Qgb3JkID0gYnVpbGRDb21tb24ubWFrZU9yZChncm91cCwgb3B0aW9ucywgXCJ0ZXh0b3JkXCIpO1xuICAgICAgICBvcmQuY2xhc3Nlcy5wdXNoKGNsYXNzTmFtZSk7XG4gICAgICAgIHJldHVybiBvcmQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wibXNwYWNlXCIsIGNsYXNzTmFtZV0sIFtidWlsZENvbW1vbi5tYXRoc3ltKGdyb3VwLnRleHQsIGdyb3VwLm1vZGUsIG9wdGlvbnMpXSwgb3B0aW9ucyk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjc3NTcGFjZS5oYXNPd25Qcm9wZXJ0eShncm91cC50ZXh0KSkge1xuICAgICAgLy8gU3BhY2VzIGJhc2VkIG9uIGp1c3QgYSBDU1MgY2xhc3MuXG4gICAgICByZXR1cm4gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wibXNwYWNlXCIsIGNzc1NwYWNlW2dyb3VwLnRleHRdXSwgW10sIG9wdGlvbnMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJVbmtub3duIHR5cGUgb2Ygc3BhY2UgXFxcIlwiICsgZ3JvdXAudGV4dCArIFwiXFxcIlwiKTtcbiAgICB9XG4gIH0sXG5cbiAgbWF0aG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIGxldCBub2RlO1xuXG4gICAgaWYgKHJlZ3VsYXJTcGFjZS5oYXNPd25Qcm9wZXJ0eShncm91cC50ZXh0KSkge1xuICAgICAgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXRleHRcIiwgW25ldyBtYXRoTUxUcmVlLlRleHROb2RlKFwiXFx1MDBhMFwiKV0pO1xuICAgIH0gZWxzZSBpZiAoY3NzU3BhY2UuaGFzT3duUHJvcGVydHkoZ3JvdXAudGV4dCkpIHtcbiAgICAgIC8vIENTUy1iYXNlZCBNYXRoTUwgc3BhY2VzIChcXG5vYnJlYWssIFxcYWxsb3dicmVhaykgYXJlIGlnbm9yZWRcbiAgICAgIHJldHVybiBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1zcGFjZVwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiVW5rbm93biB0eXBlIG9mIHNwYWNlIFxcXCJcIiArIGdyb3VwLnRleHQgKyBcIlxcXCJcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxufSk7XG47Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb25zL3RhZy5qc1xuXG5cblxuXG5jb25zdCBwYWQgPSAoKSA9PiB7XG4gIGNvbnN0IHBhZE5vZGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm10ZFwiLCBbXSk7XG4gIHBhZE5vZGUuc2V0QXR0cmlidXRlKFwid2lkdGhcIiwgXCI1MCVcIik7XG4gIHJldHVybiBwYWROb2RlO1xufTtcblxuZGVmaW5lRnVuY3Rpb25CdWlsZGVycyh7XG4gIHR5cGU6IFwidGFnXCIsXG5cbiAgbWF0aG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIGNvbnN0IHRhYmxlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtdGFibGVcIiwgW25ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXRyXCIsIFtwYWQoKSwgbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtdGRcIiwgW2J1aWxkRXhwcmVzc2lvblJvdyhncm91cC5ib2R5LCBvcHRpb25zKV0pLCBwYWQoKSwgbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtdGRcIiwgW2J1aWxkRXhwcmVzc2lvblJvdyhncm91cC50YWcsIG9wdGlvbnMpXSldKV0pO1xuICAgIHRhYmxlLnNldEF0dHJpYnV0ZShcIndpZHRoXCIsIFwiMTAwJVwiKTtcbiAgICByZXR1cm4gdGFibGU7IC8vIFRPRE86IExlZnQtYWxpZ25lZCB0YWdzLlxuICAgIC8vIEN1cnJlbnRseSwgdGhlIGdyb3VwIGFuZCBvcHRpb25zIHBhc3NlZCBoZXJlIGRvIG5vdCBjb250YWluXG4gICAgLy8gZW5vdWdoIGluZm8gdG8gc2V0IHRhZyBhbGlnbm1lbnQuIGBsZXFub2AgaXMgaW4gU2V0dGluZ3MgYnV0IGl0IGlzXG4gICAgLy8gbm90IHBhc3NlZCB0byBPcHRpb25zLiBPbiB0aGUgSFRNTCBzaWRlLCBsZXFubyBpc1xuICAgIC8vIHNldCBieSBhIENTUyBjbGFzcyBhcHBsaWVkIGluIGJ1aWxkVHJlZS5qcy4gVGhhdCB3b3VsZCBoYXZlIHdvcmtlZFxuICAgIC8vIGluIE1hdGhNTCBpZiBicm93c2VycyBzdXBwb3J0ZWQgPG1sYWJlbGVkdHI+LiBTaW5jZSB0aGV5IGRvbid0LCB3ZVxuICAgIC8vIG5lZWQgdG8gcmV3cml0ZSB0aGUgd2F5IHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLlxuICB9XG5cbn0pO1xuOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9ucy90ZXh0LmpzXG5cblxuXG4gLy8gTm9uLW1hdGh5IHRleHQsIHBvc3NpYmx5IGluIGEgZm9udFxuXG5jb25zdCB0ZXh0Rm9udEZhbWlsaWVzID0ge1xuICBcIlxcXFx0ZXh0XCI6IHVuZGVmaW5lZCxcbiAgXCJcXFxcdGV4dHJtXCI6IFwidGV4dHJtXCIsXG4gIFwiXFxcXHRleHRzZlwiOiBcInRleHRzZlwiLFxuICBcIlxcXFx0ZXh0dHRcIjogXCJ0ZXh0dHRcIixcbiAgXCJcXFxcdGV4dG5vcm1hbFwiOiBcInRleHRybVwiXG59O1xuY29uc3QgdGV4dEZvbnRXZWlnaHRzID0ge1xuICBcIlxcXFx0ZXh0YmZcIjogXCJ0ZXh0YmZcIixcbiAgXCJcXFxcdGV4dG1kXCI6IFwidGV4dG1kXCJcbn07XG5jb25zdCB0ZXh0Rm9udFNoYXBlcyA9IHtcbiAgXCJcXFxcdGV4dGl0XCI6IFwidGV4dGl0XCIsXG4gIFwiXFxcXHRleHR1cFwiOiBcInRleHR1cFwiXG59O1xuXG5jb25zdCBvcHRpb25zV2l0aEZvbnQgPSAoZ3JvdXAsIG9wdGlvbnMpID0+IHtcbiAgY29uc3QgZm9udCA9IGdyb3VwLmZvbnQ7IC8vIENoZWNrcyBpZiB0aGUgYXJndW1lbnQgaXMgYSBmb250IGZhbWlseSBvciBhIGZvbnQgc3R5bGUuXG5cbiAgaWYgKCFmb250KSB7XG4gICAgcmV0dXJuIG9wdGlvbnM7XG4gIH0gZWxzZSBpZiAodGV4dEZvbnRGYW1pbGllc1tmb250XSkge1xuICAgIHJldHVybiBvcHRpb25zLndpdGhUZXh0Rm9udEZhbWlseSh0ZXh0Rm9udEZhbWlsaWVzW2ZvbnRdKTtcbiAgfSBlbHNlIGlmICh0ZXh0Rm9udFdlaWdodHNbZm9udF0pIHtcbiAgICByZXR1cm4gb3B0aW9ucy53aXRoVGV4dEZvbnRXZWlnaHQodGV4dEZvbnRXZWlnaHRzW2ZvbnRdKTtcbiAgfSBlbHNlIGlmIChmb250ID09PSBcIlxcXFxlbXBoXCIpIHtcbiAgICByZXR1cm4gb3B0aW9ucy5mb250U2hhcGUgPT09IFwidGV4dGl0XCIgPyBvcHRpb25zLndpdGhUZXh0Rm9udFNoYXBlKFwidGV4dHVwXCIpIDogb3B0aW9ucy53aXRoVGV4dEZvbnRTaGFwZShcInRleHRpdFwiKTtcbiAgfVxuXG4gIHJldHVybiBvcHRpb25zLndpdGhUZXh0Rm9udFNoYXBlKHRleHRGb250U2hhcGVzW2ZvbnRdKTtcbn07XG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJ0ZXh0XCIsXG4gIG5hbWVzOiBbLy8gRm9udCBmYW1pbGllc1xuICBcIlxcXFx0ZXh0XCIsIFwiXFxcXHRleHRybVwiLCBcIlxcXFx0ZXh0c2ZcIiwgXCJcXFxcdGV4dHR0XCIsIFwiXFxcXHRleHRub3JtYWxcIiwgLy8gRm9udCB3ZWlnaHRzXG4gIFwiXFxcXHRleHRiZlwiLCBcIlxcXFx0ZXh0bWRcIiwgLy8gRm9udCBTaGFwZXNcbiAgXCJcXFxcdGV4dGl0XCIsIFwiXFxcXHRleHR1cFwiLCBcIlxcXFxlbXBoXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDEsXG4gICAgYXJnVHlwZXM6IFtcInRleHRcIl0sXG4gICAgYWxsb3dlZEluQXJndW1lbnQ6IHRydWUsXG4gICAgYWxsb3dlZEluVGV4dDogdHJ1ZVxuICB9LFxuXG4gIGhhbmRsZXIoX3JlZiwgYXJncykge1xuICAgIGxldCB7XG4gICAgICBwYXJzZXIsXG4gICAgICBmdW5jTmFtZVxuICAgIH0gPSBfcmVmO1xuICAgIGNvbnN0IGJvZHkgPSBhcmdzWzBdO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgYm9keTogb3JkYXJndW1lbnQoYm9keSksXG4gICAgICBmb250OiBmdW5jTmFtZVxuICAgIH07XG4gIH0sXG5cbiAgaHRtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICBjb25zdCBuZXdPcHRpb25zID0gb3B0aW9uc1dpdGhGb250KGdyb3VwLCBvcHRpb25zKTtcbiAgICBjb25zdCBpbm5lciA9IGJ1aWxkRXhwcmVzc2lvbihncm91cC5ib2R5LCBuZXdPcHRpb25zLCB0cnVlKTtcbiAgICByZXR1cm4gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wibW9yZFwiLCBcInRleHRcIl0sIGlubmVyLCBuZXdPcHRpb25zKTtcbiAgfSxcblxuICBtYXRobWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgY29uc3QgbmV3T3B0aW9ucyA9IG9wdGlvbnNXaXRoRm9udChncm91cCwgb3B0aW9ucyk7XG4gICAgcmV0dXJuIGJ1aWxkRXhwcmVzc2lvblJvdyhncm91cC5ib2R5LCBuZXdPcHRpb25zKTtcbiAgfVxuXG59KTtcbjsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbnMvdW5kZXJsaW5lLmpzXG5cblxuXG5cblxuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcInVuZGVybGluZVwiLFxuICBuYW1lczogW1wiXFxcXHVuZGVybGluZVwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxLFxuICAgIGFsbG93ZWRJblRleHQ6IHRydWVcbiAgfSxcblxuICBoYW5kbGVyKF9yZWYsIGFyZ3MpIHtcbiAgICBsZXQge1xuICAgICAgcGFyc2VyXG4gICAgfSA9IF9yZWY7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwidW5kZXJsaW5lXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGJvZHk6IGFyZ3NbMF1cbiAgICB9O1xuICB9LFxuXG4gIGh0bWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgLy8gVW5kZXJsaW5lcyBhcmUgaGFuZGxlZCBpbiB0aGUgVGVYYm9vayBwZyA0NDMsIFJ1bGUgMTAuXG4gICAgLy8gQnVpbGQgdGhlIGlubmVyIGdyb3VwLlxuICAgIGNvbnN0IGlubmVyR3JvdXAgPSBidWlsZEdyb3VwKGdyb3VwLmJvZHksIG9wdGlvbnMpOyAvLyBDcmVhdGUgdGhlIGxpbmUgdG8gZ28gYmVsb3cgdGhlIGJvZHlcblxuICAgIGNvbnN0IGxpbmUgPSBidWlsZENvbW1vbi5tYWtlTGluZVNwYW4oXCJ1bmRlcmxpbmUtbGluZVwiLCBvcHRpb25zKTsgLy8gR2VuZXJhdGUgdGhlIHZsaXN0LCB3aXRoIHRoZSBhcHByb3ByaWF0ZSBrZXJuc1xuXG4gICAgY29uc3QgZGVmYXVsdFJ1bGVUaGlja25lc3MgPSBvcHRpb25zLmZvbnRNZXRyaWNzKCkuZGVmYXVsdFJ1bGVUaGlja25lc3M7XG4gICAgY29uc3Qgdmxpc3QgPSBidWlsZENvbW1vbi5tYWtlVkxpc3Qoe1xuICAgICAgcG9zaXRpb25UeXBlOiBcInRvcFwiLFxuICAgICAgcG9zaXRpb25EYXRhOiBpbm5lckdyb3VwLmhlaWdodCxcbiAgICAgIGNoaWxkcmVuOiBbe1xuICAgICAgICB0eXBlOiBcImtlcm5cIixcbiAgICAgICAgc2l6ZTogZGVmYXVsdFJ1bGVUaGlja25lc3NcbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IGxpbmVcbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJrZXJuXCIsXG4gICAgICAgIHNpemU6IDMgKiBkZWZhdWx0UnVsZVRoaWNrbmVzc1xuICAgICAgfSwge1xuICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgZWxlbTogaW5uZXJHcm91cFxuICAgICAgfV1cbiAgICB9LCBvcHRpb25zKTtcbiAgICByZXR1cm4gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wibW9yZFwiLCBcInVuZGVybGluZVwiXSwgW3ZsaXN0XSwgb3B0aW9ucyk7XG4gIH0sXG5cbiAgbWF0aG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIGNvbnN0IG9wZXJhdG9yID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtb1wiLCBbbmV3IG1hdGhNTFRyZWUuVGV4dE5vZGUoXCJcXHUyMDNlXCIpXSk7XG4gICAgb3BlcmF0b3Iuc2V0QXR0cmlidXRlKFwic3RyZXRjaHlcIiwgXCJ0cnVlXCIpO1xuICAgIGNvbnN0IG5vZGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm11bmRlclwiLCBbYnVpbGRNYXRoTUxfYnVpbGRHcm91cChncm91cC5ib2R5LCBvcHRpb25zKSwgb3BlcmF0b3JdKTtcbiAgICBub2RlLnNldEF0dHJpYnV0ZShcImFjY2VudHVuZGVyXCIsIFwidHJ1ZVwiKTtcbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuXG59KTtcbjsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbnMvdmNlbnRlci5qc1xuXG5cblxuXG4gLy8gXFx2Y2VudGVyOiAgVmVydGljYWxseSBjZW50ZXIgdGhlIGFyZ3VtZW50IGdyb3VwIG9uIHRoZSBtYXRoIGF4aXMuXG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJ2Y2VudGVyXCIsXG4gIG5hbWVzOiBbXCJcXFxcdmNlbnRlclwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxLFxuICAgIGFyZ1R5cGVzOiBbXCJvcmlnaW5hbFwiXSxcbiAgICAvLyBJbiBMYVRlWCwgXFx2Y2VudGVyIGNhbiBhY3Qgb25seSBvbiBhIGJveC5cbiAgICBhbGxvd2VkSW5UZXh0OiBmYWxzZVxuICB9LFxuXG4gIGhhbmRsZXIoX3JlZiwgYXJncykge1xuICAgIGxldCB7XG4gICAgICBwYXJzZXJcbiAgICB9ID0gX3JlZjtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJ2Y2VudGVyXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGJvZHk6IGFyZ3NbMF1cbiAgICB9O1xuICB9LFxuXG4gIGh0bWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgY29uc3QgYm9keSA9IGJ1aWxkR3JvdXAoZ3JvdXAuYm9keSwgb3B0aW9ucyk7XG4gICAgY29uc3QgYXhpc0hlaWdodCA9IG9wdGlvbnMuZm9udE1ldHJpY3MoKS5heGlzSGVpZ2h0O1xuICAgIGNvbnN0IGR5ID0gMC41ICogKGJvZHkuaGVpZ2h0IC0gYXhpc0hlaWdodCAtIChib2R5LmRlcHRoICsgYXhpc0hlaWdodCkpO1xuICAgIHJldHVybiBidWlsZENvbW1vbi5tYWtlVkxpc3Qoe1xuICAgICAgcG9zaXRpb25UeXBlOiBcInNoaWZ0XCIsXG4gICAgICBwb3NpdGlvbkRhdGE6IGR5LFxuICAgICAgY2hpbGRyZW46IFt7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBib2R5XG4gICAgICB9XVxuICAgIH0sIG9wdGlvbnMpO1xuICB9LFxuXG4gIG1hdGhtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICAvLyBUaGVyZSBpcyBubyB3YXkgdG8gZG8gdGhpcyBpbiBNYXRoTUwuXG4gICAgLy8gV3JpdGUgYSBjbGFzcyBhcyBhIGJyZWFkY3J1bWIgaW4gY2FzZSBzb21lIHBvc3QtcHJvY2Vzc29yIHdhbnRzXG4gICAgLy8gdG8gcGVyZm9ybSBhIHZjZW50ZXIgYWRqdXN0bWVudC5cbiAgICByZXR1cm4gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtcGFkZGVkXCIsIFtidWlsZE1hdGhNTF9idWlsZEdyb3VwKGdyb3VwLmJvZHksIG9wdGlvbnMpXSwgW1widmNlbnRlclwiXSk7XG4gIH1cblxufSk7XG47Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb25zL3ZlcmIuanNcblxuXG5cblxuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcInZlcmJcIixcbiAgbmFtZXM6IFtcIlxcXFx2ZXJiXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDAsXG4gICAgYWxsb3dlZEluVGV4dDogdHJ1ZVxuICB9LFxuXG4gIGhhbmRsZXIoY29udGV4dCwgYXJncywgb3B0QXJncykge1xuICAgIC8vIFxcdmVyYiBhbmQgXFx2ZXJiKiBhcmUgZGVhbHQgd2l0aCBkaXJlY3RseSBpbiBQYXJzZXIuanMuXG4gICAgLy8gSWYgd2UgZW5kIHVwIGhlcmUsIGl0J3MgYmVjYXVzZSBvZiBhIGZhaWx1cmUgdG8gbWF0Y2ggdGhlIHR3byBkZWxpbWl0ZXJzXG4gICAgLy8gaW4gdGhlIHJlZ2V4IGluIExleGVyLmpzLiAgTGFUZVggcmFpc2VzIHRoZSBmb2xsb3dpbmcgZXJyb3Igd2hlbiBcXHZlcmIgaXNcbiAgICAvLyB0ZXJtaW5hdGVkIGJ5IGVuZCBvZiBsaW5lIChvciBmaWxlKS5cbiAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJcXFxcdmVyYiBlbmRlZCBieSBlbmQgb2YgbGluZSBpbnN0ZWFkIG9mIG1hdGNoaW5nIGRlbGltaXRlclwiKTtcbiAgfSxcblxuICBodG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIGNvbnN0IHRleHQgPSBtYWtlVmVyYihncm91cCk7XG4gICAgY29uc3QgYm9keSA9IFtdOyAvLyBcXHZlcmIgZW50ZXJzIHRleHQgbW9kZSBhbmQgdGhlcmVmb3JlIGlzIHNpemVkIGxpa2UgXFx0ZXh0c3R5bGVcblxuICAgIGNvbnN0IG5ld09wdGlvbnMgPSBvcHRpb25zLmhhdmluZ1N0eWxlKG9wdGlvbnMuc3R5bGUudGV4dCgpKTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGV4dC5sZW5ndGg7IGkrKykge1xuICAgICAgbGV0IGMgPSB0ZXh0W2ldO1xuXG4gICAgICBpZiAoYyA9PT0gJ34nKSB7XG4gICAgICAgIGMgPSAnXFxcXHRleHRhc2NpaXRpbGRlJztcbiAgICAgIH1cblxuICAgICAgYm9keS5wdXNoKGJ1aWxkQ29tbW9uLm1ha2VTeW1ib2woYywgXCJUeXBld3JpdGVyLVJlZ3VsYXJcIiwgZ3JvdXAubW9kZSwgbmV3T3B0aW9ucywgW1wibW9yZFwiLCBcInRleHR0dFwiXSkpO1xuICAgIH1cblxuICAgIHJldHVybiBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJtb3JkXCIsIFwidGV4dFwiXS5jb25jYXQobmV3T3B0aW9ucy5zaXppbmdDbGFzc2VzKG9wdGlvbnMpKSwgYnVpbGRDb21tb24udHJ5Q29tYmluZUNoYXJzKGJvZHkpLCBuZXdPcHRpb25zKTtcbiAgfSxcblxuICBtYXRobWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgY29uc3QgdGV4dCA9IG5ldyBtYXRoTUxUcmVlLlRleHROb2RlKG1ha2VWZXJiKGdyb3VwKSk7XG4gICAgY29uc3Qgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXRleHRcIiwgW3RleHRdKTtcbiAgICBub2RlLnNldEF0dHJpYnV0ZShcIm1hdGh2YXJpYW50XCIsIFwibW9ub3NwYWNlXCIpO1xuICAgIHJldHVybiBub2RlO1xuICB9XG5cbn0pO1xuLyoqXG4gKiBDb252ZXJ0cyB2ZXJiIGdyb3VwIGludG8gYm9keSBzdHJpbmcuXG4gKlxuICogXFx2ZXJiKiByZXBsYWNlcyBlYWNoIHNwYWNlIHdpdGggYW4gb3BlbiBib3ggXFx1MjQyM1xuICogXFx2ZXJiIHJlcGxhY2VzIGVhY2ggc3BhY2Ugd2l0aCBhIG5vLWJyZWFrIHNwYWNlIFxceEEwXG4gKi9cblxuY29uc3QgbWFrZVZlcmIgPSBncm91cCA9PiBncm91cC5ib2R5LnJlcGxhY2UoLyAvZywgZ3JvdXAuc3RhciA/ICdcXHUyNDIzJyA6ICdcXHhBMCcpO1xuOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9ucy5qc1xuLyoqIEluY2x1ZGUgdGhpcyB0byBlbnN1cmUgdGhhdCBhbGwgZnVuY3Rpb25zIGFyZSBkZWZpbmVkLiAqL1xuXG5jb25zdCBmdW5jdGlvbnMgPSBfZnVuY3Rpb25zO1xuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3JjX2Z1bmN0aW9ucyA9IChmdW5jdGlvbnMpOyAvLyBUT0RPKGtldmluYik6IGhhdmUgZnVuY3Rpb25zIHJldHVybiBhbiBvYmplY3QgYW5kIGNhbGwgZGVmaW5lRnVuY3Rpb24gd2l0aFxuLy8gdGhhdCBvYmplY3QgaW4gdGhpcyBmaWxlIGluc3RlYWQgb2YgcmVseWluZyBvbiBzaWRlLWVmZmVjdHMuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL0xleGVyLmpzXG4vKipcbiAqIFRoZSBMZXhlciBjbGFzcyBoYW5kbGVzIHRva2VuaXppbmcgdGhlIGlucHV0IGluIHZhcmlvdXMgd2F5cy4gU2luY2Ugb3VyXG4gKiBwYXJzZXIgZXhwZWN0cyB1cyB0byBiZSBhYmxlIHRvIGJhY2t0cmFjaywgdGhlIGxleGVyIGFsbG93cyBsZXhpbmcgZnJvbSBhbnlcbiAqIGdpdmVuIHN0YXJ0aW5nIHBvaW50LlxuICpcbiAqIEl0cyBtYWluIGV4cG9zZWQgZnVuY3Rpb24gaXMgdGhlIGBsZXhgIGZ1bmN0aW9uLCB3aGljaCB0YWtlcyBhIHBvc2l0aW9uIHRvXG4gKiBsZXggZnJvbSBhbmQgYSB0eXBlIG9mIHRva2VuIHRvIGxleC4gSXQgZGVmZXJzIHRvIHRoZSBhcHByb3ByaWF0ZSBgX2lubmVyTGV4YFxuICogZnVuY3Rpb24uXG4gKlxuICogVGhlIHZhcmlvdXMgYF9pbm5lckxleGAgZnVuY3Rpb25zIHBlcmZvcm0gdGhlIGFjdHVhbCBsZXhpbmcgb2YgZGlmZmVyZW50XG4gKiBraW5kcy5cbiAqL1xuXG5cblxuXG4vKiBUaGUgZm9sbG93aW5nIHRva2VuUmVnZXhcbiAqIC0gbWF0Y2hlcyB0eXBpY2FsIHdoaXRlc3BhY2UgKGJ1dCBub3QgTkJTUCBldGMuKSB1c2luZyBpdHMgZmlyc3QgZ3JvdXBcbiAqIC0gZG9lcyBub3QgbWF0Y2ggYW55IGNvbnRyb2wgY2hhcmFjdGVyIFxceDAwLVxceDFmIGV4Y2VwdCB3aGl0ZXNwYWNlXG4gKiAtIGRvZXMgbm90IG1hdGNoIGEgYmFyZSBiYWNrc2xhc2hcbiAqIC0gbWF0Y2hlcyBhbnkgQVNDSUkgY2hhcmFjdGVyIGV4Y2VwdCB0aG9zZSBqdXN0IG1lbnRpb25lZFxuICogLSBkb2VzIG5vdCBtYXRjaCB0aGUgQk1QIHByaXZhdGUgdXNlIGFyZWEgXFx1RTAwMC1cXHVGOEZGXG4gKiAtIGRvZXMgbm90IG1hdGNoIGJhcmUgc3Vycm9nYXRlIGNvZGUgdW5pdHNcbiAqIC0gbWF0Y2hlcyBhbnkgQk1QIGNoYXJhY3RlciBleGNlcHQgZm9yIHRob3NlIGp1c3QgZGVzY3JpYmVkXG4gKiAtIG1hdGNoZXMgYW55IHZhbGlkIFVuaWNvZGUgc3Vycm9nYXRlIHBhaXJcbiAqIC0gbWF0Y2hlcyBhIGJhY2tzbGFzaCBmb2xsb3dlZCBieSBvbmUgb3IgbW9yZSB3aGl0ZXNwYWNlIGNoYXJhY3RlcnNcbiAqIC0gbWF0Y2hlcyBhIGJhY2tzbGFzaCBmb2xsb3dlZCBieSBvbmUgb3IgbW9yZSBsZXR0ZXJzIHRoZW4gd2hpdGVzcGFjZVxuICogLSBtYXRjaGVzIGEgYmFja3NsYXNoIGZvbGxvd2VkIGJ5IGFueSBCTVAgY2hhcmFjdGVyXG4gKiBDYXB0dXJpbmcgZ3JvdXBzOlxuICogICBbMV0gcmVndWxhciB3aGl0ZXNwYWNlXG4gKiAgIFsyXSBiYWNrc2xhc2ggZm9sbG93ZWQgYnkgd2hpdGVzcGFjZVxuICogICBbM10gYW55dGhpbmcgZWxzZSwgd2hpY2ggbWF5IGluY2x1ZGU6XG4gKiAgICAgWzRdIGxlZnQgY2hhcmFjdGVyIG9mIFxcdmVyYipcbiAqICAgICBbNV0gbGVmdCBjaGFyYWN0ZXIgb2YgXFx2ZXJiXG4gKiAgICAgWzZdIGJhY2tzbGFzaCBmb2xsb3dlZCBieSB3b3JkLCBleGNsdWRpbmcgYW55IHRyYWlsaW5nIHdoaXRlc3BhY2VcbiAqIEp1c3QgYmVjYXVzZSB0aGUgTGV4ZXIgbWF0Y2hlcyBzb21ldGhpbmcgZG9lc24ndCBtZWFuIGl0J3MgdmFsaWQgaW5wdXQ6XG4gKiBJZiB0aGVyZSBpcyBubyBtYXRjaGluZyBmdW5jdGlvbiBvciBzeW1ib2wgZGVmaW5pdGlvbiwgdGhlIFBhcnNlciB3aWxsXG4gKiBzdGlsbCByZWplY3QgdGhlIGlucHV0LlxuICovXG5jb25zdCBzcGFjZVJlZ2V4U3RyaW5nID0gXCJbIFxcclxcblxcdF1cIjtcbmNvbnN0IGNvbnRyb2xXb3JkUmVnZXhTdHJpbmcgPSBcIlxcXFxcXFxcW2EtekEtWkBdK1wiO1xuY29uc3QgY29udHJvbFN5bWJvbFJlZ2V4U3RyaW5nID0gXCJcXFxcXFxcXFteXFx1RDgwMC1cXHVERkZGXVwiO1xuY29uc3QgY29udHJvbFdvcmRXaGl0ZXNwYWNlUmVnZXhTdHJpbmcgPSBcIihcIiArIGNvbnRyb2xXb3JkUmVnZXhTdHJpbmcgKyBcIilcIiArIHNwYWNlUmVnZXhTdHJpbmcgKyBcIipcIjtcbmNvbnN0IGNvbnRyb2xTcGFjZVJlZ2V4U3RyaW5nID0gXCJcXFxcXFxcXChcXG58WyBcXHJcXHRdK1xcbj8pWyBcXHJcXHRdKlwiO1xuY29uc3QgY29tYmluaW5nRGlhY3JpdGljYWxNYXJrU3RyaW5nID0gXCJbXFx1MDMwMC1cXHUwMzZmXVwiO1xuY29uc3QgY29tYmluaW5nRGlhY3JpdGljYWxNYXJrc0VuZFJlZ2V4ID0gbmV3IFJlZ0V4cChjb21iaW5pbmdEaWFjcml0aWNhbE1hcmtTdHJpbmcgKyBcIiskXCIpO1xuY29uc3QgdG9rZW5SZWdleFN0cmluZyA9IFwiKFwiICsgc3BhY2VSZWdleFN0cmluZyArIFwiKyl8XCIgKyAoIC8vIHdoaXRlc3BhY2VcbmNvbnRyb2xTcGFjZVJlZ2V4U3RyaW5nICsgXCJ8XCIpICsgLy8gXFx3aGl0ZXNwYWNlXG5cIihbIS1cXFxcW1xcXFxdLVxcdTIwMjdcXHUyMDJBLVxcdUQ3RkZcXHVGOTAwLVxcdUZGRkZdXCIgKyAoIC8vIHNpbmdsZSBjb2RlcG9pbnRcbmNvbWJpbmluZ0RpYWNyaXRpY2FsTWFya1N0cmluZyArIFwiKlwiKSArIC8vIC4uLnBsdXMgYWNjZW50c1xuXCJ8W1xcdUQ4MDAtXFx1REJGRl1bXFx1REMwMC1cXHVERkZGXVwiICsgKCAvLyBzdXJyb2dhdGUgcGFpclxuY29tYmluaW5nRGlhY3JpdGljYWxNYXJrU3RyaW5nICsgXCIqXCIpICsgLy8gLi4ucGx1cyBhY2NlbnRzXG5cInxcXFxcXFxcXHZlcmJcXFxcKihbXl0pLio/XFxcXDRcIiArIC8vIFxcdmVyYipcblwifFxcXFxcXFxcdmVyYihbXiphLXpBLVpdKS4qP1xcXFw1XCIgKyAoIC8vIFxcdmVyYiB1bnN0YXJyZWRcblwifFwiICsgY29udHJvbFdvcmRXaGl0ZXNwYWNlUmVnZXhTdHJpbmcpICsgKCAvLyBcXG1hY3JvTmFtZSArIHNwYWNlc1xuXCJ8XCIgKyBjb250cm9sU3ltYm9sUmVnZXhTdHJpbmcgKyBcIilcIik7IC8vIFxcXFwsIFxcJywgZXRjLlxuXG4vKiogTWFpbiBMZXhlciBjbGFzcyAqL1xuXG5jbGFzcyBMZXhlciB7XG4gIC8vIENhdGVnb3J5IGNvZGVzLiBUaGUgbGV4ZXIgb25seSBzdXBwb3J0cyBjb21tZW50IGNoYXJhY3RlcnMgKDE0KSBmb3Igbm93LlxuICAvLyBNYWNyb0V4cGFuZGVyIGFkZGl0aW9uYWxseSBkaXN0aW5ndWlzaGVzIGFjdGl2ZSAoMTMpLlxuICBjb25zdHJ1Y3RvcihpbnB1dCwgc2V0dGluZ3MpIHtcbiAgICB0aGlzLmlucHV0ID0gdm9pZCAwO1xuICAgIHRoaXMuc2V0dGluZ3MgPSB2b2lkIDA7XG4gICAgdGhpcy50b2tlblJlZ2V4ID0gdm9pZCAwO1xuICAgIHRoaXMuY2F0Y29kZXMgPSB2b2lkIDA7XG4gICAgLy8gU2VwYXJhdGUgYWNjZW50cyBmcm9tIGNoYXJhY3RlcnNcbiAgICB0aGlzLmlucHV0ID0gaW5wdXQ7XG4gICAgdGhpcy5zZXR0aW5ncyA9IHNldHRpbmdzO1xuICAgIHRoaXMudG9rZW5SZWdleCA9IG5ldyBSZWdFeHAodG9rZW5SZWdleFN0cmluZywgJ2cnKTtcbiAgICB0aGlzLmNhdGNvZGVzID0ge1xuICAgICAgXCIlXCI6IDE0LFxuICAgICAgLy8gY29tbWVudCBjaGFyYWN0ZXJcbiAgICAgIFwiflwiOiAxMyAvLyBhY3RpdmUgY2hhcmFjdGVyXG5cbiAgICB9O1xuICB9XG5cbiAgc2V0Q2F0Y29kZShjaGFyLCBjb2RlKSB7XG4gICAgdGhpcy5jYXRjb2Rlc1tjaGFyXSA9IGNvZGU7XG4gIH1cbiAgLyoqXG4gICAqIFRoaXMgZnVuY3Rpb24gbGV4ZXMgYSBzaW5nbGUgdG9rZW4uXG4gICAqL1xuXG5cbiAgbGV4KCkge1xuICAgIGNvbnN0IGlucHV0ID0gdGhpcy5pbnB1dDtcbiAgICBjb25zdCBwb3MgPSB0aGlzLnRva2VuUmVnZXgubGFzdEluZGV4O1xuXG4gICAgaWYgKHBvcyA9PT0gaW5wdXQubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gbmV3IFRva2VuKFwiRU9GXCIsIG5ldyBTb3VyY2VMb2NhdGlvbih0aGlzLCBwb3MsIHBvcykpO1xuICAgIH1cblxuICAgIGNvbnN0IG1hdGNoID0gdGhpcy50b2tlblJlZ2V4LmV4ZWMoaW5wdXQpO1xuXG4gICAgaWYgKG1hdGNoID09PSBudWxsIHx8IG1hdGNoLmluZGV4ICE9PSBwb3MpIHtcbiAgICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIlVuZXhwZWN0ZWQgY2hhcmFjdGVyOiAnXCIgKyBpbnB1dFtwb3NdICsgXCInXCIsIG5ldyBUb2tlbihpbnB1dFtwb3NdLCBuZXcgU291cmNlTG9jYXRpb24odGhpcywgcG9zLCBwb3MgKyAxKSkpO1xuICAgIH1cblxuICAgIGNvbnN0IHRleHQgPSBtYXRjaFs2XSB8fCBtYXRjaFszXSB8fCAobWF0Y2hbMl0gPyBcIlxcXFwgXCIgOiBcIiBcIik7XG5cbiAgICBpZiAodGhpcy5jYXRjb2Rlc1t0ZXh0XSA9PT0gMTQpIHtcbiAgICAgIC8vIGNvbW1lbnQgY2hhcmFjdGVyXG4gICAgICBjb25zdCBubEluZGV4ID0gaW5wdXQuaW5kZXhPZignXFxuJywgdGhpcy50b2tlblJlZ2V4Lmxhc3RJbmRleCk7XG5cbiAgICAgIGlmIChubEluZGV4ID09PSAtMSkge1xuICAgICAgICB0aGlzLnRva2VuUmVnZXgubGFzdEluZGV4ID0gaW5wdXQubGVuZ3RoOyAvLyBFT0ZcblxuICAgICAgICB0aGlzLnNldHRpbmdzLnJlcG9ydE5vbnN0cmljdChcImNvbW1lbnRBdEVuZFwiLCBcIiUgY29tbWVudCBoYXMgbm8gdGVybWluYXRpbmcgbmV3bGluZTsgTGFUZVggd291bGQgXCIgKyBcImZhaWwgYmVjYXVzZSBvZiBjb21tZW50aW5nIHRoZSBlbmQgb2YgbWF0aCBtb2RlIChlLmcuICQpXCIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy50b2tlblJlZ2V4Lmxhc3RJbmRleCA9IG5sSW5kZXggKyAxO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5sZXgoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFRva2VuKHRleHQsIG5ldyBTb3VyY2VMb2NhdGlvbih0aGlzLCBwb3MsIHRoaXMudG9rZW5SZWdleC5sYXN0SW5kZXgpKTtcbiAgfVxuXG59XG47Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvTmFtZXNwYWNlLmpzXG4vKipcbiAqIEEgYE5hbWVzcGFjZWAgcmVmZXJzIHRvIGEgc3BhY2Ugb2YgbmFtZWFibGUgdGhpbmdzIGxpa2UgbWFjcm9zIG9yIGxlbmd0aHMsXG4gKiB3aGljaCBjYW4gYmUgYHNldGAgZWl0aGVyIGdsb2JhbGx5IG9yIGxvY2FsIHRvIGEgbmVzdGVkIGdyb3VwLCB1c2luZyBhblxuICogdW5kbyBzdGFjayBzaW1pbGFyIHRvIGhvdyBUZVggaW1wbGVtZW50cyB0aGlzIGZ1bmN0aW9uYWxpdHkuXG4gKiBQZXJmb3JtYW5jZS13aXNlLCBgZ2V0YCBhbmQgbG9jYWwgYHNldGAgdGFrZSBjb25zdGFudCB0aW1lLCB3aGlsZSBnbG9iYWxcbiAqIGBzZXRgIHRha2VzIHRpbWUgcHJvcG9ydGlvbmFsIHRvIHRoZSBkZXB0aCBvZiBncm91cCBuZXN0aW5nLlxuICovXG5cbmNsYXNzIE5hbWVzcGFjZSB7XG4gIC8qKlxuICAgKiBCb3RoIGFyZ3VtZW50cyBhcmUgb3B0aW9uYWwuICBUaGUgZmlyc3QgYXJndW1lbnQgaXMgYW4gb2JqZWN0IG9mXG4gICAqIGJ1aWx0LWluIG1hcHBpbmdzIHdoaWNoIG5ldmVyIGNoYW5nZS4gIFRoZSBzZWNvbmQgYXJndW1lbnQgaXMgYW4gb2JqZWN0XG4gICAqIG9mIGluaXRpYWwgKGdsb2JhbC1sZXZlbCkgbWFwcGluZ3MsIHdoaWNoIHdpbGwgY29uc3RhbnRseSBjaGFuZ2VcbiAgICogYWNjb3JkaW5nIHRvIGFueSBnbG9iYWwvdG9wLWxldmVsIGBzZXRgcyBkb25lLlxuICAgKi9cbiAgY29uc3RydWN0b3IoYnVpbHRpbnMsIGdsb2JhbE1hY3Jvcykge1xuICAgIGlmIChidWlsdGlucyA9PT0gdm9pZCAwKSB7XG4gICAgICBidWlsdGlucyA9IHt9O1xuICAgIH1cblxuICAgIGlmIChnbG9iYWxNYWNyb3MgPT09IHZvaWQgMCkge1xuICAgICAgZ2xvYmFsTWFjcm9zID0ge307XG4gICAgfVxuXG4gICAgdGhpcy5jdXJyZW50ID0gdm9pZCAwO1xuICAgIHRoaXMuYnVpbHRpbnMgPSB2b2lkIDA7XG4gICAgdGhpcy51bmRlZlN0YWNrID0gdm9pZCAwO1xuICAgIHRoaXMuY3VycmVudCA9IGdsb2JhbE1hY3JvcztcbiAgICB0aGlzLmJ1aWx0aW5zID0gYnVpbHRpbnM7XG4gICAgdGhpcy51bmRlZlN0YWNrID0gW107XG4gIH1cbiAgLyoqXG4gICAqIFN0YXJ0IGEgbmV3IG5lc3RlZCBncm91cCwgYWZmZWN0aW5nIGZ1dHVyZSBsb2NhbCBgc2V0YHMuXG4gICAqL1xuXG5cbiAgYmVnaW5Hcm91cCgpIHtcbiAgICB0aGlzLnVuZGVmU3RhY2sucHVzaCh7fSk7XG4gIH1cbiAgLyoqXG4gICAqIEVuZCBjdXJyZW50IG5lc3RlZCBncm91cCwgcmVzdG9yaW5nIHZhbHVlcyBiZWZvcmUgdGhlIGdyb3VwIGJlZ2FuLlxuICAgKi9cblxuXG4gIGVuZEdyb3VwKCkge1xuICAgIGlmICh0aGlzLnVuZGVmU3RhY2subGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJVbmJhbGFuY2VkIG5hbWVzcGFjZSBkZXN0cnVjdGlvbjogYXR0ZW1wdCBcIiArIFwidG8gcG9wIGdsb2JhbCBuYW1lc3BhY2U7IHBsZWFzZSByZXBvcnQgdGhpcyBhcyBhIGJ1Z1wiKTtcbiAgICB9XG5cbiAgICBjb25zdCB1bmRlZnMgPSB0aGlzLnVuZGVmU3RhY2sucG9wKCk7XG5cbiAgICBmb3IgKGNvbnN0IHVuZGVmIGluIHVuZGVmcykge1xuICAgICAgaWYgKHVuZGVmcy5oYXNPd25Qcm9wZXJ0eSh1bmRlZikpIHtcbiAgICAgICAgaWYgKHVuZGVmc1t1bmRlZl0gPT0gbnVsbCkge1xuICAgICAgICAgIGRlbGV0ZSB0aGlzLmN1cnJlbnRbdW5kZWZdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuY3VycmVudFt1bmRlZl0gPSB1bmRlZnNbdW5kZWZdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBFbmRzIGFsbCBjdXJyZW50bHkgbmVzdGVkIGdyb3VwcyAoaWYgYW55KSwgcmVzdG9yaW5nIHZhbHVlcyBiZWZvcmUgdGhlXG4gICAqIGdyb3VwcyBiZWdhbi4gIFVzZWZ1bCBpbiBjYXNlIG9mIGFuIGVycm9yIGluIHRoZSBtaWRkbGUgb2YgcGFyc2luZy5cbiAgICovXG5cblxuICBlbmRHcm91cHMoKSB7XG4gICAgd2hpbGUgKHRoaXMudW5kZWZTdGFjay5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmVuZEdyb3VwKCk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBEZXRlY3Qgd2hldGhlciBgbmFtZWAgaGFzIGEgZGVmaW5pdGlvbi4gIEVxdWl2YWxlbnQgdG9cbiAgICogYGdldChuYW1lKSAhPSBudWxsYC5cbiAgICovXG5cblxuICBoYXMobmFtZSkge1xuICAgIHJldHVybiB0aGlzLmN1cnJlbnQuaGFzT3duUHJvcGVydHkobmFtZSkgfHwgdGhpcy5idWlsdGlucy5oYXNPd25Qcm9wZXJ0eShuYW1lKTtcbiAgfVxuICAvKipcbiAgICogR2V0IHRoZSBjdXJyZW50IHZhbHVlIG9mIGEgbmFtZSwgb3IgYHVuZGVmaW5lZGAgaWYgdGhlcmUgaXMgbm8gdmFsdWUuXG4gICAqXG4gICAqIE5vdGU6IERvIG5vdCB1c2UgYGlmIChuYW1lc3BhY2UuZ2V0KC4uLikpYCB0byBkZXRlY3Qgd2hldGhlciBhIG1hY3JvXG4gICAqIGlzIGRlZmluZWQsIGFzIHRoZSBkZWZpbml0aW9uIG1heSBiZSB0aGUgZW1wdHkgc3RyaW5nIHdoaWNoIGV2YWx1YXRlc1xuICAgKiB0byBgZmFsc2VgIGluIEphdmFTY3JpcHQuICBVc2UgYGlmIChuYW1lc3BhY2UuZ2V0KC4uLikgIT0gbnVsbClgIG9yXG4gICAqIGBpZiAobmFtZXNwYWNlLmhhcyguLi4pKWAuXG4gICAqL1xuXG5cbiAgZ2V0KG5hbWUpIHtcbiAgICBpZiAodGhpcy5jdXJyZW50Lmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICByZXR1cm4gdGhpcy5jdXJyZW50W25hbWVdO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5idWlsdGluc1tuYW1lXTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFNldCB0aGUgY3VycmVudCB2YWx1ZSBvZiBhIG5hbWUsIGFuZCBvcHRpb25hbGx5IHNldCBpdCBnbG9iYWxseSB0b28uXG4gICAqIExvY2FsIHNldCgpIHNldHMgdGhlIGN1cnJlbnQgdmFsdWUgYW5kICh3aGVuIGFwcHJvcHJpYXRlKSBhZGRzIGFuIHVuZG9cbiAgICogb3BlcmF0aW9uIHRvIHRoZSB1bmRvIHN0YWNrLiAgR2xvYmFsIHNldCgpIG1heSBjaGFuZ2UgdGhlIHVuZG9cbiAgICogb3BlcmF0aW9uIGF0IGV2ZXJ5IGxldmVsLCBzbyB0YWtlcyB0aW1lIGxpbmVhciBpbiB0aGVpciBudW1iZXIuXG4gICAqIEEgdmFsdWUgb2YgdW5kZWZpbmVkIG1lYW5zIHRvIGRlbGV0ZSBleGlzdGluZyBkZWZpbml0aW9ucy5cbiAgICovXG5cblxuICBzZXQobmFtZSwgdmFsdWUsIGdsb2JhbCkge1xuICAgIGlmIChnbG9iYWwgPT09IHZvaWQgMCkge1xuICAgICAgZ2xvYmFsID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKGdsb2JhbCkge1xuICAgICAgLy8gR2xvYmFsIHNldCBpcyBlcXVpdmFsZW50IHRvIHNldHRpbmcgaW4gYWxsIGdyb3Vwcy4gIFNpbXVsYXRlIHRoaXNcbiAgICAgIC8vIGJ5IGRlc3Ryb3lpbmcgYW55IHVuZG9zIGN1cnJlbnRseSBzY2hlZHVsZWQgZm9yIHRoaXMgbmFtZSxcbiAgICAgIC8vIGFuZCBhZGRpbmcgYW4gdW5kbyB3aXRoIHRoZSAqbmV3KiB2YWx1ZSAoaW4gY2FzZSBpdCBsYXRlciBnZXRzXG4gICAgICAvLyBsb2NhbGx5IHJlc2V0IHdpdGhpbiB0aGlzIGVudmlyb25tZW50KS5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy51bmRlZlN0YWNrLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGRlbGV0ZSB0aGlzLnVuZGVmU3RhY2tbaV1bbmFtZV07XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnVuZGVmU3RhY2subGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLnVuZGVmU3RhY2tbdGhpcy51bmRlZlN0YWNrLmxlbmd0aCAtIDFdW25hbWVdID0gdmFsdWU7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFVuZG8gdGhpcyBzZXQgYXQgZW5kIG9mIHRoaXMgZ3JvdXAgKHBvc3NpYmx5IHRvIGB1bmRlZmluZWRgKSxcbiAgICAgIC8vIHVubGVzcyBhbiB1bmRvIGlzIGFscmVhZHkgaW4gcGxhY2UsIGluIHdoaWNoIGNhc2UgdGhhdCBvbGRlclxuICAgICAgLy8gdmFsdWUgaXMgdGhlIGNvcnJlY3Qgb25lLlxuICAgICAgY29uc3QgdG9wID0gdGhpcy51bmRlZlN0YWNrW3RoaXMudW5kZWZTdGFjay5sZW5ndGggLSAxXTtcblxuICAgICAgaWYgKHRvcCAmJiAhdG9wLmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICAgIHRvcFtuYW1lXSA9IHRoaXMuY3VycmVudFtuYW1lXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgICAgZGVsZXRlIHRoaXMuY3VycmVudFtuYW1lXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jdXJyZW50W25hbWVdID0gdmFsdWU7XG4gICAgfVxuICB9XG5cbn1cbjsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9tYWNyb3MuanNcbi8qKlxuICogUHJlZGVmaW5lZCBtYWNyb3MgZm9yIEthVGVYLlxuICogVGhpcyBjYW4gYmUgdXNlZCB0byBkZWZpbmUgc29tZSBjb21tYW5kcyBpbiB0ZXJtcyBvZiBvdGhlcnMuXG4gKi9cbi8vIEV4cG9ydCBnbG9iYWwgbWFjcm9zIG9iamVjdCBmcm9tIGRlZmluZU1hY3JvXG5cbmNvbnN0IG1hY3JvcyA9IF9tYWNyb3M7XG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzcmNfbWFjcm9zID0gKG1hY3Jvcyk7XG5cblxuXG5cblxuIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIG1hY3JvIHRvb2xzXG5cbmRlZmluZU1hY3JvKFwiXFxcXG5vZXhwYW5kXCIsIGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gIC8vIFRoZSBleHBhbnNpb24gaXMgdGhlIHRva2VuIGl0c2VsZjsgYnV0IHRoYXQgdG9rZW4gaXMgaW50ZXJwcmV0ZWRcbiAgLy8gYXMgaWYgaXRzIG1lYW5pbmcgd2VyZSDigJhcXHJlbGF44oCZIGlmIGl0IGlzIGEgY29udHJvbCBzZXF1ZW5jZSB0aGF0XG4gIC8vIHdvdWxkIG9yZGluYXJpbHkgYmUgZXhwYW5kZWQgYnkgVGVY4oCZcyBleHBhbnNpb24gcnVsZXMuXG4gIGNvbnN0IHQgPSBjb250ZXh0LnBvcFRva2VuKCk7XG5cbiAgaWYgKGNvbnRleHQuaXNFeHBhbmRhYmxlKHQudGV4dCkpIHtcbiAgICB0Lm5vZXhwYW5kID0gdHJ1ZTtcbiAgICB0LnRyZWF0QXNSZWxheCA9IHRydWU7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHRva2VuczogW3RdLFxuICAgIG51bUFyZ3M6IDBcbiAgfTtcbn0pO1xuZGVmaW5lTWFjcm8oXCJcXFxcZXhwYW5kYWZ0ZXJcIiwgZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgLy8gVGVYIGZpcnN0IHJlYWRzIHRoZSB0b2tlbiB0aGF0IGNvbWVzIGltbWVkaWF0ZWx5IGFmdGVyIFxcZXhwYW5kYWZ0ZXIsXG4gIC8vIHdpdGhvdXQgZXhwYW5kaW5nIGl0OyBsZXTigJlzIGNhbGwgdGhpcyB0b2tlbiB0LiBUaGVuIFRlWCByZWFkcyB0aGVcbiAgLy8gdG9rZW4gdGhhdCBjb21lcyBhZnRlciB0IChhbmQgcG9zc2libHkgbW9yZSB0b2tlbnMsIGlmIHRoYXQgdG9rZW5cbiAgLy8gaGFzIGFuIGFyZ3VtZW50KSwgcmVwbGFjaW5nIGl0IGJ5IGl0cyBleHBhbnNpb24uIEZpbmFsbHkgVGVYIHB1dHNcbiAgLy8gdCBiYWNrIGluIGZyb250IG9mIHRoYXQgZXhwYW5zaW9uLlxuICBjb25zdCB0ID0gY29udGV4dC5wb3BUb2tlbigpO1xuICBjb250ZXh0LmV4cGFuZE9uY2UodHJ1ZSk7IC8vIGV4cGFuZCBvbmx5IGFuIGV4cGFuZGFibGUgdG9rZW5cblxuICByZXR1cm4ge1xuICAgIHRva2VuczogW3RdLFxuICAgIG51bUFyZ3M6IDBcbiAgfTtcbn0pOyAvLyBMYVRlWCdzIFxcQGZpcnN0b2Z0d297IzF9eyMyfSBleHBhbmRzIHRvICMxLCBza2lwcGluZyAjMlxuLy8gVGVYIHNvdXJjZTogXFxsb25nXFxkZWZcXEBmaXJzdG9mdHdvIzEjMnsjMX1cblxuZGVmaW5lTWFjcm8oXCJcXFxcQGZpcnN0b2Z0d29cIiwgZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgY29uc3QgYXJncyA9IGNvbnRleHQuY29uc3VtZUFyZ3MoMik7XG4gIHJldHVybiB7XG4gICAgdG9rZW5zOiBhcmdzWzBdLFxuICAgIG51bUFyZ3M6IDBcbiAgfTtcbn0pOyAvLyBMYVRlWCdzIFxcQHNlY29uZG9mdHdveyMxfXsjMn0gZXhwYW5kcyB0byAjMiwgc2tpcHBpbmcgIzFcbi8vIFRlWCBzb3VyY2U6IFxcbG9uZ1xcZGVmXFxAc2Vjb25kb2Z0d28jMSMyeyMyfVxuXG5kZWZpbmVNYWNybyhcIlxcXFxAc2Vjb25kb2Z0d29cIiwgZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgY29uc3QgYXJncyA9IGNvbnRleHQuY29uc3VtZUFyZ3MoMik7XG4gIHJldHVybiB7XG4gICAgdG9rZW5zOiBhcmdzWzFdLFxuICAgIG51bUFyZ3M6IDBcbiAgfTtcbn0pOyAvLyBMYVRlWCdzIFxcQGlmbmV4dGNoYXJ7IzF9eyMyfXsjM30gbG9va3MgYWhlYWQgdG8gdGhlIG5leHQgKHVuZXhwYW5kZWQpXG4vLyBzeW1ib2wgdGhhdCBpc24ndCBhIHNwYWNlLCBjb25zdW1pbmcgYW55IHNwYWNlcyBidXQgbm90IGNvbnN1bWluZyB0aGVcbi8vIGZpcnN0IG5vbnNwYWNlIGNoYXJhY3Rlci4gIElmIHRoYXQgbm9uc3BhY2UgY2hhcmFjdGVyIG1hdGNoZXMgIzEsIHRoZW5cbi8vIHRoZSBtYWNybyBleHBhbmRzIHRvICMyOyBvdGhlcndpc2UsIGl0IGV4cGFuZHMgdG8gIzMuXG5cbmRlZmluZU1hY3JvKFwiXFxcXEBpZm5leHRjaGFyXCIsIGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gIGNvbnN0IGFyZ3MgPSBjb250ZXh0LmNvbnN1bWVBcmdzKDMpOyAvLyBzeW1ib2wsIGlmLCBlbHNlXG5cbiAgY29udGV4dC5jb25zdW1lU3BhY2VzKCk7XG4gIGNvbnN0IG5leHRUb2tlbiA9IGNvbnRleHQuZnV0dXJlKCk7XG5cbiAgaWYgKGFyZ3NbMF0ubGVuZ3RoID09PSAxICYmIGFyZ3NbMF1bMF0udGV4dCA9PT0gbmV4dFRva2VuLnRleHQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdG9rZW5zOiBhcmdzWzFdLFxuICAgICAgbnVtQXJnczogMFxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRva2VuczogYXJnc1syXSxcbiAgICAgIG51bUFyZ3M6IDBcbiAgICB9O1xuICB9XG59KTsgLy8gTGFUZVgncyBcXEBpZnN0YXJ7IzF9eyMyfSBsb29rcyBhaGVhZCB0byB0aGUgbmV4dCAodW5leHBhbmRlZCkgc3ltYm9sLlxuLy8gSWYgaXQgaXMgYCpgLCB0aGVuIGl0IGNvbnN1bWVzIHRoZSBzeW1ib2wsIGFuZCB0aGUgbWFjcm8gZXhwYW5kcyB0byAjMTtcbi8vIG90aGVyd2lzZSwgdGhlIG1hY3JvIGV4cGFuZHMgdG8gIzIgKHdpdGhvdXQgY29uc3VtaW5nIHRoZSBzeW1ib2wpLlxuLy8gVGVYIHNvdXJjZTogXFxkZWZcXEBpZnN0YXIjMXtcXEBpZm5leHRjaGFyICp7XFxAZmlyc3RvZnR3b3sjMX19fVxuXG5kZWZpbmVNYWNybyhcIlxcXFxAaWZzdGFyXCIsIFwiXFxcXEBpZm5leHRjaGFyICp7XFxcXEBmaXJzdG9mdHdveyMxfX1cIik7IC8vIExhVGVYJ3MgXFxUZXh0T3JNYXRoeyMxfXsjMn0gZXhwYW5kcyB0byAjMSBpbiB0ZXh0IG1vZGUsICMyIGluIG1hdGggbW9kZVxuXG5kZWZpbmVNYWNybyhcIlxcXFxUZXh0T3JNYXRoXCIsIGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gIGNvbnN0IGFyZ3MgPSBjb250ZXh0LmNvbnN1bWVBcmdzKDIpO1xuXG4gIGlmIChjb250ZXh0Lm1vZGUgPT09ICd0ZXh0Jykge1xuICAgIHJldHVybiB7XG4gICAgICB0b2tlbnM6IGFyZ3NbMF0sXG4gICAgICBudW1BcmdzOiAwXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4ge1xuICAgICAgdG9rZW5zOiBhcmdzWzFdLFxuICAgICAgbnVtQXJnczogMFxuICAgIH07XG4gIH1cbn0pOyAvLyBMb29rdXAgdGFibGUgZm9yIHBhcnNpbmcgbnVtYmVycyBpbiBiYXNlIDggdGhyb3VnaCAxNlxuXG5jb25zdCBkaWdpdFRvTnVtYmVyID0ge1xuICBcIjBcIjogMCxcbiAgXCIxXCI6IDEsXG4gIFwiMlwiOiAyLFxuICBcIjNcIjogMyxcbiAgXCI0XCI6IDQsXG4gIFwiNVwiOiA1LFxuICBcIjZcIjogNixcbiAgXCI3XCI6IDcsXG4gIFwiOFwiOiA4LFxuICBcIjlcIjogOSxcbiAgXCJhXCI6IDEwLFxuICBcIkFcIjogMTAsXG4gIFwiYlwiOiAxMSxcbiAgXCJCXCI6IDExLFxuICBcImNcIjogMTIsXG4gIFwiQ1wiOiAxMixcbiAgXCJkXCI6IDEzLFxuICBcIkRcIjogMTMsXG4gIFwiZVwiOiAxNCxcbiAgXCJFXCI6IDE0LFxuICBcImZcIjogMTUsXG4gIFwiRlwiOiAxNVxufTsgLy8gVGVYIFxcY2hhciBtYWtlcyBhIGxpdGVyYWwgY2hhcmFjdGVyIChjYXRjb2RlIDEyKSB1c2luZyB0aGUgZm9sbG93aW5nIGZvcm1zOlxuLy8gKHNlZSBUaGUgVGVYQm9vaywgcC4gNDMpXG4vLyAgIFxcY2hhcjEyMyAgLS0gZGVjaW1hbFxuLy8gICBcXGNoYXInMTIzIC0tIG9jdGFsXG4vLyAgIFxcY2hhclwiMTIzIC0tIGhleFxuLy8gICBcXGNoYXJgeCAgIC0tIGNoYXJhY3RlciB0aGF0IGNhbiBiZSB3cml0dGVuIChpLmUuIGlzbid0IGFjdGl2ZSlcbi8vICAgXFxjaGFyYFxceCAgLS0gY2hhcmFjdGVyIHRoYXQgY2Fubm90IGJlIHdyaXR0ZW4gKGUuZy4gJSlcbi8vIFRoZXNlIGFsbCByZWZlciB0byBjaGFyYWN0ZXJzIGZyb20gdGhlIGZvbnQsIHNvIHdlIHR1cm4gdGhlbSBpbnRvIHNwZWNpYWxcbi8vIGNhbGxzIHRvIGEgZnVuY3Rpb24gXFxAY2hhciBkZWFsdCB3aXRoIGluIHRoZSBQYXJzZXIuXG5cbmRlZmluZU1hY3JvKFwiXFxcXGNoYXJcIiwgZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgbGV0IHRva2VuID0gY29udGV4dC5wb3BUb2tlbigpO1xuICBsZXQgYmFzZTtcbiAgbGV0IG51bWJlciA9ICcnO1xuXG4gIGlmICh0b2tlbi50ZXh0ID09PSBcIidcIikge1xuICAgIGJhc2UgPSA4O1xuICAgIHRva2VuID0gY29udGV4dC5wb3BUb2tlbigpO1xuICB9IGVsc2UgaWYgKHRva2VuLnRleHQgPT09ICdcIicpIHtcbiAgICBiYXNlID0gMTY7XG4gICAgdG9rZW4gPSBjb250ZXh0LnBvcFRva2VuKCk7XG4gIH0gZWxzZSBpZiAodG9rZW4udGV4dCA9PT0gXCJgXCIpIHtcbiAgICB0b2tlbiA9IGNvbnRleHQucG9wVG9rZW4oKTtcblxuICAgIGlmICh0b2tlbi50ZXh0WzBdID09PSBcIlxcXFxcIikge1xuICAgICAgbnVtYmVyID0gdG9rZW4udGV4dC5jaGFyQ29kZUF0KDEpO1xuICAgIH0gZWxzZSBpZiAodG9rZW4udGV4dCA9PT0gXCJFT0ZcIikge1xuICAgICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiXFxcXGNoYXJgIG1pc3NpbmcgYXJndW1lbnRcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIG51bWJlciA9IHRva2VuLnRleHQuY2hhckNvZGVBdCgwKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgYmFzZSA9IDEwO1xuICB9XG5cbiAgaWYgKGJhc2UpIHtcbiAgICAvLyBQYXJzZSBhIG51bWJlciBpbiB0aGUgZ2l2ZW4gYmFzZSwgc3RhcnRpbmcgd2l0aCBmaXJzdCBgdG9rZW5gLlxuICAgIG51bWJlciA9IGRpZ2l0VG9OdW1iZXJbdG9rZW4udGV4dF07XG5cbiAgICBpZiAobnVtYmVyID09IG51bGwgfHwgbnVtYmVyID49IGJhc2UpIHtcbiAgICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIkludmFsaWQgYmFzZS1cIiArIGJhc2UgKyBcIiBkaWdpdCBcIiArIHRva2VuLnRleHQpO1xuICAgIH1cblxuICAgIGxldCBkaWdpdDtcblxuICAgIHdoaWxlICgoZGlnaXQgPSBkaWdpdFRvTnVtYmVyW2NvbnRleHQuZnV0dXJlKCkudGV4dF0pICE9IG51bGwgJiYgZGlnaXQgPCBiYXNlKSB7XG4gICAgICBudW1iZXIgKj0gYmFzZTtcbiAgICAgIG51bWJlciArPSBkaWdpdDtcbiAgICAgIGNvbnRleHQucG9wVG9rZW4oKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gXCJcXFxcQGNoYXJ7XCIgKyBudW1iZXIgKyBcIn1cIjtcbn0pOyAvLyBcXG5ld2NvbW1hbmR7XFxtYWNyb31bYXJnc117ZGVmaW5pdGlvbn1cbi8vIFxccmVuZXdjb21tYW5ke1xcbWFjcm99W2FyZ3Nde2RlZmluaXRpb259XG4vLyBUT0RPOiBPcHRpb25hbCBhcmd1bWVudHM6IFxcbmV3Y29tbWFuZHtcXG1hY3JvfVthcmdzXVtkZWZhdWx0XXtkZWZpbml0aW9ufVxuXG5jb25zdCBuZXdjb21tYW5kID0gKGNvbnRleHQsIGV4aXN0c09LLCBub25leGlzdHNPSywgc2tpcElmRXhpc3RzKSA9PiB7XG4gIGxldCBhcmcgPSBjb250ZXh0LmNvbnN1bWVBcmcoKS50b2tlbnM7XG5cbiAgaWYgKGFyZy5sZW5ndGggIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJcXFxcbmV3Y29tbWFuZCdzIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBtYWNybyBuYW1lXCIpO1xuICB9XG5cbiAgY29uc3QgbmFtZSA9IGFyZ1swXS50ZXh0O1xuICBjb25zdCBleGlzdHMgPSBjb250ZXh0LmlzRGVmaW5lZChuYW1lKTtcblxuICBpZiAoZXhpc3RzICYmICFleGlzdHNPSykge1xuICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIlxcXFxuZXdjb21tYW5ke1wiICsgbmFtZSArIFwifSBhdHRlbXB0aW5nIHRvIHJlZGVmaW5lIFwiICsgKG5hbWUgKyBcIjsgdXNlIFxcXFxyZW5ld2NvbW1hbmRcIikpO1xuICB9XG5cbiAgaWYgKCFleGlzdHMgJiYgIW5vbmV4aXN0c09LKSB7XG4gICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiXFxcXHJlbmV3Y29tbWFuZHtcIiArIG5hbWUgKyBcIn0gd2hlbiBjb21tYW5kIFwiICsgbmFtZSArIFwiIFwiICsgXCJkb2VzIG5vdCB5ZXQgZXhpc3Q7IHVzZSBcXFxcbmV3Y29tbWFuZFwiKTtcbiAgfVxuXG4gIGxldCBudW1BcmdzID0gMDtcbiAgYXJnID0gY29udGV4dC5jb25zdW1lQXJnKCkudG9rZW5zO1xuXG4gIGlmIChhcmcubGVuZ3RoID09PSAxICYmIGFyZ1swXS50ZXh0ID09PSBcIltcIikge1xuICAgIGxldCBhcmdUZXh0ID0gJyc7XG4gICAgbGV0IHRva2VuID0gY29udGV4dC5leHBhbmROZXh0VG9rZW4oKTtcblxuICAgIHdoaWxlICh0b2tlbi50ZXh0ICE9PSBcIl1cIiAmJiB0b2tlbi50ZXh0ICE9PSBcIkVPRlwiKSB7XG4gICAgICAvLyBUT0RPOiBTaG91bGQgcHJvcGVybHkgZXhwYW5kIGFyZywgZS5nLiwgaWdub3JlIHt9c1xuICAgICAgYXJnVGV4dCArPSB0b2tlbi50ZXh0O1xuICAgICAgdG9rZW4gPSBjb250ZXh0LmV4cGFuZE5leHRUb2tlbigpO1xuICAgIH1cblxuICAgIGlmICghYXJnVGV4dC5tYXRjaCgvXlxccypbMC05XStcXHMqJC8pKSB7XG4gICAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJJbnZhbGlkIG51bWJlciBvZiBhcmd1bWVudHM6IFwiICsgYXJnVGV4dCk7XG4gICAgfVxuXG4gICAgbnVtQXJncyA9IHBhcnNlSW50KGFyZ1RleHQpO1xuICAgIGFyZyA9IGNvbnRleHQuY29uc3VtZUFyZygpLnRva2VucztcbiAgfVxuXG4gIGlmICghKGV4aXN0cyAmJiBza2lwSWZFeGlzdHMpKSB7XG4gICAgLy8gRmluYWwgYXJnIGlzIHRoZSBleHBhbnNpb24gb2YgdGhlIG1hY3JvXG4gICAgY29udGV4dC5tYWNyb3Muc2V0KG5hbWUsIHtcbiAgICAgIHRva2VuczogYXJnLFxuICAgICAgbnVtQXJnc1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuICcnO1xufTtcblxuZGVmaW5lTWFjcm8oXCJcXFxcbmV3Y29tbWFuZFwiLCBjb250ZXh0ID0+IG5ld2NvbW1hbmQoY29udGV4dCwgZmFsc2UsIHRydWUsIGZhbHNlKSk7XG5kZWZpbmVNYWNybyhcIlxcXFxyZW5ld2NvbW1hbmRcIiwgY29udGV4dCA9PiBuZXdjb21tYW5kKGNvbnRleHQsIHRydWUsIGZhbHNlLCBmYWxzZSkpO1xuZGVmaW5lTWFjcm8oXCJcXFxccHJvdmlkZWNvbW1hbmRcIiwgY29udGV4dCA9PiBuZXdjb21tYW5kKGNvbnRleHQsIHRydWUsIHRydWUsIHRydWUpKTsgLy8gdGVybWluYWwgKGNvbnNvbGUpIHRvb2xzXG5cbmRlZmluZU1hY3JvKFwiXFxcXG1lc3NhZ2VcIiwgY29udGV4dCA9PiB7XG4gIGNvbnN0IGFyZyA9IGNvbnRleHQuY29uc3VtZUFyZ3MoMSlbMF07IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG5cbiAgY29uc29sZS5sb2coYXJnLnJldmVyc2UoKS5tYXAodG9rZW4gPT4gdG9rZW4udGV4dCkuam9pbihcIlwiKSk7XG4gIHJldHVybiAnJztcbn0pO1xuZGVmaW5lTWFjcm8oXCJcXFxcZXJybWVzc2FnZVwiLCBjb250ZXh0ID0+IHtcbiAgY29uc3QgYXJnID0gY29udGV4dC5jb25zdW1lQXJncygxKVswXTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcblxuICBjb25zb2xlLmVycm9yKGFyZy5yZXZlcnNlKCkubWFwKHRva2VuID0+IHRva2VuLnRleHQpLmpvaW4oXCJcIikpO1xuICByZXR1cm4gJyc7XG59KTtcbmRlZmluZU1hY3JvKFwiXFxcXHNob3dcIiwgY29udGV4dCA9PiB7XG4gIGNvbnN0IHRvayA9IGNvbnRleHQucG9wVG9rZW4oKTtcbiAgY29uc3QgbmFtZSA9IHRvay50ZXh0OyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuXG4gIGNvbnNvbGUubG9nKHRvaywgY29udGV4dC5tYWNyb3MuZ2V0KG5hbWUpLCBzcmNfZnVuY3Rpb25zW25hbWVdLCBzcmNfc3ltYm9scy5tYXRoW25hbWVdLCBzcmNfc3ltYm9scy50ZXh0W25hbWVdKTtcbiAgcmV0dXJuICcnO1xufSk7IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIEdyb3VwaW5nXG4vLyBcXGxldFxcYmdyb3VwPXsgXFxsZXRcXGVncm91cD19XG5cbmRlZmluZU1hY3JvKFwiXFxcXGJncm91cFwiLCBcIntcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxlZ3JvdXBcIiwgXCJ9XCIpOyAvLyBTeW1ib2xzIGZyb20gbGF0ZXgubHR4OlxuLy8gXFxkZWZ+e1xcbm9icmVha3NwYWNle319XG4vLyBcXGRlZlxcbHF7YH1cbi8vIFxcZGVmXFxycXsnfVxuLy8gXFxkZWYgXFxhYSB7XFxyIGF9XG4vLyBcXGRlZiBcXEFBIHtcXHIgQX1cblxuZGVmaW5lTWFjcm8oXCJ+XCIsIFwiXFxcXG5vYnJlYWtzcGFjZVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGxxXCIsIFwiYFwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHJxXCIsIFwiJ1wiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGFhXCIsIFwiXFxcXHIgYVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXEFBXCIsIFwiXFxcXHIgQVwiKTsgLy8gQ29weXJpZ2h0IChDKSBhbmQgcmVnaXN0ZXJlZCAoUikgc3ltYm9scy4gVXNlIHJhdyBzeW1ib2wgaW4gTWF0aE1MLlxuLy8gXFxEZWNsYXJlVGV4dENvbW1hbmREZWZhdWx0e1xcdGV4dGNvcHlyaWdodH17XFx0ZXh0Y2lyY2xlZHtjfX1cbi8vIFxcRGVjbGFyZVRleHRDb21tYW5kRGVmYXVsdHtcXHRleHRyZWdpc3RlcmVkfXtcXHRleHRjaXJjbGVkeyVcbi8vICAgICAgXFxjaGVja0BtYXRoZm9udHNcXGZvbnRzaXplXFxzZkBzaXplXFx6QFxcbWF0aEBmb250c2ZhbHNlXFxzZWxlY3Rmb250IFJ9fVxuLy8gXFxEZWNsYXJlUm9idXN0Q29tbWFuZHtcXGNvcHlyaWdodH17JVxuLy8gICAgXFxpZm1tb2Rle1xcbmZzc0B0ZXh0e1xcdGV4dGNvcHlyaWdodH19XFxlbHNlXFx0ZXh0Y29weXJpZ2h0XFxmaX1cblxuZGVmaW5lTWFjcm8oXCJcXFxcdGV4dGNvcHlyaWdodFwiLCBcIlxcXFxodG1sQG1hdGhtbHtcXFxcdGV4dGNpcmNsZWR7Y319e1xcXFxjaGFyYMKpfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGNvcHlyaWdodFwiLCBcIlxcXFxUZXh0T3JNYXRoe1xcXFx0ZXh0Y29weXJpZ2h0fXtcXFxcdGV4dHtcXFxcdGV4dGNvcHlyaWdodH19XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcdGV4dHJlZ2lzdGVyZWRcIiwgXCJcXFxcaHRtbEBtYXRobWx7XFxcXHRleHRjaXJjbGVke1xcXFxzY3JpcHRzaXplIFJ9fXtcXFxcY2hhcmDCrn1cIik7IC8vIENoYXJhY3RlcnMgb21pdHRlZCBmcm9tIFVuaWNvZGUgcmFuZ2UgMUQ0MDDigJMxRDdGRlxuXG5kZWZpbmVNYWNybyhcIlxcdTIxMkNcIiwgXCJcXFxcbWF0aHNjcntCfVwiKTsgLy8gc2NyaXB0XG5cbmRlZmluZU1hY3JvKFwiXFx1MjEzMFwiLCBcIlxcXFxtYXRoc2Nye0V9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXHUyMTMxXCIsIFwiXFxcXG1hdGhzY3J7Rn1cIik7XG5kZWZpbmVNYWNybyhcIlxcdTIxMEJcIiwgXCJcXFxcbWF0aHNjcntIfVwiKTtcbmRlZmluZU1hY3JvKFwiXFx1MjExMFwiLCBcIlxcXFxtYXRoc2Nye0l9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXHUyMTEyXCIsIFwiXFxcXG1hdGhzY3J7TH1cIik7XG5kZWZpbmVNYWNybyhcIlxcdTIxMzNcIiwgXCJcXFxcbWF0aHNjcntNfVwiKTtcbmRlZmluZU1hY3JvKFwiXFx1MjExQlwiLCBcIlxcXFxtYXRoc2Nye1J9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXHUyMTJEXCIsIFwiXFxcXG1hdGhmcmFre0N9XCIpOyAvLyBGcmFrdHVyXG5cbmRlZmluZU1hY3JvKFwiXFx1MjEwQ1wiLCBcIlxcXFxtYXRoZnJha3tIfVwiKTtcbmRlZmluZU1hY3JvKFwiXFx1MjEyOFwiLCBcIlxcXFxtYXRoZnJha3tafVwiKTsgLy8gRGVmaW5lIFxcQmJiayB3aXRoIGEgbWFjcm8gdGhhdCB3b3JrcyBpbiBib3RoIEhUTUwgYW5kIE1hdGhNTC5cblxuZGVmaW5lTWFjcm8oXCJcXFxcQmJia1wiLCBcIlxcXFxCYmJ7a31cIik7IC8vIFVuaWNvZGUgbWlkZGxlIGRvdFxuLy8gVGhlIEthVGVYIGZvbnRzIGRvIG5vdCBjb250YWluIFUrMDBCNy4gSW5zdGVhZCwgXFxjZG90cCBkaXNwbGF5c1xuLy8gdGhlIGRvdCBhdCBVKzIyQzUgYW5kIGdpdmVzIGl0IHB1bmN0IHNwYWNpbmcuXG5cbmRlZmluZU1hY3JvKFwiXFx1MDBiN1wiLCBcIlxcXFxjZG90cFwiKTsgLy8gXFxsbGFwIGFuZCBcXHJsYXAgcmVuZGVyIHRoZWlyIGNvbnRlbnRzIGluIHRleHQgbW9kZVxuXG5kZWZpbmVNYWNybyhcIlxcXFxsbGFwXCIsIFwiXFxcXG1hdGhsbGFwe1xcXFx0ZXh0cm17IzF9fVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHJsYXBcIiwgXCJcXFxcbWF0aHJsYXB7XFxcXHRleHRybXsjMX19XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcY2xhcFwiLCBcIlxcXFxtYXRoY2xhcHtcXFxcdGV4dHJteyMxfX1cIik7IC8vIFxcbWF0aHN0cnV0IGZyb20gdGhlIFRlWGJvb2ssIHAgMzYwXG5cbmRlZmluZU1hY3JvKFwiXFxcXG1hdGhzdHJ1dFwiLCBcIlxcXFx2cGhhbnRvbXsofVwiKTsgLy8gXFx1bmRlcmJhciBmcm9tIFRlWGJvb2sgcCAzNTNcblxuZGVmaW5lTWFjcm8oXCJcXFxcdW5kZXJiYXJcIiwgXCJcXFxcdW5kZXJsaW5le1xcXFx0ZXh0eyMxfX1cIik7IC8vIFxcbm90IGlzIGRlZmluZWQgYnkgYmFzZS9mb250bWF0aC5sdHggdmlhXG4vLyBcXERlY2xhcmVNYXRoU3ltYm9se1xcbm90fXtcXG1hdGhyZWx9e3N5bWJvbHN9e1wiMzZ9XG4vLyBJdCdzIHRodXMgdHJlYXRlZCBsaWtlIGEgXFxtYXRocmVsLCBidXQgZGVmaW5lZCBieSBhIHN5bWJvbCB0aGF0IGhhcyB6ZXJvXG4vLyB3aWR0aCBidXQgZXh0ZW5kcyB0byB0aGUgcmlnaHQuICBXZSB1c2UgXFxybGFwIHRvIGdldCB0aGF0IHNwYWNpbmcuXG4vLyBGb3IgTWF0aE1MIHdlIHdyaXRlIFUrMDMzOCBoZXJlLiBidWlsZE1hdGhNTC5qcyB3aWxsIHRoZW4gZG8gdGhlIG92ZXJsYXkuXG5cbmRlZmluZU1hY3JvKFwiXFxcXG5vdFwiLCAnXFxcXGh0bWxAbWF0aG1se1xcXFxtYXRocmVse1xcXFxtYXRocmxhcFxcXFxAbm90fX17XFxcXGNoYXJcIjMzOH0nKTsgLy8gTmVnYXRlZCBzeW1ib2xzIGZyb20gYmFzZS9mb250bWF0aC5sdHg6XG4vLyBcXGRlZlxcbmVxe1xcbm90PX0gXFxsZXRcXG5lPVxcbmVxXG4vLyBcXERlY2xhcmVSb2J1c3RDb21tYW5kXG4vLyAgIFxcbm90aW57XFxtYXRocmVse1xcbUB0aFxcbWF0aHBhbGV0dGVcXGNAbmNlbFxcaW59fVxuLy8gXFxkZWZcXGNAbmNlbCMxIzJ7XFxtQHRoXFxvb2FsaWdueyRcXGhmaWwjMVxcbWtlcm4xbXUvXFxoZmlsJFxcY3JjciQjMSMyJH19XG5cbmRlZmluZU1hY3JvKFwiXFxcXG5lcVwiLCBcIlxcXFxodG1sQG1hdGhtbHtcXFxcbWF0aHJlbHtcXFxcbm90PX19e1xcXFxtYXRocmVse1xcXFxjaGFyYOKJoH19XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcbmVcIiwgXCJcXFxcbmVxXCIpO1xuZGVmaW5lTWFjcm8oXCJcXHUyMjYwXCIsIFwiXFxcXG5lcVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXG5vdGluXCIsIFwiXFxcXGh0bWxAbWF0aG1se1xcXFxtYXRocmVse3tcXFxcaW59XFxcXG1hdGhsbGFwey9cXFxcbXNraXAxbXV9fX1cIiArIFwie1xcXFxtYXRocmVse1xcXFxjaGFyYOKIiX19XCIpO1xuZGVmaW5lTWFjcm8oXCJcXHUyMjA5XCIsIFwiXFxcXG5vdGluXCIpOyAvLyBVbmljb2RlIHN0YWNrZWQgcmVsYXRpb25zXG5cbmRlZmluZU1hY3JvKFwiXFx1MjI1OFwiLCBcIlxcXFxodG1sQG1hdGhtbHtcIiArIFwiXFxcXG1hdGhyZWx7PVxcXFxrZXJuey0xZW19XFxcXHJhaXNlYm94ezAuNGVtfXskXFxcXHNjcmlwdHNpemVcXFxcZnJvd24kfX1cIiArIFwifXtcXFxcbWF0aHJlbHtcXFxcY2hhcmBcXHUyMjU4fX1cIik7XG5kZWZpbmVNYWNybyhcIlxcdTIyNTlcIiwgXCJcXFxcaHRtbEBtYXRobWx7XFxcXHN0YWNrcmVse1xcXFx0aW55XFxcXHdlZGdlfXs9fX17XFxcXG1hdGhyZWx7XFxcXGNoYXJgXFx1MjI1OH19XCIpO1xuZGVmaW5lTWFjcm8oXCJcXHUyMjVBXCIsIFwiXFxcXGh0bWxAbWF0aG1se1xcXFxzdGFja3JlbHtcXFxcdGlueVxcXFx2ZWV9ez19fXtcXFxcbWF0aHJlbHtcXFxcY2hhcmBcXHUyMjVBfX1cIik7XG5kZWZpbmVNYWNybyhcIlxcdTIyNUJcIiwgXCJcXFxcaHRtbEBtYXRobWx7XFxcXHN0YWNrcmVse1xcXFxzY3JpcHRzaXplXFxcXHN0YXJ9ez19fVwiICsgXCJ7XFxcXG1hdGhyZWx7XFxcXGNoYXJgXFx1MjI1Qn19XCIpO1xuZGVmaW5lTWFjcm8oXCJcXHUyMjVEXCIsIFwiXFxcXGh0bWxAbWF0aG1se1xcXFxzdGFja3JlbHtcXFxcdGlueVxcXFxtYXRocm17ZGVmfX17PX19XCIgKyBcIntcXFxcbWF0aHJlbHtcXFxcY2hhcmBcXHUyMjVEfX1cIik7XG5kZWZpbmVNYWNybyhcIlxcdTIyNUVcIiwgXCJcXFxcaHRtbEBtYXRobWx7XFxcXHN0YWNrcmVse1xcXFx0aW55XFxcXG1hdGhybXttfX17PX19XCIgKyBcIntcXFxcbWF0aHJlbHtcXFxcY2hhcmBcXHUyMjVFfX1cIik7XG5kZWZpbmVNYWNybyhcIlxcdTIyNUZcIiwgXCJcXFxcaHRtbEBtYXRobWx7XFxcXHN0YWNrcmVse1xcXFx0aW55P317PX19e1xcXFxtYXRocmVse1xcXFxjaGFyYFxcdTIyNUZ9fVwiKTsgLy8gTWlzYyBVbmljb2RlXG5cbmRlZmluZU1hY3JvKFwiXFx1MjdDMlwiLCBcIlxcXFxwZXJwXCIpO1xuZGVmaW5lTWFjcm8oXCJcXHUyMDNDXCIsIFwiXFxcXG1hdGhjbG9zZXshXFxcXG1rZXJuLTAuOG11IX1cIik7XG5kZWZpbmVNYWNybyhcIlxcdTIyMENcIiwgXCJcXFxcbm90bmlcIik7XG5kZWZpbmVNYWNybyhcIlxcdTIzMUNcIiwgXCJcXFxcdWxjb3JuZXJcIik7XG5kZWZpbmVNYWNybyhcIlxcdTIzMURcIiwgXCJcXFxcdXJjb3JuZXJcIik7XG5kZWZpbmVNYWNybyhcIlxcdTIzMUVcIiwgXCJcXFxcbGxjb3JuZXJcIik7XG5kZWZpbmVNYWNybyhcIlxcdTIzMUZcIiwgXCJcXFxcbHJjb3JuZXJcIik7XG5kZWZpbmVNYWNybyhcIlxcdTAwQTlcIiwgXCJcXFxcY29weXJpZ2h0XCIpO1xuZGVmaW5lTWFjcm8oXCJcXHUwMEFFXCIsIFwiXFxcXHRleHRyZWdpc3RlcmVkXCIpO1xuZGVmaW5lTWFjcm8oXCJcXHVGRTBGXCIsIFwiXFxcXHRleHRyZWdpc3RlcmVkXCIpOyAvLyBUaGUgS2FUZVggZm9udHMgaGF2ZSBjb3JuZXJzIGF0IGNvZGVwb2ludHMgdGhhdCBkb24ndCBtYXRjaCBVbmljb2RlLlxuLy8gRm9yIE1hdGhNTCBwdXJwb3NlcywgdXNlIHRoZSBVbmljb2RlIGNvZGUgcG9pbnQuXG5cbmRlZmluZU1hY3JvKFwiXFxcXHVsY29ybmVyXCIsIFwiXFxcXGh0bWxAbWF0aG1se1xcXFxAdWxjb3JuZXJ9e1xcXFxtYXRob3B7XFxcXGNoYXJcXFwiMjMxY319XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcdXJjb3JuZXJcIiwgXCJcXFxcaHRtbEBtYXRobWx7XFxcXEB1cmNvcm5lcn17XFxcXG1hdGhvcHtcXFxcY2hhclxcXCIyMzFkfX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxsbGNvcm5lclwiLCBcIlxcXFxodG1sQG1hdGhtbHtcXFxcQGxsY29ybmVyfXtcXFxcbWF0aG9we1xcXFxjaGFyXFxcIjIzMWV9fVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGxyY29ybmVyXCIsIFwiXFxcXGh0bWxAbWF0aG1se1xcXFxAbHJjb3JuZXJ9e1xcXFxtYXRob3B7XFxcXGNoYXJcXFwiMjMxZn19XCIpOyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBMYVRlWF8yzrVcbi8vIFxcdmRvdHN7XFx2Ym94e1xcYmFzZWxpbmVza2lwNFxccEAgIFxcbGluZXNraXBsaW1pdFxcekBcbi8vIFxca2VybjZcXHBAXFxoYm94ey59XFxoYm94ey59XFxoYm94ey59fX1cbi8vIFdlJ2xsIGNhbGwgXFx2YXJ2ZG90cywgd2hpY2ggZ2V0cyBhIGdseXBoIGZyb20gc3ltYm9scy5qcy5cbi8vIFRoZSB6ZXJvLXdpZHRoIHJ1bGUgZ2V0cyB1cyBhbiBlcXVpdmFsZW50IHRvIHRoZSB2ZXJ0aWNhbCA2cHQga2Vybi5cblxuZGVmaW5lTWFjcm8oXCJcXFxcdmRvdHNcIiwgXCJ7XFxcXHZhcnZkb3RzXFxcXHJ1bGV7MHB0fXsxNXB0fX1cIik7XG5kZWZpbmVNYWNybyhcIlxcdTIyZWVcIiwgXCJcXFxcdmRvdHNcIik7IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIGFtc21hdGguc3R5XG4vLyBodHRwOi8vbWlycm9ycy5jb25jZXJ0cGFzcy5jb20vdGV4LWFyY2hpdmUvbWFjcm9zL2xhdGV4L3JlcXVpcmVkL2Ftc21hdGgvYW1zbWF0aC5wZGZcbi8vIEl0YWxpYyBHcmVlayBjYXBpdGFsIGxldHRlcnMuICBBTVMgZGVmaW5lcyB0aGVzZSB3aXRoIFxcRGVjbGFyZU1hdGhTeW1ib2wsXG4vLyBidXQgdGhleSBhcmUgZXF1aXZhbGVudCB0byBcXG1hdGhpdHtcXExldHRlcn0uXG5cbmRlZmluZU1hY3JvKFwiXFxcXHZhckdhbW1hXCIsIFwiXFxcXG1hdGhpdHtcXFxcR2FtbWF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcdmFyRGVsdGFcIiwgXCJcXFxcbWF0aGl0e1xcXFxEZWx0YX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFx2YXJUaGV0YVwiLCBcIlxcXFxtYXRoaXR7XFxcXFRoZXRhfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHZhckxhbWJkYVwiLCBcIlxcXFxtYXRoaXR7XFxcXExhbWJkYX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFx2YXJYaVwiLCBcIlxcXFxtYXRoaXR7XFxcXFhpfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHZhclBpXCIsIFwiXFxcXG1hdGhpdHtcXFxcUGl9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcdmFyU2lnbWFcIiwgXCJcXFxcbWF0aGl0e1xcXFxTaWdtYX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFx2YXJVcHNpbG9uXCIsIFwiXFxcXG1hdGhpdHtcXFxcVXBzaWxvbn1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFx2YXJQaGlcIiwgXCJcXFxcbWF0aGl0e1xcXFxQaGl9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcdmFyUHNpXCIsIFwiXFxcXG1hdGhpdHtcXFxcUHNpfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHZhck9tZWdhXCIsIFwiXFxcXG1hdGhpdHtcXFxcT21lZ2F9XCIpOyAvL1xcbmV3Y29tbWFuZHtcXHN1YnN0YWNrfVsxXXtcXHN1YmFycmF5e2N9IzFcXGVuZHN1YmFycmF5fVxuXG5kZWZpbmVNYWNybyhcIlxcXFxzdWJzdGFja1wiLCBcIlxcXFxiZWdpbntzdWJhcnJheX17Y30jMVxcXFxlbmR7c3ViYXJyYXl9XCIpOyAvLyBcXHJlbmV3Y29tbWFuZHtcXGNvbG9ufXtcXG5vYnJlYWtcXG1za2lwMm11XFxtYXRocHVuY3R7fVxcbm9uc2NyaXB0XG4vLyBcXG1rZXJuLVxcdGhpbm11c2tpcHs6fVxcbXNraXA2bXVwbHVzMW11XFxyZWxheH1cblxuZGVmaW5lTWFjcm8oXCJcXFxcY29sb25cIiwgXCJcXFxcbm9icmVha1xcXFxtc2tpcDJtdVxcXFxtYXRocHVuY3R7fVwiICsgXCJcXFxcbWF0aGNob2ljZXtcXFxcbWtlcm4tM211fXtcXFxcbWtlcm4tM211fXt9e317On1cXFxcbXNraXA2bXVcXFxccmVsYXhcIik7IC8vIFxcbmV3Y29tbWFuZHtcXGJveGVkfVsxXXtcXGZib3h7XFxtQHRoJFxcZGlzcGxheXN0eWxlIzEkfX1cblxuZGVmaW5lTWFjcm8oXCJcXFxcYm94ZWRcIiwgXCJcXFxcZmJveHskXFxcXGRpc3BsYXlzdHlsZXsjMX0kfVwiKTsgLy8gXFxkZWZcXGlmZntcXERPVFNCXFw7XFxMb25nbGVmdHJpZ2h0YXJyb3dcXDt9XG4vLyBcXGRlZlxcaW1wbGllc3tcXERPVFNCXFw7XFxMb25ncmlnaHRhcnJvd1xcO31cbi8vIFxcZGVmXFxpbXBsaWVkYnl7XFxET1RTQlxcO1xcTG9uZ2xlZnRhcnJvd1xcO31cblxuZGVmaW5lTWFjcm8oXCJcXFxcaWZmXCIsIFwiXFxcXERPVFNCXFxcXDtcXFxcTG9uZ2xlZnRyaWdodGFycm93XFxcXDtcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxpbXBsaWVzXCIsIFwiXFxcXERPVFNCXFxcXDtcXFxcTG9uZ3JpZ2h0YXJyb3dcXFxcO1wiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGltcGxpZWRieVwiLCBcIlxcXFxET1RTQlxcXFw7XFxcXExvbmdsZWZ0YXJyb3dcXFxcO1wiKTsgLy8gXFxkZWZcXGRkZG90IzF7e1xcbWF0aG9weyMxfVxcbGltaXRzXntcXHZib3ggdG8tMS40XFxleEB7XFxrZXJuLVxcdHdAXFxleEBcbi8vICBcXGhib3h7XFxub3JtYWxmb250IC4uLn1cXHZzc319fX1cbi8vIFdlIHVzZSBcXG92ZXJzZXQgd2hpY2ggYXZvaWRzIHRoZSB2ZXJ0aWNhbCBzaGlmdCBvZiBcXG1hdGhvcC5cblxuZGVmaW5lTWFjcm8oXCJcXFxcZGRkb3RcIiwgXCJ7XFxcXG92ZXJzZXR7XFxcXHJhaXNlYm94ey0wLjFleH17XFxcXG5vcm1hbHNpemUgLi4ufX17IzF9fVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGRkZGRvdFwiLCBcIntcXFxcb3ZlcnNldHtcXFxccmFpc2Vib3h7LTAuMWV4fXtcXFxcbm9ybWFsc2l6ZSAuLi4ufX17IzF9fVwiKTsgLy8gQU1TTWF0aCdzIGF1dG9tYXRpYyBcXGRvdHMsIGJhc2VkIG9uIFxcbWRvdHNAQCBtYWNyby5cblxuY29uc3QgZG90c0J5VG9rZW4gPSB7XG4gICcsJzogJ1xcXFxkb3RzYycsXG4gICdcXFxcbm90JzogJ1xcXFxkb3RzYicsXG4gIC8vIFxca2V5YmluQCBjaGVja3MgZm9yIHRoZSBmb2xsb3dpbmc6XG4gICcrJzogJ1xcXFxkb3RzYicsXG4gICc9JzogJ1xcXFxkb3RzYicsXG4gICc8JzogJ1xcXFxkb3RzYicsXG4gICc+JzogJ1xcXFxkb3RzYicsXG4gICctJzogJ1xcXFxkb3RzYicsXG4gICcqJzogJ1xcXFxkb3RzYicsXG4gICc6JzogJ1xcXFxkb3RzYicsXG4gIC8vIFN5bWJvbHMgd2hvc2UgZGVmaW5pdGlvbiBzdGFydHMgd2l0aCBcXERPVFNCOlxuICAnXFxcXERPVFNCJzogJ1xcXFxkb3RzYicsXG4gICdcXFxcY29wcm9kJzogJ1xcXFxkb3RzYicsXG4gICdcXFxcYmlndmVlJzogJ1xcXFxkb3RzYicsXG4gICdcXFxcYmlnd2VkZ2UnOiAnXFxcXGRvdHNiJyxcbiAgJ1xcXFxiaWd1cGx1cyc6ICdcXFxcZG90c2InLFxuICAnXFxcXGJpZ2NhcCc6ICdcXFxcZG90c2InLFxuICAnXFxcXGJpZ2N1cCc6ICdcXFxcZG90c2InLFxuICAnXFxcXHByb2QnOiAnXFxcXGRvdHNiJyxcbiAgJ1xcXFxzdW0nOiAnXFxcXGRvdHNiJyxcbiAgJ1xcXFxiaWdvdGltZXMnOiAnXFxcXGRvdHNiJyxcbiAgJ1xcXFxiaWdvcGx1cyc6ICdcXFxcZG90c2InLFxuICAnXFxcXGJpZ29kb3QnOiAnXFxcXGRvdHNiJyxcbiAgJ1xcXFxiaWdzcWN1cCc6ICdcXFxcZG90c2InLFxuICAnXFxcXEFuZCc6ICdcXFxcZG90c2InLFxuICAnXFxcXGxvbmdyaWdodGFycm93JzogJ1xcXFxkb3RzYicsXG4gICdcXFxcTG9uZ3JpZ2h0YXJyb3cnOiAnXFxcXGRvdHNiJyxcbiAgJ1xcXFxsb25nbGVmdGFycm93JzogJ1xcXFxkb3RzYicsXG4gICdcXFxcTG9uZ2xlZnRhcnJvdyc6ICdcXFxcZG90c2InLFxuICAnXFxcXGxvbmdsZWZ0cmlnaHRhcnJvdyc6ICdcXFxcZG90c2InLFxuICAnXFxcXExvbmdsZWZ0cmlnaHRhcnJvdyc6ICdcXFxcZG90c2InLFxuICAnXFxcXG1hcHN0byc6ICdcXFxcZG90c2InLFxuICAnXFxcXGxvbmdtYXBzdG8nOiAnXFxcXGRvdHNiJyxcbiAgJ1xcXFxob29rcmlnaHRhcnJvdyc6ICdcXFxcZG90c2InLFxuICAnXFxcXGRvdGVxJzogJ1xcXFxkb3RzYicsXG4gIC8vIFN5bWJvbHMgd2hvc2UgZGVmaW5pdGlvbiBzdGFydHMgd2l0aCBcXG1hdGhiaW46XG4gICdcXFxcbWF0aGJpbic6ICdcXFxcZG90c2InLFxuICAvLyBTeW1ib2xzIHdob3NlIGRlZmluaXRpb24gc3RhcnRzIHdpdGggXFxtYXRocmVsOlxuICAnXFxcXG1hdGhyZWwnOiAnXFxcXGRvdHNiJyxcbiAgJ1xcXFxyZWxiYXInOiAnXFxcXGRvdHNiJyxcbiAgJ1xcXFxSZWxiYXInOiAnXFxcXGRvdHNiJyxcbiAgJ1xcXFx4cmlnaHRhcnJvdyc6ICdcXFxcZG90c2InLFxuICAnXFxcXHhsZWZ0YXJyb3cnOiAnXFxcXGRvdHNiJyxcbiAgLy8gU3ltYm9scyB3aG9zZSBkZWZpbml0aW9uIHN0YXJ0cyB3aXRoIFxcRE9UU0k6XG4gICdcXFxcRE9UU0knOiAnXFxcXGRvdHNpJyxcbiAgJ1xcXFxpbnQnOiAnXFxcXGRvdHNpJyxcbiAgJ1xcXFxvaW50JzogJ1xcXFxkb3RzaScsXG4gICdcXFxcaWludCc6ICdcXFxcZG90c2knLFxuICAnXFxcXGlpaW50JzogJ1xcXFxkb3RzaScsXG4gICdcXFxcaWlpaW50JzogJ1xcXFxkb3RzaScsXG4gICdcXFxcaWRvdHNpbnQnOiAnXFxcXGRvdHNpJyxcbiAgLy8gU3ltYm9scyB3aG9zZSBkZWZpbml0aW9uIHN0YXJ0cyB3aXRoIFxcRE9UU1g6XG4gICdcXFxcRE9UU1gnOiAnXFxcXGRvdHN4J1xufTtcbmRlZmluZU1hY3JvKFwiXFxcXGRvdHNcIiwgZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgLy8gVE9ETzogSWYgdXNlZCBpbiB0ZXh0IG1vZGUsIHNob3VsZCBleHBhbmQgdG8gXFx0ZXh0ZWxsaXBzaXMuXG4gIC8vIEhvd2V2ZXIsIGluIEthVGVYLCBcXHRleHRlbGxpcHNpcyBhbmQgXFxsZG90cyBiZWhhdmUgdGhlIHNhbWVcbiAgLy8gKGluIHRleHQgbW9kZSksIGFuZCBpdCdzIHVubGlrZWx5IHdlJ2Qgc2VlIGFueSBvZiB0aGUgbWF0aCBjb21tYW5kc1xuICAvLyB0aGF0IGFmZmVjdCB0aGUgYmVoYXZpb3Igb2YgXFxkb3RzIHdoZW4gaW4gdGV4dCBtb2RlLiAgU28gZmluZSBmb3Igbm93XG4gIC8vICh1bnRpbCB3ZSBzdXBwb3J0IFxcaWZtbW9kZSAuLi4gXFxlbHNlIC4uLiBcXGZpKS5cbiAgbGV0IHRoZWRvdHMgPSAnXFxcXGRvdHNvJztcbiAgY29uc3QgbmV4dCA9IGNvbnRleHQuZXhwYW5kQWZ0ZXJGdXR1cmUoKS50ZXh0O1xuXG4gIGlmIChuZXh0IGluIGRvdHNCeVRva2VuKSB7XG4gICAgdGhlZG90cyA9IGRvdHNCeVRva2VuW25leHRdO1xuICB9IGVsc2UgaWYgKG5leHQuc2xpY2UoMCwgNCkgPT09ICdcXFxcbm90Jykge1xuICAgIHRoZWRvdHMgPSAnXFxcXGRvdHNiJztcbiAgfSBlbHNlIGlmIChuZXh0IGluIHNyY19zeW1ib2xzLm1hdGgpIHtcbiAgICBpZiAodXRpbHMuY29udGFpbnMoWydiaW4nLCAncmVsJ10sIHNyY19zeW1ib2xzLm1hdGhbbmV4dF0uZ3JvdXApKSB7XG4gICAgICB0aGVkb3RzID0gJ1xcXFxkb3RzYic7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRoZWRvdHM7XG59KTtcbmNvbnN0IHNwYWNlQWZ0ZXJEb3RzID0ge1xuICAvLyBcXHJpZ2h0ZGVsaW1AIGNoZWNrcyBmb3IgdGhlIGZvbGxvd2luZzpcbiAgJyknOiB0cnVlLFxuICAnXSc6IHRydWUsXG4gICdcXFxccmJyYWNrJzogdHJ1ZSxcbiAgJ1xcXFx9JzogdHJ1ZSxcbiAgJ1xcXFxyYnJhY2UnOiB0cnVlLFxuICAnXFxcXHJhbmdsZSc6IHRydWUsXG4gICdcXFxccmNlaWwnOiB0cnVlLFxuICAnXFxcXHJmbG9vcic6IHRydWUsXG4gICdcXFxccmdyb3VwJzogdHJ1ZSxcbiAgJ1xcXFxybW91c3RhY2hlJzogdHJ1ZSxcbiAgJ1xcXFxyaWdodCc6IHRydWUsXG4gICdcXFxcYmlncic6IHRydWUsXG4gICdcXFxcYmlnZ3InOiB0cnVlLFxuICAnXFxcXEJpZ3InOiB0cnVlLFxuICAnXFxcXEJpZ2dyJzogdHJ1ZSxcbiAgLy8gXFxleHRyYUAgYWxzbyB0ZXN0cyBmb3IgdGhlIGZvbGxvd2luZzpcbiAgJyQnOiB0cnVlLFxuICAvLyBcXGV4dHJhcEAgY2hlY2tzIGZvciB0aGUgZm9sbG93aW5nOlxuICAnOyc6IHRydWUsXG4gICcuJzogdHJ1ZSxcbiAgJywnOiB0cnVlXG59O1xuZGVmaW5lTWFjcm8oXCJcXFxcZG90c29cIiwgZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgY29uc3QgbmV4dCA9IGNvbnRleHQuZnV0dXJlKCkudGV4dDtcblxuICBpZiAobmV4dCBpbiBzcGFjZUFmdGVyRG90cykge1xuICAgIHJldHVybiBcIlxcXFxsZG90c1xcXFwsXCI7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIFwiXFxcXGxkb3RzXCI7XG4gIH1cbn0pO1xuZGVmaW5lTWFjcm8oXCJcXFxcZG90c2NcIiwgZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgY29uc3QgbmV4dCA9IGNvbnRleHQuZnV0dXJlKCkudGV4dDsgLy8gXFxkb3RzYyB1c2VzIFxcZXh0cmFAIGJ1dCBub3QgXFxleHRyYXBALCBpbnN0ZWFkIHNwZWNpYWxseSBjaGVja2luZyBmb3JcbiAgLy8gJzsnIGFuZCAnLicsIGJ1dCBkb2Vzbid0IGNoZWNrIGZvciAnLCcuXG5cbiAgaWYgKG5leHQgaW4gc3BhY2VBZnRlckRvdHMgJiYgbmV4dCAhPT0gJywnKSB7XG4gICAgcmV0dXJuIFwiXFxcXGxkb3RzXFxcXCxcIjtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gXCJcXFxcbGRvdHNcIjtcbiAgfVxufSk7XG5kZWZpbmVNYWNybyhcIlxcXFxjZG90c1wiLCBmdW5jdGlvbiAoY29udGV4dCkge1xuICBjb25zdCBuZXh0ID0gY29udGV4dC5mdXR1cmUoKS50ZXh0O1xuXG4gIGlmIChuZXh0IGluIHNwYWNlQWZ0ZXJEb3RzKSB7XG4gICAgcmV0dXJuIFwiXFxcXEBjZG90c1xcXFwsXCI7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIFwiXFxcXEBjZG90c1wiO1xuICB9XG59KTtcbmRlZmluZU1hY3JvKFwiXFxcXGRvdHNiXCIsIFwiXFxcXGNkb3RzXCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcZG90c21cIiwgXCJcXFxcY2RvdHNcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxkb3RzaVwiLCBcIlxcXFwhXFxcXGNkb3RzXCIpOyAvLyBhbXNtYXRoIGRvZXNuJ3QgYWN0dWFsbHkgZGVmaW5lIFxcZG90c3gsIGJ1dCBcXGRvdHMgZm9sbG93ZWQgYnkgYSBtYWNyb1xuLy8gc3RhcnRpbmcgd2l0aCBcXERPVFNYIGltcGxpZXMgXFxkb3RzbywgYW5kIHRoZW4gXFxleHRyYUAgZGV0ZWN0cyB0aGlzIGNhc2Vcbi8vIGFuZCBmb3JjZXMgdGhlIGFkZGVkIGBcXCxgLlxuXG5kZWZpbmVNYWNybyhcIlxcXFxkb3RzeFwiLCBcIlxcXFxsZG90c1xcXFwsXCIpOyAvLyBcXGxldFxcRE9UU0lcXHJlbGF4XG4vLyBcXGxldFxcRE9UU0JcXHJlbGF4XG4vLyBcXGxldFxcRE9UU1hcXHJlbGF4XG5cbmRlZmluZU1hY3JvKFwiXFxcXERPVFNJXCIsIFwiXFxcXHJlbGF4XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcRE9UU0JcIiwgXCJcXFxccmVsYXhcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxET1RTWFwiLCBcIlxcXFxyZWxheFwiKTsgLy8gU3BhY2luZywgYmFzZWQgb24gYW1zbWF0aC5zdHkncyBvdmVycmlkZSBvZiBMYVRlWCBkZWZhdWx0c1xuLy8gXFxEZWNsYXJlUm9idXN0Q29tbWFuZHtcXHRtc3BhY2V9WzNdeyVcbi8vICAgXFxpZm1tb2RlXFxtc2tpcCMxIzJcXGVsc2VcXGtlcm4jMSMzXFxmaVxccmVsYXh9XG5cbmRlZmluZU1hY3JvKFwiXFxcXHRtc3BhY2VcIiwgXCJcXFxcVGV4dE9yTWF0aHtcXFxca2VybiMxIzN9e1xcXFxtc2tpcCMxIzJ9XFxcXHJlbGF4XCIpOyAvLyBcXHJlbmV3Y29tbWFuZHtcXCx9e1xcdG1zcGFjZStcXHRoaW5tdXNraXB7LjE2NjdlbX19XG4vLyBUT0RPOiBtYXRoIG1vZGUgc2hvdWxkIHVzZSBcXHRoaW5tdXNraXBcblxuZGVmaW5lTWFjcm8oXCJcXFxcLFwiLCBcIlxcXFx0bXNwYWNlK3szbXV9ey4xNjY3ZW19XCIpOyAvLyBcXGxldFxcdGhpbnNwYWNlXFwsXG5cbmRlZmluZU1hY3JvKFwiXFxcXHRoaW5zcGFjZVwiLCBcIlxcXFwsXCIpOyAvLyBcXGRlZlxcPntcXG1za2lwXFxtZWRtdXNraXB9XG4vLyBcXHJlbmV3Y29tbWFuZHtcXDp9e1xcdG1zcGFjZStcXG1lZG11c2tpcHsuMjIyMmVtfX1cbi8vIFRPRE86IFxcPiBhbmQgbWF0aCBtb2RlIG9mIFxcOiBzaG91bGQgdXNlIFxcbWVkbXVza2lwID0gNG11IHBsdXMgMm11IG1pbnVzIDRtdVxuXG5kZWZpbmVNYWNybyhcIlxcXFw+XCIsIFwiXFxcXG1za2lwezRtdX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFw6XCIsIFwiXFxcXHRtc3BhY2UrezRtdX17LjIyMjJlbX1cIik7IC8vIFxcbGV0XFxtZWRzcGFjZVxcOlxuXG5kZWZpbmVNYWNybyhcIlxcXFxtZWRzcGFjZVwiLCBcIlxcXFw6XCIpOyAvLyBcXHJlbmV3Y29tbWFuZHtcXDt9e1xcdG1zcGFjZStcXHRoaWNrbXVza2lwey4yNzc3ZW19fVxuLy8gVE9ETzogbWF0aCBtb2RlIHNob3VsZCB1c2UgXFx0aGlja211c2tpcCA9IDVtdSBwbHVzIDVtdVxuXG5kZWZpbmVNYWNybyhcIlxcXFw7XCIsIFwiXFxcXHRtc3BhY2UrezVtdX17LjI3NzdlbX1cIik7IC8vIFxcbGV0XFx0aGlja3NwYWNlXFw7XG5cbmRlZmluZU1hY3JvKFwiXFxcXHRoaWNrc3BhY2VcIiwgXCJcXFxcO1wiKTsgLy8gXFxyZW5ld2NvbW1hbmR7XFwhfXtcXHRtc3BhY2UtXFx0aGlubXVza2lwey4xNjY3ZW19fVxuLy8gVE9ETzogbWF0aCBtb2RlIHNob3VsZCB1c2UgXFx0aGlubXVza2lwXG5cbmRlZmluZU1hY3JvKFwiXFxcXCFcIiwgXCJcXFxcdG1zcGFjZS17M211fXsuMTY2N2VtfVwiKTsgLy8gXFxsZXRcXG5lZ3RoaW5zcGFjZVxcIVxuXG5kZWZpbmVNYWNybyhcIlxcXFxuZWd0aGluc3BhY2VcIiwgXCJcXFxcIVwiKTsgLy8gXFxuZXdjb21tYW5ke1xcbmVnbWVkc3BhY2V9e1xcdG1zcGFjZS1cXG1lZG11c2tpcHsuMjIyMmVtfX1cbi8vIFRPRE86IG1hdGggbW9kZSBzaG91bGQgdXNlIFxcbWVkbXVza2lwXG5cbmRlZmluZU1hY3JvKFwiXFxcXG5lZ21lZHNwYWNlXCIsIFwiXFxcXHRtc3BhY2UtezRtdX17LjIyMjJlbX1cIik7IC8vIFxcbmV3Y29tbWFuZHtcXG5lZ3RoaWNrc3BhY2V9e1xcdG1zcGFjZS1cXHRoaWNrbXVza2lwey4yNzc3ZW19fVxuLy8gVE9ETzogbWF0aCBtb2RlIHNob3VsZCB1c2UgXFx0aGlja211c2tpcFxuXG5kZWZpbmVNYWNybyhcIlxcXFxuZWd0aGlja3NwYWNlXCIsIFwiXFxcXHRtc3BhY2UtezVtdX17LjI3N2VtfVwiKTsgLy8gXFxkZWZcXGVuc3BhY2V7XFxrZXJuLjVlbSB9XG5cbmRlZmluZU1hY3JvKFwiXFxcXGVuc3BhY2VcIiwgXCJcXFxca2Vybi41ZW0gXCIpOyAvLyBcXGRlZlxcZW5za2lwe1xcaHNraXAuNWVtXFxyZWxheH1cblxuZGVmaW5lTWFjcm8oXCJcXFxcZW5za2lwXCIsIFwiXFxcXGhza2lwLjVlbVxcXFxyZWxheFwiKTsgLy8gXFxkZWZcXHF1YWR7XFxoc2tpcDFlbVxccmVsYXh9XG5cbmRlZmluZU1hY3JvKFwiXFxcXHF1YWRcIiwgXCJcXFxcaHNraXAxZW1cXFxccmVsYXhcIik7IC8vIFxcZGVmXFxxcXVhZHtcXGhza2lwMmVtXFxyZWxheH1cblxuZGVmaW5lTWFjcm8oXCJcXFxccXF1YWRcIiwgXCJcXFxcaHNraXAyZW1cXFxccmVsYXhcIik7IC8vIFxcdGFnQGluQGRpc3BsYXkgZm9ybSBvZiBcXHRhZ1xuXG5kZWZpbmVNYWNybyhcIlxcXFx0YWdcIiwgXCJcXFxcQGlmc3RhclxcXFx0YWdAbGl0ZXJhbFxcXFx0YWdAcGFyZW5cIik7XG5kZWZpbmVNYWNybyhcIlxcXFx0YWdAcGFyZW5cIiwgXCJcXFxcdGFnQGxpdGVyYWx7KHsjMX0pfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHRhZ0BsaXRlcmFsXCIsIGNvbnRleHQgPT4ge1xuICBpZiAoY29udGV4dC5tYWNyb3MuZ2V0KFwiXFxcXGRmQHRhZ1wiKSkge1xuICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIk11bHRpcGxlIFxcXFx0YWdcIik7XG4gIH1cblxuICByZXR1cm4gXCJcXFxcZ2RlZlxcXFxkZkB0YWd7XFxcXHRleHR7IzF9fVwiO1xufSk7IC8vIFxccmVuZXdjb21tYW5ke1xcYm1vZH17XFxub25zY3JpcHRcXG1za2lwLVxcbWVkbXVza2lwXFxta2VybjVtdVxcbWF0aGJpblxuLy8gICB7XFxvcGVyYXRvckBmb250IG1vZH1cXHBlbmFsdHk5MDBcbi8vICAgXFxta2VybjVtdVxcbm9uc2NyaXB0XFxtc2tpcC1cXG1lZG11c2tpcH1cbi8vIFxcbmV3Y29tbWFuZHtcXHBvZH1bMV17XFxhbGxvd2JyZWFrXG4vLyAgIFxcaWZAZGlzcGxheVxcbWtlcm4xOG11XFxlbHNlXFxta2VybjhtdVxcZmkoIzEpfVxuLy8gXFxyZW5ld2NvbW1hbmR7XFxwbW9kfVsxXXtcXHBvZHt7XFxvcGVyYXRvckBmb250IG1vZH1cXG1rZXJuNm11IzF9fVxuLy8gXFxuZXdjb21tYW5ke1xcbW9kfVsxXXtcXGFsbG93YnJlYWtcXGlmQGRpc3BsYXlcXG1rZXJuMThtdVxuLy8gICBcXGVsc2VcXG1rZXJuMTJtdVxcZml7XFxvcGVyYXRvckBmb250IG1vZH1cXCxcXCwjMX1cbi8vIFRPRE86IG1hdGggbW9kZSBzaG91bGQgdXNlIFxcbWVkbXVza2lwID0gNG11IHBsdXMgMm11IG1pbnVzIDRtdVxuXG5kZWZpbmVNYWNybyhcIlxcXFxibW9kXCIsIFwiXFxcXG1hdGhjaG9pY2V7XFxcXG1za2lwMW11fXtcXFxcbXNraXAxbXV9e1xcXFxtc2tpcDVtdX17XFxcXG1za2lwNW11fVwiICsgXCJcXFxcbWF0aGJpbntcXFxccm0gbW9kfVwiICsgXCJcXFxcbWF0aGNob2ljZXtcXFxcbXNraXAxbXV9e1xcXFxtc2tpcDFtdX17XFxcXG1za2lwNW11fXtcXFxcbXNraXA1bXV9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxccG9kXCIsIFwiXFxcXGFsbG93YnJlYWtcIiArIFwiXFxcXG1hdGhjaG9pY2V7XFxcXG1rZXJuMThtdX17XFxcXG1rZXJuOG11fXtcXFxcbWtlcm44bXV9e1xcXFxta2VybjhtdX0oIzEpXCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxccG1vZFwiLCBcIlxcXFxwb2R7e1xcXFxybSBtb2R9XFxcXG1rZXJuNm11IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcbW9kXCIsIFwiXFxcXGFsbG93YnJlYWtcIiArIFwiXFxcXG1hdGhjaG9pY2V7XFxcXG1rZXJuMThtdX17XFxcXG1rZXJuMTJtdX17XFxcXG1rZXJuMTJtdX17XFxcXG1rZXJuMTJtdX1cIiArIFwie1xcXFxybSBtb2R9XFxcXCxcXFxcLCMxXCIpOyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBMYVRlWCBzb3VyY2UyZVxuLy8gXFxleHBhbmRhZnRlclxcbGV0XFxleHBhbmRhZnRlclxcQG5vcm1hbGNyXG4vLyAgICAgXFxjc25hbWVcXGV4cGFuZGFmdGVyXFxAZ29iYmxlXFxzdHJpbmdcXFxcIFxcZW5kY3NuYW1lXG4vLyBcXERlY2xhcmVSb2J1c3RDb21tYW5kXFxuZXdsaW5le1xcQG5vcm1hbGNyXFxyZWxheH1cblxuZGVmaW5lTWFjcm8oXCJcXFxcbmV3bGluZVwiLCBcIlxcXFxcXFxcXFxcXHJlbGF4XCIpOyAvLyBcXGRlZlxcVGVYe1RcXGtlcm4tLjE2NjdlbVxcbG93ZXIuNWV4XFxoYm94e0V9XFxrZXJuLS4xMjVlbVhcXEB9XG4vLyBUT0RPOiBEb2Vzbid0IG5vcm1hbGx5IHdvcmsgaW4gbWF0aCBtb2RlIGJlY2F1c2UgXFxAIGZhaWxzLiAgS2FUZVggZG9lc24ndFxuLy8gc3VwcG9ydCBcXEAgeWV0LCBzbyB0aGF0J3Mgb21pdHRlZCwgYW5kIHdlIGFkZCBcXHRleHQgc28gdGhhdCB0aGUgcmVzdWx0XG4vLyBkb2Vzbid0IGxvb2sgZnVubnkgaW4gbWF0aCBtb2RlLlxuXG5kZWZpbmVNYWNybyhcIlxcXFxUZVhcIiwgXCJcXFxcdGV4dHJte1xcXFxodG1sQG1hdGhtbHtcIiArIFwiVFxcXFxrZXJuLS4xNjY3ZW1cXFxccmFpc2Vib3h7LS41ZXh9e0V9XFxcXGtlcm4tLjEyNWVtWFwiICsgXCJ9e1RlWH19XCIpOyAvLyBcXERlY2xhcmVSb2J1c3RDb21tYW5ke1xcTGFUZVh9e0xcXGtlcm4tLjM2ZW0lXG4vLyAgICAgICAgIHtcXHNib3hcXHpAIFQlXG4vLyAgICAgICAgICBcXHZib3ggdG9cXGh0XFx6QHtcXGhib3h7XFxjaGVja0BtYXRoZm9udHNcbi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcZm9udHNpemVcXHNmQHNpemVcXHpAXG4vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXG1hdGhAZm9udHNmYWxzZVxcc2VsZWN0Zm9udFxuLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQX0lXG4vLyAgICAgICAgICAgICAgICAgICAgICAgICBcXHZzc30lXG4vLyAgICAgICAgIH0lXG4vLyAgICAgICAgIFxca2Vybi0uMTVlbSVcbi8vICAgICAgICAgXFxUZVh9XG4vLyBUaGlzIGNvZGUgYWxpZ25zIHRoZSB0b3Agb2YgdGhlIEEgd2l0aCB0aGUgVCAoZnJvbSB0aGUgcGVyc3BlY3RpdmUgb2YgVGVYJ3Ncbi8vIGJveGVzLCB0aG91Z2ggdmlzdWFsbHkgdGhlIEEgYXBwZWFycyB0byBleHRlbmQgYWJvdmUgc2xpZ2h0bHkpLlxuLy8gV2UgY29tcHV0ZSB0aGUgY29ycmVzcG9uZGluZyBcXHJhaXNlYm94IHdoZW4gQSBpcyByZW5kZXJlZCBpbiBcXG5vcm1hbHNpemVcbi8vIFxcc2NyaXB0c3R5bGUsIHdoaWNoIGhhcyBhIHNjYWxlIGZhY3RvciBvZiAwLjcgKHNlZSBPcHRpb25zLmpzKS5cblxuY29uc3QgbGF0ZXhSYWlzZUEgPSBtYWtlRW0oZm9udE1ldHJpY3NEYXRhWydNYWluLVJlZ3VsYXInXVtcIlRcIi5jaGFyQ29kZUF0KDApXVsxXSAtIDAuNyAqIGZvbnRNZXRyaWNzRGF0YVsnTWFpbi1SZWd1bGFyJ11bXCJBXCIuY2hhckNvZGVBdCgwKV1bMV0pO1xuZGVmaW5lTWFjcm8oXCJcXFxcTGFUZVhcIiwgXCJcXFxcdGV4dHJte1xcXFxodG1sQG1hdGhtbHtcIiArIChcIkxcXFxca2Vybi0uMzZlbVxcXFxyYWlzZWJveHtcIiArIGxhdGV4UmFpc2VBICsgXCJ9e1xcXFxzY3JpcHRzdHlsZSBBfVwiKSArIFwiXFxcXGtlcm4tLjE1ZW1cXFxcVGVYfXtMYVRlWH19XCIpOyAvLyBOZXcgS2FUZVggbG9nbyBiYXNlZCBvbiB0d2Vha2luZyBMYVRlWCBsb2dvXG5cbmRlZmluZU1hY3JvKFwiXFxcXEthVGVYXCIsIFwiXFxcXHRleHRybXtcXFxcaHRtbEBtYXRobWx7XCIgKyAoXCJLXFxcXGtlcm4tLjE3ZW1cXFxccmFpc2Vib3h7XCIgKyBsYXRleFJhaXNlQSArIFwifXtcXFxcc2NyaXB0c3R5bGUgQX1cIikgKyBcIlxcXFxrZXJuLS4xNWVtXFxcXFRlWH17S2FUZVh9fVwiKTsgLy8gXFxEZWNsYXJlUm9idXN0Q29tbWFuZFxcaHNwYWNle1xcQGlmc3RhclxcQGhzcGFjZXJcXEBoc3BhY2V9XG4vLyBcXGRlZlxcQGhzcGFjZSMxe1xcaHNraXAgICMxXFxyZWxheH1cbi8vIFxcZGVmXFxAaHNwYWNlciMxe1xcdnJ1bGUgXFxAd2lkdGhcXHpAXFxub2JyZWFrXG4vLyAgICAgICAgICAgICAgICAgXFxoc2tpcCAjMVxcaHNraXAgXFx6QHNraXB9XG5cbmRlZmluZU1hY3JvKFwiXFxcXGhzcGFjZVwiLCBcIlxcXFxAaWZzdGFyXFxcXEBoc3BhY2VyXFxcXEBoc3BhY2VcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxAaHNwYWNlXCIsIFwiXFxcXGhza2lwICMxXFxcXHJlbGF4XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcQGhzcGFjZXJcIiwgXCJcXFxccnVsZXswcHR9ezBwdH1cXFxcaHNraXAgIzFcXFxccmVsYXhcIik7IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIG1hdGh0b29scy5zdHlcbi8vXFxwcm92aWRlY29tbWFuZFxcb3JkaW5hcnljb2xvbns6fVxuXG5kZWZpbmVNYWNybyhcIlxcXFxvcmRpbmFyeWNvbG9uXCIsIFwiOlwiKTsgLy9cXGRlZlxcdmNlbnRjb2xvbntcXG1hdGhyZWx7XFxtYXRob3BcXG9yZGluYXJ5Y29sb259fVxuLy9UT0RPKGVkZW1haW5lKTogTm90IHlldCBjZW50ZXJlZC4gRml4IHZpYSBcXHJhaXNlYm94IG9yICM3MjZcblxuZGVmaW5lTWFjcm8oXCJcXFxcdmNlbnRjb2xvblwiLCBcIlxcXFxtYXRocmVse1xcXFxtYXRob3BcXFxcb3JkaW5hcnljb2xvbn1cIik7IC8vIFxccHJvdmlkZWNvbW1hbmQqXFxkYmxjb2xvbntcXHZjZW50Y29sb25cXG1hdGhyZWx7XFxta2Vybi0uOW11fVxcdmNlbnRjb2xvbn1cblxuZGVmaW5lTWFjcm8oXCJcXFxcZGJsY29sb25cIiwgXCJcXFxcaHRtbEBtYXRobWx7XCIgKyBcIlxcXFxtYXRocmVse1xcXFx2Y2VudGNvbG9uXFxcXG1hdGhyZWx7XFxcXG1rZXJuLS45bXV9XFxcXHZjZW50Y29sb259fVwiICsgXCJ7XFxcXG1hdGhvcHtcXFxcY2hhclxcXCIyMjM3fX1cIik7IC8vIFxccHJvdmlkZWNvbW1hbmQqXFxjb2xvbmVxcXtcXHZjZW50Y29sb25cXG1hdGhyZWx7XFxta2Vybi0xLjJtdX09fVxuXG5kZWZpbmVNYWNybyhcIlxcXFxjb2xvbmVxcVwiLCBcIlxcXFxodG1sQG1hdGhtbHtcIiArIFwiXFxcXG1hdGhyZWx7XFxcXHZjZW50Y29sb25cXFxcbWF0aHJlbHtcXFxcbWtlcm4tMS4ybXV9PX19XCIgKyBcIntcXFxcbWF0aG9we1xcXFxjaGFyXFxcIjIyNTR9fVwiKTsgLy8g4omUXG4vLyBcXHByb3ZpZGVjb21tYW5kKlxcQ29sb25lcXF7XFxkYmxjb2xvblxcbWF0aHJlbHtcXG1rZXJuLTEuMm11fT19XG5cbmRlZmluZU1hY3JvKFwiXFxcXENvbG9uZXFxXCIsIFwiXFxcXGh0bWxAbWF0aG1se1wiICsgXCJcXFxcbWF0aHJlbHtcXFxcZGJsY29sb25cXFxcbWF0aHJlbHtcXFxcbWtlcm4tMS4ybXV9PX19XCIgKyBcIntcXFxcbWF0aG9we1xcXFxjaGFyXFxcIjIyMzdcXFxcY2hhclxcXCIzZH19XCIpOyAvLyBcXHByb3ZpZGVjb21tYW5kKlxcY29sb25lcXtcXHZjZW50Y29sb25cXG1hdGhyZWx7XFxta2Vybi0xLjJtdX1cXG1hdGhyZWx7LX19XG5cbmRlZmluZU1hY3JvKFwiXFxcXGNvbG9uZXFcIiwgXCJcXFxcaHRtbEBtYXRobWx7XCIgKyBcIlxcXFxtYXRocmVse1xcXFx2Y2VudGNvbG9uXFxcXG1hdGhyZWx7XFxcXG1rZXJuLTEuMm11fVxcXFxtYXRocmVsey19fX1cIiArIFwie1xcXFxtYXRob3B7XFxcXGNoYXJcXFwiM2FcXFxcY2hhclxcXCIyMjEyfX1cIik7IC8vIFxccHJvdmlkZWNvbW1hbmQqXFxDb2xvbmVxe1xcZGJsY29sb25cXG1hdGhyZWx7XFxta2Vybi0xLjJtdX1cXG1hdGhyZWx7LX19XG5cbmRlZmluZU1hY3JvKFwiXFxcXENvbG9uZXFcIiwgXCJcXFxcaHRtbEBtYXRobWx7XCIgKyBcIlxcXFxtYXRocmVse1xcXFxkYmxjb2xvblxcXFxtYXRocmVse1xcXFxta2Vybi0xLjJtdX1cXFxcbWF0aHJlbHstfX19XCIgKyBcIntcXFxcbWF0aG9we1xcXFxjaGFyXFxcIjIyMzdcXFxcY2hhclxcXCIyMjEyfX1cIik7IC8vIFxccHJvdmlkZWNvbW1hbmQqXFxlcXFjb2xvbns9XFxtYXRocmVse1xcbWtlcm4tMS4ybXV9XFx2Y2VudGNvbG9ufVxuXG5kZWZpbmVNYWNybyhcIlxcXFxlcXFjb2xvblwiLCBcIlxcXFxodG1sQG1hdGhtbHtcIiArIFwiXFxcXG1hdGhyZWx7PVxcXFxtYXRocmVse1xcXFxta2Vybi0xLjJtdX1cXFxcdmNlbnRjb2xvbn19XCIgKyBcIntcXFxcbWF0aG9we1xcXFxjaGFyXFxcIjIyNTV9fVwiKTsgLy8g4omVXG4vLyBcXHByb3ZpZGVjb21tYW5kKlxcRXFxY29sb257PVxcbWF0aHJlbHtcXG1rZXJuLTEuMm11fVxcZGJsY29sb259XG5cbmRlZmluZU1hY3JvKFwiXFxcXEVxcWNvbG9uXCIsIFwiXFxcXGh0bWxAbWF0aG1se1wiICsgXCJcXFxcbWF0aHJlbHs9XFxcXG1hdGhyZWx7XFxcXG1rZXJuLTEuMm11fVxcXFxkYmxjb2xvbn19XCIgKyBcIntcXFxcbWF0aG9we1xcXFxjaGFyXFxcIjNkXFxcXGNoYXJcXFwiMjIzN319XCIpOyAvLyBcXHByb3ZpZGVjb21tYW5kKlxcZXFjb2xvbntcXG1hdGhyZWx7LX1cXG1hdGhyZWx7XFxta2Vybi0xLjJtdX1cXHZjZW50Y29sb259XG5cbmRlZmluZU1hY3JvKFwiXFxcXGVxY29sb25cIiwgXCJcXFxcaHRtbEBtYXRobWx7XCIgKyBcIlxcXFxtYXRocmVse1xcXFxtYXRocmVsey19XFxcXG1hdGhyZWx7XFxcXG1rZXJuLTEuMm11fVxcXFx2Y2VudGNvbG9ufX1cIiArIFwie1xcXFxtYXRob3B7XFxcXGNoYXJcXFwiMjIzOX19XCIpOyAvLyBcXHByb3ZpZGVjb21tYW5kKlxcRXFjb2xvbntcXG1hdGhyZWx7LX1cXG1hdGhyZWx7XFxta2Vybi0xLjJtdX1cXGRibGNvbG9ufVxuXG5kZWZpbmVNYWNybyhcIlxcXFxFcWNvbG9uXCIsIFwiXFxcXGh0bWxAbWF0aG1se1wiICsgXCJcXFxcbWF0aHJlbHtcXFxcbWF0aHJlbHstfVxcXFxtYXRocmVse1xcXFxta2Vybi0xLjJtdX1cXFxcZGJsY29sb259fVwiICsgXCJ7XFxcXG1hdGhvcHtcXFxcY2hhclxcXCIyMjEyXFxcXGNoYXJcXFwiMjIzN319XCIpOyAvLyBcXHByb3ZpZGVjb21tYW5kKlxcY29sb25hcHByb3h7XFx2Y2VudGNvbG9uXFxtYXRocmVse1xcbWtlcm4tMS4ybXV9XFxhcHByb3h9XG5cbmRlZmluZU1hY3JvKFwiXFxcXGNvbG9uYXBwcm94XCIsIFwiXFxcXGh0bWxAbWF0aG1se1wiICsgXCJcXFxcbWF0aHJlbHtcXFxcdmNlbnRjb2xvblxcXFxtYXRocmVse1xcXFxta2Vybi0xLjJtdX1cXFxcYXBwcm94fX1cIiArIFwie1xcXFxtYXRob3B7XFxcXGNoYXJcXFwiM2FcXFxcY2hhclxcXCIyMjQ4fX1cIik7IC8vIFxccHJvdmlkZWNvbW1hbmQqXFxDb2xvbmFwcHJveHtcXGRibGNvbG9uXFxtYXRocmVse1xcbWtlcm4tMS4ybXV9XFxhcHByb3h9XG5cbmRlZmluZU1hY3JvKFwiXFxcXENvbG9uYXBwcm94XCIsIFwiXFxcXGh0bWxAbWF0aG1se1wiICsgXCJcXFxcbWF0aHJlbHtcXFxcZGJsY29sb25cXFxcbWF0aHJlbHtcXFxcbWtlcm4tMS4ybXV9XFxcXGFwcHJveH19XCIgKyBcIntcXFxcbWF0aG9we1xcXFxjaGFyXFxcIjIyMzdcXFxcY2hhclxcXCIyMjQ4fX1cIik7IC8vIFxccHJvdmlkZWNvbW1hbmQqXFxjb2xvbnNpbXtcXHZjZW50Y29sb25cXG1hdGhyZWx7XFxta2Vybi0xLjJtdX1cXHNpbX1cblxuZGVmaW5lTWFjcm8oXCJcXFxcY29sb25zaW1cIiwgXCJcXFxcaHRtbEBtYXRobWx7XCIgKyBcIlxcXFxtYXRocmVse1xcXFx2Y2VudGNvbG9uXFxcXG1hdGhyZWx7XFxcXG1rZXJuLTEuMm11fVxcXFxzaW19fVwiICsgXCJ7XFxcXG1hdGhvcHtcXFxcY2hhclxcXCIzYVxcXFxjaGFyXFxcIjIyM2N9fVwiKTsgLy8gXFxwcm92aWRlY29tbWFuZCpcXENvbG9uc2lte1xcZGJsY29sb25cXG1hdGhyZWx7XFxta2Vybi0xLjJtdX1cXHNpbX1cblxuZGVmaW5lTWFjcm8oXCJcXFxcQ29sb25zaW1cIiwgXCJcXFxcaHRtbEBtYXRobWx7XCIgKyBcIlxcXFxtYXRocmVse1xcXFxkYmxjb2xvblxcXFxtYXRocmVse1xcXFxta2Vybi0xLjJtdX1cXFxcc2ltfX1cIiArIFwie1xcXFxtYXRob3B7XFxcXGNoYXJcXFwiMjIzN1xcXFxjaGFyXFxcIjIyM2N9fVwiKTsgLy8gU29tZSBVbmljb2RlIGNoYXJhY3RlcnMgYXJlIGltcGxlbWVudGVkIHdpdGggbWFjcm9zIHRvIG1hdGh0b29scyBmdW5jdGlvbnMuXG5cbmRlZmluZU1hY3JvKFwiXFx1MjIzN1wiLCBcIlxcXFxkYmxjb2xvblwiKTsgLy8gOjpcblxuZGVmaW5lTWFjcm8oXCJcXHUyMjM5XCIsIFwiXFxcXGVxY29sb25cIik7IC8vIC06XG5cbmRlZmluZU1hY3JvKFwiXFx1MjI1NFwiLCBcIlxcXFxjb2xvbmVxcVwiKTsgLy8gOj1cblxuZGVmaW5lTWFjcm8oXCJcXHUyMjU1XCIsIFwiXFxcXGVxcWNvbG9uXCIpOyAvLyA9OlxuXG5kZWZpbmVNYWNybyhcIlxcdTJBNzRcIiwgXCJcXFxcQ29sb25lcXFcIik7IC8vIDo6PVxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gY29sb25lcXVhbHMuc3R5XG4vLyBBbHRlcm5hdGUgbmFtZXMgZm9yIG1hdGh0b29scydzIG1hY3JvczpcblxuZGVmaW5lTWFjcm8oXCJcXFxccmF0aW9cIiwgXCJcXFxcdmNlbnRjb2xvblwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGNvbG9uY29sb25cIiwgXCJcXFxcZGJsY29sb25cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxjb2xvbmVxdWFsc1wiLCBcIlxcXFxjb2xvbmVxcVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGNvbG9uY29sb25lcXVhbHNcIiwgXCJcXFxcQ29sb25lcXFcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxlcXVhbHNjb2xvblwiLCBcIlxcXFxlcXFjb2xvblwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGVxdWFsc2NvbG9uY29sb25cIiwgXCJcXFxcRXFxY29sb25cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxjb2xvbm1pbnVzXCIsIFwiXFxcXGNvbG9uZXFcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxjb2xvbmNvbG9ubWludXNcIiwgXCJcXFxcQ29sb25lcVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXG1pbnVzY29sb25cIiwgXCJcXFxcZXFjb2xvblwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXG1pbnVzY29sb25jb2xvblwiLCBcIlxcXFxFcWNvbG9uXCIpOyAvLyBcXGNvbG9uYXBwcm94IG5hbWUgaXMgc2FtZSBpbiBtYXRodG9vbHMgYW5kIGNvbG9uZXF1YWxzLlxuXG5kZWZpbmVNYWNybyhcIlxcXFxjb2xvbmNvbG9uYXBwcm94XCIsIFwiXFxcXENvbG9uYXBwcm94XCIpOyAvLyBcXGNvbG9uc2ltIG5hbWUgaXMgc2FtZSBpbiBtYXRodG9vbHMgYW5kIGNvbG9uZXF1YWxzLlxuXG5kZWZpbmVNYWNybyhcIlxcXFxjb2xvbmNvbG9uc2ltXCIsIFwiXFxcXENvbG9uc2ltXCIpOyAvLyBBZGRpdGlvbmFsIG1hY3JvcywgaW1wbGVtZW50ZWQgYnkgYW5hbG9neSB3aXRoIG1hdGh0b29scyBkZWZpbml0aW9uczpcblxuZGVmaW5lTWFjcm8oXCJcXFxcc2ltY29sb25cIiwgXCJcXFxcbWF0aHJlbHtcXFxcc2ltXFxcXG1hdGhyZWx7XFxcXG1rZXJuLTEuMm11fVxcXFx2Y2VudGNvbG9ufVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHNpbWNvbG9uY29sb25cIiwgXCJcXFxcbWF0aHJlbHtcXFxcc2ltXFxcXG1hdGhyZWx7XFxcXG1rZXJuLTEuMm11fVxcXFxkYmxjb2xvbn1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxhcHByb3hjb2xvblwiLCBcIlxcXFxtYXRocmVse1xcXFxhcHByb3hcXFxcbWF0aHJlbHtcXFxcbWtlcm4tMS4ybXV9XFxcXHZjZW50Y29sb259XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcYXBwcm94Y29sb25jb2xvblwiLCBcIlxcXFxtYXRocmVse1xcXFxhcHByb3hcXFxcbWF0aHJlbHtcXFxcbWtlcm4tMS4ybXV9XFxcXGRibGNvbG9ufVwiKTsgLy8gUHJlc2VudCBpbiBuZXd0eG1hdGgsIHB4Zm9udHMgYW5kIHR4Zm9udHNcblxuZGVmaW5lTWFjcm8oXCJcXFxcbm90bmlcIiwgXCJcXFxcaHRtbEBtYXRobWx7XFxcXG5vdFxcXFxuaX17XFxcXG1hdGhyZWx7XFxcXGNoYXJgXFx1MjIwQ319XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcbGltc3VwXCIsIFwiXFxcXERPVFNCXFxcXG9wZXJhdG9ybmFtZSp7bGltXFxcXCxzdXB9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcbGltaW5mXCIsIFwiXFxcXERPVFNCXFxcXG9wZXJhdG9ybmFtZSp7bGltXFxcXCxpbmZ9XCIpOyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBGcm9tIGFtc29wbi5zdHlcblxuZGVmaW5lTWFjcm8oXCJcXFxcaW5qbGltXCIsIFwiXFxcXERPVFNCXFxcXG9wZXJhdG9ybmFtZSp7aW5qXFxcXCxsaW19XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxccHJvamxpbVwiLCBcIlxcXFxET1RTQlxcXFxvcGVyYXRvcm5hbWUqe3Byb2pcXFxcLGxpbX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFx2YXJsaW1zdXBcIiwgXCJcXFxcRE9UU0JcXFxcb3BlcmF0b3JuYW1lKntcXFxcb3ZlcmxpbmV7bGltfX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFx2YXJsaW1pbmZcIiwgXCJcXFxcRE9UU0JcXFxcb3BlcmF0b3JuYW1lKntcXFxcdW5kZXJsaW5le2xpbX19XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcdmFyaW5qbGltXCIsIFwiXFxcXERPVFNCXFxcXG9wZXJhdG9ybmFtZSp7XFxcXHVuZGVycmlnaHRhcnJvd3tsaW19fVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHZhcnByb2psaW1cIiwgXCJcXFxcRE9UU0JcXFxcb3BlcmF0b3JuYW1lKntcXFxcdW5kZXJsZWZ0YXJyb3d7bGltfX1cIik7IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIE1hdGhNTCBhbHRlcm5hdGVzIGZvciBLYVRlWCBnbHlwaHMgaW4gdGhlIFVuaWNvZGUgcHJpdmF0ZSBhcmVhXG5cbmRlZmluZU1hY3JvKFwiXFxcXGd2ZXJ0bmVxcVwiLCBcIlxcXFxodG1sQG1hdGhtbHtcXFxcQGd2ZXJ0bmVxcX17XFx1MjI2OX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxsdmVydG5lcXFcIiwgXCJcXFxcaHRtbEBtYXRobWx7XFxcXEBsdmVydG5lcXF9e1xcdTIyNjh9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcbmdlcXFcIiwgXCJcXFxcaHRtbEBtYXRobWx7XFxcXEBuZ2VxcX17XFx1MjI3MX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxuZ2Vxc2xhbnRcIiwgXCJcXFxcaHRtbEBtYXRobWx7XFxcXEBuZ2Vxc2xhbnR9e1xcdTIyNzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcbmxlcXFcIiwgXCJcXFxcaHRtbEBtYXRobWx7XFxcXEBubGVxcX17XFx1MjI3MH1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxubGVxc2xhbnRcIiwgXCJcXFxcaHRtbEBtYXRobWx7XFxcXEBubGVxc2xhbnR9e1xcdTIyNzB9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcbnNob3J0bWlkXCIsIFwiXFxcXGh0bWxAbWF0aG1se1xcXFxAbnNob3J0bWlkfXviiKR9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcbnNob3J0cGFyYWxsZWxcIiwgXCJcXFxcaHRtbEBtYXRobWx7XFxcXEBuc2hvcnRwYXJhbGxlbH174oimfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXG5zdWJzZXRlcXFcIiwgXCJcXFxcaHRtbEBtYXRobWx7XFxcXEBuc3Vic2V0ZXFxfXtcXHUyMjg4fVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXG5zdXBzZXRlcXFcIiwgXCJcXFxcaHRtbEBtYXRobWx7XFxcXEBuc3Vwc2V0ZXFxfXtcXHUyMjg5fVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHZhcnN1YnNldG5lcVwiLCBcIlxcXFxodG1sQG1hdGhtbHtcXFxcQHZhcnN1YnNldG5lcX174oqKfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHZhcnN1YnNldG5lcXFcIiwgXCJcXFxcaHRtbEBtYXRobWx7XFxcXEB2YXJzdWJzZXRuZXFxfXviq4t9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcdmFyc3Vwc2V0bmVxXCIsIFwiXFxcXGh0bWxAbWF0aG1se1xcXFxAdmFyc3Vwc2V0bmVxfXviiot9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcdmFyc3Vwc2V0bmVxcVwiLCBcIlxcXFxodG1sQG1hdGhtbHtcXFxcQHZhcnN1cHNldG5lcXF9e+KrjH1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxpbWF0aFwiLCBcIlxcXFxodG1sQG1hdGhtbHtcXFxcQGltYXRofXtcXHUwMTMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGptYXRoXCIsIFwiXFxcXGh0bWxAbWF0aG1se1xcXFxAam1hdGh9e1xcdTAyMzd9XCIpOyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBzdG1hcnlyZCBhbmQgc2VtYW50aWNcbi8vIFRoZSBzdG1hcnlyZCBhbmQgc2VtYW50aWMgcGFja2FnZXMgcmVuZGVyIHRoZSBuZXh0IGZvdXIgaXRlbXMgYnkgY2FsbGluZyBhXG4vLyBnbHlwaC4gVGhvc2UgZ2x5cGhzIGRvIG5vdCBleGlzdCBpbiB0aGUgS2FUZVggZm9udHMuIEhlbmNlIHRoZSBtYWNyb3MuXG5cbmRlZmluZU1hY3JvKFwiXFxcXGxsYnJhY2tldFwiLCBcIlxcXFxodG1sQG1hdGhtbHtcIiArIFwiXFxcXG1hdGhvcGVue1tcXFxcbWtlcm4tMy4ybXVbfX1cIiArIFwie1xcXFxtYXRob3BlbntcXFxcY2hhcmBcXHUyN2U2fX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxycmJyYWNrZXRcIiwgXCJcXFxcaHRtbEBtYXRobWx7XCIgKyBcIlxcXFxtYXRoY2xvc2V7XVxcXFxta2Vybi0zLjJtdV19fVwiICsgXCJ7XFxcXG1hdGhjbG9zZXtcXFxcY2hhcmBcXHUyN2U3fX1cIik7XG5kZWZpbmVNYWNybyhcIlxcdTI3ZTZcIiwgXCJcXFxcbGxicmFja2V0XCIpOyAvLyBibGFja2JvYXJkIGJvbGQgW1xuXG5kZWZpbmVNYWNybyhcIlxcdTI3ZTdcIiwgXCJcXFxccnJicmFja2V0XCIpOyAvLyBibGFja2JvYXJkIGJvbGQgXVxuXG5kZWZpbmVNYWNybyhcIlxcXFxsQnJhY2VcIiwgXCJcXFxcaHRtbEBtYXRobWx7XCIgKyBcIlxcXFxtYXRob3BlbntcXFxce1xcXFxta2Vybi0zLjJtdVt9fVwiICsgXCJ7XFxcXG1hdGhvcGVue1xcXFxjaGFyYFxcdTI5ODN9fVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHJCcmFjZVwiLCBcIlxcXFxodG1sQG1hdGhtbHtcIiArIFwiXFxcXG1hdGhjbG9zZXtdXFxcXG1rZXJuLTMuMm11XFxcXH19fVwiICsgXCJ7XFxcXG1hdGhjbG9zZXtcXFxcY2hhcmBcXHUyOTg0fX1cIik7XG5kZWZpbmVNYWNybyhcIlxcdTI5ODNcIiwgXCJcXFxcbEJyYWNlXCIpOyAvLyBibGFja2JvYXJkIGJvbGQge1xuXG5kZWZpbmVNYWNybyhcIlxcdTI5ODRcIiwgXCJcXFxcckJyYWNlXCIpOyAvLyBibGFja2JvYXJkIGJvbGQgfVxuLy8gVE9ETzogQ3JlYXRlIHZhcmlhYmxlIHNpemVkIHZlcnNpb25zIG9mIHRoZSBsYXN0IHR3byBpdGVtcy4gSSBiZWxpZXZlIHRoYXRcbi8vIHdpbGwgcmVxdWlyZSBuZXcgZm9udCBnbHlwaHMuXG4vLyBUaGUgc3RtYXJ5cmQgZnVuY3Rpb24gYFxcbWludXNvYCBwcm92aWRlcyBhIFwiUGxpbXNvbGxcIiBzeW1ib2wgdGhhdFxuLy8gc3VwZXJpbXBvc2VzIHRoZSBjaGFyYWN0ZXJzIFxcY2lyYyBhbmQgXFxtYXRobWludXMuIFVzZWQgaW4gY2hlbWlzdHJ5LlxuXG5kZWZpbmVNYWNybyhcIlxcXFxtaW51c29cIiwgXCJcXFxcbWF0aGJpbntcXFxcaHRtbEBtYXRobWx7XCIgKyBcIntcXFxcbWF0aHJsYXB7XFxcXG1hdGhjaG9pY2V7XFxcXGtlcm57MC4xNDVlbX19e1xcXFxrZXJuezAuMTQ1ZW19fVwiICsgXCJ7XFxcXGtlcm57MC4xMDE1ZW19fXtcXFxca2VybnswLjA3MjVlbX19XFxcXGNpcmN9ey19fX1cIiArIFwie1xcXFxjaGFyYOKmtX19XCIpO1xuZGVmaW5lTWFjcm8oXCLiprVcIiwgXCJcXFxcbWludXNvXCIpOyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyB0ZXh2Yy5zdHlcbi8vIFRoZSB0ZXh2YyBwYWNrYWdlIGNvbnRhaW5zIG1hY3JvcyBhdmFpbGFibGUgaW4gbWVkaWF3aWtpIHBhZ2VzLlxuLy8gV2Ugb21pdCB0aGUgZnVuY3Rpb25zIGRlcHJlY2F0ZWQgYXRcbi8vIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0hlbHA6RGlzcGxheWluZ19hX2Zvcm11bGEjRGVwcmVjYXRlZF9zeW50YXhcbi8vIFdlIGFsc28gb21pdCB0ZXh2YydzIFxcTywgd2hpY2ggY29uZmxpY3RzIHdpdGggXFx0ZXh0e1xcT31cblxuZGVmaW5lTWFjcm8oXCJcXFxcZGFyclwiLCBcIlxcXFxkb3duYXJyb3dcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxkQXJyXCIsIFwiXFxcXERvd25hcnJvd1wiKTtcbmRlZmluZU1hY3JvKFwiXFxcXERhcnJcIiwgXCJcXFxcRG93bmFycm93XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcbGFuZ1wiLCBcIlxcXFxsYW5nbGVcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxyYW5nXCIsIFwiXFxcXHJhbmdsZVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHVhcnJcIiwgXCJcXFxcdXBhcnJvd1wiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHVBcnJcIiwgXCJcXFxcVXBhcnJvd1wiKTtcbmRlZmluZU1hY3JvKFwiXFxcXFVhcnJcIiwgXCJcXFxcVXBhcnJvd1wiKTtcbmRlZmluZU1hY3JvKFwiXFxcXE5cIiwgXCJcXFxcbWF0aGJie059XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcUlwiLCBcIlxcXFxtYXRoYmJ7Un1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxaXCIsIFwiXFxcXG1hdGhiYntafVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGFsZWZcIiwgXCJcXFxcYWxlcGhcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxhbGVmc3ltXCIsIFwiXFxcXGFsZXBoXCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcQWxwaGFcIiwgXCJcXFxcbWF0aHJte0F9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcQmV0YVwiLCBcIlxcXFxtYXRocm17Qn1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxidWxsXCIsIFwiXFxcXGJ1bGxldFwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXENoaVwiLCBcIlxcXFxtYXRocm17WH1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxjbHVic1wiLCBcIlxcXFxjbHVic3VpdFwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGNudW1zXCIsIFwiXFxcXG1hdGhiYntDfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXENvbXBsZXhcIiwgXCJcXFxcbWF0aGJie0N9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcRGFnZ2VyXCIsIFwiXFxcXGRkYWdnZXJcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxkaWFtb25kc1wiLCBcIlxcXFxkaWFtb25kc3VpdFwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGVtcHR5XCIsIFwiXFxcXGVtcHR5c2V0XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcRXBzaWxvblwiLCBcIlxcXFxtYXRocm17RX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxFdGFcIiwgXCJcXFxcbWF0aHJte0h9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcZXhpc3RcIiwgXCJcXFxcZXhpc3RzXCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcaGFyclwiLCBcIlxcXFxsZWZ0cmlnaHRhcnJvd1wiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGhBcnJcIiwgXCJcXFxcTGVmdHJpZ2h0YXJyb3dcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxIYXJyXCIsIFwiXFxcXExlZnRyaWdodGFycm93XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcaGVhcnRzXCIsIFwiXFxcXGhlYXJ0c3VpdFwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGltYWdlXCIsIFwiXFxcXEltXCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcaW5maW5cIiwgXCJcXFxcaW5mdHlcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxJb3RhXCIsIFwiXFxcXG1hdGhybXtJfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGlzaW5cIiwgXCJcXFxcaW5cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxLYXBwYVwiLCBcIlxcXFxtYXRocm17S31cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxsYXJyXCIsIFwiXFxcXGxlZnRhcnJvd1wiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGxBcnJcIiwgXCJcXFxcTGVmdGFycm93XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcTGFyclwiLCBcIlxcXFxMZWZ0YXJyb3dcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxscmFyclwiLCBcIlxcXFxsZWZ0cmlnaHRhcnJvd1wiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGxyQXJyXCIsIFwiXFxcXExlZnRyaWdodGFycm93XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcTHJhcnJcIiwgXCJcXFxcTGVmdHJpZ2h0YXJyb3dcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxNdVwiLCBcIlxcXFxtYXRocm17TX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxuYXRudW1zXCIsIFwiXFxcXG1hdGhiYntOfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXE51XCIsIFwiXFxcXG1hdGhybXtOfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXE9taWNyb25cIiwgXCJcXFxcbWF0aHJte099XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxccGx1c21uXCIsIFwiXFxcXHBtXCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxccmFyclwiLCBcIlxcXFxyaWdodGFycm93XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcckFyclwiLCBcIlxcXFxSaWdodGFycm93XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcUmFyclwiLCBcIlxcXFxSaWdodGFycm93XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxccmVhbFwiLCBcIlxcXFxSZVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHJlYWxzXCIsIFwiXFxcXG1hdGhiYntSfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXFJlYWxzXCIsIFwiXFxcXG1hdGhiYntSfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXFJob1wiLCBcIlxcXFxtYXRocm17UH1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxzZG90XCIsIFwiXFxcXGNkb3RcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxzZWN0XCIsIFwiXFxcXFNcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxzcGFkZXNcIiwgXCJcXFxcc3BhZGVzdWl0XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcc3ViXCIsIFwiXFxcXHN1YnNldFwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHN1YmVcIiwgXCJcXFxcc3Vic2V0ZXFcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxzdXBlXCIsIFwiXFxcXHN1cHNldGVxXCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcVGF1XCIsIFwiXFxcXG1hdGhybXtUfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHRoZXRhc3ltXCIsIFwiXFxcXHZhcnRoZXRhXCIpOyAvLyBUT0RPOiBkZWZpbmVNYWNybyhcIlxcXFx2YXJjb3BwYVwiLCBcIlxcXFxcXG1ib3h7XFxcXGNvcHBhfVwiKTtcblxuZGVmaW5lTWFjcm8oXCJcXFxcd2VpZXJwXCIsIFwiXFxcXHdwXCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcWmV0YVwiLCBcIlxcXFxtYXRocm17Wn1cIik7IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIHN0YXRtYXRoLnN0eVxuLy8gaHR0cHM6Ly9jdGFuLm1hdGguaWxsaW5vaXMuZWR1L21hY3Jvcy9sYXRleC9jb250cmliL3N0YXRtYXRoL3N0YXRtYXRoLnBkZlxuXG5kZWZpbmVNYWNybyhcIlxcXFxhcmdtaW5cIiwgXCJcXFxcRE9UU0JcXFxcb3BlcmF0b3JuYW1lKnthcmdcXFxcLG1pbn1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxhcmdtYXhcIiwgXCJcXFxcRE9UU0JcXFxcb3BlcmF0b3JuYW1lKnthcmdcXFxcLG1heH1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxwbGltXCIsIFwiXFxcXERPVFNCXFxcXG1hdGhvcHtcXFxcb3BlcmF0b3JuYW1le3BsaW19fVxcXFxsaW1pdHNcIik7IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIGJyYWtldC5zdHlcbi8vIGh0dHA6Ly9jdGFuLm1hdGgud2FzaGluZ3Rvbi5lZHUvdGV4LWFyY2hpdmUvbWFjcm9zL2xhdGV4L2NvbnRyaWIvYnJha2V0L2JyYWtldC5wZGZcblxuZGVmaW5lTWFjcm8oXCJcXFxcYnJhXCIsIFwiXFxcXG1hdGhpbm5lcntcXFxcbGFuZ2xleyMxfXx9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxca2V0XCIsIFwiXFxcXG1hdGhpbm5lcnt8eyMxfVxcXFxyYW5nbGV9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcYnJha2V0XCIsIFwiXFxcXG1hdGhpbm5lcntcXFxcbGFuZ2xleyMxfVxcXFxyYW5nbGV9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcQnJhXCIsIFwiXFxcXGxlZnRcXFxcbGFuZ2xlIzFcXFxccmlnaHR8XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcS2V0XCIsIFwiXFxcXGxlZnR8IzFcXFxccmlnaHRcXFxccmFuZ2xlXCIpO1xuXG5jb25zdCBicmFrZXRIZWxwZXIgPSBvbmUgPT4gY29udGV4dCA9PiB7XG4gIGNvbnN0IGxlZnQgPSBjb250ZXh0LmNvbnN1bWVBcmcoKS50b2tlbnM7XG4gIGNvbnN0IG1pZGRsZSA9IGNvbnRleHQuY29uc3VtZUFyZygpLnRva2VucztcbiAgY29uc3QgbWlkZGxlRG91YmxlID0gY29udGV4dC5jb25zdW1lQXJnKCkudG9rZW5zO1xuICBjb25zdCByaWdodCA9IGNvbnRleHQuY29uc3VtZUFyZygpLnRva2VucztcbiAgY29uc3Qgb2xkTWlkZGxlID0gY29udGV4dC5tYWNyb3MuZ2V0KFwifFwiKTtcbiAgY29uc3Qgb2xkTWlkZGxlRG91YmxlID0gY29udGV4dC5tYWNyb3MuZ2V0KFwiXFxcXHxcIik7XG4gIGNvbnRleHQubWFjcm9zLmJlZ2luR3JvdXAoKTtcblxuICBjb25zdCBtaWRNYWNybyA9IGRvdWJsZSA9PiBjb250ZXh0ID0+IHtcbiAgICBpZiAob25lKSB7XG4gICAgICAvLyBPbmx5IG1vZGlmeSB0aGUgZmlyc3QgaW5zdGFuY2Ugb2YgfCBvciBcXHxcbiAgICAgIGNvbnRleHQubWFjcm9zLnNldChcInxcIiwgb2xkTWlkZGxlKTtcblxuICAgICAgaWYgKG1pZGRsZURvdWJsZS5sZW5ndGgpIHtcbiAgICAgICAgY29udGV4dC5tYWNyb3Muc2V0KFwiXFxcXHxcIiwgb2xkTWlkZGxlRG91YmxlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgZG91YmxlZCA9IGRvdWJsZTtcblxuICAgIGlmICghZG91YmxlICYmIG1pZGRsZURvdWJsZS5sZW5ndGgpIHtcbiAgICAgIC8vIE1pbWljIFxcQGlmbmV4dGNoYXJcbiAgICAgIGNvbnN0IG5leHRUb2tlbiA9IGNvbnRleHQuZnV0dXJlKCk7XG5cbiAgICAgIGlmIChuZXh0VG9rZW4udGV4dCA9PT0gXCJ8XCIpIHtcbiAgICAgICAgY29udGV4dC5wb3BUb2tlbigpO1xuICAgICAgICBkb3VibGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdG9rZW5zOiBkb3VibGVkID8gbWlkZGxlRG91YmxlIDogbWlkZGxlLFxuICAgICAgbnVtQXJnczogMFxuICAgIH07XG4gIH07XG5cbiAgY29udGV4dC5tYWNyb3Muc2V0KFwifFwiLCBtaWRNYWNybyhmYWxzZSkpO1xuXG4gIGlmIChtaWRkbGVEb3VibGUubGVuZ3RoKSB7XG4gICAgY29udGV4dC5tYWNyb3Muc2V0KFwiXFxcXHxcIiwgbWlkTWFjcm8odHJ1ZSkpO1xuICB9XG5cbiAgY29uc3QgYXJnID0gY29udGV4dC5jb25zdW1lQXJnKCkudG9rZW5zO1xuICBjb25zdCBleHBhbmRlZCA9IGNvbnRleHQuZXhwYW5kVG9rZW5zKFsuLi5yaWdodCwgLi4uYXJnLCAuLi5sZWZ0IC8vIHJldmVyc2VkXG4gIF0pO1xuICBjb250ZXh0Lm1hY3Jvcy5lbmRHcm91cCgpO1xuICByZXR1cm4ge1xuICAgIHRva2VuczogZXhwYW5kZWQucmV2ZXJzZSgpLFxuICAgIG51bUFyZ3M6IDBcbiAgfTtcbn07XG5cbmRlZmluZU1hY3JvKFwiXFxcXGJyYUBrZXRcIiwgYnJha2V0SGVscGVyKGZhbHNlKSk7XG5kZWZpbmVNYWNybyhcIlxcXFxicmFAc2V0XCIsIGJyYWtldEhlbHBlcih0cnVlKSk7XG5kZWZpbmVNYWNybyhcIlxcXFxCcmFrZXRcIiwgXCJcXFxcYnJhQGtldHtcXFxcbGVmdFxcXFxsYW5nbGV9XCIgKyBcIntcXFxcLFxcXFxtaWRkbGVcXFxcdmVydFxcXFwsfXtcXFxcLFxcXFxtaWRkbGVcXFxcdmVydFxcXFwsfXtcXFxccmlnaHRcXFxccmFuZ2xlfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXFNldFwiLCBcIlxcXFxicmFAc2V0e1xcXFxsZWZ0XFxcXHtcXFxcOn1cIiArIFwie1xcXFw7XFxcXG1pZGRsZVxcXFx2ZXJ0XFxcXDt9e1xcXFw7XFxcXG1pZGRsZVxcXFxWZXJ0XFxcXDt9e1xcXFw6XFxcXHJpZ2h0XFxcXH19XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcc2V0XCIsIFwiXFxcXGJyYUBzZXR7XFxcXHtcXFxcLH17XFxcXG1pZH17fXtcXFxcLFxcXFx9fVwiKTsgLy8gaGFzIG5vIHN1cHBvcnQgZm9yIHNwZWNpYWwgfHwgb3IgXFx8XG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBhY3R1YXJpYWxhbmdsZS5kdHhcblxuZGVmaW5lTWFjcm8oXCJcXFxcYW5nbG5cIiwgXCJ7XFxcXGFuZ2wgbn1cIik7IC8vIEN1c3RvbSBLaGFuIEFjYWRlbXkgY29sb3JzLCBzaG91bGQgYmUgbW92ZWQgdG8gYW4gb3B0aW9uYWwgcGFja2FnZVxuXG5kZWZpbmVNYWNybyhcIlxcXFxibHVlXCIsIFwiXFxcXHRleHRjb2xvcnsjIzY0OTVlZH17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcb3JhbmdlXCIsIFwiXFxcXHRleHRjb2xvcnsjI2ZmYTUwMH17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxccGlua1wiLCBcIlxcXFx0ZXh0Y29sb3J7IyNmZjAwYWZ9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHJlZFwiLCBcIlxcXFx0ZXh0Y29sb3J7IyNkZjAwMzB9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGdyZWVuXCIsIFwiXFxcXHRleHRjb2xvcnsjIzI4YWU3Yn17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcZ3JheVwiLCBcIlxcXFx0ZXh0Y29sb3J7Z3JheX17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxccHVycGxlXCIsIFwiXFxcXHRleHRjb2xvcnsjIzlkMzhiZH17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcYmx1ZUFcIiwgXCJcXFxcdGV4dGNvbG9yeyMjY2NmYWZmfXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxibHVlQlwiLCBcIlxcXFx0ZXh0Y29sb3J7IyM4MGY2ZmZ9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGJsdWVDXCIsIFwiXFxcXHRleHRjb2xvcnsjIzYzZDllYX17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcYmx1ZURcIiwgXCJcXFxcdGV4dGNvbG9yeyMjMTFhY2NkfXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxibHVlRVwiLCBcIlxcXFx0ZXh0Y29sb3J7IyMwYzdmOTl9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHRlYWxBXCIsIFwiXFxcXHRleHRjb2xvcnsjIzk0ZmZmNX17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcdGVhbEJcIiwgXCJcXFxcdGV4dGNvbG9yeyMjMjZlZGQ1fXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFx0ZWFsQ1wiLCBcIlxcXFx0ZXh0Y29sb3J7IyMwMWQxYzF9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHRlYWxEXCIsIFwiXFxcXHRleHRjb2xvcnsjIzAxYTk5NX17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcdGVhbEVcIiwgXCJcXFxcdGV4dGNvbG9yeyMjMjA4MTcwfXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxncmVlbkFcIiwgXCJcXFxcdGV4dGNvbG9yeyMjYjZmZmIwfXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxncmVlbkJcIiwgXCJcXFxcdGV4dGNvbG9yeyMjOGFmMjgxfXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxncmVlbkNcIiwgXCJcXFxcdGV4dGNvbG9yeyMjNzRjZjcwfXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxncmVlbkRcIiwgXCJcXFxcdGV4dGNvbG9yeyMjMWZhYjU0fXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxncmVlbkVcIiwgXCJcXFxcdGV4dGNvbG9yeyMjMGQ5MjNmfXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxnb2xkQVwiLCBcIlxcXFx0ZXh0Y29sb3J7IyNmZmQwYTl9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGdvbGRCXCIsIFwiXFxcXHRleHRjb2xvcnsjI2ZmYmI3MX17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcZ29sZENcIiwgXCJcXFxcdGV4dGNvbG9yeyMjZmY5YzM5fXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxnb2xkRFwiLCBcIlxcXFx0ZXh0Y29sb3J7IyNlMDdkMTB9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGdvbGRFXCIsIFwiXFxcXHRleHRjb2xvcnsjI2E3NWEwNX17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxccmVkQVwiLCBcIlxcXFx0ZXh0Y29sb3J7IyNmY2E5YTl9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHJlZEJcIiwgXCJcXFxcdGV4dGNvbG9yeyMjZmY4NDgyfXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxyZWRDXCIsIFwiXFxcXHRleHRjb2xvcnsjI2Y5Njg1ZH17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxccmVkRFwiLCBcIlxcXFx0ZXh0Y29sb3J7IyNlODRkMzl9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHJlZEVcIiwgXCJcXFxcdGV4dGNvbG9yeyMjYmMyNjEyfXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxtYXJvb25BXCIsIFwiXFxcXHRleHRjb2xvcnsjI2ZmYmRlMH17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcbWFyb29uQlwiLCBcIlxcXFx0ZXh0Y29sb3J7IyNmZjkyYzZ9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXG1hcm9vbkNcIiwgXCJcXFxcdGV4dGNvbG9yeyMjZWQ1ZmE2fXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxtYXJvb25EXCIsIFwiXFxcXHRleHRjb2xvcnsjI2NhMzM3Y317IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcbWFyb29uRVwiLCBcIlxcXFx0ZXh0Y29sb3J7IyM5ZTAzNGV9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHB1cnBsZUFcIiwgXCJcXFxcdGV4dGNvbG9yeyMjZGRkN2ZmfXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxwdXJwbGVCXCIsIFwiXFxcXHRleHRjb2xvcnsjI2M2YjlmY317IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxccHVycGxlQ1wiLCBcIlxcXFx0ZXh0Y29sb3J7IyNhYTg3ZmZ9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHB1cnBsZURcIiwgXCJcXFxcdGV4dGNvbG9yeyMjNzg1NGFifXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxwdXJwbGVFXCIsIFwiXFxcXHRleHRjb2xvcnsjIzU0M2I3OH17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcbWludEFcIiwgXCJcXFxcdGV4dGNvbG9yeyMjZjVmOWU4fXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxtaW50QlwiLCBcIlxcXFx0ZXh0Y29sb3J7IyNlZGYyZGZ9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXG1pbnRDXCIsIFwiXFxcXHRleHRjb2xvcnsjI2UwZTVjY317IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcZ3JheUFcIiwgXCJcXFxcdGV4dGNvbG9yeyMjZjZmN2Y3fXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxncmF5QlwiLCBcIlxcXFx0ZXh0Y29sb3J7IyNmMGYxZjJ9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGdyYXlDXCIsIFwiXFxcXHRleHRjb2xvcnsjI2UzZTVlNn17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcZ3JheURcIiwgXCJcXFxcdGV4dGNvbG9yeyMjZDZkOGRhfXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxncmF5RVwiLCBcIlxcXFx0ZXh0Y29sb3J7IyNiYWJlYzJ9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGdyYXlGXCIsIFwiXFxcXHRleHRjb2xvcnsjIzg4OGQ5M317IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcZ3JheUdcIiwgXCJcXFxcdGV4dGNvbG9yeyMjNjI2NTY5fXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxncmF5SFwiLCBcIlxcXFx0ZXh0Y29sb3J7IyMzYjNlNDB9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGdyYXlJXCIsIFwiXFxcXHRleHRjb2xvcnsjIzIxMjQyY317IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxca2FCbHVlXCIsIFwiXFxcXHRleHRjb2xvcnsjIzMxNDQ1M317IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxca2FHcmVlblwiLCBcIlxcXFx0ZXh0Y29sb3J7IyM3MUIzMDd9eyMxfVwiKTtcbjsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9NYWNyb0V4cGFuZGVyLmpzXG4vKipcbiAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUg4oCcZ3VsbGV04oCdIHdoZXJlIG1hY3JvcyBhcmUgZXhwYW5kZWRcbiAqIHVudGlsIG9ubHkgbm9uLW1hY3JvIHRva2VucyByZW1haW4uXG4gKi9cblxuXG5cblxuXG5cblxuLy8gTGlzdCBvZiBjb21tYW5kcyB0aGF0IGFjdCBsaWtlIG1hY3JvcyBidXQgYXJlbid0IGRlZmluZWQgYXMgYSBtYWNybyxcbi8vIGZ1bmN0aW9uLCBvciBzeW1ib2wuICBVc2VkIGluIGBpc0RlZmluZWRgLlxuY29uc3QgaW1wbGljaXRDb21tYW5kcyA9IHtcbiAgXCJeXCI6IHRydWUsXG4gIC8vIFBhcnNlci5qc1xuICBcIl9cIjogdHJ1ZSxcbiAgLy8gUGFyc2VyLmpzXG4gIFwiXFxcXGxpbWl0c1wiOiB0cnVlLFxuICAvLyBQYXJzZXIuanNcbiAgXCJcXFxcbm9saW1pdHNcIjogdHJ1ZSAvLyBQYXJzZXIuanNcblxufTtcbmNsYXNzIE1hY3JvRXhwYW5kZXIge1xuICBjb25zdHJ1Y3RvcihpbnB1dCwgc2V0dGluZ3MsIG1vZGUpIHtcbiAgICB0aGlzLnNldHRpbmdzID0gdm9pZCAwO1xuICAgIHRoaXMuZXhwYW5zaW9uQ291bnQgPSB2b2lkIDA7XG4gICAgdGhpcy5sZXhlciA9IHZvaWQgMDtcbiAgICB0aGlzLm1hY3JvcyA9IHZvaWQgMDtcbiAgICB0aGlzLnN0YWNrID0gdm9pZCAwO1xuICAgIHRoaXMubW9kZSA9IHZvaWQgMDtcbiAgICB0aGlzLnNldHRpbmdzID0gc2V0dGluZ3M7XG4gICAgdGhpcy5leHBhbnNpb25Db3VudCA9IDA7XG4gICAgdGhpcy5mZWVkKGlucHV0KTsgLy8gTWFrZSBuZXcgZ2xvYmFsIG5hbWVzcGFjZVxuXG4gICAgdGhpcy5tYWNyb3MgPSBuZXcgTmFtZXNwYWNlKHNyY19tYWNyb3MsIHNldHRpbmdzLm1hY3Jvcyk7XG4gICAgdGhpcy5tb2RlID0gbW9kZTtcbiAgICB0aGlzLnN0YWNrID0gW107IC8vIGNvbnRhaW5zIHRva2VucyBpbiBSRVZFUlNFIG9yZGVyXG4gIH1cbiAgLyoqXG4gICAqIEZlZWQgYSBuZXcgaW5wdXQgc3RyaW5nIHRvIHRoZSBzYW1lIE1hY3JvRXhwYW5kZXJcbiAgICogKHdpdGggZXhpc3RpbmcgbWFjcm9zIGV0Yy4pLlxuICAgKi9cblxuXG4gIGZlZWQoaW5wdXQpIHtcbiAgICB0aGlzLmxleGVyID0gbmV3IExleGVyKGlucHV0LCB0aGlzLnNldHRpbmdzKTtcbiAgfVxuICAvKipcbiAgICogU3dpdGNoZXMgYmV0d2VlbiBcInRleHRcIiBhbmQgXCJtYXRoXCIgbW9kZXMuXG4gICAqL1xuXG5cbiAgc3dpdGNoTW9kZShuZXdNb2RlKSB7XG4gICAgdGhpcy5tb2RlID0gbmV3TW9kZTtcbiAgfVxuICAvKipcbiAgICogU3RhcnQgYSBuZXcgZ3JvdXAgbmVzdGluZyB3aXRoaW4gYWxsIG5hbWVzcGFjZXMuXG4gICAqL1xuXG5cbiAgYmVnaW5Hcm91cCgpIHtcbiAgICB0aGlzLm1hY3Jvcy5iZWdpbkdyb3VwKCk7XG4gIH1cbiAgLyoqXG4gICAqIEVuZCBjdXJyZW50IGdyb3VwIG5lc3Rpbmcgd2l0aGluIGFsbCBuYW1lc3BhY2VzLlxuICAgKi9cblxuXG4gIGVuZEdyb3VwKCkge1xuICAgIHRoaXMubWFjcm9zLmVuZEdyb3VwKCk7XG4gIH1cbiAgLyoqXG4gICAqIEVuZHMgYWxsIGN1cnJlbnRseSBuZXN0ZWQgZ3JvdXBzIChpZiBhbnkpLCByZXN0b3JpbmcgdmFsdWVzIGJlZm9yZSB0aGVcbiAgICogZ3JvdXBzIGJlZ2FuLiAgVXNlZnVsIGluIGNhc2Ugb2YgYW4gZXJyb3IgaW4gdGhlIG1pZGRsZSBvZiBwYXJzaW5nLlxuICAgKi9cblxuXG4gIGVuZEdyb3VwcygpIHtcbiAgICB0aGlzLm1hY3Jvcy5lbmRHcm91cHMoKTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0aGUgdG9wbW9zdCB0b2tlbiBvbiB0aGUgc3RhY2ssIHdpdGhvdXQgZXhwYW5kaW5nIGl0LlxuICAgKiBTaW1pbGFyIGluIGJlaGF2aW9yIHRvIFRlWCdzIGBcXGZ1dHVyZWxldGAuXG4gICAqL1xuXG5cbiAgZnV0dXJlKCkge1xuICAgIGlmICh0aGlzLnN0YWNrLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5wdXNoVG9rZW4odGhpcy5sZXhlci5sZXgoKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAxXTtcbiAgfVxuICAvKipcbiAgICogUmVtb3ZlIGFuZCByZXR1cm4gdGhlIG5leHQgdW5leHBhbmRlZCB0b2tlbi5cbiAgICovXG5cblxuICBwb3BUb2tlbigpIHtcbiAgICB0aGlzLmZ1dHVyZSgpOyAvLyBlbnN1cmUgbm9uLWVtcHR5IHN0YWNrXG5cbiAgICByZXR1cm4gdGhpcy5zdGFjay5wb3AoKTtcbiAgfVxuICAvKipcbiAgICogQWRkIGEgZ2l2ZW4gdG9rZW4gdG8gdGhlIHRva2VuIHN0YWNrLiAgSW4gcGFydGljdWxhciwgdGhpcyBnZXQgYmUgdXNlZFxuICAgKiB0byBwdXQgYmFjayBhIHRva2VuIHJldHVybmVkIGZyb20gb25lIG9mIHRoZSBvdGhlciBtZXRob2RzLlxuICAgKi9cblxuXG4gIHB1c2hUb2tlbih0b2tlbikge1xuICAgIHRoaXMuc3RhY2sucHVzaCh0b2tlbik7XG4gIH1cbiAgLyoqXG4gICAqIEFwcGVuZCBhbiBhcnJheSBvZiB0b2tlbnMgdG8gdGhlIHRva2VuIHN0YWNrLlxuICAgKi9cblxuXG4gIHB1c2hUb2tlbnModG9rZW5zKSB7XG4gICAgdGhpcy5zdGFjay5wdXNoKC4uLnRva2Vucyk7XG4gIH1cbiAgLyoqXG4gICAqIEZpbmQgYW4gbWFjcm8gYXJndW1lbnQgd2l0aG91dCBleHBhbmRpbmcgdG9rZW5zIGFuZCBhcHBlbmQgdGhlIGFycmF5IG9mXG4gICAqIHRva2VucyB0byB0aGUgdG9rZW4gc3RhY2suIFVzZXMgVG9rZW4gYXMgYSBjb250YWluZXIgZm9yIHRoZSByZXN1bHQuXG4gICAqL1xuXG5cbiAgc2NhbkFyZ3VtZW50KGlzT3B0aW9uYWwpIHtcbiAgICBsZXQgc3RhcnQ7XG4gICAgbGV0IGVuZDtcbiAgICBsZXQgdG9rZW5zO1xuXG4gICAgaWYgKGlzT3B0aW9uYWwpIHtcbiAgICAgIHRoaXMuY29uc3VtZVNwYWNlcygpOyAvLyBcXEBpZm5leHRjaGFyIGdvYmJsZXMgYW55IHNwYWNlIGZvbGxvd2luZyBpdFxuXG4gICAgICBpZiAodGhpcy5mdXR1cmUoKS50ZXh0ICE9PSBcIltcIikge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgc3RhcnQgPSB0aGlzLnBvcFRva2VuKCk7IC8vIGRvbid0IGluY2x1ZGUgWyBpbiB0b2tlbnNcblxuICAgICAgKHtcbiAgICAgICAgdG9rZW5zLFxuICAgICAgICBlbmRcbiAgICAgIH0gPSB0aGlzLmNvbnN1bWVBcmcoW1wiXVwiXSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAoe1xuICAgICAgICB0b2tlbnMsXG4gICAgICAgIHN0YXJ0LFxuICAgICAgICBlbmRcbiAgICAgIH0gPSB0aGlzLmNvbnN1bWVBcmcoKSk7XG4gICAgfSAvLyBpbmRpY2F0ZSB0aGUgZW5kIG9mIGFuIGFyZ3VtZW50XG5cblxuICAgIHRoaXMucHVzaFRva2VuKG5ldyBUb2tlbihcIkVPRlwiLCBlbmQubG9jKSk7XG4gICAgdGhpcy5wdXNoVG9rZW5zKHRva2Vucyk7XG4gICAgcmV0dXJuIHN0YXJ0LnJhbmdlKGVuZCwgXCJcIik7XG4gIH1cbiAgLyoqXG4gICAqIENvbnN1bWUgYWxsIGZvbGxvd2luZyBzcGFjZSB0b2tlbnMsIHdpdGhvdXQgZXhwYW5zaW9uLlxuICAgKi9cblxuXG4gIGNvbnN1bWVTcGFjZXMoKSB7XG4gICAgZm9yICg7Oykge1xuICAgICAgY29uc3QgdG9rZW4gPSB0aGlzLmZ1dHVyZSgpO1xuXG4gICAgICBpZiAodG9rZW4udGV4dCA9PT0gXCIgXCIpIHtcbiAgICAgICAgdGhpcy5zdGFjay5wb3AoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICAvKipcbiAgICogQ29uc3VtZSBhbiBhcmd1bWVudCBmcm9tIHRoZSB0b2tlbiBzdHJlYW0sIGFuZCByZXR1cm4gdGhlIHJlc3VsdGluZyBhcnJheVxuICAgKiBvZiB0b2tlbnMgYW5kIHN0YXJ0L2VuZCB0b2tlbi5cbiAgICovXG5cblxuICBjb25zdW1lQXJnKGRlbGltcykge1xuICAgIC8vIFRoZSBhcmd1bWVudCBmb3IgYSBkZWxpbWl0ZWQgcGFyYW1ldGVyIGlzIHRoZSBzaG9ydGVzdCAocG9zc2libHlcbiAgICAvLyBlbXB0eSkgc2VxdWVuY2Ugb2YgdG9rZW5zIHdpdGggcHJvcGVybHkgbmVzdGVkIHsuLi59IGdyb3VwcyB0aGF0IGlzXG4gICAgLy8gZm9sbG93ZWQgLi4uIGJ5IHRoaXMgcGFydGljdWxhciBsaXN0IG9mIG5vbi1wYXJhbWV0ZXIgdG9rZW5zLlxuICAgIC8vIFRoZSBhcmd1bWVudCBmb3IgYW4gdW5kZWxpbWl0ZWQgcGFyYW1ldGVyIGlzIHRoZSBuZXh0IG5vbmJsYW5rXG4gICAgLy8gdG9rZW4sIHVubGVzcyB0aGF0IHRva2VuIGlzIOKAmHvigJksIHdoZW4gdGhlIGFyZ3VtZW50IHdpbGwgYmUgdGhlXG4gICAgLy8gZW50aXJlIHsuLi59IGdyb3VwIHRoYXQgZm9sbG93cy5cbiAgICBjb25zdCB0b2tlbnMgPSBbXTtcbiAgICBjb25zdCBpc0RlbGltaXRlZCA9IGRlbGltcyAmJiBkZWxpbXMubGVuZ3RoID4gMDtcblxuICAgIGlmICghaXNEZWxpbWl0ZWQpIHtcbiAgICAgIC8vIElnbm9yZSBzcGFjZXMgYmV0d2VlbiBhcmd1bWVudHMuICBBcyB0aGUgVGVYYm9vayBzYXlzOlxuICAgICAgLy8gXCJBZnRlciB5b3UgaGF2ZSBzYWlkIOKAmFxcZGVmXFxyb3cjMSMyey4uLn3igJksIHlvdSBhcmUgYWxsb3dlZCB0b1xuICAgICAgLy8gIHB1dCBzcGFjZXMgYmV0d2VlbiB0aGUgYXJndW1lbnRzIChlLmcuLCDigJhcXHJvdyB4IG7igJkpLCBiZWNhdXNlXG4gICAgICAvLyAgVGVYIGRvZXNu4oCZdCB1c2Ugc2luZ2xlIHNwYWNlcyBhcyB1bmRlbGltaXRlZCBhcmd1bWVudHMuXCJcbiAgICAgIHRoaXMuY29uc3VtZVNwYWNlcygpO1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXJ0ID0gdGhpcy5mdXR1cmUoKTtcbiAgICBsZXQgdG9rO1xuICAgIGxldCBkZXB0aCA9IDA7XG4gICAgbGV0IG1hdGNoID0gMDtcblxuICAgIGRvIHtcbiAgICAgIHRvayA9IHRoaXMucG9wVG9rZW4oKTtcbiAgICAgIHRva2Vucy5wdXNoKHRvayk7XG5cbiAgICAgIGlmICh0b2sudGV4dCA9PT0gXCJ7XCIpIHtcbiAgICAgICAgKytkZXB0aDtcbiAgICAgIH0gZWxzZSBpZiAodG9rLnRleHQgPT09IFwifVwiKSB7XG4gICAgICAgIC0tZGVwdGg7XG5cbiAgICAgICAgaWYgKGRlcHRoID09PSAtMSkge1xuICAgICAgICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIkV4dHJhIH1cIiwgdG9rKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0b2sudGV4dCA9PT0gXCJFT0ZcIikge1xuICAgICAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJVbmV4cGVjdGVkIGVuZCBvZiBpbnB1dCBpbiBhIG1hY3JvIGFyZ3VtZW50XCIgKyBcIiwgZXhwZWN0ZWQgJ1wiICsgKGRlbGltcyAmJiBpc0RlbGltaXRlZCA/IGRlbGltc1ttYXRjaF0gOiBcIn1cIikgKyBcIidcIiwgdG9rKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRlbGltcyAmJiBpc0RlbGltaXRlZCkge1xuICAgICAgICBpZiAoKGRlcHRoID09PSAwIHx8IGRlcHRoID09PSAxICYmIGRlbGltc1ttYXRjaF0gPT09IFwie1wiKSAmJiB0b2sudGV4dCA9PT0gZGVsaW1zW21hdGNoXSkge1xuICAgICAgICAgICsrbWF0Y2g7XG5cbiAgICAgICAgICBpZiAobWF0Y2ggPT09IGRlbGltcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIC8vIGRvbid0IGluY2x1ZGUgZGVsaW1zIGluIHRva2Vuc1xuICAgICAgICAgICAgdG9rZW5zLnNwbGljZSgtbWF0Y2gsIG1hdGNoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBtYXRjaCA9IDA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IHdoaWxlIChkZXB0aCAhPT0gMCB8fCBpc0RlbGltaXRlZCk7IC8vIElmIHRoZSBhcmd1bWVudCBmb3VuZCAuLi4gaGFzIHRoZSBmb3JtIOKAmHs8bmVzdGVkIHRva2Vucz594oCZLFxuICAgIC8vIC4uLiB0aGUgb3V0ZXJtb3N0IGJyYWNlcyBlbmNsb3NpbmcgdGhlIGFyZ3VtZW50IGFyZSByZW1vdmVkXG5cblxuICAgIGlmIChzdGFydC50ZXh0ID09PSBcIntcIiAmJiB0b2tlbnNbdG9rZW5zLmxlbmd0aCAtIDFdLnRleHQgPT09IFwifVwiKSB7XG4gICAgICB0b2tlbnMucG9wKCk7XG4gICAgICB0b2tlbnMuc2hpZnQoKTtcbiAgICB9XG5cbiAgICB0b2tlbnMucmV2ZXJzZSgpOyAvLyB0byBmaXQgaW4gd2l0aCBzdGFjayBvcmRlclxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHRva2VucyxcbiAgICAgIHN0YXJ0LFxuICAgICAgZW5kOiB0b2tcbiAgICB9O1xuICB9XG4gIC8qKlxuICAgKiBDb25zdW1lIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIChkZWxpbWl0ZWQpIGFyZ3VtZW50cyBmcm9tIHRoZSB0b2tlblxuICAgKiBzdHJlYW0gYW5kIHJldHVybiB0aGUgcmVzdWx0aW5nIGFycmF5IG9mIGFyZ3VtZW50cy5cbiAgICovXG5cblxuICBjb25zdW1lQXJncyhudW1BcmdzLCBkZWxpbWl0ZXJzKSB7XG4gICAgaWYgKGRlbGltaXRlcnMpIHtcbiAgICAgIGlmIChkZWxpbWl0ZXJzLmxlbmd0aCAhPT0gbnVtQXJncyArIDEpIHtcbiAgICAgICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiVGhlIGxlbmd0aCBvZiBkZWxpbWl0ZXJzIGRvZXNuJ3QgbWF0Y2ggdGhlIG51bWJlciBvZiBhcmdzIVwiKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGVsaW1zID0gZGVsaW1pdGVyc1swXTtcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkZWxpbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgdG9rID0gdGhpcy5wb3BUb2tlbigpO1xuXG4gICAgICAgIGlmIChkZWxpbXNbaV0gIT09IHRvay50ZXh0KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiVXNlIG9mIHRoZSBtYWNybyBkb2Vzbid0IG1hdGNoIGl0cyBkZWZpbml0aW9uXCIsIHRvayk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBhcmdzID0gW107XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bUFyZ3M7IGkrKykge1xuICAgICAgYXJncy5wdXNoKHRoaXMuY29uc3VtZUFyZyhkZWxpbWl0ZXJzICYmIGRlbGltaXRlcnNbaSArIDFdKS50b2tlbnMpO1xuICAgIH1cblxuICAgIHJldHVybiBhcmdzO1xuICB9XG4gIC8qKlxuICAgKiBJbmNyZW1lbnQgYGV4cGFuc2lvbkNvdW50YCBieSB0aGUgc3BlY2lmaWVkIGFtb3VudC5cbiAgICogVGhyb3cgYW4gZXJyb3IgaWYgaXQgZXhjZWVkcyBgbWF4RXhwYW5kYC5cbiAgICovXG5cblxuICBjb3VudEV4cGFuc2lvbihhbW91bnQpIHtcbiAgICB0aGlzLmV4cGFuc2lvbkNvdW50ICs9IGFtb3VudDtcblxuICAgIGlmICh0aGlzLmV4cGFuc2lvbkNvdW50ID4gdGhpcy5zZXR0aW5ncy5tYXhFeHBhbmQpIHtcbiAgICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIlRvbyBtYW55IGV4cGFuc2lvbnM6IGluZmluaXRlIGxvb3Agb3IgXCIgKyBcIm5lZWQgdG8gaW5jcmVhc2UgbWF4RXhwYW5kIHNldHRpbmdcIik7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBFeHBhbmQgdGhlIG5leHQgdG9rZW4gb25seSBvbmNlIGlmIHBvc3NpYmxlLlxuICAgKlxuICAgKiBJZiB0aGUgdG9rZW4gaXMgZXhwYW5kZWQsIHRoZSByZXN1bHRpbmcgdG9rZW5zIHdpbGwgYmUgcHVzaGVkIG9udG9cbiAgICogdGhlIHN0YWNrIGluIHJldmVyc2Ugb3JkZXIsIGFuZCB0aGUgbnVtYmVyIG9mIHN1Y2ggdG9rZW5zIHdpbGwgYmVcbiAgICogcmV0dXJuZWQuICBUaGlzIG51bWJlciBtaWdodCBiZSB6ZXJvIG9yIHBvc2l0aXZlLlxuICAgKlxuICAgKiBJZiBub3QsIHRoZSByZXR1cm4gdmFsdWUgaXMgYGZhbHNlYCwgYW5kIHRoZSBuZXh0IHRva2VuIHJlbWFpbnMgYXQgdGhlXG4gICAqIHRvcCBvZiB0aGUgc3RhY2suXG4gICAqXG4gICAqIEluIGVpdGhlciBjYXNlLCB0aGUgbmV4dCB0b2tlbiB3aWxsIGJlIG9uIHRoZSB0b3Agb2YgdGhlIHN0YWNrLFxuICAgKiBvciB0aGUgc3RhY2sgd2lsbCBiZSBlbXB0eSAoaW4gY2FzZSBvZiBlbXB0eSBleHBhbnNpb25cbiAgICogYW5kIG5vIG90aGVyIHRva2VucykuXG4gICAqXG4gICAqIFVzZWQgdG8gaW1wbGVtZW50IGBleHBhbmRBZnRlckZ1dHVyZWAgYW5kIGBleHBhbmROZXh0VG9rZW5gLlxuICAgKlxuICAgKiBJZiBleHBhbmRhYmxlT25seSwgb25seSBleHBhbmRhYmxlIHRva2VucyBhcmUgZXhwYW5kZWQgYW5kXG4gICAqIGFuIHVuZGVmaW5lZCBjb250cm9sIHNlcXVlbmNlIHJlc3VsdHMgaW4gYW4gZXJyb3IuXG4gICAqL1xuXG5cbiAgZXhwYW5kT25jZShleHBhbmRhYmxlT25seSkge1xuICAgIGNvbnN0IHRvcFRva2VuID0gdGhpcy5wb3BUb2tlbigpO1xuICAgIGNvbnN0IG5hbWUgPSB0b3BUb2tlbi50ZXh0O1xuICAgIGNvbnN0IGV4cGFuc2lvbiA9ICF0b3BUb2tlbi5ub2V4cGFuZCA/IHRoaXMuX2dldEV4cGFuc2lvbihuYW1lKSA6IG51bGw7XG5cbiAgICBpZiAoZXhwYW5zaW9uID09IG51bGwgfHwgZXhwYW5kYWJsZU9ubHkgJiYgZXhwYW5zaW9uLnVuZXhwYW5kYWJsZSkge1xuICAgICAgaWYgKGV4cGFuZGFibGVPbmx5ICYmIGV4cGFuc2lvbiA9PSBudWxsICYmIG5hbWVbMF0gPT09IFwiXFxcXFwiICYmICF0aGlzLmlzRGVmaW5lZChuYW1lKSkge1xuICAgICAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJVbmRlZmluZWQgY29udHJvbCBzZXF1ZW5jZTogXCIgKyBuYW1lKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5wdXNoVG9rZW4odG9wVG9rZW4pO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuY291bnRFeHBhbnNpb24oMSk7XG4gICAgbGV0IHRva2VucyA9IGV4cGFuc2lvbi50b2tlbnM7XG4gICAgY29uc3QgYXJncyA9IHRoaXMuY29uc3VtZUFyZ3MoZXhwYW5zaW9uLm51bUFyZ3MsIGV4cGFuc2lvbi5kZWxpbWl0ZXJzKTtcblxuICAgIGlmIChleHBhbnNpb24ubnVtQXJncykge1xuICAgICAgLy8gcGFzdGUgYXJndW1lbnRzIGluIHBsYWNlIG9mIHRoZSBwbGFjZWhvbGRlcnNcbiAgICAgIHRva2VucyA9IHRva2Vucy5zbGljZSgpOyAvLyBtYWtlIGEgc2hhbGxvdyBjb3B5XG5cbiAgICAgIGZvciAobGV0IGkgPSB0b2tlbnMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgbGV0IHRvayA9IHRva2Vuc1tpXTtcblxuICAgICAgICBpZiAodG9rLnRleHQgPT09IFwiI1wiKSB7XG4gICAgICAgICAgaWYgKGkgPT09IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIkluY29tcGxldGUgcGxhY2Vob2xkZXIgYXQgZW5kIG9mIG1hY3JvIGJvZHlcIiwgdG9rKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0b2sgPSB0b2tlbnNbLS1pXTsgLy8gbmV4dCB0b2tlbiBvbiBzdGFja1xuXG4gICAgICAgICAgaWYgKHRvay50ZXh0ID09PSBcIiNcIikge1xuICAgICAgICAgICAgLy8gIyMg4oaSICNcbiAgICAgICAgICAgIHRva2Vucy5zcGxpY2UoaSArIDEsIDEpOyAvLyBkcm9wIGZpcnN0ICNcbiAgICAgICAgICB9IGVsc2UgaWYgKC9eWzEtOV0kLy50ZXN0KHRvay50ZXh0KSkge1xuICAgICAgICAgICAgLy8gcmVwbGFjZSB0aGUgcGxhY2Vob2xkZXIgd2l0aCB0aGUgaW5kaWNhdGVkIGFyZ3VtZW50XG4gICAgICAgICAgICB0b2tlbnMuc3BsaWNlKGksIDIsIC4uLmFyZ3NbK3Rvay50ZXh0IC0gMV0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJOb3QgYSB2YWxpZCBhcmd1bWVudCBudW1iZXJcIiwgdG9rKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IC8vIENvbmNhdGVuYXRlIGV4cGFuc2lvbiBvbnRvIHRvcCBvZiBzdGFjay5cblxuXG4gICAgdGhpcy5wdXNoVG9rZW5zKHRva2Vucyk7XG4gICAgcmV0dXJuIHRva2Vucy5sZW5ndGg7XG4gIH1cbiAgLyoqXG4gICAqIEV4cGFuZCB0aGUgbmV4dCB0b2tlbiBvbmx5IG9uY2UgKGlmIHBvc3NpYmxlKSwgYW5kIHJldHVybiB0aGUgcmVzdWx0aW5nXG4gICAqIHRvcCB0b2tlbiBvbiB0aGUgc3RhY2sgKHdpdGhvdXQgcmVtb3ZpbmcgYW55dGhpbmcgZnJvbSB0aGUgc3RhY2spLlxuICAgKiBTaW1pbGFyIGluIGJlaGF2aW9yIHRvIFRlWCdzIGBcXGV4cGFuZGFmdGVyXFxmdXR1cmVsZXRgLlxuICAgKiBFcXVpdmFsZW50IHRvIGV4cGFuZE9uY2UoKSBmb2xsb3dlZCBieSBmdXR1cmUoKS5cbiAgICovXG5cblxuICBleHBhbmRBZnRlckZ1dHVyZSgpIHtcbiAgICB0aGlzLmV4cGFuZE9uY2UoKTtcbiAgICByZXR1cm4gdGhpcy5mdXR1cmUoKTtcbiAgfVxuICAvKipcbiAgICogUmVjdXJzaXZlbHkgZXhwYW5kIGZpcnN0IHRva2VuLCB0aGVuIHJldHVybiBmaXJzdCBub24tZXhwYW5kYWJsZSB0b2tlbi5cbiAgICovXG5cblxuICBleHBhbmROZXh0VG9rZW4oKSB7XG4gICAgZm9yICg7Oykge1xuICAgICAgaWYgKHRoaXMuZXhwYW5kT25jZSgpID09PSBmYWxzZSkge1xuICAgICAgICAvLyBmdWxseSBleHBhbmRlZFxuICAgICAgICBjb25zdCB0b2tlbiA9IHRoaXMuc3RhY2sucG9wKCk7IC8vIHRoZSB0b2tlbiBhZnRlciBcXG5vZXhwYW5kIGlzIGludGVycHJldGVkIGFzIGlmIGl0cyBtZWFuaW5nXG4gICAgICAgIC8vIHdlcmUg4oCYXFxyZWxheOKAmVxuXG4gICAgICAgIGlmICh0b2tlbi50cmVhdEFzUmVsYXgpIHtcbiAgICAgICAgICB0b2tlbi50ZXh0ID0gXCJcXFxccmVsYXhcIjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0b2tlbjtcbiAgICAgIH1cbiAgICB9IC8vIEZsb3cgdW5hYmxlIHRvIGZpZ3VyZSBvdXQgdGhhdCB0aGlzIHBhdGh3YXkgaXMgaW1wb3NzaWJsZS5cbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svZmxvdy9pc3N1ZXMvNDgwOFxuXG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnJlYWNoYWJsZVxuICB9XG4gIC8qKlxuICAgKiBGdWxseSBleHBhbmQgdGhlIGdpdmVuIG1hY3JvIG5hbWUgYW5kIHJldHVybiB0aGUgcmVzdWx0aW5nIGxpc3Qgb2ZcbiAgICogdG9rZW5zLCBvciByZXR1cm4gYHVuZGVmaW5lZGAgaWYgbm8gc3VjaCBtYWNybyBpcyBkZWZpbmVkLlxuICAgKi9cblxuXG4gIGV4cGFuZE1hY3JvKG5hbWUpIHtcbiAgICByZXR1cm4gdGhpcy5tYWNyb3MuaGFzKG5hbWUpID8gdGhpcy5leHBhbmRUb2tlbnMoW25ldyBUb2tlbihuYW1lKV0pIDogdW5kZWZpbmVkO1xuICB9XG4gIC8qKlxuICAgKiBGdWxseSBleHBhbmQgdGhlIGdpdmVuIHRva2VuIHN0cmVhbSBhbmQgcmV0dXJuIHRoZSByZXN1bHRpbmcgbGlzdCBvZlxuICAgKiB0b2tlbnMuICBOb3RlIHRoYXQgdGhlIGlucHV0IHRva2VucyBhcmUgaW4gcmV2ZXJzZSBvcmRlciwgYnV0IHRoZVxuICAgKiBvdXRwdXQgdG9rZW5zIGFyZSBpbiBmb3J3YXJkIG9yZGVyLlxuICAgKi9cblxuXG4gIGV4cGFuZFRva2Vucyh0b2tlbnMpIHtcbiAgICBjb25zdCBvdXRwdXQgPSBbXTtcbiAgICBjb25zdCBvbGRTdGFja0xlbmd0aCA9IHRoaXMuc3RhY2subGVuZ3RoO1xuICAgIHRoaXMucHVzaFRva2Vucyh0b2tlbnMpO1xuXG4gICAgd2hpbGUgKHRoaXMuc3RhY2subGVuZ3RoID4gb2xkU3RhY2tMZW5ndGgpIHtcbiAgICAgIC8vIEV4cGFuZCBvbmx5IGV4cGFuZGFibGUgdG9rZW5zXG4gICAgICBpZiAodGhpcy5leHBhbmRPbmNlKHRydWUpID09PSBmYWxzZSkge1xuICAgICAgICAvLyBmdWxseSBleHBhbmRlZFxuICAgICAgICBjb25zdCB0b2tlbiA9IHRoaXMuc3RhY2sucG9wKCk7XG5cbiAgICAgICAgaWYgKHRva2VuLnRyZWF0QXNSZWxheCkge1xuICAgICAgICAgIC8vIHRoZSBleHBhbnNpb24gb2YgXFxub2V4cGFuZCBpcyB0aGUgdG9rZW4gaXRzZWxmXG4gICAgICAgICAgdG9rZW4ubm9leHBhbmQgPSBmYWxzZTtcbiAgICAgICAgICB0b2tlbi50cmVhdEFzUmVsYXggPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIG91dHB1dC5wdXNoKHRva2VuKTtcbiAgICAgIH1cbiAgICB9IC8vIENvdW50IGFsbCBvZiB0aGVzZSB0b2tlbnMgYXMgYWRkaXRpb25hbCBleHBhbnNpb25zLCB0byBwcmV2ZW50XG4gICAgLy8gZXhwb25lbnRpYWwgYmxvd3VwIGZyb20gbGluZWFybHkgbWFueSBcXGVkZWYncy5cblxuXG4gICAgdGhpcy5jb3VudEV4cGFuc2lvbihvdXRwdXQubGVuZ3RoKTtcbiAgICByZXR1cm4gb3V0cHV0O1xuICB9XG4gIC8qKlxuICAgKiBGdWxseSBleHBhbmQgdGhlIGdpdmVuIG1hY3JvIG5hbWUgYW5kIHJldHVybiB0aGUgcmVzdWx0IGFzIGEgc3RyaW5nLFxuICAgKiBvciByZXR1cm4gYHVuZGVmaW5lZGAgaWYgbm8gc3VjaCBtYWNybyBpcyBkZWZpbmVkLlxuICAgKi9cblxuXG4gIGV4cGFuZE1hY3JvQXNUZXh0KG5hbWUpIHtcbiAgICBjb25zdCB0b2tlbnMgPSB0aGlzLmV4cGFuZE1hY3JvKG5hbWUpO1xuXG4gICAgaWYgKHRva2Vucykge1xuICAgICAgcmV0dXJuIHRva2Vucy5tYXAodG9rZW4gPT4gdG9rZW4udGV4dCkuam9pbihcIlwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRva2VucztcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGV4cGFuZGVkIG1hY3JvIGFzIGEgcmV2ZXJzZWQgYXJyYXkgb2YgdG9rZW5zIGFuZCBhIG1hY3JvXG4gICAqIGFyZ3VtZW50IGNvdW50LiAgT3IgcmV0dXJucyBgbnVsbGAgaWYgbm8gc3VjaCBtYWNyby5cbiAgICovXG5cblxuICBfZ2V0RXhwYW5zaW9uKG5hbWUpIHtcbiAgICBjb25zdCBkZWZpbml0aW9uID0gdGhpcy5tYWNyb3MuZ2V0KG5hbWUpO1xuXG4gICAgaWYgKGRlZmluaXRpb24gPT0gbnVsbCkge1xuICAgICAgLy8gbWFpbmx5IGNoZWNraW5nIGZvciB1bmRlZmluZWQgaGVyZVxuICAgICAgcmV0dXJuIGRlZmluaXRpb247XG4gICAgfSAvLyBJZiBhIHNpbmdsZSBjaGFyYWN0ZXIgaGFzIGFuIGFzc29jaWF0ZWQgY2F0Y29kZSBvdGhlciB0aGFuIDEzXG4gICAgLy8gKGFjdGl2ZSBjaGFyYWN0ZXIpLCB0aGVuIGRvbid0IGV4cGFuZCBpdC5cblxuXG4gICAgaWYgKG5hbWUubGVuZ3RoID09PSAxKSB7XG4gICAgICBjb25zdCBjYXRjb2RlID0gdGhpcy5sZXhlci5jYXRjb2Rlc1tuYW1lXTtcblxuICAgICAgaWYgKGNhdGNvZGUgIT0gbnVsbCAmJiBjYXRjb2RlICE9PSAxMykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgZXhwYW5zaW9uID0gdHlwZW9mIGRlZmluaXRpb24gPT09IFwiZnVuY3Rpb25cIiA/IGRlZmluaXRpb24odGhpcykgOiBkZWZpbml0aW9uO1xuXG4gICAgaWYgKHR5cGVvZiBleHBhbnNpb24gPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIGxldCBudW1BcmdzID0gMDtcblxuICAgICAgaWYgKGV4cGFuc2lvbi5pbmRleE9mKFwiI1wiKSAhPT0gLTEpIHtcbiAgICAgICAgY29uc3Qgc3RyaXBwZWQgPSBleHBhbnNpb24ucmVwbGFjZSgvIyMvZywgXCJcIik7XG5cbiAgICAgICAgd2hpbGUgKHN0cmlwcGVkLmluZGV4T2YoXCIjXCIgKyAobnVtQXJncyArIDEpKSAhPT0gLTEpIHtcbiAgICAgICAgICArK251bUFyZ3M7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgYm9keUxleGVyID0gbmV3IExleGVyKGV4cGFuc2lvbiwgdGhpcy5zZXR0aW5ncyk7XG4gICAgICBjb25zdCB0b2tlbnMgPSBbXTtcbiAgICAgIGxldCB0b2sgPSBib2R5TGV4ZXIubGV4KCk7XG5cbiAgICAgIHdoaWxlICh0b2sudGV4dCAhPT0gXCJFT0ZcIikge1xuICAgICAgICB0b2tlbnMucHVzaCh0b2spO1xuICAgICAgICB0b2sgPSBib2R5TGV4ZXIubGV4KCk7XG4gICAgICB9XG5cbiAgICAgIHRva2Vucy5yZXZlcnNlKCk7IC8vIHRvIGZpdCBpbiB3aXRoIHN0YWNrIHVzaW5nIHB1c2ggYW5kIHBvcFxuXG4gICAgICBjb25zdCBleHBhbmRlZCA9IHtcbiAgICAgICAgdG9rZW5zLFxuICAgICAgICBudW1BcmdzXG4gICAgICB9O1xuICAgICAgcmV0dXJuIGV4cGFuZGVkO1xuICAgIH1cblxuICAgIHJldHVybiBleHBhbnNpb247XG4gIH1cbiAgLyoqXG4gICAqIERldGVybWluZSB3aGV0aGVyIGEgY29tbWFuZCBpcyBjdXJyZW50bHkgXCJkZWZpbmVkXCIgKGhhcyBzb21lXG4gICAqIGZ1bmN0aW9uYWxpdHkpLCBtZWFuaW5nIHRoYXQgaXQncyBhIG1hY3JvIChpbiB0aGUgY3VycmVudCBncm91cCksXG4gICAqIGEgZnVuY3Rpb24sIGEgc3ltYm9sLCBvciBvbmUgb2YgdGhlIHNwZWNpYWwgY29tbWFuZHMgbGlzdGVkIGluXG4gICAqIGBpbXBsaWNpdENvbW1hbmRzYC5cbiAgICovXG5cblxuICBpc0RlZmluZWQobmFtZSkge1xuICAgIHJldHVybiB0aGlzLm1hY3Jvcy5oYXMobmFtZSkgfHwgc3JjX2Z1bmN0aW9ucy5oYXNPd25Qcm9wZXJ0eShuYW1lKSB8fCBzcmNfc3ltYm9scy5tYXRoLmhhc093blByb3BlcnR5KG5hbWUpIHx8IHNyY19zeW1ib2xzLnRleHQuaGFzT3duUHJvcGVydHkobmFtZSkgfHwgaW1wbGljaXRDb21tYW5kcy5oYXNPd25Qcm9wZXJ0eShuYW1lKTtcbiAgfVxuICAvKipcbiAgICogRGV0ZXJtaW5lIHdoZXRoZXIgYSBjb21tYW5kIGlzIGV4cGFuZGFibGUuXG4gICAqL1xuXG5cbiAgaXNFeHBhbmRhYmxlKG5hbWUpIHtcbiAgICBjb25zdCBtYWNybyA9IHRoaXMubWFjcm9zLmdldChuYW1lKTtcbiAgICByZXR1cm4gbWFjcm8gIT0gbnVsbCA/IHR5cGVvZiBtYWNybyA9PT0gXCJzdHJpbmdcIiB8fCB0eXBlb2YgbWFjcm8gPT09IFwiZnVuY3Rpb25cIiB8fCAhbWFjcm8udW5leHBhbmRhYmxlIDogc3JjX2Z1bmN0aW9ucy5oYXNPd25Qcm9wZXJ0eShuYW1lKSAmJiAhc3JjX2Z1bmN0aW9uc1tuYW1lXS5wcmltaXRpdmU7XG4gIH1cblxufVxuOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL3VuaWNvZGVTdXBPclN1Yi5qc1xuLy8gSGVscGVycyBmb3IgUGFyc2VyLmpzIGhhbmRsaW5nIG9mIFVuaWNvZGUgKHN1YnxzdXBlcilzY3JpcHQgY2hhcmFjdGVycy5cbmNvbnN0IHVuaWNvZGVTdWJSZWdFeCA9IC9eW+KCiuKCi+KCjOKCjeKCjuKCgOKCgeKCguKCg+KChOKCheKChuKCh+KCiOKCieKCkOKCkeKCleG1ouKxvOKCluKCl+KCmOKCmeKCkuKCmuG1o+KCm+KCnOG1pOG1peKCk+G1puG1p+G1qOG1qeG1ql0vO1xuY29uc3QgdVN1YnNBbmRTdXBzID0gT2JqZWN0LmZyZWV6ZSh7XG4gICfigoonOiAnKycsXG4gICfigosnOiAnLScsXG4gICfigownOiAnPScsXG4gICfigo0nOiAnKCcsXG4gICfigo4nOiAnKScsXG4gICfigoAnOiAnMCcsXG4gICfigoEnOiAnMScsXG4gICfigoInOiAnMicsXG4gICfigoMnOiAnMycsXG4gICfigoQnOiAnNCcsXG4gICfigoUnOiAnNScsXG4gICfigoYnOiAnNicsXG4gICfigocnOiAnNycsXG4gICfigognOiAnOCcsXG4gICfigoknOiAnOScsXG4gICdcXHUyMDkwJzogJ2EnLFxuICAnXFx1MjA5MSc6ICdlJyxcbiAgJ1xcdTIwOTUnOiAnaCcsXG4gICdcXHUxRDYyJzogJ2knLFxuICAnXFx1MkM3Qyc6ICdqJyxcbiAgJ1xcdTIwOTYnOiAnaycsXG4gICdcXHUyMDk3JzogJ2wnLFxuICAnXFx1MjA5OCc6ICdtJyxcbiAgJ1xcdTIwOTknOiAnbicsXG4gICdcXHUyMDkyJzogJ28nLFxuICAnXFx1MjA5QSc6ICdwJyxcbiAgJ1xcdTFENjMnOiAncicsXG4gICdcXHUyMDlCJzogJ3MnLFxuICAnXFx1MjA5Qyc6ICd0JyxcbiAgJ1xcdTFENjQnOiAndScsXG4gICdcXHUxRDY1JzogJ3YnLFxuICAnXFx1MjA5Myc6ICd4JyxcbiAgJ1xcdTFENjYnOiAnzrInLFxuICAnXFx1MUQ2Nyc6ICfOsycsXG4gICdcXHUxRDY4JzogJ8+BJyxcbiAgJ1xcdTFENjknOiAnXFx1MDNkNScsXG4gICdcXHUxRDZBJzogJ8+HJyxcbiAgJ+KBuic6ICcrJyxcbiAgJ+KBuyc6ICctJyxcbiAgJ+KBvCc6ICc9JyxcbiAgJ+KBvSc6ICcoJyxcbiAgJ+KBvic6ICcpJyxcbiAgJ+KBsCc6ICcwJyxcbiAgJ8K5JzogJzEnLFxuICAnwrInOiAnMicsXG4gICfCsyc6ICczJyxcbiAgJ+KBtCc6ICc0JyxcbiAgJ+KBtSc6ICc1JyxcbiAgJ+KBtic6ICc2JyxcbiAgJ+KBtyc6ICc3JyxcbiAgJ+KBuCc6ICc4JyxcbiAgJ+KBuSc6ICc5JyxcbiAgJ1xcdTFEMkMnOiAnQScsXG4gICdcXHUxRDJFJzogJ0InLFxuICAnXFx1MUQzMCc6ICdEJyxcbiAgJ1xcdTFEMzEnOiAnRScsXG4gICdcXHUxRDMzJzogJ0cnLFxuICAnXFx1MUQzNCc6ICdIJyxcbiAgJ1xcdTFEMzUnOiAnSScsXG4gICdcXHUxRDM2JzogJ0onLFxuICAnXFx1MUQzNyc6ICdLJyxcbiAgJ1xcdTFEMzgnOiAnTCcsXG4gICdcXHUxRDM5JzogJ00nLFxuICAnXFx1MUQzQSc6ICdOJyxcbiAgJ1xcdTFEM0MnOiAnTycsXG4gICdcXHUxRDNFJzogJ1AnLFxuICAnXFx1MUQzRic6ICdSJyxcbiAgJ1xcdTFENDAnOiAnVCcsXG4gICdcXHUxRDQxJzogJ1UnLFxuICAnXFx1MkM3RCc6ICdWJyxcbiAgJ1xcdTFENDInOiAnVycsXG4gICdcXHUxRDQzJzogJ2EnLFxuICAnXFx1MUQ0Nyc6ICdiJyxcbiAgJ1xcdTFEOUMnOiAnYycsXG4gICdcXHUxRDQ4JzogJ2QnLFxuICAnXFx1MUQ0OSc6ICdlJyxcbiAgJ1xcdTFEQTAnOiAnZicsXG4gICdcXHUxRDREJzogJ2cnLFxuICAnXFx1MDJCMCc6ICdoJyxcbiAgJ1xcdTIwNzEnOiAnaScsXG4gICdcXHUwMkIyJzogJ2onLFxuICAnXFx1MUQ0Ric6ICdrJyxcbiAgJ1xcdTAyRTEnOiAnbCcsXG4gICdcXHUxRDUwJzogJ20nLFxuICAnXFx1MjA3Ric6ICduJyxcbiAgJ1xcdTFENTInOiAnbycsXG4gICdcXHUxRDU2JzogJ3AnLFxuICAnXFx1MDJCMyc6ICdyJyxcbiAgJ1xcdTAyRTInOiAncycsXG4gICdcXHUxRDU3JzogJ3QnLFxuICAnXFx1MUQ1OCc6ICd1JyxcbiAgJ1xcdTFENUInOiAndicsXG4gICdcXHUwMkI3JzogJ3cnLFxuICAnXFx1MDJFMyc6ICd4JyxcbiAgJ1xcdTAyQjgnOiAneScsXG4gICdcXHUxREJCJzogJ3onLFxuICAnXFx1MUQ1RCc6ICfOsicsXG4gICdcXHUxRDVFJzogJ86zJyxcbiAgJ1xcdTFENUYnOiAnzrQnLFxuICAnXFx1MUQ2MCc6ICdcXHUwM2Q1JyxcbiAgJ1xcdTFENjEnOiAnz4cnLFxuICAnXFx1MURCRic6ICfOuCdcbn0pO1xuOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL1BhcnNlci5qc1xuLyogZXNsaW50IG5vLWNvbnN0YW50LWNvbmRpdGlvbjowICovXG5cblxuXG5cblxuXG5cblxuXG5cbiAvLyBQcmUtZXZhbHVhdGUgYm90aCBtb2R1bGVzIGFzIHVuaWNvZGVTeW1ib2xzIHJlcXVpcmUgU3RyaW5nLm5vcm1hbGl6ZSgpXG5cbmNvbnN0IHVuaWNvZGVBY2NlbnRzID0ge1xuICBcIsyBXCI6IHtcbiAgICBcInRleHRcIjogXCJcXFxcJ1wiLFxuICAgIFwibWF0aFwiOiBcIlxcXFxhY3V0ZVwiXG4gIH0sXG4gIFwizIBcIjoge1xuICAgIFwidGV4dFwiOiBcIlxcXFxgXCIsXG4gICAgXCJtYXRoXCI6IFwiXFxcXGdyYXZlXCJcbiAgfSxcbiAgXCLMiFwiOiB7XG4gICAgXCJ0ZXh0XCI6IFwiXFxcXFxcXCJcIixcbiAgICBcIm1hdGhcIjogXCJcXFxcZGRvdFwiXG4gIH0sXG4gIFwizINcIjoge1xuICAgIFwidGV4dFwiOiBcIlxcXFx+XCIsXG4gICAgXCJtYXRoXCI6IFwiXFxcXHRpbGRlXCJcbiAgfSxcbiAgXCLMhFwiOiB7XG4gICAgXCJ0ZXh0XCI6IFwiXFxcXD1cIixcbiAgICBcIm1hdGhcIjogXCJcXFxcYmFyXCJcbiAgfSxcbiAgXCLMhlwiOiB7XG4gICAgXCJ0ZXh0XCI6IFwiXFxcXHVcIixcbiAgICBcIm1hdGhcIjogXCJcXFxcYnJldmVcIlxuICB9LFxuICBcIsyMXCI6IHtcbiAgICBcInRleHRcIjogXCJcXFxcdlwiLFxuICAgIFwibWF0aFwiOiBcIlxcXFxjaGVja1wiXG4gIH0sXG4gIFwizIJcIjoge1xuICAgIFwidGV4dFwiOiBcIlxcXFxeXCIsXG4gICAgXCJtYXRoXCI6IFwiXFxcXGhhdFwiXG4gIH0sXG4gIFwizIdcIjoge1xuICAgIFwidGV4dFwiOiBcIlxcXFwuXCIsXG4gICAgXCJtYXRoXCI6IFwiXFxcXGRvdFwiXG4gIH0sXG4gIFwizIpcIjoge1xuICAgIFwidGV4dFwiOiBcIlxcXFxyXCIsXG4gICAgXCJtYXRoXCI6IFwiXFxcXG1hdGhyaW5nXCJcbiAgfSxcbiAgXCLMi1wiOiB7XG4gICAgXCJ0ZXh0XCI6IFwiXFxcXEhcIlxuICB9LFxuICBcIsynXCI6IHtcbiAgICBcInRleHRcIjogXCJcXFxcY1wiXG4gIH1cbn07XG5jb25zdCB1bmljb2RlU3ltYm9scyA9IHtcbiAgXCLDoVwiOiBcImHMgVwiLFxuICBcIsOgXCI6IFwiYcyAXCIsXG4gIFwiw6RcIjogXCJhzIhcIixcbiAgXCLHn1wiOiBcImHMiMyEXCIsXG4gIFwiw6NcIjogXCJhzINcIixcbiAgXCLEgVwiOiBcImHMhFwiLFxuICBcIsSDXCI6IFwiYcyGXCIsXG4gIFwi4bqvXCI6IFwiYcyGzIFcIixcbiAgXCLhurFcIjogXCJhzIbMgFwiLFxuICBcIuG6tVwiOiBcImHMhsyDXCIsXG4gIFwix45cIjogXCJhzIxcIixcbiAgXCLDolwiOiBcImHMglwiLFxuICBcIuG6pVwiOiBcImHMgsyBXCIsXG4gIFwi4bqnXCI6IFwiYcyCzIBcIixcbiAgXCLhuqtcIjogXCJhzILMg1wiLFxuICBcIsinXCI6IFwiYcyHXCIsXG4gIFwix6FcIjogXCJhzIfMhFwiLFxuICBcIsOlXCI6IFwiYcyKXCIsXG4gIFwix7tcIjogXCJhzIrMgVwiLFxuICBcIuG4g1wiOiBcImLMh1wiLFxuICBcIsSHXCI6IFwiY8yBXCIsXG4gIFwi4biJXCI6IFwiY8ynzIFcIixcbiAgXCLEjVwiOiBcImPMjFwiLFxuICBcIsSJXCI6IFwiY8yCXCIsXG4gIFwixItcIjogXCJjzIdcIixcbiAgXCLDp1wiOiBcImPMp1wiLFxuICBcIsSPXCI6IFwiZMyMXCIsXG4gIFwi4biLXCI6IFwiZMyHXCIsXG4gIFwi4biRXCI6IFwiZMynXCIsXG4gIFwiw6lcIjogXCJlzIFcIixcbiAgXCLDqFwiOiBcImXMgFwiLFxuICBcIsOrXCI6IFwiZcyIXCIsXG4gIFwi4bq9XCI6IFwiZcyDXCIsXG4gIFwixJNcIjogXCJlzIRcIixcbiAgXCLhuJdcIjogXCJlzITMgVwiLFxuICBcIuG4lVwiOiBcImXMhMyAXCIsXG4gIFwixJVcIjogXCJlzIZcIixcbiAgXCLhuJ1cIjogXCJlzKfMhlwiLFxuICBcIsSbXCI6IFwiZcyMXCIsXG4gIFwiw6pcIjogXCJlzIJcIixcbiAgXCLhur9cIjogXCJlzILMgVwiLFxuICBcIuG7gVwiOiBcImXMgsyAXCIsXG4gIFwi4buFXCI6IFwiZcyCzINcIixcbiAgXCLEl1wiOiBcImXMh1wiLFxuICBcIsipXCI6IFwiZcynXCIsXG4gIFwi4bifXCI6IFwiZsyHXCIsXG4gIFwix7VcIjogXCJnzIFcIixcbiAgXCLhuKFcIjogXCJnzIRcIixcbiAgXCLEn1wiOiBcImfMhlwiLFxuICBcIsenXCI6IFwiZ8yMXCIsXG4gIFwixJ1cIjogXCJnzIJcIixcbiAgXCLEoVwiOiBcImfMh1wiLFxuICBcIsSjXCI6IFwiZ8ynXCIsXG4gIFwi4binXCI6IFwiaMyIXCIsXG4gIFwiyJ9cIjogXCJozIxcIixcbiAgXCLEpVwiOiBcImjMglwiLFxuICBcIuG4o1wiOiBcImjMh1wiLFxuICBcIuG4qVwiOiBcImjMp1wiLFxuICBcIsOtXCI6IFwiacyBXCIsXG4gIFwiw6xcIjogXCJpzIBcIixcbiAgXCLDr1wiOiBcImnMiFwiLFxuICBcIuG4r1wiOiBcImnMiMyBXCIsXG4gIFwixKlcIjogXCJpzINcIixcbiAgXCLEq1wiOiBcImnMhFwiLFxuICBcIsStXCI6IFwiacyGXCIsXG4gIFwix5BcIjogXCJpzIxcIixcbiAgXCLDrlwiOiBcImnMglwiLFxuICBcIsewXCI6IFwiasyMXCIsXG4gIFwixLVcIjogXCJqzIJcIixcbiAgXCLhuLFcIjogXCJrzIFcIixcbiAgXCLHqVwiOiBcImvMjFwiLFxuICBcIsS3XCI6IFwia8ynXCIsXG4gIFwixLpcIjogXCJszIFcIixcbiAgXCLEvlwiOiBcImzMjFwiLFxuICBcIsS8XCI6IFwibMynXCIsXG4gIFwi4bi/XCI6IFwibcyBXCIsXG4gIFwi4bmBXCI6IFwibcyHXCIsXG4gIFwixYRcIjogXCJuzIFcIixcbiAgXCLHuVwiOiBcIm7MgFwiLFxuICBcIsOxXCI6IFwibsyDXCIsXG4gIFwixYhcIjogXCJuzIxcIixcbiAgXCLhuYVcIjogXCJuzIdcIixcbiAgXCLFhlwiOiBcIm7Mp1wiLFxuICBcIsOzXCI6IFwib8yBXCIsXG4gIFwiw7JcIjogXCJvzIBcIixcbiAgXCLDtlwiOiBcIm/MiFwiLFxuICBcIsirXCI6IFwib8yIzIRcIixcbiAgXCLDtVwiOiBcIm/Mg1wiLFxuICBcIuG5jVwiOiBcIm/Mg8yBXCIsXG4gIFwi4bmPXCI6IFwib8yDzIhcIixcbiAgXCLIrVwiOiBcIm/Mg8yEXCIsXG4gIFwixY1cIjogXCJvzIRcIixcbiAgXCLhuZNcIjogXCJvzITMgVwiLFxuICBcIuG5kVwiOiBcIm/MhMyAXCIsXG4gIFwixY9cIjogXCJvzIZcIixcbiAgXCLHklwiOiBcIm/MjFwiLFxuICBcIsO0XCI6IFwib8yCXCIsXG4gIFwi4buRXCI6IFwib8yCzIFcIixcbiAgXCLhu5NcIjogXCJvzILMgFwiLFxuICBcIuG7l1wiOiBcIm/MgsyDXCIsXG4gIFwiyK9cIjogXCJvzIdcIixcbiAgXCLIsVwiOiBcIm/Mh8yEXCIsXG4gIFwixZFcIjogXCJvzItcIixcbiAgXCLhuZVcIjogXCJwzIFcIixcbiAgXCLhuZdcIjogXCJwzIdcIixcbiAgXCLFlVwiOiBcInLMgVwiLFxuICBcIsWZXCI6IFwicsyMXCIsXG4gIFwi4bmZXCI6IFwicsyHXCIsXG4gIFwixZdcIjogXCJyzKdcIixcbiAgXCLFm1wiOiBcInPMgVwiLFxuICBcIuG5pVwiOiBcInPMgcyHXCIsXG4gIFwixaFcIjogXCJzzIxcIixcbiAgXCLhuadcIjogXCJzzIzMh1wiLFxuICBcIsWdXCI6IFwic8yCXCIsXG4gIFwi4bmhXCI6IFwic8yHXCIsXG4gIFwixZ9cIjogXCJzzKdcIixcbiAgXCLhupdcIjogXCJ0zIhcIixcbiAgXCLFpVwiOiBcInTMjFwiLFxuICBcIuG5q1wiOiBcInTMh1wiLFxuICBcIsWjXCI6IFwidMynXCIsXG4gIFwiw7pcIjogXCJ1zIFcIixcbiAgXCLDuVwiOiBcInXMgFwiLFxuICBcIsO8XCI6IFwidcyIXCIsXG4gIFwix5hcIjogXCJ1zIjMgVwiLFxuICBcIsecXCI6IFwidcyIzIBcIixcbiAgXCLHllwiOiBcInXMiMyEXCIsXG4gIFwix5pcIjogXCJ1zIjMjFwiLFxuICBcIsWpXCI6IFwidcyDXCIsXG4gIFwi4bm5XCI6IFwidcyDzIFcIixcbiAgXCLFq1wiOiBcInXMhFwiLFxuICBcIuG5u1wiOiBcInXMhMyIXCIsXG4gIFwixa1cIjogXCJ1zIZcIixcbiAgXCLHlFwiOiBcInXMjFwiLFxuICBcIsO7XCI6IFwidcyCXCIsXG4gIFwixa9cIjogXCJ1zIpcIixcbiAgXCLFsVwiOiBcInXMi1wiLFxuICBcIuG5vVwiOiBcInbMg1wiLFxuICBcIuG6g1wiOiBcInfMgVwiLFxuICBcIuG6gVwiOiBcInfMgFwiLFxuICBcIuG6hVwiOiBcInfMiFwiLFxuICBcIsW1XCI6IFwid8yCXCIsXG4gIFwi4bqHXCI6IFwid8yHXCIsXG4gIFwi4bqYXCI6IFwid8yKXCIsXG4gIFwi4bqNXCI6IFwieMyIXCIsXG4gIFwi4bqLXCI6IFwieMyHXCIsXG4gIFwiw71cIjogXCJ5zIFcIixcbiAgXCLhu7NcIjogXCJ5zIBcIixcbiAgXCLDv1wiOiBcInnMiFwiLFxuICBcIuG7uVwiOiBcInnMg1wiLFxuICBcIsizXCI6IFwiecyEXCIsXG4gIFwixbdcIjogXCJ5zIJcIixcbiAgXCLhuo9cIjogXCJ5zIdcIixcbiAgXCLhuplcIjogXCJ5zIpcIixcbiAgXCLFulwiOiBcInrMgVwiLFxuICBcIsW+XCI6IFwiesyMXCIsXG4gIFwi4bqRXCI6IFwiesyCXCIsXG4gIFwixbxcIjogXCJ6zIdcIixcbiAgXCLDgVwiOiBcIkHMgVwiLFxuICBcIsOAXCI6IFwiQcyAXCIsXG4gIFwiw4RcIjogXCJBzIhcIixcbiAgXCLHnlwiOiBcIkHMiMyEXCIsXG4gIFwiw4NcIjogXCJBzINcIixcbiAgXCLEgFwiOiBcIkHMhFwiLFxuICBcIsSCXCI6IFwiQcyGXCIsXG4gIFwi4bquXCI6IFwiQcyGzIFcIixcbiAgXCLhurBcIjogXCJBzIbMgFwiLFxuICBcIuG6tFwiOiBcIkHMhsyDXCIsXG4gIFwix41cIjogXCJBzIxcIixcbiAgXCLDglwiOiBcIkHMglwiLFxuICBcIuG6pFwiOiBcIkHMgsyBXCIsXG4gIFwi4bqmXCI6IFwiQcyCzIBcIixcbiAgXCLhuqpcIjogXCJBzILMg1wiLFxuICBcIsimXCI6IFwiQcyHXCIsXG4gIFwix6BcIjogXCJBzIfMhFwiLFxuICBcIsOFXCI6IFwiQcyKXCIsXG4gIFwix7pcIjogXCJBzIrMgVwiLFxuICBcIuG4glwiOiBcIkLMh1wiLFxuICBcIsSGXCI6IFwiQ8yBXCIsXG4gIFwi4biIXCI6IFwiQ8ynzIFcIixcbiAgXCLEjFwiOiBcIkPMjFwiLFxuICBcIsSIXCI6IFwiQ8yCXCIsXG4gIFwixIpcIjogXCJDzIdcIixcbiAgXCLDh1wiOiBcIkPMp1wiLFxuICBcIsSOXCI6IFwiRMyMXCIsXG4gIFwi4biKXCI6IFwiRMyHXCIsXG4gIFwi4biQXCI6IFwiRMynXCIsXG4gIFwiw4lcIjogXCJFzIFcIixcbiAgXCLDiFwiOiBcIkXMgFwiLFxuICBcIsOLXCI6IFwiRcyIXCIsXG4gIFwi4bq8XCI6IFwiRcyDXCIsXG4gIFwixJJcIjogXCJFzIRcIixcbiAgXCLhuJZcIjogXCJFzITMgVwiLFxuICBcIuG4lFwiOiBcIkXMhMyAXCIsXG4gIFwixJRcIjogXCJFzIZcIixcbiAgXCLhuJxcIjogXCJFzKfMhlwiLFxuICBcIsSaXCI6IFwiRcyMXCIsXG4gIFwiw4pcIjogXCJFzIJcIixcbiAgXCLhur5cIjogXCJFzILMgVwiLFxuICBcIuG7gFwiOiBcIkXMgsyAXCIsXG4gIFwi4buEXCI6IFwiRcyCzINcIixcbiAgXCLEllwiOiBcIkXMh1wiLFxuICBcIsioXCI6IFwiRcynXCIsXG4gIFwi4bieXCI6IFwiRsyHXCIsXG4gIFwix7RcIjogXCJHzIFcIixcbiAgXCLhuKBcIjogXCJHzIRcIixcbiAgXCLEnlwiOiBcIkfMhlwiLFxuICBcIsemXCI6IFwiR8yMXCIsXG4gIFwixJxcIjogXCJHzIJcIixcbiAgXCLEoFwiOiBcIkfMh1wiLFxuICBcIsSiXCI6IFwiR8ynXCIsXG4gIFwi4bimXCI6IFwiSMyIXCIsXG4gIFwiyJ5cIjogXCJIzIxcIixcbiAgXCLEpFwiOiBcIkjMglwiLFxuICBcIuG4olwiOiBcIkjMh1wiLFxuICBcIuG4qFwiOiBcIkjMp1wiLFxuICBcIsONXCI6IFwiScyBXCIsXG4gIFwiw4xcIjogXCJJzIBcIixcbiAgXCLDj1wiOiBcIknMiFwiLFxuICBcIuG4rlwiOiBcIknMiMyBXCIsXG4gIFwixKhcIjogXCJJzINcIixcbiAgXCLEqlwiOiBcIknMhFwiLFxuICBcIsSsXCI6IFwiScyGXCIsXG4gIFwix49cIjogXCJJzIxcIixcbiAgXCLDjlwiOiBcIknMglwiLFxuICBcIsSwXCI6IFwiScyHXCIsXG4gIFwixLRcIjogXCJKzIJcIixcbiAgXCLhuLBcIjogXCJLzIFcIixcbiAgXCLHqFwiOiBcIkvMjFwiLFxuICBcIsS2XCI6IFwiS8ynXCIsXG4gIFwixLlcIjogXCJMzIFcIixcbiAgXCLEvVwiOiBcIkzMjFwiLFxuICBcIsS7XCI6IFwiTMynXCIsXG4gIFwi4bi+XCI6IFwiTcyBXCIsXG4gIFwi4bmAXCI6IFwiTcyHXCIsXG4gIFwixYNcIjogXCJOzIFcIixcbiAgXCLHuFwiOiBcIk7MgFwiLFxuICBcIsORXCI6IFwiTsyDXCIsXG4gIFwixYdcIjogXCJOzIxcIixcbiAgXCLhuYRcIjogXCJOzIdcIixcbiAgXCLFhVwiOiBcIk7Mp1wiLFxuICBcIsOTXCI6IFwiT8yBXCIsXG4gIFwiw5JcIjogXCJPzIBcIixcbiAgXCLDllwiOiBcIk/MiFwiLFxuICBcIsiqXCI6IFwiT8yIzIRcIixcbiAgXCLDlVwiOiBcIk/Mg1wiLFxuICBcIuG5jFwiOiBcIk/Mg8yBXCIsXG4gIFwi4bmOXCI6IFwiT8yDzIhcIixcbiAgXCLIrFwiOiBcIk/Mg8yEXCIsXG4gIFwixYxcIjogXCJPzIRcIixcbiAgXCLhuZJcIjogXCJPzITMgVwiLFxuICBcIuG5kFwiOiBcIk/MhMyAXCIsXG4gIFwixY5cIjogXCJPzIZcIixcbiAgXCLHkVwiOiBcIk/MjFwiLFxuICBcIsOUXCI6IFwiT8yCXCIsXG4gIFwi4buQXCI6IFwiT8yCzIFcIixcbiAgXCLhu5JcIjogXCJPzILMgFwiLFxuICBcIuG7llwiOiBcIk/MgsyDXCIsXG4gIFwiyK5cIjogXCJPzIdcIixcbiAgXCLIsFwiOiBcIk/Mh8yEXCIsXG4gIFwixZBcIjogXCJPzItcIixcbiAgXCLhuZRcIjogXCJQzIFcIixcbiAgXCLhuZZcIjogXCJQzIdcIixcbiAgXCLFlFwiOiBcIlLMgVwiLFxuICBcIsWYXCI6IFwiUsyMXCIsXG4gIFwi4bmYXCI6IFwiUsyHXCIsXG4gIFwixZZcIjogXCJSzKdcIixcbiAgXCLFmlwiOiBcIlPMgVwiLFxuICBcIuG5pFwiOiBcIlPMgcyHXCIsXG4gIFwixaBcIjogXCJTzIxcIixcbiAgXCLhuaZcIjogXCJTzIzMh1wiLFxuICBcIsWcXCI6IFwiU8yCXCIsXG4gIFwi4bmgXCI6IFwiU8yHXCIsXG4gIFwixZ5cIjogXCJTzKdcIixcbiAgXCLFpFwiOiBcIlTMjFwiLFxuICBcIuG5qlwiOiBcIlTMh1wiLFxuICBcIsWiXCI6IFwiVMynXCIsXG4gIFwiw5pcIjogXCJVzIFcIixcbiAgXCLDmVwiOiBcIlXMgFwiLFxuICBcIsOcXCI6IFwiVcyIXCIsXG4gIFwix5dcIjogXCJVzIjMgVwiLFxuICBcIsebXCI6IFwiVcyIzIBcIixcbiAgXCLHlVwiOiBcIlXMiMyEXCIsXG4gIFwix5lcIjogXCJVzIjMjFwiLFxuICBcIsWoXCI6IFwiVcyDXCIsXG4gIFwi4bm4XCI6IFwiVcyDzIFcIixcbiAgXCLFqlwiOiBcIlXMhFwiLFxuICBcIuG5ulwiOiBcIlXMhMyIXCIsXG4gIFwixaxcIjogXCJVzIZcIixcbiAgXCLHk1wiOiBcIlXMjFwiLFxuICBcIsObXCI6IFwiVcyCXCIsXG4gIFwixa5cIjogXCJVzIpcIixcbiAgXCLFsFwiOiBcIlXMi1wiLFxuICBcIuG5vFwiOiBcIlbMg1wiLFxuICBcIuG6glwiOiBcIlfMgVwiLFxuICBcIuG6gFwiOiBcIlfMgFwiLFxuICBcIuG6hFwiOiBcIlfMiFwiLFxuICBcIsW0XCI6IFwiV8yCXCIsXG4gIFwi4bqGXCI6IFwiV8yHXCIsXG4gIFwi4bqMXCI6IFwiWMyIXCIsXG4gIFwi4bqKXCI6IFwiWMyHXCIsXG4gIFwiw51cIjogXCJZzIFcIixcbiAgXCLhu7JcIjogXCJZzIBcIixcbiAgXCLFuFwiOiBcIlnMiFwiLFxuICBcIuG7uFwiOiBcIlnMg1wiLFxuICBcIsiyXCI6IFwiWcyEXCIsXG4gIFwixbZcIjogXCJZzIJcIixcbiAgXCLhuo5cIjogXCJZzIdcIixcbiAgXCLFuVwiOiBcIlrMgVwiLFxuICBcIsW9XCI6IFwiWsyMXCIsXG4gIFwi4bqQXCI6IFwiWsyCXCIsXG4gIFwixbtcIjogXCJazIdcIixcbiAgXCLOrFwiOiBcIs6xzIFcIixcbiAgXCLhvbBcIjogXCLOscyAXCIsXG4gIFwi4b6xXCI6IFwizrHMhFwiLFxuICBcIuG+sFwiOiBcIs6xzIZcIixcbiAgXCLOrVwiOiBcIs61zIFcIixcbiAgXCLhvbJcIjogXCLOtcyAXCIsXG4gIFwizq5cIjogXCLOt8yBXCIsXG4gIFwi4b20XCI6IFwizrfMgFwiLFxuICBcIs6vXCI6IFwizrnMgVwiLFxuICBcIuG9tlwiOiBcIs65zIBcIixcbiAgXCLPilwiOiBcIs65zIhcIixcbiAgXCLOkFwiOiBcIs65zIjMgVwiLFxuICBcIuG/klwiOiBcIs65zIjMgFwiLFxuICBcIuG/kVwiOiBcIs65zIRcIixcbiAgXCLhv5BcIjogXCLOucyGXCIsXG4gIFwiz4xcIjogXCLOv8yBXCIsXG4gIFwi4b24XCI6IFwizr/MgFwiLFxuICBcIs+NXCI6IFwiz4XMgVwiLFxuICBcIuG9ulwiOiBcIs+FzIBcIixcbiAgXCLPi1wiOiBcIs+FzIhcIixcbiAgXCLOsFwiOiBcIs+FzIjMgVwiLFxuICBcIuG/olwiOiBcIs+FzIjMgFwiLFxuICBcIuG/oVwiOiBcIs+FzIRcIixcbiAgXCLhv6BcIjogXCLPhcyGXCIsXG4gIFwiz45cIjogXCLPicyBXCIsXG4gIFwi4b28XCI6IFwiz4nMgFwiLFxuICBcIs6OXCI6IFwizqXMgVwiLFxuICBcIuG/qlwiOiBcIs6lzIBcIixcbiAgXCLOq1wiOiBcIs6lzIhcIixcbiAgXCLhv6lcIjogXCLOpcyEXCIsXG4gIFwi4b+oXCI6IFwizqXMhlwiLFxuICBcIs6PXCI6IFwizqnMgVwiLFxuICBcIuG/ulwiOiBcIs6pzIBcIlxufTtcblxuLyoqXG4gKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIHBhcnNlciB1c2VkIHRvIHBhcnNlIG91dCBhIFRlWCBleHByZXNzaW9uIGZyb20gdGhlXG4gKiBpbnB1dC4gU2luY2UgVGVYIGlzbid0IGNvbnRleHQtZnJlZSwgc3RhbmRhcmQgcGFyc2VycyBkb24ndCB3b3JrIHBhcnRpY3VsYXJseVxuICogd2VsbC5cbiAqXG4gKiBUaGUgc3RyYXRlZ3kgb2YgdGhpcyBwYXJzZXIgaXMgYXMgc3VjaDpcbiAqXG4gKiBUaGUgbWFpbiBmdW5jdGlvbnMgKHRoZSBgLnBhcnNlLi4uYCBvbmVzKSB0YWtlIGEgcG9zaXRpb24gaW4gdGhlIGN1cnJlbnRcbiAqIHBhcnNlIHN0cmluZyB0byBwYXJzZSB0b2tlbnMgZnJvbS4gVGhlIGxleGVyIChmb3VuZCBpbiBMZXhlci5qcywgc3RvcmVkIGF0XG4gKiB0aGlzLmd1bGxldC5sZXhlcikgYWxzbyBzdXBwb3J0cyBwdWxsaW5nIG91dCB0b2tlbnMgYXQgYXJiaXRyYXJ5IHBsYWNlcy4gV2hlblxuICogaW5kaXZpZHVhbCB0b2tlbnMgYXJlIG5lZWRlZCBhdCBhIHBvc2l0aW9uLCB0aGUgbGV4ZXIgaXMgY2FsbGVkIHRvIHB1bGwgb3V0IGFcbiAqIHRva2VuLCB3aGljaCBpcyB0aGVuIHVzZWQuXG4gKlxuICogVGhlIHBhcnNlciBoYXMgYSBwcm9wZXJ0eSBjYWxsZWQgXCJtb2RlXCIgaW5kaWNhdGluZyB0aGUgbW9kZSB0aGF0XG4gKiB0aGUgcGFyc2VyIGlzIGN1cnJlbnRseSBpbi4gQ3VycmVudGx5IGl0IGhhcyB0byBiZSBvbmUgb2YgXCJtYXRoXCIgb3JcbiAqIFwidGV4dFwiLCB3aGljaCBkZW5vdGVzIHdoZXRoZXIgdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQgaXMgYSBtYXRoLXlcbiAqIG9uZSBvciBhIHRleHQteSBvbmUgKGUuZy4gaW5zaWRlIFxcdGV4dCkuIEN1cnJlbnRseSwgdGhpcyBzZXJ2ZXMgdG9cbiAqIGxpbWl0IHRoZSBmdW5jdGlvbnMgd2hpY2ggY2FuIGJlIHVzZWQgaW4gdGV4dCBtb2RlLlxuICpcbiAqIFRoZSBtYWluIGZ1bmN0aW9ucyB0aGVuIHJldHVybiBhbiBvYmplY3Qgd2hpY2ggY29udGFpbnMgdGhlIHVzZWZ1bCBkYXRhIHRoYXRcbiAqIHdhcyBwYXJzZWQgYXQgaXRzIGdpdmVuIHBvaW50LCBhbmQgYSBuZXcgcG9zaXRpb24gYXQgdGhlIGVuZCBvZiB0aGUgcGFyc2VkXG4gKiBkYXRhLiBUaGUgbWFpbiBmdW5jdGlvbnMgY2FuIGNhbGwgZWFjaCBvdGhlciBhbmQgY29udGludWUgdGhlIHBhcnNpbmcgYnlcbiAqIHVzaW5nIHRoZSByZXR1cm5lZCBwb3NpdGlvbiBhcyBhIG5ldyBzdGFydGluZyBwb2ludC5cbiAqXG4gKiBUaGVyZSBhcmUgYWxzbyBleHRyYSBgLmhhbmRsZS4uLmAgZnVuY3Rpb25zLCB3aGljaCBwdWxsIG91dCBzb21lIHJldXNlZFxuICogZnVuY3Rpb25hbGl0eSBpbnRvIHNlbGYtY29udGFpbmVkIGZ1bmN0aW9ucy5cbiAqXG4gKiBUaGUgZnVuY3Rpb25zIHJldHVybiBQYXJzZU5vZGVzLlxuICovXG5jbGFzcyBQYXJzZXIge1xuICBjb25zdHJ1Y3RvcihpbnB1dCwgc2V0dGluZ3MpIHtcbiAgICB0aGlzLm1vZGUgPSB2b2lkIDA7XG4gICAgdGhpcy5ndWxsZXQgPSB2b2lkIDA7XG4gICAgdGhpcy5zZXR0aW5ncyA9IHZvaWQgMDtcbiAgICB0aGlzLmxlZnRyaWdodERlcHRoID0gdm9pZCAwO1xuICAgIHRoaXMubmV4dFRva2VuID0gdm9pZCAwO1xuICAgIC8vIFN0YXJ0IGluIG1hdGggbW9kZVxuICAgIHRoaXMubW9kZSA9IFwibWF0aFwiOyAvLyBDcmVhdGUgYSBuZXcgbWFjcm8gZXhwYW5kZXIgKGd1bGxldCkgYW5kIChpbmRpcmVjdGx5IHZpYSB0aGF0KSBhbHNvIGFcbiAgICAvLyBuZXcgbGV4ZXIgKG1vdXRoKSBmb3IgdGhpcyBwYXJzZXIgKHN0b21hY2gsIGluIHRoZSBsYW5ndWFnZSBvZiBUZVgpXG5cbiAgICB0aGlzLmd1bGxldCA9IG5ldyBNYWNyb0V4cGFuZGVyKGlucHV0LCBzZXR0aW5ncywgdGhpcy5tb2RlKTsgLy8gU3RvcmUgdGhlIHNldHRpbmdzIGZvciB1c2UgaW4gcGFyc2luZ1xuXG4gICAgdGhpcy5zZXR0aW5ncyA9IHNldHRpbmdzOyAvLyBDb3VudCBsZWZ0cmlnaHQgZGVwdGggKGZvciBcXG1pZGRsZSBlcnJvcnMpXG5cbiAgICB0aGlzLmxlZnRyaWdodERlcHRoID0gMDtcbiAgfVxuICAvKipcbiAgICogQ2hlY2tzIGEgcmVzdWx0IHRvIG1ha2Ugc3VyZSBpdCBoYXMgdGhlIHJpZ2h0IHR5cGUsIGFuZCB0aHJvd3MgYW5cbiAgICogYXBwcm9wcmlhdGUgZXJyb3Igb3RoZXJ3aXNlLlxuICAgKi9cblxuXG4gIGV4cGVjdCh0ZXh0LCBjb25zdW1lKSB7XG4gICAgaWYgKGNvbnN1bWUgPT09IHZvaWQgMCkge1xuICAgICAgY29uc3VtZSA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZmV0Y2goKS50ZXh0ICE9PSB0ZXh0KSB7XG4gICAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJFeHBlY3RlZCAnXCIgKyB0ZXh0ICsgXCInLCBnb3QgJ1wiICsgdGhpcy5mZXRjaCgpLnRleHQgKyBcIidcIiwgdGhpcy5mZXRjaCgpKTtcbiAgICB9XG5cbiAgICBpZiAoY29uc3VtZSkge1xuICAgICAgdGhpcy5jb25zdW1lKCk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBEaXNjYXJkcyB0aGUgY3VycmVudCBsb29rYWhlYWQgdG9rZW4sIGNvbnNpZGVyaW5nIGl0IGNvbnN1bWVkLlxuICAgKi9cblxuXG4gIGNvbnN1bWUoKSB7XG4gICAgdGhpcy5uZXh0VG9rZW4gPSBudWxsO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIGN1cnJlbnQgbG9va2FoZWFkIHRva2VuLCBvciBpZiB0aGVyZSBpc24ndCBvbmUgKGF0IHRoZVxuICAgKiBiZWdpbm5pbmcsIG9yIGlmIHRoZSBwcmV2aW91cyBsb29rYWhlYWQgdG9rZW4gd2FzIGNvbnN1bWUoKWQpLFxuICAgKiBmZXRjaCB0aGUgbmV4dCB0b2tlbiBhcyB0aGUgbmV3IGxvb2thaGVhZCB0b2tlbiBhbmQgcmV0dXJuIGl0LlxuICAgKi9cblxuXG4gIGZldGNoKCkge1xuICAgIGlmICh0aGlzLm5leHRUb2tlbiA9PSBudWxsKSB7XG4gICAgICB0aGlzLm5leHRUb2tlbiA9IHRoaXMuZ3VsbGV0LmV4cGFuZE5leHRUb2tlbigpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLm5leHRUb2tlbjtcbiAgfVxuICAvKipcbiAgICogU3dpdGNoZXMgYmV0d2VlbiBcInRleHRcIiBhbmQgXCJtYXRoXCIgbW9kZXMuXG4gICAqL1xuXG5cbiAgc3dpdGNoTW9kZShuZXdNb2RlKSB7XG4gICAgdGhpcy5tb2RlID0gbmV3TW9kZTtcbiAgICB0aGlzLmd1bGxldC5zd2l0Y2hNb2RlKG5ld01vZGUpO1xuICB9XG4gIC8qKlxuICAgKiBNYWluIHBhcnNpbmcgZnVuY3Rpb24sIHdoaWNoIHBhcnNlcyBhbiBlbnRpcmUgaW5wdXQuXG4gICAqL1xuXG5cbiAgcGFyc2UoKSB7XG4gICAgaWYgKCF0aGlzLnNldHRpbmdzLmdsb2JhbEdyb3VwKSB7XG4gICAgICAvLyBDcmVhdGUgYSBncm91cCBuYW1lc3BhY2UgZm9yIHRoZSBtYXRoIGV4cHJlc3Npb24uXG4gICAgICAvLyAoTGFUZVggY3JlYXRlcyBhIG5ldyBncm91cCBmb3IgZXZlcnkgJC4uLiQsICQkLi4uJCQsIFxcWy4uLlxcXS4pXG4gICAgICB0aGlzLmd1bGxldC5iZWdpbkdyb3VwKCk7XG4gICAgfSAvLyBVc2Ugb2xkIFxcY29sb3IgYmVoYXZpb3IgKHNhbWUgYXMgTGFUZVgncyBcXHRleHRjb2xvcikgaWYgcmVxdWVzdGVkLlxuICAgIC8vIFdlIGRvIHRoaXMgd2l0aGluIHRoZSBncm91cCBmb3IgdGhlIG1hdGggZXhwcmVzc2lvbiwgc28gaXQgZG9lc24ndFxuICAgIC8vIHBvbGx1dGUgc2V0dGluZ3MubWFjcm9zLlxuXG5cbiAgICBpZiAodGhpcy5zZXR0aW5ncy5jb2xvcklzVGV4dENvbG9yKSB7XG4gICAgICB0aGlzLmd1bGxldC5tYWNyb3Muc2V0KFwiXFxcXGNvbG9yXCIsIFwiXFxcXHRleHRjb2xvclwiKTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgLy8gVHJ5IHRvIHBhcnNlIHRoZSBpbnB1dFxuICAgICAgY29uc3QgcGFyc2UgPSB0aGlzLnBhcnNlRXhwcmVzc2lvbihmYWxzZSk7IC8vIElmIHdlIHN1Y2NlZWRlZCwgbWFrZSBzdXJlIHRoZXJlJ3MgYW4gRU9GIGF0IHRoZSBlbmRcblxuICAgICAgdGhpcy5leHBlY3QoXCJFT0ZcIik7IC8vIEVuZCB0aGUgZ3JvdXAgbmFtZXNwYWNlIGZvciB0aGUgZXhwcmVzc2lvblxuXG4gICAgICBpZiAoIXRoaXMuc2V0dGluZ3MuZ2xvYmFsR3JvdXApIHtcbiAgICAgICAgdGhpcy5ndWxsZXQuZW5kR3JvdXAoKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHBhcnNlOyAvLyBDbG9zZSBhbnkgbGVmdG92ZXIgZ3JvdXBzIGluIGNhc2Ugb2YgYSBwYXJzZSBlcnJvci5cbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5ndWxsZXQuZW5kR3JvdXBzKCk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBGdWxseSBwYXJzZSBhIHNlcGFyYXRlIHNlcXVlbmNlIG9mIHRva2VucyBhcyBhIHNlcGFyYXRlIGpvYi5cbiAgICogVG9rZW5zIHNob3VsZCBiZSBzcGVjaWZpZWQgaW4gcmV2ZXJzZSBvcmRlciwgYXMgaW4gYSBNYWNyb0RlZmluaXRpb24uXG4gICAqL1xuXG5cbiAgc3VicGFyc2UodG9rZW5zKSB7XG4gICAgLy8gU2F2ZSB0aGUgbmV4dCB0b2tlbiBmcm9tIHRoZSBjdXJyZW50IGpvYi5cbiAgICBjb25zdCBvbGRUb2tlbiA9IHRoaXMubmV4dFRva2VuO1xuICAgIHRoaXMuY29uc3VtZSgpOyAvLyBSdW4gdGhlIG5ldyBqb2IsIHRlcm1pbmF0aW5nIGl0IHdpdGggYW4gZXhjZXNzICd9J1xuXG4gICAgdGhpcy5ndWxsZXQucHVzaFRva2VuKG5ldyBUb2tlbihcIn1cIikpO1xuICAgIHRoaXMuZ3VsbGV0LnB1c2hUb2tlbnModG9rZW5zKTtcbiAgICBjb25zdCBwYXJzZSA9IHRoaXMucGFyc2VFeHByZXNzaW9uKGZhbHNlKTtcbiAgICB0aGlzLmV4cGVjdChcIn1cIik7IC8vIFJlc3RvcmUgdGhlIG5leHQgdG9rZW4gZnJvbSB0aGUgY3VycmVudCBqb2IuXG5cbiAgICB0aGlzLm5leHRUb2tlbiA9IG9sZFRva2VuO1xuICAgIHJldHVybiBwYXJzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZXMgYW4gXCJleHByZXNzaW9uXCIsIHdoaWNoIGlzIGEgbGlzdCBvZiBhdG9tcy5cbiAgICpcbiAgICogYGJyZWFrT25JbmZpeGA6IFNob3VsZCB0aGUgcGFyc2luZyBzdG9wIHdoZW4gd2UgaGl0IGluZml4IG5vZGVzPyBUaGlzXG4gICAqICAgICAgICAgICAgICAgICBoYXBwZW5zIHdoZW4gZnVuY3Rpb25zIGhhdmUgaGlnaGVyIHByZWNlZGVuY2UgaGFuIGluZml4XG4gICAqICAgICAgICAgICAgICAgICBub2RlcyBpbiBpbXBsaWNpdCBwYXJzZXMuXG4gICAqXG4gICAqIGBicmVha09uVG9rZW5UZXh0YDogVGhlIHRleHQgb2YgdGhlIHRva2VuIHRoYXQgdGhlIGV4cHJlc3Npb24gc2hvdWxkIGVuZFxuICAgKiAgICAgICAgICAgICAgICAgICAgIHdpdGgsIG9yIGBudWxsYCBpZiBzb21ldGhpbmcgZWxzZSBzaG91bGQgZW5kIHRoZVxuICAgKiAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb24uXG4gICAqL1xuICBwYXJzZUV4cHJlc3Npb24oYnJlYWtPbkluZml4LCBicmVha09uVG9rZW5UZXh0KSB7XG4gICAgY29uc3QgYm9keSA9IFtdOyAvLyBLZWVwIGFkZGluZyBhdG9tcyB0byB0aGUgYm9keSB1bnRpbCB3ZSBjYW4ndCBwYXJzZSBhbnkgbW9yZSBhdG9tcyAoZWl0aGVyXG4gICAgLy8gd2UgcmVhY2hlZCB0aGUgZW5kLCBhIH0sIG9yIGEgXFxyaWdodClcblxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAvLyBJZ25vcmUgc3BhY2VzIGluIG1hdGggbW9kZVxuICAgICAgaWYgKHRoaXMubW9kZSA9PT0gXCJtYXRoXCIpIHtcbiAgICAgICAgdGhpcy5jb25zdW1lU3BhY2VzKCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGxleCA9IHRoaXMuZmV0Y2goKTtcblxuICAgICAgaWYgKFBhcnNlci5lbmRPZkV4cHJlc3Npb24uaW5kZXhPZihsZXgudGV4dCkgIT09IC0xKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBpZiAoYnJlYWtPblRva2VuVGV4dCAmJiBsZXgudGV4dCA9PT0gYnJlYWtPblRva2VuVGV4dCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgaWYgKGJyZWFrT25JbmZpeCAmJiBzcmNfZnVuY3Rpb25zW2xleC50ZXh0XSAmJiBzcmNfZnVuY3Rpb25zW2xleC50ZXh0XS5pbmZpeCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgY29uc3QgYXRvbSA9IHRoaXMucGFyc2VBdG9tKGJyZWFrT25Ub2tlblRleHQpO1xuXG4gICAgICBpZiAoIWF0b20pIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9IGVsc2UgaWYgKGF0b20udHlwZSA9PT0gXCJpbnRlcm5hbFwiKSB7XG4gICAgICAgIC8vIEludGVybmFsIG5vZGVzIGRvIG5vdCBhcHBlYXIgaW4gcGFyc2UgdHJlZVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgYm9keS5wdXNoKGF0b20pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm1vZGUgPT09IFwidGV4dFwiKSB7XG4gICAgICB0aGlzLmZvcm1MaWdhdHVyZXMoYm9keSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlSW5maXhOb2Rlcyhib2R5KTtcbiAgfVxuICAvKipcbiAgICogUmV3cml0ZXMgaW5maXggb3BlcmF0b3JzIHN1Y2ggYXMgXFxvdmVyIHdpdGggY29ycmVzcG9uZGluZyBjb21tYW5kcyBzdWNoXG4gICAqIGFzIFxcZnJhYy5cbiAgICpcbiAgICogVGhlcmUgY2FuIG9ubHkgYmUgb25lIGluZml4IG9wZXJhdG9yIHBlciBncm91cC4gIElmIHRoZXJlJ3MgbW9yZSB0aGFuIG9uZVxuICAgKiB0aGVuIHRoZSBleHByZXNzaW9uIGlzIGFtYmlndW91cy4gIFRoaXMgY2FuIGJlIHJlc29sdmVkIGJ5IGFkZGluZyB7fS5cbiAgICovXG5cblxuICBoYW5kbGVJbmZpeE5vZGVzKGJvZHkpIHtcbiAgICBsZXQgb3ZlckluZGV4ID0gLTE7XG4gICAgbGV0IGZ1bmNOYW1lO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBib2R5Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoYm9keVtpXS50eXBlID09PSBcImluZml4XCIpIHtcbiAgICAgICAgaWYgKG92ZXJJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJvbmx5IG9uZSBpbmZpeCBvcGVyYXRvciBwZXIgZ3JvdXBcIiwgYm9keVtpXS50b2tlbik7XG4gICAgICAgIH1cblxuICAgICAgICBvdmVySW5kZXggPSBpO1xuICAgICAgICBmdW5jTmFtZSA9IGJvZHlbaV0ucmVwbGFjZVdpdGg7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG92ZXJJbmRleCAhPT0gLTEgJiYgZnVuY05hbWUpIHtcbiAgICAgIGxldCBudW1lck5vZGU7XG4gICAgICBsZXQgZGVub21Ob2RlO1xuICAgICAgY29uc3QgbnVtZXJCb2R5ID0gYm9keS5zbGljZSgwLCBvdmVySW5kZXgpO1xuICAgICAgY29uc3QgZGVub21Cb2R5ID0gYm9keS5zbGljZShvdmVySW5kZXggKyAxKTtcblxuICAgICAgaWYgKG51bWVyQm9keS5sZW5ndGggPT09IDEgJiYgbnVtZXJCb2R5WzBdLnR5cGUgPT09IFwib3JkZ3JvdXBcIikge1xuICAgICAgICBudW1lck5vZGUgPSBudW1lckJvZHlbMF07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBudW1lck5vZGUgPSB7XG4gICAgICAgICAgdHlwZTogXCJvcmRncm91cFwiLFxuICAgICAgICAgIG1vZGU6IHRoaXMubW9kZSxcbiAgICAgICAgICBib2R5OiBudW1lckJvZHlcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRlbm9tQm9keS5sZW5ndGggPT09IDEgJiYgZGVub21Cb2R5WzBdLnR5cGUgPT09IFwib3JkZ3JvdXBcIikge1xuICAgICAgICBkZW5vbU5vZGUgPSBkZW5vbUJvZHlbMF07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZW5vbU5vZGUgPSB7XG4gICAgICAgICAgdHlwZTogXCJvcmRncm91cFwiLFxuICAgICAgICAgIG1vZGU6IHRoaXMubW9kZSxcbiAgICAgICAgICBib2R5OiBkZW5vbUJvZHlcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgbGV0IG5vZGU7XG5cbiAgICAgIGlmIChmdW5jTmFtZSA9PT0gXCJcXFxcXFxcXGFib3ZlZnJhY1wiKSB7XG4gICAgICAgIG5vZGUgPSB0aGlzLmNhbGxGdW5jdGlvbihmdW5jTmFtZSwgW251bWVyTm9kZSwgYm9keVtvdmVySW5kZXhdLCBkZW5vbU5vZGVdLCBbXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBub2RlID0gdGhpcy5jYWxsRnVuY3Rpb24oZnVuY05hbWUsIFtudW1lck5vZGUsIGRlbm9tTm9kZV0sIFtdKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIFtub2RlXTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGJvZHk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBIYW5kbGUgYSBzdWJzY3JpcHQgb3Igc3VwZXJzY3JpcHQgd2l0aCBuaWNlIGVycm9ycy5cbiAgICovXG5cblxuICBoYW5kbGVTdXBTdWJzY3JpcHQobmFtZSAvLyBGb3IgZXJyb3IgcmVwb3J0aW5nLlxuICApIHtcbiAgICBjb25zdCBzeW1ib2xUb2tlbiA9IHRoaXMuZmV0Y2goKTtcbiAgICBjb25zdCBzeW1ib2wgPSBzeW1ib2xUb2tlbi50ZXh0O1xuICAgIHRoaXMuY29uc3VtZSgpO1xuICAgIHRoaXMuY29uc3VtZVNwYWNlcygpOyAvLyBpZ25vcmUgc3BhY2VzIGJlZm9yZSBzdXAvc3Vic2NyaXB0IGFyZ3VtZW50XG4gICAgLy8gU2tpcCBvdmVyIGFsbG93ZWQgaW50ZXJuYWwgbm9kZXMgc3VjaCBhcyBcXHJlbGF4XG5cbiAgICBsZXQgZ3JvdXA7XG5cbiAgICBkbyB7XG4gICAgICB2YXIgX2dyb3VwO1xuXG4gICAgICBncm91cCA9IHRoaXMucGFyc2VHcm91cChuYW1lKTtcbiAgICB9IHdoaWxlICgoKF9ncm91cCA9IGdyb3VwKSA9PSBudWxsID8gdm9pZCAwIDogX2dyb3VwLnR5cGUpID09PSBcImludGVybmFsXCIpO1xuXG4gICAgaWYgKCFncm91cCkge1xuICAgICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiRXhwZWN0ZWQgZ3JvdXAgYWZ0ZXIgJ1wiICsgc3ltYm9sICsgXCInXCIsIHN5bWJvbFRva2VuKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZ3JvdXA7XG4gIH1cbiAgLyoqXG4gICAqIENvbnZlcnRzIHRoZSB0ZXh0dWFsIGlucHV0IG9mIGFuIHVuc3VwcG9ydGVkIGNvbW1hbmQgaW50byBhIHRleHQgbm9kZVxuICAgKiBjb250YWluZWQgd2l0aGluIGEgY29sb3Igbm9kZSB3aG9zZSBjb2xvciBpcyBkZXRlcm1pbmVkIGJ5IGVycm9yQ29sb3JcbiAgICovXG5cblxuICBmb3JtYXRVbnN1cHBvcnRlZENtZCh0ZXh0KSB7XG4gICAgY29uc3QgdGV4dG9yZEFycmF5ID0gW107XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRleHQubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRleHRvcmRBcnJheS5wdXNoKHtcbiAgICAgICAgdHlwZTogXCJ0ZXh0b3JkXCIsXG4gICAgICAgIG1vZGU6IFwidGV4dFwiLFxuICAgICAgICB0ZXh0OiB0ZXh0W2ldXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCB0ZXh0Tm9kZSA9IHtcbiAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgbW9kZTogdGhpcy5tb2RlLFxuICAgICAgYm9keTogdGV4dG9yZEFycmF5XG4gICAgfTtcbiAgICBjb25zdCBjb2xvck5vZGUgPSB7XG4gICAgICB0eXBlOiBcImNvbG9yXCIsXG4gICAgICBtb2RlOiB0aGlzLm1vZGUsXG4gICAgICBjb2xvcjogdGhpcy5zZXR0aW5ncy5lcnJvckNvbG9yLFxuICAgICAgYm9keTogW3RleHROb2RlXVxuICAgIH07XG4gICAgcmV0dXJuIGNvbG9yTm9kZTtcbiAgfVxuICAvKipcbiAgICogUGFyc2VzIGEgZ3JvdXAgd2l0aCBvcHRpb25hbCBzdXBlci9zdWJzY3JpcHRzLlxuICAgKi9cblxuXG4gIHBhcnNlQXRvbShicmVha09uVG9rZW5UZXh0KSB7XG4gICAgLy8gVGhlIGJvZHkgb2YgYW4gYXRvbSBpcyBhbiBpbXBsaWNpdCBncm91cCwgc28gdGhhdCB0aGluZ3MgbGlrZVxuICAgIC8vIFxcbGVmdCh4XFxyaWdodCleMiB3b3JrIGNvcnJlY3RseS5cbiAgICBjb25zdCBiYXNlID0gdGhpcy5wYXJzZUdyb3VwKFwiYXRvbVwiLCBicmVha09uVG9rZW5UZXh0KTsgLy8gSW50ZXJuYWwgbm9kZXMgKGUuZy4gXFxyZWxheCkgY2Fubm90IHN1cHBvcnQgc3VwZXIvc3Vic2NyaXB0cy5cbiAgICAvLyBJbnN0ZWFkIHdlIHdpbGwgcGljayB1cCBzdXBlci9zdWJzY3JpcHRzIHdpdGggYmxhbmsgYmFzZSBuZXh0IHJvdW5kLlxuXG4gICAgaWYgKChiYXNlID09IG51bGwgPyB2b2lkIDAgOiBiYXNlLnR5cGUpID09PSBcImludGVybmFsXCIpIHtcbiAgICAgIHJldHVybiBiYXNlO1xuICAgIH0gLy8gSW4gdGV4dCBtb2RlLCB3ZSBkb24ndCBoYXZlIHN1cGVyc2NyaXB0cyBvciBzdWJzY3JpcHRzXG5cblxuICAgIGlmICh0aGlzLm1vZGUgPT09IFwidGV4dFwiKSB7XG4gICAgICByZXR1cm4gYmFzZTtcbiAgICB9IC8vIE5vdGUgdGhhdCBiYXNlIG1heSBiZSBlbXB0eSAoaS5lLiBudWxsKSBhdCB0aGlzIHBvaW50LlxuXG5cbiAgICBsZXQgc3VwZXJzY3JpcHQ7XG4gICAgbGV0IHN1YnNjcmlwdDtcblxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAvLyBHdWFyYW50ZWVkIGluIG1hdGggbW9kZSwgc28gZWF0IGFueSBzcGFjZXMgZmlyc3QuXG4gICAgICB0aGlzLmNvbnN1bWVTcGFjZXMoKTsgLy8gTGV4IHRoZSBmaXJzdCB0b2tlblxuXG4gICAgICBjb25zdCBsZXggPSB0aGlzLmZldGNoKCk7XG5cbiAgICAgIGlmIChsZXgudGV4dCA9PT0gXCJcXFxcbGltaXRzXCIgfHwgbGV4LnRleHQgPT09IFwiXFxcXG5vbGltaXRzXCIpIHtcbiAgICAgICAgLy8gV2UgZ290IGEgbGltaXQgY29udHJvbFxuICAgICAgICBpZiAoYmFzZSAmJiBiYXNlLnR5cGUgPT09IFwib3BcIikge1xuICAgICAgICAgIGNvbnN0IGxpbWl0cyA9IGxleC50ZXh0ID09PSBcIlxcXFxsaW1pdHNcIjtcbiAgICAgICAgICBiYXNlLmxpbWl0cyA9IGxpbWl0cztcbiAgICAgICAgICBiYXNlLmFsd2F5c0hhbmRsZVN1cFN1YiA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAoYmFzZSAmJiBiYXNlLnR5cGUgPT09IFwib3BlcmF0b3JuYW1lXCIpIHtcbiAgICAgICAgICBpZiAoYmFzZS5hbHdheXNIYW5kbGVTdXBTdWIpIHtcbiAgICAgICAgICAgIGJhc2UubGltaXRzID0gbGV4LnRleHQgPT09IFwiXFxcXGxpbWl0c1wiO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJMaW1pdCBjb250cm9scyBtdXN0IGZvbGxvdyBhIG1hdGggb3BlcmF0b3JcIiwgbGV4KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY29uc3VtZSgpO1xuICAgICAgfSBlbHNlIGlmIChsZXgudGV4dCA9PT0gXCJeXCIpIHtcbiAgICAgICAgLy8gV2UgZ290IGEgc3VwZXJzY3JpcHQgc3RhcnRcbiAgICAgICAgaWYgKHN1cGVyc2NyaXB0KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiRG91YmxlIHN1cGVyc2NyaXB0XCIsIGxleCk7XG4gICAgICAgIH1cblxuICAgICAgICBzdXBlcnNjcmlwdCA9IHRoaXMuaGFuZGxlU3VwU3Vic2NyaXB0KFwic3VwZXJzY3JpcHRcIik7XG4gICAgICB9IGVsc2UgaWYgKGxleC50ZXh0ID09PSBcIl9cIikge1xuICAgICAgICAvLyBXZSBnb3QgYSBzdWJzY3JpcHQgc3RhcnRcbiAgICAgICAgaWYgKHN1YnNjcmlwdCkge1xuICAgICAgICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIkRvdWJsZSBzdWJzY3JpcHRcIiwgbGV4KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN1YnNjcmlwdCA9IHRoaXMuaGFuZGxlU3VwU3Vic2NyaXB0KFwic3Vic2NyaXB0XCIpO1xuICAgICAgfSBlbHNlIGlmIChsZXgudGV4dCA9PT0gXCInXCIpIHtcbiAgICAgICAgLy8gV2UgZ290IGEgcHJpbWVcbiAgICAgICAgaWYgKHN1cGVyc2NyaXB0KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiRG91YmxlIHN1cGVyc2NyaXB0XCIsIGxleCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwcmltZSA9IHtcbiAgICAgICAgICB0eXBlOiBcInRleHRvcmRcIixcbiAgICAgICAgICBtb2RlOiB0aGlzLm1vZGUsXG4gICAgICAgICAgdGV4dDogXCJcXFxccHJpbWVcIlxuICAgICAgICB9OyAvLyBNYW55IHByaW1lcyBjYW4gYmUgZ3JvdXBlZCB0b2dldGhlciwgc28gd2UgaGFuZGxlIHRoaXMgaGVyZVxuXG4gICAgICAgIGNvbnN0IHByaW1lcyA9IFtwcmltZV07XG4gICAgICAgIHRoaXMuY29uc3VtZSgpOyAvLyBLZWVwIGxleGluZyB0b2tlbnMgdW50aWwgd2UgZ2V0IHNvbWV0aGluZyB0aGF0J3Mgbm90IGEgcHJpbWVcblxuICAgICAgICB3aGlsZSAodGhpcy5mZXRjaCgpLnRleHQgPT09IFwiJ1wiKSB7XG4gICAgICAgICAgLy8gRm9yIGVhY2ggb25lLCBhZGQgYW5vdGhlciBwcmltZSB0byB0aGUgbGlzdFxuICAgICAgICAgIHByaW1lcy5wdXNoKHByaW1lKTtcbiAgICAgICAgICB0aGlzLmNvbnN1bWUoKTtcbiAgICAgICAgfSAvLyBJZiB0aGVyZSdzIGEgc3VwZXJzY3JpcHQgZm9sbG93aW5nIHRoZSBwcmltZXMsIGNvbWJpbmUgdGhhdFxuICAgICAgICAvLyBzdXBlcnNjcmlwdCBpbiB3aXRoIHRoZSBwcmltZXMuXG5cblxuICAgICAgICBpZiAodGhpcy5mZXRjaCgpLnRleHQgPT09IFwiXlwiKSB7XG4gICAgICAgICAgcHJpbWVzLnB1c2godGhpcy5oYW5kbGVTdXBTdWJzY3JpcHQoXCJzdXBlcnNjcmlwdFwiKSk7XG4gICAgICAgIH0gLy8gUHV0IGV2ZXJ5dGhpbmcgaW50byBhbiBvcmRncm91cCBhcyB0aGUgc3VwZXJzY3JpcHRcblxuXG4gICAgICAgIHN1cGVyc2NyaXB0ID0ge1xuICAgICAgICAgIHR5cGU6IFwib3JkZ3JvdXBcIixcbiAgICAgICAgICBtb2RlOiB0aGlzLm1vZGUsXG4gICAgICAgICAgYm9keTogcHJpbWVzXG4gICAgICAgIH07XG4gICAgICB9IGVsc2UgaWYgKHVTdWJzQW5kU3Vwc1tsZXgudGV4dF0pIHtcbiAgICAgICAgLy8gQSBVbmljb2RlIHN1YnNjcmlwdCBvciBzdXBlcnNjcmlwdCBjaGFyYWN0ZXIuXG4gICAgICAgIC8vIFdlIHRyZWF0IHRoZXNlIHNpbWlsYXJseSB0byB0aGUgdW5pY29kZS1tYXRoIHBhY2thZ2UuXG4gICAgICAgIC8vIFNvIHdlIHJlbmRlciBhIHN0cmluZyBvZiBVbmljb2RlIChzdWJ8c3VwZXIpc2NyaXB0cyB0aGVcbiAgICAgICAgLy8gc2FtZSBhcyBhIChzdWJ8c3VwZXIpc2NyaXB0IG9mIHJlZ3VsYXIgY2hhcmFjdGVycy5cbiAgICAgICAgY29uc3QgaXNTdWIgPSB1bmljb2RlU3ViUmVnRXgudGVzdChsZXgudGV4dCk7XG4gICAgICAgIGNvbnN0IHN1YnN1cFRva2VucyA9IFtdO1xuICAgICAgICBzdWJzdXBUb2tlbnMucHVzaChuZXcgVG9rZW4odVN1YnNBbmRTdXBzW2xleC50ZXh0XSkpO1xuICAgICAgICB0aGlzLmNvbnN1bWUoKTsgLy8gQ29udGludWUgZmV0Y2hpbmcgdG9rZW5zIHRvIGZpbGwgb3V0IHRoZSBzdHJpbmcuXG5cbiAgICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICBjb25zdCB0b2tlbiA9IHRoaXMuZmV0Y2goKS50ZXh0O1xuXG4gICAgICAgICAgaWYgKCF1U3Vic0FuZFN1cHNbdG9rZW5dKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodW5pY29kZVN1YlJlZ0V4LnRlc3QodG9rZW4pICE9PSBpc1N1Yikge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc3Vic3VwVG9rZW5zLnVuc2hpZnQobmV3IFRva2VuKHVTdWJzQW5kU3Vwc1t0b2tlbl0pKTtcbiAgICAgICAgICB0aGlzLmNvbnN1bWUoKTtcbiAgICAgICAgfSAvLyBOb3cgY3JlYXRlIGEgKHN1YnxzdXBlcilzY3JpcHQuXG5cblxuICAgICAgICBjb25zdCBib2R5ID0gdGhpcy5zdWJwYXJzZShzdWJzdXBUb2tlbnMpO1xuXG4gICAgICAgIGlmIChpc1N1Yikge1xuICAgICAgICAgIHN1YnNjcmlwdCA9IHtcbiAgICAgICAgICAgIHR5cGU6IFwib3JkZ3JvdXBcIixcbiAgICAgICAgICAgIG1vZGU6IFwibWF0aFwiLFxuICAgICAgICAgICAgYm9keVxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3VwZXJzY3JpcHQgPSB7XG4gICAgICAgICAgICB0eXBlOiBcIm9yZGdyb3VwXCIsXG4gICAgICAgICAgICBtb2RlOiBcIm1hdGhcIixcbiAgICAgICAgICAgIGJvZHlcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBJZiBpdCB3YXNuJ3QgXiwgXywgb3IgJywgc3RvcCBwYXJzaW5nIHN1cGVyL3N1YnNjcmlwdHNcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSAvLyBCYXNlIG11c3QgYmUgc2V0IGlmIHN1cGVyc2NyaXB0IG9yIHN1YnNjcmlwdCBhcmUgc2V0IHBlciBsb2dpYyBhYm92ZSxcbiAgICAvLyBidXQgbmVlZCB0byBjaGVjayBoZXJlIGZvciB0eXBlIGNoZWNrIHRvIHBhc3MuXG5cblxuICAgIGlmIChzdXBlcnNjcmlwdCB8fCBzdWJzY3JpcHQpIHtcbiAgICAgIC8vIElmIHdlIGdvdCBlaXRoZXIgYSBzdXBlcnNjcmlwdCBvciBzdWJzY3JpcHQsIGNyZWF0ZSBhIHN1cHN1YlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogXCJzdXBzdWJcIixcbiAgICAgICAgbW9kZTogdGhpcy5tb2RlLFxuICAgICAgICBiYXNlOiBiYXNlLFxuICAgICAgICBzdXA6IHN1cGVyc2NyaXB0LFxuICAgICAgICBzdWI6IHN1YnNjcmlwdFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gT3RoZXJ3aXNlIHJldHVybiB0aGUgb3JpZ2luYWwgYm9keVxuICAgICAgcmV0dXJuIGJhc2U7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBQYXJzZXMgYW4gZW50aXJlIGZ1bmN0aW9uLCBpbmNsdWRpbmcgaXRzIGJhc2UgYW5kIGFsbCBvZiBpdHMgYXJndW1lbnRzLlxuICAgKi9cblxuXG4gIHBhcnNlRnVuY3Rpb24oYnJlYWtPblRva2VuVGV4dCwgbmFtZSAvLyBGb3IgZGV0ZXJtaW5pbmcgaXRzIGNvbnRleHRcbiAgKSB7XG4gICAgY29uc3QgdG9rZW4gPSB0aGlzLmZldGNoKCk7XG4gICAgY29uc3QgZnVuYyA9IHRva2VuLnRleHQ7XG4gICAgY29uc3QgZnVuY0RhdGEgPSBzcmNfZnVuY3Rpb25zW2Z1bmNdO1xuXG4gICAgaWYgKCFmdW5jRGF0YSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5jb25zdW1lKCk7IC8vIGNvbnN1bWUgY29tbWFuZCB0b2tlblxuXG4gICAgaWYgKG5hbWUgJiYgbmFtZSAhPT0gXCJhdG9tXCIgJiYgIWZ1bmNEYXRhLmFsbG93ZWRJbkFyZ3VtZW50KSB7XG4gICAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJHb3QgZnVuY3Rpb24gJ1wiICsgZnVuYyArIFwiJyB3aXRoIG5vIGFyZ3VtZW50c1wiICsgKG5hbWUgPyBcIiBhcyBcIiArIG5hbWUgOiBcIlwiKSwgdG9rZW4pO1xuICAgIH0gZWxzZSBpZiAodGhpcy5tb2RlID09PSBcInRleHRcIiAmJiAhZnVuY0RhdGEuYWxsb3dlZEluVGV4dCkge1xuICAgICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiQ2FuJ3QgdXNlIGZ1bmN0aW9uICdcIiArIGZ1bmMgKyBcIicgaW4gdGV4dCBtb2RlXCIsIHRva2VuKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMubW9kZSA9PT0gXCJtYXRoXCIgJiYgZnVuY0RhdGEuYWxsb3dlZEluTWF0aCA9PT0gZmFsc2UpIHtcbiAgICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIkNhbid0IHVzZSBmdW5jdGlvbiAnXCIgKyBmdW5jICsgXCInIGluIG1hdGggbW9kZVwiLCB0b2tlbik7XG4gICAgfVxuXG4gICAgY29uc3Qge1xuICAgICAgYXJncyxcbiAgICAgIG9wdEFyZ3NcbiAgICB9ID0gdGhpcy5wYXJzZUFyZ3VtZW50cyhmdW5jLCBmdW5jRGF0YSk7XG4gICAgcmV0dXJuIHRoaXMuY2FsbEZ1bmN0aW9uKGZ1bmMsIGFyZ3MsIG9wdEFyZ3MsIHRva2VuLCBicmVha09uVG9rZW5UZXh0KTtcbiAgfVxuICAvKipcbiAgICogQ2FsbCBhIGZ1bmN0aW9uIGhhbmRsZXIgd2l0aCBhIHN1aXRhYmxlIGNvbnRleHQgYW5kIGFyZ3VtZW50cy5cbiAgICovXG5cblxuICBjYWxsRnVuY3Rpb24obmFtZSwgYXJncywgb3B0QXJncywgdG9rZW4sIGJyZWFrT25Ub2tlblRleHQpIHtcbiAgICBjb25zdCBjb250ZXh0ID0ge1xuICAgICAgZnVuY05hbWU6IG5hbWUsXG4gICAgICBwYXJzZXI6IHRoaXMsXG4gICAgICB0b2tlbixcbiAgICAgIGJyZWFrT25Ub2tlblRleHRcbiAgICB9O1xuICAgIGNvbnN0IGZ1bmMgPSBzcmNfZnVuY3Rpb25zW25hbWVdO1xuXG4gICAgaWYgKGZ1bmMgJiYgZnVuYy5oYW5kbGVyKSB7XG4gICAgICByZXR1cm4gZnVuYy5oYW5kbGVyKGNvbnRleHQsIGFyZ3MsIG9wdEFyZ3MpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJObyBmdW5jdGlvbiBoYW5kbGVyIGZvciBcIiArIG5hbWUpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogUGFyc2VzIHRoZSBhcmd1bWVudHMgb2YgYSBmdW5jdGlvbiBvciBlbnZpcm9ubWVudFxuICAgKi9cblxuXG4gIHBhcnNlQXJndW1lbnRzKGZ1bmMsIC8vIFNob3VsZCBsb29rIGxpa2UgXCJcXG5hbWVcIiBvciBcIlxcYmVnaW57bmFtZX1cIi5cbiAgZnVuY0RhdGEpIHtcbiAgICBjb25zdCB0b3RhbEFyZ3MgPSBmdW5jRGF0YS5udW1BcmdzICsgZnVuY0RhdGEubnVtT3B0aW9uYWxBcmdzO1xuXG4gICAgaWYgKHRvdGFsQXJncyA9PT0gMCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYXJnczogW10sXG4gICAgICAgIG9wdEFyZ3M6IFtdXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IGFyZ3MgPSBbXTtcbiAgICBjb25zdCBvcHRBcmdzID0gW107XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRvdGFsQXJnczsgaSsrKSB7XG4gICAgICBsZXQgYXJnVHlwZSA9IGZ1bmNEYXRhLmFyZ1R5cGVzICYmIGZ1bmNEYXRhLmFyZ1R5cGVzW2ldO1xuICAgICAgY29uc3QgaXNPcHRpb25hbCA9IGkgPCBmdW5jRGF0YS5udW1PcHRpb25hbEFyZ3M7XG5cbiAgICAgIGlmIChmdW5jRGF0YS5wcmltaXRpdmUgJiYgYXJnVHlwZSA9PSBudWxsIHx8IC8vIFxcc3FydCBleHBhbmRzIGludG8gcHJpbWl0aXZlIGlmIG9wdGlvbmFsIGFyZ3VtZW50IGRvZXNuJ3QgZXhpc3RcbiAgICAgIGZ1bmNEYXRhLnR5cGUgPT09IFwic3FydFwiICYmIGkgPT09IDEgJiYgb3B0QXJnc1swXSA9PSBudWxsKSB7XG4gICAgICAgIGFyZ1R5cGUgPSBcInByaW1pdGl2ZVwiO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBhcmcgPSB0aGlzLnBhcnNlR3JvdXBPZlR5cGUoXCJhcmd1bWVudCB0byAnXCIgKyBmdW5jICsgXCInXCIsIGFyZ1R5cGUsIGlzT3B0aW9uYWwpO1xuXG4gICAgICBpZiAoaXNPcHRpb25hbCkge1xuICAgICAgICBvcHRBcmdzLnB1c2goYXJnKTtcbiAgICAgIH0gZWxzZSBpZiAoYXJnICE9IG51bGwpIHtcbiAgICAgICAgYXJncy5wdXNoKGFyZyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBzaG91bGQgYmUgdW5yZWFjaGFibGVcbiAgICAgICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiTnVsbCBhcmd1bWVudCwgcGxlYXNlIHJlcG9ydCB0aGlzIGFzIGEgYnVnXCIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBhcmdzLFxuICAgICAgb3B0QXJnc1xuICAgIH07XG4gIH1cbiAgLyoqXG4gICAqIFBhcnNlcyBhIGdyb3VwIHdoZW4gdGhlIG1vZGUgaXMgY2hhbmdpbmcuXG4gICAqL1xuXG5cbiAgcGFyc2VHcm91cE9mVHlwZShuYW1lLCB0eXBlLCBvcHRpb25hbCkge1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSBcImNvbG9yXCI6XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlQ29sb3JHcm91cChvcHRpb25hbCk7XG5cbiAgICAgIGNhc2UgXCJzaXplXCI6XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlU2l6ZUdyb3VwKG9wdGlvbmFsKTtcblxuICAgICAgY2FzZSBcInVybFwiOlxuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZVVybEdyb3VwKG9wdGlvbmFsKTtcblxuICAgICAgY2FzZSBcIm1hdGhcIjpcbiAgICAgIGNhc2UgXCJ0ZXh0XCI6XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlQXJndW1lbnRHcm91cChvcHRpb25hbCwgdHlwZSk7XG5cbiAgICAgIGNhc2UgXCJoYm94XCI6XG4gICAgICAgIHtcbiAgICAgICAgICAvLyBoYm94IGFyZ3VtZW50IHR5cGUgd3JhcHMgdGhlIGFyZ3VtZW50IGluIHRoZSBlcXVpdmFsZW50IG9mXG4gICAgICAgICAgLy8gXFxoYm94LCB3aGljaCBpcyBsaWtlIFxcdGV4dCBidXQgc3dpdGNoaW5nIHRvIFxcdGV4dHN0eWxlIHNpemUuXG4gICAgICAgICAgY29uc3QgZ3JvdXAgPSB0aGlzLnBhcnNlQXJndW1lbnRHcm91cChvcHRpb25hbCwgXCJ0ZXh0XCIpO1xuICAgICAgICAgIHJldHVybiBncm91cCAhPSBudWxsID8ge1xuICAgICAgICAgICAgdHlwZTogXCJzdHlsaW5nXCIsXG4gICAgICAgICAgICBtb2RlOiBncm91cC5tb2RlLFxuICAgICAgICAgICAgYm9keTogW2dyb3VwXSxcbiAgICAgICAgICAgIHN0eWxlOiBcInRleHRcIiAvLyBzaW11bGF0ZSBcXHRleHRzdHlsZVxuXG4gICAgICAgICAgfSA6IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBcInJhd1wiOlxuICAgICAgICB7XG4gICAgICAgICAgY29uc3QgdG9rZW4gPSB0aGlzLnBhcnNlU3RyaW5nR3JvdXAoXCJyYXdcIiwgb3B0aW9uYWwpO1xuICAgICAgICAgIHJldHVybiB0b2tlbiAhPSBudWxsID8ge1xuICAgICAgICAgICAgdHlwZTogXCJyYXdcIixcbiAgICAgICAgICAgIG1vZGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgc3RyaW5nOiB0b2tlbi50ZXh0XG4gICAgICAgICAgfSA6IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBcInByaW1pdGl2ZVwiOlxuICAgICAgICB7XG4gICAgICAgICAgaWYgKG9wdGlvbmFsKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJBIHByaW1pdGl2ZSBhcmd1bWVudCBjYW5ub3QgYmUgb3B0aW9uYWxcIik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgZ3JvdXAgPSB0aGlzLnBhcnNlR3JvdXAobmFtZSk7XG5cbiAgICAgICAgICBpZiAoZ3JvdXAgPT0gbnVsbCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiRXhwZWN0ZWQgZ3JvdXAgYXMgXCIgKyBuYW1lLCB0aGlzLmZldGNoKCkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBncm91cDtcbiAgICAgICAgfVxuXG4gICAgICBjYXNlIFwib3JpZ2luYWxcIjpcbiAgICAgIGNhc2UgbnVsbDpcbiAgICAgIGNhc2UgdW5kZWZpbmVkOlxuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZUFyZ3VtZW50R3JvdXAob3B0aW9uYWwpO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJVbmtub3duIGdyb3VwIHR5cGUgYXMgXCIgKyBuYW1lLCB0aGlzLmZldGNoKCkpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogRGlzY2FyZCBhbnkgc3BhY2UgdG9rZW5zLCBmZXRjaGluZyB0aGUgbmV4dCBub24tc3BhY2UgdG9rZW4uXG4gICAqL1xuXG5cbiAgY29uc3VtZVNwYWNlcygpIHtcbiAgICB3aGlsZSAodGhpcy5mZXRjaCgpLnRleHQgPT09IFwiIFwiKSB7XG4gICAgICB0aGlzLmNvbnN1bWUoKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFBhcnNlcyBhIGdyb3VwLCBlc3NlbnRpYWxseSByZXR1cm5pbmcgdGhlIHN0cmluZyBmb3JtZWQgYnkgdGhlXG4gICAqIGJyYWNlLWVuY2xvc2VkIHRva2VucyBwbHVzIHNvbWUgcG9zaXRpb24gaW5mb3JtYXRpb24uXG4gICAqL1xuXG5cbiAgcGFyc2VTdHJpbmdHcm91cChtb2RlTmFtZSwgLy8gVXNlZCB0byBkZXNjcmliZSB0aGUgbW9kZSBpbiBlcnJvciBtZXNzYWdlcy5cbiAgb3B0aW9uYWwpIHtcbiAgICBjb25zdCBhcmdUb2tlbiA9IHRoaXMuZ3VsbGV0LnNjYW5Bcmd1bWVudChvcHRpb25hbCk7XG5cbiAgICBpZiAoYXJnVG9rZW4gPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgbGV0IHN0ciA9IFwiXCI7XG4gICAgbGV0IG5leHRUb2tlbjtcblxuICAgIHdoaWxlICgobmV4dFRva2VuID0gdGhpcy5mZXRjaCgpKS50ZXh0ICE9PSBcIkVPRlwiKSB7XG4gICAgICBzdHIgKz0gbmV4dFRva2VuLnRleHQ7XG4gICAgICB0aGlzLmNvbnN1bWUoKTtcbiAgICB9XG5cbiAgICB0aGlzLmNvbnN1bWUoKTsgLy8gY29uc3VtZSB0aGUgZW5kIG9mIHRoZSBhcmd1bWVudFxuXG4gICAgYXJnVG9rZW4udGV4dCA9IHN0cjtcbiAgICByZXR1cm4gYXJnVG9rZW47XG4gIH1cbiAgLyoqXG4gICAqIFBhcnNlcyBhIHJlZ2V4LWRlbGltaXRlZCBncm91cDogdGhlIGxhcmdlc3Qgc2VxdWVuY2Ugb2YgdG9rZW5zXG4gICAqIHdob3NlIGNvbmNhdGVuYXRlZCBzdHJpbmdzIG1hdGNoIGByZWdleGAuIFJldHVybnMgdGhlIHN0cmluZ1xuICAgKiBmb3JtZWQgYnkgdGhlIHRva2VucyBwbHVzIHNvbWUgcG9zaXRpb24gaW5mb3JtYXRpb24uXG4gICAqL1xuXG5cbiAgcGFyc2VSZWdleEdyb3VwKHJlZ2V4LCBtb2RlTmFtZSAvLyBVc2VkIHRvIGRlc2NyaWJlIHRoZSBtb2RlIGluIGVycm9yIG1lc3NhZ2VzLlxuICApIHtcbiAgICBjb25zdCBmaXJzdFRva2VuID0gdGhpcy5mZXRjaCgpO1xuICAgIGxldCBsYXN0VG9rZW4gPSBmaXJzdFRva2VuO1xuICAgIGxldCBzdHIgPSBcIlwiO1xuICAgIGxldCBuZXh0VG9rZW47XG5cbiAgICB3aGlsZSAoKG5leHRUb2tlbiA9IHRoaXMuZmV0Y2goKSkudGV4dCAhPT0gXCJFT0ZcIiAmJiByZWdleC50ZXN0KHN0ciArIG5leHRUb2tlbi50ZXh0KSkge1xuICAgICAgbGFzdFRva2VuID0gbmV4dFRva2VuO1xuICAgICAgc3RyICs9IGxhc3RUb2tlbi50ZXh0O1xuICAgICAgdGhpcy5jb25zdW1lKCk7XG4gICAgfVxuXG4gICAgaWYgKHN0ciA9PT0gXCJcIikge1xuICAgICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiSW52YWxpZCBcIiArIG1vZGVOYW1lICsgXCI6ICdcIiArIGZpcnN0VG9rZW4udGV4dCArIFwiJ1wiLCBmaXJzdFRva2VuKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmlyc3RUb2tlbi5yYW5nZShsYXN0VG9rZW4sIHN0cik7XG4gIH1cbiAgLyoqXG4gICAqIFBhcnNlcyBhIGNvbG9yIGRlc2NyaXB0aW9uLlxuICAgKi9cblxuXG4gIHBhcnNlQ29sb3JHcm91cChvcHRpb25hbCkge1xuICAgIGNvbnN0IHJlcyA9IHRoaXMucGFyc2VTdHJpbmdHcm91cChcImNvbG9yXCIsIG9wdGlvbmFsKTtcblxuICAgIGlmIChyZXMgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgbWF0Y2ggPSAvXigjW2EtZjAtOV17M318Iz9bYS1mMC05XXs2fXxbYS16XSspJC9pLmV4ZWMocmVzLnRleHQpO1xuXG4gICAgaWYgKCFtYXRjaCkge1xuICAgICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiSW52YWxpZCBjb2xvcjogJ1wiICsgcmVzLnRleHQgKyBcIidcIiwgcmVzKTtcbiAgICB9XG5cbiAgICBsZXQgY29sb3IgPSBtYXRjaFswXTtcblxuICAgIGlmICgvXlswLTlhLWZdezZ9JC9pLnRlc3QoY29sb3IpKSB7XG4gICAgICAvLyBXZSBhbGxvdyBhIDYtZGlnaXQgSFRNTCBjb2xvciBzcGVjIHdpdGhvdXQgYSBsZWFkaW5nIFwiI1wiLlxuICAgICAgLy8gVGhpcyBmb2xsb3dzIHRoZSB4Y29sb3IgcGFja2FnZSdzIEhUTUwgY29sb3IgbW9kZWwuXG4gICAgICAvLyBQcmVkZWZpbmVkIGNvbG9yIG5hbWVzIGFyZSBhbGwgbWlzc2VkIGJ5IHRoaXMgUmVnRXggcGF0dGVybi5cbiAgICAgIGNvbG9yID0gXCIjXCIgKyBjb2xvcjtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJjb2xvci10b2tlblwiLFxuICAgICAgbW9kZTogdGhpcy5tb2RlLFxuICAgICAgY29sb3JcbiAgICB9O1xuICB9XG4gIC8qKlxuICAgKiBQYXJzZXMgYSBzaXplIHNwZWNpZmljYXRpb24sIGNvbnNpc3Rpbmcgb2YgbWFnbml0dWRlIGFuZCB1bml0LlxuICAgKi9cblxuXG4gIHBhcnNlU2l6ZUdyb3VwKG9wdGlvbmFsKSB7XG4gICAgbGV0IHJlcztcbiAgICBsZXQgaXNCbGFuayA9IGZhbHNlOyAvLyBkb24ndCBleHBhbmQgYmVmb3JlIHBhcnNlU3RyaW5nR3JvdXBcblxuICAgIHRoaXMuZ3VsbGV0LmNvbnN1bWVTcGFjZXMoKTtcblxuICAgIGlmICghb3B0aW9uYWwgJiYgdGhpcy5ndWxsZXQuZnV0dXJlKCkudGV4dCAhPT0gXCJ7XCIpIHtcbiAgICAgIHJlcyA9IHRoaXMucGFyc2VSZWdleEdyb3VwKC9eWy0rXT8gKig/OiR8XFxkK3xcXGQrXFwuXFxkKnxcXC5cXGQqKSAqW2Etel17MCwyfSAqJC8sIFwic2l6ZVwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzID0gdGhpcy5wYXJzZVN0cmluZ0dyb3VwKFwic2l6ZVwiLCBvcHRpb25hbCk7XG4gICAgfVxuXG4gICAgaWYgKCFyZXMpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmICghb3B0aW9uYWwgJiYgcmVzLnRleHQubGVuZ3RoID09PSAwKSB7XG4gICAgICAvLyBCZWNhdXNlIHdlJ3ZlIHRlc3RlZCBmb3Igd2hhdCBpcyAhb3B0aW9uYWwsIHRoaXMgYmxvY2sgd29uJ3RcbiAgICAgIC8vIGFmZmVjdCBcXGtlcm4sIFxcaHNwYWNlLCBldGMuIEl0IHdpbGwgY2FwdHVyZSB0aGUgbWFuZGF0b3J5IGFyZ3VtZW50c1xuICAgICAgLy8gdG8gXFxnZW5mcmFjIGFuZCBcXGFib3ZlLlxuICAgICAgcmVzLnRleHQgPSBcIjBwdFwiOyAvLyBFbmFibGUgXFxhYm92ZXt9XG5cbiAgICAgIGlzQmxhbmsgPSB0cnVlOyAvLyBUaGlzIGlzIGhlcmUgc3BlY2lmaWNhbGx5IGZvciBcXGdlbmZyYWNcbiAgICB9XG5cbiAgICBjb25zdCBtYXRjaCA9IC8oWy0rXT8pICooXFxkKyg/OlxcLlxcZCopP3xcXC5cXGQrKSAqKFthLXpdezJ9KS8uZXhlYyhyZXMudGV4dCk7XG5cbiAgICBpZiAoIW1hdGNoKSB7XG4gICAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJJbnZhbGlkIHNpemU6ICdcIiArIHJlcy50ZXh0ICsgXCInXCIsIHJlcyk7XG4gICAgfVxuXG4gICAgY29uc3QgZGF0YSA9IHtcbiAgICAgIG51bWJlcjogKyhtYXRjaFsxXSArIG1hdGNoWzJdKSxcbiAgICAgIC8vIHNpZ24gKyBtYWduaXR1ZGUsIGNhc3QgdG8gbnVtYmVyXG4gICAgICB1bml0OiBtYXRjaFszXVxuICAgIH07XG5cbiAgICBpZiAoIXZhbGlkVW5pdChkYXRhKSkge1xuICAgICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiSW52YWxpZCB1bml0OiAnXCIgKyBkYXRhLnVuaXQgKyBcIidcIiwgcmVzKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJzaXplXCIsXG4gICAgICBtb2RlOiB0aGlzLm1vZGUsXG4gICAgICB2YWx1ZTogZGF0YSxcbiAgICAgIGlzQmxhbmtcbiAgICB9O1xuICB9XG4gIC8qKlxuICAgKiBQYXJzZXMgYW4gVVJMLCBjaGVja2luZyBlc2NhcGVkIGxldHRlcnMgYW5kIGFsbG93ZWQgcHJvdG9jb2xzLFxuICAgKiBhbmQgc2V0dGluZyB0aGUgY2F0Y29kZSBvZiAlIGFzIGFuIGFjdGl2ZSBjaGFyYWN0ZXIgKGFzIGluIFxcaHlwZXJyZWYpLlxuICAgKi9cblxuXG4gIHBhcnNlVXJsR3JvdXAob3B0aW9uYWwpIHtcbiAgICB0aGlzLmd1bGxldC5sZXhlci5zZXRDYXRjb2RlKFwiJVwiLCAxMyk7IC8vIGFjdGl2ZSBjaGFyYWN0ZXJcblxuICAgIHRoaXMuZ3VsbGV0LmxleGVyLnNldENhdGNvZGUoXCJ+XCIsIDEyKTsgLy8gb3RoZXIgY2hhcmFjdGVyXG5cbiAgICBjb25zdCByZXMgPSB0aGlzLnBhcnNlU3RyaW5nR3JvdXAoXCJ1cmxcIiwgb3B0aW9uYWwpO1xuICAgIHRoaXMuZ3VsbGV0LmxleGVyLnNldENhdGNvZGUoXCIlXCIsIDE0KTsgLy8gY29tbWVudCBjaGFyYWN0ZXJcblxuICAgIHRoaXMuZ3VsbGV0LmxleGVyLnNldENhdGNvZGUoXCJ+XCIsIDEzKTsgLy8gYWN0aXZlIGNoYXJhY3RlclxuXG4gICAgaWYgKHJlcyA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9IC8vIGh5cGVycmVmIHBhY2thZ2UgYWxsb3dzIGJhY2tzbGFzaGVzIGFsb25lIGluIGhyZWYsIGJ1dCBkb2Vzbid0XG4gICAgLy8gZ2VuZXJhdGUgdmFsaWQgbGlua3MgaW4gc3VjaCBjYXNlczsgd2UgaW50ZXJwcmV0IHRoaXMgYXNcbiAgICAvLyBcInVuZGVmaW5lZFwiIGJlaGF2aW91ciwgYW5kIGtlZXAgdGhlbSBhcy1pcy4gU29tZSBicm93c2VyIHdpbGxcbiAgICAvLyByZXBsYWNlIGJhY2tzbGFzaGVzIHdpdGggZm9yd2FyZCBzbGFzaGVzLlxuXG5cbiAgICBjb25zdCB1cmwgPSByZXMudGV4dC5yZXBsYWNlKC9cXFxcKFsjJCUmfl9ee31dKS9nLCAnJDEnKTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJ1cmxcIixcbiAgICAgIG1vZGU6IHRoaXMubW9kZSxcbiAgICAgIHVybFxuICAgIH07XG4gIH1cbiAgLyoqXG4gICAqIFBhcnNlcyBhbiBhcmd1bWVudCB3aXRoIHRoZSBtb2RlIHNwZWNpZmllZC5cbiAgICovXG5cblxuICBwYXJzZUFyZ3VtZW50R3JvdXAob3B0aW9uYWwsIG1vZGUpIHtcbiAgICBjb25zdCBhcmdUb2tlbiA9IHRoaXMuZ3VsbGV0LnNjYW5Bcmd1bWVudChvcHRpb25hbCk7XG5cbiAgICBpZiAoYXJnVG9rZW4gPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3Qgb3V0ZXJNb2RlID0gdGhpcy5tb2RlO1xuXG4gICAgaWYgKG1vZGUpIHtcbiAgICAgIC8vIFN3aXRjaCB0byBzcGVjaWZpZWQgbW9kZVxuICAgICAgdGhpcy5zd2l0Y2hNb2RlKG1vZGUpO1xuICAgIH1cblxuICAgIHRoaXMuZ3VsbGV0LmJlZ2luR3JvdXAoKTtcbiAgICBjb25zdCBleHByZXNzaW9uID0gdGhpcy5wYXJzZUV4cHJlc3Npb24oZmFsc2UsIFwiRU9GXCIpOyAvLyBUT0RPOiBmaW5kIGFuIGFsdGVybmF0aXZlIHdheSB0byBkZW5vdGUgdGhlIGVuZFxuXG4gICAgdGhpcy5leHBlY3QoXCJFT0ZcIik7IC8vIGV4cGVjdCB0aGUgZW5kIG9mIHRoZSBhcmd1bWVudFxuXG4gICAgdGhpcy5ndWxsZXQuZW5kR3JvdXAoKTtcbiAgICBjb25zdCByZXN1bHQgPSB7XG4gICAgICB0eXBlOiBcIm9yZGdyb3VwXCIsXG4gICAgICBtb2RlOiB0aGlzLm1vZGUsXG4gICAgICBsb2M6IGFyZ1Rva2VuLmxvYyxcbiAgICAgIGJvZHk6IGV4cHJlc3Npb25cbiAgICB9O1xuXG4gICAgaWYgKG1vZGUpIHtcbiAgICAgIC8vIFN3aXRjaCBtb2RlIGJhY2tcbiAgICAgIHRoaXMuc3dpdGNoTW9kZShvdXRlck1vZGUpO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgLyoqXG4gICAqIFBhcnNlcyBhbiBvcmRpbmFyeSBncm91cCwgd2hpY2ggaXMgZWl0aGVyIGEgc2luZ2xlIG51Y2xldXMgKGxpa2UgXCJ4XCIpXG4gICAqIG9yIGFuIGV4cHJlc3Npb24gaW4gYnJhY2VzIChsaWtlIFwie3greX1cIikgb3IgYW4gaW1wbGljaXQgZ3JvdXAsIGEgZ3JvdXBcbiAgICogdGhhdCBzdGFydHMgYXQgdGhlIGN1cnJlbnQgcG9zaXRpb24sIGFuZCBlbmRzIHJpZ2h0IGJlZm9yZSBhIGhpZ2hlciBleHBsaWNpdFxuICAgKiBncm91cCBlbmRzLCBvciBhdCBFT0YuXG4gICAqL1xuXG5cbiAgcGFyc2VHcm91cChuYW1lLCAvLyBGb3IgZXJyb3IgcmVwb3J0aW5nLlxuICBicmVha09uVG9rZW5UZXh0KSB7XG4gICAgY29uc3QgZmlyc3RUb2tlbiA9IHRoaXMuZmV0Y2goKTtcbiAgICBjb25zdCB0ZXh0ID0gZmlyc3RUb2tlbi50ZXh0O1xuICAgIGxldCByZXN1bHQ7IC8vIFRyeSB0byBwYXJzZSBhbiBvcGVuIGJyYWNlIG9yIFxcYmVnaW5ncm91cFxuXG4gICAgaWYgKHRleHQgPT09IFwie1wiIHx8IHRleHQgPT09IFwiXFxcXGJlZ2luZ3JvdXBcIikge1xuICAgICAgdGhpcy5jb25zdW1lKCk7XG4gICAgICBjb25zdCBncm91cEVuZCA9IHRleHQgPT09IFwie1wiID8gXCJ9XCIgOiBcIlxcXFxlbmRncm91cFwiO1xuICAgICAgdGhpcy5ndWxsZXQuYmVnaW5Hcm91cCgpOyAvLyBJZiB3ZSBnZXQgYSBicmFjZSwgcGFyc2UgYW4gZXhwcmVzc2lvblxuXG4gICAgICBjb25zdCBleHByZXNzaW9uID0gdGhpcy5wYXJzZUV4cHJlc3Npb24oZmFsc2UsIGdyb3VwRW5kKTtcbiAgICAgIGNvbnN0IGxhc3RUb2tlbiA9IHRoaXMuZmV0Y2goKTtcbiAgICAgIHRoaXMuZXhwZWN0KGdyb3VwRW5kKTsgLy8gQ2hlY2sgdGhhdCB3ZSBnb3QgYSBtYXRjaGluZyBjbG9zaW5nIGJyYWNlXG5cbiAgICAgIHRoaXMuZ3VsbGV0LmVuZEdyb3VwKCk7XG4gICAgICByZXN1bHQgPSB7XG4gICAgICAgIHR5cGU6IFwib3JkZ3JvdXBcIixcbiAgICAgICAgbW9kZTogdGhpcy5tb2RlLFxuICAgICAgICBsb2M6IFNvdXJjZUxvY2F0aW9uLnJhbmdlKGZpcnN0VG9rZW4sIGxhc3RUb2tlbiksXG4gICAgICAgIGJvZHk6IGV4cHJlc3Npb24sXG4gICAgICAgIC8vIEEgZ3JvdXAgZm9ybWVkIGJ5IFxcYmVnaW5ncm91cC4uLlxcZW5kZ3JvdXAgaXMgYSBzZW1pLXNpbXBsZSBncm91cFxuICAgICAgICAvLyB3aGljaCBkb2Vzbid0IGFmZmVjdCBzcGFjaW5nIGluIG1hdGggbW9kZSwgaS5lLiwgaXMgdHJhbnNwYXJlbnQuXG4gICAgICAgIC8vIGh0dHBzOi8vdGV4LnN0YWNrZXhjaGFuZ2UuY29tL3F1ZXN0aW9ucy8xOTMwL3doZW4tc2hvdWxkLW9uZS1cbiAgICAgICAgLy8gdXNlLWJlZ2luZ3JvdXAtaW5zdGVhZC1vZi1iZ3JvdXBcbiAgICAgICAgc2VtaXNpbXBsZTogdGV4dCA9PT0gXCJcXFxcYmVnaW5ncm91cFwiIHx8IHVuZGVmaW5lZFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSWYgdGhlcmUgZXhpc3RzIGEgZnVuY3Rpb24gd2l0aCB0aGlzIG5hbWUsIHBhcnNlIHRoZSBmdW5jdGlvbi5cbiAgICAgIC8vIE90aGVyd2lzZSwganVzdCByZXR1cm4gYSBudWNsZXVzXG4gICAgICByZXN1bHQgPSB0aGlzLnBhcnNlRnVuY3Rpb24oYnJlYWtPblRva2VuVGV4dCwgbmFtZSkgfHwgdGhpcy5wYXJzZVN5bWJvbCgpO1xuXG4gICAgICBpZiAocmVzdWx0ID09IG51bGwgJiYgdGV4dFswXSA9PT0gXCJcXFxcXCIgJiYgIWltcGxpY2l0Q29tbWFuZHMuaGFzT3duUHJvcGVydHkodGV4dCkpIHtcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZ3MudGhyb3dPbkVycm9yKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiVW5kZWZpbmVkIGNvbnRyb2wgc2VxdWVuY2U6IFwiICsgdGV4dCwgZmlyc3RUb2tlbik7XG4gICAgICAgIH1cblxuICAgICAgICByZXN1bHQgPSB0aGlzLmZvcm1hdFVuc3VwcG9ydGVkQ21kKHRleHQpO1xuICAgICAgICB0aGlzLmNvbnN1bWUoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIC8qKlxuICAgKiBGb3JtIGxpZ2F0dXJlLWxpa2UgY29tYmluYXRpb25zIG9mIGNoYXJhY3RlcnMgZm9yIHRleHQgbW9kZS5cbiAgICogVGhpcyBpbmNsdWRlcyBpbnB1dHMgbGlrZSBcIi0tXCIsIFwiLS0tXCIsIFwiYGBcIiBhbmQgXCInJ1wiLlxuICAgKiBUaGUgcmVzdWx0IHdpbGwgc2ltcGx5IHJlcGxhY2UgbXVsdGlwbGUgdGV4dG9yZCBub2RlcyB3aXRoIGEgc2luZ2xlXG4gICAqIGNoYXJhY3RlciBpbiBlYWNoIHZhbHVlIGJ5IGEgc2luZ2xlIHRleHRvcmQgbm9kZSBoYXZpbmcgbXVsdGlwbGVcbiAgICogY2hhcmFjdGVycyBpbiBpdHMgdmFsdWUuICBUaGUgcmVwcmVzZW50YXRpb24gaXMgc3RpbGwgQVNDSUkgc291cmNlLlxuICAgKiBUaGUgZ3JvdXAgd2lsbCBiZSBtb2RpZmllZCBpbiBwbGFjZS5cbiAgICovXG5cblxuICBmb3JtTGlnYXR1cmVzKGdyb3VwKSB7XG4gICAgbGV0IG4gPSBncm91cC5sZW5ndGggLSAxO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGNvbnN0IGEgPSBncm91cFtpXTsgLy8gJEZsb3dGaXhNZTogTm90IGV2ZXJ5IG5vZGUgdHlwZSBoYXMgYSBgdGV4dGAgcHJvcGVydHkuXG5cbiAgICAgIGNvbnN0IHYgPSBhLnRleHQ7XG5cbiAgICAgIGlmICh2ID09PSBcIi1cIiAmJiBncm91cFtpICsgMV0udGV4dCA9PT0gXCItXCIpIHtcbiAgICAgICAgaWYgKGkgKyAxIDwgbiAmJiBncm91cFtpICsgMl0udGV4dCA9PT0gXCItXCIpIHtcbiAgICAgICAgICBncm91cC5zcGxpY2UoaSwgMywge1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0b3JkXCIsXG4gICAgICAgICAgICBtb2RlOiBcInRleHRcIixcbiAgICAgICAgICAgIGxvYzogU291cmNlTG9jYXRpb24ucmFuZ2UoYSwgZ3JvdXBbaSArIDJdKSxcbiAgICAgICAgICAgIHRleHQ6IFwiLS0tXCJcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBuIC09IDI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZ3JvdXAuc3BsaWNlKGksIDIsIHtcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dG9yZFwiLFxuICAgICAgICAgICAgbW9kZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICBsb2M6IFNvdXJjZUxvY2F0aW9uLnJhbmdlKGEsIGdyb3VwW2kgKyAxXSksXG4gICAgICAgICAgICB0ZXh0OiBcIi0tXCJcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBuIC09IDE7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKCh2ID09PSBcIidcIiB8fCB2ID09PSBcImBcIikgJiYgZ3JvdXBbaSArIDFdLnRleHQgPT09IHYpIHtcbiAgICAgICAgZ3JvdXAuc3BsaWNlKGksIDIsIHtcbiAgICAgICAgICB0eXBlOiBcInRleHRvcmRcIixcbiAgICAgICAgICBtb2RlOiBcInRleHRcIixcbiAgICAgICAgICBsb2M6IFNvdXJjZUxvY2F0aW9uLnJhbmdlKGEsIGdyb3VwW2kgKyAxXSksXG4gICAgICAgICAgdGV4dDogdiArIHZcbiAgICAgICAgfSk7XG4gICAgICAgIG4gLT0gMTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFBhcnNlIGEgc2luZ2xlIHN5bWJvbCBvdXQgb2YgdGhlIHN0cmluZy4gSGVyZSwgd2UgaGFuZGxlIHNpbmdsZSBjaGFyYWN0ZXJcbiAgICogc3ltYm9scyBhbmQgc3BlY2lhbCBmdW5jdGlvbnMgbGlrZSBcXHZlcmIuXG4gICAqL1xuXG5cbiAgcGFyc2VTeW1ib2woKSB7XG4gICAgY29uc3QgbnVjbGV1cyA9IHRoaXMuZmV0Y2goKTtcbiAgICBsZXQgdGV4dCA9IG51Y2xldXMudGV4dDtcblxuICAgIGlmICgvXlxcXFx2ZXJiW15hLXpBLVpdLy50ZXN0KHRleHQpKSB7XG4gICAgICB0aGlzLmNvbnN1bWUoKTtcbiAgICAgIGxldCBhcmcgPSB0ZXh0LnNsaWNlKDUpO1xuICAgICAgY29uc3Qgc3RhciA9IGFyZy5jaGFyQXQoMCkgPT09IFwiKlwiO1xuXG4gICAgICBpZiAoc3Rhcikge1xuICAgICAgICBhcmcgPSBhcmcuc2xpY2UoMSk7XG4gICAgICB9IC8vIExleGVyJ3MgdG9rZW5SZWdleCBpcyBjb25zdHJ1Y3RlZCB0byBhbHdheXMgaGF2ZSBtYXRjaGluZ1xuICAgICAgLy8gZmlyc3QvbGFzdCBjaGFyYWN0ZXJzLlxuXG5cbiAgICAgIGlmIChhcmcubGVuZ3RoIDwgMiB8fCBhcmcuY2hhckF0KDApICE9PSBhcmcuc2xpY2UoLTEpKSB7XG4gICAgICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIlxcXFx2ZXJiIGFzc2VydGlvbiBmYWlsZWQgLS1cXG4gICAgICAgICAgICAgICAgICAgIHBsZWFzZSByZXBvcnQgd2hhdCBpbnB1dCBjYXVzZWQgdGhpcyBidWdcIik7XG4gICAgICB9XG5cbiAgICAgIGFyZyA9IGFyZy5zbGljZSgxLCAtMSk7IC8vIHJlbW92ZSBmaXJzdCBhbmQgbGFzdCBjaGFyXG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFwidmVyYlwiLFxuICAgICAgICBtb2RlOiBcInRleHRcIixcbiAgICAgICAgYm9keTogYXJnLFxuICAgICAgICBzdGFyXG4gICAgICB9O1xuICAgIH0gLy8gQXQgdGhpcyBwb2ludCwgd2Ugc2hvdWxkIGhhdmUgYSBzeW1ib2wsIHBvc3NpYmx5IHdpdGggYWNjZW50cy5cbiAgICAvLyBGaXJzdCBleHBhbmQgYW55IGFjY2VudGVkIGJhc2Ugc3ltYm9sIGFjY29yZGluZyB0byB1bmljb2RlU3ltYm9scy5cblxuXG4gICAgaWYgKHVuaWNvZGVTeW1ib2xzLmhhc093blByb3BlcnR5KHRleHRbMF0pICYmICFzcmNfc3ltYm9sc1t0aGlzLm1vZGVdW3RleHRbMF1dKSB7XG4gICAgICAvLyBUaGlzIGJlaGF2aW9yIGlzIG5vdCBzdHJpY3QgKFhlVGVYLWNvbXBhdGlibGUpIGluIG1hdGggbW9kZS5cbiAgICAgIGlmICh0aGlzLnNldHRpbmdzLnN0cmljdCAmJiB0aGlzLm1vZGUgPT09IFwibWF0aFwiKSB7XG4gICAgICAgIHRoaXMuc2V0dGluZ3MucmVwb3J0Tm9uc3RyaWN0KFwidW5pY29kZVRleHRJbk1hdGhNb2RlXCIsIFwiQWNjZW50ZWQgVW5pY29kZSB0ZXh0IGNoYXJhY3RlciBcXFwiXCIgKyB0ZXh0WzBdICsgXCJcXFwiIHVzZWQgaW4gXCIgKyBcIm1hdGggbW9kZVwiLCBudWNsZXVzKTtcbiAgICAgIH1cblxuICAgICAgdGV4dCA9IHVuaWNvZGVTeW1ib2xzW3RleHRbMF1dICsgdGV4dC5zbGljZSgxKTtcbiAgICB9IC8vIFN0cmlwIG9mZiBhbnkgY29tYmluaW5nIGNoYXJhY3RlcnNcblxuXG4gICAgY29uc3QgbWF0Y2ggPSBjb21iaW5pbmdEaWFjcml0aWNhbE1hcmtzRW5kUmVnZXguZXhlYyh0ZXh0KTtcblxuICAgIGlmIChtYXRjaCkge1xuICAgICAgdGV4dCA9IHRleHQuc3Vic3RyaW5nKDAsIG1hdGNoLmluZGV4KTtcblxuICAgICAgaWYgKHRleHQgPT09ICdpJykge1xuICAgICAgICB0ZXh0ID0gJ1xcdTAxMzEnOyAvLyBkb3RsZXNzIGksIGluIG1hdGggYW5kIHRleHQgbW9kZVxuICAgICAgfSBlbHNlIGlmICh0ZXh0ID09PSAnaicpIHtcbiAgICAgICAgdGV4dCA9ICdcXHUwMjM3JzsgLy8gZG90bGVzcyBqLCBpbiBtYXRoIGFuZCB0ZXh0IG1vZGVcbiAgICAgIH1cbiAgICB9IC8vIFJlY29nbml6ZSBiYXNlIHN5bWJvbFxuXG5cbiAgICBsZXQgc3ltYm9sO1xuXG4gICAgaWYgKHNyY19zeW1ib2xzW3RoaXMubW9kZV1bdGV4dF0pIHtcbiAgICAgIGlmICh0aGlzLnNldHRpbmdzLnN0cmljdCAmJiB0aGlzLm1vZGUgPT09ICdtYXRoJyAmJiBleHRyYUxhdGluLmluZGV4T2YodGV4dCkgPj0gMCkge1xuICAgICAgICB0aGlzLnNldHRpbmdzLnJlcG9ydE5vbnN0cmljdChcInVuaWNvZGVUZXh0SW5NYXRoTW9kZVwiLCBcIkxhdGluLTEvVW5pY29kZSB0ZXh0IGNoYXJhY3RlciBcXFwiXCIgKyB0ZXh0WzBdICsgXCJcXFwiIHVzZWQgaW4gXCIgKyBcIm1hdGggbW9kZVwiLCBudWNsZXVzKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZ3JvdXAgPSBzcmNfc3ltYm9sc1t0aGlzLm1vZGVdW3RleHRdLmdyb3VwO1xuICAgICAgY29uc3QgbG9jID0gU291cmNlTG9jYXRpb24ucmFuZ2UobnVjbGV1cyk7XG4gICAgICBsZXQgcztcblxuICAgICAgaWYgKEFUT01TLmhhc093blByb3BlcnR5KGdyb3VwKSkge1xuICAgICAgICAvLyAkRmxvd0ZpeE1lXG4gICAgICAgIGNvbnN0IGZhbWlseSA9IGdyb3VwO1xuICAgICAgICBzID0ge1xuICAgICAgICAgIHR5cGU6IFwiYXRvbVwiLFxuICAgICAgICAgIG1vZGU6IHRoaXMubW9kZSxcbiAgICAgICAgICBmYW1pbHksXG4gICAgICAgICAgbG9jLFxuICAgICAgICAgIHRleHRcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vICRGbG93Rml4TWVcbiAgICAgICAgcyA9IHtcbiAgICAgICAgICB0eXBlOiBncm91cCxcbiAgICAgICAgICBtb2RlOiB0aGlzLm1vZGUsXG4gICAgICAgICAgbG9jLFxuICAgICAgICAgIHRleHRcbiAgICAgICAgfTtcbiAgICAgIH0gLy8gJEZsb3dGaXhNZVxuXG5cbiAgICAgIHN5bWJvbCA9IHM7XG4gICAgfSBlbHNlIGlmICh0ZXh0LmNoYXJDb2RlQXQoMCkgPj0gMHg4MCkge1xuICAgICAgLy8gbm8gc3ltYm9sIGZvciBlLmcuIF5cbiAgICAgIGlmICh0aGlzLnNldHRpbmdzLnN0cmljdCkge1xuICAgICAgICBpZiAoIXN1cHBvcnRlZENvZGVwb2ludCh0ZXh0LmNoYXJDb2RlQXQoMCkpKSB7XG4gICAgICAgICAgdGhpcy5zZXR0aW5ncy5yZXBvcnROb25zdHJpY3QoXCJ1bmtub3duU3ltYm9sXCIsIFwiVW5yZWNvZ25pemVkIFVuaWNvZGUgY2hhcmFjdGVyIFxcXCJcIiArIHRleHRbMF0gKyBcIlxcXCJcIiArIChcIiAoXCIgKyB0ZXh0LmNoYXJDb2RlQXQoMCkgKyBcIilcIiksIG51Y2xldXMpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMubW9kZSA9PT0gXCJtYXRoXCIpIHtcbiAgICAgICAgICB0aGlzLnNldHRpbmdzLnJlcG9ydE5vbnN0cmljdChcInVuaWNvZGVUZXh0SW5NYXRoTW9kZVwiLCBcIlVuaWNvZGUgdGV4dCBjaGFyYWN0ZXIgXFxcIlwiICsgdGV4dFswXSArIFwiXFxcIiB1c2VkIGluIG1hdGggbW9kZVwiLCBudWNsZXVzKTtcbiAgICAgICAgfVxuICAgICAgfSAvLyBBbGwgbm9ubWF0aGVtYXRpY2FsIFVuaWNvZGUgY2hhcmFjdGVycyBhcmUgcmVuZGVyZWQgYXMgaWYgdGhleVxuICAgICAgLy8gYXJlIGluIHRleHQgbW9kZSAod3JhcHBlZCBpbiBcXHRleHQpIGJlY2F1c2UgdGhhdCdzIHdoYXQgaXRcbiAgICAgIC8vIHRha2VzIHRvIHJlbmRlciB0aGVtIGluIExhVGVYLiAgU2V0dGluZyBgbW9kZTogdGhpcy5tb2RlYCBpc1xuICAgICAgLy8gYW5vdGhlciBuYXR1cmFsIGNob2ljZSAodGhlIHVzZXIgcmVxdWVzdGVkIG1hdGggbW9kZSksIGJ1dFxuICAgICAgLy8gdGhpcyBtYWtlcyBpdCBtb3JlIGRpZmZpY3VsdCBmb3IgZ2V0Q2hhcmFjdGVyTWV0cmljcygpIHRvXG4gICAgICAvLyBkaXN0aW5ndWlzaCBVbmljb2RlIGNoYXJhY3RlcnMgd2l0aG91dCBtZXRyaWNzIGFuZCB0aG9zZSBmb3JcbiAgICAgIC8vIHdoaWNoIHdlIHdhbnQgdG8gc2ltdWxhdGUgdGhlIGxldHRlciBNLlxuXG5cbiAgICAgIHN5bWJvbCA9IHtcbiAgICAgICAgdHlwZTogXCJ0ZXh0b3JkXCIsXG4gICAgICAgIG1vZGU6IFwidGV4dFwiLFxuICAgICAgICBsb2M6IFNvdXJjZUxvY2F0aW9uLnJhbmdlKG51Y2xldXMpLFxuICAgICAgICB0ZXh0XG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDsgLy8gRU9GLCBeLCBfLCB7LCB9LCBldGMuXG4gICAgfVxuXG4gICAgdGhpcy5jb25zdW1lKCk7IC8vIFRyYW5zZm9ybSBjb21iaW5pbmcgY2hhcmFjdGVycyBpbnRvIGFjY2VudHNcblxuICAgIGlmIChtYXRjaCkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXRjaFswXS5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBhY2NlbnQgPSBtYXRjaFswXVtpXTtcblxuICAgICAgICBpZiAoIXVuaWNvZGVBY2NlbnRzW2FjY2VudF0pIHtcbiAgICAgICAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJVbmtub3duIGFjY2VudCAnIFwiICsgYWNjZW50ICsgXCInXCIsIG51Y2xldXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY29tbWFuZCA9IHVuaWNvZGVBY2NlbnRzW2FjY2VudF1bdGhpcy5tb2RlXSB8fCB1bmljb2RlQWNjZW50c1thY2NlbnRdLnRleHQ7XG5cbiAgICAgICAgaWYgKCFjb21tYW5kKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiQWNjZW50IFwiICsgYWNjZW50ICsgXCIgdW5zdXBwb3J0ZWQgaW4gXCIgKyB0aGlzLm1vZGUgKyBcIiBtb2RlXCIsIG51Y2xldXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgc3ltYm9sID0ge1xuICAgICAgICAgIHR5cGU6IFwiYWNjZW50XCIsXG4gICAgICAgICAgbW9kZTogdGhpcy5tb2RlLFxuICAgICAgICAgIGxvYzogU291cmNlTG9jYXRpb24ucmFuZ2UobnVjbGV1cyksXG4gICAgICAgICAgbGFiZWw6IGNvbW1hbmQsXG4gICAgICAgICAgaXNTdHJldGNoeTogZmFsc2UsXG4gICAgICAgICAgaXNTaGlmdHk6IHRydWUsXG4gICAgICAgICAgLy8gJEZsb3dGaXhNZVxuICAgICAgICAgIGJhc2U6IHN5bWJvbFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0gLy8gJEZsb3dGaXhNZVxuXG5cbiAgICByZXR1cm4gc3ltYm9sO1xuICB9XG5cbn1cblBhcnNlci5lbmRPZkV4cHJlc3Npb24gPSBbXCJ9XCIsIFwiXFxcXGVuZGdyb3VwXCIsIFwiXFxcXGVuZFwiLCBcIlxcXFxyaWdodFwiLCBcIiZcIl07XG47Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvcGFyc2VUcmVlLmpzXG4vKipcbiAqIFByb3ZpZGVzIGEgc2luZ2xlIGZ1bmN0aW9uIGZvciBwYXJzaW5nIGFuIGV4cHJlc3Npb24gdXNpbmcgYSBQYXJzZXJcbiAqIFRPRE8oZW1pbHkpOiBSZW1vdmUgdGhpc1xuICovXG5cblxuXG5cbi8qKlxuICogUGFyc2VzIGFuIGV4cHJlc3Npb24gdXNpbmcgYSBQYXJzZXIsIHRoZW4gcmV0dXJucyB0aGUgcGFyc2VkIHJlc3VsdC5cbiAqL1xuY29uc3QgcGFyc2VUcmVlID0gZnVuY3Rpb24gKHRvUGFyc2UsIHNldHRpbmdzKSB7XG4gIGlmICghKHR5cGVvZiB0b1BhcnNlID09PSAnc3RyaW5nJyB8fCB0b1BhcnNlIGluc3RhbmNlb2YgU3RyaW5nKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0thVGVYIGNhbiBvbmx5IHBhcnNlIHN0cmluZyB0eXBlZCBleHByZXNzaW9uJyk7XG4gIH1cblxuICBjb25zdCBwYXJzZXIgPSBuZXcgUGFyc2VyKHRvUGFyc2UsIHNldHRpbmdzKTsgLy8gQmxhbmsgb3V0IGFueSBcXGRmQHRhZyB0byBhdm9pZCBzcHVyaW91cyBcIkR1cGxpY2F0ZSBcXHRhZ1wiIGVycm9yc1xuXG4gIGRlbGV0ZSBwYXJzZXIuZ3VsbGV0Lm1hY3Jvcy5jdXJyZW50W1wiXFxcXGRmQHRhZ1wiXTtcbiAgbGV0IHRyZWUgPSBwYXJzZXIucGFyc2UoKTsgLy8gUHJldmVudCBhIGNvbG9yIGRlZmluaXRpb24gZnJvbSBwZXJzaXN0aW5nIGJldHdlZW4gY2FsbHMgdG8ga2F0ZXgucmVuZGVyKCkuXG5cbiAgZGVsZXRlIHBhcnNlci5ndWxsZXQubWFjcm9zLmN1cnJlbnRbXCJcXFxcY3VycmVudEBjb2xvclwiXTtcbiAgZGVsZXRlIHBhcnNlci5ndWxsZXQubWFjcm9zLmN1cnJlbnRbXCJcXFxcY29sb3JcIl07IC8vIElmIHRoZSBpbnB1dCB1c2VkIFxcdGFnLCBpdCB3aWxsIHNldCB0aGUgXFxkZkB0YWcgbWFjcm8gdG8gdGhlIHRhZy5cbiAgLy8gSW4gdGhpcyBjYXNlLCB3ZSBzZXBhcmF0ZWx5IHBhcnNlIHRoZSB0YWcgYW5kIHdyYXAgdGhlIHRyZWUuXG5cbiAgaWYgKHBhcnNlci5ndWxsZXQubWFjcm9zLmdldChcIlxcXFxkZkB0YWdcIikpIHtcbiAgICBpZiAoIXNldHRpbmdzLmRpc3BsYXlNb2RlKSB7XG4gICAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJcXFxcdGFnIHdvcmtzIG9ubHkgaW4gZGlzcGxheSBlcXVhdGlvbnNcIik7XG4gICAgfVxuXG4gICAgdHJlZSA9IFt7XG4gICAgICB0eXBlOiBcInRhZ1wiLFxuICAgICAgbW9kZTogXCJ0ZXh0XCIsXG4gICAgICBib2R5OiB0cmVlLFxuICAgICAgdGFnOiBwYXJzZXIuc3VicGFyc2UoW25ldyBUb2tlbihcIlxcXFxkZkB0YWdcIildKVxuICAgIH1dO1xuICB9XG5cbiAgcmV0dXJuIHRyZWU7XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzcmNfcGFyc2VUcmVlID0gKHBhcnNlVHJlZSk7XG47Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9rYXRleC5qc1xuLyogZXNsaW50IG5vLWNvbnNvbGU6MCAqL1xuXG4vKipcbiAqIFRoaXMgaXMgdGhlIG1haW4gZW50cnkgcG9pbnQgZm9yIEthVGVYLiBIZXJlLCB3ZSBleHBvc2UgZnVuY3Rpb25zIGZvclxuICogcmVuZGVyaW5nIGV4cHJlc3Npb25zIGVpdGhlciB0byBET00gbm9kZXMgb3IgdG8gbWFya3VwIHN0cmluZ3MuXG4gKlxuICogV2UgYWxzbyBleHBvc2UgdGhlIFBhcnNlRXJyb3IgY2xhc3MgdG8gY2hlY2sgaWYgZXJyb3JzIHRocm93biBmcm9tIEthVGVYIGFyZVxuICogZXJyb3JzIGluIHRoZSBleHByZXNzaW9uLCBvciBlcnJvcnMgaW4gamF2YXNjcmlwdCBoYW5kbGluZy5cbiAqL1xuXG5cblxuXG5cblxuXG5cblxuXG5cbi8qKlxuICogUGFyc2UgYW5kIGJ1aWxkIGFuIGV4cHJlc3Npb24sIGFuZCBwbGFjZSB0aGF0IGV4cHJlc3Npb24gaW4gdGhlIERPTSBub2RlXG4gKiBnaXZlbi5cbiAqL1xubGV0IHJlbmRlciA9IGZ1bmN0aW9uIChleHByZXNzaW9uLCBiYXNlTm9kZSwgb3B0aW9ucykge1xuICBiYXNlTm9kZS50ZXh0Q29udGVudCA9IFwiXCI7XG4gIGNvbnN0IG5vZGUgPSByZW5kZXJUb0RvbVRyZWUoZXhwcmVzc2lvbiwgb3B0aW9ucykudG9Ob2RlKCk7XG4gIGJhc2VOb2RlLmFwcGVuZENoaWxkKG5vZGUpO1xufTsgLy8gS2FUZVgncyBzdHlsZXMgZG9uJ3Qgd29yayBwcm9wZXJseSBpbiBxdWlya3MgbW9kZS4gUHJpbnQgb3V0IGFuIGVycm9yLCBhbmRcbi8vIGRpc2FibGUgcmVuZGVyaW5nLlxuXG5cbmlmICh0eXBlb2YgZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgaWYgKGRvY3VtZW50LmNvbXBhdE1vZGUgIT09IFwiQ1NTMUNvbXBhdFwiKSB7XG4gICAgdHlwZW9mIGNvbnNvbGUgIT09IFwidW5kZWZpbmVkXCIgJiYgY29uc29sZS53YXJuKFwiV2FybmluZzogS2FUZVggZG9lc24ndCB3b3JrIGluIHF1aXJrcyBtb2RlLiBNYWtlIHN1cmUgeW91ciBcIiArIFwid2Vic2l0ZSBoYXMgYSBzdWl0YWJsZSBkb2N0eXBlLlwiKTtcblxuICAgIHJlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIkthVGVYIGRvZXNuJ3Qgd29yayBpbiBxdWlya3MgbW9kZS5cIik7XG4gICAgfTtcbiAgfVxufVxuLyoqXG4gKiBQYXJzZSBhbmQgYnVpbGQgYW4gZXhwcmVzc2lvbiwgYW5kIHJldHVybiB0aGUgbWFya3VwIGZvciB0aGF0LlxuICovXG5cblxuY29uc3QgcmVuZGVyVG9TdHJpbmcgPSBmdW5jdGlvbiAoZXhwcmVzc2lvbiwgb3B0aW9ucykge1xuICBjb25zdCBtYXJrdXAgPSByZW5kZXJUb0RvbVRyZWUoZXhwcmVzc2lvbiwgb3B0aW9ucykudG9NYXJrdXAoKTtcbiAgcmV0dXJuIG1hcmt1cDtcbn07XG4vKipcbiAqIFBhcnNlIGFuIGV4cHJlc3Npb24gYW5kIHJldHVybiB0aGUgcGFyc2UgdHJlZS5cbiAqL1xuXG5cbmNvbnN0IGdlbmVyYXRlUGFyc2VUcmVlID0gZnVuY3Rpb24gKGV4cHJlc3Npb24sIG9wdGlvbnMpIHtcbiAgY29uc3Qgc2V0dGluZ3MgPSBuZXcgU2V0dGluZ3Mob3B0aW9ucyk7XG4gIHJldHVybiBzcmNfcGFyc2VUcmVlKGV4cHJlc3Npb24sIHNldHRpbmdzKTtcbn07XG4vKipcbiAqIElmIHRoZSBnaXZlbiBlcnJvciBpcyBhIEthVGVYIFBhcnNlRXJyb3IgYW5kIG9wdGlvbnMudGhyb3dPbkVycm9yIGlzIGZhbHNlLFxuICogcmVuZGVycyB0aGUgaW52YWxpZCBMYVRlWCBhcyBhIHNwYW4gd2l0aCBob3ZlciB0aXRsZSBnaXZpbmcgdGhlIEthVGVYXG4gKiBlcnJvciBtZXNzYWdlLiAgT3RoZXJ3aXNlLCBzaW1wbHkgdGhyb3dzIHRoZSBlcnJvci5cbiAqL1xuXG5cbmNvbnN0IHJlbmRlckVycm9yID0gZnVuY3Rpb24gKGVycm9yLCBleHByZXNzaW9uLCBvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zLnRocm93T25FcnJvciB8fCAhKGVycm9yIGluc3RhbmNlb2Ygc3JjX1BhcnNlRXJyb3IpKSB7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cblxuICBjb25zdCBub2RlID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wia2F0ZXgtZXJyb3JcIl0sIFtuZXcgU3ltYm9sTm9kZShleHByZXNzaW9uKV0pO1xuICBub2RlLnNldEF0dHJpYnV0ZShcInRpdGxlXCIsIGVycm9yLnRvU3RyaW5nKCkpO1xuICBub2RlLnNldEF0dHJpYnV0ZShcInN0eWxlXCIsIFwiY29sb3I6XCIgKyBvcHRpb25zLmVycm9yQ29sb3IpO1xuICByZXR1cm4gbm9kZTtcbn07XG4vKipcbiAqIEdlbmVyYXRlcyBhbmQgcmV0dXJucyB0aGUga2F0ZXggYnVpbGQgdHJlZS4gVGhpcyBpcyB1c2VkIGZvciBhZHZhbmNlZFxuICogdXNlIGNhc2VzIChsaWtlIHJlbmRlcmluZyB0byBjdXN0b20gb3V0cHV0KS5cbiAqL1xuXG5cbmNvbnN0IHJlbmRlclRvRG9tVHJlZSA9IGZ1bmN0aW9uIChleHByZXNzaW9uLCBvcHRpb25zKSB7XG4gIGNvbnN0IHNldHRpbmdzID0gbmV3IFNldHRpbmdzKG9wdGlvbnMpO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgdHJlZSA9IHNyY19wYXJzZVRyZWUoZXhwcmVzc2lvbiwgc2V0dGluZ3MpO1xuICAgIHJldHVybiBidWlsZFRyZWUodHJlZSwgZXhwcmVzc2lvbiwgc2V0dGluZ3MpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiByZW5kZXJFcnJvcihlcnJvciwgZXhwcmVzc2lvbiwgc2V0dGluZ3MpO1xuICB9XG59O1xuLyoqXG4gKiBHZW5lcmF0ZXMgYW5kIHJldHVybnMgdGhlIGthdGV4IGJ1aWxkIHRyZWUsIHdpdGgganVzdCBIVE1MIChubyBNYXRoTUwpLlxuICogVGhpcyBpcyB1c2VkIGZvciBhZHZhbmNlZCB1c2UgY2FzZXMgKGxpa2UgcmVuZGVyaW5nIHRvIGN1c3RvbSBvdXRwdXQpLlxuICovXG5cblxuY29uc3QgcmVuZGVyVG9IVE1MVHJlZSA9IGZ1bmN0aW9uIChleHByZXNzaW9uLCBvcHRpb25zKSB7XG4gIGNvbnN0IHNldHRpbmdzID0gbmV3IFNldHRpbmdzKG9wdGlvbnMpO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgdHJlZSA9IHNyY19wYXJzZVRyZWUoZXhwcmVzc2lvbiwgc2V0dGluZ3MpO1xuICAgIHJldHVybiBidWlsZEhUTUxUcmVlKHRyZWUsIGV4cHJlc3Npb24sIHNldHRpbmdzKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gcmVuZGVyRXJyb3IoZXJyb3IsIGV4cHJlc3Npb24sIHNldHRpbmdzKTtcbiAgfVxufTtcblxuY29uc3QgdmVyc2lvbiA9IFwiMC4xNi4yMlwiO1xuY29uc3QgX19kb21UcmVlID0ge1xuICBTcGFuOiBTcGFuLFxuICBBbmNob3I6IEFuY2hvcixcbiAgU3ltYm9sTm9kZTogU3ltYm9sTm9kZSxcbiAgU3ZnTm9kZTogU3ZnTm9kZSxcbiAgUGF0aE5vZGU6IFBhdGhOb2RlLFxuICBMaW5lTm9kZTogTGluZU5vZGVcbn07IC8vIEVTTSBleHBvcnRzXG5cbiAvLyBDSlMgZXhwb3J0cyBhbmQgRVNNIGRlZmF1bHQgZXhwb3J0XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGthdGV4ID0gKHtcbiAgLyoqXG4gICAqIEN1cnJlbnQgS2FUZVggdmVyc2lvblxuICAgKi9cbiAgdmVyc2lvbixcblxuICAvKipcbiAgICogUmVuZGVycyB0aGUgZ2l2ZW4gTGFUZVggaW50byBhbiBIVE1MK01hdGhNTCBjb21iaW5hdGlvbiwgYW5kIGFkZHNcbiAgICogaXQgYXMgYSBjaGlsZCB0byB0aGUgc3BlY2lmaWVkIERPTSBub2RlLlxuICAgKi9cbiAgcmVuZGVyLFxuXG4gIC8qKlxuICAgKiBSZW5kZXJzIHRoZSBnaXZlbiBMYVRlWCBpbnRvIGFuIEhUTUwrTWF0aE1MIGNvbWJpbmF0aW9uIHN0cmluZyxcbiAgICogZm9yIHNlbmRpbmcgdG8gdGhlIGNsaWVudC5cbiAgICovXG4gIHJlbmRlclRvU3RyaW5nLFxuXG4gIC8qKlxuICAgKiBLYVRlWCBlcnJvciwgdXN1YWxseSBkdXJpbmcgcGFyc2luZy5cbiAgICovXG4gIFBhcnNlRXJyb3I6IHNyY19QYXJzZUVycm9yLFxuXG4gIC8qKlxuICAgKiBUaGUgc2NoZW1hIG9mIFNldHRpbmdzXG4gICAqL1xuICBTRVRUSU5HU19TQ0hFTUE6IFNFVFRJTkdTX1NDSEVNQSxcblxuICAvKipcbiAgICogUGFyc2VzIHRoZSBnaXZlbiBMYVRlWCBpbnRvIEthVGVYJ3MgaW50ZXJuYWwgcGFyc2UgdHJlZSBzdHJ1Y3R1cmUsXG4gICAqIHdpdGhvdXQgcmVuZGVyaW5nIHRvIEhUTUwgb3IgTWF0aE1MLlxuICAgKlxuICAgKiBOT1RFOiBUaGlzIG1ldGhvZCBpcyBub3QgY3VycmVudGx5IHJlY29tbWVuZGVkIGZvciBwdWJsaWMgdXNlLlxuICAgKiBUaGUgaW50ZXJuYWwgdHJlZSByZXByZXNlbnRhdGlvbiBpcyB1bnN0YWJsZSBhbmQgaXMgdmVyeSBsaWtlbHlcbiAgICogdG8gY2hhbmdlLiBVc2UgYXQgeW91ciBvd24gcmlzay5cbiAgICovXG4gIF9fcGFyc2U6IGdlbmVyYXRlUGFyc2VUcmVlLFxuXG4gIC8qKlxuICAgKiBSZW5kZXJzIHRoZSBnaXZlbiBMYVRlWCBpbnRvIGFuIEhUTUwrTWF0aE1MIGludGVybmFsIERPTSB0cmVlXG4gICAqIHJlcHJlc2VudGF0aW9uLCB3aXRob3V0IGZsYXR0ZW5pbmcgdGhhdCByZXByZXNlbnRhdGlvbiB0byBhIHN0cmluZy5cbiAgICpcbiAgICogTk9URTogVGhpcyBtZXRob2QgaXMgbm90IGN1cnJlbnRseSByZWNvbW1lbmRlZCBmb3IgcHVibGljIHVzZS5cbiAgICogVGhlIGludGVybmFsIHRyZWUgcmVwcmVzZW50YXRpb24gaXMgdW5zdGFibGUgYW5kIGlzIHZlcnkgbGlrZWx5XG4gICAqIHRvIGNoYW5nZS4gVXNlIGF0IHlvdXIgb3duIHJpc2suXG4gICAqL1xuICBfX3JlbmRlclRvRG9tVHJlZTogcmVuZGVyVG9Eb21UcmVlLFxuXG4gIC8qKlxuICAgKiBSZW5kZXJzIHRoZSBnaXZlbiBMYVRlWCBpbnRvIGFuIEhUTUwgaW50ZXJuYWwgRE9NIHRyZWUgcmVwcmVzZW50YXRpb24sXG4gICAqIHdpdGhvdXQgTWF0aE1MIGFuZCB3aXRob3V0IGZsYXR0ZW5pbmcgdGhhdCByZXByZXNlbnRhdGlvbiB0byBhIHN0cmluZy5cbiAgICpcbiAgICogTk9URTogVGhpcyBtZXRob2QgaXMgbm90IGN1cnJlbnRseSByZWNvbW1lbmRlZCBmb3IgcHVibGljIHVzZS5cbiAgICogVGhlIGludGVybmFsIHRyZWUgcmVwcmVzZW50YXRpb24gaXMgdW5zdGFibGUgYW5kIGlzIHZlcnkgbGlrZWx5XG4gICAqIHRvIGNoYW5nZS4gVXNlIGF0IHlvdXIgb3duIHJpc2suXG4gICAqL1xuICBfX3JlbmRlclRvSFRNTFRyZWU6IHJlbmRlclRvSFRNTFRyZWUsXG5cbiAgLyoqXG4gICAqIGV4dGVuZHMgaW50ZXJuYWwgZm9udCBtZXRyaWNzIG9iamVjdCB3aXRoIGEgbmV3IG9iamVjdFxuICAgKiBlYWNoIGtleSBpbiB0aGUgbmV3IG9iamVjdCByZXByZXNlbnRzIGEgZm9udCBuYW1lXG4gICovXG4gIF9fc2V0Rm9udE1ldHJpY3M6IHNldEZvbnRNZXRyaWNzLFxuXG4gIC8qKlxuICAgKiBhZGRzIGEgbmV3IHN5bWJvbCB0byBidWlsdGluIHN5bWJvbHMgdGFibGVcbiAgICovXG4gIF9fZGVmaW5lU3ltYm9sOiBkZWZpbmVTeW1ib2wsXG5cbiAgLyoqXG4gICAqIGFkZHMgYSBuZXcgZnVuY3Rpb24gdG8gYnVpbHRpbiBmdW5jdGlvbiBsaXN0LFxuICAgKiB3aGljaCBkaXJlY3RseSBwcm9kdWNlIHBhcnNlIHRyZWUgZWxlbWVudHNcbiAgICogYW5kIGhhdmUgdGhlaXIgb3duIGh0bWwvbWF0aG1sIGJ1aWxkZXJzXG4gICAqL1xuICBfX2RlZmluZUZ1bmN0aW9uOiBkZWZpbmVGdW5jdGlvbixcblxuICAvKipcbiAgICogYWRkcyBhIG5ldyBtYWNybyB0byBidWlsdGluIG1hY3JvIGxpc3RcbiAgICovXG4gIF9fZGVmaW5lTWFjcm86IGRlZmluZU1hY3JvLFxuXG4gIC8qKlxuICAgKiBFeHBvc2UgdGhlIGRvbSB0cmVlIG5vZGUgdHlwZXMsIHdoaWNoIGNhbiBiZSB1c2VmdWwgZm9yIHR5cGUgY2hlY2tpbmcgbm9kZXMuXG4gICAqXG4gICAqIE5PVEU6IFRoZXNlIG1ldGhvZHMgYXJlIG5vdCBjdXJyZW50bHkgcmVjb21tZW5kZWQgZm9yIHB1YmxpYyB1c2UuXG4gICAqIFRoZSBpbnRlcm5hbCB0cmVlIHJlcHJlc2VudGF0aW9uIGlzIHVuc3RhYmxlIGFuZCBpcyB2ZXJ5IGxpa2VseVxuICAgKiB0byBjaGFuZ2UuIFVzZSBhdCB5b3VyIG93biByaXNrLlxuICAgKi9cbiAgX19kb21UcmVlXG59KTtcbjsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL2thdGV4LndlYnBhY2suanNcbi8qKlxuICogVGhpcyBpcyB0aGUgd2VicGFjayBlbnRyeSBwb2ludCBmb3IgS2FUZVguIEFzIEVDTUFTY3JpcHQsIGZsb3dbMV0gYW5kIGplc3RbMl1cbiAqIGRvZXNuJ3Qgc3VwcG9ydCBDU1MgbW9kdWxlcyBuYXRpdmVseSwgYSBzZXBhcmF0ZSBlbnRyeSBwb2ludCBpcyB1c2VkIGFuZFxuICogaXQgaXMgbm90IGZsb3d0eXBlZC5cbiAqXG4gKiBbMV0gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vbGFtYmRhaGFuZHMvZDE5ZTBkYTk2Mjg1Yjc0OWYwZWZcbiAqIFsyXSBodHRwczovL2ZhY2Vib29rLmdpdGh1Yi5pby9qZXN0L2RvY3MvZW4vd2VicGFjay5odG1sXG4gKi9cblxuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBrYXRleF93ZWJwYWNrID0gKGthdGV4KTtcbl9fd2VicGFja19leHBvcnRzX18gPSBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXTtcbi8qKioqKiovIFx0cmV0dXJuIF9fd2VicGFja19leHBvcnRzX187XG4vKioqKioqLyB9KSgpXG47XG59KTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2336\n')},2338:module=>{eval('/*\nLanguage: Caché Object Script\nAuthor: Nikita Savchenko \nCategory: enterprise, scripting\nWebsite: https://cedocs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls\n*/\n\n/** @type LanguageFn */\nfunction cos(hljs) {\n const STRINGS = {\n className: \'string\',\n variants: [\n {\n begin: \'"\',\n end: \'"\',\n contains: [\n { // escaped\n begin: "\\"\\"",\n relevance: 0\n }\n ]\n }\n ]\n };\n\n const NUMBERS = {\n className: "number",\n begin: "\\\\b(\\\\d+(\\\\.\\\\d*)?|\\\\.\\\\d+)",\n relevance: 0\n };\n\n const COS_KEYWORDS =\n \'property parameter class classmethod clientmethod extends as break \'\n + \'catch close continue do d|0 else elseif for goto halt hang h|0 if job \'\n + \'j|0 kill k|0 lock l|0 merge new open quit q|0 read r|0 return set s|0 \'\n + \'tcommit throw trollback try tstart use view while write w|0 xecute x|0 \'\n + \'zkill znspace zn ztrap zwrite zw zzdump zzwrite print zbreak zinsert \'\n + \'zload zprint zremove zsave zzprint mv mvcall mvcrt mvdim mvprint zquit \'\n + \'zsync ascii\';\n\n // registered function - no need in them due to all functions are highlighted,\n // but I\'ll just leave this here.\n\n // "$bit", "$bitcount",\n // "$bitfind", "$bitlogic", "$case", "$char", "$classmethod", "$classname",\n // "$compile", "$data", "$decimal", "$double", "$extract", "$factor",\n // "$find", "$fnumber", "$get", "$increment", "$inumber", "$isobject",\n // "$isvaliddouble", "$isvalidnum", "$justify", "$length", "$list",\n // "$listbuild", "$listdata", "$listfind", "$listfromstring", "$listget",\n // "$listlength", "$listnext", "$listsame", "$listtostring", "$listvalid",\n // "$locate", "$match", "$method", "$name", "$nconvert", "$next",\n // "$normalize", "$now", "$number", "$order", "$parameter", "$piece",\n // "$prefetchoff", "$prefetchon", "$property", "$qlength", "$qsubscript",\n // "$query", "$random", "$replace", "$reverse", "$sconvert", "$select",\n // "$sortbegin", "$sortend", "$stack", "$text", "$translate", "$view",\n // "$wascii", "$wchar", "$wextract", "$wfind", "$wiswide", "$wlength",\n // "$wreverse", "$xecute", "$zabs", "$zarccos", "$zarcsin", "$zarctan",\n // "$zcos", "$zcot", "$zcsc", "$zdate", "$zdateh", "$zdatetime",\n // "$zdatetimeh", "$zexp", "$zhex", "$zln", "$zlog", "$zpower", "$zsec",\n // "$zsin", "$zsqr", "$ztan", "$ztime", "$ztimeh", "$zboolean",\n // "$zconvert", "$zcrc", "$zcyc", "$zdascii", "$zdchar", "$zf",\n // "$ziswide", "$zlascii", "$zlchar", "$zname", "$zposition", "$zqascii",\n // "$zqchar", "$zsearch", "$zseek", "$zstrip", "$zwascii", "$zwchar",\n // "$zwidth", "$zwpack", "$zwbpack", "$zwunpack", "$zwbunpack", "$zzenkaku",\n // "$change", "$mv", "$mvat", "$mvfmt", "$mvfmts", "$mviconv",\n // "$mviconvs", "$mvinmat", "$mvlover", "$mvoconv", "$mvoconvs", "$mvraise",\n // "$mvtrans", "$mvv", "$mvname", "$zbitand", "$zbitcount", "$zbitfind",\n // "$zbitget", "$zbitlen", "$zbitnot", "$zbitor", "$zbitset", "$zbitstr",\n // "$zbitxor", "$zincrement", "$znext", "$zorder", "$zprevious", "$zsort",\n // "device", "$ecode", "$estack", "$etrap", "$halt", "$horolog",\n // "$io", "$job", "$key", "$namespace", "$principal", "$quit", "$roles",\n // "$storage", "$system", "$test", "$this", "$tlevel", "$username",\n // "$x", "$y", "$za", "$zb", "$zchild", "$zeof", "$zeos", "$zerror",\n // "$zhorolog", "$zio", "$zjob", "$zmode", "$znspace", "$zparent", "$zpi",\n // "$zpos", "$zreference", "$zstorage", "$ztimestamp", "$ztimezone",\n // "$ztrap", "$zversion"\n\n return {\n name: \'Caché Object Script\',\n case_insensitive: true,\n aliases: [ "cls" ],\n keywords: COS_KEYWORDS,\n contains: [\n NUMBERS,\n STRINGS,\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE,\n {\n className: "comment",\n begin: /;/,\n end: "$",\n relevance: 0\n },\n { // Functions and user-defined functions: write $ztime(60*60*3), $$myFunc(10), $$^Val(1)\n className: "built_in",\n begin: /(?:\\$\\$?|\\.\\.)\\^?[a-zA-Z]+/\n },\n { // Macro command: quit $$$OK\n className: "built_in",\n begin: /\\$\\$\\$[a-zA-Z]+/\n },\n { // Special (global) variables: write %request.Content; Built-in classes: %Library.Integer\n className: "built_in",\n begin: /%[a-z]+(?:\\.[a-z]+)*/\n },\n { // Global variable: set ^globalName = 12 write ^globalName\n className: "symbol",\n begin: /\\^%?[a-zA-Z][\\w]*/\n },\n { // Some control constructions: do ##class(Package.ClassName).Method(), ##super()\n className: "keyword",\n begin: /##class|##super|#define|#dim/\n },\n // sub-languages: are not fully supported by hljs by 11/15/2015\n // left for the future implementation.\n {\n begin: /&sql\\(/,\n end: /\\)/,\n excludeBegin: true,\n excludeEnd: true,\n subLanguage: "sql"\n },\n {\n begin: /&(js|jscript|javascript)/,\n excludeBegin: true,\n excludeEnd: true,\n subLanguage: "javascript"\n },\n {\n // this brakes first and last tag, but this is the only way to embed a valid html\n begin: /&html<\\s*\\s*>/,\n subLanguage: "xml"\n }\n ]\n };\n}\n\nmodule.exports = cos;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjMzOC5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBLE9BQU87QUFDUCxRQUFRO0FBQ1I7QUFDQTtBQUNBLE9BQU87QUFDUCxRQUFRO0FBQ1I7QUFDQTtBQUNBLE9BQU87QUFDUCxRQUFRLHVEQUF1RDtBQUMvRDtBQUNBO0FBQ0EsT0FBTztBQUNQLFFBQVE7QUFDUjtBQUNBO0FBQ0EsT0FBTztBQUNQLFFBQVE7QUFDUjtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL29ic2lkaWFuLW1pbmRtYXAtbmV4dGdlbi8uL25vZGVfbW9kdWxlcy8ucG5wbS9oaWdobGlnaHQuanNAMTEuMTEuMS9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvY29zLmpzPzdmZWMiXSwic291cmNlc0NvbnRlbnQiOlsiLypcbkxhbmd1YWdlOiBDYWNow6kgT2JqZWN0IFNjcmlwdFxuQXV0aG9yOiBOaWtpdGEgU2F2Y2hlbmtvIDx6aXRyb3MubGFiQGdtYWlsLmNvbT5cbkNhdGVnb3J5OiBlbnRlcnByaXNlLCBzY3JpcHRpbmdcbldlYnNpdGU6IGh0dHBzOi8vY2Vkb2NzLmludGVyc3lzdGVtcy5jb20vbGF0ZXN0L2NzcC9kb2Nib29rL0RvY0Jvb2suVUkuUGFnZS5jbHNcbiovXG5cbi8qKiBAdHlwZSBMYW5ndWFnZUZuICovXG5mdW5jdGlvbiBjb3MoaGxqcykge1xuICBjb25zdCBTVFJJTkdTID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdcIicsXG4gICAgICAgIGVuZDogJ1wiJyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7IC8vIGVzY2FwZWRcbiAgICAgICAgICAgIGJlZ2luOiBcIlxcXCJcXFwiXCIsXG4gICAgICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH1cbiAgICBdXG4gIH07XG5cbiAgY29uc3QgTlVNQkVSUyA9IHtcbiAgICBjbGFzc05hbWU6IFwibnVtYmVyXCIsXG4gICAgYmVnaW46IFwiXFxcXGIoXFxcXGQrKFxcXFwuXFxcXGQqKT98XFxcXC5cXFxcZCspXCIsXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG5cbiAgY29uc3QgQ09TX0tFWVdPUkRTID1cbiAgICAncHJvcGVydHkgcGFyYW1ldGVyIGNsYXNzIGNsYXNzbWV0aG9kIGNsaWVudG1ldGhvZCBleHRlbmRzIGFzIGJyZWFrICdcbiAgICArICdjYXRjaCBjbG9zZSBjb250aW51ZSBkbyBkfDAgZWxzZSBlbHNlaWYgZm9yIGdvdG8gaGFsdCBoYW5nIGh8MCBpZiBqb2IgJ1xuICAgICsgJ2p8MCBraWxsIGt8MCBsb2NrIGx8MCBtZXJnZSBuZXcgb3BlbiBxdWl0IHF8MCByZWFkIHJ8MCByZXR1cm4gc2V0IHN8MCAnXG4gICAgKyAndGNvbW1pdCB0aHJvdyB0cm9sbGJhY2sgdHJ5IHRzdGFydCB1c2UgdmlldyB3aGlsZSB3cml0ZSB3fDAgeGVjdXRlIHh8MCAnXG4gICAgKyAnemtpbGwgem5zcGFjZSB6biB6dHJhcCB6d3JpdGUgencgenpkdW1wIHp6d3JpdGUgcHJpbnQgemJyZWFrIHppbnNlcnQgJ1xuICAgICsgJ3psb2FkIHpwcmludCB6cmVtb3ZlIHpzYXZlIHp6cHJpbnQgbXYgbXZjYWxsIG12Y3J0IG12ZGltIG12cHJpbnQgenF1aXQgJ1xuICAgICsgJ3pzeW5jIGFzY2lpJztcblxuICAvLyByZWdpc3RlcmVkIGZ1bmN0aW9uIC0gbm8gbmVlZCBpbiB0aGVtIGR1ZSB0byBhbGwgZnVuY3Rpb25zIGFyZSBoaWdobGlnaHRlZCxcbiAgLy8gYnV0IEknbGwganVzdCBsZWF2ZSB0aGlzIGhlcmUuXG5cbiAgLy8gXCIkYml0XCIsIFwiJGJpdGNvdW50XCIsXG4gIC8vIFwiJGJpdGZpbmRcIiwgXCIkYml0bG9naWNcIiwgXCIkY2FzZVwiLCBcIiRjaGFyXCIsIFwiJGNsYXNzbWV0aG9kXCIsIFwiJGNsYXNzbmFtZVwiLFxuICAvLyBcIiRjb21waWxlXCIsIFwiJGRhdGFcIiwgXCIkZGVjaW1hbFwiLCBcIiRkb3VibGVcIiwgXCIkZXh0cmFjdFwiLCBcIiRmYWN0b3JcIixcbiAgLy8gXCIkZmluZFwiLCBcIiRmbnVtYmVyXCIsIFwiJGdldFwiLCBcIiRpbmNyZW1lbnRcIiwgXCIkaW51bWJlclwiLCBcIiRpc29iamVjdFwiLFxuICAvLyBcIiRpc3ZhbGlkZG91YmxlXCIsIFwiJGlzdmFsaWRudW1cIiwgXCIkanVzdGlmeVwiLCBcIiRsZW5ndGhcIiwgXCIkbGlzdFwiLFxuICAvLyBcIiRsaXN0YnVpbGRcIiwgXCIkbGlzdGRhdGFcIiwgXCIkbGlzdGZpbmRcIiwgXCIkbGlzdGZyb21zdHJpbmdcIiwgXCIkbGlzdGdldFwiLFxuICAvLyBcIiRsaXN0bGVuZ3RoXCIsIFwiJGxpc3RuZXh0XCIsIFwiJGxpc3RzYW1lXCIsIFwiJGxpc3R0b3N0cmluZ1wiLCBcIiRsaXN0dmFsaWRcIixcbiAgLy8gXCIkbG9jYXRlXCIsIFwiJG1hdGNoXCIsIFwiJG1ldGhvZFwiLCBcIiRuYW1lXCIsIFwiJG5jb252ZXJ0XCIsIFwiJG5leHRcIixcbiAgLy8gXCIkbm9ybWFsaXplXCIsIFwiJG5vd1wiLCBcIiRudW1iZXJcIiwgXCIkb3JkZXJcIiwgXCIkcGFyYW1ldGVyXCIsIFwiJHBpZWNlXCIsXG4gIC8vIFwiJHByZWZldGNob2ZmXCIsIFwiJHByZWZldGNob25cIiwgXCIkcHJvcGVydHlcIiwgXCIkcWxlbmd0aFwiLCBcIiRxc3Vic2NyaXB0XCIsXG4gIC8vIFwiJHF1ZXJ5XCIsIFwiJHJhbmRvbVwiLCBcIiRyZXBsYWNlXCIsIFwiJHJldmVyc2VcIiwgXCIkc2NvbnZlcnRcIiwgXCIkc2VsZWN0XCIsXG4gIC8vIFwiJHNvcnRiZWdpblwiLCBcIiRzb3J0ZW5kXCIsIFwiJHN0YWNrXCIsIFwiJHRleHRcIiwgXCIkdHJhbnNsYXRlXCIsIFwiJHZpZXdcIixcbiAgLy8gXCIkd2FzY2lpXCIsIFwiJHdjaGFyXCIsIFwiJHdleHRyYWN0XCIsIFwiJHdmaW5kXCIsIFwiJHdpc3dpZGVcIiwgXCIkd2xlbmd0aFwiLFxuICAvLyBcIiR3cmV2ZXJzZVwiLCBcIiR4ZWN1dGVcIiwgXCIkemFic1wiLCBcIiR6YXJjY29zXCIsIFwiJHphcmNzaW5cIiwgXCIkemFyY3RhblwiLFxuICAvLyBcIiR6Y29zXCIsIFwiJHpjb3RcIiwgXCIkemNzY1wiLCBcIiR6ZGF0ZVwiLCBcIiR6ZGF0ZWhcIiwgXCIkemRhdGV0aW1lXCIsXG4gIC8vIFwiJHpkYXRldGltZWhcIiwgXCIkemV4cFwiLCBcIiR6aGV4XCIsIFwiJHpsblwiLCBcIiR6bG9nXCIsIFwiJHpwb3dlclwiLCBcIiR6c2VjXCIsXG4gIC8vIFwiJHpzaW5cIiwgXCIkenNxclwiLCBcIiR6dGFuXCIsIFwiJHp0aW1lXCIsIFwiJHp0aW1laFwiLCBcIiR6Ym9vbGVhblwiLFxuICAvLyBcIiR6Y29udmVydFwiLCBcIiR6Y3JjXCIsIFwiJHpjeWNcIiwgXCIkemRhc2NpaVwiLCBcIiR6ZGNoYXJcIiwgXCIkemZcIixcbiAgLy8gXCIkemlzd2lkZVwiLCBcIiR6bGFzY2lpXCIsIFwiJHpsY2hhclwiLCBcIiR6bmFtZVwiLCBcIiR6cG9zaXRpb25cIiwgXCIkenFhc2NpaVwiLFxuICAvLyBcIiR6cWNoYXJcIiwgXCIkenNlYXJjaFwiLCBcIiR6c2Vla1wiLCBcIiR6c3RyaXBcIiwgXCIkendhc2NpaVwiLCBcIiR6d2NoYXJcIixcbiAgLy8gXCIkendpZHRoXCIsIFwiJHp3cGFja1wiLCBcIiR6d2JwYWNrXCIsIFwiJHp3dW5wYWNrXCIsIFwiJHp3YnVucGFja1wiLCBcIiR6emVua2FrdVwiLFxuICAvLyBcIiRjaGFuZ2VcIiwgXCIkbXZcIiwgXCIkbXZhdFwiLCBcIiRtdmZtdFwiLCBcIiRtdmZtdHNcIiwgXCIkbXZpY29udlwiLFxuICAvLyBcIiRtdmljb252c1wiLCBcIiRtdmlubWF0XCIsIFwiJG12bG92ZXJcIiwgXCIkbXZvY29udlwiLCBcIiRtdm9jb252c1wiLCBcIiRtdnJhaXNlXCIsXG4gIC8vIFwiJG12dHJhbnNcIiwgXCIkbXZ2XCIsIFwiJG12bmFtZVwiLCBcIiR6Yml0YW5kXCIsIFwiJHpiaXRjb3VudFwiLCBcIiR6Yml0ZmluZFwiLFxuICAvLyBcIiR6Yml0Z2V0XCIsIFwiJHpiaXRsZW5cIiwgXCIkemJpdG5vdFwiLCBcIiR6Yml0b3JcIiwgXCIkemJpdHNldFwiLCBcIiR6Yml0c3RyXCIsXG4gIC8vIFwiJHpiaXR4b3JcIiwgXCIkemluY3JlbWVudFwiLCBcIiR6bmV4dFwiLCBcIiR6b3JkZXJcIiwgXCIkenByZXZpb3VzXCIsIFwiJHpzb3J0XCIsXG4gIC8vIFwiZGV2aWNlXCIsIFwiJGVjb2RlXCIsIFwiJGVzdGFja1wiLCBcIiRldHJhcFwiLCBcIiRoYWx0XCIsIFwiJGhvcm9sb2dcIixcbiAgLy8gXCIkaW9cIiwgXCIkam9iXCIsIFwiJGtleVwiLCBcIiRuYW1lc3BhY2VcIiwgXCIkcHJpbmNpcGFsXCIsIFwiJHF1aXRcIiwgXCIkcm9sZXNcIixcbiAgLy8gXCIkc3RvcmFnZVwiLCBcIiRzeXN0ZW1cIiwgXCIkdGVzdFwiLCBcIiR0aGlzXCIsIFwiJHRsZXZlbFwiLCBcIiR1c2VybmFtZVwiLFxuICAvLyBcIiR4XCIsIFwiJHlcIiwgXCIkemFcIiwgXCIkemJcIiwgXCIkemNoaWxkXCIsIFwiJHplb2ZcIiwgXCIkemVvc1wiLCBcIiR6ZXJyb3JcIixcbiAgLy8gXCIkemhvcm9sb2dcIiwgXCIkemlvXCIsIFwiJHpqb2JcIiwgXCIkem1vZGVcIiwgXCIkem5zcGFjZVwiLCBcIiR6cGFyZW50XCIsIFwiJHpwaVwiLFxuICAvLyBcIiR6cG9zXCIsIFwiJHpyZWZlcmVuY2VcIiwgXCIkenN0b3JhZ2VcIiwgXCIkenRpbWVzdGFtcFwiLCBcIiR6dGltZXpvbmVcIixcbiAgLy8gXCIkenRyYXBcIiwgXCIkenZlcnNpb25cIlxuXG4gIHJldHVybiB7XG4gICAgbmFtZTogJ0NhY2jDqSBPYmplY3QgU2NyaXB0JyxcbiAgICBjYXNlX2luc2Vuc2l0aXZlOiB0cnVlLFxuICAgIGFsaWFzZXM6IFsgXCJjbHNcIiBdLFxuICAgIGtleXdvcmRzOiBDT1NfS0VZV09SRFMsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIE5VTUJFUlMsXG4gICAgICBTVFJJTkdTLFxuICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiBcImNvbW1lbnRcIixcbiAgICAgICAgYmVnaW46IC87LyxcbiAgICAgICAgZW5kOiBcIiRcIixcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAgeyAvLyBGdW5jdGlvbnMgYW5kIHVzZXItZGVmaW5lZCBmdW5jdGlvbnM6IHdyaXRlICR6dGltZSg2MCo2MCozKSwgJCRteUZ1bmMoMTApLCAkJF5WYWwoMSlcbiAgICAgICAgY2xhc3NOYW1lOiBcImJ1aWx0X2luXCIsXG4gICAgICAgIGJlZ2luOiAvKD86XFwkXFwkP3xcXC5cXC4pXFxeP1thLXpBLVpdKy9cbiAgICAgIH0sXG4gICAgICB7IC8vIE1hY3JvIGNvbW1hbmQ6IHF1aXQgJCQkT0tcbiAgICAgICAgY2xhc3NOYW1lOiBcImJ1aWx0X2luXCIsXG4gICAgICAgIGJlZ2luOiAvXFwkXFwkXFwkW2EtekEtWl0rL1xuICAgICAgfSxcbiAgICAgIHsgLy8gU3BlY2lhbCAoZ2xvYmFsKSB2YXJpYWJsZXM6IHdyaXRlICVyZXF1ZXN0LkNvbnRlbnQ7IEJ1aWx0LWluIGNsYXNzZXM6ICVMaWJyYXJ5LkludGVnZXJcbiAgICAgICAgY2xhc3NOYW1lOiBcImJ1aWx0X2luXCIsXG4gICAgICAgIGJlZ2luOiAvJVthLXpdKyg/OlxcLlthLXpdKykqL1xuICAgICAgfSxcbiAgICAgIHsgLy8gR2xvYmFsIHZhcmlhYmxlOiBzZXQgXmdsb2JhbE5hbWUgPSAxMiB3cml0ZSBeZ2xvYmFsTmFtZVxuICAgICAgICBjbGFzc05hbWU6IFwic3ltYm9sXCIsXG4gICAgICAgIGJlZ2luOiAvXFxeJT9bYS16QS1aXVtcXHddKi9cbiAgICAgIH0sXG4gICAgICB7IC8vIFNvbWUgY29udHJvbCBjb25zdHJ1Y3Rpb25zOiBkbyAjI2NsYXNzKFBhY2thZ2UuQ2xhc3NOYW1lKS5NZXRob2QoKSwgIyNzdXBlcigpXG4gICAgICAgIGNsYXNzTmFtZTogXCJrZXl3b3JkXCIsXG4gICAgICAgIGJlZ2luOiAvIyNjbGFzc3wjI3N1cGVyfCNkZWZpbmV8I2RpbS9cbiAgICAgIH0sXG4gICAgICAvLyBzdWItbGFuZ3VhZ2VzOiBhcmUgbm90IGZ1bGx5IHN1cHBvcnRlZCBieSBobGpzIGJ5IDExLzE1LzIwMTVcbiAgICAgIC8vIGxlZnQgZm9yIHRoZSBmdXR1cmUgaW1wbGVtZW50YXRpb24uXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvJnNxbFxcKC8sXG4gICAgICAgIGVuZDogL1xcKS8sXG4gICAgICAgIGV4Y2x1ZGVCZWdpbjogdHJ1ZSxcbiAgICAgICAgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAgc3ViTGFuZ3VhZ2U6IFwic3FsXCJcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvJihqc3xqc2NyaXB0fGphdmFzY3JpcHQpPC8sXG4gICAgICAgIGVuZDogLz4vLFxuICAgICAgICBleGNsdWRlQmVnaW46IHRydWUsXG4gICAgICAgIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgIHN1Ykxhbmd1YWdlOiBcImphdmFzY3JpcHRcIlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgLy8gdGhpcyBicmFrZXMgZmlyc3QgYW5kIGxhc3QgdGFnLCBidXQgdGhpcyBpcyB0aGUgb25seSB3YXkgdG8gZW1iZWQgYSB2YWxpZCBodG1sXG4gICAgICAgIGJlZ2luOiAvJmh0bWw8XFxzKjwvLFxuICAgICAgICBlbmQ6IC8+XFxzKj4vLFxuICAgICAgICBzdWJMYW5ndWFnZTogXCJ4bWxcIlxuICAgICAgfVxuICAgIF1cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjb3M7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2338\n')},2350:module=>{eval("/*\nLanguage: Q\nDescription: Q is a vector-based functional paradigm programming language built into the kdb+ database.\n (K/Q/Kdb+ from Kx Systems)\nAuthor: Sergey Vidyuk \nWebsite: https://kx.com/connect-with-us/developers/\nCategory: enterprise, functional, database\n*/\n\nfunction q(hljs) {\n const KEYWORDS = {\n $pattern: /(`?)[A-Za-z0-9_]+\\b/,\n keyword:\n 'do while select delete by update from',\n literal:\n '0b 1b',\n built_in:\n 'neg not null string reciprocal floor ceiling signum mod xbar xlog and or each scan over prior mmu lsq inv md5 ltime gtime count first var dev med cov cor all any rand sums prds mins maxs fills deltas ratios avgs differ prev next rank reverse iasc idesc asc desc msum mcount mavg mdev xrank mmin mmax xprev rotate distinct group where flip type key til get value attr cut set upsert raze union inter except cross sv vs sublist enlist read0 read1 hopen hclose hdel hsym hcount peach system ltrim rtrim trim lower upper ssr view tables views cols xcols keys xkey xcol xasc xdesc fkeys meta lj aj aj0 ij pj asof uj ww wj wj1 fby xgroup ungroup ej save load rsave rload show csv parse eval min max avg wavg wsum sin cos tan sum',\n type:\n '`float `double int `timestamp `timespan `datetime `time `boolean `symbol `char `byte `short `long `real `month `date `minute `second `guid'\n };\n\n return {\n name: 'Q',\n aliases: [\n 'k',\n 'kdb'\n ],\n keywords: KEYWORDS,\n contains: [\n hljs.C_LINE_COMMENT_MODE,\n hljs.QUOTE_STRING_MODE,\n hljs.C_NUMBER_MODE\n ]\n };\n}\n\nmodule.exports = q;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjM1MC5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vb2JzaWRpYW4tbWluZG1hcC1uZXh0Z2VuLy4vbm9kZV9tb2R1bGVzLy5wbnBtL2hpZ2hsaWdodC5qc0AxMS4xMS4xL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9xLmpzP2E5MWQiXSwic291cmNlc0NvbnRlbnQiOlsiLypcbkxhbmd1YWdlOiBRXG5EZXNjcmlwdGlvbjogUSBpcyBhIHZlY3Rvci1iYXNlZCBmdW5jdGlvbmFsIHBhcmFkaWdtIHByb2dyYW1taW5nIGxhbmd1YWdlIGJ1aWx0IGludG8gdGhlIGtkYisgZGF0YWJhc2UuXG4gICAgICAgICAgICAgKEsvUS9LZGIrIGZyb20gS3ggU3lzdGVtcylcbkF1dGhvcjogU2VyZ2V5IFZpZHl1ayA8c3ZpZHl1a0BnbWFpbC5jb20+XG5XZWJzaXRlOiBodHRwczovL2t4LmNvbS9jb25uZWN0LXdpdGgtdXMvZGV2ZWxvcGVycy9cbkNhdGVnb3J5OiBlbnRlcnByaXNlLCBmdW5jdGlvbmFsLCBkYXRhYmFzZVxuKi9cblxuZnVuY3Rpb24gcShobGpzKSB7XG4gIGNvbnN0IEtFWVdPUkRTID0ge1xuICAgICRwYXR0ZXJuOiAvKGA/KVtBLVphLXowLTlfXStcXGIvLFxuICAgIGtleXdvcmQ6XG4gICAgICAnZG8gd2hpbGUgc2VsZWN0IGRlbGV0ZSBieSB1cGRhdGUgZnJvbScsXG4gICAgbGl0ZXJhbDpcbiAgICAgICcwYiAxYicsXG4gICAgYnVpbHRfaW46XG4gICAgICAnbmVnIG5vdCBudWxsIHN0cmluZyByZWNpcHJvY2FsIGZsb29yIGNlaWxpbmcgc2lnbnVtIG1vZCB4YmFyIHhsb2cgYW5kIG9yIGVhY2ggc2NhbiBvdmVyIHByaW9yIG1tdSBsc3EgaW52IG1kNSBsdGltZSBndGltZSBjb3VudCBmaXJzdCB2YXIgZGV2IG1lZCBjb3YgY29yIGFsbCBhbnkgcmFuZCBzdW1zIHByZHMgbWlucyBtYXhzIGZpbGxzIGRlbHRhcyByYXRpb3MgYXZncyBkaWZmZXIgcHJldiBuZXh0IHJhbmsgcmV2ZXJzZSBpYXNjIGlkZXNjIGFzYyBkZXNjIG1zdW0gbWNvdW50IG1hdmcgbWRldiB4cmFuayBtbWluIG1tYXggeHByZXYgcm90YXRlIGRpc3RpbmN0IGdyb3VwIHdoZXJlIGZsaXAgdHlwZSBrZXkgdGlsIGdldCB2YWx1ZSBhdHRyIGN1dCBzZXQgdXBzZXJ0IHJhemUgdW5pb24gaW50ZXIgZXhjZXB0IGNyb3NzIHN2IHZzIHN1Ymxpc3QgZW5saXN0IHJlYWQwIHJlYWQxIGhvcGVuIGhjbG9zZSBoZGVsIGhzeW0gaGNvdW50IHBlYWNoIHN5c3RlbSBsdHJpbSBydHJpbSB0cmltIGxvd2VyIHVwcGVyIHNzciB2aWV3IHRhYmxlcyB2aWV3cyBjb2xzIHhjb2xzIGtleXMgeGtleSB4Y29sIHhhc2MgeGRlc2MgZmtleXMgbWV0YSBsaiBhaiBhajAgaWogcGogYXNvZiB1aiB3dyB3aiB3ajEgZmJ5IHhncm91cCB1bmdyb3VwIGVqIHNhdmUgbG9hZCByc2F2ZSBybG9hZCBzaG93IGNzdiBwYXJzZSBldmFsIG1pbiBtYXggYXZnIHdhdmcgd3N1bSBzaW4gY29zIHRhbiBzdW0nLFxuICAgIHR5cGU6XG4gICAgICAnYGZsb2F0IGBkb3VibGUgaW50IGB0aW1lc3RhbXAgYHRpbWVzcGFuIGBkYXRldGltZSBgdGltZSBgYm9vbGVhbiBgc3ltYm9sIGBjaGFyIGBieXRlIGBzaG9ydCBgbG9uZyBgcmVhbCBgbW9udGggYGRhdGUgYG1pbnV0ZSBgc2Vjb25kIGBndWlkJ1xuICB9O1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogJ1EnLFxuICAgIGFsaWFzZXM6IFtcbiAgICAgICdrJyxcbiAgICAgICdrZGInXG4gICAgXSxcbiAgICBrZXl3b3JkczogS0VZV09SRFMsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICBobGpzLkNfTlVNQkVSX01PREVcbiAgICBdXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2350\n")},2367:module=>{"use strict";eval("/*!\n * is-extendable \n *\n * Copyright (c) 2015, Jon Schlinkert.\n * Licensed under the MIT License.\n */\n\n\n\nmodule.exports = function isExtendable(val) {\n return typeof val !== 'undefined' && val !== null\n && (typeof val === 'object' || typeof val === 'function');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjM2Ny5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9vYnNpZGlhbi1taW5kbWFwLW5leHRnZW4vLi9ub2RlX21vZHVsZXMvLnBucG0vaXMtZXh0ZW5kYWJsZUAwLjEuMS9ub2RlX21vZHVsZXMvaXMtZXh0ZW5kYWJsZS9pbmRleC5qcz9hNDU1Il0sInNvdXJjZXNDb250ZW50IjpbIi8qIVxuICogaXMtZXh0ZW5kYWJsZSA8aHR0cHM6Ly9naXRodWIuY29tL2pvbnNjaGxpbmtlcnQvaXMtZXh0ZW5kYWJsZT5cbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTUsIEpvbiBTY2hsaW5rZXJ0LlxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0V4dGVuZGFibGUodmFsKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsICE9PSAndW5kZWZpbmVkJyAmJiB2YWwgIT09IG51bGxcbiAgICAmJiAodHlwZW9mIHZhbCA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIHZhbCA9PT0gJ2Z1bmN0aW9uJyk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2367\n")},2386:module=>{eval('/*\nLanguage: NSIS\nDescription: Nullsoft Scriptable Install System\nAuthor: Jan T. Sott \nWebsite: https://nsis.sourceforge.io/Main_Page\nCategory: scripting\n*/\n\n\nfunction nsis(hljs) {\n const regex = hljs.regex;\n const LANGUAGE_CONSTANTS = [\n "ADMINTOOLS",\n "APPDATA",\n "CDBURN_AREA",\n "CMDLINE",\n "COMMONFILES32",\n "COMMONFILES64",\n "COMMONFILES",\n "COOKIES",\n "DESKTOP",\n "DOCUMENTS",\n "EXEDIR",\n "EXEFILE",\n "EXEPATH",\n "FAVORITES",\n "FONTS",\n "HISTORY",\n "HWNDPARENT",\n "INSTDIR",\n "INTERNET_CACHE",\n "LANGUAGE",\n "LOCALAPPDATA",\n "MUSIC",\n "NETHOOD",\n "OUTDIR",\n "PICTURES",\n "PLUGINSDIR",\n "PRINTHOOD",\n "PROFILE",\n "PROGRAMFILES32",\n "PROGRAMFILES64",\n "PROGRAMFILES",\n "QUICKLAUNCH",\n "RECENT",\n "RESOURCES_LOCALIZED",\n "RESOURCES",\n "SENDTO",\n "SMPROGRAMS",\n "SMSTARTUP",\n "STARTMENU",\n "SYSDIR",\n "TEMP",\n "TEMPLATES",\n "VIDEOS",\n "WINDIR"\n ];\n\n const PARAM_NAMES = [\n "ARCHIVE",\n "FILE_ATTRIBUTE_ARCHIVE",\n "FILE_ATTRIBUTE_NORMAL",\n "FILE_ATTRIBUTE_OFFLINE",\n "FILE_ATTRIBUTE_READONLY",\n "FILE_ATTRIBUTE_SYSTEM",\n "FILE_ATTRIBUTE_TEMPORARY",\n "HKCR",\n "HKCU",\n "HKDD",\n "HKEY_CLASSES_ROOT",\n "HKEY_CURRENT_CONFIG",\n "HKEY_CURRENT_USER",\n "HKEY_DYN_DATA",\n "HKEY_LOCAL_MACHINE",\n "HKEY_PERFORMANCE_DATA",\n "HKEY_USERS",\n "HKLM",\n "HKPD",\n "HKU",\n "IDABORT",\n "IDCANCEL",\n "IDIGNORE",\n "IDNO",\n "IDOK",\n "IDRETRY",\n "IDYES",\n "MB_ABORTRETRYIGNORE",\n "MB_DEFBUTTON1",\n "MB_DEFBUTTON2",\n "MB_DEFBUTTON3",\n "MB_DEFBUTTON4",\n "MB_ICONEXCLAMATION",\n "MB_ICONINFORMATION",\n "MB_ICONQUESTION",\n "MB_ICONSTOP",\n "MB_OK",\n "MB_OKCANCEL",\n "MB_RETRYCANCEL",\n "MB_RIGHT",\n "MB_RTLREADING",\n "MB_SETFOREGROUND",\n "MB_TOPMOST",\n "MB_USERICON",\n "MB_YESNO",\n "NORMAL",\n "OFFLINE",\n "READONLY",\n "SHCTX",\n "SHELL_CONTEXT",\n "SYSTEM|TEMPORARY",\n ];\n\n const COMPILER_FLAGS = [\n "addincludedir",\n "addplugindir",\n "appendfile",\n "assert",\n "cd",\n "define",\n "delfile",\n "echo",\n "else",\n "endif",\n "error",\n "execute",\n "finalize",\n "getdllversion",\n "gettlbversion",\n "if",\n "ifdef",\n "ifmacrodef",\n "ifmacrondef",\n "ifndef",\n "include",\n "insertmacro",\n "macro",\n "macroend",\n "makensis",\n "packhdr",\n "searchparse",\n "searchreplace",\n "system",\n "tempfile",\n "undef",\n "uninstfinalize",\n "verbose",\n "warning",\n ];\n\n const CONSTANTS = {\n className: \'variable.constant\',\n begin: regex.concat(/\\$/, regex.either(...LANGUAGE_CONSTANTS))\n };\n\n const DEFINES = {\n // ${defines}\n className: \'variable\',\n begin: /\\$+\\{[\\!\\w.:-]+\\}/\n };\n\n const VARIABLES = {\n // $variables\n className: \'variable\',\n begin: /\\$+\\w[\\w\\.]*/,\n illegal: /\\(\\)\\{\\}/\n };\n\n const LANGUAGES = {\n // $(language_strings)\n className: \'variable\',\n begin: /\\$+\\([\\w^.:!-]+\\)/\n };\n\n const PARAMETERS = {\n // command parameters\n className: \'params\',\n begin: regex.either(...PARAM_NAMES)\n };\n\n const COMPILER = {\n // !compiler_flags\n className: \'keyword\',\n begin: regex.concat(\n /!/,\n regex.either(...COMPILER_FLAGS)\n )\n };\n\n const ESCAPE_CHARS = {\n // $\\n, $\\r, $\\t, $$\n className: \'char.escape\',\n begin: /\\$(\\\\[nrt]|\\$)/\n };\n\n const PLUGINS = {\n // plug::ins\n className: \'title.function\',\n begin: /\\w+::\\w+/\n };\n\n const STRING = {\n className: \'string\',\n variants: [\n {\n begin: \'"\',\n end: \'"\'\n },\n {\n begin: \'\\\'\',\n end: \'\\\'\'\n },\n {\n begin: \'`\',\n end: \'`\'\n }\n ],\n illegal: /\\n/,\n contains: [\n ESCAPE_CHARS,\n CONSTANTS,\n DEFINES,\n VARIABLES,\n LANGUAGES\n ]\n };\n\n const KEYWORDS = [\n "Abort",\n "AddBrandingImage",\n "AddSize",\n "AllowRootDirInstall",\n "AllowSkipFiles",\n "AutoCloseWindow",\n "BGFont",\n "BGGradient",\n "BrandingText",\n "BringToFront",\n "Call",\n "CallInstDLL",\n "Caption",\n "ChangeUI",\n "CheckBitmap",\n "ClearErrors",\n "CompletedText",\n "ComponentText",\n "CopyFiles",\n "CRCCheck",\n "CreateDirectory",\n "CreateFont",\n "CreateShortCut",\n "Delete",\n "DeleteINISec",\n "DeleteINIStr",\n "DeleteRegKey",\n "DeleteRegValue",\n "DetailPrint",\n "DetailsButtonText",\n "DirText",\n "DirVar",\n "DirVerify",\n "EnableWindow",\n "EnumRegKey",\n "EnumRegValue",\n "Exch",\n "Exec",\n "ExecShell",\n "ExecShellWait",\n "ExecWait",\n "ExpandEnvStrings",\n "File",\n "FileBufSize",\n "FileClose",\n "FileErrorText",\n "FileOpen",\n "FileRead",\n "FileReadByte",\n "FileReadUTF16LE",\n "FileReadWord",\n "FileWriteUTF16LE",\n "FileSeek",\n "FileWrite",\n "FileWriteByte",\n "FileWriteWord",\n "FindClose",\n "FindFirst",\n "FindNext",\n "FindWindow",\n "FlushINI",\n "GetCurInstType",\n "GetCurrentAddress",\n "GetDlgItem",\n "GetDLLVersion",\n "GetDLLVersionLocal",\n "GetErrorLevel",\n "GetFileTime",\n "GetFileTimeLocal",\n "GetFullPathName",\n "GetFunctionAddress",\n "GetInstDirError",\n "GetKnownFolderPath",\n "GetLabelAddress",\n "GetTempFileName",\n "GetWinVer",\n "Goto",\n "HideWindow",\n "Icon",\n "IfAbort",\n "IfErrors",\n "IfFileExists",\n "IfRebootFlag",\n "IfRtlLanguage",\n "IfShellVarContextAll",\n "IfSilent",\n "InitPluginsDir",\n "InstallButtonText",\n "InstallColors",\n "InstallDir",\n "InstallDirRegKey",\n "InstProgressFlags",\n "InstType",\n "InstTypeGetText",\n "InstTypeSetText",\n "Int64Cmp",\n "Int64CmpU",\n "Int64Fmt",\n "IntCmp",\n "IntCmpU",\n "IntFmt",\n "IntOp",\n "IntPtrCmp",\n "IntPtrCmpU",\n "IntPtrOp",\n "IsWindow",\n "LangString",\n "LicenseBkColor",\n "LicenseData",\n "LicenseForceSelection",\n "LicenseLangString",\n "LicenseText",\n "LoadAndSetImage",\n "LoadLanguageFile",\n "LockWindow",\n "LogSet",\n "LogText",\n "ManifestDPIAware",\n "ManifestLongPathAware",\n "ManifestMaxVersionTested",\n "ManifestSupportedOS",\n "MessageBox",\n "MiscButtonText",\n "Name|0",\n "Nop",\n "OutFile",\n "Page",\n "PageCallbacks",\n "PEAddResource",\n "PEDllCharacteristics",\n "PERemoveResource",\n "PESubsysVer",\n "Pop",\n "Push",\n "Quit",\n "ReadEnvStr",\n "ReadINIStr",\n "ReadRegDWORD",\n "ReadRegStr",\n "Reboot",\n "RegDLL",\n "Rename",\n "RequestExecutionLevel",\n "ReserveFile",\n "Return",\n "RMDir",\n "SearchPath",\n "SectionGetFlags",\n "SectionGetInstTypes",\n "SectionGetSize",\n "SectionGetText",\n "SectionIn",\n "SectionSetFlags",\n "SectionSetInstTypes",\n "SectionSetSize",\n "SectionSetText",\n "SendMessage",\n "SetAutoClose",\n "SetBrandingImage",\n "SetCompress",\n "SetCompressor",\n "SetCompressorDictSize",\n "SetCtlColors",\n "SetCurInstType",\n "SetDatablockOptimize",\n "SetDateSave",\n "SetDetailsPrint",\n "SetDetailsView",\n "SetErrorLevel",\n "SetErrors",\n "SetFileAttributes",\n "SetFont",\n "SetOutPath",\n "SetOverwrite",\n "SetRebootFlag",\n "SetRegView",\n "SetShellVarContext",\n "SetSilent",\n "ShowInstDetails",\n "ShowUninstDetails",\n "ShowWindow",\n "SilentInstall",\n "SilentUnInstall",\n "Sleep",\n "SpaceTexts",\n "StrCmp",\n "StrCmpS",\n "StrCpy",\n "StrLen",\n "SubCaption",\n "Unicode",\n "UninstallButtonText",\n "UninstallCaption",\n "UninstallIcon",\n "UninstallSubCaption",\n "UninstallText",\n "UninstPage",\n "UnRegDLL",\n "Var",\n "VIAddVersionKey",\n "VIFileVersion",\n "VIProductVersion",\n "WindowIcon",\n "WriteINIStr",\n "WriteRegBin",\n "WriteRegDWORD",\n "WriteRegExpandStr",\n "WriteRegMultiStr",\n "WriteRegNone",\n "WriteRegStr",\n "WriteUninstaller",\n "XPStyle"\n ];\n\n const LITERALS = [\n "admin",\n "all",\n "auto",\n "both",\n "bottom",\n "bzip2",\n "colored",\n "components",\n "current",\n "custom",\n "directory",\n "false",\n "force",\n "hide",\n "highest",\n "ifdiff",\n "ifnewer",\n "instfiles",\n "lastused",\n "leave",\n "left",\n "license",\n "listonly",\n "lzma",\n "nevershow",\n "none",\n "normal",\n "notset",\n "off",\n "on",\n "open",\n "print",\n "right",\n "show",\n "silent",\n "silentlog",\n "smooth",\n "textonly",\n "top",\n "true",\n "try",\n "un.components",\n "un.custom",\n "un.directory",\n "un.instfiles",\n "un.license",\n "uninstConfirm",\n "user",\n "Win10",\n "Win7",\n "Win8",\n "WinVista",\n "zlib"\n ];\n\n const FUNCTION_DEFINITION = {\n match: [\n /Function/,\n /\\s+/,\n regex.concat(/(\\.)?/, hljs.IDENT_RE)\n ],\n scope: {\n 1: "keyword",\n 3: "title.function"\n }\n };\n\n // Var Custom.Variable.Name.Item\n // Var /GLOBAL Custom.Variable.Name.Item\n const VARIABLE_NAME_RE = /[A-Za-z][\\w.]*/;\n const VARIABLE_DEFINITION = {\n match: [\n /Var/,\n /\\s+/,\n /(?:\\/GLOBAL\\s+)?/,\n VARIABLE_NAME_RE\n ],\n scope: {\n 1: "keyword",\n 3: "params",\n 4: "variable"\n }\n };\n\n return {\n name: \'NSIS\',\n case_insensitive: true,\n keywords: {\n keyword: KEYWORDS,\n literal: LITERALS\n },\n contains: [\n hljs.HASH_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE,\n hljs.COMMENT(\n \';\',\n \'$\',\n { relevance: 0 }\n ),\n VARIABLE_DEFINITION,\n FUNCTION_DEFINITION,\n { beginKeywords: \'Function PageEx Section SectionGroup FunctionEnd SectionEnd\', },\n STRING,\n COMPILER,\n DEFINES,\n VARIABLES,\n LANGUAGES,\n PARAMETERS,\n PLUGINS,\n hljs.NUMBER_MODE\n ]\n };\n}\n\nmodule.exports = nsis;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjM4Ni5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsaUJBQWlCLFlBQVk7QUFDN0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsRUFBRTtBQUN0Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBLFFBQVEsK0VBQStFO0FBQ3ZGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9vYnNpZGlhbi1taW5kbWFwLW5leHRnZW4vLi9ub2RlX21vZHVsZXMvLnBucG0vaGlnaGxpZ2h0LmpzQDExLjExLjEvbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL25zaXMuanM/YjcyYyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuTGFuZ3VhZ2U6IE5TSVNcbkRlc2NyaXB0aW9uOiBOdWxsc29mdCBTY3JpcHRhYmxlIEluc3RhbGwgU3lzdGVtXG5BdXRob3I6IEphbiBULiBTb3R0IDxqYW4uc290dEBnbWFpbC5jb20+XG5XZWJzaXRlOiBodHRwczovL25zaXMuc291cmNlZm9yZ2UuaW8vTWFpbl9QYWdlXG5DYXRlZ29yeTogc2NyaXB0aW5nXG4qL1xuXG5cbmZ1bmN0aW9uIG5zaXMoaGxqcykge1xuICBjb25zdCByZWdleCA9IGhsanMucmVnZXg7XG4gIGNvbnN0IExBTkdVQUdFX0NPTlNUQU5UUyA9IFtcbiAgICBcIkFETUlOVE9PTFNcIixcbiAgICBcIkFQUERBVEFcIixcbiAgICBcIkNEQlVSTl9BUkVBXCIsXG4gICAgXCJDTURMSU5FXCIsXG4gICAgXCJDT01NT05GSUxFUzMyXCIsXG4gICAgXCJDT01NT05GSUxFUzY0XCIsXG4gICAgXCJDT01NT05GSUxFU1wiLFxuICAgIFwiQ09PS0lFU1wiLFxuICAgIFwiREVTS1RPUFwiLFxuICAgIFwiRE9DVU1FTlRTXCIsXG4gICAgXCJFWEVESVJcIixcbiAgICBcIkVYRUZJTEVcIixcbiAgICBcIkVYRVBBVEhcIixcbiAgICBcIkZBVk9SSVRFU1wiLFxuICAgIFwiRk9OVFNcIixcbiAgICBcIkhJU1RPUllcIixcbiAgICBcIkhXTkRQQVJFTlRcIixcbiAgICBcIklOU1RESVJcIixcbiAgICBcIklOVEVSTkVUX0NBQ0hFXCIsXG4gICAgXCJMQU5HVUFHRVwiLFxuICAgIFwiTE9DQUxBUFBEQVRBXCIsXG4gICAgXCJNVVNJQ1wiLFxuICAgIFwiTkVUSE9PRFwiLFxuICAgIFwiT1VURElSXCIsXG4gICAgXCJQSUNUVVJFU1wiLFxuICAgIFwiUExVR0lOU0RJUlwiLFxuICAgIFwiUFJJTlRIT09EXCIsXG4gICAgXCJQUk9GSUxFXCIsXG4gICAgXCJQUk9HUkFNRklMRVMzMlwiLFxuICAgIFwiUFJPR1JBTUZJTEVTNjRcIixcbiAgICBcIlBST0dSQU1GSUxFU1wiLFxuICAgIFwiUVVJQ0tMQVVOQ0hcIixcbiAgICBcIlJFQ0VOVFwiLFxuICAgIFwiUkVTT1VSQ0VTX0xPQ0FMSVpFRFwiLFxuICAgIFwiUkVTT1VSQ0VTXCIsXG4gICAgXCJTRU5EVE9cIixcbiAgICBcIlNNUFJPR1JBTVNcIixcbiAgICBcIlNNU1RBUlRVUFwiLFxuICAgIFwiU1RBUlRNRU5VXCIsXG4gICAgXCJTWVNESVJcIixcbiAgICBcIlRFTVBcIixcbiAgICBcIlRFTVBMQVRFU1wiLFxuICAgIFwiVklERU9TXCIsXG4gICAgXCJXSU5ESVJcIlxuICBdO1xuXG4gIGNvbnN0IFBBUkFNX05BTUVTID0gW1xuICAgIFwiQVJDSElWRVwiLFxuICAgIFwiRklMRV9BVFRSSUJVVEVfQVJDSElWRVwiLFxuICAgIFwiRklMRV9BVFRSSUJVVEVfTk9STUFMXCIsXG4gICAgXCJGSUxFX0FUVFJJQlVURV9PRkZMSU5FXCIsXG4gICAgXCJGSUxFX0FUVFJJQlVURV9SRUFET05MWVwiLFxuICAgIFwiRklMRV9BVFRSSUJVVEVfU1lTVEVNXCIsXG4gICAgXCJGSUxFX0FUVFJJQlVURV9URU1QT1JBUllcIixcbiAgICBcIkhLQ1JcIixcbiAgICBcIkhLQ1VcIixcbiAgICBcIkhLRERcIixcbiAgICBcIkhLRVlfQ0xBU1NFU19ST09UXCIsXG4gICAgXCJIS0VZX0NVUlJFTlRfQ09ORklHXCIsXG4gICAgXCJIS0VZX0NVUlJFTlRfVVNFUlwiLFxuICAgIFwiSEtFWV9EWU5fREFUQVwiLFxuICAgIFwiSEtFWV9MT0NBTF9NQUNISU5FXCIsXG4gICAgXCJIS0VZX1BFUkZPUk1BTkNFX0RBVEFcIixcbiAgICBcIkhLRVlfVVNFUlNcIixcbiAgICBcIkhLTE1cIixcbiAgICBcIkhLUERcIixcbiAgICBcIkhLVVwiLFxuICAgIFwiSURBQk9SVFwiLFxuICAgIFwiSURDQU5DRUxcIixcbiAgICBcIklESUdOT1JFXCIsXG4gICAgXCJJRE5PXCIsXG4gICAgXCJJRE9LXCIsXG4gICAgXCJJRFJFVFJZXCIsXG4gICAgXCJJRFlFU1wiLFxuICAgIFwiTUJfQUJPUlRSRVRSWUlHTk9SRVwiLFxuICAgIFwiTUJfREVGQlVUVE9OMVwiLFxuICAgIFwiTUJfREVGQlVUVE9OMlwiLFxuICAgIFwiTUJfREVGQlVUVE9OM1wiLFxuICAgIFwiTUJfREVGQlVUVE9ONFwiLFxuICAgIFwiTUJfSUNPTkVYQ0xBTUFUSU9OXCIsXG4gICAgXCJNQl9JQ09OSU5GT1JNQVRJT05cIixcbiAgICBcIk1CX0lDT05RVUVTVElPTlwiLFxuICAgIFwiTUJfSUNPTlNUT1BcIixcbiAgICBcIk1CX09LXCIsXG4gICAgXCJNQl9PS0NBTkNFTFwiLFxuICAgIFwiTUJfUkVUUllDQU5DRUxcIixcbiAgICBcIk1CX1JJR0hUXCIsXG4gICAgXCJNQl9SVExSRUFESU5HXCIsXG4gICAgXCJNQl9TRVRGT1JFR1JPVU5EXCIsXG4gICAgXCJNQl9UT1BNT1NUXCIsXG4gICAgXCJNQl9VU0VSSUNPTlwiLFxuICAgIFwiTUJfWUVTTk9cIixcbiAgICBcIk5PUk1BTFwiLFxuICAgIFwiT0ZGTElORVwiLFxuICAgIFwiUkVBRE9OTFlcIixcbiAgICBcIlNIQ1RYXCIsXG4gICAgXCJTSEVMTF9DT05URVhUXCIsXG4gICAgXCJTWVNURU18VEVNUE9SQVJZXCIsXG4gIF07XG5cbiAgY29uc3QgQ09NUElMRVJfRkxBR1MgPSBbXG4gICAgXCJhZGRpbmNsdWRlZGlyXCIsXG4gICAgXCJhZGRwbHVnaW5kaXJcIixcbiAgICBcImFwcGVuZGZpbGVcIixcbiAgICBcImFzc2VydFwiLFxuICAgIFwiY2RcIixcbiAgICBcImRlZmluZVwiLFxuICAgIFwiZGVsZmlsZVwiLFxuICAgIFwiZWNob1wiLFxuICAgIFwiZWxzZVwiLFxuICAgIFwiZW5kaWZcIixcbiAgICBcImVycm9yXCIsXG4gICAgXCJleGVjdXRlXCIsXG4gICAgXCJmaW5hbGl6ZVwiLFxuICAgIFwiZ2V0ZGxsdmVyc2lvblwiLFxuICAgIFwiZ2V0dGxidmVyc2lvblwiLFxuICAgIFwiaWZcIixcbiAgICBcImlmZGVmXCIsXG4gICAgXCJpZm1hY3JvZGVmXCIsXG4gICAgXCJpZm1hY3JvbmRlZlwiLFxuICAgIFwiaWZuZGVmXCIsXG4gICAgXCJpbmNsdWRlXCIsXG4gICAgXCJpbnNlcnRtYWNyb1wiLFxuICAgIFwibWFjcm9cIixcbiAgICBcIm1hY3JvZW5kXCIsXG4gICAgXCJtYWtlbnNpc1wiLFxuICAgIFwicGFja2hkclwiLFxuICAgIFwic2VhcmNocGFyc2VcIixcbiAgICBcInNlYXJjaHJlcGxhY2VcIixcbiAgICBcInN5c3RlbVwiLFxuICAgIFwidGVtcGZpbGVcIixcbiAgICBcInVuZGVmXCIsXG4gICAgXCJ1bmluc3RmaW5hbGl6ZVwiLFxuICAgIFwidmVyYm9zZVwiLFxuICAgIFwid2FybmluZ1wiLFxuICBdO1xuXG4gIGNvbnN0IENPTlNUQU5UUyA9IHtcbiAgICBjbGFzc05hbWU6ICd2YXJpYWJsZS5jb25zdGFudCcsXG4gICAgYmVnaW46IHJlZ2V4LmNvbmNhdCgvXFwkLywgcmVnZXguZWl0aGVyKC4uLkxBTkdVQUdFX0NPTlNUQU5UUykpXG4gIH07XG5cbiAgY29uc3QgREVGSU5FUyA9IHtcbiAgICAvLyAke2RlZmluZXN9XG4gICAgY2xhc3NOYW1lOiAndmFyaWFibGUnLFxuICAgIGJlZ2luOiAvXFwkK1xce1tcXCFcXHcuOi1dK1xcfS9cbiAgfTtcblxuICBjb25zdCBWQVJJQUJMRVMgPSB7XG4gICAgLy8gJHZhcmlhYmxlc1xuICAgIGNsYXNzTmFtZTogJ3ZhcmlhYmxlJyxcbiAgICBiZWdpbjogL1xcJCtcXHdbXFx3XFwuXSovLFxuICAgIGlsbGVnYWw6IC9cXChcXClcXHtcXH0vXG4gIH07XG5cbiAgY29uc3QgTEFOR1VBR0VTID0ge1xuICAgIC8vICQobGFuZ3VhZ2Vfc3RyaW5ncylcbiAgICBjbGFzc05hbWU6ICd2YXJpYWJsZScsXG4gICAgYmVnaW46IC9cXCQrXFwoW1xcd14uOiEtXStcXCkvXG4gIH07XG5cbiAgY29uc3QgUEFSQU1FVEVSUyA9IHtcbiAgICAvLyBjb21tYW5kIHBhcmFtZXRlcnNcbiAgICBjbGFzc05hbWU6ICdwYXJhbXMnLFxuICAgIGJlZ2luOiByZWdleC5laXRoZXIoLi4uUEFSQU1fTkFNRVMpXG4gIH07XG5cbiAgY29uc3QgQ09NUElMRVIgPSB7XG4gICAgLy8gIWNvbXBpbGVyX2ZsYWdzXG4gICAgY2xhc3NOYW1lOiAna2V5d29yZCcsXG4gICAgYmVnaW46IHJlZ2V4LmNvbmNhdChcbiAgICAgIC8hLyxcbiAgICAgIHJlZ2V4LmVpdGhlciguLi5DT01QSUxFUl9GTEFHUylcbiAgICApXG4gIH07XG5cbiAgY29uc3QgRVNDQVBFX0NIQVJTID0ge1xuICAgIC8vICRcXG4sICRcXHIsICRcXHQsICQkXG4gICAgY2xhc3NOYW1lOiAnY2hhci5lc2NhcGUnLFxuICAgIGJlZ2luOiAvXFwkKFxcXFxbbnJ0XXxcXCQpL1xuICB9O1xuXG4gIGNvbnN0IFBMVUdJTlMgPSB7XG4gICAgLy8gcGx1Zzo6aW5zXG4gICAgY2xhc3NOYW1lOiAndGl0bGUuZnVuY3Rpb24nLFxuICAgIGJlZ2luOiAvXFx3Kzo6XFx3Ky9cbiAgfTtcblxuICBjb25zdCBTVFJJTkcgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICB2YXJpYW50czogW1xuICAgICAge1xuICAgICAgICBiZWdpbjogJ1wiJyxcbiAgICAgICAgZW5kOiAnXCInXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogJ1xcJycsXG4gICAgICAgIGVuZDogJ1xcJydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnYCcsXG4gICAgICAgIGVuZDogJ2AnXG4gICAgICB9XG4gICAgXSxcbiAgICBpbGxlZ2FsOiAvXFxuLyxcbiAgICBjb250YWluczogW1xuICAgICAgRVNDQVBFX0NIQVJTLFxuICAgICAgQ09OU1RBTlRTLFxuICAgICAgREVGSU5FUyxcbiAgICAgIFZBUklBQkxFUyxcbiAgICAgIExBTkdVQUdFU1xuICAgIF1cbiAgfTtcblxuICBjb25zdCBLRVlXT1JEUyA9IFtcbiAgICBcIkFib3J0XCIsXG4gICAgXCJBZGRCcmFuZGluZ0ltYWdlXCIsXG4gICAgXCJBZGRTaXplXCIsXG4gICAgXCJBbGxvd1Jvb3REaXJJbnN0YWxsXCIsXG4gICAgXCJBbGxvd1NraXBGaWxlc1wiLFxuICAgIFwiQXV0b0Nsb3NlV2luZG93XCIsXG4gICAgXCJCR0ZvbnRcIixcbiAgICBcIkJHR3JhZGllbnRcIixcbiAgICBcIkJyYW5kaW5nVGV4dFwiLFxuICAgIFwiQnJpbmdUb0Zyb250XCIsXG4gICAgXCJDYWxsXCIsXG4gICAgXCJDYWxsSW5zdERMTFwiLFxuICAgIFwiQ2FwdGlvblwiLFxuICAgIFwiQ2hhbmdlVUlcIixcbiAgICBcIkNoZWNrQml0bWFwXCIsXG4gICAgXCJDbGVhckVycm9yc1wiLFxuICAgIFwiQ29tcGxldGVkVGV4dFwiLFxuICAgIFwiQ29tcG9uZW50VGV4dFwiLFxuICAgIFwiQ29weUZpbGVzXCIsXG4gICAgXCJDUkNDaGVja1wiLFxuICAgIFwiQ3JlYXRlRGlyZWN0b3J5XCIsXG4gICAgXCJDcmVhdGVGb250XCIsXG4gICAgXCJDcmVhdGVTaG9ydEN1dFwiLFxuICAgIFwiRGVsZXRlXCIsXG4gICAgXCJEZWxldGVJTklTZWNcIixcbiAgICBcIkRlbGV0ZUlOSVN0clwiLFxuICAgIFwiRGVsZXRlUmVnS2V5XCIsXG4gICAgXCJEZWxldGVSZWdWYWx1ZVwiLFxuICAgIFwiRGV0YWlsUHJpbnRcIixcbiAgICBcIkRldGFpbHNCdXR0b25UZXh0XCIsXG4gICAgXCJEaXJUZXh0XCIsXG4gICAgXCJEaXJWYXJcIixcbiAgICBcIkRpclZlcmlmeVwiLFxuICAgIFwiRW5hYmxlV2luZG93XCIsXG4gICAgXCJFbnVtUmVnS2V5XCIsXG4gICAgXCJFbnVtUmVnVmFsdWVcIixcbiAgICBcIkV4Y2hcIixcbiAgICBcIkV4ZWNcIixcbiAgICBcIkV4ZWNTaGVsbFwiLFxuICAgIFwiRXhlY1NoZWxsV2FpdFwiLFxuICAgIFwiRXhlY1dhaXRcIixcbiAgICBcIkV4cGFuZEVudlN0cmluZ3NcIixcbiAgICBcIkZpbGVcIixcbiAgICBcIkZpbGVCdWZTaXplXCIsXG4gICAgXCJGaWxlQ2xvc2VcIixcbiAgICBcIkZpbGVFcnJvclRleHRcIixcbiAgICBcIkZpbGVPcGVuXCIsXG4gICAgXCJGaWxlUmVhZFwiLFxuICAgIFwiRmlsZVJlYWRCeXRlXCIsXG4gICAgXCJGaWxlUmVhZFVURjE2TEVcIixcbiAgICBcIkZpbGVSZWFkV29yZFwiLFxuICAgIFwiRmlsZVdyaXRlVVRGMTZMRVwiLFxuICAgIFwiRmlsZVNlZWtcIixcbiAgICBcIkZpbGVXcml0ZVwiLFxuICAgIFwiRmlsZVdyaXRlQnl0ZVwiLFxuICAgIFwiRmlsZVdyaXRlV29yZFwiLFxuICAgIFwiRmluZENsb3NlXCIsXG4gICAgXCJGaW5kRmlyc3RcIixcbiAgICBcIkZpbmROZXh0XCIsXG4gICAgXCJGaW5kV2luZG93XCIsXG4gICAgXCJGbHVzaElOSVwiLFxuICAgIFwiR2V0Q3VySW5zdFR5cGVcIixcbiAgICBcIkdldEN1cnJlbnRBZGRyZXNzXCIsXG4gICAgXCJHZXREbGdJdGVtXCIsXG4gICAgXCJHZXRETExWZXJzaW9uXCIsXG4gICAgXCJHZXRETExWZXJzaW9uTG9jYWxcIixcbiAgICBcIkdldEVycm9yTGV2ZWxcIixcbiAgICBcIkdldEZpbGVUaW1lXCIsXG4gICAgXCJHZXRGaWxlVGltZUxvY2FsXCIsXG4gICAgXCJHZXRGdWxsUGF0aE5hbWVcIixcbiAgICBcIkdldEZ1bmN0aW9uQWRkcmVzc1wiLFxuICAgIFwiR2V0SW5zdERpckVycm9yXCIsXG4gICAgXCJHZXRLbm93bkZvbGRlclBhdGhcIixcbiAgICBcIkdldExhYmVsQWRkcmVzc1wiLFxuICAgIFwiR2V0VGVtcEZpbGVOYW1lXCIsXG4gICAgXCJHZXRXaW5WZXJcIixcbiAgICBcIkdvdG9cIixcbiAgICBcIkhpZGVXaW5kb3dcIixcbiAgICBcIkljb25cIixcbiAgICBcIklmQWJvcnRcIixcbiAgICBcIklmRXJyb3JzXCIsXG4gICAgXCJJZkZpbGVFeGlzdHNcIixcbiAgICBcIklmUmVib290RmxhZ1wiLFxuICAgIFwiSWZSdGxMYW5ndWFnZVwiLFxuICAgIFwiSWZTaGVsbFZhckNvbnRleHRBbGxcIixcbiAgICBcIklmU2lsZW50XCIsXG4gICAgXCJJbml0UGx1Z2luc0RpclwiLFxuICAgIFwiSW5zdGFsbEJ1dHRvblRleHRcIixcbiAgICBcIkluc3RhbGxDb2xvcnNcIixcbiAgICBcIkluc3RhbGxEaXJcIixcbiAgICBcIkluc3RhbGxEaXJSZWdLZXlcIixcbiAgICBcIkluc3RQcm9ncmVzc0ZsYWdzXCIsXG4gICAgXCJJbnN0VHlwZVwiLFxuICAgIFwiSW5zdFR5cGVHZXRUZXh0XCIsXG4gICAgXCJJbnN0VHlwZVNldFRleHRcIixcbiAgICBcIkludDY0Q21wXCIsXG4gICAgXCJJbnQ2NENtcFVcIixcbiAgICBcIkludDY0Rm10XCIsXG4gICAgXCJJbnRDbXBcIixcbiAgICBcIkludENtcFVcIixcbiAgICBcIkludEZtdFwiLFxuICAgIFwiSW50T3BcIixcbiAgICBcIkludFB0ckNtcFwiLFxuICAgIFwiSW50UHRyQ21wVVwiLFxuICAgIFwiSW50UHRyT3BcIixcbiAgICBcIklzV2luZG93XCIsXG4gICAgXCJMYW5nU3RyaW5nXCIsXG4gICAgXCJMaWNlbnNlQmtDb2xvclwiLFxuICAgIFwiTGljZW5zZURhdGFcIixcbiAgICBcIkxpY2Vuc2VGb3JjZVNlbGVjdGlvblwiLFxuICAgIFwiTGljZW5zZUxhbmdTdHJpbmdcIixcbiAgICBcIkxpY2Vuc2VUZXh0XCIsXG4gICAgXCJMb2FkQW5kU2V0SW1hZ2VcIixcbiAgICBcIkxvYWRMYW5ndWFnZUZpbGVcIixcbiAgICBcIkxvY2tXaW5kb3dcIixcbiAgICBcIkxvZ1NldFwiLFxuICAgIFwiTG9nVGV4dFwiLFxuICAgIFwiTWFuaWZlc3REUElBd2FyZVwiLFxuICAgIFwiTWFuaWZlc3RMb25nUGF0aEF3YXJlXCIsXG4gICAgXCJNYW5pZmVzdE1heFZlcnNpb25UZXN0ZWRcIixcbiAgICBcIk1hbmlmZXN0U3VwcG9ydGVkT1NcIixcbiAgICBcIk1lc3NhZ2VCb3hcIixcbiAgICBcIk1pc2NCdXR0b25UZXh0XCIsXG4gICAgXCJOYW1lfDBcIixcbiAgICBcIk5vcFwiLFxuICAgIFwiT3V0RmlsZVwiLFxuICAgIFwiUGFnZVwiLFxuICAgIFwiUGFnZUNhbGxiYWNrc1wiLFxuICAgIFwiUEVBZGRSZXNvdXJjZVwiLFxuICAgIFwiUEVEbGxDaGFyYWN0ZXJpc3RpY3NcIixcbiAgICBcIlBFUmVtb3ZlUmVzb3VyY2VcIixcbiAgICBcIlBFU3Vic3lzVmVyXCIsXG4gICAgXCJQb3BcIixcbiAgICBcIlB1c2hcIixcbiAgICBcIlF1aXRcIixcbiAgICBcIlJlYWRFbnZTdHJcIixcbiAgICBcIlJlYWRJTklTdHJcIixcbiAgICBcIlJlYWRSZWdEV09SRFwiLFxuICAgIFwiUmVhZFJlZ1N0clwiLFxuICAgIFwiUmVib290XCIsXG4gICAgXCJSZWdETExcIixcbiAgICBcIlJlbmFtZVwiLFxuICAgIFwiUmVxdWVzdEV4ZWN1dGlvbkxldmVsXCIsXG4gICAgXCJSZXNlcnZlRmlsZVwiLFxuICAgIFwiUmV0dXJuXCIsXG4gICAgXCJSTURpclwiLFxuICAgIFwiU2VhcmNoUGF0aFwiLFxuICAgIFwiU2VjdGlvbkdldEZsYWdzXCIsXG4gICAgXCJTZWN0aW9uR2V0SW5zdFR5cGVzXCIsXG4gICAgXCJTZWN0aW9uR2V0U2l6ZVwiLFxuICAgIFwiU2VjdGlvbkdldFRleHRcIixcbiAgICBcIlNlY3Rpb25JblwiLFxuICAgIFwiU2VjdGlvblNldEZsYWdzXCIsXG4gICAgXCJTZWN0aW9uU2V0SW5zdFR5cGVzXCIsXG4gICAgXCJTZWN0aW9uU2V0U2l6ZVwiLFxuICAgIFwiU2VjdGlvblNldFRleHRcIixcbiAgICBcIlNlbmRNZXNzYWdlXCIsXG4gICAgXCJTZXRBdXRvQ2xvc2VcIixcbiAgICBcIlNldEJyYW5kaW5nSW1hZ2VcIixcbiAgICBcIlNldENvbXByZXNzXCIsXG4gICAgXCJTZXRDb21wcmVzc29yXCIsXG4gICAgXCJTZXRDb21wcmVzc29yRGljdFNpemVcIixcbiAgICBcIlNldEN0bENvbG9yc1wiLFxuICAgIFwiU2V0Q3VySW5zdFR5cGVcIixcbiAgICBcIlNldERhdGFibG9ja09wdGltaXplXCIsXG4gICAgXCJTZXREYXRlU2F2ZVwiLFxuICAgIFwiU2V0RGV0YWlsc1ByaW50XCIsXG4gICAgXCJTZXREZXRhaWxzVmlld1wiLFxuICAgIFwiU2V0RXJyb3JMZXZlbFwiLFxuICAgIFwiU2V0RXJyb3JzXCIsXG4gICAgXCJTZXRGaWxlQXR0cmlidXRlc1wiLFxuICAgIFwiU2V0Rm9udFwiLFxuICAgIFwiU2V0T3V0UGF0aFwiLFxuICAgIFwiU2V0T3ZlcndyaXRlXCIsXG4gICAgXCJTZXRSZWJvb3RGbGFnXCIsXG4gICAgXCJTZXRSZWdWaWV3XCIsXG4gICAgXCJTZXRTaGVsbFZhckNvbnRleHRcIixcbiAgICBcIlNldFNpbGVudFwiLFxuICAgIFwiU2hvd0luc3REZXRhaWxzXCIsXG4gICAgXCJTaG93VW5pbnN0RGV0YWlsc1wiLFxuICAgIFwiU2hvd1dpbmRvd1wiLFxuICAgIFwiU2lsZW50SW5zdGFsbFwiLFxuICAgIFwiU2lsZW50VW5JbnN0YWxsXCIsXG4gICAgXCJTbGVlcFwiLFxuICAgIFwiU3BhY2VUZXh0c1wiLFxuICAgIFwiU3RyQ21wXCIsXG4gICAgXCJTdHJDbXBTXCIsXG4gICAgXCJTdHJDcHlcIixcbiAgICBcIlN0ckxlblwiLFxuICAgIFwiU3ViQ2FwdGlvblwiLFxuICAgIFwiVW5pY29kZVwiLFxuICAgIFwiVW5pbnN0YWxsQnV0dG9uVGV4dFwiLFxuICAgIFwiVW5pbnN0YWxsQ2FwdGlvblwiLFxuICAgIFwiVW5pbnN0YWxsSWNvblwiLFxuICAgIFwiVW5pbnN0YWxsU3ViQ2FwdGlvblwiLFxuICAgIFwiVW5pbnN0YWxsVGV4dFwiLFxuICAgIFwiVW5pbnN0UGFnZVwiLFxuICAgIFwiVW5SZWdETExcIixcbiAgICBcIlZhclwiLFxuICAgIFwiVklBZGRWZXJzaW9uS2V5XCIsXG4gICAgXCJWSUZpbGVWZXJzaW9uXCIsXG4gICAgXCJWSVByb2R1Y3RWZXJzaW9uXCIsXG4gICAgXCJXaW5kb3dJY29uXCIsXG4gICAgXCJXcml0ZUlOSVN0clwiLFxuICAgIFwiV3JpdGVSZWdCaW5cIixcbiAgICBcIldyaXRlUmVnRFdPUkRcIixcbiAgICBcIldyaXRlUmVnRXhwYW5kU3RyXCIsXG4gICAgXCJXcml0ZVJlZ011bHRpU3RyXCIsXG4gICAgXCJXcml0ZVJlZ05vbmVcIixcbiAgICBcIldyaXRlUmVnU3RyXCIsXG4gICAgXCJXcml0ZVVuaW5zdGFsbGVyXCIsXG4gICAgXCJYUFN0eWxlXCJcbiAgXTtcblxuICBjb25zdCBMSVRFUkFMUyA9IFtcbiAgICBcImFkbWluXCIsXG4gICAgXCJhbGxcIixcbiAgICBcImF1dG9cIixcbiAgICBcImJvdGhcIixcbiAgICBcImJvdHRvbVwiLFxuICAgIFwiYnppcDJcIixcbiAgICBcImNvbG9yZWRcIixcbiAgICBcImNvbXBvbmVudHNcIixcbiAgICBcImN1cnJlbnRcIixcbiAgICBcImN1c3RvbVwiLFxuICAgIFwiZGlyZWN0b3J5XCIsXG4gICAgXCJmYWxzZVwiLFxuICAgIFwiZm9yY2VcIixcbiAgICBcImhpZGVcIixcbiAgICBcImhpZ2hlc3RcIixcbiAgICBcImlmZGlmZlwiLFxuICAgIFwiaWZuZXdlclwiLFxuICAgIFwiaW5zdGZpbGVzXCIsXG4gICAgXCJsYXN0dXNlZFwiLFxuICAgIFwibGVhdmVcIixcbiAgICBcImxlZnRcIixcbiAgICBcImxpY2Vuc2VcIixcbiAgICBcImxpc3Rvbmx5XCIsXG4gICAgXCJsem1hXCIsXG4gICAgXCJuZXZlcnNob3dcIixcbiAgICBcIm5vbmVcIixcbiAgICBcIm5vcm1hbFwiLFxuICAgIFwibm90c2V0XCIsXG4gICAgXCJvZmZcIixcbiAgICBcIm9uXCIsXG4gICAgXCJvcGVuXCIsXG4gICAgXCJwcmludFwiLFxuICAgIFwicmlnaHRcIixcbiAgICBcInNob3dcIixcbiAgICBcInNpbGVudFwiLFxuICAgIFwic2lsZW50bG9nXCIsXG4gICAgXCJzbW9vdGhcIixcbiAgICBcInRleHRvbmx5XCIsXG4gICAgXCJ0b3BcIixcbiAgICBcInRydWVcIixcbiAgICBcInRyeVwiLFxuICAgIFwidW4uY29tcG9uZW50c1wiLFxuICAgIFwidW4uY3VzdG9tXCIsXG4gICAgXCJ1bi5kaXJlY3RvcnlcIixcbiAgICBcInVuLmluc3RmaWxlc1wiLFxuICAgIFwidW4ubGljZW5zZVwiLFxuICAgIFwidW5pbnN0Q29uZmlybVwiLFxuICAgIFwidXNlclwiLFxuICAgIFwiV2luMTBcIixcbiAgICBcIldpbjdcIixcbiAgICBcIldpbjhcIixcbiAgICBcIldpblZpc3RhXCIsXG4gICAgXCJ6bGliXCJcbiAgXTtcblxuICBjb25zdCBGVU5DVElPTl9ERUZJTklUSU9OID0ge1xuICAgIG1hdGNoOiBbXG4gICAgICAvRnVuY3Rpb24vLFxuICAgICAgL1xccysvLFxuICAgICAgcmVnZXguY29uY2F0KC8oXFwuKT8vLCBobGpzLklERU5UX1JFKVxuICAgIF0sXG4gICAgc2NvcGU6IHtcbiAgICAgIDE6IFwia2V5d29yZFwiLFxuICAgICAgMzogXCJ0aXRsZS5mdW5jdGlvblwiXG4gICAgfVxuICB9O1xuXG4gIC8vIFZhciBDdXN0b20uVmFyaWFibGUuTmFtZS5JdGVtXG4gIC8vIFZhciAvR0xPQkFMIEN1c3RvbS5WYXJpYWJsZS5OYW1lLkl0ZW1cbiAgY29uc3QgVkFSSUFCTEVfTkFNRV9SRSA9IC9bQS1aYS16XVtcXHcuXSovO1xuICBjb25zdCBWQVJJQUJMRV9ERUZJTklUSU9OID0ge1xuICAgIG1hdGNoOiBbXG4gICAgICAvVmFyLyxcbiAgICAgIC9cXHMrLyxcbiAgICAgIC8oPzpcXC9HTE9CQUxcXHMrKT8vLFxuICAgICAgVkFSSUFCTEVfTkFNRV9SRVxuICAgIF0sXG4gICAgc2NvcGU6IHtcbiAgICAgIDE6IFwia2V5d29yZFwiLFxuICAgICAgMzogXCJwYXJhbXNcIixcbiAgICAgIDQ6IFwidmFyaWFibGVcIlxuICAgIH1cbiAgfTtcblxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdOU0lTJyxcbiAgICBjYXNlX2luc2Vuc2l0aXZlOiB0cnVlLFxuICAgIGtleXdvcmRzOiB7XG4gICAgICBrZXl3b3JkOiBLRVlXT1JEUyxcbiAgICAgIGxpdGVyYWw6IExJVEVSQUxTXG4gICAgfSxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5IQVNIX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgICBobGpzLkNPTU1FTlQoXG4gICAgICAgICc7JyxcbiAgICAgICAgJyQnLFxuICAgICAgICB7IHJlbGV2YW5jZTogMCB9XG4gICAgICApLFxuICAgICAgVkFSSUFCTEVfREVGSU5JVElPTixcbiAgICAgIEZVTkNUSU9OX0RFRklOSVRJT04sXG4gICAgICB7IGJlZ2luS2V5d29yZHM6ICdGdW5jdGlvbiBQYWdlRXggU2VjdGlvbiBTZWN0aW9uR3JvdXAgRnVuY3Rpb25FbmQgU2VjdGlvbkVuZCcsIH0sXG4gICAgICBTVFJJTkcsXG4gICAgICBDT01QSUxFUixcbiAgICAgIERFRklORVMsXG4gICAgICBWQVJJQUJMRVMsXG4gICAgICBMQU5HVUFHRVMsXG4gICAgICBQQVJBTUVURVJTLFxuICAgICAgUExVR0lOUyxcbiAgICAgIGhsanMuTlVNQkVSX01PREVcbiAgICBdXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbnNpcztcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2386\n')},2392:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (/* binding */ Plugin),\n/* harmony export */ plugin: () => (/* binding */ plugin),\n/* harmony export */ svgs: () => (/* binding */ svgs),\n/* harmony export */ workspace: () => (/* binding */ workspace)\n/* harmony export */ });\n/* harmony import */ var obsidian__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(8197);\n/* harmony import */ var obsidian__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(obsidian__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var auto_bind__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(5858);\n/* harmony import */ var src_workspace_db_schema__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3406);\nvar __async = (__this, __arguments, generator) => {\n return new Promise((resolve, reject) => {\n var fulfilled = (value) => {\n try {\n step(generator.next(value));\n } catch (e) {\n reject(e);\n }\n };\n var rejected = (value) => {\n try {\n step(generator.throw(value));\n } catch (e) {\n reject(e);\n }\n };\n var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);\n step((generator = generator.apply(__this, __arguments)).next());\n });\n};\n\n\n\nlet plugin;\nconst svgs = /* @__PURE__ */ new Map();\nconst workspace = (0,src_workspace_db_schema__WEBPACK_IMPORTED_MODULE_1__/* .createDb */ .dL)();\nclass Plugin extends obsidian__WEBPACK_IMPORTED_MODULE_0__.Plugin {\n constructor(_, manifest) {\n console.info("Loading Mindmap plugin");\n super(app, manifest);\n (0,auto_bind__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A)(this);\n plugin = this;\n Promise.resolve(/* import() */).then(__webpack_require__.bind(__webpack_require__, 4215));\n Promise.resolve(/* import() */).then(__webpack_require__.bind(__webpack_require__, 2410));\n this.setup();\n }\n setup() {\n return __async(this, null, function* () {\n const { settingsLoaded } = yield Promise.resolve(/* import() */).then(__webpack_require__.bind(__webpack_require__, 8079));\n yield settingsLoaded;\n const { loadStyleFeatures } = yield Promise.resolve(/* import() */).then(__webpack_require__.bind(__webpack_require__, 1431));\n const { GlobalSettingsDialog } = yield Promise.resolve(/* import() */).then(__webpack_require__.bind(__webpack_require__, 5712));\n const { codeBlockHandler } = yield Promise.resolve(/* import() */).then(__webpack_require__.bind(__webpack_require__, 6186));\n this.addSettingTab(new GlobalSettingsDialog());\n this.registerMarkdownCodeBlockProcessor("markmap", codeBlockHandler);\n loadStyleFeatures();\n });\n }\n onunload() {\n return __async(this, null, function* () {\n console.info("Unloading Mindmap plugin");\n });\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjM5Mi5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQThEO0FBQ3pDO0FBRUk7QUFHbEIsSUFBSTtBQUNKLE1BQU0sT0FBTyxvQkFBSSxJQUFJO0FBQ3JCLE1BQU0sWUFBWSwyRUFBUSxDQUFDO0FBR25CLE1BQU0sZUFBZSw0Q0FBYyxDQUFDO0FBQUEsRUFDakQsWUFBWSxHQUFRLFVBQTBCO0FBQzVDLFlBQVEsS0FBSyx3QkFBd0I7QUFFckMsVUFBTSxLQUFLLFFBQVE7QUFDbkIsa0VBQVEsQ0FBQyxJQUFJO0FBQ2IsYUFBUztBQUVULDZGQUFrQjtBQUNsQiw2RkFBa0Q7QUFDbEQsU0FBSyxNQUFNO0FBQUEsRUFDYjtBQUFBLEVBRWMsUUFBUTtBQUFBO0FBQ3BCLFlBQU0sRUFBRSxlQUFlLElBQUksTUFBTSx5RkFBaUM7QUFDbEUsWUFBTTtBQUNOLFlBQU0sRUFBRSxrQkFBa0IsSUFBSSxNQUFNLHlGQUFzQztBQUMxRSxZQUFNLEVBQUUscUJBQXFCLElBQUksTUFBTSx5RkFBOEI7QUFDckUsWUFBTSxFQUFFLGlCQUFpQixJQUFJLE1BQU0seUZBQXVCO0FBRTFELFdBQUssY0FBYyxJQUFJLHFCQUFxQixDQUFDO0FBQzdDLFdBQUssbUNBQW1DLFdBQVcsZ0JBQWdCO0FBQ25FLHdCQUFrQjtBQUFBLElBQ3BCO0FBQUE7QUFBQSxFQUVhLFdBQVc7QUFBQTtBQUN0QixjQUFRLEtBQUssMEJBQTBCO0FBQUEsSUFDekM7QUFBQTtBQUNGIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vb2JzaWRpYW4tbWluZG1hcC1uZXh0Z2VuLy4vc3JjL2NvcmUvZW50cnkudHM/ZjVhYyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBcHAsIFBsdWdpbiBhcyBPYnNpZGlhblBsdWdpbiwgUGx1Z2luTWFuaWZlc3QgfSBmcm9tICdvYnNpZGlhbidcbmltcG9ydCBhdXRvQmluZCBmcm9tICdhdXRvLWJpbmQnXG5cbmltcG9ydCB7IGNyZWF0ZURiIH0gZnJvbSAnc3JjL3dvcmtzcGFjZS9kYi1zY2hlbWEnXG5cblxuZXhwb3J0IGxldCBwbHVnaW46IFBsdWdpblxuZXhwb3J0IGNvbnN0IHN2Z3MgPSBuZXcgTWFwKClcbmV4cG9ydCBjb25zdCB3b3Jrc3BhY2UgPSBjcmVhdGVEYigpXG5cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGx1Z2luIGV4dGVuZHMgT2JzaWRpYW5QbHVnaW4ge1xuICBjb25zdHJ1Y3RvcihfOiBBcHAsIG1hbmlmZXN0OiBQbHVnaW5NYW5pZmVzdCkge1xuICAgIGNvbnNvbGUuaW5mbygnTG9hZGluZyBNaW5kbWFwIHBsdWdpbicpXG5cbiAgICBzdXBlcihhcHAsIG1hbmlmZXN0KVxuICAgIGF1dG9CaW5kKHRoaXMpXG4gICAgcGx1Z2luID0gdGhpc1xuXG4gICAgaW1wb3J0KCcuL2V2ZW50cycpXG4gICAgaW1wb3J0KCdzcmMvaW50ZXJuYWwtbGlua3MvaGFuZGxlLWludGVybmFsLWxpbmtzJylcbiAgICB0aGlzLnNldHVwKClcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2V0dXAoKSB7XG4gICAgY29uc3QgeyBzZXR0aW5nc0xvYWRlZCB9ID0gYXdhaXQgaW1wb3J0KCdzcmMvc2V0dGluZ3MvZmlsZXN5c3RlbScpXG4gICAgYXdhaXQgc2V0dGluZ3NMb2FkZWRcbiAgICBjb25zdCB7IGxvYWRTdHlsZUZlYXR1cmVzIH0gPSBhd2FpdCBpbXBvcnQoJ3NyYy9yZW5kZXJpbmcvc3R5bGUtZmVhdHVyZXMnKVxuICAgIGNvbnN0IHsgR2xvYmFsU2V0dGluZ3NEaWFsb2cgfSA9IGF3YWl0IGltcG9ydCgnc3JjL3NldHRpbmdzL2RpYWxvZ3MnKVxuICAgIGNvbnN0IHsgY29kZUJsb2NrSGFuZGxlciB9ID0gYXdhaXQgaW1wb3J0KCdzcmMvd29ya3NwYWNlJylcblxuICAgIHRoaXMuYWRkU2V0dGluZ1RhYihuZXcgR2xvYmFsU2V0dGluZ3NEaWFsb2coKSlcbiAgICB0aGlzLnJlZ2lzdGVyTWFya2Rvd25Db2RlQmxvY2tQcm9jZXNzb3IoJ21hcmttYXAnLCBjb2RlQmxvY2tIYW5kbGVyKVxuICAgIGxvYWRTdHlsZUZlYXR1cmVzKClcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBvbnVubG9hZCgpIHtcbiAgICBjb25zb2xlLmluZm8oJ1VubG9hZGluZyBNaW5kbWFwIHBsdWdpbicpXG4gIH1cbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2392\n')},2410:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var src_core_entry__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(2392);\n\nconst workspace = document.querySelector(".workspace");\nconst registerEvent = (type, fn) => src_core_entry__WEBPACK_IMPORTED_MODULE_0__.plugin.registerDomEvent(workspace, type, (event) => {\n const { target } = event;\n const isAnchor = target instanceof HTMLAnchorElement;\n if (!isAnchor) return;\n const parentMindmap = target.closest("svg.markmap");\n if (!parentMindmap) return;\n const href = target.getAttribute("href");\n if (!href) return;\n const hasProtocol = /^[^#:]*:.*#/.test(href);\n if (hasProtocol) return;\n fn({ event, target, parentMindmap, href });\n});\nregisterEvent("click", ({ event, parentMindmap, href }) => {\n event.preventDefault();\n const { path } = src_core_entry__WEBPACK_IMPORTED_MODULE_0__.svgs.get(parentMindmap);\n app.workspace.openLinkText(href, path);\n});\nsrc_core_entry__WEBPACK_IMPORTED_MODULE_0__.plugin.registerHoverLinkSource("mindmap-nextgen", {\n display: "Mindmap Nextgen",\n defaultMod: true\n});\nregisterEvent("mouseover", ({ event, target, parentMindmap, href }) => {\n app.workspace.trigger("hover-link", {\n event,\n source: "mindmap-nextgen",\n hoverParent: parentMindmap,\n targetEl: target,\n linktext: href\n });\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjQxMC5qcyIsIm1hcHBpbmdzIjoiOztBQUE2QjtBQUc3QixNQUFNLFlBQVksU0FBUyxjQUFjLFlBQXFCO0FBRTlELE1BQU0sZ0JBQWdCLENBQUMsTUFBNkIsT0FNbEQsa0RBQU0sQ0FBQyxpQkFBaUIsV0FBVyxNQUFNLFdBQVM7QUFDaEQsUUFBTSxFQUFFLE9BQU8sSUFBSTtBQUNuQixRQUFNLFdBQVcsa0JBQWtCO0FBQ2pDLE1BQUksQ0FBQyxTQUFVO0FBQ2pCLFFBQU0sZ0JBQWdCLE9BQU8sUUFBUSxhQUFzQjtBQUN6RCxNQUFJLENBQUMsY0FBZTtBQUN0QixRQUFNLE9BQU8sT0FBTyxhQUFhLE1BQU07QUFDckMsTUFBSSxDQUFDLEtBQU07QUFDYixRQUFNLGNBQWMsY0FBYyxLQUFLLElBQUk7QUFDekMsTUFBSSxZQUFhO0FBRW5CLEtBQUcsRUFBRSxPQUFPLFFBQVEsZUFBZSxLQUFLLENBQUM7QUFDM0MsQ0FBQztBQUVILGNBQWMsU0FBUyxDQUFDLEVBQUUsT0FBTyxlQUFlLEtBQUssTUFBTTtBQUN6RCxRQUFNLGVBQWU7QUFFckIsUUFBTSxFQUFFLEtBQUssSUFBSSxnREFBSSxDQUFDLElBQUksYUFBYTtBQUN2QyxNQUFJLFVBQVUsYUFBYSxNQUFNLElBQUk7QUFDdkMsQ0FBQztBQUVELGtEQUFNLENBQUMsd0JBQXdCLG1CQUFtQjtBQUFBLEVBQ2hELFNBQVM7QUFBQSxFQUNULFlBQVk7QUFDZCxDQUFDO0FBRUQsY0FBYyxhQUFhLENBQUMsRUFBRSxPQUFPLFFBQVEsZUFBZSxLQUFLLE1BQU07QUFDckUsTUFBSSxVQUFVLFFBQVEsY0FBYztBQUFBLElBQ2xDO0FBQUEsSUFDQSxRQUFRO0FBQUEsSUFDUixhQUFhO0FBQUEsSUFDYixVQUFVO0FBQUEsSUFDVixVQUFVO0FBQUEsRUFDWixDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL29ic2lkaWFuLW1pbmRtYXAtbmV4dGdlbi8uL3NyYy9pbnRlcm5hbC1saW5rcy9oYW5kbGUtaW50ZXJuYWwtbGlua3MudHM/Y2ZhMSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBwbHVnaW4sIHN2Z3MgfSBmcm9tICdzcmMvY29yZS9lbnRyeSdcblxuXG5jb25zdCB3b3Jrc3BhY2UgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcud29ya3NwYWNlJyBhcyAnZGl2JykhXG5cbmNvbnN0IHJlZ2lzdGVyRXZlbnQgPSAodHlwZTogJ2NsaWNrJyB8ICdtb3VzZW92ZXInLCBmbjogKGFyZ3M6IHtcbiAgZXZlbnQ6IE1vdXNlRXZlbnRcbiAgdGFyZ2V0OiBIVE1MQW5jaG9yRWxlbWVudFxuICBwYXJlbnRNaW5kbWFwOiBTVkdTVkdFbGVtZW50XG4gIGhyZWY6IHN0cmluZ1xufSkgPT4gdm9pZCkgPT5cbiAgcGx1Z2luLnJlZ2lzdGVyRG9tRXZlbnQod29ya3NwYWNlLCB0eXBlLCBldmVudCA9PiB7XG4gICAgY29uc3QgeyB0YXJnZXQgfSA9IGV2ZW50XG4gICAgY29uc3QgaXNBbmNob3IgPSB0YXJnZXQgaW5zdGFuY2VvZiBIVE1MQW5jaG9yRWxlbWVudFxuICAgICAgaWYgKCFpc0FuY2hvcikgcmV0dXJuXG4gICAgY29uc3QgcGFyZW50TWluZG1hcCA9IHRhcmdldC5jbG9zZXN0KCdzdmcubWFya21hcCcgYXMgJ3N2ZycpXG4gICAgICBpZiAoIXBhcmVudE1pbmRtYXApIHJldHVyblxuICAgIGNvbnN0IGhyZWYgPSB0YXJnZXQuZ2V0QXR0cmlidXRlKCdocmVmJylcbiAgICAgIGlmICghaHJlZikgcmV0dXJuXG4gICAgY29uc3QgaGFzUHJvdG9jb2wgPSAvXlteIzpdKjouKiMvLnRlc3QoaHJlZikgIC8vIGh0dHBzOi8vcmVnZXgxMDEuY29tL3IvUkxHMGE1LzFcbiAgICAgIGlmIChoYXNQcm90b2NvbCkgcmV0dXJuXG5cbiAgICBmbih7IGV2ZW50LCB0YXJnZXQsIHBhcmVudE1pbmRtYXAsIGhyZWYgfSlcbiAgfSlcblxucmVnaXN0ZXJFdmVudCgnY2xpY2snLCAoeyBldmVudCwgcGFyZW50TWluZG1hcCwgaHJlZiB9KSA9PiB7XG4gIGV2ZW50LnByZXZlbnREZWZhdWx0KClcblxuICBjb25zdCB7IHBhdGggfSA9IHN2Z3MuZ2V0KHBhcmVudE1pbmRtYXApIVxuICBhcHAud29ya3NwYWNlLm9wZW5MaW5rVGV4dChocmVmLCBwYXRoKVxufSlcblxucGx1Z2luLnJlZ2lzdGVySG92ZXJMaW5rU291cmNlKCdtaW5kbWFwLW5leHRnZW4nLCB7XG4gIGRpc3BsYXk6ICdNaW5kbWFwIE5leHRnZW4nLFxuICBkZWZhdWx0TW9kOiB0cnVlXG59KVxuXG5yZWdpc3RlckV2ZW50KCdtb3VzZW92ZXInLCAoeyBldmVudCwgdGFyZ2V0LCBwYXJlbnRNaW5kbWFwLCBocmVmIH0pID0+IHtcbiAgYXBwLndvcmtzcGFjZS50cmlnZ2VyKCdob3Zlci1saW5rJywge1xuICAgIGV2ZW50LFxuICAgIHNvdXJjZTogJ21pbmRtYXAtbmV4dGdlbicsXG4gICAgaG92ZXJQYXJlbnQ6IHBhcmVudE1pbmRtYXAsXG4gICAgdGFyZ2V0RWw6IHRhcmdldCxcbiAgICBsaW5rdGV4dDogaHJlZlxuICB9KVxufSlcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2410\n')},2463:module=>{eval('/*\nLanguage: Batch file (DOS)\nAuthor: Alexander Makarov \nContributors: Anton Kochkov \nWebsite: https://en.wikipedia.org/wiki/Batch_file\nCategory: scripting\n*/\n\n/** @type LanguageFn */\nfunction dos(hljs) {\n const COMMENT = hljs.COMMENT(\n /^\\s*@?rem\\b/, /$/,\n { relevance: 10 }\n );\n const LABEL = {\n className: \'symbol\',\n begin: \'^\\\\s*[A-Za-z._?][A-Za-z0-9_$#@~.?]*(:|\\\\s+label)\',\n relevance: 0\n };\n const KEYWORDS = [\n "if",\n "else",\n "goto",\n "for",\n "in",\n "do",\n "call",\n "exit",\n "not",\n "exist",\n "errorlevel",\n "defined",\n "equ",\n "neq",\n "lss",\n "leq",\n "gtr",\n "geq"\n ];\n const BUILT_INS = [\n "prn",\n "nul",\n "lpt3",\n "lpt2",\n "lpt1",\n "con",\n "com4",\n "com3",\n "com2",\n "com1",\n "aux",\n "shift",\n "cd",\n "dir",\n "echo",\n "setlocal",\n "endlocal",\n "set",\n "pause",\n "copy",\n "append",\n "assoc",\n "at",\n "attrib",\n "break",\n "cacls",\n "cd",\n "chcp",\n "chdir",\n "chkdsk",\n "chkntfs",\n "cls",\n "cmd",\n "color",\n "comp",\n "compact",\n "convert",\n "date",\n "dir",\n "diskcomp",\n "diskcopy",\n "doskey",\n "erase",\n "fs",\n "find",\n "findstr",\n "format",\n "ftype",\n "graftabl",\n "help",\n "keyb",\n "label",\n "md",\n "mkdir",\n "mode",\n "more",\n "move",\n "path",\n "pause",\n "print",\n "popd",\n "pushd",\n "promt",\n "rd",\n "recover",\n "rem",\n "rename",\n "replace",\n "restore",\n "rmdir",\n "shift",\n "sort",\n "start",\n "subst",\n "time",\n "title",\n "tree",\n "type",\n "ver",\n "verify",\n "vol",\n // winutils\n "ping",\n "net",\n "ipconfig",\n "taskkill",\n "xcopy",\n "ren",\n "del"\n ];\n return {\n name: \'Batch file (DOS)\',\n aliases: [\n \'bat\',\n \'cmd\'\n ],\n case_insensitive: true,\n illegal: /\\/\\*/,\n keywords: {\n keyword: KEYWORDS,\n built_in: BUILT_INS\n },\n contains: [\n {\n className: \'variable\',\n begin: /%%[^ ]|%[^ ]+?%|![^ ]+?!/\n },\n {\n className: \'function\',\n begin: LABEL.begin,\n end: \'goto:eof\',\n contains: [\n hljs.inherit(hljs.TITLE_MODE, { begin: \'([_a-zA-Z]\\\\w*\\\\.)*([_a-zA-Z]\\\\w*:)?[_a-zA-Z]\\\\w*\' }),\n COMMENT\n ]\n },\n {\n className: \'number\',\n begin: \'\\\\b\\\\d+\',\n relevance: 0\n },\n COMMENT\n ]\n };\n}\n\nmodule.exports = dos;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjQ2My5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQ0FBMEMsNERBQTREO0FBQ3RHO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9vYnNpZGlhbi1taW5kbWFwLW5leHRnZW4vLi9ub2RlX21vZHVsZXMvLnBucG0vaGlnaGxpZ2h0LmpzQDExLjExLjEvbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2Rvcy5qcz8xNjc4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qXG5MYW5ndWFnZTogQmF0Y2ggZmlsZSAoRE9TKVxuQXV0aG9yOiBBbGV4YW5kZXIgTWFrYXJvdiA8c2FtQHJtY3JlYXRpdmUucnU+XG5Db250cmlidXRvcnM6IEFudG9uIEtvY2hrb3YgPGFudG9uLmtvY2hrb3ZAZ21haWwuY29tPlxuV2Vic2l0ZTogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQmF0Y2hfZmlsZVxuQ2F0ZWdvcnk6IHNjcmlwdGluZ1xuKi9cblxuLyoqIEB0eXBlIExhbmd1YWdlRm4gKi9cbmZ1bmN0aW9uIGRvcyhobGpzKSB7XG4gIGNvbnN0IENPTU1FTlQgPSBobGpzLkNPTU1FTlQoXG4gICAgL15cXHMqQD9yZW1cXGIvLCAvJC8sXG4gICAgeyByZWxldmFuY2U6IDEwIH1cbiAgKTtcbiAgY29uc3QgTEFCRUwgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3ltYm9sJyxcbiAgICBiZWdpbjogJ15cXFxccypbQS1aYS16Ll8/XVtBLVphLXowLTlfJCNAfi4/XSooOnxcXFxccytsYWJlbCknLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuICBjb25zdCBLRVlXT1JEUyA9IFtcbiAgICBcImlmXCIsXG4gICAgXCJlbHNlXCIsXG4gICAgXCJnb3RvXCIsXG4gICAgXCJmb3JcIixcbiAgICBcImluXCIsXG4gICAgXCJkb1wiLFxuICAgIFwiY2FsbFwiLFxuICAgIFwiZXhpdFwiLFxuICAgIFwibm90XCIsXG4gICAgXCJleGlzdFwiLFxuICAgIFwiZXJyb3JsZXZlbFwiLFxuICAgIFwiZGVmaW5lZFwiLFxuICAgIFwiZXF1XCIsXG4gICAgXCJuZXFcIixcbiAgICBcImxzc1wiLFxuICAgIFwibGVxXCIsXG4gICAgXCJndHJcIixcbiAgICBcImdlcVwiXG4gIF07XG4gIGNvbnN0IEJVSUxUX0lOUyA9IFtcbiAgICBcInByblwiLFxuICAgIFwibnVsXCIsXG4gICAgXCJscHQzXCIsXG4gICAgXCJscHQyXCIsXG4gICAgXCJscHQxXCIsXG4gICAgXCJjb25cIixcbiAgICBcImNvbTRcIixcbiAgICBcImNvbTNcIixcbiAgICBcImNvbTJcIixcbiAgICBcImNvbTFcIixcbiAgICBcImF1eFwiLFxuICAgIFwic2hpZnRcIixcbiAgICBcImNkXCIsXG4gICAgXCJkaXJcIixcbiAgICBcImVjaG9cIixcbiAgICBcInNldGxvY2FsXCIsXG4gICAgXCJlbmRsb2NhbFwiLFxuICAgIFwic2V0XCIsXG4gICAgXCJwYXVzZVwiLFxuICAgIFwiY29weVwiLFxuICAgIFwiYXBwZW5kXCIsXG4gICAgXCJhc3NvY1wiLFxuICAgIFwiYXRcIixcbiAgICBcImF0dHJpYlwiLFxuICAgIFwiYnJlYWtcIixcbiAgICBcImNhY2xzXCIsXG4gICAgXCJjZFwiLFxuICAgIFwiY2hjcFwiLFxuICAgIFwiY2hkaXJcIixcbiAgICBcImNoa2Rza1wiLFxuICAgIFwiY2hrbnRmc1wiLFxuICAgIFwiY2xzXCIsXG4gICAgXCJjbWRcIixcbiAgICBcImNvbG9yXCIsXG4gICAgXCJjb21wXCIsXG4gICAgXCJjb21wYWN0XCIsXG4gICAgXCJjb252ZXJ0XCIsXG4gICAgXCJkYXRlXCIsXG4gICAgXCJkaXJcIixcbiAgICBcImRpc2tjb21wXCIsXG4gICAgXCJkaXNrY29weVwiLFxuICAgIFwiZG9za2V5XCIsXG4gICAgXCJlcmFzZVwiLFxuICAgIFwiZnNcIixcbiAgICBcImZpbmRcIixcbiAgICBcImZpbmRzdHJcIixcbiAgICBcImZvcm1hdFwiLFxuICAgIFwiZnR5cGVcIixcbiAgICBcImdyYWZ0YWJsXCIsXG4gICAgXCJoZWxwXCIsXG4gICAgXCJrZXliXCIsXG4gICAgXCJsYWJlbFwiLFxuICAgIFwibWRcIixcbiAgICBcIm1rZGlyXCIsXG4gICAgXCJtb2RlXCIsXG4gICAgXCJtb3JlXCIsXG4gICAgXCJtb3ZlXCIsXG4gICAgXCJwYXRoXCIsXG4gICAgXCJwYXVzZVwiLFxuICAgIFwicHJpbnRcIixcbiAgICBcInBvcGRcIixcbiAgICBcInB1c2hkXCIsXG4gICAgXCJwcm9tdFwiLFxuICAgIFwicmRcIixcbiAgICBcInJlY292ZXJcIixcbiAgICBcInJlbVwiLFxuICAgIFwicmVuYW1lXCIsXG4gICAgXCJyZXBsYWNlXCIsXG4gICAgXCJyZXN0b3JlXCIsXG4gICAgXCJybWRpclwiLFxuICAgIFwic2hpZnRcIixcbiAgICBcInNvcnRcIixcbiAgICBcInN0YXJ0XCIsXG4gICAgXCJzdWJzdFwiLFxuICAgIFwidGltZVwiLFxuICAgIFwidGl0bGVcIixcbiAgICBcInRyZWVcIixcbiAgICBcInR5cGVcIixcbiAgICBcInZlclwiLFxuICAgIFwidmVyaWZ5XCIsXG4gICAgXCJ2b2xcIixcbiAgICAvLyB3aW51dGlsc1xuICAgIFwicGluZ1wiLFxuICAgIFwibmV0XCIsXG4gICAgXCJpcGNvbmZpZ1wiLFxuICAgIFwidGFza2tpbGxcIixcbiAgICBcInhjb3B5XCIsXG4gICAgXCJyZW5cIixcbiAgICBcImRlbFwiXG4gIF07XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ0JhdGNoIGZpbGUgKERPUyknLFxuICAgIGFsaWFzZXM6IFtcbiAgICAgICdiYXQnLFxuICAgICAgJ2NtZCdcbiAgICBdLFxuICAgIGNhc2VfaW5zZW5zaXRpdmU6IHRydWUsXG4gICAgaWxsZWdhbDogL1xcL1xcKi8sXG4gICAga2V5d29yZHM6IHtcbiAgICAgIGtleXdvcmQ6IEtFWVdPUkRTLFxuICAgICAgYnVpbHRfaW46IEJVSUxUX0lOU1xuICAgIH0sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAndmFyaWFibGUnLFxuICAgICAgICBiZWdpbjogLyUlW14gXXwlW14gXSs/JXwhW14gXSs/IS9cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2Z1bmN0aW9uJyxcbiAgICAgICAgYmVnaW46IExBQkVMLmJlZ2luLFxuICAgICAgICBlbmQ6ICdnb3RvOmVvZicsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgaGxqcy5pbmhlcml0KGhsanMuVElUTEVfTU9ERSwgeyBiZWdpbjogJyhbX2EtekEtWl1cXFxcdypcXFxcLikqKFtfYS16QS1aXVxcXFx3KjopP1tfYS16QS1aXVxcXFx3KicgfSksXG4gICAgICAgICAgQ09NTUVOVFxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgICAgICBiZWdpbjogJ1xcXFxiXFxcXGQrJyxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAgQ09NTUVOVFxuICAgIF1cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBkb3M7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2463\n')},2485:module=>{eval("/*\nLanguage: Makefile\nAuthor: Ivan Sagalaev \nContributors: Joël Porquet \nWebsite: https://www.gnu.org/software/make/manual/html_node/Introduction.html\nCategory: common, build-system\n*/\n\nfunction makefile(hljs) {\n /* Variables: simple (eg $(var)) and special (eg $@) */\n const VARIABLE = {\n className: 'variable',\n variants: [\n {\n begin: '\\\\$\\\\(' + hljs.UNDERSCORE_IDENT_RE + '\\\\)',\n contains: [ hljs.BACKSLASH_ESCAPE ]\n },\n { begin: /\\$[@%{"use strict";eval("\n\n\nfunction isNothing(subject) {\n return (typeof subject === 'undefined') || (subject === null);\n}\n\n\nfunction isObject(subject) {\n return (typeof subject === 'object') && (subject !== null);\n}\n\n\nfunction toArray(sequence) {\n if (Array.isArray(sequence)) return sequence;\n else if (isNothing(sequence)) return [];\n\n return [ sequence ];\n}\n\n\nfunction extend(target, source) {\n var index, length, key, sourceKeys;\n\n if (source) {\n sourceKeys = Object.keys(source);\n\n for (index = 0, length = sourceKeys.length; index < length; index += 1) {\n key = sourceKeys[index];\n target[key] = source[key];\n }\n }\n\n return target;\n}\n\n\nfunction repeat(string, count) {\n var result = '', cycle;\n\n for (cycle = 0; cycle < count; cycle += 1) {\n result += string;\n }\n\n return result;\n}\n\n\nfunction isNegativeZero(number) {\n return (number === 0) && (Number.NEGATIVE_INFINITY === 1 / number);\n}\n\n\nmodule.exports.isNothing = isNothing;\nmodule.exports.isObject = isObject;\nmodule.exports.toArray = toArray;\nmodule.exports.repeat = repeat;\nmodule.exports.isNegativeZero = isNegativeZero;\nmodule.exports.extend = extend;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjQ4OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7O0FBR2I7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsZ0RBQWdELGdCQUFnQjtBQUNoRTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBLGtCQUFrQixlQUFlO0FBQ2pDO0FBQ0E7O0FBRUE7QUFDQTs7O0FBR0E7QUFDQTtBQUNBOzs7QUFHQSx3QkFBd0I7QUFDeEIsdUJBQXVCO0FBQ3ZCLHNCQUFzQjtBQUN0QixxQkFBcUI7QUFDckIsNkJBQTZCO0FBQzdCLHFCQUFxQiIsInNvdXJjZXMiOlsid2VicGFjazovL29ic2lkaWFuLW1pbmRtYXAtbmV4dGdlbi8uL25vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMS9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC9jb21tb24uanM/NzYxYSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cblxuZnVuY3Rpb24gaXNOb3RoaW5nKHN1YmplY3QpIHtcbiAgcmV0dXJuICh0eXBlb2Ygc3ViamVjdCA9PT0gJ3VuZGVmaW5lZCcpIHx8IChzdWJqZWN0ID09PSBudWxsKTtcbn1cblxuXG5mdW5jdGlvbiBpc09iamVjdChzdWJqZWN0KSB7XG4gIHJldHVybiAodHlwZW9mIHN1YmplY3QgPT09ICdvYmplY3QnKSAmJiAoc3ViamVjdCAhPT0gbnVsbCk7XG59XG5cblxuZnVuY3Rpb24gdG9BcnJheShzZXF1ZW5jZSkge1xuICBpZiAoQXJyYXkuaXNBcnJheShzZXF1ZW5jZSkpIHJldHVybiBzZXF1ZW5jZTtcbiAgZWxzZSBpZiAoaXNOb3RoaW5nKHNlcXVlbmNlKSkgcmV0dXJuIFtdO1xuXG4gIHJldHVybiBbIHNlcXVlbmNlIF07XG59XG5cblxuZnVuY3Rpb24gZXh0ZW5kKHRhcmdldCwgc291cmNlKSB7XG4gIHZhciBpbmRleCwgbGVuZ3RoLCBrZXksIHNvdXJjZUtleXM7XG5cbiAgaWYgKHNvdXJjZSkge1xuICAgIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpO1xuXG4gICAgZm9yIChpbmRleCA9IDAsIGxlbmd0aCA9IHNvdXJjZUtleXMubGVuZ3RoOyBpbmRleCA8IGxlbmd0aDsgaW5kZXggKz0gMSkge1xuICAgICAga2V5ID0gc291cmNlS2V5c1tpbmRleF07XG4gICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59XG5cblxuZnVuY3Rpb24gcmVwZWF0KHN0cmluZywgY291bnQpIHtcbiAgdmFyIHJlc3VsdCA9ICcnLCBjeWNsZTtcblxuICBmb3IgKGN5Y2xlID0gMDsgY3ljbGUgPCBjb3VudDsgY3ljbGUgKz0gMSkge1xuICAgIHJlc3VsdCArPSBzdHJpbmc7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5cbmZ1bmN0aW9uIGlzTmVnYXRpdmVaZXJvKG51bWJlcikge1xuICByZXR1cm4gKG51bWJlciA9PT0gMCkgJiYgKE51bWJlci5ORUdBVElWRV9JTkZJTklUWSA9PT0gMSAvIG51bWJlcik7XG59XG5cblxubW9kdWxlLmV4cG9ydHMuaXNOb3RoaW5nICAgICAgPSBpc05vdGhpbmc7XG5tb2R1bGUuZXhwb3J0cy5pc09iamVjdCAgICAgICA9IGlzT2JqZWN0O1xubW9kdWxlLmV4cG9ydHMudG9BcnJheSAgICAgICAgPSB0b0FycmF5O1xubW9kdWxlLmV4cG9ydHMucmVwZWF0ICAgICAgICAgPSByZXBlYXQ7XG5tb2R1bGUuZXhwb3J0cy5pc05lZ2F0aXZlWmVybyA9IGlzTmVnYXRpdmVaZXJvO1xubW9kdWxlLmV4cG9ydHMuZXh0ZW5kICAgICAgICAgPSBleHRlbmQ7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2489\n")},2500:(module,__unused_webpack_exports,__webpack_require__)=>{"use strict";eval("\n\nvar YAMLException = __webpack_require__(5447);\n\nvar TYPE_CONSTRUCTOR_OPTIONS = [\n 'kind',\n 'resolve',\n 'construct',\n 'instanceOf',\n 'predicate',\n 'represent',\n 'defaultStyle',\n 'styleAliases'\n];\n\nvar YAML_NODE_KINDS = [\n 'scalar',\n 'sequence',\n 'mapping'\n];\n\nfunction compileStyleAliases(map) {\n var result = {};\n\n if (map !== null) {\n Object.keys(map).forEach(function (style) {\n map[style].forEach(function (alias) {\n result[String(alias)] = style;\n });\n });\n }\n\n return result;\n}\n\nfunction Type(tag, options) {\n options = options || {};\n\n Object.keys(options).forEach(function (name) {\n if (TYPE_CONSTRUCTOR_OPTIONS.indexOf(name) === -1) {\n throw new YAMLException('Unknown option \"' + name + '\" is met in definition of \"' + tag + '\" YAML type.');\n }\n });\n\n // TODO: Add tag format check.\n this.tag = tag;\n this.kind = options['kind'] || null;\n this.resolve = options['resolve'] || function () { return true; };\n this.construct = options['construct'] || function (data) { return data; };\n this.instanceOf = options['instanceOf'] || null;\n this.predicate = options['predicate'] || null;\n this.represent = options['represent'] || null;\n this.defaultStyle = options['defaultStyle'] || null;\n this.styleAliases = compileStyleAliases(options['styleAliases'] || null);\n\n if (YAML_NODE_KINDS.indexOf(this.kind) === -1) {\n throw new YAMLException('Unknown kind \"' + this.kind + '\" is specified for \"' + tag + '\" YAML type.');\n }\n}\n\nmodule.exports = Type;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjUwMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixvQkFBb0IsbUJBQU8sQ0FBQyxJQUFhOztBQUV6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0EsK0RBQStEO0FBQy9ELG1FQUFtRTtBQUNuRTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vb2JzaWRpYW4tbWluZG1hcC1uZXh0Z2VuLy4vbm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4xL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUuanM/YjhiNSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBZQU1MRXhjZXB0aW9uID0gcmVxdWlyZSgnLi9leGNlcHRpb24nKTtcblxudmFyIFRZUEVfQ09OU1RSVUNUT1JfT1BUSU9OUyA9IFtcbiAgJ2tpbmQnLFxuICAncmVzb2x2ZScsXG4gICdjb25zdHJ1Y3QnLFxuICAnaW5zdGFuY2VPZicsXG4gICdwcmVkaWNhdGUnLFxuICAncmVwcmVzZW50JyxcbiAgJ2RlZmF1bHRTdHlsZScsXG4gICdzdHlsZUFsaWFzZXMnXG5dO1xuXG52YXIgWUFNTF9OT0RFX0tJTkRTID0gW1xuICAnc2NhbGFyJyxcbiAgJ3NlcXVlbmNlJyxcbiAgJ21hcHBpbmcnXG5dO1xuXG5mdW5jdGlvbiBjb21waWxlU3R5bGVBbGlhc2VzKG1hcCkge1xuICB2YXIgcmVzdWx0ID0ge307XG5cbiAgaWYgKG1hcCAhPT0gbnVsbCkge1xuICAgIE9iamVjdC5rZXlzKG1hcCkuZm9yRWFjaChmdW5jdGlvbiAoc3R5bGUpIHtcbiAgICAgIG1hcFtzdHlsZV0uZm9yRWFjaChmdW5jdGlvbiAoYWxpYXMpIHtcbiAgICAgICAgcmVzdWx0W1N0cmluZyhhbGlhcyldID0gc3R5bGU7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIFR5cGUodGFnLCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gIE9iamVjdC5rZXlzKG9wdGlvbnMpLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgICBpZiAoVFlQRV9DT05TVFJVQ1RPUl9PUFRJT05TLmluZGV4T2YobmFtZSkgPT09IC0xKSB7XG4gICAgICB0aHJvdyBuZXcgWUFNTEV4Y2VwdGlvbignVW5rbm93biBvcHRpb24gXCInICsgbmFtZSArICdcIiBpcyBtZXQgaW4gZGVmaW5pdGlvbiBvZiBcIicgKyB0YWcgKyAnXCIgWUFNTCB0eXBlLicpO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gVE9ETzogQWRkIHRhZyBmb3JtYXQgY2hlY2suXG4gIHRoaXMudGFnICAgICAgICAgID0gdGFnO1xuICB0aGlzLmtpbmQgICAgICAgICA9IG9wdGlvbnNbJ2tpbmQnXSAgICAgICAgIHx8IG51bGw7XG4gIHRoaXMucmVzb2x2ZSAgICAgID0gb3B0aW9uc1sncmVzb2x2ZSddICAgICAgfHwgZnVuY3Rpb24gKCkgeyByZXR1cm4gdHJ1ZTsgfTtcbiAgdGhpcy5jb25zdHJ1Y3QgICAgPSBvcHRpb25zWydjb25zdHJ1Y3QnXSAgICB8fCBmdW5jdGlvbiAoZGF0YSkgeyByZXR1cm4gZGF0YTsgfTtcbiAgdGhpcy5pbnN0YW5jZU9mICAgPSBvcHRpb25zWydpbnN0YW5jZU9mJ10gICB8fCBudWxsO1xuICB0aGlzLnByZWRpY2F0ZSAgICA9IG9wdGlvbnNbJ3ByZWRpY2F0ZSddICAgIHx8IG51bGw7XG4gIHRoaXMucmVwcmVzZW50ICAgID0gb3B0aW9uc1sncmVwcmVzZW50J10gICAgfHwgbnVsbDtcbiAgdGhpcy5kZWZhdWx0U3R5bGUgPSBvcHRpb25zWydkZWZhdWx0U3R5bGUnXSB8fCBudWxsO1xuICB0aGlzLnN0eWxlQWxpYXNlcyA9IGNvbXBpbGVTdHlsZUFsaWFzZXMob3B0aW9uc1snc3R5bGVBbGlhc2VzJ10gfHwgbnVsbCk7XG5cbiAgaWYgKFlBTUxfTk9ERV9LSU5EUy5pbmRleE9mKHRoaXMua2luZCkgPT09IC0xKSB7XG4gICAgdGhyb3cgbmV3IFlBTUxFeGNlcHRpb24oJ1Vua25vd24ga2luZCBcIicgKyB0aGlzLmtpbmQgKyAnXCIgaXMgc3BlY2lmaWVkIGZvciBcIicgKyB0YWcgKyAnXCIgWUFNTCB0eXBlLicpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gVHlwZTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2500\n")},2555:module=>{eval("/*\nLanguage: Vala\nAuthor: Antono Vasiljev \nDescription: Vala is a new programming language that aims to bring modern programming language features to GNOME developers without imposing any additional runtime requirements and without using a different ABI compared to applications and libraries written in C.\nWebsite: https://wiki.gnome.org/Projects/Vala\nCategory: system\n*/\n\nfunction vala(hljs) {\n return {\n name: 'Vala',\n keywords: {\n keyword:\n // Value types\n 'char uchar unichar int uint long ulong short ushort int8 int16 int32 int64 uint8 '\n + 'uint16 uint32 uint64 float double bool struct enum string void '\n // Reference types\n + 'weak unowned owned '\n // Modifiers\n + 'async signal static abstract interface override virtual delegate '\n // Control Structures\n + 'if while do for foreach else switch case break default return try catch '\n // Visibility\n + 'public private protected internal '\n // Other\n + 'using new this get set const stdout stdin stderr var',\n built_in:\n 'DBus GLib CCode Gee Object Gtk Posix',\n literal:\n 'false true null'\n },\n contains: [\n {\n className: 'class',\n beginKeywords: 'class interface namespace',\n end: /\\{/,\n excludeEnd: true,\n illegal: '[^,:\\\\n\\\\s\\\\.]',\n contains: [ hljs.UNDERSCORE_TITLE_MODE ]\n },\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE,\n {\n className: 'string',\n begin: '\"\"\"',\n end: '\"\"\"',\n relevance: 5\n },\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE,\n hljs.C_NUMBER_MODE,\n {\n className: 'meta',\n begin: '^#',\n end: '$',\n }\n ]\n };\n}\n\nmodule.exports = vala;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjU1NS5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL29ic2lkaWFuLW1pbmRtYXAtbmV4dGdlbi8uL25vZGVfbW9kdWxlcy8ucG5wbS9oaWdobGlnaHQuanNAMTEuMTEuMS9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvdmFsYS5qcz85OTRhIl0sInNvdXJjZXNDb250ZW50IjpbIi8qXG5MYW5ndWFnZTogVmFsYVxuQXV0aG9yOiBBbnRvbm8gVmFzaWxqZXYgPGFudG9uby52YXNpbGpldkBnbWFpbC5jb20+XG5EZXNjcmlwdGlvbjogVmFsYSBpcyBhIG5ldyBwcm9ncmFtbWluZyBsYW5ndWFnZSB0aGF0IGFpbXMgdG8gYnJpbmcgbW9kZXJuIHByb2dyYW1taW5nIGxhbmd1YWdlIGZlYXR1cmVzIHRvIEdOT01FIGRldmVsb3BlcnMgd2l0aG91dCBpbXBvc2luZyBhbnkgYWRkaXRpb25hbCBydW50aW1lIHJlcXVpcmVtZW50cyBhbmQgd2l0aG91dCB1c2luZyBhIGRpZmZlcmVudCBBQkkgY29tcGFyZWQgdG8gYXBwbGljYXRpb25zIGFuZCBsaWJyYXJpZXMgd3JpdHRlbiBpbiBDLlxuV2Vic2l0ZTogaHR0cHM6Ly93aWtpLmdub21lLm9yZy9Qcm9qZWN0cy9WYWxhXG5DYXRlZ29yeTogc3lzdGVtXG4qL1xuXG5mdW5jdGlvbiB2YWxhKGhsanMpIHtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnVmFsYScsXG4gICAga2V5d29yZHM6IHtcbiAgICAgIGtleXdvcmQ6XG4gICAgICAgIC8vIFZhbHVlIHR5cGVzXG4gICAgICAgICdjaGFyIHVjaGFyIHVuaWNoYXIgaW50IHVpbnQgbG9uZyB1bG9uZyBzaG9ydCB1c2hvcnQgaW50OCBpbnQxNiBpbnQzMiBpbnQ2NCB1aW50OCAnXG4gICAgICAgICsgJ3VpbnQxNiB1aW50MzIgdWludDY0IGZsb2F0IGRvdWJsZSBib29sIHN0cnVjdCBlbnVtIHN0cmluZyB2b2lkICdcbiAgICAgICAgLy8gUmVmZXJlbmNlIHR5cGVzXG4gICAgICAgICsgJ3dlYWsgdW5vd25lZCBvd25lZCAnXG4gICAgICAgIC8vIE1vZGlmaWVyc1xuICAgICAgICArICdhc3luYyBzaWduYWwgc3RhdGljIGFic3RyYWN0IGludGVyZmFjZSBvdmVycmlkZSB2aXJ0dWFsIGRlbGVnYXRlICdcbiAgICAgICAgLy8gQ29udHJvbCBTdHJ1Y3R1cmVzXG4gICAgICAgICsgJ2lmIHdoaWxlIGRvIGZvciBmb3JlYWNoIGVsc2Ugc3dpdGNoIGNhc2UgYnJlYWsgZGVmYXVsdCByZXR1cm4gdHJ5IGNhdGNoICdcbiAgICAgICAgLy8gVmlzaWJpbGl0eVxuICAgICAgICArICdwdWJsaWMgcHJpdmF0ZSBwcm90ZWN0ZWQgaW50ZXJuYWwgJ1xuICAgICAgICAvLyBPdGhlclxuICAgICAgICArICd1c2luZyBuZXcgdGhpcyBnZXQgc2V0IGNvbnN0IHN0ZG91dCBzdGRpbiBzdGRlcnIgdmFyJyxcbiAgICAgIGJ1aWx0X2luOlxuICAgICAgICAnREJ1cyBHTGliIENDb2RlIEdlZSBPYmplY3QgR3RrIFBvc2l4JyxcbiAgICAgIGxpdGVyYWw6XG4gICAgICAgICdmYWxzZSB0cnVlIG51bGwnXG4gICAgfSxcbiAgICBjb250YWluczogW1xuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdjbGFzcycsXG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICdjbGFzcyBpbnRlcmZhY2UgbmFtZXNwYWNlJyxcbiAgICAgICAgZW5kOiAvXFx7LyxcbiAgICAgICAgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAgaWxsZWdhbDogJ1teLDpcXFxcblxcXFxzXFxcXC5dJyxcbiAgICAgICAgY29udGFpbnM6IFsgaGxqcy5VTkRFUlNDT1JFX1RJVExFX01PREUgXVxuICAgICAgfSxcbiAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgIGJlZ2luOiAnXCJcIlwiJyxcbiAgICAgICAgZW5kOiAnXCJcIlwiJyxcbiAgICAgICAgcmVsZXZhbmNlOiA1XG4gICAgICB9LFxuICAgICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgIGhsanMuQ19OVU1CRVJfTU9ERSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgICAgIGJlZ2luOiAnXiMnLFxuICAgICAgICBlbmQ6ICckJyxcbiAgICAgIH1cbiAgICBdXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdmFsYTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2555\n")},2634:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ u: () => (/* binding */ fromObsidianEvent)\n/* harmony export */ });\n/* harmony import */ var _callbag__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(200);\n/* harmony import */ var src_core_entry__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(2392);\n\n\nfunction fromObsidianEvent(target, name) {\n const stream = _callbag__WEBPACK_IMPORTED_MODULE_0__/* ["default"].create */ .Ay.create((next, error, complete) => {\n const sendArgsArray = (...args) => next(args);\n const ref = target.on(name, sendArgsArray);\n src_core_entry__WEBPACK_IMPORTED_MODULE_1__.plugin.registerEvent(ref);\n src_core_entry__WEBPACK_IMPORTED_MODULE_1__.plugin.register(complete);\n });\n return Object.assign(stream, {\n void: () => _callbag__WEBPACK_IMPORTED_MODULE_0__/* ["default"].pipe */ .Ay.pipe(stream, (0,_callbag__WEBPACK_IMPORTED_MODULE_0__/* .map */ .Tj)(() => {\n })),\n unary: () => _callbag__WEBPACK_IMPORTED_MODULE_0__/* ["default"].pipe */ .Ay.pipe(stream, (0,_callbag__WEBPACK_IMPORTED_MODULE_0__/* .map */ .Tj)((args) => args[0])),\n object: (...keys) => _callbag__WEBPACK_IMPORTED_MODULE_0__/* ["default"].pipe */ .Ay.pipe(stream, (0,_callbag__WEBPACK_IMPORTED_MODULE_0__/* .map */ .Tj)((args) => zip(keys, args)))\n });\n}\nfunction zip(keys, values) {\n const out = {};\n for (let i = 0; i < keys.length; i++)\n if (i in values) out[keys[i]] = values[i];\n return out;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjYzNC5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUM2QjtBQUNOO0FBS2hCLFNBQVMsa0JBR2QsUUFBZ0IsTUFBWTtBQU01QixRQUFNLFNBQVMsd0VBQWMsQ0FBaUIsQ0FBQyxNQUFNLE9BQU8sYUFBYTtBQUN2RSxVQUFNLGdCQUFnQixJQUFJLFNBQXlCLEtBQUssSUFBSTtBQUM1RCxVQUFNLE1BQU0sT0FBTyxHQUFHLE1BQU0sYUFBYTtBQUN6QyxzREFBTSxDQUFDLGNBQWMsR0FBRztBQUN4QixzREFBTSxDQUFDLFNBQVMsUUFBUTtBQUFBLEVBQzFCLENBQUM7QUFFRCxTQUFPLE9BQU8sT0FBTyxRQUFRO0FBQUEsSUFDM0IsTUFBTSxNQUFNLG9FQUFZLENBQUMsUUFBUSx1REFBRyxDQUFDLE1BQU07QUFBQSxJQUFDLENBQUMsQ0FBQztBQUFBLElBQzlDLE9BQU8sTUFBTSxvRUFBWSxDQUFDLFFBQVEsdURBQUcsQ0FBQyxVQUFRLEtBQUssQ0FBQyxDQUFtQixDQUFDO0FBQUEsSUFDeEUsUUFBUSxJQUFxRCxTQUMzRCxvRUFBWSxDQUFDLFFBQVEsdURBQUcsQ0FBQyxVQUFRLElBQUksTUFBTSxJQUFJLENBQUMsQ0FBQztBQUFBLEVBQ3JELENBQUM7QUFDSDtBQWVBLFNBQVMsSUFHTixNQUFTLFFBQXVCO0FBQ2pDLFFBQU0sTUFBTSxDQUFDO0FBQ2IsV0FBUyxJQUFJLEdBQUcsSUFBSSxLQUFLLFFBQVE7QUFDL0IsUUFBSSxLQUFLLE9BQVEsS0FBSSxLQUFLLENBQUMsQ0FBQyxJQUFJLE9BQU8sQ0FBQztBQUMxQyxTQUFPO0FBQ1QiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9vYnNpZGlhbi1taW5kbWFwLW5leHRnZW4vLi9zcmMvdXRpbGl0aWVzL2Zyb20tb2JzaWRpYW4tZXZlbnQudHM/ZjAwNCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEV2ZW50cyB9IGZyb20gJ29ic2lkaWFuJ1xuaW1wb3J0IENhbGxiYWcsIHsgbWFwIH0gZnJvbSAnLi9jYWxsYmFnJ1xuaW1wb3J0IHsgcGx1Z2luIH0gZnJvbSAnc3JjL2NvcmUvZW50cnknXG5pbXBvcnQgeyBTaW1wbGlmeSB9IGZyb20gJ3R5cGUtZmVzdCdcblxuXG4vLyBUeXBpbmcgY291bGQgZmFpbCBpZiB0YXJnZXQgaGFzIG1vcmUgdGhhbiAyMCBldmVudHNcbmV4cG9ydCBmdW5jdGlvbiBmcm9tT2JzaWRpYW5FdmVudDxcbiAgVGFyZ2V0IGV4dGVuZHMgRXZlbnRzLFxuICBOYW1lIGV4dGVuZHMgR2V0TmFtZTxUYXJnZXQ+XG4+KHRhcmdldDogVGFyZ2V0LCBuYW1lOiBOYW1lKSB7XG4gIHR5cGUgT25NZXRob2QgPSBHZXRPbk1ldGhvZDxUYXJnZXQ+XG4gIHR5cGUgT25NZXRob2RQYXJhbXMgPSBPdmVybG9hZGVkUGFyYW1zPE9uTWV0aG9kPlxuICB0eXBlIENhbGxiYWNrID0gR2V0Q2FsbGJhY2s8T25NZXRob2RQYXJhbXMsIE5hbWU+XG4gIHR5cGUgQ2FsbGJhY2tQYXJhbXMgPSBQYXJhbWV0ZXJzPENhbGxiYWNrPlxuXG4gIGNvbnN0IHN0cmVhbSA9IENhbGxiYWcuY3JlYXRlPENhbGxiYWNrUGFyYW1zPigobmV4dCwgZXJyb3IsIGNvbXBsZXRlKSA9PiB7XG4gICAgY29uc3Qgc2VuZEFyZ3NBcnJheSA9ICguLi5hcmdzOiBDYWxsYmFja1BhcmFtcykgPT4gbmV4dChhcmdzKVxuICAgIGNvbnN0IHJlZiA9IHRhcmdldC5vbihuYW1lLCBzZW5kQXJnc0FycmF5KVxuICAgIHBsdWdpbi5yZWdpc3RlckV2ZW50KHJlZilcbiAgICBwbHVnaW4ucmVnaXN0ZXIoY29tcGxldGUpXG4gIH0pXG5cbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oc3RyZWFtLCB7XG4gICAgdm9pZDogKCkgPT4gQ2FsbGJhZy5waXBlKHN0cmVhbSwgbWFwKCgpID0+IHt9KSksXG4gICAgdW5hcnk6ICgpID0+IENhbGxiYWcucGlwZShzdHJlYW0sIG1hcChhcmdzID0+IGFyZ3NbMF0gYXMgdHlwZW9mIGFyZ3NbMF0pKSxcbiAgICBvYmplY3Q6IDxjb25zdCBLZXlzIGV4dGVuZHMgTWFwVG9TdHJpbmdzPENhbGxiYWNrUGFyYW1zPj4oLi4ua2V5czogS2V5cykgPT5cbiAgICAgIENhbGxiYWcucGlwZShzdHJlYW0sIG1hcChhcmdzID0+IHppcChrZXlzLCBhcmdzKSkpXG4gIH0pXG59XG5cbnR5cGUgWmlwPFxuICBLIGV4dGVuZHMgcmVhZG9ubHkgUHJvcGVydHlLZXlbXSxcbiAgViBleHRlbmRzIHJlYWRvbmx5IGFueVtdXG4+ID0gU2ltcGxpZnk8e1xuICBbSSBpbiBrZXlvZiBLIGFzIEkgZXh0ZW5kcyBgJHtudW1iZXJ9YFxuICAgID8gS1tJXSBleHRlbmRzIFByb3BlcnR5S2V5XG4gICAgICA/IEtbSV1cbiAgICAgIDogbmV2ZXJcbiAgICA6IG5ldmVyXG4gIF06IEkgZXh0ZW5kcyBrZXlvZiBWXG4gICAgID8gVltJXVxuICAgICA6IG5ldmVyXG59PlxuZnVuY3Rpb24gemlwPFxuICBLIGV4dGVuZHMgcmVhZG9ubHkgUHJvcGVydHlLZXlbXSxcbiAgViBleHRlbmRzIHJlYWRvbmx5IGFueVtdXG4+KCBrZXlzOiBLLCB2YWx1ZXM6IFYgKTogWmlwPEssIFY+IHtcbiAgY29uc3Qgb3V0ID0ge30gYXMgYW55XG4gIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKylcbiAgICBpZiAoaSBpbiB2YWx1ZXMpIG91dFtrZXlzW2ldXSA9IHZhbHVlc1tpXVxuICByZXR1cm4gb3V0XG59XG5cblxudHlwZSBNYXBUb1N0cmluZ3M8VCBleHRlbmRzIHVua25vd25bXT4gPVxuICB7IFtLIGluIGtleW9mIFRdOiBzdHJpbmcgfVxuXG50eXBlIEdldENhbGxiYWNrPFBhcmFtcyBleHRlbmRzIFsuLi5hcmdzOiBhbnldLCBOYW1lIGV4dGVuZHMgc3RyaW5nPiA9XG4gIFBhcmFtcyBleHRlbmRzIFtuYW1lOiBOYW1lLCBjYWxsYmFjazogaW5mZXIgQ2FsbGJhY2ssIC4uLmFyZ3M6IGFueVtdXVxuICAgID8gQ2FsbGJhY2sgOiBuZXZlclxuXG50eXBlIEdldE9uTWV0aG9kPFRhcmdldCBleHRlbmRzIEV2ZW50cz4gPVxuICBUYXJnZXRbJ29uJ11cblxudHlwZSBHZXROYW1lPFRhcmdldCBleHRlbmRzIEV2ZW50cz4gPVxuICBPdmVybG9hZGVkUGFyYW1zPEdldE9uTWV0aG9kPFRhcmdldD4+WzBdXG5cbnR5cGUgT3ZlcmxvYWRlZFBhcmFtczxUPiA9IFQgZXh0ZW5kcyB7XG4gICguLi5hcmdzOiBpbmZlciBBMSk6IGFueVxuICAoLi4uYXJnczogaW5mZXIgQTIpOiBhbnlcbiAgKC4uLmFyZ3M6IGluZmVyIEEzKTogYW55XG4gICguLi5hcmdzOiBpbmZlciBBNCk6IGFueVxuICAoLi4uYXJnczogaW5mZXIgQTUpOiBhbnlcbiAgKC4uLmFyZ3M6IGluZmVyIEE2KTogYW55XG4gICguLi5hcmdzOiBpbmZlciBBNyk6IGFueVxuICAoLi4uYXJnczogaW5mZXIgQTgpOiBhbnlcbiAgKC4uLmFyZ3M6IGluZmVyIEE5KTogYW55XG4gICguLi5hcmdzOiBpbmZlciBBMTApOiBhbnlcbiAgKC4uLmFyZ3M6IGluZmVyIEExMSk6IGFueVxuICAoLi4uYXJnczogaW5mZXIgQTEyKTogYW55XG4gICguLi5hcmdzOiBpbmZlciBBMTMpOiBhbnlcbiAgKC4uLmFyZ3M6IGluZmVyIEExNCk6IGFueVxuICAoLi4uYXJnczogaW5mZXIgQTE1KTogYW55XG4gICguLi5hcmdzOiBpbmZlciBBMTYpOiBhbnlcbiAgKC4uLmFyZ3M6IGluZmVyIEExNyk6IGFueVxuICAoLi4uYXJnczogaW5mZXIgQTE4KTogYW55XG4gICguLi5hcmdzOiBpbmZlciBBMTkpOiBhbnlcbiAgKC4uLmFyZ3M6IGluZmVyIEEyMCk6IGFueVxufSA/ICggQTEgfCBBMiB8IEEzIHwgQTQgfCBBNSB8IEE2IHwgQTcgfCBBOCB8IEE5IHwgQTEwXG4gICAgfCBBMTEgfCBBMTIgfCBBMTMgfCBBMTQgfCBBMTUgfCBBMTYgfCBBMTcgfCBBMTggfCBBMTkgfCBBMjBcbikgOiBuZXZlclxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2634\n')},2687:(module,__unused_webpack_exports,__webpack_require__)=>{"use strict";eval("\n\nconst getEngine = __webpack_require__(8092);\nconst defaults = __webpack_require__(3168);\n\nmodule.exports = function(language, str, options) {\n const opts = defaults(options);\n const engine = getEngine(language, opts);\n if (typeof engine.parse !== 'function') {\n throw new TypeError('expected \"' + language + '.parse\" to be a function');\n }\n return engine.parse(str, opts);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjY4Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixrQkFBa0IsbUJBQU8sQ0FBQyxJQUFVO0FBQ3BDLGlCQUFpQixtQkFBTyxDQUFDLElBQVk7O0FBRXJDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9vYnNpZGlhbi1taW5kbWFwLW5leHRnZW4vLi9ub2RlX21vZHVsZXMvLnBucG0vZ3JheS1tYXR0ZXJANC4wLjMvbm9kZV9tb2R1bGVzL2dyYXktbWF0dGVyL2xpYi9wYXJzZS5qcz80OWFkIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuY29uc3QgZ2V0RW5naW5lID0gcmVxdWlyZSgnLi9lbmdpbmUnKTtcbmNvbnN0IGRlZmF1bHRzID0gcmVxdWlyZSgnLi9kZWZhdWx0cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGxhbmd1YWdlLCBzdHIsIG9wdGlvbnMpIHtcbiAgY29uc3Qgb3B0cyA9IGRlZmF1bHRzKG9wdGlvbnMpO1xuICBjb25zdCBlbmdpbmUgPSBnZXRFbmdpbmUobGFuZ3VhZ2UsIG9wdHMpO1xuICBpZiAodHlwZW9mIGVuZ2luZS5wYXJzZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2V4cGVjdGVkIFwiJyArIGxhbmd1YWdlICsgJy5wYXJzZVwiIHRvIGJlIGEgZnVuY3Rpb24nKTtcbiAgfVxuICByZXR1cm4gZW5naW5lLnBhcnNlKHN0ciwgb3B0cyk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2687\n")},2690:module=>{eval('/*\nLanguage: DNS Zone\nAuthor: Tim Schumacher \nCategory: config\nWebsite: https://en.wikipedia.org/wiki/Zone_file\n*/\n\n/** @type LanguageFn */\nfunction dns(hljs) {\n const KEYWORDS = [\n "IN",\n "A",\n "AAAA",\n "AFSDB",\n "APL",\n "CAA",\n "CDNSKEY",\n "CDS",\n "CERT",\n "CNAME",\n "DHCID",\n "DLV",\n "DNAME",\n "DNSKEY",\n "DS",\n "HIP",\n "IPSECKEY",\n "KEY",\n "KX",\n "LOC",\n "MX",\n "NAPTR",\n "NS",\n "NSEC",\n "NSEC3",\n "NSEC3PARAM",\n "PTR",\n "RRSIG",\n "RP",\n "SIG",\n "SOA",\n "SRV",\n "SSHFP",\n "TA",\n "TKEY",\n "TLSA",\n "TSIG",\n "TXT"\n ];\n return {\n name: \'DNS Zone\',\n aliases: [\n \'bind\',\n \'zone\'\n ],\n keywords: KEYWORDS,\n contains: [\n hljs.COMMENT(\';\', \'$\', { relevance: 0 }),\n {\n className: \'meta\',\n begin: /^\\$(TTL|GENERATE|INCLUDE|ORIGIN)\\b/\n },\n // IPv6\n {\n className: \'number\',\n begin: \'((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]?\\\\d)(\\\\.(25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]?\\\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]?\\\\d)(\\\\.(25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]?\\\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]?\\\\d)(\\\\.(25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]?\\\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]?\\\\d)(\\\\.(25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]?\\\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]?\\\\d)(\\\\.(25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]?\\\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]?\\\\d)(\\\\.(25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]?\\\\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]?\\\\d)(\\\\.(25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]?\\\\d)){3}))|:)))\\\\b\'\n },\n // IPv4\n {\n className: \'number\',\n begin: \'((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\\\b\'\n },\n hljs.inherit(hljs.NUMBER_MODE, { begin: /\\b\\d+[dhwm]?/ })\n ]\n };\n}\n\nmodule.exports = dns;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjY5MC5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQixVQUFVLGNBQWM7QUFDN0M7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixJQUFJLEdBQUcsRUFBRSxhQUFhLElBQUksbUJBQW1CLElBQUksR0FBRyxFQUFFLGNBQWMsSUFBSSxrRkFBa0YsRUFBRSxvQkFBb0IsSUFBSSxHQUFHLEVBQUUsZ0JBQWdCLElBQUksRUFBRSxJQUFJLG9GQUFvRixFQUFFLG9CQUFvQixJQUFJLEdBQUcsRUFBRSxnQkFBZ0IsSUFBSSxFQUFFLElBQUksaUJBQWlCLElBQUksb0ZBQW9GLEVBQUUscUJBQXFCLElBQUksR0FBRyxFQUFFLGdCQUFnQixJQUFJLEVBQUUsSUFBSSxpQkFBaUIsSUFBSSxFQUFFLElBQUksa0ZBQWtGLEVBQUUscUJBQXFCLElBQUksR0FBRyxFQUFFLGdCQUFnQixJQUFJLEVBQUUsSUFBSSxpQkFBaUIsSUFBSSxFQUFFLElBQUksa0ZBQWtGLEVBQUUscUJBQXFCLElBQUksR0FBRyxFQUFFLGdCQUFnQixJQUFJLEVBQUUsSUFBSSxpQkFBaUIsSUFBSSxFQUFFLElBQUksa0ZBQWtGLEVBQUUseUJBQXlCLElBQUksRUFBRSxJQUFJLGlCQUFpQixJQUFJLEVBQUUsSUFBSSxrRkFBa0YsRUFBRTtBQUNqbkMsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQyxJQUFJLE9BQU8sSUFBSSxVQUFVLElBQUksbUJBQW1CLElBQUksT0FBTyxJQUFJO0FBQ25HLE9BQU87QUFDUCx1Q0FBdUMsdUJBQXVCO0FBQzlEO0FBQ0E7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL29ic2lkaWFuLW1pbmRtYXAtbmV4dGdlbi8uL25vZGVfbW9kdWxlcy8ucG5wbS9oaWdobGlnaHQuanNAMTEuMTEuMS9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvZG5zLmpzPzYzNzYiXSwic291cmNlc0NvbnRlbnQiOlsiLypcbkxhbmd1YWdlOiBETlMgWm9uZVxuQXV0aG9yOiBUaW0gU2NodW1hY2hlciA8dGltQGRhdGVua25vdGVuLm1lPlxuQ2F0ZWdvcnk6IGNvbmZpZ1xuV2Vic2l0ZTogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvWm9uZV9maWxlXG4qL1xuXG4vKiogQHR5cGUgTGFuZ3VhZ2VGbiAqL1xuZnVuY3Rpb24gZG5zKGhsanMpIHtcbiAgY29uc3QgS0VZV09SRFMgPSBbXG4gICAgXCJJTlwiLFxuICAgIFwiQVwiLFxuICAgIFwiQUFBQVwiLFxuICAgIFwiQUZTREJcIixcbiAgICBcIkFQTFwiLFxuICAgIFwiQ0FBXCIsXG4gICAgXCJDRE5TS0VZXCIsXG4gICAgXCJDRFNcIixcbiAgICBcIkNFUlRcIixcbiAgICBcIkNOQU1FXCIsXG4gICAgXCJESENJRFwiLFxuICAgIFwiRExWXCIsXG4gICAgXCJETkFNRVwiLFxuICAgIFwiRE5TS0VZXCIsXG4gICAgXCJEU1wiLFxuICAgIFwiSElQXCIsXG4gICAgXCJJUFNFQ0tFWVwiLFxuICAgIFwiS0VZXCIsXG4gICAgXCJLWFwiLFxuICAgIFwiTE9DXCIsXG4gICAgXCJNWFwiLFxuICAgIFwiTkFQVFJcIixcbiAgICBcIk5TXCIsXG4gICAgXCJOU0VDXCIsXG4gICAgXCJOU0VDM1wiLFxuICAgIFwiTlNFQzNQQVJBTVwiLFxuICAgIFwiUFRSXCIsXG4gICAgXCJSUlNJR1wiLFxuICAgIFwiUlBcIixcbiAgICBcIlNJR1wiLFxuICAgIFwiU09BXCIsXG4gICAgXCJTUlZcIixcbiAgICBcIlNTSEZQXCIsXG4gICAgXCJUQVwiLFxuICAgIFwiVEtFWVwiLFxuICAgIFwiVExTQVwiLFxuICAgIFwiVFNJR1wiLFxuICAgIFwiVFhUXCJcbiAgXTtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnRE5TIFpvbmUnLFxuICAgIGFsaWFzZXM6IFtcbiAgICAgICdiaW5kJyxcbiAgICAgICd6b25lJ1xuICAgIF0sXG4gICAga2V5d29yZHM6IEtFWVdPUkRTLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkNPTU1FTlQoJzsnLCAnJCcsIHsgcmVsZXZhbmNlOiAwIH0pLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICAgICAgYmVnaW46IC9eXFwkKFRUTHxHRU5FUkFURXxJTkNMVURFfE9SSUdJTilcXGIvXG4gICAgICB9LFxuICAgICAgLy8gSVB2NlxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgICAgICBiZWdpbjogJygoKFswLTlBLUZhLWZdezEsNH06KXs3fShbMC05QS1GYS1mXXsxLDR9fDopKXwoKFswLTlBLUZhLWZdezEsNH06KXs2fSg6WzAtOUEtRmEtZl17MSw0fXwoKDI1WzAtNV18MlswLTRdXFxcXGR8MVxcXFxkXFxcXGR8WzEtOV0/XFxcXGQpKFxcXFwuKDI1WzAtNV18MlswLTRdXFxcXGR8MVxcXFxkXFxcXGR8WzEtOV0/XFxcXGQpKXszfSl8OikpfCgoWzAtOUEtRmEtZl17MSw0fTopezV9KCgoOlswLTlBLUZhLWZdezEsNH0pezEsMn0pfDooKDI1WzAtNV18MlswLTRdXFxcXGR8MVxcXFxkXFxcXGR8WzEtOV0/XFxcXGQpKFxcXFwuKDI1WzAtNV18MlswLTRdXFxcXGR8MVxcXFxkXFxcXGR8WzEtOV0/XFxcXGQpKXszfSl8OikpfCgoWzAtOUEtRmEtZl17MSw0fTopezR9KCgoOlswLTlBLUZhLWZdezEsNH0pezEsM30pfCgoOlswLTlBLUZhLWZdezEsNH0pPzooKDI1WzAtNV18MlswLTRdXFxcXGR8MVxcXFxkXFxcXGR8WzEtOV0/XFxcXGQpKFxcXFwuKDI1WzAtNV18MlswLTRdXFxcXGR8MVxcXFxkXFxcXGR8WzEtOV0/XFxcXGQpKXszfSkpfDopKXwoKFswLTlBLUZhLWZdezEsNH06KXszfSgoKDpbMC05QS1GYS1mXXsxLDR9KXsxLDR9KXwoKDpbMC05QS1GYS1mXXsxLDR9KXswLDJ9OigoMjVbMC01XXwyWzAtNF1cXFxcZHwxXFxcXGRcXFxcZHxbMS05XT9cXFxcZCkoXFxcXC4oMjVbMC01XXwyWzAtNF1cXFxcZHwxXFxcXGRcXFxcZHxbMS05XT9cXFxcZCkpezN9KSl8OikpfCgoWzAtOUEtRmEtZl17MSw0fTopezJ9KCgoOlswLTlBLUZhLWZdezEsNH0pezEsNX0pfCgoOlswLTlBLUZhLWZdezEsNH0pezAsM306KCgyNVswLTVdfDJbMC00XVxcXFxkfDFcXFxcZFxcXFxkfFsxLTldP1xcXFxkKShcXFxcLigyNVswLTVdfDJbMC00XVxcXFxkfDFcXFxcZFxcXFxkfFsxLTldP1xcXFxkKSl7M30pKXw6KSl8KChbMC05QS1GYS1mXXsxLDR9Oil7MX0oKCg6WzAtOUEtRmEtZl17MSw0fSl7MSw2fSl8KCg6WzAtOUEtRmEtZl17MSw0fSl7MCw0fTooKDI1WzAtNV18MlswLTRdXFxcXGR8MVxcXFxkXFxcXGR8WzEtOV0/XFxcXGQpKFxcXFwuKDI1WzAtNV18MlswLTRdXFxcXGR8MVxcXFxkXFxcXGR8WzEtOV0/XFxcXGQpKXszfSkpfDopKXwoOigoKDpbMC05QS1GYS1mXXsxLDR9KXsxLDd9KXwoKDpbMC05QS1GYS1mXXsxLDR9KXswLDV9OigoMjVbMC01XXwyWzAtNF1cXFxcZHwxXFxcXGRcXFxcZHxbMS05XT9cXFxcZCkoXFxcXC4oMjVbMC01XXwyWzAtNF1cXFxcZHwxXFxcXGRcXFxcZHxbMS05XT9cXFxcZCkpezN9KSl8OikpKVxcXFxiJ1xuICAgICAgfSxcbiAgICAgIC8vIElQdjRcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICAgICAgYmVnaW46ICcoKDI1WzAtNV18KDJbMC00XXwxezAsMX1bMC05XSl7MCwxfVswLTldKVxcLil7MywzfSgyNVswLTVdfCgyWzAtNF18MXswLDF9WzAtOV0pezAsMX1bMC05XSlcXFxcYidcbiAgICAgIH0sXG4gICAgICBobGpzLmluaGVyaXQoaGxqcy5OVU1CRVJfTU9ERSwgeyBiZWdpbjogL1xcYlxcZCtbZGh3bV0/LyB9KVxuICAgIF1cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBkbnM7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2690\n')},2732:module=>{eval("/*\nLanguage: AutoHotkey\nAuthor: Seongwon Lee \nDescription: AutoHotkey language definition\nCategory: scripting\n*/\n\n/** @type LanguageFn */\nfunction autohotkey(hljs) {\n const BACKTICK_ESCAPE = { begin: '`[\\\\s\\\\S]' };\n\n return {\n name: 'AutoHotkey',\n case_insensitive: true,\n aliases: [ 'ahk' ],\n keywords: {\n keyword: 'Break Continue Critical Exit ExitApp Gosub Goto New OnExit Pause return SetBatchLines SetTimer Suspend Thread Throw Until ahk_id ahk_class ahk_pid ahk_exe ahk_group',\n literal: 'true false NOT AND OR',\n built_in: 'ComSpec Clipboard ClipboardAll ErrorLevel'\n },\n contains: [\n BACKTICK_ESCAPE,\n hljs.inherit(hljs.QUOTE_STRING_MODE, { contains: [ BACKTICK_ESCAPE ] }),\n hljs.COMMENT(';', '$', { relevance: 0 }),\n hljs.C_BLOCK_COMMENT_MODE,\n {\n className: 'number',\n begin: hljs.NUMBER_RE,\n relevance: 0\n },\n {\n // subst would be the most accurate however fails the point of\n // highlighting. variable is comparably the most accurate that actually\n // has some effect\n className: 'variable',\n begin: '%[a-zA-Z0-9#_$@]+%'\n },\n {\n className: 'built_in',\n begin: '^\\\\s*\\\\w+\\\\s*(,|%)'\n // I don't really know if this is totally relevant\n },\n {\n // symbol would be most accurate however is highlighted just like\n // built_in and that makes up a lot of AutoHotkey code meaning that it\n // would fail to highlight anything\n className: 'title',\n variants: [\n { begin: '^[^\\\\n\";]+::(?!=)' },\n {\n begin: '^[^\\\\n\";]+:(?!=)',\n // zero relevance as it catches a lot of things\n // followed by a single ':' in many languages\n relevance: 0\n }\n ]\n },\n {\n className: 'meta',\n begin: '^\\\\s*#\\\\w+',\n end: '$',\n relevance: 0\n },\n {\n className: 'built_in',\n begin: 'A_[a-zA-Z0-9]+'\n },\n {\n // consecutive commas, not for highlighting but just for relevance\n begin: ',\\\\s*,' }\n ]\n };\n}\n\nmodule.exports = autohotkey;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjczMi5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDRCQUE0Qjs7QUFFNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsNkNBQTZDLCtCQUErQjtBQUM1RSxxQkFBcUIsVUFBVSxjQUFjO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksZ0JBQWdCLFlBQVk7QUFDeEM7QUFDQSw0QkFBNEI7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9vYnNpZGlhbi1taW5kbWFwLW5leHRnZW4vLi9ub2RlX21vZHVsZXMvLnBucG0vaGlnaGxpZ2h0LmpzQDExLjExLjEvbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2F1dG9ob3RrZXkuanM/NWUxOCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuTGFuZ3VhZ2U6IEF1dG9Ib3RrZXlcbkF1dGhvcjogU2Vvbmd3b24gTGVlIDxkbGltcGlkQGdtYWlsLmNvbT5cbkRlc2NyaXB0aW9uOiBBdXRvSG90a2V5IGxhbmd1YWdlIGRlZmluaXRpb25cbkNhdGVnb3J5OiBzY3JpcHRpbmdcbiovXG5cbi8qKiBAdHlwZSBMYW5ndWFnZUZuICovXG5mdW5jdGlvbiBhdXRvaG90a2V5KGhsanMpIHtcbiAgY29uc3QgQkFDS1RJQ0tfRVNDQVBFID0geyBiZWdpbjogJ2BbXFxcXHNcXFxcU10nIH07XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnQXV0b0hvdGtleScsXG4gICAgY2FzZV9pbnNlbnNpdGl2ZTogdHJ1ZSxcbiAgICBhbGlhc2VzOiBbICdhaGsnIF0sXG4gICAga2V5d29yZHM6IHtcbiAgICAgIGtleXdvcmQ6ICdCcmVhayBDb250aW51ZSBDcml0aWNhbCBFeGl0IEV4aXRBcHAgR29zdWIgR290byBOZXcgT25FeGl0IFBhdXNlIHJldHVybiBTZXRCYXRjaExpbmVzIFNldFRpbWVyIFN1c3BlbmQgVGhyZWFkIFRocm93IFVudGlsIGFoa19pZCBhaGtfY2xhc3MgYWhrX3BpZCBhaGtfZXhlIGFoa19ncm91cCcsXG4gICAgICBsaXRlcmFsOiAndHJ1ZSBmYWxzZSBOT1QgQU5EIE9SJyxcbiAgICAgIGJ1aWx0X2luOiAnQ29tU3BlYyBDbGlwYm9hcmQgQ2xpcGJvYXJkQWxsIEVycm9yTGV2ZWwnXG4gICAgfSxcbiAgICBjb250YWluczogW1xuICAgICAgQkFDS1RJQ0tfRVNDQVBFLFxuICAgICAgaGxqcy5pbmhlcml0KGhsanMuUVVPVEVfU1RSSU5HX01PREUsIHsgY29udGFpbnM6IFsgQkFDS1RJQ0tfRVNDQVBFIF0gfSksXG4gICAgICBobGpzLkNPTU1FTlQoJzsnLCAnJCcsIHsgcmVsZXZhbmNlOiAwIH0pLFxuICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICAgICAgYmVnaW46IGhsanMuTlVNQkVSX1JFLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIC8vIHN1YnN0IHdvdWxkIGJlIHRoZSBtb3N0IGFjY3VyYXRlIGhvd2V2ZXIgZmFpbHMgdGhlIHBvaW50IG9mXG4gICAgICAgIC8vIGhpZ2hsaWdodGluZy4gdmFyaWFibGUgaXMgY29tcGFyYWJseSB0aGUgbW9zdCBhY2N1cmF0ZSB0aGF0IGFjdHVhbGx5XG4gICAgICAgIC8vIGhhcyBzb21lIGVmZmVjdFxuICAgICAgICBjbGFzc05hbWU6ICd2YXJpYWJsZScsXG4gICAgICAgIGJlZ2luOiAnJVthLXpBLVowLTkjXyRAXSslJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnYnVpbHRfaW4nLFxuICAgICAgICBiZWdpbjogJ15cXFxccypcXFxcdytcXFxccyooLHwlKSdcbiAgICAgICAgLy8gSSBkb24ndCByZWFsbHkga25vdyBpZiB0aGlzIGlzIHRvdGFsbHkgcmVsZXZhbnRcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIC8vIHN5bWJvbCB3b3VsZCBiZSBtb3N0IGFjY3VyYXRlIGhvd2V2ZXIgaXMgaGlnaGxpZ2h0ZWQganVzdCBsaWtlXG4gICAgICAgIC8vIGJ1aWx0X2luIGFuZCB0aGF0IG1ha2VzIHVwIGEgbG90IG9mIEF1dG9Ib3RrZXkgY29kZSBtZWFuaW5nIHRoYXQgaXRcbiAgICAgICAgLy8gd291bGQgZmFpbCB0byBoaWdobGlnaHQgYW55dGhpbmdcbiAgICAgICAgY2xhc3NOYW1lOiAndGl0bGUnLFxuICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgIHsgYmVnaW46ICdeW15cXFxcblwiO10rOjooPyE9KScgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogJ15bXlxcXFxuXCI7XSs6KD8hPSknLFxuICAgICAgICAgICAgLy8gemVybyByZWxldmFuY2UgYXMgaXQgY2F0Y2hlcyBhIGxvdCBvZiB0aGluZ3NcbiAgICAgICAgICAgIC8vIGZvbGxvd2VkIGJ5IGEgc2luZ2xlICc6JyBpbiBtYW55IGxhbmd1YWdlc1xuICAgICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICAgICAgYmVnaW46ICdeXFxcXHMqI1xcXFx3KycsXG4gICAgICAgIGVuZDogJyQnLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2J1aWx0X2luJyxcbiAgICAgICAgYmVnaW46ICdBX1thLXpBLVowLTldKydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIC8vIGNvbnNlY3V0aXZlIGNvbW1hcywgbm90IGZvciBoaWdobGlnaHRpbmcgYnV0IGp1c3QgZm9yIHJlbGV2YW5jZVxuICAgICAgICBiZWdpbjogJyxcXFxccyosJyB9XG4gICAgXVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGF1dG9ob3RrZXk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2732\n")},2770:(__unused_webpack_module,exports,__webpack_require__)=>{"use strict";eval("\n\nvar identity = __webpack_require__(9141);\n\nconst BREAK = Symbol('break visit');\nconst SKIP = Symbol('skip children');\nconst REMOVE = Symbol('remove node');\n/**\n * Apply a visitor to an AST node or document.\n *\n * Walks through the tree (depth-first) starting from `node`, calling a\n * `visitor` function with three arguments:\n * - `key`: For sequence values and map `Pair`, the node's index in the\n * collection. Within a `Pair`, `'key'` or `'value'`, correspondingly.\n * `null` for the root node.\n * - `node`: The current node.\n * - `path`: The ancestry of the current node.\n *\n * The return value of the visitor may be used to control the traversal:\n * - `undefined` (default): Do nothing and continue\n * - `visit.SKIP`: Do not visit the children of this node, continue with next\n * sibling\n * - `visit.BREAK`: Terminate traversal completely\n * - `visit.REMOVE`: Remove the current node, then continue with the next one\n * - `Node`: Replace the current node, then continue by visiting it\n * - `number`: While iterating the items of a sequence or map, set the index\n * of the next step. This is useful especially if the index of the current\n * node has changed.\n *\n * If `visitor` is a single function, it will be called with all values\n * encountered in the tree, including e.g. `null` values. Alternatively,\n * separate visitor functions may be defined for each `Map`, `Pair`, `Seq`,\n * `Alias` and `Scalar` node. To define the same visitor function for more than\n * one node type, use the `Collection` (map and seq), `Value` (map, seq & scalar)\n * and `Node` (alias, map, seq & scalar) targets. Of all these, only the most\n * specific defined one will be used for each node.\n */\nfunction visit(node, visitor) {\n const visitor_ = initVisitor(visitor);\n if (identity.isDocument(node)) {\n const cd = visit_(null, node.contents, visitor_, Object.freeze([node]));\n if (cd === REMOVE)\n node.contents = null;\n }\n else\n visit_(null, node, visitor_, Object.freeze([]));\n}\n// Without the `as symbol` casts, TS declares these in the `visit`\n// namespace using `var`, but then complains about that because\n// `unique symbol` must be `const`.\n/** Terminate visit traversal completely */\nvisit.BREAK = BREAK;\n/** Do not visit the children of the current node */\nvisit.SKIP = SKIP;\n/** Remove the current node */\nvisit.REMOVE = REMOVE;\nfunction visit_(key, node, visitor, path) {\n const ctrl = callVisitor(key, node, visitor, path);\n if (identity.isNode(ctrl) || identity.isPair(ctrl)) {\n replaceNode(key, path, ctrl);\n return visit_(key, ctrl, visitor, path);\n }\n if (typeof ctrl !== 'symbol') {\n if (identity.isCollection(node)) {\n path = Object.freeze(path.concat(node));\n for (let i = 0; i < node.items.length; ++i) {\n const ci = visit_(i, node.items[i], visitor, path);\n if (typeof ci === 'number')\n i = ci - 1;\n else if (ci === BREAK)\n return BREAK;\n else if (ci === REMOVE) {\n node.items.splice(i, 1);\n i -= 1;\n }\n }\n }\n else if (identity.isPair(node)) {\n path = Object.freeze(path.concat(node));\n const ck = visit_('key', node.key, visitor, path);\n if (ck === BREAK)\n return BREAK;\n else if (ck === REMOVE)\n node.key = null;\n const cv = visit_('value', node.value, visitor, path);\n if (cv === BREAK)\n return BREAK;\n else if (cv === REMOVE)\n node.value = null;\n }\n }\n return ctrl;\n}\n/**\n * Apply an async visitor to an AST node or document.\n *\n * Walks through the tree (depth-first) starting from `node`, calling a\n * `visitor` function with three arguments:\n * - `key`: For sequence values and map `Pair`, the node's index in the\n * collection. Within a `Pair`, `'key'` or `'value'`, correspondingly.\n * `null` for the root node.\n * - `node`: The current node.\n * - `path`: The ancestry of the current node.\n *\n * The return value of the visitor may be used to control the traversal:\n * - `Promise`: Must resolve to one of the following values\n * - `undefined` (default): Do nothing and continue\n * - `visit.SKIP`: Do not visit the children of this node, continue with next\n * sibling\n * - `visit.BREAK`: Terminate traversal completely\n * - `visit.REMOVE`: Remove the current node, then continue with the next one\n * - `Node`: Replace the current node, then continue by visiting it\n * - `number`: While iterating the items of a sequence or map, set the index\n * of the next step. This is useful especially if the index of the current\n * node has changed.\n *\n * If `visitor` is a single function, it will be called with all values\n * encountered in the tree, including e.g. `null` values. Alternatively,\n * separate visitor functions may be defined for each `Map`, `Pair`, `Seq`,\n * `Alias` and `Scalar` node. To define the same visitor function for more than\n * one node type, use the `Collection` (map and seq), `Value` (map, seq & scalar)\n * and `Node` (alias, map, seq & scalar) targets. Of all these, only the most\n * specific defined one will be used for each node.\n */\nasync function visitAsync(node, visitor) {\n const visitor_ = initVisitor(visitor);\n if (identity.isDocument(node)) {\n const cd = await visitAsync_(null, node.contents, visitor_, Object.freeze([node]));\n if (cd === REMOVE)\n node.contents = null;\n }\n else\n await visitAsync_(null, node, visitor_, Object.freeze([]));\n}\n// Without the `as symbol` casts, TS declares these in the `visit`\n// namespace using `var`, but then complains about that because\n// `unique symbol` must be `const`.\n/** Terminate visit traversal completely */\nvisitAsync.BREAK = BREAK;\n/** Do not visit the children of the current node */\nvisitAsync.SKIP = SKIP;\n/** Remove the current node */\nvisitAsync.REMOVE = REMOVE;\nasync function visitAsync_(key, node, visitor, path) {\n const ctrl = await callVisitor(key, node, visitor, path);\n if (identity.isNode(ctrl) || identity.isPair(ctrl)) {\n replaceNode(key, path, ctrl);\n return visitAsync_(key, ctrl, visitor, path);\n }\n if (typeof ctrl !== 'symbol') {\n if (identity.isCollection(node)) {\n path = Object.freeze(path.concat(node));\n for (let i = 0; i < node.items.length; ++i) {\n const ci = await visitAsync_(i, node.items[i], visitor, path);\n if (typeof ci === 'number')\n i = ci - 1;\n else if (ci === BREAK)\n return BREAK;\n else if (ci === REMOVE) {\n node.items.splice(i, 1);\n i -= 1;\n }\n }\n }\n else if (identity.isPair(node)) {\n path = Object.freeze(path.concat(node));\n const ck = await visitAsync_('key', node.key, visitor, path);\n if (ck === BREAK)\n return BREAK;\n else if (ck === REMOVE)\n node.key = null;\n const cv = await visitAsync_('value', node.value, visitor, path);\n if (cv === BREAK)\n return BREAK;\n else if (cv === REMOVE)\n node.value = null;\n }\n }\n return ctrl;\n}\nfunction initVisitor(visitor) {\n if (typeof visitor === 'object' &&\n (visitor.Collection || visitor.Node || visitor.Value)) {\n return Object.assign({\n Alias: visitor.Node,\n Map: visitor.Node,\n Scalar: visitor.Node,\n Seq: visitor.Node\n }, visitor.Value && {\n Map: visitor.Value,\n Scalar: visitor.Value,\n Seq: visitor.Value\n }, visitor.Collection && {\n Map: visitor.Collection,\n Seq: visitor.Collection\n }, visitor);\n }\n return visitor;\n}\nfunction callVisitor(key, node, visitor, path) {\n if (typeof visitor === 'function')\n return visitor(key, node, path);\n if (identity.isMap(node))\n return visitor.Map?.(key, node, path);\n if (identity.isSeq(node))\n return visitor.Seq?.(key, node, path);\n if (identity.isPair(node))\n return visitor.Pair?.(key, node, path);\n if (identity.isScalar(node))\n return visitor.Scalar?.(key, node, path);\n if (identity.isAlias(node))\n return visitor.Alias?.(key, node, path);\n return undefined;\n}\nfunction replaceNode(key, path, node) {\n const parent = path[path.length - 1];\n if (identity.isCollection(parent)) {\n parent.items[key] = node;\n }\n else if (identity.isPair(parent)) {\n if (key === 'key')\n parent.key = node;\n else\n parent.value = node;\n }\n else if (identity.isDocument(parent)) {\n parent.contents = node;\n }\n else {\n const pt = identity.isAlias(parent) ? 'alias' : 'scalar';\n throw new Error(`Cannot replace node with ${pt} parent`);\n }\n}\n\nexports.visit = visit;\nexports.visitAsync = visitAsync;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjc3MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixlQUFlLG1CQUFPLENBQUMsSUFBcUI7O0FBRTVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLHVCQUF1QjtBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLHVCQUF1QjtBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0RBQW9ELElBQUk7QUFDeEQ7QUFDQTs7QUFFQSxhQUFhO0FBQ2Isa0JBQWtCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vb2JzaWRpYW4tbWluZG1hcC1uZXh0Z2VuLy4vbm9kZV9tb2R1bGVzLy5wbnBtL3lhbWxAMi44LjAvbm9kZV9tb2R1bGVzL3lhbWwvZGlzdC92aXNpdC5qcz8wZjJiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGlkZW50aXR5ID0gcmVxdWlyZSgnLi9ub2Rlcy9pZGVudGl0eS5qcycpO1xuXG5jb25zdCBCUkVBSyA9IFN5bWJvbCgnYnJlYWsgdmlzaXQnKTtcbmNvbnN0IFNLSVAgPSBTeW1ib2woJ3NraXAgY2hpbGRyZW4nKTtcbmNvbnN0IFJFTU9WRSA9IFN5bWJvbCgncmVtb3ZlIG5vZGUnKTtcbi8qKlxuICogQXBwbHkgYSB2aXNpdG9yIHRvIGFuIEFTVCBub2RlIG9yIGRvY3VtZW50LlxuICpcbiAqIFdhbGtzIHRocm91Z2ggdGhlIHRyZWUgKGRlcHRoLWZpcnN0KSBzdGFydGluZyBmcm9tIGBub2RlYCwgY2FsbGluZyBhXG4gKiBgdmlzaXRvcmAgZnVuY3Rpb24gd2l0aCB0aHJlZSBhcmd1bWVudHM6XG4gKiAgIC0gYGtleWA6IEZvciBzZXF1ZW5jZSB2YWx1ZXMgYW5kIG1hcCBgUGFpcmAsIHRoZSBub2RlJ3MgaW5kZXggaW4gdGhlXG4gKiAgICAgY29sbGVjdGlvbi4gV2l0aGluIGEgYFBhaXJgLCBgJ2tleSdgIG9yIGAndmFsdWUnYCwgY29ycmVzcG9uZGluZ2x5LlxuICogICAgIGBudWxsYCBmb3IgdGhlIHJvb3Qgbm9kZS5cbiAqICAgLSBgbm9kZWA6IFRoZSBjdXJyZW50IG5vZGUuXG4gKiAgIC0gYHBhdGhgOiBUaGUgYW5jZXN0cnkgb2YgdGhlIGN1cnJlbnQgbm9kZS5cbiAqXG4gKiBUaGUgcmV0dXJuIHZhbHVlIG9mIHRoZSB2aXNpdG9yIG1heSBiZSB1c2VkIHRvIGNvbnRyb2wgdGhlIHRyYXZlcnNhbDpcbiAqICAgLSBgdW5kZWZpbmVkYCAoZGVmYXVsdCk6IERvIG5vdGhpbmcgYW5kIGNvbnRpbnVlXG4gKiAgIC0gYHZpc2l0LlNLSVBgOiBEbyBub3QgdmlzaXQgdGhlIGNoaWxkcmVuIG9mIHRoaXMgbm9kZSwgY29udGludWUgd2l0aCBuZXh0XG4gKiAgICAgc2libGluZ1xuICogICAtIGB2aXNpdC5CUkVBS2A6IFRlcm1pbmF0ZSB0cmF2ZXJzYWwgY29tcGxldGVseVxuICogICAtIGB2aXNpdC5SRU1PVkVgOiBSZW1vdmUgdGhlIGN1cnJlbnQgbm9kZSwgdGhlbiBjb250aW51ZSB3aXRoIHRoZSBuZXh0IG9uZVxuICogICAtIGBOb2RlYDogUmVwbGFjZSB0aGUgY3VycmVudCBub2RlLCB0aGVuIGNvbnRpbnVlIGJ5IHZpc2l0aW5nIGl0XG4gKiAgIC0gYG51bWJlcmA6IFdoaWxlIGl0ZXJhdGluZyB0aGUgaXRlbXMgb2YgYSBzZXF1ZW5jZSBvciBtYXAsIHNldCB0aGUgaW5kZXhcbiAqICAgICBvZiB0aGUgbmV4dCBzdGVwLiBUaGlzIGlzIHVzZWZ1bCBlc3BlY2lhbGx5IGlmIHRoZSBpbmRleCBvZiB0aGUgY3VycmVudFxuICogICAgIG5vZGUgaGFzIGNoYW5nZWQuXG4gKlxuICogSWYgYHZpc2l0b3JgIGlzIGEgc2luZ2xlIGZ1bmN0aW9uLCBpdCB3aWxsIGJlIGNhbGxlZCB3aXRoIGFsbCB2YWx1ZXNcbiAqIGVuY291bnRlcmVkIGluIHRoZSB0cmVlLCBpbmNsdWRpbmcgZS5nLiBgbnVsbGAgdmFsdWVzLiBBbHRlcm5hdGl2ZWx5LFxuICogc2VwYXJhdGUgdmlzaXRvciBmdW5jdGlvbnMgbWF5IGJlIGRlZmluZWQgZm9yIGVhY2ggYE1hcGAsIGBQYWlyYCwgYFNlcWAsXG4gKiBgQWxpYXNgIGFuZCBgU2NhbGFyYCBub2RlLiBUbyBkZWZpbmUgdGhlIHNhbWUgdmlzaXRvciBmdW5jdGlvbiBmb3IgbW9yZSB0aGFuXG4gKiBvbmUgbm9kZSB0eXBlLCB1c2UgdGhlIGBDb2xsZWN0aW9uYCAobWFwIGFuZCBzZXEpLCBgVmFsdWVgIChtYXAsIHNlcSAmIHNjYWxhcilcbiAqIGFuZCBgTm9kZWAgKGFsaWFzLCBtYXAsIHNlcSAmIHNjYWxhcikgdGFyZ2V0cy4gT2YgYWxsIHRoZXNlLCBvbmx5IHRoZSBtb3N0XG4gKiBzcGVjaWZpYyBkZWZpbmVkIG9uZSB3aWxsIGJlIHVzZWQgZm9yIGVhY2ggbm9kZS5cbiAqL1xuZnVuY3Rpb24gdmlzaXQobm9kZSwgdmlzaXRvcikge1xuICAgIGNvbnN0IHZpc2l0b3JfID0gaW5pdFZpc2l0b3IodmlzaXRvcik7XG4gICAgaWYgKGlkZW50aXR5LmlzRG9jdW1lbnQobm9kZSkpIHtcbiAgICAgICAgY29uc3QgY2QgPSB2aXNpdF8obnVsbCwgbm9kZS5jb250ZW50cywgdmlzaXRvcl8sIE9iamVjdC5mcmVlemUoW25vZGVdKSk7XG4gICAgICAgIGlmIChjZCA9PT0gUkVNT1ZFKVxuICAgICAgICAgICAgbm9kZS5jb250ZW50cyA9IG51bGw7XG4gICAgfVxuICAgIGVsc2VcbiAgICAgICAgdmlzaXRfKG51bGwsIG5vZGUsIHZpc2l0b3JfLCBPYmplY3QuZnJlZXplKFtdKSk7XG59XG4vLyBXaXRob3V0IHRoZSBgYXMgc3ltYm9sYCBjYXN0cywgVFMgZGVjbGFyZXMgdGhlc2UgaW4gdGhlIGB2aXNpdGBcbi8vIG5hbWVzcGFjZSB1c2luZyBgdmFyYCwgYnV0IHRoZW4gY29tcGxhaW5zIGFib3V0IHRoYXQgYmVjYXVzZVxuLy8gYHVuaXF1ZSBzeW1ib2xgIG11c3QgYmUgYGNvbnN0YC5cbi8qKiBUZXJtaW5hdGUgdmlzaXQgdHJhdmVyc2FsIGNvbXBsZXRlbHkgKi9cbnZpc2l0LkJSRUFLID0gQlJFQUs7XG4vKiogRG8gbm90IHZpc2l0IHRoZSBjaGlsZHJlbiBvZiB0aGUgY3VycmVudCBub2RlICovXG52aXNpdC5TS0lQID0gU0tJUDtcbi8qKiBSZW1vdmUgdGhlIGN1cnJlbnQgbm9kZSAqL1xudmlzaXQuUkVNT1ZFID0gUkVNT1ZFO1xuZnVuY3Rpb24gdmlzaXRfKGtleSwgbm9kZSwgdmlzaXRvciwgcGF0aCkge1xuICAgIGNvbnN0IGN0cmwgPSBjYWxsVmlzaXRvcihrZXksIG5vZGUsIHZpc2l0b3IsIHBhdGgpO1xuICAgIGlmIChpZGVudGl0eS5pc05vZGUoY3RybCkgfHwgaWRlbnRpdHkuaXNQYWlyKGN0cmwpKSB7XG4gICAgICAgIHJlcGxhY2VOb2RlKGtleSwgcGF0aCwgY3RybCk7XG4gICAgICAgIHJldHVybiB2aXNpdF8oa2V5LCBjdHJsLCB2aXNpdG9yLCBwYXRoKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBjdHJsICE9PSAnc3ltYm9sJykge1xuICAgICAgICBpZiAoaWRlbnRpdHkuaXNDb2xsZWN0aW9uKG5vZGUpKSB7XG4gICAgICAgICAgICBwYXRoID0gT2JqZWN0LmZyZWV6ZShwYXRoLmNvbmNhdChub2RlKSk7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGUuaXRlbXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjaSA9IHZpc2l0XyhpLCBub2RlLml0ZW1zW2ldLCB2aXNpdG9yLCBwYXRoKTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNpID09PSAnbnVtYmVyJylcbiAgICAgICAgICAgICAgICAgICAgaSA9IGNpIC0gMTtcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChjaSA9PT0gQlJFQUspXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBCUkVBSztcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChjaSA9PT0gUkVNT1ZFKSB7XG4gICAgICAgICAgICAgICAgICAgIG5vZGUuaXRlbXMuc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgICAgICAgICBpIC09IDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlkZW50aXR5LmlzUGFpcihub2RlKSkge1xuICAgICAgICAgICAgcGF0aCA9IE9iamVjdC5mcmVlemUocGF0aC5jb25jYXQobm9kZSkpO1xuICAgICAgICAgICAgY29uc3QgY2sgPSB2aXNpdF8oJ2tleScsIG5vZGUua2V5LCB2aXNpdG9yLCBwYXRoKTtcbiAgICAgICAgICAgIGlmIChjayA9PT0gQlJFQUspXG4gICAgICAgICAgICAgICAgcmV0dXJuIEJSRUFLO1xuICAgICAgICAgICAgZWxzZSBpZiAoY2sgPT09IFJFTU9WRSlcbiAgICAgICAgICAgICAgICBub2RlLmtleSA9IG51bGw7XG4gICAgICAgICAgICBjb25zdCBjdiA9IHZpc2l0XygndmFsdWUnLCBub2RlLnZhbHVlLCB2aXNpdG9yLCBwYXRoKTtcbiAgICAgICAgICAgIGlmIChjdiA9PT0gQlJFQUspXG4gICAgICAgICAgICAgICAgcmV0dXJuIEJSRUFLO1xuICAgICAgICAgICAgZWxzZSBpZiAoY3YgPT09IFJFTU9WRSlcbiAgICAgICAgICAgICAgICBub2RlLnZhbHVlID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY3RybDtcbn1cbi8qKlxuICogQXBwbHkgYW4gYXN5bmMgdmlzaXRvciB0byBhbiBBU1Qgbm9kZSBvciBkb2N1bWVudC5cbiAqXG4gKiBXYWxrcyB0aHJvdWdoIHRoZSB0cmVlIChkZXB0aC1maXJzdCkgc3RhcnRpbmcgZnJvbSBgbm9kZWAsIGNhbGxpbmcgYVxuICogYHZpc2l0b3JgIGZ1bmN0aW9uIHdpdGggdGhyZWUgYXJndW1lbnRzOlxuICogICAtIGBrZXlgOiBGb3Igc2VxdWVuY2UgdmFsdWVzIGFuZCBtYXAgYFBhaXJgLCB0aGUgbm9kZSdzIGluZGV4IGluIHRoZVxuICogICAgIGNvbGxlY3Rpb24uIFdpdGhpbiBhIGBQYWlyYCwgYCdrZXknYCBvciBgJ3ZhbHVlJ2AsIGNvcnJlc3BvbmRpbmdseS5cbiAqICAgICBgbnVsbGAgZm9yIHRoZSByb290IG5vZGUuXG4gKiAgIC0gYG5vZGVgOiBUaGUgY3VycmVudCBub2RlLlxuICogICAtIGBwYXRoYDogVGhlIGFuY2VzdHJ5IG9mIHRoZSBjdXJyZW50IG5vZGUuXG4gKlxuICogVGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgdmlzaXRvciBtYXkgYmUgdXNlZCB0byBjb250cm9sIHRoZSB0cmF2ZXJzYWw6XG4gKiAgIC0gYFByb21pc2VgOiBNdXN0IHJlc29sdmUgdG8gb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzXG4gKiAgIC0gYHVuZGVmaW5lZGAgKGRlZmF1bHQpOiBEbyBub3RoaW5nIGFuZCBjb250aW51ZVxuICogICAtIGB2aXNpdC5TS0lQYDogRG8gbm90IHZpc2l0IHRoZSBjaGlsZHJlbiBvZiB0aGlzIG5vZGUsIGNvbnRpbnVlIHdpdGggbmV4dFxuICogICAgIHNpYmxpbmdcbiAqICAgLSBgdmlzaXQuQlJFQUtgOiBUZXJtaW5hdGUgdHJhdmVyc2FsIGNvbXBsZXRlbHlcbiAqICAgLSBgdmlzaXQuUkVNT1ZFYDogUmVtb3ZlIHRoZSBjdXJyZW50IG5vZGUsIHRoZW4gY29udGludWUgd2l0aCB0aGUgbmV4dCBvbmVcbiAqICAgLSBgTm9kZWA6IFJlcGxhY2UgdGhlIGN1cnJlbnQgbm9kZSwgdGhlbiBjb250aW51ZSBieSB2aXNpdGluZyBpdFxuICogICAtIGBudW1iZXJgOiBXaGlsZSBpdGVyYXRpbmcgdGhlIGl0ZW1zIG9mIGEgc2VxdWVuY2Ugb3IgbWFwLCBzZXQgdGhlIGluZGV4XG4gKiAgICAgb2YgdGhlIG5leHQgc3RlcC4gVGhpcyBpcyB1c2VmdWwgZXNwZWNpYWxseSBpZiB0aGUgaW5kZXggb2YgdGhlIGN1cnJlbnRcbiAqICAgICBub2RlIGhhcyBjaGFuZ2VkLlxuICpcbiAqIElmIGB2aXNpdG9yYCBpcyBhIHNpbmdsZSBmdW5jdGlvbiwgaXQgd2lsbCBiZSBjYWxsZWQgd2l0aCBhbGwgdmFsdWVzXG4gKiBlbmNvdW50ZXJlZCBpbiB0aGUgdHJlZSwgaW5jbHVkaW5nIGUuZy4gYG51bGxgIHZhbHVlcy4gQWx0ZXJuYXRpdmVseSxcbiAqIHNlcGFyYXRlIHZpc2l0b3IgZnVuY3Rpb25zIG1heSBiZSBkZWZpbmVkIGZvciBlYWNoIGBNYXBgLCBgUGFpcmAsIGBTZXFgLFxuICogYEFsaWFzYCBhbmQgYFNjYWxhcmAgbm9kZS4gVG8gZGVmaW5lIHRoZSBzYW1lIHZpc2l0b3IgZnVuY3Rpb24gZm9yIG1vcmUgdGhhblxuICogb25lIG5vZGUgdHlwZSwgdXNlIHRoZSBgQ29sbGVjdGlvbmAgKG1hcCBhbmQgc2VxKSwgYFZhbHVlYCAobWFwLCBzZXEgJiBzY2FsYXIpXG4gKiBhbmQgYE5vZGVgIChhbGlhcywgbWFwLCBzZXEgJiBzY2FsYXIpIHRhcmdldHMuIE9mIGFsbCB0aGVzZSwgb25seSB0aGUgbW9zdFxuICogc3BlY2lmaWMgZGVmaW5lZCBvbmUgd2lsbCBiZSB1c2VkIGZvciBlYWNoIG5vZGUuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHZpc2l0QXN5bmMobm9kZSwgdmlzaXRvcikge1xuICAgIGNvbnN0IHZpc2l0b3JfID0gaW5pdFZpc2l0b3IodmlzaXRvcik7XG4gICAgaWYgKGlkZW50aXR5LmlzRG9jdW1lbnQobm9kZSkpIHtcbiAgICAgICAgY29uc3QgY2QgPSBhd2FpdCB2aXNpdEFzeW5jXyhudWxsLCBub2RlLmNvbnRlbnRzLCB2aXNpdG9yXywgT2JqZWN0LmZyZWV6ZShbbm9kZV0pKTtcbiAgICAgICAgaWYgKGNkID09PSBSRU1PVkUpXG4gICAgICAgICAgICBub2RlLmNvbnRlbnRzID0gbnVsbDtcbiAgICB9XG4gICAgZWxzZVxuICAgICAgICBhd2FpdCB2aXNpdEFzeW5jXyhudWxsLCBub2RlLCB2aXNpdG9yXywgT2JqZWN0LmZyZWV6ZShbXSkpO1xufVxuLy8gV2l0aG91dCB0aGUgYGFzIHN5bWJvbGAgY2FzdHMsIFRTIGRlY2xhcmVzIHRoZXNlIGluIHRoZSBgdmlzaXRgXG4vLyBuYW1lc3BhY2UgdXNpbmcgYHZhcmAsIGJ1dCB0aGVuIGNvbXBsYWlucyBhYm91dCB0aGF0IGJlY2F1c2Vcbi8vIGB1bmlxdWUgc3ltYm9sYCBtdXN0IGJlIGBjb25zdGAuXG4vKiogVGVybWluYXRlIHZpc2l0IHRyYXZlcnNhbCBjb21wbGV0ZWx5ICovXG52aXNpdEFzeW5jLkJSRUFLID0gQlJFQUs7XG4vKiogRG8gbm90IHZpc2l0IHRoZSBjaGlsZHJlbiBvZiB0aGUgY3VycmVudCBub2RlICovXG52aXNpdEFzeW5jLlNLSVAgPSBTS0lQO1xuLyoqIFJlbW92ZSB0aGUgY3VycmVudCBub2RlICovXG52aXNpdEFzeW5jLlJFTU9WRSA9IFJFTU9WRTtcbmFzeW5jIGZ1bmN0aW9uIHZpc2l0QXN5bmNfKGtleSwgbm9kZSwgdmlzaXRvciwgcGF0aCkge1xuICAgIGNvbnN0IGN0cmwgPSBhd2FpdCBjYWxsVmlzaXRvcihrZXksIG5vZGUsIHZpc2l0b3IsIHBhdGgpO1xuICAgIGlmIChpZGVudGl0eS5pc05vZGUoY3RybCkgfHwgaWRlbnRpdHkuaXNQYWlyKGN0cmwpKSB7XG4gICAgICAgIHJlcGxhY2VOb2RlKGtleSwgcGF0aCwgY3RybCk7XG4gICAgICAgIHJldHVybiB2aXNpdEFzeW5jXyhrZXksIGN0cmwsIHZpc2l0b3IsIHBhdGgpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGN0cmwgIT09ICdzeW1ib2wnKSB7XG4gICAgICAgIGlmIChpZGVudGl0eS5pc0NvbGxlY3Rpb24obm9kZSkpIHtcbiAgICAgICAgICAgIHBhdGggPSBPYmplY3QuZnJlZXplKHBhdGguY29uY2F0KG5vZGUpKTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZS5pdGVtcy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNpID0gYXdhaXQgdmlzaXRBc3luY18oaSwgbm9kZS5pdGVtc1tpXSwgdmlzaXRvciwgcGF0aCk7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjaSA9PT0gJ251bWJlcicpXG4gICAgICAgICAgICAgICAgICAgIGkgPSBjaSAtIDE7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoY2kgPT09IEJSRUFLKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gQlJFQUs7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoY2kgPT09IFJFTU9WRSkge1xuICAgICAgICAgICAgICAgICAgICBub2RlLml0ZW1zLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgaSAtPSAxO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpZGVudGl0eS5pc1BhaXIobm9kZSkpIHtcbiAgICAgICAgICAgIHBhdGggPSBPYmplY3QuZnJlZXplKHBhdGguY29uY2F0KG5vZGUpKTtcbiAgICAgICAgICAgIGNvbnN0IGNrID0gYXdhaXQgdmlzaXRBc3luY18oJ2tleScsIG5vZGUua2V5LCB2aXNpdG9yLCBwYXRoKTtcbiAgICAgICAgICAgIGlmIChjayA9PT0gQlJFQUspXG4gICAgICAgICAgICAgICAgcmV0dXJuIEJSRUFLO1xuICAgICAgICAgICAgZWxzZSBpZiAoY2sgPT09IFJFTU9WRSlcbiAgICAgICAgICAgICAgICBub2RlLmtleSA9IG51bGw7XG4gICAgICAgICAgICBjb25zdCBjdiA9IGF3YWl0IHZpc2l0QXN5bmNfKCd2YWx1ZScsIG5vZGUudmFsdWUsIHZpc2l0b3IsIHBhdGgpO1xuICAgICAgICAgICAgaWYgKGN2ID09PSBCUkVBSylcbiAgICAgICAgICAgICAgICByZXR1cm4gQlJFQUs7XG4gICAgICAgICAgICBlbHNlIGlmIChjdiA9PT0gUkVNT1ZFKVxuICAgICAgICAgICAgICAgIG5vZGUudmFsdWUgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjdHJsO1xufVxuZnVuY3Rpb24gaW5pdFZpc2l0b3IodmlzaXRvcikge1xuICAgIGlmICh0eXBlb2YgdmlzaXRvciA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgKHZpc2l0b3IuQ29sbGVjdGlvbiB8fCB2aXNpdG9yLk5vZGUgfHwgdmlzaXRvci5WYWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe1xuICAgICAgICAgICAgQWxpYXM6IHZpc2l0b3IuTm9kZSxcbiAgICAgICAgICAgIE1hcDogdmlzaXRvci5Ob2RlLFxuICAgICAgICAgICAgU2NhbGFyOiB2aXNpdG9yLk5vZGUsXG4gICAgICAgICAgICBTZXE6IHZpc2l0b3IuTm9kZVxuICAgICAgICB9LCB2aXNpdG9yLlZhbHVlICYmIHtcbiAgICAgICAgICAgIE1hcDogdmlzaXRvci5WYWx1ZSxcbiAgICAgICAgICAgIFNjYWxhcjogdmlzaXRvci5WYWx1ZSxcbiAgICAgICAgICAgIFNlcTogdmlzaXRvci5WYWx1ZVxuICAgICAgICB9LCB2aXNpdG9yLkNvbGxlY3Rpb24gJiYge1xuICAgICAgICAgICAgTWFwOiB2aXNpdG9yLkNvbGxlY3Rpb24sXG4gICAgICAgICAgICBTZXE6IHZpc2l0b3IuQ29sbGVjdGlvblxuICAgICAgICB9LCB2aXNpdG9yKTtcbiAgICB9XG4gICAgcmV0dXJuIHZpc2l0b3I7XG59XG5mdW5jdGlvbiBjYWxsVmlzaXRvcihrZXksIG5vZGUsIHZpc2l0b3IsIHBhdGgpIHtcbiAgICBpZiAodHlwZW9mIHZpc2l0b3IgPT09ICdmdW5jdGlvbicpXG4gICAgICAgIHJldHVybiB2aXNpdG9yKGtleSwgbm9kZSwgcGF0aCk7XG4gICAgaWYgKGlkZW50aXR5LmlzTWFwKG5vZGUpKVxuICAgICAgICByZXR1cm4gdmlzaXRvci5NYXA/LihrZXksIG5vZGUsIHBhdGgpO1xuICAgIGlmIChpZGVudGl0eS5pc1NlcShub2RlKSlcbiAgICAgICAgcmV0dXJuIHZpc2l0b3IuU2VxPy4oa2V5LCBub2RlLCBwYXRoKTtcbiAgICBpZiAoaWRlbnRpdHkuaXNQYWlyKG5vZGUpKVxuICAgICAgICByZXR1cm4gdmlzaXRvci5QYWlyPy4oa2V5LCBub2RlLCBwYXRoKTtcbiAgICBpZiAoaWRlbnRpdHkuaXNTY2FsYXIobm9kZSkpXG4gICAgICAgIHJldHVybiB2aXNpdG9yLlNjYWxhcj8uKGtleSwgbm9kZSwgcGF0aCk7XG4gICAgaWYgKGlkZW50aXR5LmlzQWxpYXMobm9kZSkpXG4gICAgICAgIHJldHVybiB2aXNpdG9yLkFsaWFzPy4oa2V5LCBub2RlLCBwYXRoKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufVxuZnVuY3Rpb24gcmVwbGFjZU5vZGUoa2V5LCBwYXRoLCBub2RlKSB7XG4gICAgY29uc3QgcGFyZW50ID0gcGF0aFtwYXRoLmxlbmd0aCAtIDFdO1xuICAgIGlmIChpZGVudGl0eS5pc0NvbGxlY3Rpb24ocGFyZW50KSkge1xuICAgICAgICBwYXJlbnQuaXRlbXNba2V5XSA9IG5vZGU7XG4gICAgfVxuICAgIGVsc2UgaWYgKGlkZW50aXR5LmlzUGFpcihwYXJlbnQpKSB7XG4gICAgICAgIGlmIChrZXkgPT09ICdrZXknKVxuICAgICAgICAgICAgcGFyZW50LmtleSA9IG5vZGU7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHBhcmVudC52YWx1ZSA9IG5vZGU7XG4gICAgfVxuICAgIGVsc2UgaWYgKGlkZW50aXR5LmlzRG9jdW1lbnQocGFyZW50KSkge1xuICAgICAgICBwYXJlbnQuY29udGVudHMgPSBub2RlO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgY29uc3QgcHQgPSBpZGVudGl0eS5pc0FsaWFzKHBhcmVudCkgPyAnYWxpYXMnIDogJ3NjYWxhcic7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IHJlcGxhY2Ugbm9kZSB3aXRoICR7cHR9IHBhcmVudGApO1xuICAgIH1cbn1cblxuZXhwb3J0cy52aXNpdCA9IHZpc2l0O1xuZXhwb3J0cy52aXNpdEFzeW5jID0gdmlzaXRBc3luYztcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2770\n")},2801:(module,__unused_webpack_exports,__webpack_require__)=>{"use strict";eval("// Standard YAML's Core schema.\n// http://www.yaml.org/spec/1.2/spec.html#id2804923\n//\n// NOTE: JS-YAML does not support schema-specific tag resolution restrictions.\n// So, Core schema has no distinctions from JSON schema is JS-YAML.\n\n\n\n\n\nvar Schema = __webpack_require__(8796);\n\n\nmodule.exports = new Schema({\n include: [\n __webpack_require__(592)\n ]\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjgwMS5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHYTs7O0FBR2IsYUFBYSxtQkFBTyxDQUFDLElBQVc7OztBQUdoQztBQUNBO0FBQ0EsSUFBSSxtQkFBTyxDQUFDLEdBQVE7QUFDcEI7QUFDQSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vb2JzaWRpYW4tbWluZG1hcC1uZXh0Z2VuLy4vbm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4xL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3NjaGVtYS9jb3JlLmpzP2Y5NDgiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU3RhbmRhcmQgWUFNTCdzIENvcmUgc2NoZW1hLlxuLy8gaHR0cDovL3d3dy55YW1sLm9yZy9zcGVjLzEuMi9zcGVjLmh0bWwjaWQyODA0OTIzXG4vL1xuLy8gTk9URTogSlMtWUFNTCBkb2VzIG5vdCBzdXBwb3J0IHNjaGVtYS1zcGVjaWZpYyB0YWcgcmVzb2x1dGlvbiByZXN0cmljdGlvbnMuXG4vLyBTbywgQ29yZSBzY2hlbWEgaGFzIG5vIGRpc3RpbmN0aW9ucyBmcm9tIEpTT04gc2NoZW1hIGlzIEpTLVlBTUwuXG5cblxuJ3VzZSBzdHJpY3QnO1xuXG5cbnZhciBTY2hlbWEgPSByZXF1aXJlKCcuLi9zY2hlbWEnKTtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IG5ldyBTY2hlbWEoe1xuICBpbmNsdWRlOiBbXG4gICAgcmVxdWlyZSgnLi9qc29uJylcbiAgXVxufSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2801\n")},2821:module=>{eval("/*\nLanguage: IRPF90\nAuthor: Anthony Scemama \nDescription: IRPF90 is an open-source Fortran code generator\nWebsite: http://irpf90.ups-tlse.fr\nCategory: scientific\n*/\n\n/** @type LanguageFn */\nfunction irpf90(hljs) {\n const regex = hljs.regex;\n const PARAMS = {\n className: 'params',\n begin: '\\\\(',\n end: '\\\\)'\n };\n\n // regex in both fortran and irpf90 should match\n const OPTIONAL_NUMBER_SUFFIX = /(_[a-z_\\d]+)?/;\n const OPTIONAL_NUMBER_EXP = /([de][+-]?\\d+)?/;\n const NUMBER = {\n className: 'number',\n variants: [\n { begin: regex.concat(/\\b\\d+/, /\\.(\\d*)/, OPTIONAL_NUMBER_EXP, OPTIONAL_NUMBER_SUFFIX) },\n { begin: regex.concat(/\\b\\d+/, OPTIONAL_NUMBER_EXP, OPTIONAL_NUMBER_SUFFIX) },\n { begin: regex.concat(/\\.\\d+/, OPTIONAL_NUMBER_EXP, OPTIONAL_NUMBER_SUFFIX) }\n ],\n relevance: 0\n };\n\n const F_KEYWORDS = {\n literal: '.False. .True.',\n keyword: 'kind do while private call intrinsic where elsewhere '\n + 'type endtype endmodule endselect endinterface end enddo endif if forall endforall only contains default return stop then '\n + 'public subroutine|10 function program .and. .or. .not. .le. .eq. .ge. .gt. .lt. '\n + 'goto save else use module select case '\n + 'access blank direct exist file fmt form formatted iostat name named nextrec number opened rec recl sequential status unformatted unit '\n + 'continue format pause cycle exit '\n + 'c_null_char c_alert c_backspace c_form_feed flush wait decimal round iomsg '\n + 'synchronous nopass non_overridable pass protected volatile abstract extends import '\n + 'non_intrinsic value deferred generic final enumerator class associate bind enum '\n + 'c_int c_short c_long c_long_long c_signed_char c_size_t c_int8_t c_int16_t c_int32_t c_int64_t c_int_least8_t c_int_least16_t '\n + 'c_int_least32_t c_int_least64_t c_int_fast8_t c_int_fast16_t c_int_fast32_t c_int_fast64_t c_intmax_t C_intptr_t c_float c_double '\n + 'c_long_double c_float_complex c_double_complex c_long_double_complex c_bool c_char c_null_ptr c_null_funptr '\n + 'c_new_line c_carriage_return c_horizontal_tab c_vertical_tab iso_c_binding c_loc c_funloc c_associated c_f_pointer '\n + 'c_ptr c_funptr iso_fortran_env character_storage_size error_unit file_storage_size input_unit iostat_end iostat_eor '\n + 'numeric_storage_size output_unit c_f_procpointer ieee_arithmetic ieee_support_underflow_control '\n + 'ieee_get_underflow_mode ieee_set_underflow_mode newunit contiguous recursive '\n + 'pad position action delim readwrite eor advance nml interface procedure namelist include sequence elemental pure '\n + 'integer real character complex logical dimension allocatable|10 parameter '\n + 'external implicit|10 none double precision assign intent optional pointer '\n + 'target in out common equivalence data '\n // IRPF90 special keywords\n + 'begin_provider &begin_provider end_provider begin_shell end_shell begin_template end_template subst assert touch '\n + 'soft_touch provide no_dep free irp_if irp_else irp_endif irp_write irp_read',\n built_in: 'alog alog10 amax0 amax1 amin0 amin1 amod cabs ccos cexp clog csin csqrt dabs dacos dasin datan datan2 dcos dcosh ddim dexp dint '\n + 'dlog dlog10 dmax1 dmin1 dmod dnint dsign dsin dsinh dsqrt dtan dtanh float iabs idim idint idnint ifix isign max0 max1 min0 min1 sngl '\n + 'algama cdabs cdcos cdexp cdlog cdsin cdsqrt cqabs cqcos cqexp cqlog cqsin cqsqrt dcmplx dconjg derf derfc dfloat dgamma dimag dlgama '\n + 'iqint qabs qacos qasin qatan qatan2 qcmplx qconjg qcos qcosh qdim qerf qerfc qexp qgamma qimag qlgama qlog qlog10 qmax1 qmin1 qmod '\n + 'qnint qsign qsin qsinh qsqrt qtan qtanh abs acos aimag aint anint asin atan atan2 char cmplx conjg cos cosh exp ichar index int log '\n + 'log10 max min nint sign sin sinh sqrt tan tanh print write dim lge lgt lle llt mod nullify allocate deallocate '\n + 'adjustl adjustr all allocated any associated bit_size btest ceiling count cshift date_and_time digits dot_product '\n + 'eoshift epsilon exponent floor fraction huge iand ibclr ibits ibset ieor ior ishft ishftc lbound len_trim matmul '\n + 'maxexponent maxloc maxval merge minexponent minloc minval modulo mvbits nearest pack present product '\n + 'radix random_number random_seed range repeat reshape rrspacing scale scan selected_int_kind selected_real_kind '\n + 'set_exponent shape size spacing spread sum system_clock tiny transpose trim ubound unpack verify achar iachar transfer '\n + 'dble entry dprod cpu_time command_argument_count get_command get_command_argument get_environment_variable is_iostat_end '\n + 'ieee_arithmetic ieee_support_underflow_control ieee_get_underflow_mode ieee_set_underflow_mode '\n + 'is_iostat_eor move_alloc new_line selected_char_kind same_type_as extends_type_of '\n + 'acosh asinh atanh bessel_j0 bessel_j1 bessel_jn bessel_y0 bessel_y1 bessel_yn erf erfc erfc_scaled gamma log_gamma hypot norm2 '\n + 'atomic_define atomic_ref execute_command_line leadz trailz storage_size merge_bits '\n + 'bge bgt ble blt dshiftl dshiftr findloc iall iany iparity image_index lcobound ucobound maskl maskr '\n + 'num_images parity popcnt poppar shifta shiftl shiftr this_image '\n // IRPF90 special built_ins\n + 'IRP_ALIGN irp_here'\n };\n return {\n name: 'IRPF90',\n case_insensitive: true,\n keywords: F_KEYWORDS,\n illegal: /\\/\\*/,\n contains: [\n hljs.inherit(hljs.APOS_STRING_MODE, {\n className: 'string',\n relevance: 0\n }),\n hljs.inherit(hljs.QUOTE_STRING_MODE, {\n className: 'string',\n relevance: 0\n }),\n {\n className: 'function',\n beginKeywords: 'subroutine function program',\n illegal: '[${=\\\\n]',\n contains: [\n hljs.UNDERSCORE_TITLE_MODE,\n PARAMS\n ]\n },\n hljs.COMMENT('!', '$', { relevance: 0 }),\n hljs.COMMENT('begin_doc', 'end_doc', { relevance: 10 }),\n NUMBER\n ]\n };\n}\n\nmodule.exports = irpf90;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjgyMS5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsc0ZBQXNGO0FBQzlGLFFBQVEsMkVBQTJFO0FBQ25GLFFBQVE7QUFDUjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCwrQkFBK0IsY0FBYztBQUM3Qyw2Q0FBNkMsZUFBZTtBQUM1RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL29ic2lkaWFuLW1pbmRtYXAtbmV4dGdlbi8uL25vZGVfbW9kdWxlcy8ucG5wbS9oaWdobGlnaHQuanNAMTEuMTEuMS9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvaXJwZjkwLmpzPzAxYmYiXSwic291cmNlc0NvbnRlbnQiOlsiLypcbkxhbmd1YWdlOiBJUlBGOTBcbkF1dGhvcjogQW50aG9ueSBTY2VtYW1hIDxzY2VtYW1hQGlyc2FtYy51cHMtdGxzZS5mcj5cbkRlc2NyaXB0aW9uOiBJUlBGOTAgaXMgYW4gb3Blbi1zb3VyY2UgRm9ydHJhbiBjb2RlIGdlbmVyYXRvclxuV2Vic2l0ZTogaHR0cDovL2lycGY5MC51cHMtdGxzZS5mclxuQ2F0ZWdvcnk6IHNjaWVudGlmaWNcbiovXG5cbi8qKiBAdHlwZSBMYW5ndWFnZUZuICovXG5mdW5jdGlvbiBpcnBmOTAoaGxqcykge1xuICBjb25zdCByZWdleCA9IGhsanMucmVnZXg7XG4gIGNvbnN0IFBBUkFNUyA9IHtcbiAgICBjbGFzc05hbWU6ICdwYXJhbXMnLFxuICAgIGJlZ2luOiAnXFxcXCgnLFxuICAgIGVuZDogJ1xcXFwpJ1xuICB9O1xuXG4gIC8vIHJlZ2V4IGluIGJvdGggZm9ydHJhbiBhbmQgaXJwZjkwIHNob3VsZCBtYXRjaFxuICBjb25zdCBPUFRJT05BTF9OVU1CRVJfU1VGRklYID0gLyhfW2Etel9cXGRdKyk/LztcbiAgY29uc3QgT1BUSU9OQUxfTlVNQkVSX0VYUCA9IC8oW2RlXVsrLV0/XFxkKyk/LztcbiAgY29uc3QgTlVNQkVSID0ge1xuICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHsgYmVnaW46IHJlZ2V4LmNvbmNhdCgvXFxiXFxkKy8sIC9cXC4oXFxkKikvLCBPUFRJT05BTF9OVU1CRVJfRVhQLCBPUFRJT05BTF9OVU1CRVJfU1VGRklYKSB9LFxuICAgICAgeyBiZWdpbjogcmVnZXguY29uY2F0KC9cXGJcXGQrLywgT1BUSU9OQUxfTlVNQkVSX0VYUCwgT1BUSU9OQUxfTlVNQkVSX1NVRkZJWCkgfSxcbiAgICAgIHsgYmVnaW46IHJlZ2V4LmNvbmNhdCgvXFwuXFxkKy8sIE9QVElPTkFMX05VTUJFUl9FWFAsIE9QVElPTkFMX05VTUJFUl9TVUZGSVgpIH1cbiAgICBdLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuXG4gIGNvbnN0IEZfS0VZV09SRFMgPSB7XG4gICAgbGl0ZXJhbDogJy5GYWxzZS4gLlRydWUuJyxcbiAgICBrZXl3b3JkOiAna2luZCBkbyB3aGlsZSBwcml2YXRlIGNhbGwgaW50cmluc2ljIHdoZXJlIGVsc2V3aGVyZSAnXG4gICAgICArICd0eXBlIGVuZHR5cGUgZW5kbW9kdWxlIGVuZHNlbGVjdCBlbmRpbnRlcmZhY2UgZW5kIGVuZGRvIGVuZGlmIGlmIGZvcmFsbCBlbmRmb3JhbGwgb25seSBjb250YWlucyBkZWZhdWx0IHJldHVybiBzdG9wIHRoZW4gJ1xuICAgICAgKyAncHVibGljIHN1YnJvdXRpbmV8MTAgZnVuY3Rpb24gcHJvZ3JhbSAuYW5kLiAub3IuIC5ub3QuIC5sZS4gLmVxLiAuZ2UuIC5ndC4gLmx0LiAnXG4gICAgICArICdnb3RvIHNhdmUgZWxzZSB1c2UgbW9kdWxlIHNlbGVjdCBjYXNlICdcbiAgICAgICsgJ2FjY2VzcyBibGFuayBkaXJlY3QgZXhpc3QgZmlsZSBmbXQgZm9ybSBmb3JtYXR0ZWQgaW9zdGF0IG5hbWUgbmFtZWQgbmV4dHJlYyBudW1iZXIgb3BlbmVkIHJlYyByZWNsIHNlcXVlbnRpYWwgc3RhdHVzIHVuZm9ybWF0dGVkIHVuaXQgJ1xuICAgICAgKyAnY29udGludWUgZm9ybWF0IHBhdXNlIGN5Y2xlIGV4aXQgJ1xuICAgICAgKyAnY19udWxsX2NoYXIgY19hbGVydCBjX2JhY2tzcGFjZSBjX2Zvcm1fZmVlZCBmbHVzaCB3YWl0IGRlY2ltYWwgcm91bmQgaW9tc2cgJ1xuICAgICAgKyAnc3luY2hyb25vdXMgbm9wYXNzIG5vbl9vdmVycmlkYWJsZSBwYXNzIHByb3RlY3RlZCB2b2xhdGlsZSBhYnN0cmFjdCBleHRlbmRzIGltcG9ydCAnXG4gICAgICArICdub25faW50cmluc2ljIHZhbHVlIGRlZmVycmVkIGdlbmVyaWMgZmluYWwgZW51bWVyYXRvciBjbGFzcyBhc3NvY2lhdGUgYmluZCBlbnVtICdcbiAgICAgICsgJ2NfaW50IGNfc2hvcnQgY19sb25nIGNfbG9uZ19sb25nIGNfc2lnbmVkX2NoYXIgY19zaXplX3QgY19pbnQ4X3QgY19pbnQxNl90IGNfaW50MzJfdCBjX2ludDY0X3QgY19pbnRfbGVhc3Q4X3QgY19pbnRfbGVhc3QxNl90ICdcbiAgICAgICsgJ2NfaW50X2xlYXN0MzJfdCBjX2ludF9sZWFzdDY0X3QgY19pbnRfZmFzdDhfdCBjX2ludF9mYXN0MTZfdCBjX2ludF9mYXN0MzJfdCBjX2ludF9mYXN0NjRfdCBjX2ludG1heF90IENfaW50cHRyX3QgY19mbG9hdCBjX2RvdWJsZSAnXG4gICAgICArICdjX2xvbmdfZG91YmxlIGNfZmxvYXRfY29tcGxleCBjX2RvdWJsZV9jb21wbGV4IGNfbG9uZ19kb3VibGVfY29tcGxleCBjX2Jvb2wgY19jaGFyIGNfbnVsbF9wdHIgY19udWxsX2Z1bnB0ciAnXG4gICAgICArICdjX25ld19saW5lIGNfY2FycmlhZ2VfcmV0dXJuIGNfaG9yaXpvbnRhbF90YWIgY192ZXJ0aWNhbF90YWIgaXNvX2NfYmluZGluZyBjX2xvYyBjX2Z1bmxvYyBjX2Fzc29jaWF0ZWQgIGNfZl9wb2ludGVyICdcbiAgICAgICsgJ2NfcHRyIGNfZnVucHRyIGlzb19mb3J0cmFuX2VudiBjaGFyYWN0ZXJfc3RvcmFnZV9zaXplIGVycm9yX3VuaXQgZmlsZV9zdG9yYWdlX3NpemUgaW5wdXRfdW5pdCBpb3N0YXRfZW5kIGlvc3RhdF9lb3IgJ1xuICAgICAgKyAnbnVtZXJpY19zdG9yYWdlX3NpemUgb3V0cHV0X3VuaXQgY19mX3Byb2Nwb2ludGVyIGllZWVfYXJpdGhtZXRpYyBpZWVlX3N1cHBvcnRfdW5kZXJmbG93X2NvbnRyb2wgJ1xuICAgICAgKyAnaWVlZV9nZXRfdW5kZXJmbG93X21vZGUgaWVlZV9zZXRfdW5kZXJmbG93X21vZGUgbmV3dW5pdCBjb250aWd1b3VzIHJlY3Vyc2l2ZSAnXG4gICAgICArICdwYWQgcG9zaXRpb24gYWN0aW9uIGRlbGltIHJlYWR3cml0ZSBlb3IgYWR2YW5jZSBubWwgaW50ZXJmYWNlIHByb2NlZHVyZSBuYW1lbGlzdCBpbmNsdWRlIHNlcXVlbmNlIGVsZW1lbnRhbCBwdXJlICdcbiAgICAgICsgJ2ludGVnZXIgcmVhbCBjaGFyYWN0ZXIgY29tcGxleCBsb2dpY2FsIGRpbWVuc2lvbiBhbGxvY2F0YWJsZXwxMCBwYXJhbWV0ZXIgJ1xuICAgICAgKyAnZXh0ZXJuYWwgaW1wbGljaXR8MTAgbm9uZSBkb3VibGUgcHJlY2lzaW9uIGFzc2lnbiBpbnRlbnQgb3B0aW9uYWwgcG9pbnRlciAnXG4gICAgICArICd0YXJnZXQgaW4gb3V0IGNvbW1vbiBlcXVpdmFsZW5jZSBkYXRhICdcbiAgICAgIC8vIElSUEY5MCBzcGVjaWFsIGtleXdvcmRzXG4gICAgICArICdiZWdpbl9wcm92aWRlciAmYmVnaW5fcHJvdmlkZXIgZW5kX3Byb3ZpZGVyIGJlZ2luX3NoZWxsIGVuZF9zaGVsbCBiZWdpbl90ZW1wbGF0ZSBlbmRfdGVtcGxhdGUgc3Vic3QgYXNzZXJ0IHRvdWNoICdcbiAgICAgICsgJ3NvZnRfdG91Y2ggcHJvdmlkZSBub19kZXAgZnJlZSBpcnBfaWYgaXJwX2Vsc2UgaXJwX2VuZGlmIGlycF93cml0ZSBpcnBfcmVhZCcsXG4gICAgYnVpbHRfaW46ICdhbG9nIGFsb2cxMCBhbWF4MCBhbWF4MSBhbWluMCBhbWluMSBhbW9kIGNhYnMgY2NvcyBjZXhwIGNsb2cgY3NpbiBjc3FydCBkYWJzIGRhY29zIGRhc2luIGRhdGFuIGRhdGFuMiBkY29zIGRjb3NoIGRkaW0gZGV4cCBkaW50ICdcbiAgICAgICsgJ2Rsb2cgZGxvZzEwIGRtYXgxIGRtaW4xIGRtb2QgZG5pbnQgZHNpZ24gZHNpbiBkc2luaCBkc3FydCBkdGFuIGR0YW5oIGZsb2F0IGlhYnMgaWRpbSBpZGludCBpZG5pbnQgaWZpeCBpc2lnbiBtYXgwIG1heDEgbWluMCBtaW4xIHNuZ2wgJ1xuICAgICAgKyAnYWxnYW1hIGNkYWJzIGNkY29zIGNkZXhwIGNkbG9nIGNkc2luIGNkc3FydCBjcWFicyBjcWNvcyBjcWV4cCBjcWxvZyBjcXNpbiBjcXNxcnQgZGNtcGx4IGRjb25qZyBkZXJmIGRlcmZjIGRmbG9hdCBkZ2FtbWEgZGltYWcgZGxnYW1hICdcbiAgICAgICsgJ2lxaW50IHFhYnMgcWFjb3MgcWFzaW4gcWF0YW4gcWF0YW4yIHFjbXBseCBxY29uamcgcWNvcyBxY29zaCBxZGltIHFlcmYgcWVyZmMgcWV4cCBxZ2FtbWEgcWltYWcgcWxnYW1hIHFsb2cgcWxvZzEwIHFtYXgxIHFtaW4xIHFtb2QgJ1xuICAgICAgKyAncW5pbnQgcXNpZ24gcXNpbiBxc2luaCBxc3FydCBxdGFuIHF0YW5oIGFicyBhY29zIGFpbWFnIGFpbnQgYW5pbnQgYXNpbiBhdGFuIGF0YW4yIGNoYXIgY21wbHggY29uamcgY29zIGNvc2ggZXhwIGljaGFyIGluZGV4IGludCBsb2cgJ1xuICAgICAgKyAnbG9nMTAgbWF4IG1pbiBuaW50IHNpZ24gc2luIHNpbmggc3FydCB0YW4gdGFuaCBwcmludCB3cml0ZSBkaW0gbGdlIGxndCBsbGUgbGx0IG1vZCBudWxsaWZ5IGFsbG9jYXRlIGRlYWxsb2NhdGUgJ1xuICAgICAgKyAnYWRqdXN0bCBhZGp1c3RyIGFsbCBhbGxvY2F0ZWQgYW55IGFzc29jaWF0ZWQgYml0X3NpemUgYnRlc3QgY2VpbGluZyBjb3VudCBjc2hpZnQgZGF0ZV9hbmRfdGltZSBkaWdpdHMgZG90X3Byb2R1Y3QgJ1xuICAgICAgKyAnZW9zaGlmdCBlcHNpbG9uIGV4cG9uZW50IGZsb29yIGZyYWN0aW9uIGh1Z2UgaWFuZCBpYmNsciBpYml0cyBpYnNldCBpZW9yIGlvciBpc2hmdCBpc2hmdGMgbGJvdW5kIGxlbl90cmltIG1hdG11bCAnXG4gICAgICArICdtYXhleHBvbmVudCBtYXhsb2MgbWF4dmFsIG1lcmdlIG1pbmV4cG9uZW50IG1pbmxvYyBtaW52YWwgbW9kdWxvIG12Yml0cyBuZWFyZXN0IHBhY2sgcHJlc2VudCBwcm9kdWN0ICdcbiAgICAgICsgJ3JhZGl4IHJhbmRvbV9udW1iZXIgcmFuZG9tX3NlZWQgcmFuZ2UgcmVwZWF0IHJlc2hhcGUgcnJzcGFjaW5nIHNjYWxlIHNjYW4gc2VsZWN0ZWRfaW50X2tpbmQgc2VsZWN0ZWRfcmVhbF9raW5kICdcbiAgICAgICsgJ3NldF9leHBvbmVudCBzaGFwZSBzaXplIHNwYWNpbmcgc3ByZWFkIHN1bSBzeXN0ZW1fY2xvY2sgdGlueSB0cmFuc3Bvc2UgdHJpbSB1Ym91bmQgdW5wYWNrIHZlcmlmeSBhY2hhciBpYWNoYXIgdHJhbnNmZXIgJ1xuICAgICAgKyAnZGJsZSBlbnRyeSBkcHJvZCBjcHVfdGltZSBjb21tYW5kX2FyZ3VtZW50X2NvdW50IGdldF9jb21tYW5kIGdldF9jb21tYW5kX2FyZ3VtZW50IGdldF9lbnZpcm9ubWVudF92YXJpYWJsZSBpc19pb3N0YXRfZW5kICdcbiAgICAgICsgJ2llZWVfYXJpdGhtZXRpYyBpZWVlX3N1cHBvcnRfdW5kZXJmbG93X2NvbnRyb2wgaWVlZV9nZXRfdW5kZXJmbG93X21vZGUgaWVlZV9zZXRfdW5kZXJmbG93X21vZGUgJ1xuICAgICAgKyAnaXNfaW9zdGF0X2VvciBtb3ZlX2FsbG9jIG5ld19saW5lIHNlbGVjdGVkX2NoYXJfa2luZCBzYW1lX3R5cGVfYXMgZXh0ZW5kc190eXBlX29mICdcbiAgICAgICsgJ2Fjb3NoIGFzaW5oIGF0YW5oIGJlc3NlbF9qMCBiZXNzZWxfajEgYmVzc2VsX2puIGJlc3NlbF95MCBiZXNzZWxfeTEgYmVzc2VsX3luIGVyZiBlcmZjIGVyZmNfc2NhbGVkIGdhbW1hIGxvZ19nYW1tYSBoeXBvdCBub3JtMiAnXG4gICAgICArICdhdG9taWNfZGVmaW5lIGF0b21pY19yZWYgZXhlY3V0ZV9jb21tYW5kX2xpbmUgbGVhZHogdHJhaWx6IHN0b3JhZ2Vfc2l6ZSBtZXJnZV9iaXRzICdcbiAgICAgICsgJ2JnZSBiZ3QgYmxlIGJsdCBkc2hpZnRsIGRzaGlmdHIgZmluZGxvYyBpYWxsIGlhbnkgaXBhcml0eSBpbWFnZV9pbmRleCBsY29ib3VuZCB1Y29ib3VuZCBtYXNrbCBtYXNrciAnXG4gICAgICArICdudW1faW1hZ2VzIHBhcml0eSBwb3BjbnQgcG9wcGFyIHNoaWZ0YSBzaGlmdGwgc2hpZnRyIHRoaXNfaW1hZ2UgJ1xuICAgICAgLy8gSVJQRjkwIHNwZWNpYWwgYnVpbHRfaW5zXG4gICAgICArICdJUlBfQUxJR04gaXJwX2hlcmUnXG4gIH07XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ0lSUEY5MCcsXG4gICAgY2FzZV9pbnNlbnNpdGl2ZTogdHJ1ZSxcbiAgICBrZXl3b3JkczogRl9LRVlXT1JEUyxcbiAgICBpbGxlZ2FsOiAvXFwvXFwqLyxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5pbmhlcml0KGhsanMuQVBPU19TVFJJTkdfTU9ERSwge1xuICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0pLFxuICAgICAgaGxqcy5pbmhlcml0KGhsanMuUVVPVEVfU1RSSU5HX01PREUsIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9KSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnZnVuY3Rpb24nLFxuICAgICAgICBiZWdpbktleXdvcmRzOiAnc3Vicm91dGluZSBmdW5jdGlvbiBwcm9ncmFtJyxcbiAgICAgICAgaWxsZWdhbDogJ1skez1cXFxcbl0nLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIGhsanMuVU5ERVJTQ09SRV9USVRMRV9NT0RFLFxuICAgICAgICAgIFBBUkFNU1xuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgaGxqcy5DT01NRU5UKCchJywgJyQnLCB7IHJlbGV2YW5jZTogMCB9KSxcbiAgICAgIGhsanMuQ09NTUVOVCgnYmVnaW5fZG9jJywgJ2VuZF9kb2MnLCB7IHJlbGV2YW5jZTogMTAgfSksXG4gICAgICBOVU1CRVJcbiAgICBdXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXJwZjkwO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2821\n")},2850:module=>{eval("/*\nLanguage: Brainfuck\nAuthor: Evgeny Stepanischev \nWebsite: https://esolangs.org/wiki/Brainfuck\n*/\n\n/** @type LanguageFn */\nfunction brainfuck(hljs) {\n const LITERAL = {\n className: 'literal',\n begin: /[+-]+/,\n relevance: 0\n };\n return {\n name: 'Brainfuck',\n aliases: [ 'bf' ],\n contains: [\n hljs.COMMENT(\n /[^\\[\\]\\.,\\+\\-<> \\r\\n]/,\n /[\\[\\]\\.,\\+\\-<> \\r\\n]/,\n {\n contains: [\n {\n match: /[ ]+[^\\[\\]\\.,\\+\\-<> \\r\\n]/,\n relevance: 0\n }\n ],\n returnEnd: true,\n relevance: 0\n }\n ),\n {\n className: 'title',\n begin: '[\\\\[\\\\]]',\n relevance: 0\n },\n {\n className: 'string',\n begin: '[\\\\.,]',\n relevance: 0\n },\n {\n // this mode works as the only relevance counter\n // it looks ahead to find the start of a run of literals\n // so only the runs are counted as relevant\n begin: /(?=\\+\\+|--)/,\n contains: [ LITERAL ]\n },\n LITERAL\n ]\n };\n}\n\nmodule.exports = brainfuck;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjg1MC5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vb2JzaWRpYW4tbWluZG1hcC1uZXh0Z2VuLy4vbm9kZV9tb2R1bGVzLy5wbnBtL2hpZ2hsaWdodC5qc0AxMS4xMS4xL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9icmFpbmZ1Y2suanM/MDYzOSJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuTGFuZ3VhZ2U6IEJyYWluZnVja1xuQXV0aG9yOiBFdmdlbnkgU3RlcGFuaXNjaGV2IDxpbWJvbGtAZ21haWwuY29tPlxuV2Vic2l0ZTogaHR0cHM6Ly9lc29sYW5ncy5vcmcvd2lraS9CcmFpbmZ1Y2tcbiovXG5cbi8qKiBAdHlwZSBMYW5ndWFnZUZuICovXG5mdW5jdGlvbiBicmFpbmZ1Y2soaGxqcykge1xuICBjb25zdCBMSVRFUkFMID0ge1xuICAgIGNsYXNzTmFtZTogJ2xpdGVyYWwnLFxuICAgIGJlZ2luOiAvWystXSsvLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuICByZXR1cm4ge1xuICAgIG5hbWU6ICdCcmFpbmZ1Y2snLFxuICAgIGFsaWFzZXM6IFsgJ2JmJyBdLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkNPTU1FTlQoXG4gICAgICAgIC9bXlxcW1xcXVxcLixcXCtcXC08PiBcXHJcXG5dLyxcbiAgICAgICAgL1tcXFtcXF1cXC4sXFwrXFwtPD4gXFxyXFxuXS8sXG4gICAgICAgIHtcbiAgICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBtYXRjaDogL1sgXStbXlxcW1xcXVxcLixcXCtcXC08PiBcXHJcXG5dLyxcbiAgICAgICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXSxcbiAgICAgICAgICByZXR1cm5FbmQ6IHRydWUsXG4gICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3RpdGxlJyxcbiAgICAgICAgYmVnaW46ICdbXFxcXFtcXFxcXV0nLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgIGJlZ2luOiAnW1xcXFwuLF0nLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIC8vIHRoaXMgbW9kZSB3b3JrcyBhcyB0aGUgb25seSByZWxldmFuY2UgY291bnRlclxuICAgICAgICAvLyBpdCBsb29rcyBhaGVhZCB0byBmaW5kIHRoZSBzdGFydCBvZiBhIHJ1biBvZiBsaXRlcmFsc1xuICAgICAgICAvLyBzbyBvbmx5IHRoZSBydW5zIGFyZSBjb3VudGVkIGFzIHJlbGV2YW50XG4gICAgICAgIGJlZ2luOiAvKD89XFwrXFwrfC0tKS8sXG4gICAgICAgIGNvbnRhaW5zOiBbIExJVEVSQUwgXVxuICAgICAgfSxcbiAgICAgIExJVEVSQUxcbiAgICBdXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYnJhaW5mdWNrO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2850\n")},2909:(__unused_webpack_module,exports)=>{"use strict";eval("\n\nfunction containsNewline(key) {\n if (!key)\n return null;\n switch (key.type) {\n case 'alias':\n case 'scalar':\n case 'double-quoted-scalar':\n case 'single-quoted-scalar':\n if (key.source.includes('\\n'))\n return true;\n if (key.end)\n for (const st of key.end)\n if (st.type === 'newline')\n return true;\n return false;\n case 'flow-collection':\n for (const it of key.items) {\n for (const st of it.start)\n if (st.type === 'newline')\n return true;\n if (it.sep)\n for (const st of it.sep)\n if (st.type === 'newline')\n return true;\n if (containsNewline(it.key) || containsNewline(it.value))\n return true;\n }\n return false;\n default:\n return true;\n }\n}\n\nexports.containsNewline = containsNewline;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjkwOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHVCQUF1QiIsInNvdXJjZXMiOlsid2VicGFjazovL29ic2lkaWFuLW1pbmRtYXAtbmV4dGdlbi8uL25vZGVfbW9kdWxlcy8ucG5wbS95YW1sQDIuOC4wL25vZGVfbW9kdWxlcy95YW1sL2Rpc3QvY29tcG9zZS91dGlsLWNvbnRhaW5zLW5ld2xpbmUuanM/ZWY4NCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmZ1bmN0aW9uIGNvbnRhaW5zTmV3bGluZShrZXkpIHtcbiAgICBpZiAoIWtleSlcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgc3dpdGNoIChrZXkudHlwZSkge1xuICAgICAgICBjYXNlICdhbGlhcyc6XG4gICAgICAgIGNhc2UgJ3NjYWxhcic6XG4gICAgICAgIGNhc2UgJ2RvdWJsZS1xdW90ZWQtc2NhbGFyJzpcbiAgICAgICAgY2FzZSAnc2luZ2xlLXF1b3RlZC1zY2FsYXInOlxuICAgICAgICAgICAgaWYgKGtleS5zb3VyY2UuaW5jbHVkZXMoJ1xcbicpKVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgaWYgKGtleS5lbmQpXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBzdCBvZiBrZXkuZW5kKVxuICAgICAgICAgICAgICAgICAgICBpZiAoc3QudHlwZSA9PT0gJ25ld2xpbmUnKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIGNhc2UgJ2Zsb3ctY29sbGVjdGlvbic6XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGl0IG9mIGtleS5pdGVtcykge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgc3Qgb2YgaXQuc3RhcnQpXG4gICAgICAgICAgICAgICAgICAgIGlmIChzdC50eXBlID09PSAnbmV3bGluZScpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICBpZiAoaXQuc2VwKVxuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHN0IG9mIGl0LnNlcClcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdC50eXBlID09PSAnbmV3bGluZScpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgaWYgKGNvbnRhaW5zTmV3bGluZShpdC5rZXkpIHx8IGNvbnRhaW5zTmV3bGluZShpdC52YWx1ZSkpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxufVxuXG5leHBvcnRzLmNvbnRhaW5zTmV3bGluZSA9IGNvbnRhaW5zTmV3bGluZTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2909\n")},2913:(__unused_webpack_module,exports)=>{"use strict";eval("\n\nfunction emptyScalarPosition(offset, before, pos) {\n if (before) {\n pos ?? (pos = before.length);\n for (let i = pos - 1; i >= 0; --i) {\n let st = before[i];\n switch (st.type) {\n case 'space':\n case 'comment':\n case 'newline':\n offset -= st.source.length;\n continue;\n }\n // Technically, an empty scalar is immediately after the last non-empty\n // node, but it's more useful to place it after any whitespace.\n st = before[++i];\n while (st?.type === 'space') {\n offset += st.source.length;\n st = before[++i];\n }\n break;\n }\n }\n return offset;\n}\n\nexports.emptyScalarPosition = emptyScalarPosition;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjkxMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQSw4QkFBOEIsUUFBUTtBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDJCQUEyQiIsInNvdXJjZXMiOlsid2VicGFjazovL29ic2lkaWFuLW1pbmRtYXAtbmV4dGdlbi8uL25vZGVfbW9kdWxlcy8ucG5wbS95YW1sQDIuOC4wL25vZGVfbW9kdWxlcy95YW1sL2Rpc3QvY29tcG9zZS91dGlsLWVtcHR5LXNjYWxhci1wb3NpdGlvbi5qcz8yN2NlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuZnVuY3Rpb24gZW1wdHlTY2FsYXJQb3NpdGlvbihvZmZzZXQsIGJlZm9yZSwgcG9zKSB7XG4gICAgaWYgKGJlZm9yZSkge1xuICAgICAgICBwb3MgPz8gKHBvcyA9IGJlZm9yZS5sZW5ndGgpO1xuICAgICAgICBmb3IgKGxldCBpID0gcG9zIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgICAgIGxldCBzdCA9IGJlZm9yZVtpXTtcbiAgICAgICAgICAgIHN3aXRjaCAoc3QudHlwZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ3NwYWNlJzpcbiAgICAgICAgICAgICAgICBjYXNlICdjb21tZW50JzpcbiAgICAgICAgICAgICAgICBjYXNlICduZXdsaW5lJzpcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0IC09IHN0LnNvdXJjZS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gVGVjaG5pY2FsbHksIGFuIGVtcHR5IHNjYWxhciBpcyBpbW1lZGlhdGVseSBhZnRlciB0aGUgbGFzdCBub24tZW1wdHlcbiAgICAgICAgICAgIC8vIG5vZGUsIGJ1dCBpdCdzIG1vcmUgdXNlZnVsIHRvIHBsYWNlIGl0IGFmdGVyIGFueSB3aGl0ZXNwYWNlLlxuICAgICAgICAgICAgc3QgPSBiZWZvcmVbKytpXTtcbiAgICAgICAgICAgIHdoaWxlIChzdD8udHlwZSA9PT0gJ3NwYWNlJykge1xuICAgICAgICAgICAgICAgIG9mZnNldCArPSBzdC5zb3VyY2UubGVuZ3RoO1xuICAgICAgICAgICAgICAgIHN0ID0gYmVmb3JlWysraV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb2Zmc2V0O1xufVxuXG5leHBvcnRzLmVtcHR5U2NhbGFyUG9zaXRpb24gPSBlbXB0eVNjYWxhclBvc2l0aW9uO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2913\n")},2952:module=>{eval("/*\nLanguage: PHP Template\nRequires: xml.js, php.js\nAuthor: Josh Goebel \nWebsite: https://www.php.net\nCategory: common\n*/\n\nfunction phpTemplate(hljs) {\n return {\n name: \"PHP template\",\n subLanguage: 'xml',\n contains: [\n {\n begin: /<\\?(php|=)?/,\n end: /\\?>/,\n subLanguage: 'php',\n contains: [\n // We don't want the php closing tag ?> to close the PHP block when\n // inside any of the following blocks:\n {\n begin: '/\\\\*',\n end: '\\\\*/',\n skip: true\n },\n {\n begin: 'b\"',\n end: '\"',\n skip: true\n },\n {\n begin: 'b\\'',\n end: '\\'',\n skip: true\n },\n hljs.inherit(hljs.APOS_STRING_MODE, {\n illegal: null,\n className: null,\n contains: null,\n skip: true\n }),\n hljs.inherit(hljs.QUOTE_STRING_MODE, {\n illegal: null,\n className: null,\n contains: null,\n skip: true\n })\n ]\n }\n ]\n };\n}\n\nmodule.exports = phpTemplate;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjk1Mi5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL29ic2lkaWFuLW1pbmRtYXAtbmV4dGdlbi8uL25vZGVfbW9kdWxlcy8ucG5wbS9oaWdobGlnaHQuanNAMTEuMTEuMS9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvcGhwLXRlbXBsYXRlLmpzPzRiYjAiXSwic291cmNlc0NvbnRlbnQiOlsiLypcbkxhbmd1YWdlOiBQSFAgVGVtcGxhdGVcblJlcXVpcmVzOiB4bWwuanMsIHBocC5qc1xuQXV0aG9yOiBKb3NoIEdvZWJlbCA8aGVsbG9Aam9zaGdvZWJlbC5jb20+XG5XZWJzaXRlOiBodHRwczovL3d3dy5waHAubmV0XG5DYXRlZ29yeTogY29tbW9uXG4qL1xuXG5mdW5jdGlvbiBwaHBUZW1wbGF0ZShobGpzKSB7XG4gIHJldHVybiB7XG4gICAgbmFtZTogXCJQSFAgdGVtcGxhdGVcIixcbiAgICBzdWJMYW5ndWFnZTogJ3htbCcsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC88XFw/KHBocHw9KT8vLFxuICAgICAgICBlbmQ6IC9cXD8+LyxcbiAgICAgICAgc3ViTGFuZ3VhZ2U6ICdwaHAnLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIC8vIFdlIGRvbid0IHdhbnQgdGhlIHBocCBjbG9zaW5nIHRhZyA/PiB0byBjbG9zZSB0aGUgUEhQIGJsb2NrIHdoZW5cbiAgICAgICAgICAvLyBpbnNpZGUgYW55IG9mIHRoZSBmb2xsb3dpbmcgYmxvY2tzOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiAnL1xcXFwqJyxcbiAgICAgICAgICAgIGVuZDogJ1xcXFwqLycsXG4gICAgICAgICAgICBza2lwOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogJ2JcIicsXG4gICAgICAgICAgICBlbmQ6ICdcIicsXG4gICAgICAgICAgICBza2lwOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogJ2JcXCcnLFxuICAgICAgICAgICAgZW5kOiAnXFwnJyxcbiAgICAgICAgICAgIHNraXA6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIGhsanMuaW5oZXJpdChobGpzLkFQT1NfU1RSSU5HX01PREUsIHtcbiAgICAgICAgICAgIGlsbGVnYWw6IG51bGwsXG4gICAgICAgICAgICBjbGFzc05hbWU6IG51bGwsXG4gICAgICAgICAgICBjb250YWluczogbnVsbCxcbiAgICAgICAgICAgIHNraXA6IHRydWVcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBobGpzLmluaGVyaXQoaGxqcy5RVU9URV9TVFJJTkdfTU9ERSwge1xuICAgICAgICAgICAgaWxsZWdhbDogbnVsbCxcbiAgICAgICAgICAgIGNsYXNzTmFtZTogbnVsbCxcbiAgICAgICAgICAgIGNvbnRhaW5zOiBudWxsLFxuICAgICAgICAgICAgc2tpcDogdHJ1ZVxuICAgICAgICAgIH0pXG4gICAgICAgIF1cbiAgICAgIH1cbiAgICBdXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcGhwVGVtcGxhdGU7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2952\n")},2981:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _get_active_file__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(2065);\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6442);\n\n\nconst subject2view = /* @__PURE__ */ new Map();\nconst view2subject = /* @__PURE__ */ new Map();\nconst views = {\n has: (subject) => subject2view.has(subject),\n get: (msv) => msv instanceof _view__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A ? view2subject.get(msv) : subject2view.get(msv),\n set(subject, view) {\n views.delete(view);\n views.delete(subject);\n subject2view.set(subject, view);\n view2subject.set(view, subject);\n view.register(() => views.delete(view));\n },\n delete(msv) {\n if (msv instanceof _view__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A) {\n const view = msv;\n const subject = view2subject.get(view);\n view2subject.delete(view);\n subject2view.delete(subject);\n } else {\n const subject = msv;\n const view = subject2view.get(subject);\n view2subject.delete(view);\n subject2view.delete(subject);\n }\n },\n renderAll() {\n subject2view.forEach((view, subject) => {\n const pinned = subject !== "unpinned";\n const file = pinned ? subject : (0,_get_active_file__WEBPACK_IMPORTED_MODULE_1__/* .getActiveFile */ .R)();\n if (file) view.render(file);\n });\n },\n getByPath(path) {\n for (const [view, subject] of view2subject) {\n if (subject === "unpinned") continue;\n const file = subject;\n if (file && file.path === path)\n return { view, file };\n }\n }\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (views);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjk4MS5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUE4QjtBQUVIO0FBSzNCLE1BQU0sZUFBZSxvQkFBSSxJQUFvQztBQUM3RCxNQUFNLGVBQWUsb0JBQUksSUFBb0M7QUFFN0QsTUFBTSxRQUFRO0FBQUEsRUFDWixLQUFLLENBQUMsWUFBNEIsYUFBYSxJQUFJLE9BQU87QUFBQSxFQUMxRCxLQUFLLENBQThDLFFBQ2pELGVBQWUsc0RBQWMsR0FDZCxhQUFhLElBQUksR0FBRyxJQUNwQixhQUFhLElBQUksR0FBRztBQUFBLEVBQ3JDLElBQUksU0FBeUIsTUFBc0I7QUFDakQsVUFBTSxPQUFPLElBQUk7QUFDakIsVUFBTSxPQUFPLE9BQU87QUFDcEIsaUJBQWEsSUFBSSxTQUFTLElBQUk7QUFDOUIsaUJBQWEsSUFBSSxNQUFNLE9BQU87QUFFOUIsU0FBSyxTQUFTLE1BQU8sTUFBTSxPQUFPLElBQUksQ0FBQztBQUFBLEVBQ3pDO0FBQUEsRUFDQSxPQUFPLEtBQXNDO0FBQzNDLFFBQUksZUFBZSxzREFBYyxFQUFFO0FBQ2pDLFlBQU0sT0FBTztBQUNiLFlBQU0sVUFBVSxhQUFhLElBQUksSUFBSTtBQUNyQyxtQkFBYSxPQUFPLElBQUk7QUFDeEIsbUJBQWEsT0FBTyxPQUFPO0FBQUEsSUFDN0IsT0FDSztBQUNILFlBQU0sVUFBVTtBQUNoQixZQUFNLE9BQU8sYUFBYSxJQUFJLE9BQU87QUFDckMsbUJBQWEsT0FBTyxJQUFJO0FBQ3hCLG1CQUFhLE9BQU8sT0FBTztBQUFBLElBQzdCO0FBQUEsRUFDRjtBQUFBLEVBRUEsWUFBWTtBQUNWLGlCQUFhLFFBQVEsQ0FBQyxNQUFNLFlBQVk7QUFDdEMsWUFBTSxTQUFTLFlBQVk7QUFDM0IsWUFBTSxPQUFPLFNBQVMsVUFBVSx3RUFBYSxDQUFDO0FBQzlDLFVBQUksS0FBTSxNQUFLLE9BQU8sSUFBSTtBQUFBLElBQzVCLENBQUM7QUFBQSxFQUNIO0FBQUEsRUFFQSxVQUFVLE1BQWM7QUFDdEIsZUFBVyxDQUFDLE1BQU0sT0FBTyxLQUFLLGNBQWM7QUFDMUMsVUFBSSxZQUFZLFdBQVk7QUFDNUIsWUFBTSxPQUFPO0FBQ2IsVUFBSSxRQUFRLEtBQUssU0FBUztBQUN4QixlQUFPLEVBQUUsTUFBTSxLQUFLO0FBQUEsSUFDeEI7QUFBQSxFQUNGO0FBQ0Y7QUFFQSxpRUFBZSxLQUFLIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vb2JzaWRpYW4tbWluZG1hcC1uZXh0Z2VuLy4vc3JjL3ZpZXdzL3ZpZXdzLnRzP2UyNGUiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2V0QWN0aXZlRmlsZSB9IGZyb20gJy4vZ2V0LWFjdGl2ZS1maWxlJ1xuaW1wb3J0IHsgTWluZG1hcFN1YmplY3QgfSBmcm9tICcuL2xheW91dC1tYW5hZ2VyJ1xuaW1wb3J0IE1pbmRtYXBUYWJWaWV3IGZyb20gJy4vdmlldydcblxudHlwZSBHZXQ8TVNWIGV4dGVuZHMgTWluZG1hcFN1YmplY3QgfCBNaW5kbWFwVGFiVmlldz4gPSBNU1YgZXh0ZW5kcyBNaW5kbWFwVGFiVmlldyA/IE1pbmRtYXBTdWJqZWN0IDogTWluZG1hcFRhYlZpZXdcblxuXG5jb25zdCBzdWJqZWN0MnZpZXcgPSBuZXcgTWFwPE1pbmRtYXBTdWJqZWN0LCBNaW5kbWFwVGFiVmlldz4oKVxuY29uc3QgdmlldzJzdWJqZWN0ID0gbmV3IE1hcDxNaW5kbWFwVGFiVmlldywgTWluZG1hcFN1YmplY3Q+KClcblxuY29uc3Qgdmlld3MgPSB7XG4gIGhhczogKHN1YmplY3Q6IE1pbmRtYXBTdWJqZWN0KSA9PiBzdWJqZWN0MnZpZXcuaGFzKHN1YmplY3QpLFxuICBnZXQ6IDxNU1YgZXh0ZW5kcyBNaW5kbWFwU3ViamVjdCB8IE1pbmRtYXBUYWJWaWV3Pihtc3Y6IE1TVik6IEdldDxNU1Y+IHwgdW5kZWZpbmVkID0+XG4gICAgbXN2IGluc3RhbmNlb2YgTWluZG1hcFRhYlZpZXdcbiAgICAgID8gPEdldDxNU1Y+PiB2aWV3MnN1YmplY3QuZ2V0KG1zdilcbiAgICAgIDogPEdldDxNU1Y+PiBzdWJqZWN0MnZpZXcuZ2V0KG1zdiksXG4gIHNldChzdWJqZWN0OiBNaW5kbWFwU3ViamVjdCwgdmlldzogTWluZG1hcFRhYlZpZXcpIHtcbiAgICB2aWV3cy5kZWxldGUodmlldylcbiAgICB2aWV3cy5kZWxldGUoc3ViamVjdClcbiAgICBzdWJqZWN0MnZpZXcuc2V0KHN1YmplY3QsIHZpZXcpXG4gICAgdmlldzJzdWJqZWN0LnNldCh2aWV3LCBzdWJqZWN0KVxuXG4gICAgdmlldy5yZWdpc3RlcigoKSA9PiAgdmlld3MuZGVsZXRlKHZpZXcpKVxuICB9LFxuICBkZWxldGUobXN2OiBNaW5kbWFwU3ViamVjdCB8IE1pbmRtYXBUYWJWaWV3KSB7XG4gICAgaWYgKG1zdiBpbnN0YW5jZW9mIE1pbmRtYXBUYWJWaWV3KSB7XG4gICAgICBjb25zdCB2aWV3ID0gbXN2XG4gICAgICBjb25zdCBzdWJqZWN0ID0gdmlldzJzdWJqZWN0LmdldCh2aWV3KSFcbiAgICAgIHZpZXcyc3ViamVjdC5kZWxldGUodmlldylcbiAgICAgIHN1YmplY3Qydmlldy5kZWxldGUoc3ViamVjdClcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBjb25zdCBzdWJqZWN0ID0gbXN2XG4gICAgICBjb25zdCB2aWV3ID0gc3ViamVjdDJ2aWV3LmdldChzdWJqZWN0KSFcbiAgICAgIHZpZXcyc3ViamVjdC5kZWxldGUodmlldylcbiAgICAgIHN1YmplY3Qydmlldy5kZWxldGUoc3ViamVjdClcbiAgICB9XG4gIH0sXG5cbiAgcmVuZGVyQWxsKCkge1xuICAgIHN1YmplY3Qydmlldy5mb3JFYWNoKCh2aWV3LCBzdWJqZWN0KSA9PiB7XG4gICAgICBjb25zdCBwaW5uZWQgPSBzdWJqZWN0ICE9PSAndW5waW5uZWQnXG4gICAgICBjb25zdCBmaWxlID0gcGlubmVkID8gc3ViamVjdCA6IGdldEFjdGl2ZUZpbGUoKVxuICAgICAgaWYgKGZpbGUpIHZpZXcucmVuZGVyKGZpbGUpXG4gICAgfSlcbiAgfSxcblxuICBnZXRCeVBhdGgocGF0aDogc3RyaW5nKSB7XG4gICAgZm9yIChjb25zdCBbdmlldywgc3ViamVjdF0gb2YgdmlldzJzdWJqZWN0KSB7XG4gICAgICBpZiAoc3ViamVjdCA9PT0gJ3VucGlubmVkJykgY29udGludWVcbiAgICAgIGNvbnN0IGZpbGUgPSBzdWJqZWN0XG4gICAgICBpZiAoZmlsZSAmJiBmaWxlLnBhdGggPT09IHBhdGgpXG4gICAgICAgIHJldHVybiB7IHZpZXcsIGZpbGUgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCB2aWV3c1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2981\n')},3012:(__unused_webpack_module,exports,__webpack_require__)=>{"use strict";eval("\n\nvar stringifyCollection = __webpack_require__(3562);\nvar addPairToJSMap = __webpack_require__(5458);\nvar Collection = __webpack_require__(5107);\nvar identity = __webpack_require__(9141);\nvar Pair = __webpack_require__(5779);\nvar Scalar = __webpack_require__(3923);\n\nfunction findPair(items, key) {\n const k = identity.isScalar(key) ? key.value : key;\n for (const it of items) {\n if (identity.isPair(it)) {\n if (it.key === key || it.key === k)\n return it;\n if (identity.isScalar(it.key) && it.key.value === k)\n return it;\n }\n }\n return undefined;\n}\nclass YAMLMap extends Collection.Collection {\n static get tagName() {\n return 'tag:yaml.org,2002:map';\n }\n constructor(schema) {\n super(identity.MAP, schema);\n this.items = [];\n }\n /**\n * A generic collection parsing method that can be extended\n * to other node classes that inherit from YAMLMap\n */\n static from(schema, obj, ctx) {\n const { keepUndefined, replacer } = ctx;\n const map = new this(schema);\n const add = (key, value) => {\n if (typeof replacer === 'function')\n value = replacer.call(obj, key, value);\n else if (Array.isArray(replacer) && !replacer.includes(key))\n return;\n if (value !== undefined || keepUndefined)\n map.items.push(Pair.createPair(key, value, ctx));\n };\n if (obj instanceof Map) {\n for (const [key, value] of obj)\n add(key, value);\n }\n else if (obj && typeof obj === 'object') {\n for (const key of Object.keys(obj))\n add(key, obj[key]);\n }\n if (typeof schema.sortMapEntries === 'function') {\n map.items.sort(schema.sortMapEntries);\n }\n return map;\n }\n /**\n * Adds a value to the collection.\n *\n * @param overwrite - If not set `true`, using a key that is already in the\n * collection will throw. Otherwise, overwrites the previous value.\n */\n add(pair, overwrite) {\n let _pair;\n if (identity.isPair(pair))\n _pair = pair;\n else if (!pair || typeof pair !== 'object' || !('key' in pair)) {\n // In TypeScript, this never happens.\n _pair = new Pair.Pair(pair, pair?.value);\n }\n else\n _pair = new Pair.Pair(pair.key, pair.value);\n const prev = findPair(this.items, _pair.key);\n const sortEntries = this.schema?.sortMapEntries;\n if (prev) {\n if (!overwrite)\n throw new Error(`Key ${_pair.key} already set`);\n // For scalars, keep the old node & its comments and anchors\n if (identity.isScalar(prev.value) && Scalar.isScalarValue(_pair.value))\n prev.value.value = _pair.value;\n else\n prev.value = _pair.value;\n }\n else if (sortEntries) {\n const i = this.items.findIndex(item => sortEntries(_pair, item) < 0);\n if (i === -1)\n this.items.push(_pair);\n else\n this.items.splice(i, 0, _pair);\n }\n else {\n this.items.push(_pair);\n }\n }\n delete(key) {\n const it = findPair(this.items, key);\n if (!it)\n return false;\n const del = this.items.splice(this.items.indexOf(it), 1);\n return del.length > 0;\n }\n get(key, keepScalar) {\n const it = findPair(this.items, key);\n const node = it?.value;\n return (!keepScalar && identity.isScalar(node) ? node.value : node) ?? undefined;\n }\n has(key) {\n return !!findPair(this.items, key);\n }\n set(key, value) {\n this.add(new Pair.Pair(key, value), true);\n }\n /**\n * @param ctx - Conversion context, originally set in Document#toJS()\n * @param {Class} Type - If set, forces the returned collection type\n * @returns Instance of Type, Map, or Object\n */\n toJSON(_, ctx, Type) {\n const map = Type ? new Type() : ctx?.mapAsMap ? new Map() : {};\n if (ctx?.onCreate)\n ctx.onCreate(map);\n for (const item of this.items)\n addPairToJSMap.addPairToJSMap(ctx, map, item);\n return map;\n }\n toString(ctx, onComment, onChompKeep) {\n if (!ctx)\n return JSON.stringify(this);\n for (const item of this.items) {\n if (!identity.isPair(item))\n throw new Error(`Map items must all be pairs; found ${JSON.stringify(item)} instead`);\n }\n if (!ctx.allNullValues && this.hasAllNullValues(false))\n ctx = Object.assign({}, ctx, { allNullValues: true });\n return stringifyCollection.stringifyCollection(this, ctx, {\n blockItemPrefix: '',\n flowChars: { start: '{', end: '}' },\n itemIndent: ctx.indent || '',\n onChompKeep,\n onComment\n });\n }\n}\n\nexports.YAMLMap = YAMLMap;\nexports.findPair = findPair;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzAxMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYiwwQkFBMEIsbUJBQU8sQ0FBQyxJQUFxQztBQUN2RSxxQkFBcUIsbUJBQU8sQ0FBQyxJQUFxQjtBQUNsRCxpQkFBaUIsbUJBQU8sQ0FBQyxJQUFpQjtBQUMxQyxlQUFlLG1CQUFPLENBQUMsSUFBZTtBQUN0QyxXQUFXLG1CQUFPLENBQUMsSUFBVztBQUM5QixhQUFhLG1CQUFPLENBQUMsSUFBYTs7QUFFbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsMEJBQTBCO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVDQUF1QyxXQUFXO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhEQUE4RCxRQUFRLHNCQUFzQjtBQUM1RjtBQUNBO0FBQ0Esa0NBQWtDLFNBQVMscUJBQXFCO0FBQ2hFO0FBQ0E7QUFDQSx5QkFBeUIsU0FBUyxVQUFVLEdBQUc7QUFDL0M7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUEsZUFBZTtBQUNmLGdCQUFnQiIsInNvdXJjZXMiOlsid2VicGFjazovL29ic2lkaWFuLW1pbmRtYXAtbmV4dGdlbi8uL25vZGVfbW9kdWxlcy8ucG5wbS95YW1sQDIuOC4wL25vZGVfbW9kdWxlcy95YW1sL2Rpc3Qvbm9kZXMvWUFNTE1hcC5qcz80ZGY4Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHN0cmluZ2lmeUNvbGxlY3Rpb24gPSByZXF1aXJlKCcuLi9zdHJpbmdpZnkvc3RyaW5naWZ5Q29sbGVjdGlvbi5qcycpO1xudmFyIGFkZFBhaXJUb0pTTWFwID0gcmVxdWlyZSgnLi9hZGRQYWlyVG9KU01hcC5qcycpO1xudmFyIENvbGxlY3Rpb24gPSByZXF1aXJlKCcuL0NvbGxlY3Rpb24uanMnKTtcbnZhciBpZGVudGl0eSA9IHJlcXVpcmUoJy4vaWRlbnRpdHkuanMnKTtcbnZhciBQYWlyID0gcmVxdWlyZSgnLi9QYWlyLmpzJyk7XG52YXIgU2NhbGFyID0gcmVxdWlyZSgnLi9TY2FsYXIuanMnKTtcblxuZnVuY3Rpb24gZmluZFBhaXIoaXRlbXMsIGtleSkge1xuICAgIGNvbnN0IGsgPSBpZGVudGl0eS5pc1NjYWxhcihrZXkpID8ga2V5LnZhbHVlIDoga2V5O1xuICAgIGZvciAoY29uc3QgaXQgb2YgaXRlbXMpIHtcbiAgICAgICAgaWYgKGlkZW50aXR5LmlzUGFpcihpdCkpIHtcbiAgICAgICAgICAgIGlmIChpdC5rZXkgPT09IGtleSB8fCBpdC5rZXkgPT09IGspXG4gICAgICAgICAgICAgICAgcmV0dXJuIGl0O1xuICAgICAgICAgICAgaWYgKGlkZW50aXR5LmlzU2NhbGFyKGl0LmtleSkgJiYgaXQua2V5LnZhbHVlID09PSBrKVxuICAgICAgICAgICAgICAgIHJldHVybiBpdDtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufVxuY2xhc3MgWUFNTE1hcCBleHRlbmRzIENvbGxlY3Rpb24uQ29sbGVjdGlvbiB7XG4gICAgc3RhdGljIGdldCB0YWdOYW1lKCkge1xuICAgICAgICByZXR1cm4gJ3RhZzp5YW1sLm9yZywyMDAyOm1hcCc7XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKHNjaGVtYSkge1xuICAgICAgICBzdXBlcihpZGVudGl0eS5NQVAsIHNjaGVtYSk7XG4gICAgICAgIHRoaXMuaXRlbXMgPSBbXTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQSBnZW5lcmljIGNvbGxlY3Rpb24gcGFyc2luZyBtZXRob2QgdGhhdCBjYW4gYmUgZXh0ZW5kZWRcbiAgICAgKiB0byBvdGhlciBub2RlIGNsYXNzZXMgdGhhdCBpbmhlcml0IGZyb20gWUFNTE1hcFxuICAgICAqL1xuICAgIHN0YXRpYyBmcm9tKHNjaGVtYSwgb2JqLCBjdHgpIHtcbiAgICAgICAgY29uc3QgeyBrZWVwVW5kZWZpbmVkLCByZXBsYWNlciB9ID0gY3R4O1xuICAgICAgICBjb25zdCBtYXAgPSBuZXcgdGhpcyhzY2hlbWEpO1xuICAgICAgICBjb25zdCBhZGQgPSAoa2V5LCB2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiByZXBsYWNlciA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHJlcGxhY2VyLmNhbGwob2JqLCBrZXksIHZhbHVlKTtcbiAgICAgICAgICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkocmVwbGFjZXIpICYmICFyZXBsYWNlci5pbmNsdWRlcyhrZXkpKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkIHx8IGtlZXBVbmRlZmluZWQpXG4gICAgICAgICAgICAgICAgbWFwLml0ZW1zLnB1c2goUGFpci5jcmVhdGVQYWlyKGtleSwgdmFsdWUsIGN0eCkpO1xuICAgICAgICB9O1xuICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgTWFwKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBvYmopXG4gICAgICAgICAgICAgICAgYWRkKGtleSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG9iaiAmJiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMob2JqKSlcbiAgICAgICAgICAgICAgICBhZGQoa2V5LCBvYmpba2V5XSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBzY2hlbWEuc29ydE1hcEVudHJpZXMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIG1hcC5pdGVtcy5zb3J0KHNjaGVtYS5zb3J0TWFwRW50cmllcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1hcDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkcyBhIHZhbHVlIHRvIHRoZSBjb2xsZWN0aW9uLlxuICAgICAqXG4gICAgICogQHBhcmFtIG92ZXJ3cml0ZSAtIElmIG5vdCBzZXQgYHRydWVgLCB1c2luZyBhIGtleSB0aGF0IGlzIGFscmVhZHkgaW4gdGhlXG4gICAgICogICBjb2xsZWN0aW9uIHdpbGwgdGhyb3cuIE90aGVyd2lzZSwgb3ZlcndyaXRlcyB0aGUgcHJldmlvdXMgdmFsdWUuXG4gICAgICovXG4gICAgYWRkKHBhaXIsIG92ZXJ3cml0ZSkge1xuICAgICAgICBsZXQgX3BhaXI7XG4gICAgICAgIGlmIChpZGVudGl0eS5pc1BhaXIocGFpcikpXG4gICAgICAgICAgICBfcGFpciA9IHBhaXI7XG4gICAgICAgIGVsc2UgaWYgKCFwYWlyIHx8IHR5cGVvZiBwYWlyICE9PSAnb2JqZWN0JyB8fCAhKCdrZXknIGluIHBhaXIpKSB7XG4gICAgICAgICAgICAvLyBJbiBUeXBlU2NyaXB0LCB0aGlzIG5ldmVyIGhhcHBlbnMuXG4gICAgICAgICAgICBfcGFpciA9IG5ldyBQYWlyLlBhaXIocGFpciwgcGFpcj8udmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIF9wYWlyID0gbmV3IFBhaXIuUGFpcihwYWlyLmtleSwgcGFpci52YWx1ZSk7XG4gICAgICAgIGNvbnN0IHByZXYgPSBmaW5kUGFpcih0aGlzLml0ZW1zLCBfcGFpci5rZXkpO1xuICAgICAgICBjb25zdCBzb3J0RW50cmllcyA9IHRoaXMuc2NoZW1hPy5zb3J0TWFwRW50cmllcztcbiAgICAgICAgaWYgKHByZXYpIHtcbiAgICAgICAgICAgIGlmICghb3ZlcndyaXRlKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgS2V5ICR7X3BhaXIua2V5fSBhbHJlYWR5IHNldGApO1xuICAgICAgICAgICAgLy8gRm9yIHNjYWxhcnMsIGtlZXAgdGhlIG9sZCBub2RlICYgaXRzIGNvbW1lbnRzIGFuZCBhbmNob3JzXG4gICAgICAgICAgICBpZiAoaWRlbnRpdHkuaXNTY2FsYXIocHJldi52YWx1ZSkgJiYgU2NhbGFyLmlzU2NhbGFyVmFsdWUoX3BhaXIudmFsdWUpKVxuICAgICAgICAgICAgICAgIHByZXYudmFsdWUudmFsdWUgPSBfcGFpci52YWx1ZTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBwcmV2LnZhbHVlID0gX3BhaXIudmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoc29ydEVudHJpZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGkgPSB0aGlzLml0ZW1zLmZpbmRJbmRleChpdGVtID0+IHNvcnRFbnRyaWVzKF9wYWlyLCBpdGVtKSA8IDApO1xuICAgICAgICAgICAgaWYgKGkgPT09IC0xKVxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXMucHVzaChfcGFpcik7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtcy5zcGxpY2UoaSwgMCwgX3BhaXIpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5pdGVtcy5wdXNoKF9wYWlyKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBkZWxldGUoa2V5KSB7XG4gICAgICAgIGNvbnN0IGl0ID0gZmluZFBhaXIodGhpcy5pdGVtcywga2V5KTtcbiAgICAgICAgaWYgKCFpdClcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgY29uc3QgZGVsID0gdGhpcy5pdGVtcy5zcGxpY2UodGhpcy5pdGVtcy5pbmRleE9mKGl0KSwgMSk7XG4gICAgICAgIHJldHVybiBkZWwubGVuZ3RoID4gMDtcbiAgICB9XG4gICAgZ2V0KGtleSwga2VlcFNjYWxhcikge1xuICAgICAgICBjb25zdCBpdCA9IGZpbmRQYWlyKHRoaXMuaXRlbXMsIGtleSk7XG4gICAgICAgIGNvbnN0IG5vZGUgPSBpdD8udmFsdWU7XG4gICAgICAgIHJldHVybiAoIWtlZXBTY2FsYXIgJiYgaWRlbnRpdHkuaXNTY2FsYXIobm9kZSkgPyBub2RlLnZhbHVlIDogbm9kZSkgPz8gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBoYXMoa2V5KSB7XG4gICAgICAgIHJldHVybiAhIWZpbmRQYWlyKHRoaXMuaXRlbXMsIGtleSk7XG4gICAgfVxuICAgIHNldChrZXksIHZhbHVlKSB7XG4gICAgICAgIHRoaXMuYWRkKG5ldyBQYWlyLlBhaXIoa2V5LCB2YWx1ZSksIHRydWUpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAcGFyYW0gY3R4IC0gQ29udmVyc2lvbiBjb250ZXh0LCBvcmlnaW5hbGx5IHNldCBpbiBEb2N1bWVudCN0b0pTKClcbiAgICAgKiBAcGFyYW0ge0NsYXNzfSBUeXBlIC0gSWYgc2V0LCBmb3JjZXMgdGhlIHJldHVybmVkIGNvbGxlY3Rpb24gdHlwZVxuICAgICAqIEByZXR1cm5zIEluc3RhbmNlIG9mIFR5cGUsIE1hcCwgb3IgT2JqZWN0XG4gICAgICovXG4gICAgdG9KU09OKF8sIGN0eCwgVHlwZSkge1xuICAgICAgICBjb25zdCBtYXAgPSBUeXBlID8gbmV3IFR5cGUoKSA6IGN0eD8ubWFwQXNNYXAgPyBuZXcgTWFwKCkgOiB7fTtcbiAgICAgICAgaWYgKGN0eD8ub25DcmVhdGUpXG4gICAgICAgICAgICBjdHgub25DcmVhdGUobWFwKTtcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHRoaXMuaXRlbXMpXG4gICAgICAgICAgICBhZGRQYWlyVG9KU01hcC5hZGRQYWlyVG9KU01hcChjdHgsIG1hcCwgaXRlbSk7XG4gICAgICAgIHJldHVybiBtYXA7XG4gICAgfVxuICAgIHRvU3RyaW5nKGN0eCwgb25Db21tZW50LCBvbkNob21wS2VlcCkge1xuICAgICAgICBpZiAoIWN0eClcbiAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh0aGlzKTtcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHRoaXMuaXRlbXMpIHtcbiAgICAgICAgICAgIGlmICghaWRlbnRpdHkuaXNQYWlyKGl0ZW0pKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTWFwIGl0ZW1zIG11c3QgYWxsIGJlIHBhaXJzOyBmb3VuZCAke0pTT04uc3RyaW5naWZ5KGl0ZW0pfSBpbnN0ZWFkYCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFjdHguYWxsTnVsbFZhbHVlcyAmJiB0aGlzLmhhc0FsbE51bGxWYWx1ZXMoZmFsc2UpKVxuICAgICAgICAgICAgY3R4ID0gT2JqZWN0LmFzc2lnbih7fSwgY3R4LCB7IGFsbE51bGxWYWx1ZXM6IHRydWUgfSk7XG4gICAgICAgIHJldHVybiBzdHJpbmdpZnlDb2xsZWN0aW9uLnN0cmluZ2lmeUNvbGxlY3Rpb24odGhpcywgY3R4LCB7XG4gICAgICAgICAgICBibG9ja0l0ZW1QcmVmaXg6ICcnLFxuICAgICAgICAgICAgZmxvd0NoYXJzOiB7IHN0YXJ0OiAneycsIGVuZDogJ30nIH0sXG4gICAgICAgICAgICBpdGVtSW5kZW50OiBjdHguaW5kZW50IHx8ICcnLFxuICAgICAgICAgICAgb25DaG9tcEtlZXAsXG4gICAgICAgICAgICBvbkNvbW1lbnRcbiAgICAgICAgfSk7XG4gICAgfVxufVxuXG5leHBvcnRzLllBTUxNYXAgPSBZQU1MTWFwO1xuZXhwb3J0cy5maW5kUGFpciA9IGZpbmRQYWlyO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///3012\n")},3070:module=>{eval("/*\nLanguage: Oxygene\nAuthor: Carlo Kok \nDescription: Oxygene is built on the foundation of Object Pascal, revamped and extended to be a modern language for the twenty-first century.\nWebsite: https://www.elementscompiler.com/elements/default.aspx\nCategory: build-system\n*/\n\nfunction oxygene(hljs) {\n const OXYGENE_KEYWORDS = {\n $pattern: /\\.?\\w+/,\n keyword:\n 'abstract add and array as asc aspect assembly async begin break block by case class concat const copy constructor continue '\n + 'create default delegate desc distinct div do downto dynamic each else empty end ensure enum equals event except exit extension external false '\n + 'final finalize finalizer finally flags for forward from function future global group has if implementation implements implies in index inherited '\n + 'inline interface into invariants is iterator join locked locking loop matching method mod module namespace nested new nil not notify nullable of '\n + 'old on operator or order out override parallel params partial pinned private procedure property protected public queryable raise read readonly '\n + 'record reintroduce remove repeat require result reverse sealed select self sequence set shl shr skip static step soft take then to true try tuple '\n + 'type union unit unsafe until uses using var virtual raises volatile where while with write xor yield await mapped deprecated stdcall cdecl pascal '\n + 'register safecall overload library platform reference packed strict published autoreleasepool selector strong weak unretained'\n };\n const CURLY_COMMENT = hljs.COMMENT(\n /\\{/,\n /\\}/,\n { relevance: 0 }\n );\n const PAREN_COMMENT = hljs.COMMENT(\n '\\\\(\\\\*',\n '\\\\*\\\\)',\n { relevance: 10 }\n );\n const STRING = {\n className: 'string',\n begin: '\\'',\n end: '\\'',\n contains: [ { begin: '\\'\\'' } ]\n };\n const CHAR_STRING = {\n className: 'string',\n begin: '(#\\\\d+)+'\n };\n const FUNCTION = {\n beginKeywords: 'function constructor destructor procedure method',\n end: '[:;]',\n keywords: 'function constructor|10 destructor|10 procedure|10 method|10',\n contains: [\n hljs.inherit(hljs.TITLE_MODE, { scope: \"title.function\" }),\n {\n className: 'params',\n begin: '\\\\(',\n end: '\\\\)',\n keywords: OXYGENE_KEYWORDS,\n contains: [\n STRING,\n CHAR_STRING\n ]\n },\n CURLY_COMMENT,\n PAREN_COMMENT\n ]\n };\n\n const SEMICOLON = {\n scope: \"punctuation\",\n match: /;/,\n relevance: 0\n };\n\n return {\n name: 'Oxygene',\n case_insensitive: true,\n keywords: OXYGENE_KEYWORDS,\n illegal: '(\"|\\\\$[G-Zg-z]|\\\\/\\\\*||->)',\n contains: [\n CURLY_COMMENT,\n PAREN_COMMENT,\n hljs.C_LINE_COMMENT_MODE,\n STRING,\n CHAR_STRING,\n hljs.NUMBER_MODE,\n FUNCTION,\n SEMICOLON\n ]\n };\n}\n\nmodule.exports = oxygene;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzA3MC5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLE9BQU87QUFDUCxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQixnQkFBZ0I7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLHNDQUFzQyx5QkFBeUI7QUFDL0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vb2JzaWRpYW4tbWluZG1hcC1uZXh0Z2VuLy4vbm9kZV9tb2R1bGVzLy5wbnBtL2hpZ2hsaWdodC5qc0AxMS4xMS4xL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9veHlnZW5lLmpzPzVhOTEiXSwic291cmNlc0NvbnRlbnQiOlsiLypcbkxhbmd1YWdlOiBPeHlnZW5lXG5BdXRob3I6IENhcmxvIEtvayA8Y2tAcmVtb2JqZWN0cy5jb20+XG5EZXNjcmlwdGlvbjogT3h5Z2VuZSBpcyBidWlsdCBvbiB0aGUgZm91bmRhdGlvbiBvZiBPYmplY3QgUGFzY2FsLCByZXZhbXBlZCBhbmQgZXh0ZW5kZWQgdG8gYmUgYSBtb2Rlcm4gbGFuZ3VhZ2UgZm9yIHRoZSB0d2VudHktZmlyc3QgY2VudHVyeS5cbldlYnNpdGU6IGh0dHBzOi8vd3d3LmVsZW1lbnRzY29tcGlsZXIuY29tL2VsZW1lbnRzL2RlZmF1bHQuYXNweFxuQ2F0ZWdvcnk6IGJ1aWxkLXN5c3RlbVxuKi9cblxuZnVuY3Rpb24gb3h5Z2VuZShobGpzKSB7XG4gIGNvbnN0IE9YWUdFTkVfS0VZV09SRFMgPSB7XG4gICAgJHBhdHRlcm46IC9cXC4/XFx3Ky8sXG4gICAga2V5d29yZDpcbiAgICAgICdhYnN0cmFjdCBhZGQgYW5kIGFycmF5IGFzIGFzYyBhc3BlY3QgYXNzZW1ibHkgYXN5bmMgYmVnaW4gYnJlYWsgYmxvY2sgYnkgY2FzZSBjbGFzcyBjb25jYXQgY29uc3QgY29weSBjb25zdHJ1Y3RvciBjb250aW51ZSAnXG4gICAgICArICdjcmVhdGUgZGVmYXVsdCBkZWxlZ2F0ZSBkZXNjIGRpc3RpbmN0IGRpdiBkbyBkb3dudG8gZHluYW1pYyBlYWNoIGVsc2UgZW1wdHkgZW5kIGVuc3VyZSBlbnVtIGVxdWFscyBldmVudCBleGNlcHQgZXhpdCBleHRlbnNpb24gZXh0ZXJuYWwgZmFsc2UgJ1xuICAgICAgKyAnZmluYWwgZmluYWxpemUgZmluYWxpemVyIGZpbmFsbHkgZmxhZ3MgZm9yIGZvcndhcmQgZnJvbSBmdW5jdGlvbiBmdXR1cmUgZ2xvYmFsIGdyb3VwIGhhcyBpZiBpbXBsZW1lbnRhdGlvbiBpbXBsZW1lbnRzIGltcGxpZXMgaW4gaW5kZXggaW5oZXJpdGVkICdcbiAgICAgICsgJ2lubGluZSBpbnRlcmZhY2UgaW50byBpbnZhcmlhbnRzIGlzIGl0ZXJhdG9yIGpvaW4gbG9ja2VkIGxvY2tpbmcgbG9vcCBtYXRjaGluZyBtZXRob2QgbW9kIG1vZHVsZSBuYW1lc3BhY2UgbmVzdGVkIG5ldyBuaWwgbm90IG5vdGlmeSBudWxsYWJsZSBvZiAnXG4gICAgICArICdvbGQgb24gb3BlcmF0b3Igb3Igb3JkZXIgb3V0IG92ZXJyaWRlIHBhcmFsbGVsIHBhcmFtcyBwYXJ0aWFsIHBpbm5lZCBwcml2YXRlIHByb2NlZHVyZSBwcm9wZXJ0eSBwcm90ZWN0ZWQgcHVibGljIHF1ZXJ5YWJsZSByYWlzZSByZWFkIHJlYWRvbmx5ICdcbiAgICAgICsgJ3JlY29yZCByZWludHJvZHVjZSByZW1vdmUgcmVwZWF0IHJlcXVpcmUgcmVzdWx0IHJldmVyc2Ugc2VhbGVkIHNlbGVjdCBzZWxmIHNlcXVlbmNlIHNldCBzaGwgc2hyIHNraXAgc3RhdGljIHN0ZXAgc29mdCB0YWtlIHRoZW4gdG8gdHJ1ZSB0cnkgdHVwbGUgJ1xuICAgICAgKyAndHlwZSB1bmlvbiB1bml0IHVuc2FmZSB1bnRpbCB1c2VzIHVzaW5nIHZhciB2aXJ0dWFsIHJhaXNlcyB2b2xhdGlsZSB3aGVyZSB3aGlsZSB3aXRoIHdyaXRlIHhvciB5aWVsZCBhd2FpdCBtYXBwZWQgZGVwcmVjYXRlZCBzdGRjYWxsIGNkZWNsIHBhc2NhbCAnXG4gICAgICArICdyZWdpc3RlciBzYWZlY2FsbCBvdmVybG9hZCBsaWJyYXJ5IHBsYXRmb3JtIHJlZmVyZW5jZSBwYWNrZWQgc3RyaWN0IHB1Ymxpc2hlZCBhdXRvcmVsZWFzZXBvb2wgc2VsZWN0b3Igc3Ryb25nIHdlYWsgdW5yZXRhaW5lZCdcbiAgfTtcbiAgY29uc3QgQ1VSTFlfQ09NTUVOVCA9IGhsanMuQ09NTUVOVChcbiAgICAvXFx7LyxcbiAgICAvXFx9LyxcbiAgICB7IHJlbGV2YW5jZTogMCB9XG4gICk7XG4gIGNvbnN0IFBBUkVOX0NPTU1FTlQgPSBobGpzLkNPTU1FTlQoXG4gICAgJ1xcXFwoXFxcXConLFxuICAgICdcXFxcKlxcXFwpJyxcbiAgICB7IHJlbGV2YW5jZTogMTAgfVxuICApO1xuICBjb25zdCBTVFJJTkcgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICBiZWdpbjogJ1xcJycsXG4gICAgZW5kOiAnXFwnJyxcbiAgICBjb250YWluczogWyB7IGJlZ2luOiAnXFwnXFwnJyB9IF1cbiAgfTtcbiAgY29uc3QgQ0hBUl9TVFJJTkcgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICBiZWdpbjogJygjXFxcXGQrKSsnXG4gIH07XG4gIGNvbnN0IEZVTkNUSU9OID0ge1xuICAgIGJlZ2luS2V5d29yZHM6ICdmdW5jdGlvbiBjb25zdHJ1Y3RvciBkZXN0cnVjdG9yIHByb2NlZHVyZSBtZXRob2QnLFxuICAgIGVuZDogJ1s6O10nLFxuICAgIGtleXdvcmRzOiAnZnVuY3Rpb24gY29uc3RydWN0b3J8MTAgZGVzdHJ1Y3RvcnwxMCBwcm9jZWR1cmV8MTAgbWV0aG9kfDEwJyxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5pbmhlcml0KGhsanMuVElUTEVfTU9ERSwgeyBzY29wZTogXCJ0aXRsZS5mdW5jdGlvblwiIH0pLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdwYXJhbXMnLFxuICAgICAgICBiZWdpbjogJ1xcXFwoJyxcbiAgICAgICAgZW5kOiAnXFxcXCknLFxuICAgICAgICBrZXl3b3JkczogT1hZR0VORV9LRVlXT1JEUyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBTVFJJTkcsXG4gICAgICAgICAgQ0hBUl9TVFJJTkdcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIENVUkxZX0NPTU1FTlQsXG4gICAgICBQQVJFTl9DT01NRU5UXG4gICAgXVxuICB9O1xuXG4gIGNvbnN0IFNFTUlDT0xPTiA9IHtcbiAgICBzY29wZTogXCJwdW5jdHVhdGlvblwiLFxuICAgIG1hdGNoOiAvOy8sXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnT3h5Z2VuZScsXG4gICAgY2FzZV9pbnNlbnNpdGl2ZTogdHJ1ZSxcbiAgICBrZXl3b3JkczogT1hZR0VORV9LRVlXT1JEUyxcbiAgICBpbGxlZ2FsOiAnKFwifFxcXFwkW0ctWmctel18XFxcXC9cXFxcKnw8L3w9PnwtPiknLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBDVVJMWV9DT01NRU5ULFxuICAgICAgUEFSRU5fQ09NTUVOVCxcbiAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgIFNUUklORyxcbiAgICAgIENIQVJfU1RSSU5HLFxuICAgICAgaGxqcy5OVU1CRVJfTU9ERSxcbiAgICAgIEZVTkNUSU9OLFxuICAgICAgU0VNSUNPTE9OXG4gICAgXVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG94eWdlbmU7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3070\n")},3072:module=>{eval('/*\n Language: GraphQL\n Author: John Foster (GH jf990), and others\n Description: GraphQL is a query language for APIs\n Category: web, common\n*/\n\n/** @type LanguageFn */\nfunction graphql(hljs) {\n const regex = hljs.regex;\n const GQL_NAME = /[_A-Za-z][_0-9A-Za-z]*/;\n return {\n name: "GraphQL",\n aliases: [ "gql" ],\n case_insensitive: true,\n disableAutodetect: false,\n keywords: {\n keyword: [\n "query",\n "mutation",\n "subscription",\n "type",\n "input",\n "schema",\n "directive",\n "interface",\n "union",\n "scalar",\n "fragment",\n "enum",\n "on"\n ],\n literal: [\n "true",\n "false",\n "null"\n ]\n },\n contains: [\n hljs.HASH_COMMENT_MODE,\n hljs.QUOTE_STRING_MODE,\n hljs.NUMBER_MODE,\n {\n scope: "punctuation",\n match: /[.]{3}/,\n relevance: 0\n },\n {\n scope: "punctuation",\n begin: /[\\!\\(\\)\\:\\=\\[\\]\\{\\|\\}]{1}/,\n relevance: 0\n },\n {\n scope: "variable",\n begin: /\\$/,\n end: /\\W/,\n excludeEnd: true,\n relevance: 0\n },\n {\n scope: "meta",\n match: /@\\w+/,\n excludeEnd: true\n },\n {\n scope: "symbol",\n begin: regex.concat(GQL_NAME, regex.lookahead(/\\s*:/)),\n relevance: 0\n }\n ],\n illegal: [\n /[;<\']/,\n /BEGIN/\n ]\n };\n}\n\nmodule.exports = graphql;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzA3Mi5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixFQUFFO0FBQ3RCO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxpQ0FBaUMsSUFBSSxFQUFFLEVBQUU7QUFDekM7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vb2JzaWRpYW4tbWluZG1hcC1uZXh0Z2VuLy4vbm9kZV9tb2R1bGVzLy5wbnBtL2hpZ2hsaWdodC5qc0AxMS4xMS4xL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9ncmFwaHFsLmpzP2FjYWQiXSwic291cmNlc0NvbnRlbnQiOlsiLypcbiBMYW5ndWFnZTogR3JhcGhRTFxuIEF1dGhvcjogSm9obiBGb3N0ZXIgKEdIIGpmOTkwKSwgYW5kIG90aGVyc1xuIERlc2NyaXB0aW9uOiBHcmFwaFFMIGlzIGEgcXVlcnkgbGFuZ3VhZ2UgZm9yIEFQSXNcbiBDYXRlZ29yeTogd2ViLCBjb21tb25cbiovXG5cbi8qKiBAdHlwZSBMYW5ndWFnZUZuICovXG5mdW5jdGlvbiBncmFwaHFsKGhsanMpIHtcbiAgY29uc3QgcmVnZXggPSBobGpzLnJlZ2V4O1xuICBjb25zdCBHUUxfTkFNRSA9IC9bX0EtWmEtel1bXzAtOUEtWmEtel0qLztcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiBcIkdyYXBoUUxcIixcbiAgICBhbGlhc2VzOiBbIFwiZ3FsXCIgXSxcbiAgICBjYXNlX2luc2Vuc2l0aXZlOiB0cnVlLFxuICAgIGRpc2FibGVBdXRvZGV0ZWN0OiBmYWxzZSxcbiAgICBrZXl3b3Jkczoge1xuICAgICAga2V5d29yZDogW1xuICAgICAgICBcInF1ZXJ5XCIsXG4gICAgICAgIFwibXV0YXRpb25cIixcbiAgICAgICAgXCJzdWJzY3JpcHRpb25cIixcbiAgICAgICAgXCJ0eXBlXCIsXG4gICAgICAgIFwiaW5wdXRcIixcbiAgICAgICAgXCJzY2hlbWFcIixcbiAgICAgICAgXCJkaXJlY3RpdmVcIixcbiAgICAgICAgXCJpbnRlcmZhY2VcIixcbiAgICAgICAgXCJ1bmlvblwiLFxuICAgICAgICBcInNjYWxhclwiLFxuICAgICAgICBcImZyYWdtZW50XCIsXG4gICAgICAgIFwiZW51bVwiLFxuICAgICAgICBcIm9uXCJcbiAgICAgIF0sXG4gICAgICBsaXRlcmFsOiBbXG4gICAgICAgIFwidHJ1ZVwiLFxuICAgICAgICBcImZhbHNlXCIsXG4gICAgICAgIFwibnVsbFwiXG4gICAgICBdXG4gICAgfSxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5IQVNIX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICBobGpzLk5VTUJFUl9NT0RFLFxuICAgICAge1xuICAgICAgICBzY29wZTogXCJwdW5jdHVhdGlvblwiLFxuICAgICAgICBtYXRjaDogL1suXXszfS8sXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgc2NvcGU6IFwicHVuY3R1YXRpb25cIixcbiAgICAgICAgYmVnaW46IC9bXFwhXFwoXFwpXFw6XFw9XFxbXFxdXFx7XFx8XFx9XXsxfS8sXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgc2NvcGU6IFwidmFyaWFibGVcIixcbiAgICAgICAgYmVnaW46IC9cXCQvLFxuICAgICAgICBlbmQ6IC9cXFcvLFxuICAgICAgICBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHNjb3BlOiBcIm1ldGFcIixcbiAgICAgICAgbWF0Y2g6IC9AXFx3Ky8sXG4gICAgICAgIGV4Y2x1ZGVFbmQ6IHRydWVcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHNjb3BlOiBcInN5bWJvbFwiLFxuICAgICAgICBiZWdpbjogcmVnZXguY29uY2F0KEdRTF9OQU1FLCByZWdleC5sb29rYWhlYWQoL1xccyo6LykpLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH1cbiAgICBdLFxuICAgIGlsbGVnYWw6IFtcbiAgICAgIC9bOzwnXS8sXG4gICAgICAvQkVHSU4vXG4gICAgXVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdyYXBocWw7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3072\n')},3139:module=>{eval('/*\nLanguage: Apache config\nAuthor: Ruslan Keba \nContributors: Ivan Sagalaev \nWebsite: https://httpd.apache.org\nDescription: language definition for Apache configuration files (httpd.conf & .htaccess)\nCategory: config, web\nAudit: 2020\n*/\n\n/** @type LanguageFn */\nfunction apache(hljs) {\n const NUMBER_REF = {\n className: \'number\',\n begin: /[$%]\\d+/\n };\n const NUMBER = {\n className: \'number\',\n begin: /\\b\\d+/\n };\n const IP_ADDRESS = {\n className: "number",\n begin: /\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}(:\\d{1,5})?/\n };\n const PORT_NUMBER = {\n className: "number",\n begin: /:\\d{1,5}/\n };\n return {\n name: \'Apache config\',\n aliases: [ \'apacheconf\' ],\n case_insensitive: true,\n contains: [\n hljs.HASH_COMMENT_MODE,\n {\n className: \'section\',\n begin: /<\\/?/,\n end: />/,\n contains: [\n IP_ADDRESS,\n PORT_NUMBER,\n // low relevance prevents us from claming XML/HTML where this rule would\n // match strings inside of XML tags\n hljs.inherit(hljs.QUOTE_STRING_MODE, { relevance: 0 })\n ]\n },\n {\n className: \'attribute\',\n begin: /\\w+/,\n relevance: 0,\n // keywords aren’t needed for highlighting per se, they only boost relevance\n // for a very generally defined mode (starts with a word, ends with line-end\n keywords: { _: [\n "order",\n "deny",\n "allow",\n "setenv",\n "rewriterule",\n "rewriteengine",\n "rewritecond",\n "documentroot",\n "sethandler",\n "errordocument",\n "loadmodule",\n "options",\n "header",\n "listen",\n "serverroot",\n "servername"\n ] },\n starts: {\n end: /$/,\n relevance: 0,\n keywords: { literal: \'on off all deny allow\' },\n contains: [\n {\n scope: "punctuation",\n match: /\\\\\\n/\n },\n {\n className: \'meta\',\n begin: /\\s\\[/,\n end: /\\]$/\n },\n {\n className: \'variable\',\n begin: /[\\$%]\\{/,\n end: /\\}/,\n contains: [\n \'self\',\n NUMBER_REF\n ]\n },\n IP_ADDRESS,\n NUMBER,\n hljs.QUOTE_STRING_MODE\n ]\n }\n }\n ],\n illegal: /\\S/\n };\n}\n\nmodule.exports = apache;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzEzOS5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxJQUFJLEtBQUssSUFBSSxLQUFLLElBQUksS0FBSyxJQUFJLEtBQUssSUFBSTtBQUN2RDtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsSUFBSTtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlEQUFpRCxjQUFjO0FBQy9EO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQjtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQSxzQkFBc0Isa0NBQWtDO0FBQ3hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSw2QkFBNkI7QUFDN0Isc0JBQXNCO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vb2JzaWRpYW4tbWluZG1hcC1uZXh0Z2VuLy4vbm9kZV9tb2R1bGVzLy5wbnBtL2hpZ2hsaWdodC5qc0AxMS4xMS4xL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9hcGFjaGUuanM/NTZiNyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuTGFuZ3VhZ2U6IEFwYWNoZSBjb25maWdcbkF1dGhvcjogUnVzbGFuIEtlYmEgPHJ1a2ViYUBnbWFpbC5jb20+XG5Db250cmlidXRvcnM6IEl2YW4gU2FnYWxhZXYgPG1hbmlhY0Bzb2Z0d2FyZW1hbmlhY3Mub3JnPlxuV2Vic2l0ZTogaHR0cHM6Ly9odHRwZC5hcGFjaGUub3JnXG5EZXNjcmlwdGlvbjogbGFuZ3VhZ2UgZGVmaW5pdGlvbiBmb3IgQXBhY2hlIGNvbmZpZ3VyYXRpb24gZmlsZXMgKGh0dHBkLmNvbmYgJiAuaHRhY2Nlc3MpXG5DYXRlZ29yeTogY29uZmlnLCB3ZWJcbkF1ZGl0OiAyMDIwXG4qL1xuXG4vKiogQHR5cGUgTGFuZ3VhZ2VGbiAqL1xuZnVuY3Rpb24gYXBhY2hlKGhsanMpIHtcbiAgY29uc3QgTlVNQkVSX1JFRiA9IHtcbiAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgIGJlZ2luOiAvWyQlXVxcZCsvXG4gIH07XG4gIGNvbnN0IE5VTUJFUiA9IHtcbiAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgIGJlZ2luOiAvXFxiXFxkKy9cbiAgfTtcbiAgY29uc3QgSVBfQUREUkVTUyA9IHtcbiAgICBjbGFzc05hbWU6IFwibnVtYmVyXCIsXG4gICAgYmVnaW46IC9cXGR7MSwzfVxcLlxcZHsxLDN9XFwuXFxkezEsM31cXC5cXGR7MSwzfSg6XFxkezEsNX0pPy9cbiAgfTtcbiAgY29uc3QgUE9SVF9OVU1CRVIgPSB7XG4gICAgY2xhc3NOYW1lOiBcIm51bWJlclwiLFxuICAgIGJlZ2luOiAvOlxcZHsxLDV9L1xuICB9O1xuICByZXR1cm4ge1xuICAgIG5hbWU6ICdBcGFjaGUgY29uZmlnJyxcbiAgICBhbGlhc2VzOiBbICdhcGFjaGVjb25mJyBdLFxuICAgIGNhc2VfaW5zZW5zaXRpdmU6IHRydWUsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuSEFTSF9DT01NRU5UX01PREUsXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3NlY3Rpb24nLFxuICAgICAgICBiZWdpbjogLzxcXC8/LyxcbiAgICAgICAgZW5kOiAvPi8sXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgSVBfQUREUkVTUyxcbiAgICAgICAgICBQT1JUX05VTUJFUixcbiAgICAgICAgICAvLyBsb3cgcmVsZXZhbmNlIHByZXZlbnRzIHVzIGZyb20gY2xhbWluZyBYTUwvSFRNTCB3aGVyZSB0aGlzIHJ1bGUgd291bGRcbiAgICAgICAgICAvLyBtYXRjaCBzdHJpbmdzIGluc2lkZSBvZiBYTUwgdGFnc1xuICAgICAgICAgIGhsanMuaW5oZXJpdChobGpzLlFVT1RFX1NUUklOR19NT0RFLCB7IHJlbGV2YW5jZTogMCB9KVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdhdHRyaWJ1dGUnLFxuICAgICAgICBiZWdpbjogL1xcdysvLFxuICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgIC8vIGtleXdvcmRzIGFyZW7igJl0IG5lZWRlZCBmb3IgaGlnaGxpZ2h0aW5nIHBlciBzZSwgdGhleSBvbmx5IGJvb3N0IHJlbGV2YW5jZVxuICAgICAgICAvLyBmb3IgYSB2ZXJ5IGdlbmVyYWxseSBkZWZpbmVkIG1vZGUgKHN0YXJ0cyB3aXRoIGEgd29yZCwgZW5kcyB3aXRoIGxpbmUtZW5kXG4gICAgICAgIGtleXdvcmRzOiB7IF86IFtcbiAgICAgICAgICBcIm9yZGVyXCIsXG4gICAgICAgICAgXCJkZW55XCIsXG4gICAgICAgICAgXCJhbGxvd1wiLFxuICAgICAgICAgIFwic2V0ZW52XCIsXG4gICAgICAgICAgXCJyZXdyaXRlcnVsZVwiLFxuICAgICAgICAgIFwicmV3cml0ZWVuZ2luZVwiLFxuICAgICAgICAgIFwicmV3cml0ZWNvbmRcIixcbiAgICAgICAgICBcImRvY3VtZW50cm9vdFwiLFxuICAgICAgICAgIFwic2V0aGFuZGxlclwiLFxuICAgICAgICAgIFwiZXJyb3Jkb2N1bWVudFwiLFxuICAgICAgICAgIFwibG9hZG1vZHVsZVwiLFxuICAgICAgICAgIFwib3B0aW9uc1wiLFxuICAgICAgICAgIFwiaGVhZGVyXCIsXG4gICAgICAgICAgXCJsaXN0ZW5cIixcbiAgICAgICAgICBcInNlcnZlcnJvb3RcIixcbiAgICAgICAgICBcInNlcnZlcm5hbWVcIlxuICAgICAgICBdIH0sXG4gICAgICAgIHN0YXJ0czoge1xuICAgICAgICAgIGVuZDogLyQvLFxuICAgICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgICBrZXl3b3JkczogeyBsaXRlcmFsOiAnb24gb2ZmIGFsbCBkZW55IGFsbG93JyB9LFxuICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHNjb3BlOiBcInB1bmN0dWF0aW9uXCIsXG4gICAgICAgICAgICAgIG1hdGNoOiAvXFxcXFxcbi9cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgICAgICAgICBiZWdpbjogL1xcc1xcWy8sXG4gICAgICAgICAgICAgIGVuZDogL1xcXSQvXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBjbGFzc05hbWU6ICd2YXJpYWJsZScsXG4gICAgICAgICAgICAgIGJlZ2luOiAvW1xcJCVdXFx7LyxcbiAgICAgICAgICAgICAgZW5kOiAvXFx9LyxcbiAgICAgICAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAgICAgICAnc2VsZicsXG4gICAgICAgICAgICAgICAgTlVNQkVSX1JFRlxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgSVBfQUREUkVTUyxcbiAgICAgICAgICAgIE5VTUJFUixcbiAgICAgICAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREVcbiAgICAgICAgICBdXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICBdLFxuICAgIGlsbGVnYWw6IC9cXFMvXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXBhY2hlO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///3139\n')},3149:module=>{eval("/**\n * callbag-map\n * -----------\n *\n * Callbag operator that applies a transformation on data passing through it.\n * Works on either pullable or listenable sources.\n *\n * `npm install callbag-map`\n *\n * Example:\n *\n * const fromIter = require('callbag-from-iter');\n * const iterate = require('callbag-iterate');\n * const map = require('callbag-map');\n *\n * const source = map(x => x * 0.1)(fromIter([10,20,30,40]));\n *\n * iterate(x => console.log(x))(source); // 1\n * // 2\n * // 3\n * // 4\n */\n\nconst map = f => source => (start, sink) => {\n if (start !== 0) return;\n source(0, (t, d) => {\n sink(t, t === 1 ? f(d) : d)\n });\n};\n\nmodule.exports = map;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzE0OS5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkNBQTZDO0FBQzdDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vb2JzaWRpYW4tbWluZG1hcC1uZXh0Z2VuLy4vbm9kZV9tb2R1bGVzLy5wbnBtL2NhbGxiYWctbWFwQDEuMS4wL25vZGVfbW9kdWxlcy9jYWxsYmFnLW1hcC9yZWFkbWUuanM/ZGI4NSJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIGNhbGxiYWctbWFwXG4gKiAtLS0tLS0tLS0tLVxuICpcbiAqIENhbGxiYWcgb3BlcmF0b3IgdGhhdCBhcHBsaWVzIGEgdHJhbnNmb3JtYXRpb24gb24gZGF0YSBwYXNzaW5nIHRocm91Z2ggaXQuXG4gKiBXb3JrcyBvbiBlaXRoZXIgcHVsbGFibGUgb3IgbGlzdGVuYWJsZSBzb3VyY2VzLlxuICpcbiAqIGBucG0gaW5zdGFsbCBjYWxsYmFnLW1hcGBcbiAqXG4gKiBFeGFtcGxlOlxuICpcbiAqICAgICBjb25zdCBmcm9tSXRlciA9IHJlcXVpcmUoJ2NhbGxiYWctZnJvbS1pdGVyJyk7XG4gKiAgICAgY29uc3QgaXRlcmF0ZSA9IHJlcXVpcmUoJ2NhbGxiYWctaXRlcmF0ZScpO1xuICogICAgIGNvbnN0IG1hcCA9IHJlcXVpcmUoJ2NhbGxiYWctbWFwJyk7XG4gKlxuICogICAgIGNvbnN0IHNvdXJjZSA9IG1hcCh4ID0+IHggKiAwLjEpKGZyb21JdGVyKFsxMCwyMCwzMCw0MF0pKTtcbiAqXG4gKiAgICAgaXRlcmF0ZSh4ID0+IGNvbnNvbGUubG9nKHgpKShzb3VyY2UpOyAvLyAxXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAyXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAzXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyA0XG4gKi9cblxuY29uc3QgbWFwID0gZiA9PiBzb3VyY2UgPT4gKHN0YXJ0LCBzaW5rKSA9PiB7XG4gIGlmIChzdGFydCAhPT0gMCkgcmV0dXJuO1xuICBzb3VyY2UoMCwgKHQsIGQpID0+IHtcbiAgICBzaW5rKHQsIHQgPT09IDEgPyBmKGQpIDogZClcbiAgfSk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcDtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///3149\n")},3165:module=>{eval("/*\nLanguage: Vim Script\nAuthor: Jun Yang \nDescription: full keyword and built-in from http://vimdoc.sourceforge.net/htmldoc/\nWebsite: https://www.vim.org\nCategory: scripting\n*/\n\nfunction vim(hljs) {\n return {\n name: 'Vim Script',\n keywords: {\n $pattern: /[!#@\\w]+/,\n keyword:\n // express version except: ! & * < = > !! # @ @@\n 'N|0 P|0 X|0 a|0 ab abc abo al am an|0 ar arga argd arge argdo argg argl argu as au aug aun b|0 bN ba bad bd be bel bf bl bm bn bo bp br brea breaka breakd breakl bro bufdo buffers bun bw c|0 cN cNf ca cabc caddb cad caddf cal cat cb cc ccl cd ce cex cf cfir cgetb cgete cg changes chd che checkt cl cla clo cm cmapc cme cn cnew cnf cno cnorea cnoreme co col colo com comc comp con conf cope '\n + 'cp cpf cq cr cs cst cu cuna cunme cw delm deb debugg delc delf dif diffg diffo diffp diffpu diffs diffthis dig di dl dell dj dli do doautoa dp dr ds dsp e|0 ea ec echoe echoh echom echon el elsei em en endfo endf endt endw ene ex exe exi exu f|0 files filet fin fina fini fir fix fo foldc foldd folddoc foldo for fu go gr grepa gu gv ha helpf helpg helpt hi hid his ia iabc if ij il im imapc '\n + 'ime ino inorea inoreme int is isp iu iuna iunme j|0 ju k|0 keepa kee keepj lN lNf l|0 lad laddb laddf la lan lat lb lc lch lcl lcs le lefta let lex lf lfir lgetb lgete lg lgr lgrepa lh ll lla lli lmak lm lmapc lne lnew lnf ln loadk lo loc lockv lol lope lp lpf lr ls lt lu lua luad luaf lv lvimgrepa lw m|0 ma mak map mapc marks mat me menut mes mk mks mksp mkv mkvie mod mz mzf nbc nb nbs new nm nmapc nme nn nnoreme noa no noh norea noreme norm nu nun nunme ol o|0 om omapc ome on ono onoreme opt ou ounme ow p|0 '\n + 'profd prof pro promptr pc ped pe perld po popu pp pre prev ps pt ptN ptf ptj ptl ptn ptp ptr pts pu pw py3 python3 py3d py3f py pyd pyf quita qa rec red redi redr redraws reg res ret retu rew ri rightb rub rubyd rubyf rund ru rv sN san sa sal sav sb sbN sba sbf sbl sbm sbn sbp sbr scrip scripte scs se setf setg setl sf sfir sh sim sig sil sl sla sm smap smapc sme sn sni sno snor snoreme sor '\n + 'so spelld spe spelli spellr spellu spellw sp spr sre st sta startg startr star stopi stj sts sun sunm sunme sus sv sw sy synti sync tN tabN tabc tabdo tabe tabf tabfir tabl tabm tabnew '\n + 'tabn tabo tabp tabr tabs tab ta tags tc tcld tclf te tf th tj tl tm tn to tp tr try ts tu u|0 undoj undol una unh unl unlo unm unme uns up ve verb vert vim vimgrepa vi viu vie vm vmapc vme vne vn vnoreme vs vu vunme windo w|0 wN wa wh wi winc winp wn wp wq wqa ws wu wv x|0 xa xmapc xm xme xn xnoreme xu xunme y|0 z|0 ~ '\n // full version\n + 'Next Print append abbreviate abclear aboveleft all amenu anoremenu args argadd argdelete argedit argglobal arglocal argument ascii autocmd augroup aunmenu buffer bNext ball badd bdelete behave belowright bfirst blast bmodified bnext botright bprevious brewind break breakadd breakdel breaklist browse bunload '\n + 'bwipeout change cNext cNfile cabbrev cabclear caddbuffer caddexpr caddfile call catch cbuffer cclose center cexpr cfile cfirst cgetbuffer cgetexpr cgetfile chdir checkpath checktime clist clast close cmap cmapclear cmenu cnext cnewer cnfile cnoremap cnoreabbrev cnoremenu copy colder colorscheme command comclear compiler continue confirm copen cprevious cpfile cquit crewind cscope cstag cunmap '\n + 'cunabbrev cunmenu cwindow delete delmarks debug debuggreedy delcommand delfunction diffupdate diffget diffoff diffpatch diffput diffsplit digraphs display deletel djump dlist doautocmd doautoall deletep drop dsearch dsplit edit earlier echo echoerr echohl echomsg else elseif emenu endif endfor '\n + 'endfunction endtry endwhile enew execute exit exusage file filetype find finally finish first fixdel fold foldclose folddoopen folddoclosed foldopen function global goto grep grepadd gui gvim hardcopy help helpfind helpgrep helptags highlight hide history insert iabbrev iabclear ijump ilist imap '\n + 'imapclear imenu inoremap inoreabbrev inoremenu intro isearch isplit iunmap iunabbrev iunmenu join jumps keepalt keepmarks keepjumps lNext lNfile list laddexpr laddbuffer laddfile last language later lbuffer lcd lchdir lclose lcscope left leftabove lexpr lfile lfirst lgetbuffer lgetexpr lgetfile lgrep lgrepadd lhelpgrep llast llist lmake lmap lmapclear lnext lnewer lnfile lnoremap loadkeymap loadview '\n + 'lockmarks lockvar lolder lopen lprevious lpfile lrewind ltag lunmap luado luafile lvimgrep lvimgrepadd lwindow move mark make mapclear match menu menutranslate messages mkexrc mksession mkspell mkvimrc mkview mode mzscheme mzfile nbclose nbkey nbsart next nmap nmapclear nmenu nnoremap '\n + 'nnoremenu noautocmd noremap nohlsearch noreabbrev noremenu normal number nunmap nunmenu oldfiles open omap omapclear omenu only onoremap onoremenu options ounmap ounmenu ownsyntax print profdel profile promptfind promptrepl pclose pedit perl perldo pop popup ppop preserve previous psearch ptag ptNext '\n + 'ptfirst ptjump ptlast ptnext ptprevious ptrewind ptselect put pwd py3do py3file python pydo pyfile quit quitall qall read recover redo redir redraw redrawstatus registers resize retab return rewind right rightbelow ruby rubydo rubyfile rundo runtime rviminfo substitute sNext sandbox sargument sall saveas sbuffer sbNext sball sbfirst sblast sbmodified sbnext sbprevious sbrewind scriptnames scriptencoding '\n + 'scscope set setfiletype setglobal setlocal sfind sfirst shell simalt sign silent sleep slast smagic smapclear smenu snext sniff snomagic snoremap snoremenu sort source spelldump spellgood spellinfo spellrepall spellundo spellwrong split sprevious srewind stop stag startgreplace startreplace '\n + 'startinsert stopinsert stjump stselect sunhide sunmap sunmenu suspend sview swapname syntax syntime syncbind tNext tabNext tabclose tabedit tabfind tabfirst tablast tabmove tabnext tabonly tabprevious tabrewind tag tcl tcldo tclfile tearoff tfirst throw tjump tlast tmenu tnext topleft tprevious ' + 'trewind tselect tunmenu undo undojoin undolist unabbreviate unhide unlet unlockvar unmap unmenu unsilent update vglobal version verbose vertical vimgrep vimgrepadd visual viusage view vmap vmapclear vmenu vnew '\n + 'vnoremap vnoremenu vsplit vunmap vunmenu write wNext wall while winsize wincmd winpos wnext wprevious wqall wsverb wundo wviminfo xit xall xmapclear xmap xmenu xnoremap xnoremenu xunmap xunmenu yank',\n built_in: // built in func\n 'synIDtrans atan2 range matcharg did_filetype asin feedkeys xor argv '\n + 'complete_check add getwinposx getqflist getwinposy screencol '\n + 'clearmatches empty extend getcmdpos mzeval garbagecollect setreg '\n + 'ceil sqrt diff_hlID inputsecret get getfperm getpid filewritable '\n + 'shiftwidth max sinh isdirectory synID system inputrestore winline '\n + 'atan visualmode inputlist tabpagewinnr round getregtype mapcheck '\n + 'hasmapto histdel argidx findfile sha256 exists toupper getcmdline '\n + 'taglist string getmatches bufnr strftime winwidth bufexists '\n + 'strtrans tabpagebuflist setcmdpos remote_read printf setloclist '\n + 'getpos getline bufwinnr float2nr len getcmdtype diff_filler luaeval '\n + 'resolve libcallnr foldclosedend reverse filter has_key bufname '\n + 'str2float strlen setline getcharmod setbufvar index searchpos '\n + 'shellescape undofile foldclosed setqflist buflisted strchars str2nr '\n + 'virtcol floor remove undotree remote_expr winheight gettabwinvar '\n + 'reltime cursor tabpagenr finddir localtime acos getloclist search '\n + 'tanh matchend rename gettabvar strdisplaywidth type abs py3eval '\n + 'setwinvar tolower wildmenumode log10 spellsuggest bufloaded '\n + 'synconcealed nextnonblank server2client complete settabwinvar '\n + 'executable input wincol setmatches getftype hlID inputsave '\n + 'searchpair or screenrow line settabvar histadd deepcopy strpart '\n + 'remote_peek and eval getftime submatch screenchar winsaveview '\n + 'matchadd mkdir screenattr getfontname libcall reltimestr getfsize '\n + 'winnr invert pow getbufline byte2line soundfold repeat fnameescape '\n + 'tagfiles sin strwidth spellbadword trunc maparg log lispindent '\n + 'hostname setpos globpath remote_foreground getchar synIDattr '\n + 'fnamemodify cscope_connection stridx winbufnr indent min '\n + 'complete_add nr2char searchpairpos inputdialog values matchlist '\n + 'items hlexists strridx browsedir expand fmod pathshorten line2byte '\n + 'argc count getwinvar glob foldtextresult getreg foreground cosh '\n + 'matchdelete has char2nr simplify histget searchdecl iconv '\n + 'winrestcmd pumvisible writefile foldlevel haslocaldir keys cos '\n + 'matchstr foldtext histnr tan tempname getcwd byteidx getbufvar '\n + 'islocked escape eventhandler remote_send serverlist winrestview '\n + 'synstack pyeval prevnonblank readfile cindent filereadable changenr '\n + 'exp'\n },\n illegal: /;/,\n contains: [\n hljs.NUMBER_MODE,\n {\n className: 'string',\n begin: '\\'',\n end: '\\'',\n illegal: '\\\\n'\n },\n\n /*\n A double quote can start either a string or a line comment. Strings are\n ended before the end of a line by another double quote and can contain\n escaped double-quotes and post-escaped line breaks.\n\n Also, any double quote at the beginning of a line is a comment but we\n don't handle that properly at the moment: any double quote inside will\n turn them into a string. Handling it properly will require a smarter\n parser.\n */\n {\n className: 'string',\n begin: /\"(\\\\\"|\\n\\\\|[^\"\\n])*\"/\n },\n hljs.COMMENT('\"', '$'),\n\n {\n className: 'variable',\n begin: /[bwtglsav]:[\\w\\d_]+/\n },\n {\n begin: [\n /\\b(?:function|function!)/,\n /\\s+/,\n hljs.IDENT_RE\n ],\n className: {\n 1: \"keyword\",\n 3: \"title\"\n },\n end: '$',\n relevance: 0,\n contains: [\n {\n className: 'params',\n begin: '\\\\(',\n end: '\\\\)'\n }\n ]\n },\n {\n className: 'symbol',\n begin: /<[\\w-]+>/\n }\n ]\n };\n}\n\nmodule.exports = vim;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzE2NS5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9vYnNpZGlhbi1taW5kbWFwLW5leHRnZW4vLi9ub2RlX21vZHVsZXMvLnBucG0vaGlnaGxpZ2h0LmpzQDExLjExLjEvbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3ZpbS5qcz84NDFiIl0sInNvdXJjZXNDb250ZW50IjpbIi8qXG5MYW5ndWFnZTogVmltIFNjcmlwdFxuQXV0aG9yOiBKdW4gWWFuZyA8eWFuZ2p2bkAxMjYuY29tPlxuRGVzY3JpcHRpb246IGZ1bGwga2V5d29yZCBhbmQgYnVpbHQtaW4gZnJvbSBodHRwOi8vdmltZG9jLnNvdXJjZWZvcmdlLm5ldC9odG1sZG9jL1xuV2Vic2l0ZTogaHR0cHM6Ly93d3cudmltLm9yZ1xuQ2F0ZWdvcnk6IHNjcmlwdGluZ1xuKi9cblxuZnVuY3Rpb24gdmltKGhsanMpIHtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnVmltIFNjcmlwdCcsXG4gICAga2V5d29yZHM6IHtcbiAgICAgICRwYXR0ZXJuOiAvWyEjQFxcd10rLyxcbiAgICAgIGtleXdvcmQ6XG4gICAgICAgIC8vIGV4cHJlc3MgdmVyc2lvbiBleGNlcHQ6ICEgJiAqIDwgPSA+ICEhICMgQCBAQFxuICAgICAgICAnTnwwIFB8MCBYfDAgYXwwIGFiIGFiYyBhYm8gYWwgYW0gYW58MCBhciBhcmdhIGFyZ2QgYXJnZSBhcmdkbyBhcmdnIGFyZ2wgYXJndSBhcyBhdSBhdWcgYXVuIGJ8MCBiTiBiYSBiYWQgYmQgYmUgYmVsIGJmIGJsIGJtIGJuIGJvIGJwIGJyIGJyZWEgYnJlYWthIGJyZWFrZCBicmVha2wgYnJvIGJ1ZmRvIGJ1ZmZlcnMgYnVuIGJ3IGN8MCBjTiBjTmYgY2EgY2FiYyBjYWRkYiBjYWQgY2FkZGYgY2FsIGNhdCBjYiBjYyBjY2wgY2QgY2UgY2V4IGNmIGNmaXIgY2dldGIgY2dldGUgY2cgY2hhbmdlcyBjaGQgY2hlIGNoZWNrdCBjbCBjbGEgY2xvIGNtIGNtYXBjIGNtZSBjbiBjbmV3IGNuZiBjbm8gY25vcmVhIGNub3JlbWUgY28gY29sIGNvbG8gY29tIGNvbWMgY29tcCBjb24gY29uZiBjb3BlICdcbiAgICAgICAgKyAnY3AgY3BmIGNxIGNyIGNzIGNzdCBjdSBjdW5hIGN1bm1lIGN3IGRlbG0gZGViIGRlYnVnZyBkZWxjIGRlbGYgZGlmIGRpZmZnIGRpZmZvIGRpZmZwIGRpZmZwdSBkaWZmcyBkaWZmdGhpcyBkaWcgZGkgZGwgZGVsbCBkaiBkbGkgZG8gZG9hdXRvYSBkcCBkciBkcyBkc3AgZXwwIGVhIGVjIGVjaG9lIGVjaG9oIGVjaG9tIGVjaG9uIGVsIGVsc2VpIGVtIGVuIGVuZGZvIGVuZGYgZW5kdCBlbmR3IGVuZSBleCBleGUgZXhpIGV4dSBmfDAgZmlsZXMgZmlsZXQgZmluIGZpbmEgZmluaSBmaXIgZml4IGZvIGZvbGRjIGZvbGRkIGZvbGRkb2MgZm9sZG8gZm9yIGZ1IGdvIGdyIGdyZXBhIGd1IGd2IGhhIGhlbHBmIGhlbHBnIGhlbHB0IGhpIGhpZCBoaXMgaWEgaWFiYyBpZiBpaiBpbCBpbSBpbWFwYyAnXG4gICAgICAgICsgJ2ltZSBpbm8gaW5vcmVhIGlub3JlbWUgaW50IGlzIGlzcCBpdSBpdW5hIGl1bm1lIGp8MCBqdSBrfDAga2VlcGEga2VlIGtlZXBqIGxOIGxOZiBsfDAgbGFkIGxhZGRiIGxhZGRmIGxhIGxhbiBsYXQgbGIgbGMgbGNoIGxjbCBsY3MgbGUgbGVmdGEgbGV0IGxleCBsZiBsZmlyIGxnZXRiIGxnZXRlIGxnIGxnciBsZ3JlcGEgbGggbGwgbGxhIGxsaSBsbWFrIGxtIGxtYXBjIGxuZSBsbmV3IGxuZiBsbiBsb2FkayBsbyBsb2MgbG9ja3YgbG9sIGxvcGUgbHAgbHBmIGxyIGxzIGx0IGx1IGx1YSBsdWFkIGx1YWYgbHYgbHZpbWdyZXBhIGx3IG18MCBtYSBtYWsgbWFwIG1hcGMgbWFya3MgbWF0IG1lIG1lbnV0IG1lcyBtayBta3MgbWtzcCBta3YgbWt2aWUgbW9kIG16IG16ZiBuYmMgbmIgbmJzIG5ldyBubSBubWFwYyBubWUgbm4gbm5vcmVtZSBub2Egbm8gbm9oIG5vcmVhIG5vcmVtZSBub3JtIG51IG51biBudW5tZSBvbCBvfDAgb20gb21hcGMgb21lIG9uIG9ubyBvbm9yZW1lIG9wdCBvdSBvdW5tZSBvdyBwfDAgJ1xuICAgICAgICArICdwcm9mZCBwcm9mIHBybyBwcm9tcHRyIHBjIHBlZCBwZSBwZXJsZCBwbyBwb3B1IHBwIHByZSBwcmV2IHBzIHB0IHB0TiBwdGYgcHRqIHB0bCBwdG4gcHRwIHB0ciBwdHMgcHUgcHcgcHkzIHB5dGhvbjMgcHkzZCBweTNmIHB5IHB5ZCBweWYgcXVpdGEgcWEgcmVjIHJlZCByZWRpIHJlZHIgcmVkcmF3cyByZWcgcmVzIHJldCByZXR1IHJldyByaSByaWdodGIgcnViIHJ1YnlkIHJ1YnlmIHJ1bmQgcnUgcnYgc04gc2FuIHNhIHNhbCBzYXYgc2Igc2JOIHNiYSBzYmYgc2JsIHNibSBzYm4gc2JwIHNiciBzY3JpcCBzY3JpcHRlIHNjcyBzZSBzZXRmIHNldGcgc2V0bCBzZiBzZmlyIHNoIHNpbSBzaWcgc2lsIHNsIHNsYSBzbSBzbWFwIHNtYXBjIHNtZSBzbiBzbmkgc25vIHNub3Igc25vcmVtZSBzb3IgJ1xuICAgICAgICArICdzbyBzcGVsbGQgc3BlIHNwZWxsaSBzcGVsbHIgc3BlbGx1IHNwZWxsdyBzcCBzcHIgc3JlIHN0IHN0YSBzdGFydGcgc3RhcnRyIHN0YXIgc3RvcGkgc3RqIHN0cyBzdW4gc3VubSBzdW5tZSBzdXMgc3Ygc3cgc3kgc3ludGkgc3luYyB0TiB0YWJOIHRhYmMgdGFiZG8gdGFiZSB0YWJmIHRhYmZpciB0YWJsIHRhYm0gdGFibmV3ICdcbiAgICAgICAgKyAndGFibiB0YWJvIHRhYnAgdGFiciB0YWJzIHRhYiB0YSB0YWdzIHRjIHRjbGQgdGNsZiB0ZSB0ZiB0aCB0aiB0bCB0bSB0biB0byB0cCB0ciB0cnkgdHMgdHUgdXwwIHVuZG9qIHVuZG9sIHVuYSB1bmggdW5sIHVubG8gdW5tIHVubWUgdW5zIHVwIHZlIHZlcmIgdmVydCB2aW0gdmltZ3JlcGEgdmkgdml1IHZpZSB2bSB2bWFwYyB2bWUgdm5lIHZuIHZub3JlbWUgdnMgdnUgdnVubWUgd2luZG8gd3wwIHdOIHdhIHdoIHdpIHdpbmMgd2lucCB3biB3cCB3cSB3cWEgd3Mgd3Ugd3YgeHwwIHhhIHhtYXBjIHhtIHhtZSB4biB4bm9yZW1lIHh1IHh1bm1lIHl8MCB6fDAgfiAnXG4gICAgICAgIC8vIGZ1bGwgdmVyc2lvblxuICAgICAgICArICdOZXh0IFByaW50IGFwcGVuZCBhYmJyZXZpYXRlIGFiY2xlYXIgYWJvdmVsZWZ0IGFsbCBhbWVudSBhbm9yZW1lbnUgYXJncyBhcmdhZGQgYXJnZGVsZXRlIGFyZ2VkaXQgYXJnZ2xvYmFsIGFyZ2xvY2FsIGFyZ3VtZW50IGFzY2lpIGF1dG9jbWQgYXVncm91cCBhdW5tZW51IGJ1ZmZlciBiTmV4dCBiYWxsIGJhZGQgYmRlbGV0ZSBiZWhhdmUgYmVsb3dyaWdodCBiZmlyc3QgYmxhc3QgYm1vZGlmaWVkIGJuZXh0IGJvdHJpZ2h0IGJwcmV2aW91cyBicmV3aW5kIGJyZWFrIGJyZWFrYWRkIGJyZWFrZGVsIGJyZWFrbGlzdCBicm93c2UgYnVubG9hZCAnXG4gICAgICAgICsgJ2J3aXBlb3V0IGNoYW5nZSBjTmV4dCBjTmZpbGUgY2FiYnJldiBjYWJjbGVhciBjYWRkYnVmZmVyIGNhZGRleHByIGNhZGRmaWxlIGNhbGwgY2F0Y2ggY2J1ZmZlciBjY2xvc2UgY2VudGVyIGNleHByIGNmaWxlIGNmaXJzdCBjZ2V0YnVmZmVyIGNnZXRleHByIGNnZXRmaWxlIGNoZGlyIGNoZWNrcGF0aCBjaGVja3RpbWUgY2xpc3QgY2xhc3QgY2xvc2UgY21hcCBjbWFwY2xlYXIgY21lbnUgY25leHQgY25ld2VyIGNuZmlsZSBjbm9yZW1hcCBjbm9yZWFiYnJldiBjbm9yZW1lbnUgY29weSBjb2xkZXIgY29sb3JzY2hlbWUgY29tbWFuZCBjb21jbGVhciBjb21waWxlciBjb250aW51ZSBjb25maXJtIGNvcGVuIGNwcmV2aW91cyBjcGZpbGUgY3F1aXQgY3Jld2luZCBjc2NvcGUgY3N0YWcgY3VubWFwICdcbiAgICAgICAgKyAnY3VuYWJicmV2IGN1bm1lbnUgY3dpbmRvdyBkZWxldGUgZGVsbWFya3MgZGVidWcgZGVidWdncmVlZHkgZGVsY29tbWFuZCBkZWxmdW5jdGlvbiBkaWZmdXBkYXRlIGRpZmZnZXQgZGlmZm9mZiBkaWZmcGF0Y2ggZGlmZnB1dCBkaWZmc3BsaXQgZGlncmFwaHMgZGlzcGxheSBkZWxldGVsIGRqdW1wIGRsaXN0IGRvYXV0b2NtZCBkb2F1dG9hbGwgZGVsZXRlcCBkcm9wIGRzZWFyY2ggZHNwbGl0IGVkaXQgZWFybGllciBlY2hvIGVjaG9lcnIgZWNob2hsIGVjaG9tc2cgZWxzZSBlbHNlaWYgZW1lbnUgZW5kaWYgZW5kZm9yICdcbiAgICAgICAgKyAnZW5kZnVuY3Rpb24gZW5kdHJ5IGVuZHdoaWxlIGVuZXcgZXhlY3V0ZSBleGl0IGV4dXNhZ2UgZmlsZSBmaWxldHlwZSBmaW5kIGZpbmFsbHkgZmluaXNoIGZpcnN0IGZpeGRlbCBmb2xkIGZvbGRjbG9zZSBmb2xkZG9vcGVuIGZvbGRkb2Nsb3NlZCBmb2xkb3BlbiBmdW5jdGlvbiBnbG9iYWwgZ290byBncmVwIGdyZXBhZGQgZ3VpIGd2aW0gaGFyZGNvcHkgaGVscCBoZWxwZmluZCBoZWxwZ3JlcCBoZWxwdGFncyBoaWdobGlnaHQgaGlkZSBoaXN0b3J5IGluc2VydCBpYWJicmV2IGlhYmNsZWFyIGlqdW1wIGlsaXN0IGltYXAgJ1xuICAgICAgICArICdpbWFwY2xlYXIgaW1lbnUgaW5vcmVtYXAgaW5vcmVhYmJyZXYgaW5vcmVtZW51IGludHJvIGlzZWFyY2ggaXNwbGl0IGl1bm1hcCBpdW5hYmJyZXYgaXVubWVudSBqb2luIGp1bXBzIGtlZXBhbHQga2VlcG1hcmtzIGtlZXBqdW1wcyBsTmV4dCBsTmZpbGUgbGlzdCBsYWRkZXhwciBsYWRkYnVmZmVyIGxhZGRmaWxlIGxhc3QgbGFuZ3VhZ2UgbGF0ZXIgbGJ1ZmZlciBsY2QgbGNoZGlyIGxjbG9zZSBsY3Njb3BlIGxlZnQgbGVmdGFib3ZlIGxleHByIGxmaWxlIGxmaXJzdCBsZ2V0YnVmZmVyIGxnZXRleHByIGxnZXRmaWxlIGxncmVwIGxncmVwYWRkIGxoZWxwZ3JlcCBsbGFzdCBsbGlzdCBsbWFrZSBsbWFwIGxtYXBjbGVhciBsbmV4dCBsbmV3ZXIgbG5maWxlIGxub3JlbWFwIGxvYWRrZXltYXAgbG9hZHZpZXcgJ1xuICAgICAgICArICdsb2NrbWFya3MgbG9ja3ZhciBsb2xkZXIgbG9wZW4gbHByZXZpb3VzIGxwZmlsZSBscmV3aW5kIGx0YWcgbHVubWFwIGx1YWRvIGx1YWZpbGUgbHZpbWdyZXAgbHZpbWdyZXBhZGQgbHdpbmRvdyBtb3ZlIG1hcmsgbWFrZSBtYXBjbGVhciBtYXRjaCBtZW51IG1lbnV0cmFuc2xhdGUgbWVzc2FnZXMgbWtleHJjIG1rc2Vzc2lvbiBta3NwZWxsIG1rdmltcmMgbWt2aWV3IG1vZGUgbXpzY2hlbWUgbXpmaWxlIG5iY2xvc2UgbmJrZXkgbmJzYXJ0IG5leHQgbm1hcCBubWFwY2xlYXIgbm1lbnUgbm5vcmVtYXAgJ1xuICAgICAgICArICdubm9yZW1lbnUgbm9hdXRvY21kIG5vcmVtYXAgbm9obHNlYXJjaCBub3JlYWJicmV2IG5vcmVtZW51IG5vcm1hbCBudW1iZXIgbnVubWFwIG51bm1lbnUgb2xkZmlsZXMgb3BlbiBvbWFwIG9tYXBjbGVhciBvbWVudSBvbmx5IG9ub3JlbWFwIG9ub3JlbWVudSBvcHRpb25zIG91bm1hcCBvdW5tZW51IG93bnN5bnRheCBwcmludCBwcm9mZGVsIHByb2ZpbGUgcHJvbXB0ZmluZCBwcm9tcHRyZXBsIHBjbG9zZSBwZWRpdCBwZXJsIHBlcmxkbyBwb3AgcG9wdXAgcHBvcCBwcmVzZXJ2ZSBwcmV2aW91cyBwc2VhcmNoIHB0YWcgcHROZXh0ICdcbiAgICAgICAgKyAncHRmaXJzdCBwdGp1bXAgcHRsYXN0IHB0bmV4dCBwdHByZXZpb3VzIHB0cmV3aW5kIHB0c2VsZWN0IHB1dCBwd2QgcHkzZG8gcHkzZmlsZSBweXRob24gcHlkbyBweWZpbGUgcXVpdCBxdWl0YWxsIHFhbGwgcmVhZCByZWNvdmVyIHJlZG8gcmVkaXIgcmVkcmF3IHJlZHJhd3N0YXR1cyByZWdpc3RlcnMgcmVzaXplIHJldGFiIHJldHVybiByZXdpbmQgcmlnaHQgcmlnaHRiZWxvdyBydWJ5IHJ1YnlkbyBydWJ5ZmlsZSBydW5kbyBydW50aW1lIHJ2aW1pbmZvIHN1YnN0aXR1dGUgc05leHQgc2FuZGJveCBzYXJndW1lbnQgc2FsbCBzYXZlYXMgc2J1ZmZlciBzYk5leHQgc2JhbGwgc2JmaXJzdCBzYmxhc3Qgc2Jtb2RpZmllZCBzYm5leHQgc2JwcmV2aW91cyBzYnJld2luZCBzY3JpcHRuYW1lcyBzY3JpcHRlbmNvZGluZyAnXG4gICAgICAgICsgJ3Njc2NvcGUgc2V0IHNldGZpbGV0eXBlIHNldGdsb2JhbCBzZXRsb2NhbCBzZmluZCBzZmlyc3Qgc2hlbGwgc2ltYWx0IHNpZ24gc2lsZW50IHNsZWVwIHNsYXN0IHNtYWdpYyBzbWFwY2xlYXIgc21lbnUgc25leHQgc25pZmYgc25vbWFnaWMgc25vcmVtYXAgc25vcmVtZW51IHNvcnQgc291cmNlIHNwZWxsZHVtcCBzcGVsbGdvb2Qgc3BlbGxpbmZvIHNwZWxscmVwYWxsIHNwZWxsdW5kbyBzcGVsbHdyb25nIHNwbGl0IHNwcmV2aW91cyBzcmV3aW5kIHN0b3Agc3RhZyBzdGFydGdyZXBsYWNlIHN0YXJ0cmVwbGFjZSAnXG4gICAgICAgICsgJ3N0YXJ0aW5zZXJ0IHN0b3BpbnNlcnQgc3RqdW1wIHN0c2VsZWN0IHN1bmhpZGUgc3VubWFwIHN1bm1lbnUgc3VzcGVuZCBzdmlldyBzd2FwbmFtZSBzeW50YXggc3ludGltZSBzeW5jYmluZCB0TmV4dCB0YWJOZXh0IHRhYmNsb3NlIHRhYmVkaXQgdGFiZmluZCB0YWJmaXJzdCB0YWJsYXN0IHRhYm1vdmUgdGFibmV4dCB0YWJvbmx5IHRhYnByZXZpb3VzIHRhYnJld2luZCB0YWcgdGNsIHRjbGRvIHRjbGZpbGUgdGVhcm9mZiB0Zmlyc3QgdGhyb3cgdGp1bXAgdGxhc3QgdG1lbnUgdG5leHQgdG9wbGVmdCB0cHJldmlvdXMgJyArICd0cmV3aW5kIHRzZWxlY3QgdHVubWVudSB1bmRvIHVuZG9qb2luIHVuZG9saXN0IHVuYWJicmV2aWF0ZSB1bmhpZGUgdW5sZXQgdW5sb2NrdmFyIHVubWFwIHVubWVudSB1bnNpbGVudCB1cGRhdGUgdmdsb2JhbCB2ZXJzaW9uIHZlcmJvc2UgdmVydGljYWwgdmltZ3JlcCB2aW1ncmVwYWRkIHZpc3VhbCB2aXVzYWdlIHZpZXcgdm1hcCB2bWFwY2xlYXIgdm1lbnUgdm5ldyAnXG4gICAgICAgICsgJ3Zub3JlbWFwIHZub3JlbWVudSB2c3BsaXQgdnVubWFwIHZ1bm1lbnUgd3JpdGUgd05leHQgd2FsbCB3aGlsZSB3aW5zaXplIHdpbmNtZCB3aW5wb3Mgd25leHQgd3ByZXZpb3VzIHdxYWxsIHdzdmVyYiB3dW5kbyB3dmltaW5mbyB4aXQgeGFsbCB4bWFwY2xlYXIgeG1hcCB4bWVudSB4bm9yZW1hcCB4bm9yZW1lbnUgeHVubWFwIHh1bm1lbnUgeWFuaycsXG4gICAgICBidWlsdF9pbjogLy8gYnVpbHQgaW4gZnVuY1xuICAgICAgICAnc3luSUR0cmFucyBhdGFuMiByYW5nZSBtYXRjaGFyZyBkaWRfZmlsZXR5cGUgYXNpbiBmZWVka2V5cyB4b3IgYXJndiAnXG4gICAgICAgICsgJ2NvbXBsZXRlX2NoZWNrIGFkZCBnZXR3aW5wb3N4IGdldHFmbGlzdCBnZXR3aW5wb3N5IHNjcmVlbmNvbCAnXG4gICAgICAgICsgJ2NsZWFybWF0Y2hlcyBlbXB0eSBleHRlbmQgZ2V0Y21kcG9zIG16ZXZhbCBnYXJiYWdlY29sbGVjdCBzZXRyZWcgJ1xuICAgICAgICArICdjZWlsIHNxcnQgZGlmZl9obElEIGlucHV0c2VjcmV0IGdldCBnZXRmcGVybSBnZXRwaWQgZmlsZXdyaXRhYmxlICdcbiAgICAgICAgKyAnc2hpZnR3aWR0aCBtYXggc2luaCBpc2RpcmVjdG9yeSBzeW5JRCBzeXN0ZW0gaW5wdXRyZXN0b3JlIHdpbmxpbmUgJ1xuICAgICAgICArICdhdGFuIHZpc3VhbG1vZGUgaW5wdXRsaXN0IHRhYnBhZ2V3aW5uciByb3VuZCBnZXRyZWd0eXBlIG1hcGNoZWNrICdcbiAgICAgICAgKyAnaGFzbWFwdG8gaGlzdGRlbCBhcmdpZHggZmluZGZpbGUgc2hhMjU2IGV4aXN0cyB0b3VwcGVyIGdldGNtZGxpbmUgJ1xuICAgICAgICArICd0YWdsaXN0IHN0cmluZyBnZXRtYXRjaGVzIGJ1Zm5yIHN0cmZ0aW1lIHdpbndpZHRoIGJ1ZmV4aXN0cyAnXG4gICAgICAgICsgJ3N0cnRyYW5zIHRhYnBhZ2VidWZsaXN0IHNldGNtZHBvcyByZW1vdGVfcmVhZCBwcmludGYgc2V0bG9jbGlzdCAnXG4gICAgICAgICsgJ2dldHBvcyBnZXRsaW5lIGJ1Zndpbm5yIGZsb2F0Mm5yIGxlbiBnZXRjbWR0eXBlIGRpZmZfZmlsbGVyIGx1YWV2YWwgJ1xuICAgICAgICArICdyZXNvbHZlIGxpYmNhbGxuciBmb2xkY2xvc2VkZW5kIHJldmVyc2UgZmlsdGVyIGhhc19rZXkgYnVmbmFtZSAnXG4gICAgICAgICsgJ3N0cjJmbG9hdCBzdHJsZW4gc2V0bGluZSBnZXRjaGFybW9kIHNldGJ1ZnZhciBpbmRleCBzZWFyY2hwb3MgJ1xuICAgICAgICArICdzaGVsbGVzY2FwZSB1bmRvZmlsZSBmb2xkY2xvc2VkIHNldHFmbGlzdCBidWZsaXN0ZWQgc3RyY2hhcnMgc3RyMm5yICdcbiAgICAgICAgKyAndmlydGNvbCBmbG9vciByZW1vdmUgdW5kb3RyZWUgcmVtb3RlX2V4cHIgd2luaGVpZ2h0IGdldHRhYndpbnZhciAnXG4gICAgICAgICsgJ3JlbHRpbWUgY3Vyc29yIHRhYnBhZ2VuciBmaW5kZGlyIGxvY2FsdGltZSBhY29zIGdldGxvY2xpc3Qgc2VhcmNoICdcbiAgICAgICAgKyAndGFuaCBtYXRjaGVuZCByZW5hbWUgZ2V0dGFidmFyIHN0cmRpc3BsYXl3aWR0aCB0eXBlIGFicyBweTNldmFsICdcbiAgICAgICAgKyAnc2V0d2ludmFyIHRvbG93ZXIgd2lsZG1lbnVtb2RlIGxvZzEwIHNwZWxsc3VnZ2VzdCBidWZsb2FkZWQgJ1xuICAgICAgICArICdzeW5jb25jZWFsZWQgbmV4dG5vbmJsYW5rIHNlcnZlcjJjbGllbnQgY29tcGxldGUgc2V0dGFid2ludmFyICdcbiAgICAgICAgKyAnZXhlY3V0YWJsZSBpbnB1dCB3aW5jb2wgc2V0bWF0Y2hlcyBnZXRmdHlwZSBobElEIGlucHV0c2F2ZSAnXG4gICAgICAgICsgJ3NlYXJjaHBhaXIgb3Igc2NyZWVucm93IGxpbmUgc2V0dGFidmFyIGhpc3RhZGQgZGVlcGNvcHkgc3RycGFydCAnXG4gICAgICAgICsgJ3JlbW90ZV9wZWVrIGFuZCBldmFsIGdldGZ0aW1lIHN1Ym1hdGNoIHNjcmVlbmNoYXIgd2luc2F2ZXZpZXcgJ1xuICAgICAgICArICdtYXRjaGFkZCBta2RpciBzY3JlZW5hdHRyIGdldGZvbnRuYW1lIGxpYmNhbGwgcmVsdGltZXN0ciBnZXRmc2l6ZSAnXG4gICAgICAgICsgJ3dpbm5yIGludmVydCBwb3cgZ2V0YnVmbGluZSBieXRlMmxpbmUgc291bmRmb2xkIHJlcGVhdCBmbmFtZWVzY2FwZSAnXG4gICAgICAgICsgJ3RhZ2ZpbGVzIHNpbiBzdHJ3aWR0aCBzcGVsbGJhZHdvcmQgdHJ1bmMgbWFwYXJnIGxvZyBsaXNwaW5kZW50ICdcbiAgICAgICAgKyAnaG9zdG5hbWUgc2V0cG9zIGdsb2JwYXRoIHJlbW90ZV9mb3JlZ3JvdW5kIGdldGNoYXIgc3luSURhdHRyICdcbiAgICAgICAgKyAnZm5hbWVtb2RpZnkgY3Njb3BlX2Nvbm5lY3Rpb24gc3RyaWR4IHdpbmJ1Zm5yIGluZGVudCBtaW4gJ1xuICAgICAgICArICdjb21wbGV0ZV9hZGQgbnIyY2hhciBzZWFyY2hwYWlycG9zIGlucHV0ZGlhbG9nIHZhbHVlcyBtYXRjaGxpc3QgJ1xuICAgICAgICArICdpdGVtcyBobGV4aXN0cyBzdHJyaWR4IGJyb3dzZWRpciBleHBhbmQgZm1vZCBwYXRoc2hvcnRlbiBsaW5lMmJ5dGUgJ1xuICAgICAgICArICdhcmdjIGNvdW50IGdldHdpbnZhciBnbG9iIGZvbGR0ZXh0cmVzdWx0IGdldHJlZyBmb3JlZ3JvdW5kIGNvc2ggJ1xuICAgICAgICArICdtYXRjaGRlbGV0ZSBoYXMgY2hhcjJuciBzaW1wbGlmeSBoaXN0Z2V0IHNlYXJjaGRlY2wgaWNvbnYgJ1xuICAgICAgICArICd3aW5yZXN0Y21kIHB1bXZpc2libGUgd3JpdGVmaWxlIGZvbGRsZXZlbCBoYXNsb2NhbGRpciBrZXlzIGNvcyAnXG4gICAgICAgICsgJ21hdGNoc3RyIGZvbGR0ZXh0IGhpc3RuciB0YW4gdGVtcG5hbWUgZ2V0Y3dkIGJ5dGVpZHggZ2V0YnVmdmFyICdcbiAgICAgICAgKyAnaXNsb2NrZWQgZXNjYXBlIGV2ZW50aGFuZGxlciByZW1vdGVfc2VuZCBzZXJ2ZXJsaXN0IHdpbnJlc3R2aWV3ICdcbiAgICAgICAgKyAnc3luc3RhY2sgcHlldmFsIHByZXZub25ibGFuayByZWFkZmlsZSBjaW5kZW50IGZpbGVyZWFkYWJsZSBjaGFuZ2VuciAnXG4gICAgICAgICsgJ2V4cCdcbiAgICB9LFxuICAgIGlsbGVnYWw6IC87LyxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5OVU1CRVJfTU9ERSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICAgICAgYmVnaW46ICdcXCcnLFxuICAgICAgICBlbmQ6ICdcXCcnLFxuICAgICAgICBpbGxlZ2FsOiAnXFxcXG4nXG4gICAgICB9LFxuXG4gICAgICAvKlxuICAgICAgQSBkb3VibGUgcXVvdGUgY2FuIHN0YXJ0IGVpdGhlciBhIHN0cmluZyBvciBhIGxpbmUgY29tbWVudC4gU3RyaW5ncyBhcmVcbiAgICAgIGVuZGVkIGJlZm9yZSB0aGUgZW5kIG9mIGEgbGluZSBieSBhbm90aGVyIGRvdWJsZSBxdW90ZSBhbmQgY2FuIGNvbnRhaW5cbiAgICAgIGVzY2FwZWQgZG91YmxlLXF1b3RlcyBhbmQgcG9zdC1lc2NhcGVkIGxpbmUgYnJlYWtzLlxuXG4gICAgICBBbHNvLCBhbnkgZG91YmxlIHF1b3RlIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBsaW5lIGlzIGEgY29tbWVudCBidXQgd2VcbiAgICAgIGRvbid0IGhhbmRsZSB0aGF0IHByb3Blcmx5IGF0IHRoZSBtb21lbnQ6IGFueSBkb3VibGUgcXVvdGUgaW5zaWRlIHdpbGxcbiAgICAgIHR1cm4gdGhlbSBpbnRvIGEgc3RyaW5nLiBIYW5kbGluZyBpdCBwcm9wZXJseSB3aWxsIHJlcXVpcmUgYSBzbWFydGVyXG4gICAgICBwYXJzZXIuXG4gICAgICAqL1xuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICBiZWdpbjogL1wiKFxcXFxcInxcXG5cXFxcfFteXCJcXG5dKSpcIi9cbiAgICAgIH0sXG4gICAgICBobGpzLkNPTU1FTlQoJ1wiJywgJyQnKSxcblxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICd2YXJpYWJsZScsXG4gICAgICAgIGJlZ2luOiAvW2J3dGdsc2F2XTpbXFx3XFxkX10rL1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IFtcbiAgICAgICAgICAvXFxiKD86ZnVuY3Rpb258ZnVuY3Rpb24hKS8sXG4gICAgICAgICAgL1xccysvLFxuICAgICAgICAgIGhsanMuSURFTlRfUkVcbiAgICAgICAgXSxcbiAgICAgICAgY2xhc3NOYW1lOiB7XG4gICAgICAgICAgMTogXCJrZXl3b3JkXCIsXG4gICAgICAgICAgMzogXCJ0aXRsZVwiXG4gICAgICAgIH0sXG4gICAgICAgIGVuZDogJyQnLFxuICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAncGFyYW1zJyxcbiAgICAgICAgICAgIGJlZ2luOiAnXFxcXCgnLFxuICAgICAgICAgICAgZW5kOiAnXFxcXCknXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzeW1ib2wnLFxuICAgICAgICBiZWdpbjogLzxbXFx3LV0rPi9cbiAgICAgIH1cbiAgICBdXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdmltO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///3165\n")},3168:(module,__unused_webpack_exports,__webpack_require__)=>{"use strict";eval("\n\nconst engines = __webpack_require__(163);\nconst utils = __webpack_require__(8549);\n\nmodule.exports = function(options) {\n const opts = Object.assign({}, options);\n\n // ensure that delimiters are an array\n opts.delimiters = utils.arrayify(opts.delims || opts.delimiters || '---');\n if (opts.delimiters.length === 1) {\n opts.delimiters.push(opts.delimiters[0]);\n }\n\n opts.language = (opts.language || opts.lang || 'yaml').toLowerCase();\n opts.engines = Object.assign({}, engines, opts.parsers, opts.engines);\n return opts;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzE2OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixnQkFBZ0IsbUJBQU8sQ0FBQyxHQUFXO0FBQ25DLGNBQWMsbUJBQU8sQ0FBQyxJQUFTOztBQUUvQjtBQUNBLCtCQUErQjs7QUFFL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGlDQUFpQztBQUNqQztBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vb2JzaWRpYW4tbWluZG1hcC1uZXh0Z2VuLy4vbm9kZV9tb2R1bGVzLy5wbnBtL2dyYXktbWF0dGVyQDQuMC4zL25vZGVfbW9kdWxlcy9ncmF5LW1hdHRlci9saWIvZGVmYXVsdHMuanM/ZDk5OSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmNvbnN0IGVuZ2luZXMgPSByZXF1aXJlKCcuL2VuZ2luZXMnKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgY29uc3Qgb3B0cyA9IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMpO1xuXG4gIC8vIGVuc3VyZSB0aGF0IGRlbGltaXRlcnMgYXJlIGFuIGFycmF5XG4gIG9wdHMuZGVsaW1pdGVycyA9IHV0aWxzLmFycmF5aWZ5KG9wdHMuZGVsaW1zIHx8IG9wdHMuZGVsaW1pdGVycyB8fCAnLS0tJyk7XG4gIGlmIChvcHRzLmRlbGltaXRlcnMubGVuZ3RoID09PSAxKSB7XG4gICAgb3B0cy5kZWxpbWl0ZXJzLnB1c2gob3B0cy5kZWxpbWl0ZXJzWzBdKTtcbiAgfVxuXG4gIG9wdHMubGFuZ3VhZ2UgPSAob3B0cy5sYW5ndWFnZSB8fCBvcHRzLmxhbmcgfHwgJ3lhbWwnKS50b0xvd2VyQ2FzZSgpO1xuICBvcHRzLmVuZ2luZXMgPSBPYmplY3QuYXNzaWduKHt9LCBlbmdpbmVzLCBvcHRzLnBhcnNlcnMsIG9wdHMuZW5naW5lcyk7XG4gIHJldHVybiBvcHRzO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///3168\n")},3205:(__unused_webpack_module,exports)=>{"use strict";eval("\n\nconst FOLD_FLOW = 'flow';\nconst FOLD_BLOCK = 'block';\nconst FOLD_QUOTED = 'quoted';\n/**\n * Tries to keep input at up to `lineWidth` characters, splitting only on spaces\n * not followed by newlines or spaces unless `mode` is `'quoted'`. Lines are\n * terminated with `\\n` and started with `indent`.\n */\nfunction foldFlowLines(text, indent, mode = 'flow', { indentAtStart, lineWidth = 80, minContentWidth = 20, onFold, onOverflow } = {}) {\n if (!lineWidth || lineWidth < 0)\n return text;\n if (lineWidth < minContentWidth)\n minContentWidth = 0;\n const endStep = Math.max(1 + minContentWidth, 1 + lineWidth - indent.length);\n if (text.length <= endStep)\n return text;\n const folds = [];\n const escapedFolds = {};\n let end = lineWidth - indent.length;\n if (typeof indentAtStart === 'number') {\n if (indentAtStart > lineWidth - Math.max(2, minContentWidth))\n folds.push(0);\n else\n end = lineWidth - indentAtStart;\n }\n let split = undefined;\n let prev = undefined;\n let overflow = false;\n let i = -1;\n let escStart = -1;\n let escEnd = -1;\n if (mode === FOLD_BLOCK) {\n i = consumeMoreIndentedLines(text, i, indent.length);\n if (i !== -1)\n end = i + endStep;\n }\n for (let ch; (ch = text[(i += 1)]);) {\n if (mode === FOLD_QUOTED && ch === '\\\\') {\n escStart = i;\n switch (text[i + 1]) {\n case 'x':\n i += 3;\n break;\n case 'u':\n i += 5;\n break;\n case 'U':\n i += 9;\n break;\n default:\n i += 1;\n }\n escEnd = i;\n }\n if (ch === '\\n') {\n if (mode === FOLD_BLOCK)\n i = consumeMoreIndentedLines(text, i, indent.length);\n end = i + indent.length + endStep;\n split = undefined;\n }\n else {\n if (ch === ' ' &&\n prev &&\n prev !== ' ' &&\n prev !== '\\n' &&\n prev !== '\\t') {\n // space surrounded by non-space can be replaced with newline + indent\n const next = text[i + 1];\n if (next && next !== ' ' && next !== '\\n' && next !== '\\t')\n split = i;\n }\n if (i >= end) {\n if (split) {\n folds.push(split);\n end = split + endStep;\n split = undefined;\n }\n else if (mode === FOLD_QUOTED) {\n // white-space collected at end may stretch past lineWidth\n while (prev === ' ' || prev === '\\t') {\n prev = ch;\n ch = text[(i += 1)];\n overflow = true;\n }\n // Account for newline escape, but don't break preceding escape\n const j = i > escEnd + 1 ? i - 2 : escStart - 1;\n // Bail out if lineWidth & minContentWidth are shorter than an escape string\n if (escapedFolds[j])\n return text;\n folds.push(j);\n escapedFolds[j] = true;\n end = j + endStep;\n split = undefined;\n }\n else {\n overflow = true;\n }\n }\n }\n prev = ch;\n }\n if (overflow && onOverflow)\n onOverflow();\n if (folds.length === 0)\n return text;\n if (onFold)\n onFold();\n let res = text.slice(0, folds[0]);\n for (let i = 0; i < folds.length; ++i) {\n const fold = folds[i];\n const end = folds[i + 1] || text.length;\n if (fold === 0)\n res = `\\n${indent}${text.slice(0, end)}`;\n else {\n if (mode === FOLD_QUOTED && escapedFolds[fold])\n res += `${text[fold]}\\\\`;\n res += `\\n${indent}${text.slice(fold + 1, end)}`;\n }\n }\n return res;\n}\n/**\n * Presumes `i + 1` is at the start of a line\n * @returns index of last newline in more-indented block\n */\nfunction consumeMoreIndentedLines(text, i, indent) {\n let end = i;\n let start = i + 1;\n let ch = text[start];\n while (ch === ' ' || ch === '\\t') {\n if (i < start + indent) {\n ch = text[++i];\n }\n else {\n do {\n ch = text[++i];\n } while (ch && ch !== '\\n');\n end = i;\n start = i + 1;\n ch = text[start];\n }\n }\n return end;\n}\n\nexports.FOLD_BLOCK = FOLD_BLOCK;\nexports.FOLD_FLOW = FOLD_FLOW;\nexports.FOLD_QUOTED = FOLD_QUOTED;\nexports.foldFlowLines = foldFlowLines;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzIwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0RBQXNELDBFQUEwRSxJQUFJO0FBQ3BJO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixzQkFBc0I7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixrQkFBa0I7QUFDdEM7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLE9BQU8sRUFBRSxtQkFBbUI7QUFDbkQ7QUFDQTtBQUNBLDBCQUEwQixXQUFXO0FBQ3JDLHdCQUF3QixPQUFPLEVBQUUsMEJBQTBCO0FBQzNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGtCQUFrQjtBQUNsQixpQkFBaUI7QUFDakIsbUJBQW1CO0FBQ25CLHFCQUFxQiIsInNvdXJjZXMiOlsid2VicGFjazovL29ic2lkaWFuLW1pbmRtYXAtbmV4dGdlbi8uL25vZGVfbW9kdWxlcy8ucG5wbS95YW1sQDIuOC4wL25vZGVfbW9kdWxlcy95YW1sL2Rpc3Qvc3RyaW5naWZ5L2ZvbGRGbG93TGluZXMuanM/ZGIzZiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmNvbnN0IEZPTERfRkxPVyA9ICdmbG93JztcbmNvbnN0IEZPTERfQkxPQ0sgPSAnYmxvY2snO1xuY29uc3QgRk9MRF9RVU9URUQgPSAncXVvdGVkJztcbi8qKlxuICogVHJpZXMgdG8ga2VlcCBpbnB1dCBhdCB1cCB0byBgbGluZVdpZHRoYCBjaGFyYWN0ZXJzLCBzcGxpdHRpbmcgb25seSBvbiBzcGFjZXNcbiAqIG5vdCBmb2xsb3dlZCBieSBuZXdsaW5lcyBvciBzcGFjZXMgdW5sZXNzIGBtb2RlYCBpcyBgJ3F1b3RlZCdgLiBMaW5lcyBhcmVcbiAqIHRlcm1pbmF0ZWQgd2l0aCBgXFxuYCBhbmQgc3RhcnRlZCB3aXRoIGBpbmRlbnRgLlxuICovXG5mdW5jdGlvbiBmb2xkRmxvd0xpbmVzKHRleHQsIGluZGVudCwgbW9kZSA9ICdmbG93JywgeyBpbmRlbnRBdFN0YXJ0LCBsaW5lV2lkdGggPSA4MCwgbWluQ29udGVudFdpZHRoID0gMjAsIG9uRm9sZCwgb25PdmVyZmxvdyB9ID0ge30pIHtcbiAgICBpZiAoIWxpbmVXaWR0aCB8fCBsaW5lV2lkdGggPCAwKVxuICAgICAgICByZXR1cm4gdGV4dDtcbiAgICBpZiAobGluZVdpZHRoIDwgbWluQ29udGVudFdpZHRoKVxuICAgICAgICBtaW5Db250ZW50V2lkdGggPSAwO1xuICAgIGNvbnN0IGVuZFN0ZXAgPSBNYXRoLm1heCgxICsgbWluQ29udGVudFdpZHRoLCAxICsgbGluZVdpZHRoIC0gaW5kZW50Lmxlbmd0aCk7XG4gICAgaWYgKHRleHQubGVuZ3RoIDw9IGVuZFN0ZXApXG4gICAgICAgIHJldHVybiB0ZXh0O1xuICAgIGNvbnN0IGZvbGRzID0gW107XG4gICAgY29uc3QgZXNjYXBlZEZvbGRzID0ge307XG4gICAgbGV0IGVuZCA9IGxpbmVXaWR0aCAtIGluZGVudC5sZW5ndGg7XG4gICAgaWYgKHR5cGVvZiBpbmRlbnRBdFN0YXJ0ID09PSAnbnVtYmVyJykge1xuICAgICAgICBpZiAoaW5kZW50QXRTdGFydCA+IGxpbmVXaWR0aCAtIE1hdGgubWF4KDIsIG1pbkNvbnRlbnRXaWR0aCkpXG4gICAgICAgICAgICBmb2xkcy5wdXNoKDApO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICBlbmQgPSBsaW5lV2lkdGggLSBpbmRlbnRBdFN0YXJ0O1xuICAgIH1cbiAgICBsZXQgc3BsaXQgPSB1bmRlZmluZWQ7XG4gICAgbGV0IHByZXYgPSB1bmRlZmluZWQ7XG4gICAgbGV0IG92ZXJmbG93ID0gZmFsc2U7XG4gICAgbGV0IGkgPSAtMTtcbiAgICBsZXQgZXNjU3RhcnQgPSAtMTtcbiAgICBsZXQgZXNjRW5kID0gLTE7XG4gICAgaWYgKG1vZGUgPT09IEZPTERfQkxPQ0spIHtcbiAgICAgICAgaSA9IGNvbnN1bWVNb3JlSW5kZW50ZWRMaW5lcyh0ZXh0LCBpLCBpbmRlbnQubGVuZ3RoKTtcbiAgICAgICAgaWYgKGkgIT09IC0xKVxuICAgICAgICAgICAgZW5kID0gaSArIGVuZFN0ZXA7XG4gICAgfVxuICAgIGZvciAobGV0IGNoOyAoY2ggPSB0ZXh0WyhpICs9IDEpXSk7KSB7XG4gICAgICAgIGlmIChtb2RlID09PSBGT0xEX1FVT1RFRCAmJiBjaCA9PT0gJ1xcXFwnKSB7XG4gICAgICAgICAgICBlc2NTdGFydCA9IGk7XG4gICAgICAgICAgICBzd2l0Y2ggKHRleHRbaSArIDFdKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAneCc6XG4gICAgICAgICAgICAgICAgICAgIGkgKz0gMztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAndSc6XG4gICAgICAgICAgICAgICAgICAgIGkgKz0gNTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnVSc6XG4gICAgICAgICAgICAgICAgICAgIGkgKz0gOTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgaSArPSAxO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZXNjRW5kID0gaTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2ggPT09ICdcXG4nKSB7XG4gICAgICAgICAgICBpZiAobW9kZSA9PT0gRk9MRF9CTE9DSylcbiAgICAgICAgICAgICAgICBpID0gY29uc3VtZU1vcmVJbmRlbnRlZExpbmVzKHRleHQsIGksIGluZGVudC5sZW5ndGgpO1xuICAgICAgICAgICAgZW5kID0gaSArIGluZGVudC5sZW5ndGggKyBlbmRTdGVwO1xuICAgICAgICAgICAgc3BsaXQgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoY2ggPT09ICcgJyAmJlxuICAgICAgICAgICAgICAgIHByZXYgJiZcbiAgICAgICAgICAgICAgICBwcmV2ICE9PSAnICcgJiZcbiAgICAgICAgICAgICAgICBwcmV2ICE9PSAnXFxuJyAmJlxuICAgICAgICAgICAgICAgIHByZXYgIT09ICdcXHQnKSB7XG4gICAgICAgICAgICAgICAgLy8gc3BhY2Ugc3Vycm91bmRlZCBieSBub24tc3BhY2UgY2FuIGJlIHJlcGxhY2VkIHdpdGggbmV3bGluZSArIGluZGVudFxuICAgICAgICAgICAgICAgIGNvbnN0IG5leHQgPSB0ZXh0W2kgKyAxXTtcbiAgICAgICAgICAgICAgICBpZiAobmV4dCAmJiBuZXh0ICE9PSAnICcgJiYgbmV4dCAhPT0gJ1xcbicgJiYgbmV4dCAhPT0gJ1xcdCcpXG4gICAgICAgICAgICAgICAgICAgIHNwbGl0ID0gaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpID49IGVuZCkge1xuICAgICAgICAgICAgICAgIGlmIChzcGxpdCkge1xuICAgICAgICAgICAgICAgICAgICBmb2xkcy5wdXNoKHNwbGl0KTtcbiAgICAgICAgICAgICAgICAgICAgZW5kID0gc3BsaXQgKyBlbmRTdGVwO1xuICAgICAgICAgICAgICAgICAgICBzcGxpdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAobW9kZSA9PT0gRk9MRF9RVU9URUQpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gd2hpdGUtc3BhY2UgY29sbGVjdGVkIGF0IGVuZCBtYXkgc3RyZXRjaCBwYXN0IGxpbmVXaWR0aFxuICAgICAgICAgICAgICAgICAgICB3aGlsZSAocHJldiA9PT0gJyAnIHx8IHByZXYgPT09ICdcXHQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcmV2ID0gY2g7XG4gICAgICAgICAgICAgICAgICAgICAgICBjaCA9IHRleHRbKGkgKz0gMSldO1xuICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3cgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIEFjY291bnQgZm9yIG5ld2xpbmUgZXNjYXBlLCBidXQgZG9uJ3QgYnJlYWsgcHJlY2VkaW5nIGVzY2FwZVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBqID0gaSA+IGVzY0VuZCArIDEgPyBpIC0gMiA6IGVzY1N0YXJ0IC0gMTtcbiAgICAgICAgICAgICAgICAgICAgLy8gQmFpbCBvdXQgaWYgbGluZVdpZHRoICYgbWluQ29udGVudFdpZHRoIGFyZSBzaG9ydGVyIHRoYW4gYW4gZXNjYXBlIHN0cmluZ1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXNjYXBlZEZvbGRzW2pdKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRleHQ7XG4gICAgICAgICAgICAgICAgICAgIGZvbGRzLnB1c2goaik7XG4gICAgICAgICAgICAgICAgICAgIGVzY2FwZWRGb2xkc1tqXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGVuZCA9IGogKyBlbmRTdGVwO1xuICAgICAgICAgICAgICAgICAgICBzcGxpdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIG92ZXJmbG93ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcHJldiA9IGNoO1xuICAgIH1cbiAgICBpZiAob3ZlcmZsb3cgJiYgb25PdmVyZmxvdylcbiAgICAgICAgb25PdmVyZmxvdygpO1xuICAgIGlmIChmb2xkcy5sZW5ndGggPT09IDApXG4gICAgICAgIHJldHVybiB0ZXh0O1xuICAgIGlmIChvbkZvbGQpXG4gICAgICAgIG9uRm9sZCgpO1xuICAgIGxldCByZXMgPSB0ZXh0LnNsaWNlKDAsIGZvbGRzWzBdKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZvbGRzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGNvbnN0IGZvbGQgPSBmb2xkc1tpXTtcbiAgICAgICAgY29uc3QgZW5kID0gZm9sZHNbaSArIDFdIHx8IHRleHQubGVuZ3RoO1xuICAgICAgICBpZiAoZm9sZCA9PT0gMClcbiAgICAgICAgICAgIHJlcyA9IGBcXG4ke2luZGVudH0ke3RleHQuc2xpY2UoMCwgZW5kKX1gO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChtb2RlID09PSBGT0xEX1FVT1RFRCAmJiBlc2NhcGVkRm9sZHNbZm9sZF0pXG4gICAgICAgICAgICAgICAgcmVzICs9IGAke3RleHRbZm9sZF19XFxcXGA7XG4gICAgICAgICAgICByZXMgKz0gYFxcbiR7aW5kZW50fSR7dGV4dC5zbGljZShmb2xkICsgMSwgZW5kKX1gO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXM7XG59XG4vKipcbiAqIFByZXN1bWVzIGBpICsgMWAgaXMgYXQgdGhlIHN0YXJ0IG9mIGEgbGluZVxuICogQHJldHVybnMgaW5kZXggb2YgbGFzdCBuZXdsaW5lIGluIG1vcmUtaW5kZW50ZWQgYmxvY2tcbiAqL1xuZnVuY3Rpb24gY29uc3VtZU1vcmVJbmRlbnRlZExpbmVzKHRleHQsIGksIGluZGVudCkge1xuICAgIGxldCBlbmQgPSBpO1xuICAgIGxldCBzdGFydCA9IGkgKyAxO1xuICAgIGxldCBjaCA9IHRleHRbc3RhcnRdO1xuICAgIHdoaWxlIChjaCA9PT0gJyAnIHx8IGNoID09PSAnXFx0Jykge1xuICAgICAgICBpZiAoaSA8IHN0YXJ0ICsgaW5kZW50KSB7XG4gICAgICAgICAgICBjaCA9IHRleHRbKytpXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICBjaCA9IHRleHRbKytpXTtcbiAgICAgICAgICAgIH0gd2hpbGUgKGNoICYmIGNoICE9PSAnXFxuJyk7XG4gICAgICAgICAgICBlbmQgPSBpO1xuICAgICAgICAgICAgc3RhcnQgPSBpICsgMTtcbiAgICAgICAgICAgIGNoID0gdGV4dFtzdGFydF07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGVuZDtcbn1cblxuZXhwb3J0cy5GT0xEX0JMT0NLID0gRk9MRF9CTE9DSztcbmV4cG9ydHMuRk9MRF9GTE9XID0gRk9MRF9GTE9XO1xuZXhwb3J0cy5GT0xEX1FVT1RFRCA9IEZPTERfUVVPVEVEO1xuZXhwb3J0cy5mb2xkRmxvd0xpbmVzID0gZm9sZEZsb3dMaW5lcztcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///3205\n")},3206:module=>{eval("/*\nLanguage: C#\nAuthor: Jason Diamond \nContributor: Nicolas LLOBERA , Pieter Vantorre , David Pine \nWebsite: https://docs.microsoft.com/dotnet/csharp/\nCategory: common\n*/\n\n/** @type LanguageFn */\nfunction csharp(hljs) {\n const BUILT_IN_KEYWORDS = [\n 'bool',\n 'byte',\n 'char',\n 'decimal',\n 'delegate',\n 'double',\n 'dynamic',\n 'enum',\n 'float',\n 'int',\n 'long',\n 'nint',\n 'nuint',\n 'object',\n 'sbyte',\n 'short',\n 'string',\n 'ulong',\n 'uint',\n 'ushort'\n ];\n const FUNCTION_MODIFIERS = [\n 'public',\n 'private',\n 'protected',\n 'static',\n 'internal',\n 'protected',\n 'abstract',\n 'async',\n 'extern',\n 'override',\n 'unsafe',\n 'virtual',\n 'new',\n 'sealed',\n 'partial'\n ];\n const LITERAL_KEYWORDS = [\n 'default',\n 'false',\n 'null',\n 'true'\n ];\n const NORMAL_KEYWORDS = [\n 'abstract',\n 'as',\n 'base',\n 'break',\n 'case',\n 'catch',\n 'class',\n 'const',\n 'continue',\n 'do',\n 'else',\n 'event',\n 'explicit',\n 'extern',\n 'finally',\n 'fixed',\n 'for',\n 'foreach',\n 'goto',\n 'if',\n 'implicit',\n 'in',\n 'interface',\n 'internal',\n 'is',\n 'lock',\n 'namespace',\n 'new',\n 'operator',\n 'out',\n 'override',\n 'params',\n 'private',\n 'protected',\n 'public',\n 'readonly',\n 'record',\n 'ref',\n 'return',\n 'scoped',\n 'sealed',\n 'sizeof',\n 'stackalloc',\n 'static',\n 'struct',\n 'switch',\n 'this',\n 'throw',\n 'try',\n 'typeof',\n 'unchecked',\n 'unsafe',\n 'using',\n 'virtual',\n 'void',\n 'volatile',\n 'while'\n ];\n const CONTEXTUAL_KEYWORDS = [\n 'add',\n 'alias',\n 'and',\n 'ascending',\n 'args',\n 'async',\n 'await',\n 'by',\n 'descending',\n 'dynamic',\n 'equals',\n 'file',\n 'from',\n 'get',\n 'global',\n 'group',\n 'init',\n 'into',\n 'join',\n 'let',\n 'nameof',\n 'not',\n 'notnull',\n 'on',\n 'or',\n 'orderby',\n 'partial',\n 'record',\n 'remove',\n 'required',\n 'scoped',\n 'select',\n 'set',\n 'unmanaged',\n 'value|0',\n 'var',\n 'when',\n 'where',\n 'with',\n 'yield'\n ];\n\n const KEYWORDS = {\n keyword: NORMAL_KEYWORDS.concat(CONTEXTUAL_KEYWORDS),\n built_in: BUILT_IN_KEYWORDS,\n literal: LITERAL_KEYWORDS\n };\n const TITLE_MODE = hljs.inherit(hljs.TITLE_MODE, { begin: '[a-zA-Z](\\\\.?\\\\w)*' });\n const NUMBERS = {\n className: 'number',\n variants: [\n { begin: '\\\\b(0b[01\\']+)' },\n { begin: '(-?)\\\\b([\\\\d\\']+(\\\\.[\\\\d\\']*)?|\\\\.[\\\\d\\']+)(u|U|l|L|ul|UL|f|F|b|B)' },\n { begin: '(-?)(\\\\b0[xX][a-fA-F0-9\\']+|(\\\\b[\\\\d\\']+(\\\\.[\\\\d\\']*)?|\\\\.[\\\\d\\']+)([eE][-+]?[\\\\d\\']+)?)' }\n ],\n relevance: 0\n };\n const RAW_STRING = {\n className: 'string',\n begin: /\"\"\"(\"*)(?!\")(.|\\n)*?\"\"\"\\1/,\n relevance: 1\n };\n const VERBATIM_STRING = {\n className: 'string',\n begin: '@\"',\n end: '\"',\n contains: [ { begin: '\"\"' } ]\n };\n const VERBATIM_STRING_NO_LF = hljs.inherit(VERBATIM_STRING, { illegal: /\\n/ });\n const SUBST = {\n className: 'subst',\n begin: /\\{/,\n end: /\\}/,\n keywords: KEYWORDS\n };\n const SUBST_NO_LF = hljs.inherit(SUBST, { illegal: /\\n/ });\n const INTERPOLATED_STRING = {\n className: 'string',\n begin: /\\$\"/,\n end: '\"',\n illegal: /\\n/,\n contains: [\n { begin: /\\{\\{/ },\n { begin: /\\}\\}/ },\n hljs.BACKSLASH_ESCAPE,\n SUBST_NO_LF\n ]\n };\n const INTERPOLATED_VERBATIM_STRING = {\n className: 'string',\n begin: /\\$@\"/,\n end: '\"',\n contains: [\n { begin: /\\{\\{/ },\n { begin: /\\}\\}/ },\n { begin: '\"\"' },\n SUBST\n ]\n };\n const INTERPOLATED_VERBATIM_STRING_NO_LF = hljs.inherit(INTERPOLATED_VERBATIM_STRING, {\n illegal: /\\n/,\n contains: [\n { begin: /\\{\\{/ },\n { begin: /\\}\\}/ },\n { begin: '\"\"' },\n SUBST_NO_LF\n ]\n });\n SUBST.contains = [\n INTERPOLATED_VERBATIM_STRING,\n INTERPOLATED_STRING,\n VERBATIM_STRING,\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE,\n NUMBERS,\n hljs.C_BLOCK_COMMENT_MODE\n ];\n SUBST_NO_LF.contains = [\n INTERPOLATED_VERBATIM_STRING_NO_LF,\n INTERPOLATED_STRING,\n VERBATIM_STRING_NO_LF,\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE,\n NUMBERS,\n hljs.inherit(hljs.C_BLOCK_COMMENT_MODE, { illegal: /\\n/ })\n ];\n const STRING = { variants: [\n RAW_STRING,\n INTERPOLATED_VERBATIM_STRING,\n INTERPOLATED_STRING,\n VERBATIM_STRING,\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE\n ] };\n\n const GENERIC_MODIFIER = {\n begin: \"<\",\n end: \">\",\n contains: [\n { beginKeywords: \"in out\" },\n TITLE_MODE\n ]\n };\n const TYPE_IDENT_RE = hljs.IDENT_RE + '(<' + hljs.IDENT_RE + '(\\\\s*,\\\\s*' + hljs.IDENT_RE + ')*>)?(\\\\[\\\\])?';\n const AT_IDENTIFIER = {\n // prevents expressions like `@class` from incorrect flagging\n // `class` as a keyword\n begin: \"@\" + hljs.IDENT_RE,\n relevance: 0\n };\n\n return {\n name: 'C#',\n aliases: [\n 'cs',\n 'c#'\n ],\n keywords: KEYWORDS,\n illegal: /::/,\n contains: [\n hljs.COMMENT(\n '///',\n '$',\n {\n returnBegin: true,\n contains: [\n {\n className: 'doctag',\n variants: [\n {\n begin: '///',\n relevance: 0\n },\n { begin: '\x3c!--|--\x3e' },\n {\n begin: ''\n }\n ]\n }\n ]\n }\n ),\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE,\n {\n className: 'meta',\n begin: '#',\n end: '$',\n keywords: { keyword: 'if else elif endif define undef warning error line region endregion pragma checksum' }\n },\n STRING,\n NUMBERS,\n {\n beginKeywords: 'class interface',\n relevance: 0,\n end: /[{;=]/,\n illegal: /[^\\s:,]/,\n contains: [\n { beginKeywords: \"where class\" },\n TITLE_MODE,\n GENERIC_MODIFIER,\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE\n ]\n },\n {\n beginKeywords: 'namespace',\n relevance: 0,\n end: /[{;=]/,\n illegal: /[^\\s:]/,\n contains: [\n TITLE_MODE,\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE\n ]\n },\n {\n beginKeywords: 'record',\n relevance: 0,\n end: /[{;=]/,\n illegal: /[^\\s:]/,\n contains: [\n TITLE_MODE,\n GENERIC_MODIFIER,\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE\n ]\n },\n {\n // [Attributes(\"\")]\n className: 'meta',\n begin: '^\\\\s*\\\\[(?=[\\\\w])',\n excludeBegin: true,\n end: '\\\\]',\n excludeEnd: true,\n contains: [\n {\n className: 'string',\n begin: /\"/,\n end: /\"/\n }\n ]\n },\n {\n // Expression keywords prevent 'keyword Name(...)' from being\n // recognized as a function definition\n beginKeywords: 'new return throw await else',\n relevance: 0\n },\n {\n className: 'function',\n begin: '(' + TYPE_IDENT_RE + '\\\\s+)+' + hljs.IDENT_RE + '\\\\s*(<[^=]+>\\\\s*)?\\\\(',\n returnBegin: true,\n end: /\\s*[{;=]/,\n excludeEnd: true,\n keywords: KEYWORDS,\n contains: [\n // prevents these from being highlighted `title`\n {\n beginKeywords: FUNCTION_MODIFIERS.join(\" \"),\n relevance: 0\n },\n {\n begin: hljs.IDENT_RE + '\\\\s*(<[^=]+>\\\\s*)?\\\\(',\n returnBegin: true,\n contains: [\n hljs.TITLE_MODE,\n GENERIC_MODIFIER\n ],\n relevance: 0\n },\n { match: /\\(\\)/ },\n {\n className: 'params',\n begin: /\\(/,\n end: /\\)/,\n excludeBegin: true,\n excludeEnd: true,\n keywords: KEYWORDS,\n relevance: 0,\n contains: [\n STRING,\n NUMBERS,\n hljs.C_BLOCK_COMMENT_MODE\n ]\n },\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE\n ]\n },\n AT_IDENTIFIER\n ]\n };\n}\n\nmodule.exports = csharp;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzIwNi5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscURBQXFELDZCQUE2QjtBQUNsRjtBQUNBO0FBQ0E7QUFDQSxRQUFRLHlCQUF5QjtBQUNqQyxRQUFRLDZFQUE2RTtBQUNyRixRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLGNBQWM7QUFDaEM7QUFDQSxnRUFBZ0UsZUFBZTtBQUMvRTtBQUNBO0FBQ0EsY0FBYztBQUNkLFlBQVk7QUFDWjtBQUNBO0FBQ0EsNENBQTRDLGVBQWU7QUFDM0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxVQUFVLEVBQUUsR0FBRztBQUN2QixRQUFRLFVBQVUsRUFBRSxHQUFHO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsVUFBVSxFQUFFLEdBQUc7QUFDdkIsUUFBUSxVQUFVLEVBQUUsR0FBRztBQUN2QixRQUFRLGFBQWE7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxVQUFVLEVBQUUsR0FBRztBQUN2QixRQUFRLFVBQVUsRUFBRSxHQUFHO0FBQ3ZCLFFBQVEsYUFBYTtBQUNyQjtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOENBQThDLGVBQWU7QUFDN0Q7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLHlCQUF5QjtBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakIsa0JBQWtCLG1CQUFtQjtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0I7QUFDcEIsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBLFlBQVksOEJBQThCO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1gsWUFBWSxlQUFlO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL29ic2lkaWFuLW1pbmRtYXAtbmV4dGdlbi8uL25vZGVfbW9kdWxlcy8ucG5wbS9oaWdobGlnaHQuanNAMTEuMTEuMS9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvY3NoYXJwLmpzPzA2Y2YiXSwic291cmNlc0NvbnRlbnQiOlsiLypcbkxhbmd1YWdlOiBDI1xuQXV0aG9yOiBKYXNvbiBEaWFtb25kIDxqYXNvbkBkaWFtb25kLm5hbWU+XG5Db250cmlidXRvcjogTmljb2xhcyBMTE9CRVJBIDxubGxvYmVyYUBnbWFpbC5jb20+LCBQaWV0ZXIgVmFudG9ycmUgPHBpZXRlcnZhbnRvcnJlQGdtYWlsLmNvbT4sIERhdmlkIFBpbmUgPGRhdmlkLnBpbmVAbWljcm9zb2Z0LmNvbT5cbldlYnNpdGU6IGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2RvdG5ldC9jc2hhcnAvXG5DYXRlZ29yeTogY29tbW9uXG4qL1xuXG4vKiogQHR5cGUgTGFuZ3VhZ2VGbiAqL1xuZnVuY3Rpb24gY3NoYXJwKGhsanMpIHtcbiAgY29uc3QgQlVJTFRfSU5fS0VZV09SRFMgPSBbXG4gICAgJ2Jvb2wnLFxuICAgICdieXRlJyxcbiAgICAnY2hhcicsXG4gICAgJ2RlY2ltYWwnLFxuICAgICdkZWxlZ2F0ZScsXG4gICAgJ2RvdWJsZScsXG4gICAgJ2R5bmFtaWMnLFxuICAgICdlbnVtJyxcbiAgICAnZmxvYXQnLFxuICAgICdpbnQnLFxuICAgICdsb25nJyxcbiAgICAnbmludCcsXG4gICAgJ251aW50JyxcbiAgICAnb2JqZWN0JyxcbiAgICAnc2J5dGUnLFxuICAgICdzaG9ydCcsXG4gICAgJ3N0cmluZycsXG4gICAgJ3Vsb25nJyxcbiAgICAndWludCcsXG4gICAgJ3VzaG9ydCdcbiAgXTtcbiAgY29uc3QgRlVOQ1RJT05fTU9ESUZJRVJTID0gW1xuICAgICdwdWJsaWMnLFxuICAgICdwcml2YXRlJyxcbiAgICAncHJvdGVjdGVkJyxcbiAgICAnc3RhdGljJyxcbiAgICAnaW50ZXJuYWwnLFxuICAgICdwcm90ZWN0ZWQnLFxuICAgICdhYnN0cmFjdCcsXG4gICAgJ2FzeW5jJyxcbiAgICAnZXh0ZXJuJyxcbiAgICAnb3ZlcnJpZGUnLFxuICAgICd1bnNhZmUnLFxuICAgICd2aXJ0dWFsJyxcbiAgICAnbmV3JyxcbiAgICAnc2VhbGVkJyxcbiAgICAncGFydGlhbCdcbiAgXTtcbiAgY29uc3QgTElURVJBTF9LRVlXT1JEUyA9IFtcbiAgICAnZGVmYXVsdCcsXG4gICAgJ2ZhbHNlJyxcbiAgICAnbnVsbCcsXG4gICAgJ3RydWUnXG4gIF07XG4gIGNvbnN0IE5PUk1BTF9LRVlXT1JEUyA9IFtcbiAgICAnYWJzdHJhY3QnLFxuICAgICdhcycsXG4gICAgJ2Jhc2UnLFxuICAgICdicmVhaycsXG4gICAgJ2Nhc2UnLFxuICAgICdjYXRjaCcsXG4gICAgJ2NsYXNzJyxcbiAgICAnY29uc3QnLFxuICAgICdjb250aW51ZScsXG4gICAgJ2RvJyxcbiAgICAnZWxzZScsXG4gICAgJ2V2ZW50JyxcbiAgICAnZXhwbGljaXQnLFxuICAgICdleHRlcm4nLFxuICAgICdmaW5hbGx5JyxcbiAgICAnZml4ZWQnLFxuICAgICdmb3InLFxuICAgICdmb3JlYWNoJyxcbiAgICAnZ290bycsXG4gICAgJ2lmJyxcbiAgICAnaW1wbGljaXQnLFxuICAgICdpbicsXG4gICAgJ2ludGVyZmFjZScsXG4gICAgJ2ludGVybmFsJyxcbiAgICAnaXMnLFxuICAgICdsb2NrJyxcbiAgICAnbmFtZXNwYWNlJyxcbiAgICAnbmV3JyxcbiAgICAnb3BlcmF0b3InLFxuICAgICdvdXQnLFxuICAgICdvdmVycmlkZScsXG4gICAgJ3BhcmFtcycsXG4gICAgJ3ByaXZhdGUnLFxuICAgICdwcm90ZWN0ZWQnLFxuICAgICdwdWJsaWMnLFxuICAgICdyZWFkb25seScsXG4gICAgJ3JlY29yZCcsXG4gICAgJ3JlZicsXG4gICAgJ3JldHVybicsXG4gICAgJ3Njb3BlZCcsXG4gICAgJ3NlYWxlZCcsXG4gICAgJ3NpemVvZicsXG4gICAgJ3N0YWNrYWxsb2MnLFxuICAgICdzdGF0aWMnLFxuICAgICdzdHJ1Y3QnLFxuICAgICdzd2l0Y2gnLFxuICAgICd0aGlzJyxcbiAgICAndGhyb3cnLFxuICAgICd0cnknLFxuICAgICd0eXBlb2YnLFxuICAgICd1bmNoZWNrZWQnLFxuICAgICd1bnNhZmUnLFxuICAgICd1c2luZycsXG4gICAgJ3ZpcnR1YWwnLFxuICAgICd2b2lkJyxcbiAgICAndm9sYXRpbGUnLFxuICAgICd3aGlsZSdcbiAgXTtcbiAgY29uc3QgQ09OVEVYVFVBTF9LRVlXT1JEUyA9IFtcbiAgICAnYWRkJyxcbiAgICAnYWxpYXMnLFxuICAgICdhbmQnLFxuICAgICdhc2NlbmRpbmcnLFxuICAgICdhcmdzJyxcbiAgICAnYXN5bmMnLFxuICAgICdhd2FpdCcsXG4gICAgJ2J5JyxcbiAgICAnZGVzY2VuZGluZycsXG4gICAgJ2R5bmFtaWMnLFxuICAgICdlcXVhbHMnLFxuICAgICdmaWxlJyxcbiAgICAnZnJvbScsXG4gICAgJ2dldCcsXG4gICAgJ2dsb2JhbCcsXG4gICAgJ2dyb3VwJyxcbiAgICAnaW5pdCcsXG4gICAgJ2ludG8nLFxuICAgICdqb2luJyxcbiAgICAnbGV0JyxcbiAgICAnbmFtZW9mJyxcbiAgICAnbm90JyxcbiAgICAnbm90bnVsbCcsXG4gICAgJ29uJyxcbiAgICAnb3InLFxuICAgICdvcmRlcmJ5JyxcbiAgICAncGFydGlhbCcsXG4gICAgJ3JlY29yZCcsXG4gICAgJ3JlbW92ZScsXG4gICAgJ3JlcXVpcmVkJyxcbiAgICAnc2NvcGVkJyxcbiAgICAnc2VsZWN0JyxcbiAgICAnc2V0JyxcbiAgICAndW5tYW5hZ2VkJyxcbiAgICAndmFsdWV8MCcsXG4gICAgJ3ZhcicsXG4gICAgJ3doZW4nLFxuICAgICd3aGVyZScsXG4gICAgJ3dpdGgnLFxuICAgICd5aWVsZCdcbiAgXTtcblxuICBjb25zdCBLRVlXT1JEUyA9IHtcbiAgICBrZXl3b3JkOiBOT1JNQUxfS0VZV09SRFMuY29uY2F0KENPTlRFWFRVQUxfS0VZV09SRFMpLFxuICAgIGJ1aWx0X2luOiBCVUlMVF9JTl9LRVlXT1JEUyxcbiAgICBsaXRlcmFsOiBMSVRFUkFMX0tFWVdPUkRTXG4gIH07XG4gIGNvbnN0IFRJVExFX01PREUgPSBobGpzLmluaGVyaXQoaGxqcy5USVRMRV9NT0RFLCB7IGJlZ2luOiAnW2EtekEtWl0oXFxcXC4/XFxcXHcpKicgfSk7XG4gIGNvbnN0IE5VTUJFUlMgPSB7XG4gICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICB2YXJpYW50czogW1xuICAgICAgeyBiZWdpbjogJ1xcXFxiKDBiWzAxXFwnXSspJyB9LFxuICAgICAgeyBiZWdpbjogJygtPylcXFxcYihbXFxcXGRcXCddKyhcXFxcLltcXFxcZFxcJ10qKT98XFxcXC5bXFxcXGRcXCddKykodXxVfGx8THx1bHxVTHxmfEZ8YnxCKScgfSxcbiAgICAgIHsgYmVnaW46ICcoLT8pKFxcXFxiMFt4WF1bYS1mQS1GMC05XFwnXSt8KFxcXFxiW1xcXFxkXFwnXSsoXFxcXC5bXFxcXGRcXCddKik/fFxcXFwuW1xcXFxkXFwnXSspKFtlRV1bLStdP1tcXFxcZFxcJ10rKT8pJyB9XG4gICAgXSxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcbiAgY29uc3QgUkFXX1NUUklORyA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIGJlZ2luOiAvXCJcIlwiKFwiKikoPyFcIikoLnxcXG4pKj9cIlwiXCJcXDEvLFxuICAgIHJlbGV2YW5jZTogMVxuICB9O1xuICBjb25zdCBWRVJCQVRJTV9TVFJJTkcgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICBiZWdpbjogJ0BcIicsXG4gICAgZW5kOiAnXCInLFxuICAgIGNvbnRhaW5zOiBbIHsgYmVnaW46ICdcIlwiJyB9IF1cbiAgfTtcbiAgY29uc3QgVkVSQkFUSU1fU1RSSU5HX05PX0xGID0gaGxqcy5pbmhlcml0KFZFUkJBVElNX1NUUklORywgeyBpbGxlZ2FsOiAvXFxuLyB9KTtcbiAgY29uc3QgU1VCU1QgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3Vic3QnLFxuICAgIGJlZ2luOiAvXFx7LyxcbiAgICBlbmQ6IC9cXH0vLFxuICAgIGtleXdvcmRzOiBLRVlXT1JEU1xuICB9O1xuICBjb25zdCBTVUJTVF9OT19MRiA9IGhsanMuaW5oZXJpdChTVUJTVCwgeyBpbGxlZ2FsOiAvXFxuLyB9KTtcbiAgY29uc3QgSU5URVJQT0xBVEVEX1NUUklORyA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIGJlZ2luOiAvXFwkXCIvLFxuICAgIGVuZDogJ1wiJyxcbiAgICBpbGxlZ2FsOiAvXFxuLyxcbiAgICBjb250YWluczogW1xuICAgICAgeyBiZWdpbjogL1xce1xcey8gfSxcbiAgICAgIHsgYmVnaW46IC9cXH1cXH0vIH0sXG4gICAgICBobGpzLkJBQ0tTTEFTSF9FU0NBUEUsXG4gICAgICBTVUJTVF9OT19MRlxuICAgIF1cbiAgfTtcbiAgY29uc3QgSU5URVJQT0xBVEVEX1ZFUkJBVElNX1NUUklORyA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIGJlZ2luOiAvXFwkQFwiLyxcbiAgICBlbmQ6ICdcIicsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHsgYmVnaW46IC9cXHtcXHsvIH0sXG4gICAgICB7IGJlZ2luOiAvXFx9XFx9LyB9LFxuICAgICAgeyBiZWdpbjogJ1wiXCInIH0sXG4gICAgICBTVUJTVFxuICAgIF1cbiAgfTtcbiAgY29uc3QgSU5URVJQT0xBVEVEX1ZFUkJBVElNX1NUUklOR19OT19MRiA9IGhsanMuaW5oZXJpdChJTlRFUlBPTEFURURfVkVSQkFUSU1fU1RSSU5HLCB7XG4gICAgaWxsZWdhbDogL1xcbi8sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHsgYmVnaW46IC9cXHtcXHsvIH0sXG4gICAgICB7IGJlZ2luOiAvXFx9XFx9LyB9LFxuICAgICAgeyBiZWdpbjogJ1wiXCInIH0sXG4gICAgICBTVUJTVF9OT19MRlxuICAgIF1cbiAgfSk7XG4gIFNVQlNULmNvbnRhaW5zID0gW1xuICAgIElOVEVSUE9MQVRFRF9WRVJCQVRJTV9TVFJJTkcsXG4gICAgSU5URVJQT0xBVEVEX1NUUklORyxcbiAgICBWRVJCQVRJTV9TVFJJTkcsXG4gICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgTlVNQkVSUyxcbiAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFXG4gIF07XG4gIFNVQlNUX05PX0xGLmNvbnRhaW5zID0gW1xuICAgIElOVEVSUE9MQVRFRF9WRVJCQVRJTV9TVFJJTkdfTk9fTEYsXG4gICAgSU5URVJQT0xBVEVEX1NUUklORyxcbiAgICBWRVJCQVRJTV9TVFJJTkdfTk9fTEYsXG4gICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgTlVNQkVSUyxcbiAgICBobGpzLmluaGVyaXQoaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSwgeyBpbGxlZ2FsOiAvXFxuLyB9KVxuICBdO1xuICBjb25zdCBTVFJJTkcgPSB7IHZhcmlhbnRzOiBbXG4gICAgUkFXX1NUUklORyxcbiAgICBJTlRFUlBPTEFURURfVkVSQkFUSU1fU1RSSU5HLFxuICAgIElOVEVSUE9MQVRFRF9TVFJJTkcsXG4gICAgVkVSQkFUSU1fU1RSSU5HLFxuICAgIGhsanMuQVBPU19TVFJJTkdfTU9ERSxcbiAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFXG4gIF0gfTtcblxuICBjb25zdCBHRU5FUklDX01PRElGSUVSID0ge1xuICAgIGJlZ2luOiBcIjxcIixcbiAgICBlbmQ6IFwiPlwiLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7IGJlZ2luS2V5d29yZHM6IFwiaW4gb3V0XCIgfSxcbiAgICAgIFRJVExFX01PREVcbiAgICBdXG4gIH07XG4gIGNvbnN0IFRZUEVfSURFTlRfUkUgPSBobGpzLklERU5UX1JFICsgJyg8JyArIGhsanMuSURFTlRfUkUgKyAnKFxcXFxzKixcXFxccyonICsgaGxqcy5JREVOVF9SRSArICcpKj4pPyhcXFxcW1xcXFxdKT8nO1xuICBjb25zdCBBVF9JREVOVElGSUVSID0ge1xuICAgIC8vIHByZXZlbnRzIGV4cHJlc3Npb25zIGxpa2UgYEBjbGFzc2AgZnJvbSBpbmNvcnJlY3QgZmxhZ2dpbmdcbiAgICAvLyBgY2xhc3NgIGFzIGEga2V5d29yZFxuICAgIGJlZ2luOiBcIkBcIiArIGhsanMuSURFTlRfUkUsXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnQyMnLFxuICAgIGFsaWFzZXM6IFtcbiAgICAgICdjcycsXG4gICAgICAnYyMnXG4gICAgXSxcbiAgICBrZXl3b3JkczogS0VZV09SRFMsXG4gICAgaWxsZWdhbDogLzo6LyxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5DT01NRU5UKFxuICAgICAgICAnLy8vJyxcbiAgICAgICAgJyQnLFxuICAgICAgICB7XG4gICAgICAgICAgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnZG9jdGFnJyxcbiAgICAgICAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBiZWdpbjogJy8vLycsXG4gICAgICAgICAgICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHsgYmVnaW46ICc8IS0tfC0tPicgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBiZWdpbjogJzwvPycsXG4gICAgICAgICAgICAgICAgICBlbmQ6ICc+J1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfVxuICAgICAgICAgIF1cbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgICBiZWdpbjogJyMnLFxuICAgICAgICBlbmQ6ICckJyxcbiAgICAgICAga2V5d29yZHM6IHsga2V5d29yZDogJ2lmIGVsc2UgZWxpZiBlbmRpZiBkZWZpbmUgdW5kZWYgd2FybmluZyBlcnJvciBsaW5lIHJlZ2lvbiBlbmRyZWdpb24gcHJhZ21hIGNoZWNrc3VtJyB9XG4gICAgICB9LFxuICAgICAgU1RSSU5HLFxuICAgICAgTlVNQkVSUyxcbiAgICAgIHtcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ2NsYXNzIGludGVyZmFjZScsXG4gICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgZW5kOiAvW3s7PV0vLFxuICAgICAgICBpbGxlZ2FsOiAvW15cXHM6LF0vLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIHsgYmVnaW5LZXl3b3JkczogXCJ3aGVyZSBjbGFzc1wiIH0sXG4gICAgICAgICAgVElUTEVfTU9ERSxcbiAgICAgICAgICBHRU5FUklDX01PRElGSUVSLFxuICAgICAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICduYW1lc3BhY2UnLFxuICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgIGVuZDogL1t7Oz1dLyxcbiAgICAgICAgaWxsZWdhbDogL1teXFxzOl0vLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIFRJVExFX01PREUsXG4gICAgICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREVcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ3JlY29yZCcsXG4gICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgZW5kOiAvW3s7PV0vLFxuICAgICAgICBpbGxlZ2FsOiAvW15cXHM6XS8sXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgVElUTEVfTU9ERSxcbiAgICAgICAgICBHRU5FUklDX01PRElGSUVSLFxuICAgICAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIC8vIFtBdHRyaWJ1dGVzKFwiXCIpXVxuICAgICAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICAgICAgYmVnaW46ICdeXFxcXHMqXFxcXFsoPz1bXFxcXHddKScsXG4gICAgICAgIGV4Y2x1ZGVCZWdpbjogdHJ1ZSxcbiAgICAgICAgZW5kOiAnXFxcXF0nLFxuICAgICAgICBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgICAgICBiZWdpbjogL1wiLyxcbiAgICAgICAgICAgIGVuZDogL1wiL1xuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgLy8gRXhwcmVzc2lvbiBrZXl3b3JkcyBwcmV2ZW50ICdrZXl3b3JkIE5hbWUoLi4uKScgZnJvbSBiZWluZ1xuICAgICAgICAvLyByZWNvZ25pemVkIGFzIGEgZnVuY3Rpb24gZGVmaW5pdGlvblxuICAgICAgICBiZWdpbktleXdvcmRzOiAnbmV3IHJldHVybiB0aHJvdyBhd2FpdCBlbHNlJyxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdmdW5jdGlvbicsXG4gICAgICAgIGJlZ2luOiAnKCcgKyBUWVBFX0lERU5UX1JFICsgJ1xcXFxzKykrJyArIGhsanMuSURFTlRfUkUgKyAnXFxcXHMqKDxbXj1dKz5cXFxccyopP1xcXFwoJyxcbiAgICAgICAgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgICAgIGVuZDogL1xccypbezs9XS8sXG4gICAgICAgIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgIGtleXdvcmRzOiBLRVlXT1JEUyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAvLyBwcmV2ZW50cyB0aGVzZSBmcm9tIGJlaW5nIGhpZ2hsaWdodGVkIGB0aXRsZWBcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbktleXdvcmRzOiBGVU5DVElPTl9NT0RJRklFUlMuam9pbihcIiBcIiksXG4gICAgICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiBobGpzLklERU5UX1JFICsgJ1xcXFxzKig8W149XSs+XFxcXHMqKT9cXFxcKCcsXG4gICAgICAgICAgICByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICAgIGhsanMuVElUTEVfTU9ERSxcbiAgICAgICAgICAgICAgR0VORVJJQ19NT0RJRklFUlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICAgIH0sXG4gICAgICAgICAgeyBtYXRjaDogL1xcKFxcKS8gfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdwYXJhbXMnLFxuICAgICAgICAgICAgYmVnaW46IC9cXCgvLFxuICAgICAgICAgICAgZW5kOiAvXFwpLyxcbiAgICAgICAgICAgIGV4Y2x1ZGVCZWdpbjogdHJ1ZSxcbiAgICAgICAgICAgIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgICAgICBrZXl3b3JkczogS0VZV09SRFMsXG4gICAgICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICAgICBTVFJJTkcsXG4gICAgICAgICAgICAgIE5VTUJFUlMsXG4gICAgICAgICAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREVcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBBVF9JREVOVElGSUVSXG4gICAgXVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNzaGFycDtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///3206\n")},3208:module=>{eval("/*\nLanguage: HTML, XML\nWebsite: https://www.w3.org/XML/\nCategory: common, web\nAudit: 2020\n*/\n\n/** @type LanguageFn */\nfunction xml(hljs) {\n const regex = hljs.regex;\n // XML names can have the following additional letters: https://www.w3.org/TR/xml/#NT-NameChar\n // OTHER_NAME_CHARS = /[:\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]/;\n // Element names start with NAME_START_CHAR followed by optional other Unicode letters, ASCII digits, hyphens, underscores, and periods\n // const TAG_NAME_RE = regex.concat(/[A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]/, regex.optional(/[A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*:/), /[A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*/);;\n // const XML_IDENT_RE = /[A-Z_a-z:\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]+/;\n // const TAG_NAME_RE = regex.concat(/[A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]/, regex.optional(/[A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*:/), /[A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*/);\n // however, to cater for performance and more Unicode support rely simply on the Unicode letter class\n const TAG_NAME_RE = regex.concat(/[\\p{L}_]/u, regex.optional(/[\\p{L}0-9_.-]*:/u), /[\\p{L}0-9_.-]*/u);\n const XML_IDENT_RE = /[\\p{L}0-9._:-]+/u;\n const XML_ENTITIES = {\n className: 'symbol',\n begin: /&[a-z]+;|&#[0-9]+;|&#x[a-f0-9]+;/\n };\n const XML_META_KEYWORDS = {\n begin: /\\s/,\n contains: [\n {\n className: 'keyword',\n begin: /#?[a-z_][a-z1-9_-]+/,\n illegal: /\\n/\n }\n ]\n };\n const XML_META_PAR_KEYWORDS = hljs.inherit(XML_META_KEYWORDS, {\n begin: /\\(/,\n end: /\\)/\n });\n const APOS_META_STRING_MODE = hljs.inherit(hljs.APOS_STRING_MODE, { className: 'string' });\n const QUOTE_META_STRING_MODE = hljs.inherit(hljs.QUOTE_STRING_MODE, { className: 'string' });\n const TAG_INTERNALS = {\n endsWithParent: true,\n illegal: /`]+/ }\n ]\n }\n ]\n }\n ]\n };\n return {\n name: 'HTML, XML',\n aliases: [\n 'html',\n 'xhtml',\n 'rss',\n 'atom',\n 'xjb',\n 'xsd',\n 'xsl',\n 'plist',\n 'wsf',\n 'svg'\n ],\n case_insensitive: true,\n unicodeRegex: true,\n contains: [\n {\n className: 'meta',\n begin: //,\n relevance: 10,\n contains: [\n XML_META_KEYWORDS,\n QUOTE_META_STRING_MODE,\n APOS_META_STRING_MODE,\n XML_META_PAR_KEYWORDS,\n {\n begin: /\\[/,\n end: /\\]/,\n contains: [\n {\n className: 'meta',\n begin: //,\n contains: [\n XML_META_KEYWORDS,\n XML_META_PAR_KEYWORDS,\n QUOTE_META_STRING_MODE,\n APOS_META_STRING_MODE\n ]\n }\n ]\n }\n ]\n },\n hljs.COMMENT(\n /\x3c!--/,\n /--\x3e/,\n { relevance: 10 }\n ),\n {\n begin: //,\n relevance: 10\n },\n XML_ENTITIES,\n // xml processing instructions\n {\n className: 'meta',\n end: /\\?>/,\n variants: [\n {\n begin: /<\\?xml/,\n relevance: 10,\n contains: [\n QUOTE_META_STRING_MODE\n ]\n },\n {\n begin: /<\\?[a-z][a-z0-9]+/,\n }\n ]\n\n },\n {\n className: 'tag',\n /*\n The lookahead pattern (?=...) ensures that 'begin' only matches\n ')/,\n end: />/,\n keywords: { name: 'style' },\n contains: [ TAG_INTERNALS ],\n starts: {\n end: /<\\/style>/,\n returnEnd: true,\n subLanguage: [\n 'css',\n 'xml'\n ]\n }\n },\n {\n className: 'tag',\n // See the comment in the