(()=>{var __webpack_modules__={552:(__unused_webpack_module,__unused_webpack___webpack_exports__,__webpack_require__)=>{"use strict";eval("\n;// CONCATENATED MODULE: external \"window.wp.element\"\nconst external_window_wp_element_namespaceObject = window.wp.element;\n;// CONCATENATED MODULE: external \"window.wp.plugins\"\nconst external_window_wp_plugins_namespaceObject = window.wp.plugins;\n;// CONCATENATED MODULE: external \"window.wp.editPost\"\nconst external_window_wp_editPost_namespaceObject = window.wp.editPost;\n;// CONCATENATED MODULE: external \"window.wp.data\"\nconst external_window_wp_data_namespaceObject = window.wp.data;\n;// CONCATENATED MODULE: external \"window.wp.compose\"\nconst external_window_wp_compose_namespaceObject = window.wp.compose;\n;// CONCATENATED MODULE: external \"window.wp.components\"\nconst external_window_wp_components_namespaceObject = window.wp.components;\n;// CONCATENATED MODULE: external \"ctEvents\"\nconst external_ctEvents_namespaceObject = ctEvents;\nvar external_ctEvents_default = /*#__PURE__*/__webpack_require__.n(external_ctEvents_namespaceObject);\n// EXTERNAL MODULE: ./node_modules/util/util.js\nvar util = __webpack_require__(539);\nvar util_default = /*#__PURE__*/__webpack_require__.n(util);\n;// CONCATENATED MODULE: ./node_modules/customizer-sync-helpers/dist/index.es.js\n\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n enumerableOnly && (symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n })), keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = null != arguments[i] ? arguments[i] : {};\n i % 2 ? ownKeys(Object(source), !0).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n\n return target;\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n}\n\nfunction _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\n\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\n\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n return arr2;\n}\n\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nvar maybePromoteScalarValueIntoResponsive = function maybePromoteScalarValueIntoResponsive(value) {\n var isResponsive = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n /**\n * Responsive value must necessarily have the desktop key attached to it\n */\n if (value && Object.keys(value).indexOf('desktop') > -1) {\n if (!isResponsive) {\n return value.desktop;\n }\n\n return value;\n }\n\n if (!isResponsive) {\n return value;\n }\n\n return {\n desktop: value,\n tablet: value,\n mobile: value\n };\n};\n\nvar shadyCss = {};\n\nvar astIterator = {};\n\nvar common = {};\n\n(function (exports) {\n\t/**\n\t * @license\n\t * Copyright (c) 2016 The Polymer Project Authors. All rights reserved.\n\t * This code may only be used under the BSD style license found at\n\t * http://polymer.github.io/LICENSE.txt The complete set of authors may be found\n\t * at http://polymer.github.io/AUTHORS.txt The complete set of contributors may\n\t * be found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by\n\t * Google as part of the polymer project is also subject to an additional IP\n\t * rights grant found at http://polymer.github.io/PATENTS.txt\n\t */\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\t/**\n\t * A set of common RegExp matchers for tokenizing CSS.\n\t */\n\tconst matcher = {\n\t whitespace: /\\s/,\n\t whitespaceGreedy: /(\\s+)/g,\n\t commentGreedy: /(\\*\\/)/g,\n\t boundary: /[\\(\\)\\{\\}'\"@;:\\s]/,\n\t stringBoundary: /['\"]/\n\t};\n\texports.matcher = matcher;\n\t(function (nodeType) {\n\t nodeType[\"stylesheet\"] = \"stylesheet\";\n\t nodeType[\"comment\"] = \"comment\";\n\t nodeType[\"atRule\"] = \"atRule\";\n\t nodeType[\"ruleset\"] = \"ruleset\";\n\t nodeType[\"expression\"] = \"expression\";\n\t nodeType[\"declaration\"] = \"declaration\";\n\t nodeType[\"rulelist\"] = \"rulelist\";\n\t nodeType[\"discarded\"] = \"discarded\";\n\t})(exports.nodeType || (exports.nodeType = {}));\n\t\n} (common));\n\n/**\n * @license\n * Copyright (c) 2016 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt The complete set of authors may be found\n * at http://polymer.github.io/AUTHORS.txt The complete set of contributors may\n * be found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by\n * Google as part of the polymer project is also subject to an additional IP\n * rights grant found at http://polymer.github.io/PATENTS.txt\n */\nObject.defineProperty(astIterator, \"__esModule\", { value: true });\nconst index_es_util = (util_default());\nconst common_1$4 = common;\nfunction* iterateOverAst(node) {\n yield node;\n switch (node.type) {\n case common_1$4.nodeType.stylesheet:\n for (const rule of node.rules) {\n yield* iterateOverAst(rule);\n }\n return;\n case common_1$4.nodeType.ruleset:\n return yield* iterateOverAst(node.rulelist);\n case common_1$4.nodeType.rulelist:\n for (const rule of node.rules) {\n yield* iterateOverAst(rule);\n }\n return;\n case common_1$4.nodeType.declaration:\n if (node.value !== undefined) {\n yield* iterateOverAst(node.value);\n }\n return;\n case common_1$4.nodeType.atRule:\n if (node.rulelist) {\n yield* iterateOverAst(node.rulelist);\n }\n return;\n case common_1$4.nodeType.expression:\n case common_1$4.nodeType.comment:\n case common_1$4.nodeType.discarded:\n return; // no child nodes\n default:\n const never = node;\n console.error(`Got a node of unknown type: ${index_es_util.inspect(never)}`);\n }\n}\nastIterator.iterateOverAst = iterateOverAst;\n\nvar nodeFactory = {};\n\n/**\n * @license\n * Copyright (c) 2016 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt The complete set of authors may be found\n * at http://polymer.github.io/AUTHORS.txt The complete set of contributors may\n * be found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by\n * Google as part of the polymer project is also subject to an additional IP\n * rights grant found at http://polymer.github.io/PATENTS.txt\n */\nObject.defineProperty(nodeFactory, \"__esModule\", { value: true });\nconst common_1$3 = common;\n/**\n * Class used for generating nodes in a CSS AST. Extend this class to implement\n * visitors to different nodes while the tree is being generated, and / or\n * custom node generation.\n */\nclass NodeFactory {\n /**\n * Creates a Stylesheet node.\n * @param rules The list of rules that appear at the top\n * level of the stylesheet.\n */\n stylesheet(rules, range) {\n return { type: common_1$3.nodeType.stylesheet, rules, range };\n }\n /**\n * Creates an At Rule node.\n * @param name The \"name\" of the At Rule (e.g., `charset`)\n * @param parameters The \"parameters\" of the At Rule (e.g., `utf8`)\n * @param rulelist The Rulelist node (if any) of the At Rule.\n */\n atRule(name, parameters, rulelist = undefined, nameRange, parametersRange, range) {\n return {\n type: common_1$3.nodeType.atRule,\n name,\n parameters,\n rulelist,\n nameRange,\n parametersRange,\n range\n };\n }\n /**\n * Creates a Comment node.\n * @param value The full text content of the comment, including\n * opening and closing comment signature.\n */\n comment(value, range) {\n return { type: common_1$3.nodeType.comment, value, range };\n }\n /**\n * Creates a Rulelist node.\n * @param rules An array of the Rule nodes found within the Ruleset.\n */\n rulelist(rules, range) {\n return { type: common_1$3.nodeType.rulelist, rules, range };\n }\n /**\n * Creates a Ruleset node.\n * @param selector The selector that corresponds to the Selector\n * (e.g., `#foo > .bar`).\n * @param rulelist The Rulelist node that corresponds to the Selector.\n */\n ruleset(selector, rulelist, selectorRange, range) {\n return { type: common_1$3.nodeType.ruleset, selector, rulelist, selectorRange, range };\n }\n /**\n * Creates a Declaration node.\n * @param name The property name of the Declaration (e.g., `color`).\n * @param value Either an Expression node, or a Rulelist node, that\n * corresponds to the value of the Declaration.\n */\n declaration(name, value, nameRange, range) {\n return { type: common_1$3.nodeType.declaration, name, value, nameRange, range };\n }\n /**\n * Creates an Expression node.\n * @param text The full text content of the expression (e.g.,\n * `url(img.jpg)`)\n */\n expression(text, range) {\n return { type: common_1$3.nodeType.expression, text, range };\n }\n /**\n * Creates a Discarded node. Discarded nodes contain content that was not\n * parseable (usually due to typos, or otherwise unrecognized syntax).\n * @param text The text content that is discarded.\n */\n discarded(text, range) {\n return { type: common_1$3.nodeType.discarded, text, range };\n }\n}\nnodeFactory.NodeFactory = NodeFactory;\n\nvar nodeVisitor = {};\n\n/**\n * @license\n * Copyright (c) 2016 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt The complete set of authors may be found\n * at http://polymer.github.io/AUTHORS.txt The complete set of contributors may\n * be found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by\n * Google as part of the polymer project is also subject to an additional IP\n * rights grant found at http://polymer.github.io/PATENTS.txt\n */\nObject.defineProperty(nodeVisitor, \"__esModule\", { value: true });\n/**\n * Class that implements a visitor pattern for ASTs produced by the Parser.\n * Extend the NodeVisitor class to implement useful tree traversal operations\n * such as stringification.\n */\nclass NodeVisitor {\n /**\n * Create a NodeVisitor instance.\n */\n constructor() {\n this.path_ = [];\n }\n /**\n * A list of nodes that corresponds to the current path through an AST being\n * visited, leading to where the currently visited node will be found.\n */\n get path() {\n return this.path_;\n }\n /**\n * Visit a node. The visited node will be added to the `path` before it is\n * visited, and will be removed after it is visited. Nodes are \"visited\" by\n * calling a method on the NodeVisitor instance that matches the node's type,\n * if one is available on the NodeVisitor instance.\n * @param node The node to be visited.\n * @return The return value of the method visiting the node, if any.\n */\n visit(node) {\n let result;\n const callback = this[node.type];\n if (callback) {\n this.path_.push(node);\n result = this[node.type](node);\n this.path_.pop();\n }\n return result;\n }\n}\nnodeVisitor.NodeVisitor = NodeVisitor;\n\nvar parser = {};\n\nvar token = {};\n\n(function (exports) {\n\t/**\n\t * @license\n\t * Copyright (c) 2016 The Polymer Project Authors. All rights reserved.\n\t * This code may only be used under the BSD style license found at\n\t * http://polymer.github.io/LICENSE.txt The complete set of authors may be found\n\t * at http://polymer.github.io/AUTHORS.txt The complete set of contributors may\n\t * be found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by\n\t * Google as part of the polymer project is also subject to an additional IP\n\t * rights grant found at http://polymer.github.io/PATENTS.txt\n\t */\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\t/**\n\t * An enumeration of Token types.\n\t */\n\tvar TokenType;\n\t(function (TokenType) {\n\t TokenType[TokenType[\"none\"] = 0] = \"none\";\n\t TokenType[TokenType[\"whitespace\"] = (Math.pow(2, 0))] = \"whitespace\";\n\t TokenType[TokenType[\"string\"] = (Math.pow(2, 1))] = \"string\";\n\t TokenType[TokenType[\"comment\"] = (Math.pow(2, 2))] = \"comment\";\n\t TokenType[TokenType[\"word\"] = (Math.pow(2, 3))] = \"word\";\n\t TokenType[TokenType[\"boundary\"] = (Math.pow(2, 4))] = \"boundary\";\n\t TokenType[TokenType[\"propertyBoundary\"] = (Math.pow(2, 5))] = \"propertyBoundary\";\n\t // Special cases for boundary:\n\t TokenType[TokenType[\"openParenthesis\"] = (Math.pow(2, 6)) | TokenType.boundary] = \"openParenthesis\";\n\t TokenType[TokenType[\"closeParenthesis\"] = (Math.pow(2, 7)) | TokenType.boundary] = \"closeParenthesis\";\n\t TokenType[TokenType[\"at\"] = (Math.pow(2, 8)) | TokenType.boundary] = \"at\";\n\t TokenType[TokenType[\"openBrace\"] = (Math.pow(2, 9)) | TokenType.boundary] = \"openBrace\";\n\t // [};] are property boundaries:\n\t TokenType[TokenType[\"closeBrace\"] = (Math.pow(2, 10)) | TokenType.propertyBoundary | TokenType.boundary] = \"closeBrace\";\n\t TokenType[TokenType[\"semicolon\"] = (Math.pow(2, 11)) | TokenType.propertyBoundary | TokenType.boundary] = \"semicolon\";\n\t // : is a chimaeric abomination:\n\t // foo:bar{}\n\t // foo:bar;\n\t TokenType[TokenType[\"colon\"] = (Math.pow(2, 12)) | TokenType.boundary | TokenType.word] = \"colon\";\n\t // TODO: are these two boundaries? I mean, sometimes they are I guess? Or\n\t // maybe they shouldn't exist in the boundaryTokenTypes map.\n\t TokenType[TokenType[\"hyphen\"] = (Math.pow(2, 13))] = \"hyphen\";\n\t TokenType[TokenType[\"underscore\"] = (Math.pow(2, 14))] = \"underscore\";\n\t})(TokenType = exports.TokenType || (exports.TokenType = {}));\n\t/**\n\t * Class that describes individual tokens as produced by the Tokenizer.\n\t */\n\tclass Token {\n\t /**\n\t * Create a Token instance.\n\t * @param type The lexical type of the Token.\n\t * @param start The start index of the text corresponding to the\n\t * Token in the CSS text.\n\t * @param end The end index of the text corresponding to the Token\n\t * in the CSS text.\n\t */\n\t constructor(type, start, end) {\n\t this.type = type;\n\t this.start = start;\n\t this.end = end;\n\t this.previous = null;\n\t this.next = null;\n\t }\n\t /**\n\t * Test if the Token matches a given numeric type. Types match if the bitwise\n\t * AND of the Token's type and the argument type are equivalent to the\n\t * argument type.\n\t * @param type The numeric type to test for equivalency with the\n\t * Token.\n\t */\n\t is(type) {\n\t return (this.type & type) === type;\n\t }\n\t}\n\tToken.type = TokenType;\n\texports.Token = Token;\n\t/**\n\t * A mapping of boundary token text to their corresponding types.\n\t */\n\tconst boundaryTokenTypes = {\n\t '(': Token.type.openParenthesis,\n\t ')': Token.type.closeParenthesis,\n\t ':': Token.type.colon,\n\t '@': Token.type.at,\n\t '{': Token.type.openBrace,\n\t '}': Token.type.closeBrace,\n\t ';': Token.type.semicolon,\n\t '-': Token.type.hyphen,\n\t '_': Token.type.underscore\n\t};\n\texports.boundaryTokenTypes = boundaryTokenTypes;\n\t\n} (token));\n\nvar tokenizer = {};\n\n/**\n * @license\n * Copyright (c) 2016 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt The complete set of authors may be found\n * at http://polymer.github.io/AUTHORS.txt The complete set of contributors may\n * be found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by\n * Google as part of the polymer project is also subject to an additional IP\n * rights grant found at http://polymer.github.io/PATENTS.txt\n */\nObject.defineProperty(tokenizer, \"__esModule\", { value: true });\nconst common_1$2 = common;\nconst token_1$2 = token;\n/**\n * Class that implements tokenization of significant lexical features of the\n * CSS syntax.\n */\nclass Tokenizer {\n /**\n * Create a Tokenizer instance.\n * @param cssText The raw CSS string to be tokenized.\n *\n */\n constructor(cssText) {\n /**\n * Tracks the position of the tokenizer in the source string.\n * Also the default head of the Token linked list.\n */\n this.cursorToken_ = new token_1$2.Token(token_1$2.Token.type.none, 0, 0);\n /**\n * Holds a reference to a Token that is \"next\" in the source string, often\n * due to having been peeked at.\n */\n this.currentToken_ = null;\n this.cssText = cssText;\n }\n get offset() {\n return this.cursorToken_.end;\n }\n /**\n * The current token that will be returned by a call to `advance`. This\n * reference is useful for \"peeking\" at the next token ahead in the sequence.\n * If the entire CSS text has been tokenized, the `currentToken` will be null.\n */\n get currentToken() {\n if (this.currentToken_ == null) {\n this.currentToken_ = this.getNextToken_();\n }\n return this.currentToken_;\n }\n /**\n * Advance the Tokenizer to the next token in the sequence.\n * @return The current token prior to the call to `advance`, or null\n * if the entire CSS text has been tokenized.\n */\n advance() {\n let token;\n if (this.currentToken_ != null) {\n token = this.currentToken_;\n this.currentToken_ = null;\n }\n else {\n token = this.getNextToken_();\n }\n return token;\n }\n /**\n * Extract a slice from the CSS text, using two tokens to represent the range\n * of text to be extracted. The extracted text will include all text between\n * the start index of the first token and the offset index of the second token\n * (or the offset index of the first token if the second is not provided).\n * @param startToken The token that represents the beginning of the\n * text range to be extracted.\n * @param endToken The token that represents the end of the text range\n * to be extracted. Defaults to the startToken if no endToken is provided.\n * @return The substring of the CSS text corresponding to the\n * startToken and endToken.\n */\n slice(startToken, endToken = undefined) {\n const { start, end } = this.getRange(startToken, endToken);\n return this.cssText.substring(start, end);\n }\n /**\n * Like `slice`, but returns the offsets into the source, rather than the\n * substring itself.\n */\n getRange(startToken, endToken = undefined) {\n return { start: startToken.start, end: (endToken || startToken).end };\n }\n trimRange({ start, end }) {\n while (start <= end && /\\s/.test(this.cssText.charAt(start))) {\n start++;\n }\n while (start <= end && end > 0 && /\\s/.test(this.cssText.charAt(end - 1))) {\n end--;\n }\n return { start, end };\n }\n /**\n * Flush all tokens from the Tokenizer.\n * @return An array of all tokens corresponding to the CSS text.\n */\n flush() {\n const tokens = [];\n while (this.currentToken) {\n tokens.push(this.advance());\n }\n return tokens;\n }\n /**\n * Extract the next token from the CSS text and advance the Tokenizer.\n * @return A Token instance, or null if the entire CSS text has beeen\n * tokenized.\n */\n getNextToken_() {\n const character = this.cssText[this.offset];\n let token;\n this.currentToken_ = null;\n if (this.offset >= this.cssText.length) {\n return null;\n }\n else if (common_1$2.matcher.whitespace.test(character)) {\n token = this.tokenizeWhitespace(this.offset);\n }\n else if (common_1$2.matcher.stringBoundary.test(character)) {\n token = this.tokenizeString(this.offset);\n }\n else if (character === '/' && this.cssText[this.offset + 1] === '*') {\n token = this.tokenizeComment(this.offset);\n }\n else if (common_1$2.matcher.boundary.test(character)) {\n token = this.tokenizeBoundary(this.offset);\n }\n else {\n token = this.tokenizeWord(this.offset);\n }\n token.previous = this.cursorToken_;\n this.cursorToken_.next = token;\n this.cursorToken_ = token;\n return token;\n }\n /**\n * Tokenize a string starting at a given offset in the CSS text. A string is\n * any span of text that is wrapped by eclusively paired, non-escaped matching\n * quotation marks.\n * @param offset An offset in the CSS text.\n * @return A string Token instance.\n */\n tokenizeString(offset) {\n const quotation = this.cssText[offset];\n let escaped = false;\n const start = offset;\n let character;\n while (character = this.cssText[++offset]) {\n if (escaped) {\n escaped = false;\n continue;\n }\n if (character === quotation) {\n ++offset;\n break;\n }\n if (character === '\\\\') {\n escaped = true;\n }\n }\n return new token_1$2.Token(token_1$2.Token.type.string, start, offset);\n }\n /**\n * Tokenize a word starting at a given offset in the CSS text. A word is any\n * span of text that is not whitespace, is not a string, is not a comment and\n * is not a structural delimiter (such as braces and semicolon).\n * @param number An offset in the CSS text.\n * @return A word Token instance.\n */\n tokenizeWord(offset) {\n const start = offset;\n let character;\n // TODO(cdata): change to greedy regex match?\n while ((character = this.cssText[offset]) &&\n !common_1$2.matcher.boundary.test(character)) {\n offset++;\n }\n return new token_1$2.Token(token_1$2.Token.type.word, start, offset);\n }\n /**\n * Tokenize whitespace starting at a given offset in the CSS text. Whitespace\n * is any span of text made up of consecutive spaces, tabs, newlines and other\n * single whitespace characters.\n * @param number An offset in the CSS text.\n * @return A whitespace Token instance.\n */\n tokenizeWhitespace(offset) {\n const start = offset;\n common_1$2.matcher.whitespaceGreedy.lastIndex = offset;\n const match = common_1$2.matcher.whitespaceGreedy.exec(this.cssText);\n if (match != null && match.index === offset) {\n offset = common_1$2.matcher.whitespaceGreedy.lastIndex;\n }\n return new token_1$2.Token(token_1$2.Token.type.whitespace, start, offset);\n }\n /**\n * Tokenize a comment starting at a given offset in the CSS text. A comment is\n * any span of text beginning with the two characters / and *, and ending with\n * a matching counterpart pair of consecurtive characters (* and /).\n * @param number An offset in the CSS text.\n * @return A comment Token instance.\n */\n tokenizeComment(offset) {\n const start = offset;\n common_1$2.matcher.commentGreedy.lastIndex = offset;\n const match = common_1$2.matcher.commentGreedy.exec(this.cssText);\n if (match == null) {\n offset = this.cssText.length;\n }\n else {\n offset = common_1$2.matcher.commentGreedy.lastIndex;\n }\n return new token_1$2.Token(token_1$2.Token.type.comment, start, offset);\n }\n /**\n * Tokenize a boundary at a given offset in the CSS text. A boundary is any\n * single structurally significant character. These characters include braces,\n * semicolons, the \"at\" symbol and others.\n * @param number An offset in the CSS text.\n * @return A boundary Token instance.\n */\n tokenizeBoundary(offset) {\n // TODO(cdata): Evaluate if this is faster than a switch statement:\n const type = token_1$2.boundaryTokenTypes[this.cssText[offset]] || token_1$2.Token.type.boundary;\n return new token_1$2.Token(type, offset, offset + 1);\n }\n}\ntokenizer.Tokenizer = Tokenizer;\n\n/**\n * @license\n * Copyright (c) 2016 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt The complete set of authors may be found\n * at http://polymer.github.io/AUTHORS.txt The complete set of contributors may\n * be found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by\n * Google as part of the polymer project is also subject to an additional IP\n * rights grant found at http://polymer.github.io/PATENTS.txt\n */\nObject.defineProperty(parser, \"__esModule\", { value: true });\nconst node_factory_1$1 = nodeFactory;\nconst token_1$1 = token;\nconst tokenizer_1$1 = tokenizer;\n/**\n * Class that implements a shady CSS parser.\n */\nclass Parser$1 {\n /**\n * Create a Parser instance. When creating a Parser instance, a specialized\n * NodeFactory can be supplied to implement streaming analysis and\n * manipulation of the CSS AST.\n */\n constructor(nodeFactory = new node_factory_1$1.NodeFactory()) {\n this.nodeFactory = nodeFactory;\n }\n /**\n * Parse CSS and generate an AST.\n * @param cssText The CSS to parse.\n * @return A CSS AST containing nodes that correspond to those\n * generated by the Parser's NodeFactory.\n */\n parse(cssText) {\n return this.parseStylesheet(new tokenizer_1$1.Tokenizer(cssText));\n }\n /**\n * Consumes tokens from a Tokenizer to parse a Stylesheet node.\n * @param tokenizer A Tokenizer instance.\n */\n parseStylesheet(tokenizer) {\n return this.nodeFactory.stylesheet(this.parseRules(tokenizer), { start: 0, end: tokenizer.cssText.length });\n }\n /**\n * Consumes tokens from a Tokenizer to parse a sequence of rules.\n * @param tokenizer A Tokenizer instance.\n * @return A list of nodes corresponding to rules. For a parser\n * configured with a basic NodeFactory, any of Comment, AtRule, Ruleset,\n * Declaration and Discarded nodes may be present in the list.\n */\n parseRules(tokenizer) {\n const rules = [];\n while (tokenizer.currentToken) {\n const rule = this.parseRule(tokenizer);\n if (rule) {\n rules.push(rule);\n }\n }\n return rules;\n }\n /**\n * Consumes tokens from a Tokenizer to parse a single rule.\n * @param tokenizer A Tokenizer instance.\n * @return If the current token in the Tokenizer is whitespace,\n * returns null. Otherwise, returns the next parseable node.\n */\n parseRule(tokenizer) {\n // Trim leading whitespace:\n const token = tokenizer.currentToken;\n if (token === null) {\n return null;\n }\n if (token.is(token_1$1.Token.type.whitespace)) {\n tokenizer.advance();\n return null;\n }\n else if (token.is(token_1$1.Token.type.comment)) {\n return this.parseComment(tokenizer);\n }\n else if (token.is(token_1$1.Token.type.word)) {\n return this.parseDeclarationOrRuleset(tokenizer);\n }\n else if (token.is(token_1$1.Token.type.propertyBoundary)) {\n return this.parseUnknown(tokenizer);\n }\n else if (token.is(token_1$1.Token.type.at)) {\n return this.parseAtRule(tokenizer);\n }\n else {\n return this.parseUnknown(tokenizer);\n }\n }\n /**\n * Consumes tokens from a Tokenizer to parse a Comment node.\n * @param tokenizer A Tokenizer instance.\n */\n parseComment(tokenizer) {\n const token = tokenizer.advance();\n if (token === null) {\n return null;\n }\n return this.nodeFactory.comment(tokenizer.slice(token), { start: token.start, end: token.end });\n }\n /**\n * Consumes tokens from a Tokenizer through the next boundary token to\n * produce a Discarded node. This supports graceful recovery from many\n * malformed CSS conditions.\n * @param tokenizer A Tokenizer instance.\n */\n parseUnknown(tokenizer) {\n const start = tokenizer.advance();\n let end;\n if (start === null) {\n return null;\n }\n while (tokenizer.currentToken &&\n tokenizer.currentToken.is(token_1$1.Token.type.boundary)) {\n end = tokenizer.advance();\n }\n return this.nodeFactory.discarded(tokenizer.slice(start, end), tokenizer.getRange(start, end));\n }\n /**\n * Consumes tokens from a Tokenizer to parse an At Rule node.\n * @param tokenizer A Tokenizer instance.\n */\n parseAtRule(tokenizer) {\n let name = undefined;\n let nameRange = undefined;\n let rulelist = undefined;\n let parametersStart = undefined;\n let parametersEnd = undefined;\n if (!tokenizer.currentToken) {\n return null;\n }\n const start = tokenizer.currentToken.start;\n while (tokenizer.currentToken) {\n if (tokenizer.currentToken.is(token_1$1.Token.type.whitespace)) {\n tokenizer.advance();\n }\n else if (!name && tokenizer.currentToken.is(token_1$1.Token.type.at)) {\n // Discard the @:\n tokenizer.advance();\n const start = tokenizer.currentToken;\n let end;\n while (tokenizer.currentToken &&\n tokenizer.currentToken.is(token_1$1.Token.type.word)) {\n end = tokenizer.advance();\n }\n nameRange = tokenizer.getRange(start, end);\n name = tokenizer.cssText.slice(nameRange.start, nameRange.end);\n }\n else if (tokenizer.currentToken.is(token_1$1.Token.type.openBrace)) {\n rulelist = this.parseRulelist(tokenizer);\n break;\n }\n else if (tokenizer.currentToken.is(token_1$1.Token.type.propertyBoundary)) {\n tokenizer.advance();\n break;\n }\n else {\n if (parametersStart == null) {\n parametersStart = tokenizer.advance();\n }\n else {\n parametersEnd = tokenizer.advance();\n }\n }\n }\n if (name === undefined || nameRange === undefined) {\n return null;\n }\n let parametersRange = undefined;\n let parameters = '';\n if (parametersStart) {\n parametersRange = tokenizer.trimRange(tokenizer.getRange(parametersStart, parametersEnd));\n parameters =\n tokenizer.cssText.slice(parametersRange.start, parametersRange.end);\n }\n const end = tokenizer.currentToken ? tokenizer.currentToken.previous.end :\n tokenizer.cssText.length;\n return this.nodeFactory.atRule(name, parameters, rulelist, nameRange, parametersRange, { start, end });\n }\n /**\n * Consumes tokens from a Tokenizer to produce a Rulelist node.\n * @param tokenizer A Tokenizer instance.\n */\n parseRulelist(tokenizer) {\n const rules = [];\n const start = tokenizer.currentToken.start;\n let endToken;\n // Take the opening { boundary:\n tokenizer.advance();\n while (tokenizer.currentToken) {\n if (tokenizer.currentToken.is(token_1$1.Token.type.closeBrace)) {\n endToken = tokenizer.currentToken;\n tokenizer.advance();\n break;\n }\n else {\n const rule = this.parseRule(tokenizer);\n if (rule) {\n rules.push(rule);\n }\n }\n }\n // If we don't have an end token it's because we reached the end of input.\n const end = endToken ? endToken.end : tokenizer.cssText.length;\n return this.nodeFactory.rulelist(rules, { start, end });\n }\n /**\n * Consumes tokens from a Tokenizer instance to produce a Declaration node or\n * a Ruleset node, as appropriate.\n * @param tokenizer A Tokenizer node.\n */\n parseDeclarationOrRuleset(tokenizer) {\n let ruleStart = null;\n let ruleEnd = null;\n let colon = null;\n // This code is not obviously correct. e.g. there's what looks to be a\n // null-dereference if the declaration starts with an open brace or\n // property boundary.. though that may be impossible.\n while (tokenizer.currentToken) {\n if (tokenizer.currentToken.is(token_1$1.Token.type.whitespace)) {\n tokenizer.advance();\n }\n else if (tokenizer.currentToken.is(token_1$1.Token.type.openParenthesis)) {\n // skip until close paren\n while (tokenizer.currentToken &&\n !tokenizer.currentToken.is(token_1$1.Token.type.closeParenthesis)) {\n tokenizer.advance();\n }\n }\n else if (tokenizer.currentToken.is(token_1$1.Token.type.openBrace) ||\n tokenizer.currentToken.is(token_1$1.Token.type.propertyBoundary)) {\n break;\n }\n else {\n if (tokenizer.currentToken.is(token_1$1.Token.type.colon)) {\n colon = tokenizer.currentToken;\n }\n if (ruleStart === null) {\n ruleStart = tokenizer.advance();\n ruleEnd = ruleStart;\n }\n else {\n ruleEnd = tokenizer.advance();\n }\n }\n }\n if (tokenizer.currentToken === null) {\n // terminated early\n return null;\n }\n // A ruleset never contains or ends with a semi-colon.\n if (tokenizer.currentToken.is(token_1$1.Token.type.propertyBoundary)) {\n const nameRange = tokenizer.getRange(ruleStart, colon ? colon.previous : ruleEnd);\n const declarationName = tokenizer.cssText.slice(nameRange.start, nameRange.end);\n let expression = undefined;\n if (colon && colon.next) {\n const rawExpressionRange = tokenizer.getRange(colon.next, ruleEnd);\n const expressionRange = tokenizer.trimRange(rawExpressionRange);\n const expressionValue = tokenizer.cssText.slice(expressionRange.start, expressionRange.end);\n expression =\n this.nodeFactory.expression(expressionValue, expressionRange);\n }\n if (tokenizer.currentToken.is(token_1$1.Token.type.semicolon)) {\n tokenizer.advance();\n }\n const range = tokenizer.trimRange(tokenizer.getRange(ruleStart, tokenizer.currentToken && tokenizer.currentToken.previous ||\n ruleEnd));\n return this.nodeFactory.declaration(declarationName, expression, nameRange, range);\n // This is the case for a mixin-like structure:\n }\n else if (colon && colon === ruleEnd) {\n const rulelist = this.parseRulelist(tokenizer);\n if (tokenizer.currentToken.is(token_1$1.Token.type.semicolon)) {\n tokenizer.advance();\n }\n const nameRange = tokenizer.getRange(ruleStart, ruleEnd.previous);\n const declarationName = tokenizer.cssText.slice(nameRange.start, nameRange.end);\n const range = tokenizer.trimRange(tokenizer.getRange(ruleStart, tokenizer.currentToken && tokenizer.currentToken.previous ||\n ruleEnd));\n return this.nodeFactory.declaration(declarationName, rulelist, nameRange, range);\n // Otherwise, this is a ruleset:\n }\n else {\n const selectorRange = tokenizer.getRange(ruleStart, ruleEnd);\n const selector = tokenizer.cssText.slice(selectorRange.start, selectorRange.end);\n const rulelist = this.parseRulelist(tokenizer);\n const start = ruleStart.start;\n let end;\n if (tokenizer.currentToken) {\n end = tokenizer.currentToken.previous ?\n tokenizer.currentToken.previous.end :\n ruleStart.end;\n }\n else {\n // no current token? must have reached the end of input, so go up\n // until there\n end = tokenizer.cssText.length;\n }\n return this.nodeFactory.ruleset(selector, rulelist, selectorRange, { start, end });\n }\n }\n}\nparser.Parser = Parser$1;\n\nvar stringifier = {};\n\n/**\n * @license\n * Copyright (c) 2016 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt The complete set of authors may be found\n * at http://polymer.github.io/AUTHORS.txt The complete set of contributors may\n * be found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by\n * Google as part of the polymer project is also subject to an additional IP\n * rights grant found at http://polymer.github.io/PATENTS.txt\n */\nObject.defineProperty(stringifier, \"__esModule\", { value: true });\nconst common_1$1 = common;\nconst node_visitor_1$1 = nodeVisitor;\n/**\n * Class that implements basic stringification of an AST produced by the Parser.\n */\nclass Stringifier$1 extends node_visitor_1$1.NodeVisitor {\n /**\n * Stringify an AST such as one produced by a Parser.\n * @param ast A node object representing the root of an AST.\n * @return The stringified CSS corresponding to the AST.\n */\n stringify(ast) {\n return this.visit(ast) || '';\n }\n /**\n * Visit and stringify a Stylesheet node.\n * @param stylesheet A Stylesheet node.\n * @return The stringified CSS of the Stylesheet.\n */\n [common_1$1.nodeType.stylesheet](stylesheet) {\n let rules = '';\n for (let i = 0; i < stylesheet.rules.length; ++i) {\n rules += this.visit(stylesheet.rules[i]);\n }\n return rules;\n }\n /**\n * Visit and stringify an At Rule node.\n * @param atRule An At Rule node.\n * @return The stringified CSS of the At Rule.\n */\n [common_1$1.nodeType.atRule](atRule) {\n return `@${atRule.name}` +\n (atRule.parameters ? ` ${atRule.parameters}` : '') +\n (atRule.rulelist ? `${this.visit(atRule.rulelist)}` : ';');\n }\n /**\n * Visit and stringify a Rulelist node.\n * @param rulelist A Rulelist node.\n * @return The stringified CSS of the Rulelist.\n */\n [common_1$1.nodeType.rulelist](rulelist) {\n let rules = '{';\n for (let i = 0; i < rulelist.rules.length; ++i) {\n rules += this.visit(rulelist.rules[i]);\n }\n return rules + '}';\n }\n /**\n * Visit and stringify a Comment node.\n * @param comment A Comment node.\n * @return The stringified CSS of the Comment.\n */\n [common_1$1.nodeType.comment](comment) {\n return `${comment.value}`;\n }\n /**\n * Visit and stringify a Seletor node.\n * @param ruleset A Ruleset node.\n * @return The stringified CSS of the Ruleset.\n */\n [common_1$1.nodeType.ruleset](ruleset) {\n return `${ruleset.selector}${this.visit(ruleset.rulelist)}`;\n }\n /**\n * Visit and stringify a Declaration node.\n * @param declaration A Declaration node.\n * @return The stringified CSS of the Declaration.\n */\n [common_1$1.nodeType.declaration](declaration) {\n return declaration.value != null ?\n `${declaration.name}:${this.visit(declaration.value)};` :\n `${declaration.name};`;\n }\n /**\n * Visit and stringify an Expression node.\n * @param expression An Expression node.\n * @return The stringified CSS of the Expression.\n */\n [common_1$1.nodeType.expression](expression) {\n return `${expression.text}`;\n }\n /**\n * Visit a discarded node.\n * @param discarded A Discarded node.\n * @return An empty string, since Discarded nodes are discarded.\n */\n [common_1$1.nodeType.discarded](_discarded) {\n return '';\n }\n}\nstringifier.Stringifier = Stringifier$1;\n\n/**\n * @license\n * Copyright (c) 2016 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt The complete set of authors may be found\n * at http://polymer.github.io/AUTHORS.txt The complete set of contributors may\n * be found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by\n * Google as part of the polymer project is also subject to an additional IP\n * rights grant found at http://polymer.github.io/PATENTS.txt\n */\nObject.defineProperty(shadyCss, \"__esModule\", { value: true });\nvar ast_iterator_1 = astIterator;\nshadyCss.iterateOverAst = ast_iterator_1.iterateOverAst;\nvar common_1 = common;\nshadyCss.nodeType = common_1.nodeType;\nvar node_factory_1 = nodeFactory;\nshadyCss.NodeFactory = node_factory_1.NodeFactory;\nvar node_visitor_1 = nodeVisitor;\nshadyCss.NodeVisitor = node_visitor_1.NodeVisitor;\nvar parser_1 = parser;\nvar Parser = shadyCss.Parser = parser_1.Parser;\nvar stringifier_1 = stringifier;\nvar Stringifier = shadyCss.Stringifier = stringifier_1.Stringifier;\nvar token_1 = token;\nshadyCss.Token = token_1.Token;\nvar tokenizer_1 = tokenizer;\nshadyCss.Tokenizer = tokenizer_1.Tokenizer;\n\nvar maybeGetPreviewerIframe = function maybeGetPreviewerIframe() {\n return document.querySelector('.edit-post-visual-editor__content-area iframe[name=\"editor-canvas\"]');\n};\n\nvar styleTagsCache = null;\nvar clearAstCache = function clearAstCache() {\n styleTagsCache = null;\n};\nvar getStyleTagsWithAst = function getStyleTagsWithAst() {\n if (styleTagsCache) {\n return styleTagsCache;\n }\n\n var maybeStyle = document.querySelector('#ct-main-styles-inline-css');\n\n if (!maybeStyle) {\n return [];\n }\n\n var parser = new Parser();\n\n var allStyles = _toConsumableArray(document.querySelectorAll('style')).filter(function (s) {\n return s.innerText && s.innerText.indexOf('narrow-container-max-width') > -1;\n });\n\n var maybeIframe = maybeGetPreviewerIframe();\n\n if (maybeIframe) {\n allStyles = [].concat(_toConsumableArray(allStyles), _toConsumableArray(_toConsumableArray(maybeIframe.contentDocument.querySelectorAll('style')).filter(function (s) {\n return s.innerText.indexOf('narrow-container-max-width') > -1;\n })));\n }\n\n styleTagsCache = allStyles.map(function (style) {\n return {\n style: style,\n ast: parser.parse(style.innerText.replace(new RegExp('\\n', 'g'), ''))\n };\n });\n return styleTagsCache;\n};\nvar persistNewAsts = function persistNewAsts(styleTags) {\n styleTagsCache = styleTags;\n var stringifier = new Stringifier();\n styleTagsCache.map(function (styleDescriptor) {\n if (!styleDescriptor.style) {\n console.error('No ast for style', styleDescriptor);\n return;\n }\n\n styleDescriptor.style.innerText = stringifier.stringify(styleDescriptor.ast);\n });\n};\nvar overrideStylesWithAst = function overrideStylesWithAst() {\n if (!styleTagsCache) {\n return;\n }\n\n persistNewAsts(styleTagsCache.map(function (styleDescriptor) {\n if (styleDescriptor.style.id) {\n return styleDescriptor;\n }\n\n var allStyles = _toConsumableArray(document.querySelectorAll('style')).filter(function (s) {\n return s.innerText.indexOf('narrow-container-max-width') > -1;\n });\n\n var maybeIframe = maybeGetPreviewerIframe();\n\n if (maybeIframe) {\n allStyles = [].concat(_toConsumableArray(allStyles), _toConsumableArray(_toConsumableArray(maybeIframe.contentDocument.querySelectorAll('style')).filter(function (s) {\n return s.innerText.indexOf('narrow-container-max-width') > -1;\n })));\n }\n\n styleDescriptor.style = allStyles.find(function (s) {\n return !s.id;\n });\n return _objectSpread2({}, styleDescriptor);\n }));\n};\n\nvar prepareSpacingValueFor = function prepareSpacingValueFor(value) {\n if ([value['top'], value['right'], value['bottom'], value['left']].reduce(function (isValueCompact, currentValue) {\n return !isValueCompact ? false : !(currentValue !== 'auto' && currentValue && currentValue.toString().match(/\\d/g));\n }, true)) {\n return 'CT_CSS_SKIP_RULE';\n }\n\n var result = [value['top'] === 'auto' || !value['top'].toString().match(/\\d/g) ? 0 : value['top'], value['right'] === 'auto' || !value['right'].toString().match(/\\d/g) ? 0 : value['right'], value['bottom'] === 'auto' || !value['bottom'].toString().match(/\\d/g) ? 0 : value['bottom'], value['left'] === 'auto' || !value['left'].toString().match(/\\d/g) ? 0 : value['left']];\n\n if (result[0] === result[1] && result[0] === result[2] && result[0] === result[3]) {\n return result[0];\n }\n\n if (result[0] === result[2] && result[1] === result[3]) {\n return \"\".concat(result[0], \" \").concat(result[3]);\n }\n\n return result.join(' ');\n};\n\nvar prepareBoxShadowValueFor = function prepareBoxShadowValueFor(value, _ref) {\n var _ref$forcedOutput = _ref.forcedOutput,\n forcedOutput = _ref$forcedOutput === void 0 ? false : _ref$forcedOutput;\n\n if (value === 'CT_CSS_SKIP_RULE') {\n return 'CT_CSS_SKIP_RULE';\n }\n\n if (value === 'none') {\n return 'none';\n }\n\n if (!value.enable) {\n return 'none';\n }\n\n if (parseFloat(value.blur) === 0 && parseFloat(value.spread) === 0 && parseFloat(value.v_offset) === 0 && parseFloat(value.h_offset) === 0) {\n return forcedOutput ? 'none' : 'CT_CSS_SKIP_RULE';\n }\n\n var box_shadow_components = [];\n\n if (value.inset) {\n box_shadow_components.push('inset');\n }\n\n box_shadow_components.push(\"\".concat(value.h_offset, \"px\"));\n box_shadow_components.push(\"\".concat(value.v_offset, \"px\"));\n\n if (parseFloat(value.blur) !== 0) {\n box_shadow_components.push(\"\".concat(value.blur, \"px\"));\n\n if (parseFloat(value.spread) !== 0) {\n box_shadow_components.push(\"\".concat(value.spread, \"px\"));\n }\n }\n\n if (parseFloat(value.blur) === 0 && parseFloat(value.spread) !== 0) {\n box_shadow_components.push(\"\".concat(value.blur, \"px\"));\n box_shadow_components.push(\"\".concat(value.spread, \"px\"));\n }\n\n box_shadow_components.push(value.color.color);\n return box_shadow_components.join(' ');\n};\n\nvar isFunction = function isFunction(functionToCheck) {\n return functionToCheck && {}.toString.call(functionToCheck) === '[object Function]';\n};\n\nvar replaceVariableInAst = function replaceVariableInAst() {\n var args = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n args = _objectSpread2({\n variableDescriptor: {},\n value: '',\n ast: {}\n }, args);\n var _args = args,\n variableDescriptor = _args.variableDescriptor,\n value = _args.value,\n ast = _args.ast;\n var newSelector = variableDescriptor.selector || ':root';\n var variablePrefix = '--';\n\n if (variableDescriptor.variableType === 'property') {\n variablePrefix = '';\n }\n\n var variableName = \"\".concat(variablePrefix).concat(isFunction(variableDescriptor.variable) ? variableDescriptor.variable() : variableDescriptor.variable);\n var hasSuchSelector = ast.rules.find(function (_ref) {\n var selector = _ref.selector;\n return selector === newSelector;\n });\n var ruleToCopy = {\n type: 'ruleset',\n selector: ':root',\n rulelist: {\n type: 'rulelist',\n rules: [{\n type: 'declaration',\n name: '--container-max-width',\n value: {\n type: 'expression',\n text: '1290px'\n }\n }]\n }\n };\n var newAst = JSON.parse(JSON.stringify(ast));\n\n if (hasSuchSelector) {\n newAst.rules = newAst.rules.map(function (rule) {\n var selector = rule.selector;\n\n if (selector !== newSelector) {\n return rule;\n }\n\n if (value.indexOf('CT_CSS_SKIP_RULE') > -1 || value.indexOf(variableName) > -1) {\n return _objectSpread2(_objectSpread2({}, rule), {}, {\n rulelist: _objectSpread2(_objectSpread2({}, rule.rulelist), {}, {\n rules: rule.rulelist.rules.filter(function (_ref2) {\n var name = _ref2.name;\n return name !== variableName;\n })\n })\n });\n }\n\n var hasSuchRule = rule.rulelist.rules.find(function (_ref3) {\n var name = _ref3.name;\n return name === variableName;\n });\n\n if (hasSuchRule) {\n return _objectSpread2(_objectSpread2({}, rule), {}, {\n rulelist: _objectSpread2(_objectSpread2({}, rule.rulelist), {}, {\n rules: rule.rulelist.rules.map(function (rule) {\n if (rule.name === variableName) {\n return _objectSpread2(_objectSpread2({}, rule), {}, {\n value: _objectSpread2(_objectSpread2({}, rule.value), {}, {\n text: value\n })\n });\n }\n\n return rule;\n })\n })\n });\n }\n\n return _objectSpread2(_objectSpread2({}, rule), {}, {\n rulelist: _objectSpread2(_objectSpread2({}, rule.rulelist), {}, {\n rules: [].concat(_toConsumableArray(rule.rulelist.rules), [_objectSpread2(_objectSpread2({}, ruleToCopy.rulelist.rules[0]), {}, {\n name: variableName,\n value: _objectSpread2(_objectSpread2({}, ruleToCopy.rulelist.rules[0].value), {}, {\n text: value\n })\n })])\n })\n });\n });\n }\n\n if (!hasSuchSelector && value.indexOf('CT_CSS_SKIP_RULE') === -1) {\n newAst.rules = [].concat(_toConsumableArray(newAst.rules), [_objectSpread2(_objectSpread2({}, ruleToCopy), {}, {\n selector: newSelector,\n rulelist: _objectSpread2(_objectSpread2({}, ruleToCopy.rulelist), {}, {\n rules: [_objectSpread2(_objectSpread2({}, ruleToCopy.rulelist.rules[0]), {}, {\n name: variableName,\n value: _objectSpread2(_objectSpread2({}, ruleToCopy.rulelist.rules[0].value), {}, {\n text: value\n })\n })]\n })\n })]);\n }\n\n return newAst;\n};\n\nvar replacingLogic = function replacingLogic() {\n var args = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n args = _objectSpread2({\n variableDescriptor: {},\n value: {},\n ast: {}\n }, args);\n var actualValue = args.value;\n\n if ((args.variableDescriptor.type || '').indexOf('color') > -1 && args.value !== 'CT_CSS_SKIP_RULE') {\n actualValue = args.value[args.variableDescriptor.type === 'color' ? 'default' : args.variableDescriptor.type.split(':')[1]].color;\n }\n\n if ((args.variableDescriptor.type || '') === 'border') {\n actualValue = !args.value || args.value.style === 'none' ? 'none' : \"\".concat(args.value.width, \"px \").concat(args.value.style, \" \").concat(args.value.color.color);\n\n if (args.variableDescriptor.skip_none && actualValue === 'none') {\n actualValue = 'CT_CSS_SKIP_RULE';\n }\n }\n\n if ((args.variableDescriptor.type || '') === 'spacing') {\n actualValue = prepareSpacingValueFor(args.value);\n }\n\n if ((args.variableDescriptor.type || '') === 'box-shadow') {\n actualValue = prepareBoxShadowValueFor(args.value, args.variableDescriptor);\n }\n\n return replaceVariableInAst({\n variableDescriptor: args.variableDescriptor,\n value: \"\".concat(actualValue).concat(args.variableDescriptor.unit || '').concat(args.variableDescriptor.important ? ' !important' : ''),\n ast: args.ast\n });\n};\n\nvar updateVariableInStyleTags = function updateVariableInStyleTags() {\n var args = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n args = _objectSpread2({\n variableDescriptor: {},\n value: '',\n fullValue: {},\n tabletMQ: '(max-width: 999.98px)',\n mobileMQ: '(max-width: 689.98px)'\n }, args);\n var allDescriptors = args.variableDescriptor;\n\n if (isFunction(allDescriptors)) {\n allDescriptors = allDescriptors(args.value);\n }\n\n if (!Array.isArray(allDescriptors)) {\n allDescriptors = [allDescriptors];\n }\n\n persistNewAsts(getStyleTagsWithAst().map(function (styleDescriptor) {\n return _objectSpread2(_objectSpread2({}, styleDescriptor), {}, {\n ast: allDescriptors.reduce(function (currentAst, variableDescriptor) {\n var value = variableDescriptor.fullValue ? args.fullValue : args.value;\n value = variableDescriptor.extractValue ? variableDescriptor.extractValue(value) : value;\n\n if (variableDescriptor.whenDone) {\n variableDescriptor.whenDone(value, args.value);\n }\n\n value = maybePromoteScalarValueIntoResponsive(value, !!variableDescriptor.responsive);\n\n if (!variableDescriptor.responsive) {\n return replacingLogic({\n variableDescriptor: variableDescriptor,\n value: value,\n ast: currentAst\n });\n }\n\n var desktopAst = replacingLogic({\n variableDescriptor: variableDescriptor,\n value: value.desktop,\n ast: currentAst\n });\n var tabletAst = desktopAst;\n\n if (!tabletAst.rules.find(function (_ref) {\n var type = _ref.type,\n parameters = _ref.parameters;\n return type === 'atRule' && parameters === args.tabletMQ;\n })) {\n tabletAst = _objectSpread2(_objectSpread2({}, tabletAst), {}, {\n rules: [].concat(_toConsumableArray(tabletAst.rules), [{\n type: 'atRule',\n name: 'media',\n parameters: args.tabletMQ,\n rulelist: {\n type: 'rulelist',\n rules: []\n }\n }])\n });\n }\n\n tabletAst = _objectSpread2(_objectSpread2({}, tabletAst), {}, {\n rules: tabletAst.rules.map(function (rule) {\n if (rule.type !== 'atRule' || rule.parameters !== args.tabletMQ) {\n return rule;\n }\n\n return _objectSpread2(_objectSpread2({}, rule), {}, {\n rulelist: replacingLogic({\n variableDescriptor: _objectSpread2(_objectSpread2({}, variableDescriptor), {}, {\n selector: variableDescriptor.selector === '.edit-post-visual-editor__content-area > div' ? ':root' : variableDescriptor.selector\n }),\n value: value.tablet,\n ast: rule.rulelist\n })\n });\n })\n });\n var mobileAst = tabletAst;\n\n if (!mobileAst.rules.find(function (_ref2) {\n var type = _ref2.type,\n parameters = _ref2.parameters;\n return type === 'atRule' && parameters === args.mobileMQ;\n })) {\n mobileAst = _objectSpread2(_objectSpread2({}, mobileAst), {}, {\n rules: [].concat(_toConsumableArray(mobileAst.rules), [{\n type: 'atRule',\n name: 'media',\n parameters: args.mobileMQ,\n rulelist: {\n type: 'rulelist',\n rules: []\n }\n }])\n });\n }\n\n mobileAst = _objectSpread2(_objectSpread2({}, mobileAst), {}, {\n rules: mobileAst.rules.map(function (rule) {\n if (rule.type !== 'atRule' || rule.parameters !== args.mobileMQ) {\n return rule;\n }\n\n return _objectSpread2(_objectSpread2({}, rule), {}, {\n rulelist: replacingLogic({\n variableDescriptor: _objectSpread2(_objectSpread2({}, variableDescriptor), {}, {\n selector: variableDescriptor.selector === '.edit-post-visual-editor__content-area > div' ? ':root' : variableDescriptor.selector\n }),\n value: value.mobile,\n ast: rule.rulelist\n })\n });\n })\n });\n return mobileAst;\n }, styleDescriptor.ast)\n });\n }));\n};\n\n\n//# sourceMappingURL=index.es.js.map\n\n;// CONCATENATED MODULE: external \"window.blocksyOptions\"\nconst external_window_blocksyOptions_namespaceObject = window.blocksyOptions;\n// EXTERNAL MODULE: ./node_modules/customizer-sync-helpers/dist/promote-into-responsive.js\nvar promote_into_responsive = __webpack_require__(600);\n;// CONCATENATED MODULE: ./static/js/customizer/sync/variables/background.js\nfunction background_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? background_ownKeys(Object(source), !0).forEach(function (key) { background_defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : background_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n\nfunction background_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n\n\nconst componentToHex = c => {\n var hex = c.toString(16);\n return hex.length == 1 ? '0' + hex : hex;\n};\n\nconst withResponsive = _ref => {\n let {\n responsive,\n value,\n cb\n } = _ref;\n value = (0,promote_into_responsive/* maybePromoteScalarValueIntoResponsive */.T)(value, responsive);\n\n if (responsive) {\n return {\n desktop: cb(value.desktop),\n tablet: cb(value.tablet),\n mobile: cb(value.mobile)\n };\n }\n\n return cb(value);\n};\n\nconst handleBackgroundOptionFor = _ref2 => {\n let {\n id,\n selector,\n responsive = false,\n valueExtractor = value => value,\n addToDescriptors = {},\n conditional_var = false,\n forced_background_image = false\n } = _ref2;\n return {\n [id]: [_objectSpread({\n variable: 'background-color',\n variableType: 'property',\n selector,\n responsive,\n extractValue: value => withResponsive({\n value: valueExtractor(value),\n responsive,\n cb: value => {\n if (conditional_var) {\n return `var(${conditional_var}, ${value.backgroundColor.default.color})`;\n }\n\n if (!value) {\n return 'CT_CSS_SKIP_RULE';\n }\n\n return value.backgroundColor.default.color;\n }\n })\n }, addToDescriptors), _objectSpread({\n variable: 'background-image',\n variableType: 'property',\n selector,\n responsive,\n extractValue: value => withResponsive({\n value: valueExtractor(value),\n responsive,\n cb: function () {\n let {\n background_type,\n gradient,\n background_image,\n background_pattern,\n patternColor,\n backgroundColor,\n overlayColor\n } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n if (background_type === 'color') {\n if (forced_background_image) {\n return 'none';\n }\n\n return 'CT_CSS_SKIP_RULE';\n }\n\n const str_replace = ($old, $new, $text) => ($text + '').split($old).join($new);\n\n if (background_type === 'image') {\n if (!background_image.url) {\n return 'CT_CSS_SKIP_RULE';\n }\n\n return `${overlayColor.default.color !== 'CT_CSS_SKIP_RULE' ? `linear-gradient(${overlayColor.default.color}, ${overlayColor.default.color}), ` : ''}url(${background_image.url})`;\n }\n\n if (background_type === 'gradient') {\n return gradient;\n }\n\n let opacity = 1;\n let color = patternColor ? patternColor.default.color : '';\n\n if (color.indexOf('paletteColor1') > -1) {\n color = getComputedStyle(document.body).getPropertyValue('--paletteColor1');\n }\n\n if (color.indexOf('paletteColor2') > -1) {\n color = getComputedStyle(document.body).getPropertyValue('--paletteColor2');\n }\n\n if (color.indexOf('paletteColor3') > -1) {\n color = getComputedStyle(document.body).getPropertyValue('--paletteColor3');\n }\n\n if (color.indexOf('paletteColor4') > -1) {\n color = getComputedStyle(document.body).getPropertyValue('--paletteColor4');\n }\n\n if (color.indexOf('paletteColor5') > -1) {\n color = getComputedStyle(document.body).getPropertyValue('--paletteColor5');\n }\n\n if (color.indexOf('paletteColor6') > -1) {\n color = getComputedStyle(document.body).getPropertyValue('--paletteColor6');\n }\n\n if (color.indexOf('paletteColor7') > -1) {\n color = getComputedStyle(document.body).getPropertyValue('--paletteColor7');\n }\n\n if (color.indexOf('paletteColor8') > -1) {\n color = getComputedStyle(document.body).getPropertyValue('--paletteColor8');\n }\n\n if (color.indexOf('rgb') > -1) {\n const rgb_array = str_replace('rgb(', '', str_replace(')', '', str_replace('rgba(', '', str_replace(' ', '', color)))).split(',');\n color = `#${componentToHex(parseInt(rgb_array[0], 10))}${componentToHex(parseInt(rgb_array[1], 10))}${componentToHex(parseInt(rgb_array[2], 10))}`;\n\n if (rgb_array.length > 3) {\n opacity = rgb_array[3];\n }\n }\n\n color = str_replace('#', '', color);\n return `url(\"${str_replace('OPACITY', opacity, str_replace('COLOR', color, ct_localizations.customizer_sync.svg_patterns[background_pattern] || ct_localizations.customizer_sync.svg_patterns['type-1']))}\")`;\n }\n })\n }, addToDescriptors), _objectSpread(_objectSpread({\n variable: 'background-position',\n variableType: 'property',\n selector,\n responsive\n }, addToDescriptors), {}, {\n extractValue: value => withResponsive({\n value: valueExtractor(value),\n responsive,\n cb: function () {\n let {\n background_type,\n background_image\n } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n if (background_type !== 'image') {\n return 'CT_CSS_SKIP_RULE';\n }\n\n return `${Math.round(parseFloat(background_image.x || 0) * 100)}% ${Math.round(parseFloat(background_image.y || 0) * 100)}%`;\n }\n })\n }), _objectSpread(_objectSpread({\n variable: 'background-size',\n variableType: 'property',\n selector,\n responsive\n }, addToDescriptors), {}, {\n extractValue: value => withResponsive({\n value: valueExtractor(value),\n responsive,\n cb: function () {\n let {\n background_type,\n background_size\n } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n if (background_type !== 'image') {\n return 'CT_CSS_SKIP_RULE';\n }\n\n return background_size;\n }\n })\n }), _objectSpread(_objectSpread({\n variable: 'background-attachment',\n variableType: 'property',\n selector,\n responsive\n }, addToDescriptors), {}, {\n extractValue: value => withResponsive({\n value: valueExtractor(value),\n responsive,\n cb: function () {\n let {\n background_type,\n background_attachment\n } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n if (background_type !== 'image') {\n return 'CT_CSS_SKIP_RULE';\n }\n\n return background_attachment;\n }\n })\n }), _objectSpread(_objectSpread({\n selector,\n variable: 'background-repeat',\n variableType: 'property',\n responsive\n }, addToDescriptors), {}, {\n extractValue: value => withResponsive({\n value: valueExtractor(value),\n responsive,\n cb: function () {\n let {\n background_type,\n background_repeat\n } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n if (background_type !== 'image') {\n return 'CT_CSS_SKIP_RULE';\n }\n\n if (background_repeat === 'repeat') {\n return 'CT_CSS_SKIP_RULE';\n }\n\n return background_repeat;\n }\n })\n })]\n };\n};\nconst getBackgroundVariablesFor = () => _objectSpread({}, handleBackgroundOptionFor({\n id: 'site_background',\n selector: 'body',\n responsive: true\n}));\n;// CONCATENATED MODULE: ./static/js/customizer/sync/helpers.js\nfunction helpers_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction helpers_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? helpers_ownKeys(Object(source), !0).forEach(function (key) { helpers_defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : helpers_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n\nfunction helpers_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n\n\nconst assembleSelector = selector => Array.isArray(selector) ? selector.join(' ') : selector;\nconst mutateSelector = function () {\n let args = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n args = helpers_objectSpread({\n selector: null,\n // prefix | suffix | between | replace-last\n operation: 'between',\n to_add: ''\n }, args);\n\n if (args.operation === 'between') {\n let [first, ...rest] = args.selector;\n return [first, args.to_add, ...rest];\n }\n\n if (args.operation === 'el-prefix' && args.selector.length > 1) {\n let [first, second, ...rest] = args.selector;\n return [first, `${args.to_add}${second}`, ...rest];\n }\n\n if (args.operation === 'el-suffix' && args.selector.length > 1) {\n let [first, second, ...rest] = args.selector;\n return [first, `${second}${args.to_add}`, ...rest];\n }\n\n if (args.operation === 'container-suffix') {\n let [first, ...rest] = args.selector;\n return [`${first}${args.to_add}`, ...rest];\n }\n\n if (args.operation === 'suffix') {\n return [...args.selector, args.to_add];\n }\n\n if (args.operation === 'prefix') {\n return [args.to_add, ...args.selector];\n }\n\n if (args.operation === 'replace-last') {\n let last = args.selector.pop();\n return [...args.selector, args.to_add];\n }\n\n return args.selector;\n};\nconst getColumnSelectorFor = function () {\n let args = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n args = helpers_objectSpread({\n itemId: null\n }, args);\n let result = getOriginalId(args.itemId);\n\n if (getOriginalId(args.itemId) !== shortenItemId(args.itemId)) {\n result = `${result}:${shortenItemId(args.itemId)}`;\n }\n\n return `[data-column=\"${result}\"]`;\n};\nconst getRootSelectorFor = function () {\n let args = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n args = helpers_objectSpread({\n // header | footer\n panelType: 'header',\n itemId: null\n }, args);\n let selector = '';\n\n if (args.itemId) {\n selector = `[data-id=\"${args.itemId}\"]`;\n\n if (['middle-row', 'top-row', 'bottom-row'].indexOf(args.itemId) > -1) {\n selector = `[data-row*=\"${args.itemId.replace('-row', '')}\"]`;\n }\n\n if (args.itemId === 'socials') {\n selector = `${selector}.ct-${args.panelType}-socials`;\n }\n\n if (args.itemId === 'offcanvas') {\n selector = '#offcanvas';\n }\n }\n\n let section = document.querySelector(args.panelType === 'header' ? 'header#header' : 'footer.ct-footer');\n let header_prefix = `[data-${args.panelType}*=\"${section ? section.dataset.id || 'type-1' : 'type-1'}\"]`;\n\n if (args.itemId && ['middle-row', 'top-row', 'bottom-row', 'menu', 'menu-secondary', 'menu-tertiary', 'logo', 'language-switcher', 'button', 'text', 'search-input', 'contacts', 'widget-area-1', 'widget-area-2', 'widget-area-3', 'widget-area-4'].indexOf(args.itemId) > -1) {\n if (args.panelType === 'header') {\n header_prefix = `${header_prefix} .ct-header`;\n }\n\n if (args.panelType === 'footer') {\n header_prefix = `${header_prefix} .ct-footer`;\n }\n }\n\n if (!selector) {\n return [header_prefix];\n }\n\n return [header_prefix, selector];\n};\nconst applyPrefixFor = (selector, prefix) => {\n if (prefix && prefix.length > 0) {\n return `[data-prefix=\"${prefix}\"] ${selector}`;\n }\n\n return selector;\n};\nconst getPrefixFor = function () {\n let {\n allowed_prefixes = null,\n default_prefix = null\n } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n let actualPrefix = document.body.dataset.prefix;\n\n if (allowed_prefixes && actualPrefix.indexOf('_archive') === -1 && allowed_prefixes.indexOf(actualPrefix) === -1) {\n actualPrefix = default_prefix;\n }\n\n return actualPrefix;\n};\nconst maybeInsertBefore = _ref => {\n let {\n el,\n selector,\n destination\n } = _ref;\n\n if (destination.querySelector(selector)) {\n destination.insertBefore(el, destination.querySelector(selector));\n } else {\n destination.appendChild(el);\n }\n};\nconst withKeys = (keys, descriptor) => keys.reduce((result, currentKey) => helpers_objectSpread(helpers_objectSpread({}, result), {}, {\n [currentKey]: descriptor\n}), {});\nconst setRatioFor = (ratio, el) => {\n let imgEl = el.querySelector('[width]');\n let thumb_ratio = ratio === 'original' ? imgEl ? [imgEl.parentNode.dataset.w ? parseInt(imgEl.parentNode.dataset.w) : imgEl.width, imgEl.parentNode.dataset.h ? parseInt(imgEl.parentNode.dataset.h) : imgEl.height] : [1, 1] : (ratio || '4/3').split((ratio || '4/3').indexOf('/') > -1 ? '/' : ':');\n imgEl.style.aspectRatio = `${thumb_ratio[0] / thumb_ratio[1]}`;\n};\nfunction changeTagName(node, name) {\n var renamed = document.createElement(name);\n [...node.attributes].map(_ref2 => {\n let {\n name,\n value\n } = _ref2;\n renamed.setAttribute(name, value);\n });\n\n while (node.firstChild) {\n renamed.appendChild(node.firstChild);\n }\n\n return node.parentNode.replaceChild(renamed, node);\n}\nconst getCache = () => {\n const div = document.createElement('div');\n div.innerHTML = document.querySelector('.ct-customizer-preview-cache-container').value;\n return div;\n};\nconst getFreshHtmlFor = function (id) {\n let cache = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n let attr = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'id';\n\n if (!cache) {\n cache = getCache();\n }\n\n const newHtml = cache.querySelector(`.ct-customizer-preview-cache [data-${attr}=\"${id}\"]`).innerHTML;\n const e = document.createElement('div');\n e.innerHTML = newHtml;\n return e;\n};\nconst checkAndReplace = function () {\n let args = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n args = helpers_objectSpread({\n id: null,\n fragment_id: null,\n selector: null,\n parent_selector: null,\n // append | firstChild | maybeBefore:selector\n strategy: 'append',\n whenInserted: () => {},\n beforeInsert: el => {},\n watch: [],\n onChange: null\n }, args);\n\n const render = () => {\n const to = wp.customize(args.id)();\n\n if (args.strategy === 'hide') {\n Array.from(document.querySelectorAll(`${args.parent_selector} ${args.selector}`)).map(el => {\n el.removeAttribute('data-customize-hide');\n\n if (to !== 'yes') {\n el.dataset.customizeHide = '';\n }\n });\n return;\n }\n\n const parent = document.querySelector(args.parent_selector);\n [...document.querySelectorAll(`${args.parent_selector} ${args.selector}`)].map(el => el.parentNode.removeChild(el));\n if (to !== 'yes') return;\n const el = getFreshHtmlFor(args.fragment_id);\n\n while (el.firstElementChild) {\n args.beforeInsert(el.firstElementChild);\n\n if (args.strategy === 'append') {\n parent.appendChild(el.firstElementChild);\n }\n\n if (args.strategy === 'firstChild') {\n parent.insertBefore(el.firstElementChild, parent.firstElementChild);\n }\n\n if (args.strategy.indexOf('maybeBefore') > -1) {\n const [_, selector] = args.strategy.split(':');\n\n if (parent.querySelector(selector)) {\n parent.insertBefore(el.firstElementChild, parent.querySelector(selector));\n } else {\n parent.appendChild(el.firstElementChild);\n }\n }\n }\n\n args.whenInserted();\n };\n\n wp.customize(args.id, val => val.bind(to => render()));\n args.watch.map(opt => wp.customize(opt, val => val.bind(() => render())));\n};\nconst getOptionFor = function (key) {\n let prefix = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n const id = `${prefix}${prefix.length > 0 ? '_' : ''}${key}`;\n\n if (wp.customize(id)) {\n return wp.customize(id)();\n }\n\n return false;\n};\nconst watchOptionsWithPrefix = function () {\n let args = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n const {\n getPrefix = getPrefixFor,\n getOptionsForPrefix = _ref3 => {\n let {\n prefix\n } = _ref3;\n return [];\n },\n render = () => {},\n events = []\n } = args;\n let prefix = getPrefix();\n events.map(evt => ctEvents.on(evt, () => render({\n prefix\n })));\n getOptionsForPrefix({\n prefix\n }).map(id => wp.customize(id, val => val.bind(to => render({\n prefix,\n id\n }))));\n};\nconst handleResponsiveSwitch = _ref4 => {\n let {\n selector,\n variable = 'visibility',\n on = 'block',\n off = 'none'\n } = _ref4;\n return {\n selector,\n variable,\n responsive: true,\n extractValue: _ref5 => {\n let {\n mobile,\n tablet,\n desktop\n } = _ref5;\n return {\n mobile: mobile ? on : off,\n tablet: tablet ? on : off,\n desktop: desktop ? on : off\n };\n }\n };\n};\nconst responsiveClassesFor = (data, el) => {\n el.classList.remove('ct-hidden-sm', 'ct-hidden-md', 'ct-hidden-lg');\n\n if (typeof data !== 'object') {\n if (!wp.customize(data)) return;\n data = wp.customize(data)() || {\n mobile: false,\n tablet: true,\n desktop: true\n };\n }\n\n if (!data.mobile) {\n el.classList.add('ct-hidden-sm');\n }\n\n if (!data.tablet) {\n el.classList.add('ct-hidden-md');\n }\n\n if (!data.desktop) {\n el.classList.add('ct-hidden-lg');\n }\n};\nconst replaceFirstTextNode = (el, newText) => {\n let textNode = [...el.childNodes].find(elm => elm.nodeType != 1 && elm.textContent.trim().length !== 0);\n\n if (!textNode) {\n el.insertAdjacentText('afterbegin', newText);\n return;\n }\n\n textNode.textContent = `${newText}${String.fromCharCode(160)}`;\n};\nconst disableTransitionsStart = el => {\n Array.from(el).map(el => {\n el.classList.add('ct-disable-transitions');\n });\n};\nconst disableTransitionsEnd = el => {\n setTimeout(() => {\n Array.from(el).map(el => {\n el.classList.remove('ct-disable-transitions');\n });\n }, 50);\n};\nconst mapValue = function () {\n let args = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n args = helpers_objectSpread({\n value: {},\n map: {}\n }, args);\n\n if (args.value.desktop && args.map[args.value.desktop]) {\n args.value.desktop = args.map[args.value.desktop];\n }\n\n if (args.value.tablet && args.map[args.value.tablet]) {\n args.value.tablet = args.map[args.value.tablet];\n }\n\n if (args.value.mobile && args.map[args.value.mobile]) {\n args.value.mobile = args.map[args.value.mobile];\n }\n\n if (args.map[args.value]) {\n return args.map[args.value];\n }\n\n return args.value;\n};\n;// CONCATENATED MODULE: ./static/js/editor/variables.js\nfunction variables_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction variables_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? variables_ownKeys(Object(source), !0).forEach(function (key) { variables_defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : variables_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n\nfunction variables_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n\n\n\nconst isContentBlock = document.body.classList.contains('post-type-ct_content_block');\nconst gutenbergVariables = variables_objectSpread(variables_objectSpread({}, handleBackgroundOptionFor({\n id: 'background',\n selector: '.edit-post-visual-editor__content-area > div',\n responsive: true,\n addToDescriptors: {\n fullValue: true,\n important: true\n },\n valueExtractor: _ref => {\n let {\n background\n } = _ref;\n\n if (!background.desktop && !isContentBlock && background.background_type === 'color' && background.backgroundColor.default.color && background.backgroundColor.default.color.indexOf('CT_CSS_SKIP_RULE') > -1) {\n return ct_editor_localizations.default_background;\n }\n\n return background;\n }\n})), withKeys(['content_style_source', 'content_style', 'content_background', 'content_boxed_shadow', 'boxed_content_spacing', 'content_boxed_radius', ...(isContentBlock ? ['has_content_block_structure', 'template_subtype', 'template_editor_width_source', 'template_editor_width'] : [])], [{\n selector: `.editor-styles-wrapper`,\n variable: 'block-max-width',\n extractValue: _ref2 => {\n let {\n template_subtype,\n template_editor_width_source = 'small',\n template_editor_width = 1290\n } = _ref2;\n\n if (!template_subtype) {\n return 'CT_CSS_SKIP_RULE';\n }\n\n if (template_subtype !== 'card') {\n return 'CT_CSS_SKIP_RULE';\n }\n\n if (template_editor_width_source === 'small') {\n return 500;\n }\n\n if (template_editor_width_source === 'medium') {\n return 900;\n }\n\n return template_editor_width;\n },\n fullValue: true,\n unit: 'px',\n important: true\n}, {\n selector: `.editor-styles-wrapper`,\n variable: 'has-boxed',\n responsive: true,\n extractValue: _ref3 => {\n let {\n template_subtype,\n content_style_source = 'inherit',\n has_content_block_structure = 'yes',\n content_style = 'wide'\n } = _ref3;\n\n if (!isContentBlock && content_style_source === 'inherit') {\n content_style = ct_editor_localizations.default_content_style;\n }\n\n content_style = (0,promote_into_responsive/* maybePromoteScalarValueIntoResponsive */.T)(content_style);\n\n if (isContentBlock && (has_content_block_structure !== 'yes' || template_subtype === 'card')) {\n content_style = {\n desktop: 'wide',\n tablet: 'wide',\n mobile: 'wide'\n };\n }\n\n return {\n desktop: content_style.desktop === 'boxed' ? 'var(--true)' : 'var(--false)',\n tablet: content_style.tablet === 'boxed' ? 'var(--true)' : 'var(--false)',\n mobile: content_style.mobile === 'boxed' ? 'var(--true)' : 'var(--false)'\n };\n },\n fullValue: true,\n unit: ''\n}, {\n selector: `.editor-styles-wrapper`,\n variable: 'has-wide',\n responsive: true,\n extractValue: _ref4 => {\n let {\n template_subtype,\n has_content_block_structure = 'yes',\n content_style_source = 'inherit',\n content_style = 'wide'\n } = _ref4;\n\n if (!isContentBlock && content_style_source === 'inherit') {\n content_style = ct_editor_localizations.default_content_style;\n }\n\n content_style = (0,promote_into_responsive/* maybePromoteScalarValueIntoResponsive */.T)(content_style);\n\n if (isContentBlock && (has_content_block_structure !== 'yes' || template_subtype === 'card')) {\n content_style = {\n desktop: 'wide',\n tablet: 'wide',\n mobile: 'wide'\n };\n }\n\n return {\n desktop: content_style.desktop === 'wide' ? 'var(--true)' : 'var(--false)',\n tablet: content_style.tablet === 'wide' ? 'var(--true)' : 'var(--false)',\n mobile: content_style.mobile === 'wide' ? 'var(--true)' : 'var(--false)'\n };\n },\n fullValue: true,\n unit: ''\n}, ...handleBackgroundOptionFor({\n id: 'background',\n selector: '.editor-styles-wrapper',\n responsive: true,\n conditional_var: '--has-boxed',\n addToDescriptors: {\n fullValue: true\n },\n valueExtractor: _ref5 => {\n let {\n template_subtype,\n has_content_block_structure = 'yes',\n content_style_source = 'inherit',\n content_background\n } = _ref5;\n\n if (!isContentBlock && content_style_source === 'inherit') {\n content_background = ct_editor_localizations.default_content_background;\n }\n\n if (isContentBlock && (has_content_block_structure !== 'yes' || template_subtype === 'card')) {\n content_background = JSON.parse(JSON.stringify((0,promote_into_responsive/* maybePromoteScalarValueIntoResponsive */.T)(content_background)));\n content_background.desktop.background_type = 'color';\n content_background.desktop.backgroundColor.default.color = 'CT_CSS_SKIP_RULE';\n content_background.tablet.background_type = 'color';\n content_background.tablet.backgroundColor.default.color = 'CT_CSS_SKIP_RULE';\n content_background.mobile.background_type = 'color';\n content_background.mobile.backgroundColor.default.color = 'CT_CSS_SKIP_RULE';\n }\n\n return content_background;\n }\n}).background, {\n selector: '.editor-styles-wrapper',\n type: 'spacing',\n variable: 'boxed-content-spacing',\n responsive: true,\n unit: '',\n fullValue: true,\n extractValue: _ref6 => {\n let {\n template_subtype,\n content_style_source = 'inherit',\n boxed_content_spacing,\n has_content_block_structure = 'yes'\n } = _ref6;\n\n if (!isContentBlock && content_style_source === 'inherit') {\n boxed_content_spacing = ct_editor_localizations.default_boxed_content_spacing;\n }\n\n if (isContentBlock && (has_content_block_structure !== 'yes' || template_subtype === 'card')) {\n return 'CT_CSS_SKIP_RULE';\n }\n\n return boxed_content_spacing;\n }\n}, {\n selector: '.editor-styles-wrapper',\n type: 'spacing',\n variable: 'border-radius',\n responsive: true,\n fullValue: true,\n extractValue: _ref7 => {\n let {\n template_subtype,\n content_style_source = 'inherit',\n content_boxed_radius,\n has_content_block_structure = 'yes'\n } = _ref7;\n\n if (!isContentBlock && content_style_source === 'inherit') {\n content_boxed_radius = ct_editor_localizations.default_content_boxed_radius;\n }\n\n if (isContentBlock && (has_content_block_structure !== 'yes' || template_subtype === 'card')) {\n return 'CT_CSS_SKIP_RULE';\n }\n\n return content_boxed_radius;\n }\n}, {\n selector: '.editor-styles-wrapper',\n type: 'box-shadow',\n variable: 'box-shadow',\n responsive: true,\n fullValue: true,\n extractValue: _ref8 => {\n let {\n template_subtype,\n content_style_source = 'inherit',\n content_boxed_shadow,\n has_content_block_structure = 'yes'\n } = _ref8;\n\n if (!isContentBlock && content_style_source === 'inherit') {\n content_boxed_shadow = ct_editor_localizations.default_content_boxed_shadow;\n }\n\n if (isContentBlock && (has_content_block_structure !== 'yes' || template_subtype === 'card')) {\n return 'CT_CSS_SKIP_RULE';\n }\n\n return content_boxed_shadow;\n }\n}]));\n;// CONCATENATED MODULE: ./static/js/editor/sync.js\nfunction sync_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction sync_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? sync_ownKeys(Object(source), !0).forEach(function (key) { sync_defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : sync_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n\nfunction sync_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n\n\n\n\n\n\nlet oldFn = wp.data.dispatch('core/edit-post').__experimentalSetPreviewDeviceType;\n\nlet oldFnToggleFeature = wp.data.dispatch('core/edit-post').toggleFeature;\n\nconst performSelectorsReplace = () => {\n let googleFontsUrl = '';\n let maybeGlobalStyles = document.querySelector('#ct-main-styles-inline-css');\n\n if (maybeGlobalStyles && maybeGlobalStyles.innerText.indexOf('googleapis.com') > -1) {\n let googleFonts = maybeGlobalStyles.innerText.split('display=swap');\n googleFontsUrl = googleFonts[0].trim().replace(\"@import url('\", '') + 'display=swap';\n }\n\n ;\n [...document.querySelectorAll('style')].map(style => {\n if (!style.innerText) {\n return;\n }\n\n if (style.innerText.indexOf('narrow-container-max-width') === -1) {\n return;\n }\n\n style.innerText = style.innerText.replace(/\\.editor-styles-wrapper \\.edit-post-visual-editor__content-area \\> div/g, '.edit-post-visual-editor__content-area > div');\n style.innerText = style.innerText.replace('.editor-styles-wrapperroot', ':root');\n });\n const maybeIframe = document.querySelector('.edit-post-visual-editor__content-area iframe[name=\"editor-canvas\"]');\n\n if (maybeIframe) {\n ;\n [...maybeIframe.contentDocument.querySelectorAll('style')].map(style => {\n if (style.innerText.indexOf('narrow-container-max-width') === -1) {\n return;\n }\n\n if (googleFontsUrl) {\n if (style.innerHTML.indexOf(googleFontsUrl) === -1) {\n style.innerHTML = `@import url('${googleFontsUrl}');${style.innerHTML}`;\n }\n }\n\n style.innerHTML = style.innerHTML.replace(/\\.editor-styles-wrapper \\.edit-post-visual-editor__content-area \\> div/g, ':root');\n style.innerHTML = style.innerHTML.replace(/\\.edit-post-visual-editor__content-area \\> div/g, ':root');\n style.innerHTML = style.innerHTML.replace('.editor-styles-wrapperroot', ':root');\n });\n }\n};\n\nconst performThemeEditorStylesUpdate = () => {\n setTimeout(() => {\n const themeStyles = (0,external_window_wp_data_namespaceObject.select)('core/edit-post').isFeatureActive('themeStyles');\n document.body.classList.remove('ct-theme-editor-styles');\n\n if (themeStyles) {\n document.body.classList.add('ct-theme-editor-styles');\n }\n });\n};\n\nif (oldFn) {\n setTimeout(() => {\n performSelectorsReplace();\n performThemeEditorStylesUpdate();\n }, 1000);\n\n wp.data.dispatch('core/edit-post').__experimentalSetPreviewDeviceType = function () {\n oldFn(...arguments);\n setTimeout(() => {\n overrideStylesWithAst();\n performSelectorsReplace();\n }, 200);\n };\n\n wp.data.dispatch('core/edit-post').toggleFeature = function () {\n oldFnToggleFeature(...arguments);\n performThemeEditorStylesUpdate();\n };\n}\n\nconst unsubscribe = wp.data.subscribe(() => {\n const themeStyles = (0,external_window_wp_data_namespaceObject.select)('core/edit-post').isFeatureActive('themeStyles');\n document.body.classList.remove('ct-theme-editor-styles');\n\n if (themeStyles) {\n document.body.classList.add('ct-theme-editor-styles');\n }\n\n unsubscribe();\n});\n\nconst syncContentBlocks = _ref => {\n let {\n atts\n } = _ref;\n let page_structure_type = atts.content_block_structure || 'type-4';\n document.body.classList.remove('ct-structure-narrow', 'ct-structure-normal');\n\n if (atts.has_content_block_structure && atts.has_content_block_structure !== 'yes') {\n document.body.classList.add(`ct-structure-normal`);\n return;\n }\n\n document.body.classList.add(`ct-structure-${page_structure_type === 'type-4' ? 'normal' : 'narrow'}`);\n};\n\nconst mountSync = function () {\n let atts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n atts = sync_objectSpread(sync_objectSpread({}, (0,external_window_wp_data_namespaceObject.select)('core/editor').getEditedPostAttribute('blocksy_meta') || {}), atts);\n\n if (document.body.classList.contains('post-type-ct_content_block')) {\n syncContentBlocks({\n atts\n });\n return;\n }\n\n let page_structure_type = atts.page_structure_type || 'default';\n\n if (page_structure_type === 'default') {\n page_structure_type = ct_editor_localizations.default_page_structure;\n }\n\n document.body.classList.remove('ct-structure-narrow', 'ct-structure-normal');\n document.body.classList.add(`ct-structure-${page_structure_type === 'type-4' ? 'normal' : 'narrow'}`);\n};\nconst handleMetaboxValueChange = (optionId, optionValue) => {\n if (optionId === 'page_structure_type' || optionId === 'has_content_block_structure' || optionId === 'content_block_structure') {\n mountSync({\n [optionId]: optionValue\n });\n }\n\n const atts = sync_objectSpread(sync_objectSpread({}, (0,external_window_blocksyOptions_namespaceObject.getValueFromInput)(ct_editor_localizations.post_options, wp.data.select('core/editor').getEditedPostAttribute('blocksy_meta') || {})), {}, {\n [optionId]: optionValue\n });\n\n if (gutenbergVariables[optionId]) {\n updateVariableInStyleTags({\n variableDescriptor: Array.isArray(gutenbergVariables[optionId]) ? gutenbergVariables[optionId] : [gutenbergVariables[optionId]],\n value: optionValue,\n fullValue: atts,\n tabletMQ: '(max-width: 800px)',\n mobileMQ: '(max-width: 370px)'\n });\n performSelectorsReplace();\n }\n};\n;// CONCATENATED MODULE: external \"window.wp.i18n\"\nconst external_window_wp_i18n_namespaceObject = window.wp.i18n;\n;// CONCATENATED MODULE: external \"window.wp.primitives\"\nconst external_window_wp_primitives_namespaceObject = window.wp.primitives;\n;// CONCATENATED MODULE: ./static/js/editor.js\nfunction editor_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction editor_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? editor_ownKeys(Object(source), !0).forEach(function (key) { editor_defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : editor_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n\nfunction editor_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n\n\n\n\n\n\n\n\n\n\n\nconst closeSmall = (0,external_window_wp_element_namespaceObject.createElement)(external_window_wp_primitives_namespaceObject.SVG, {\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 24 24\"\n}, (0,external_window_wp_element_namespaceObject.createElement)(external_window_wp_primitives_namespaceObject.Path, {\n d: \"M13 11.9l3.3-3.4-1.1-1-3.2 3.3-3.2-3.3-1.1 1 3.3 3.4-3.5 3.6 1 1L12 13l3.5 3.5 1-1z\"\n}));\nconst starEmpty = (0,external_window_wp_element_namespaceObject.createElement)(external_window_wp_primitives_namespaceObject.SVG, {\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 24 24\"\n}, (0,external_window_wp_element_namespaceObject.createElement)(external_window_wp_primitives_namespaceObject.Path, {\n fillRule: \"evenodd\",\n d: \"M9.706 8.646a.25.25 0 01-.188.137l-4.626.672a.25.25 0 00-.139.427l3.348 3.262a.25.25 0 01.072.222l-.79 4.607a.25.25 0 00.362.264l4.138-2.176a.25.25 0 01.233 0l4.137 2.175a.25.25 0 00.363-.263l-.79-4.607a.25.25 0 01.072-.222l3.347-3.262a.25.25 0 00-.139-.427l-4.626-.672a.25.25 0 01-.188-.137l-2.069-4.192a.25.25 0 00-.448 0L9.706 8.646zM12 7.39l-.948 1.921a1.75 1.75 0 01-1.317.957l-2.12.308 1.534 1.495c.412.402.6.982.503 1.55l-.362 2.11 1.896-.997a1.75 1.75 0 011.629 0l1.895.997-.362-2.11a1.75 1.75 0 01.504-1.55l1.533-1.495-2.12-.308a1.75 1.75 0 01-1.317-.957L12 7.39z\",\n clipRule: \"evenodd\"\n}));\nconst starFilled = (0,external_window_wp_element_namespaceObject.createElement)(external_window_wp_primitives_namespaceObject.SVG, {\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 24 24\"\n}, (0,external_window_wp_element_namespaceObject.createElement)(external_window_wp_primitives_namespaceObject.Path, {\n d: \"M11.776 4.454a.25.25 0 01.448 0l2.069 4.192a.25.25 0 00.188.137l4.626.672a.25.25 0 01.139.426l-3.348 3.263a.25.25 0 00-.072.222l.79 4.607a.25.25 0 01-.362.263l-4.138-2.175a.25.25 0 00-.232 0l-4.138 2.175a.25.25 0 01-.363-.263l.79-4.607a.25.25 0 00-.071-.222L4.754 9.881a.25.25 0 01.139-.426l4.626-.672a.25.25 0 00.188-.137l2.069-4.192z\"\n}));\n\nconst BlocksyOptions = _ref => {\n let {\n name,\n value,\n options,\n onChange,\n isActive,\n isPinnable = true,\n isPinned,\n togglePin,\n toggleSidebar,\n closeGeneralSidebar\n } = _ref;\n const containerRef = (0,external_window_wp_element_namespaceObject.useRef)();\n const parentContainerRef = (0,external_window_wp_element_namespaceObject.useRef)();\n const [values, setValues] = (0,external_window_wp_element_namespaceObject.useState)(null);\n (0,external_window_wp_element_namespaceObject.useEffect)(() => {\n document.body.classList[isActive ? 'add' : 'remove']('blocksy-sidebar-active');\n }, [isActive]);\n\n const handleChange = _ref2 => {\n let {\n id: key,\n value: v\n } = _ref2;\n\n const futureValue = editor_objectSpread(editor_objectSpread({}, values || (0,external_window_blocksyOptions_namespaceObject.getValueFromInput)(options, value || {})), {}, {\n [key]: v\n });\n\n handleMetaboxValueChange(key, v);\n onChange(futureValue);\n setValues(futureValue);\n };\n\n (0,external_window_wp_element_namespaceObject.useEffect)(() => {\n external_ctEvents_default().on('ct:metabox:options:trigger-change', handleChange);\n return () => {\n external_ctEvents_default().off('ct:metabox:options:trigger-change', handleChange);\n };\n }, []);\n return (0,external_window_wp_element_namespaceObject.createElement)(external_window_wp_element_namespaceObject.Fragment, null, (0,external_window_wp_element_namespaceObject.createElement)(external_window_wp_editPost_namespaceObject.PluginSidebarMoreMenuItem, {\n target: \"blocksy\",\n icon: \"admin-customizer\"\n }, (0,external_window_wp_i18n_namespaceObject.sprintf)((0,external_window_wp_i18n_namespaceObject.__)('%s Page Settings', 'blocksy'), ct_localizations.product_name)), (0,external_window_wp_element_namespaceObject.createElement)(external_window_wp_editPost_namespaceObject.PluginSidebar, {\n name: name,\n icon: (0,external_window_wp_element_namespaceObject.createElement)(\"span\", {\n style: {\n display: 'flex'\n },\n dangerouslySetInnerHTML: {\n __html: ct_editor_localizations.options_panel_svg\n }\n }),\n className: \"ct-components-panel\",\n title: (0,external_window_wp_i18n_namespaceObject.sprintf)((0,external_window_wp_i18n_namespaceObject.__)('%s Page Settings', 'blocksy'), ct_localizations.product_name)\n }, (0,external_window_wp_element_namespaceObject.createElement)(\"div\", {\n id: \"ct-page-options\",\n ref: parentContainerRef\n }, (0,external_window_wp_element_namespaceObject.createElement)(\"div\", {\n className: \"ct-options-container\",\n ref: containerRef\n }, (0,external_window_wp_element_namespaceObject.createElement)(external_window_blocksyOptions_namespaceObject.DeviceManagerProvider, null, (0,external_window_wp_element_namespaceObject.createElement)(external_window_blocksyOptions_namespaceObject.PanelLevel, {\n containerRef: containerRef,\n parentContainerRef: parentContainerRef,\n useRefsAsWrappers: true\n }, (0,external_window_wp_element_namespaceObject.createElement)(\"div\", {\n className: \"ct-panel-options-header components-panel__header edit-post-sidebar-header\"\n }, (0,external_window_wp_element_namespaceObject.createElement)(\"strong\", null, (0,external_window_wp_i18n_namespaceObject.sprintf)((0,external_window_wp_i18n_namespaceObject.__)('%s Page Settings', 'blocksy'), ct_localizations.product_name)), isPinnable && (0,external_window_wp_element_namespaceObject.createElement)(external_window_wp_components_namespaceObject.Button, {\n icon: isPinned ? starFilled : starEmpty,\n label: isPinned ? (0,external_window_wp_i18n_namespaceObject.__)('Unpin from toolbar', 'blocksy') : (0,external_window_wp_i18n_namespaceObject.__)('Pin to toolbar', 'blocksy'),\n onClick: togglePin,\n isPressed: isPinned,\n \"aria-expanded\": isPinned\n }), (0,external_window_wp_element_namespaceObject.createElement)(external_window_wp_components_namespaceObject.IconButton, {\n onClick: closeGeneralSidebar,\n icon: closeSmall,\n label: (0,external_window_wp_i18n_namespaceObject.__)('Close plugin', 'blocksy')\n })), (0,external_window_wp_element_namespaceObject.createElement)(external_window_blocksyOptions_namespaceObject.OptionsPanel, {\n onChange: (key, v) => {\n const futureValue = editor_objectSpread(editor_objectSpread({}, values || (0,external_window_blocksyOptions_namespaceObject.getValueFromInput)(options, value || {})), {}, {\n [key]: v\n });\n\n handleMetaboxValueChange(key, v);\n onChange(futureValue);\n setValues(futureValue);\n },\n value: values || (0,external_window_blocksyOptions_namespaceObject.getValueFromInput)(options, value || {}),\n options: options\n })))))));\n};\n\nconst BlocksyOptionsComposed = (0,external_window_wp_compose_namespaceObject.compose)((0,external_window_wp_plugins_namespaceObject.withPluginContext)((context, _ref3) => {\n let {\n name\n } = _ref3;\n return {\n sidebarName: `${context.name}/${name}`\n };\n}), (0,external_window_wp_data_namespaceObject.withSelect)((select, _ref4) => {\n let {\n sidebarName\n } = _ref4;\n const value = select('core/editor').getEditedPostAttribute('blocksy_meta');\n const {\n getActiveGeneralSidebarName,\n isPluginItemPinned\n } = select('core/edit-post');\n return {\n isActive: getActiveGeneralSidebarName() === sidebarName,\n isPinned: isPluginItemPinned(sidebarName),\n value: Array.isArray(value) ? {} : value || {},\n options: ct_editor_localizations.post_options\n };\n}), (0,external_window_wp_data_namespaceObject.withDispatch)((dispatch, _ref5) => {\n let {\n sidebarName\n } = _ref5;\n const {\n closeGeneralSidebar,\n openGeneralSidebar,\n togglePinnedPluginItem\n } = dispatch('core/edit-post');\n return {\n closeGeneralSidebar,\n togglePin: () => {\n togglePinnedPluginItem(sidebarName);\n },\n onChange: blocksy_meta => {\n dispatch('core/editor').editPost({\n blocksy_meta\n });\n }\n };\n}))(BlocksyOptions);\n\nif (ct_editor_localizations.post_options) {\n (0,external_window_wp_plugins_namespaceObject.registerPlugin)('blocksy', {\n render: () => (0,external_window_wp_element_namespaceObject.createElement)(BlocksyOptionsComposed, {\n name: \"blocksy\"\n })\n });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTUyLmpzIiwibWFwcGluZ3MiOiI7O0FBQUE7O0FDQUE7O0FDQUE7O0FDQUE7O0FDQUE7O0FDQUE7O0FDQUE7Ozs7OztBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNuZ0RBOzs7O0FDQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hYQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDek9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5SkE7O0FDQUE7O0FDQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3NtYWxsLWN0L2V4dGVybmFsIHZhciBcIndpbmRvdy53cC5lbGVtZW50XCI/NWFlYyIsIndlYnBhY2s6Ly9zbWFsbC1jdC9leHRlcm5hbCB2YXIgXCJ3aW5kb3cud3AucGx1Z2luc1wiPzQ5OWMiLCJ3ZWJwYWNrOi8vc21hbGwtY3QvZXh0ZXJuYWwgdmFyIFwid2luZG93LndwLmVkaXRQb3N0XCI/N2UxNiIsIndlYnBhY2s6Ly9zbWFsbC1jdC9leHRlcm5hbCB2YXIgXCJ3aW5kb3cud3AuZGF0YVwiPzE1ZjgiLCJ3ZWJwYWNrOi8vc21hbGwtY3QvZXh0ZXJuYWwgdmFyIFwid2luZG93LndwLmNvbXBvc2VcIj9jNmE4Iiwid2VicGFjazovL3NtYWxsLWN0L2V4dGVybmFsIHZhciBcIndpbmRvdy53cC5jb21wb25lbnRzXCI/M2QwMyIsIndlYnBhY2s6Ly9zbWFsbC1jdC9leHRlcm5hbCB2YXIgXCJjdEV2ZW50c1wiPzhhMmEiLCJ3ZWJwYWNrOi8vc21hbGwtY3QvLi9ub2RlX21vZHVsZXMvY3VzdG9taXplci1zeW5jLWhlbHBlcnMvZGlzdC9pbmRleC5lcy5qcz9iZmI2Iiwid2VicGFjazovL3NtYWxsLWN0L2V4dGVybmFsIHZhciBcIndpbmRvdy5ibG9ja3N5T3B0aW9uc1wiP2JjNzQiLCJ3ZWJwYWNrOi8vc21hbGwtY3QvLi9zdGF0aWMvanMvY3VzdG9taXplci9zeW5jL3ZhcmlhYmxlcy9iYWNrZ3JvdW5kLmpzP2I5NWEiLCJ3ZWJwYWNrOi8vc21hbGwtY3QvLi9zdGF0aWMvanMvY3VzdG9taXplci9zeW5jL2hlbHBlcnMuanM/NmFiMSIsIndlYnBhY2s6Ly9zbWFsbC1jdC8uL3N0YXRpYy9qcy9lZGl0b3IvdmFyaWFibGVzLmpzPzc3ZmIiLCJ3ZWJwYWNrOi8vc21hbGwtY3QvLi9zdGF0aWMvanMvZWRpdG9yL3N5bmMuanM/MzJmYyIsIndlYnBhY2s6Ly9zbWFsbC1jdC9leHRlcm5hbCB2YXIgXCJ3aW5kb3cud3AuaTE4blwiP2RjN2IiLCJ3ZWJwYWNrOi8vc21hbGwtY3QvZXh0ZXJuYWwgdmFyIFwid2luZG93LndwLnByaW1pdGl2ZXNcIj9hMGNiIiwid2VicGFjazovL3NtYWxsLWN0Ly4vc3RhdGljL2pzL2VkaXRvci5qcz9lOTcwIl0sInNvdXJjZXNDb250ZW50IjpbImNvbnN0IF9fV0VCUEFDS19OQU1FU1BBQ0VfT0JKRUNUX18gPSB3aW5kb3cud3AuZWxlbWVudDsiLCJjb25zdCBfX1dFQlBBQ0tfTkFNRVNQQUNFX09CSkVDVF9fID0gd2luZG93LndwLnBsdWdpbnM7IiwiY29uc3QgX19XRUJQQUNLX05BTUVTUEFDRV9PQkpFQ1RfXyA9IHdpbmRvdy53cC5lZGl0UG9zdDsiLCJjb25zdCBfX1dFQlBBQ0tfTkFNRVNQQUNFX09CSkVDVF9fID0gd2luZG93LndwLmRhdGE7IiwiY29uc3QgX19XRUJQQUNLX05BTUVTUEFDRV9PQkpFQ1RfXyA9IHdpbmRvdy53cC5jb21wb3NlOyIsImNvbnN0IF9fV0VCUEFDS19OQU1FU1BBQ0VfT0JKRUNUX18gPSB3aW5kb3cud3AuY29tcG9uZW50czsiLCJjb25zdCBfX1dFQlBBQ0tfTkFNRVNQQUNFX09CSkVDVF9fID0gY3RFdmVudHM7IiwiaW1wb3J0IHJlcXVpcmUkJDAgZnJvbSAndXRpbCc7XG5cbmZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkge1xuICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7XG5cbiAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcbiAgICB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTtcbiAgICBlbnVtZXJhYmxlT25seSAmJiAoc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHtcbiAgICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlO1xuICAgIH0pKSwga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpO1xuICB9XG5cbiAgcmV0dXJuIGtleXM7XG59XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQyKHRhcmdldCkge1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBzb3VyY2UgPSBudWxsICE9IGFyZ3VtZW50c1tpXSA/IGFyZ3VtZW50c1tpXSA6IHt9O1xuICAgIGkgJSAyID8gb3duS2V5cyhPYmplY3Qoc291cmNlKSwgITApLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7XG4gICAgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSkgOiBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkge1xuICBpZiAoa2V5IGluIG9iaikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwge1xuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgb2JqW2tleV0gPSB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiBvYmo7XG59XG5cbmZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShhcnIpIHtcbiAgcmV0dXJuIF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBfbm9uSXRlcmFibGVTcHJlYWQoKTtcbn1cblxuZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKGFycikge1xuICBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkoYXJyKTtcbn1cblxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheShpdGVyKSB7XG4gIGlmICh0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIGl0ZXJbU3ltYm9sLml0ZXJhdG9yXSAhPSBudWxsIHx8IGl0ZXJbXCJAQGl0ZXJhdG9yXCJdICE9IG51bGwpIHJldHVybiBBcnJheS5mcm9tKGl0ZXIpO1xufVxuXG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7XG4gIGlmICghbykgcmV0dXJuO1xuICBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pO1xuICB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7XG4gIGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7XG4gIGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pO1xuICBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7XG59XG5cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7XG4gIGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoO1xuXG4gIGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgYXJyMltpXSA9IGFycltpXTtcblxuICByZXR1cm4gYXJyMjtcbn1cblxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlU3ByZWFkKCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTtcbn1cblxudmFyIG1heWJlUHJvbW90ZVNjYWxhclZhbHVlSW50b1Jlc3BvbnNpdmUgPSBmdW5jdGlvbiBtYXliZVByb21vdGVTY2FsYXJWYWx1ZUludG9SZXNwb25zaXZlKHZhbHVlKSB7XG4gIHZhciBpc1Jlc3BvbnNpdmUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHRydWU7XG5cbiAgLyoqXG4gICAqIFJlc3BvbnNpdmUgdmFsdWUgbXVzdCBuZWNlc3NhcmlseSBoYXZlIHRoZSBkZXNrdG9wIGtleSBhdHRhY2hlZCB0byBpdFxuICAgKi9cbiAgaWYgKHZhbHVlICYmIE9iamVjdC5rZXlzKHZhbHVlKS5pbmRleE9mKCdkZXNrdG9wJykgPiAtMSkge1xuICAgIGlmICghaXNSZXNwb25zaXZlKSB7XG4gICAgICByZXR1cm4gdmFsdWUuZGVza3RvcDtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBpZiAoIWlzUmVzcG9uc2l2ZSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZGVza3RvcDogdmFsdWUsXG4gICAgdGFibGV0OiB2YWx1ZSxcbiAgICBtb2JpbGU6IHZhbHVlXG4gIH07XG59O1xuXG52YXIgc2hhZHlDc3MgPSB7fTtcblxudmFyIGFzdEl0ZXJhdG9yID0ge307XG5cbnZhciBjb21tb24gPSB7fTtcblxuKGZ1bmN0aW9uIChleHBvcnRzKSB7XG5cdC8qKlxuXHQgKiBAbGljZW5zZVxuXHQgKiBDb3B5cmlnaHQgKGMpIDIwMTYgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuXHQgKiBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXRcblx0ICogaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmRcblx0ICogYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heVxuXHQgKiBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dCBDb2RlIGRpc3RyaWJ1dGVkIGJ5XG5cdCAqIEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbyBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVBcblx0ICogcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dFxuXHQgKi9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHQvKipcblx0ICogQSBzZXQgb2YgY29tbW9uIFJlZ0V4cCBtYXRjaGVycyBmb3IgdG9rZW5pemluZyBDU1MuXG5cdCAqL1xuXHRjb25zdCBtYXRjaGVyID0ge1xuXHQgICAgd2hpdGVzcGFjZTogL1xccy8sXG5cdCAgICB3aGl0ZXNwYWNlR3JlZWR5OiAvKFxccyspL2csXG5cdCAgICBjb21tZW50R3JlZWR5OiAvKFxcKlxcLykvZyxcblx0ICAgIGJvdW5kYXJ5OiAvW1xcKFxcKVxce1xcfSdcIkA7Olxcc10vLFxuXHQgICAgc3RyaW5nQm91bmRhcnk6IC9bJ1wiXS9cblx0fTtcblx0ZXhwb3J0cy5tYXRjaGVyID0gbWF0Y2hlcjtcblx0KGZ1bmN0aW9uIChub2RlVHlwZSkge1xuXHQgICAgbm9kZVR5cGVbXCJzdHlsZXNoZWV0XCJdID0gXCJzdHlsZXNoZWV0XCI7XG5cdCAgICBub2RlVHlwZVtcImNvbW1lbnRcIl0gPSBcImNvbW1lbnRcIjtcblx0ICAgIG5vZGVUeXBlW1wiYXRSdWxlXCJdID0gXCJhdFJ1bGVcIjtcblx0ICAgIG5vZGVUeXBlW1wicnVsZXNldFwiXSA9IFwicnVsZXNldFwiO1xuXHQgICAgbm9kZVR5cGVbXCJleHByZXNzaW9uXCJdID0gXCJleHByZXNzaW9uXCI7XG5cdCAgICBub2RlVHlwZVtcImRlY2xhcmF0aW9uXCJdID0gXCJkZWNsYXJhdGlvblwiO1xuXHQgICAgbm9kZVR5cGVbXCJydWxlbGlzdFwiXSA9IFwicnVsZWxpc3RcIjtcblx0ICAgIG5vZGVUeXBlW1wiZGlzY2FyZGVkXCJdID0gXCJkaXNjYXJkZWRcIjtcblx0fSkoZXhwb3J0cy5ub2RlVHlwZSB8fCAoZXhwb3J0cy5ub2RlVHlwZSA9IHt9KSk7XG5cdFxufSAoY29tbW9uKSk7XG5cbi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAoYykgMjAxNiBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXRcbiAqIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kXG4gKiBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5XG4gKiBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dCBDb2RlIGRpc3RyaWJ1dGVkIGJ5XG4gKiBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQXG4gKiByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0XG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShhc3RJdGVyYXRvciwgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCB1dGlsID0gcmVxdWlyZSQkMDtcbmNvbnN0IGNvbW1vbl8xJDQgPSBjb21tb247XG5mdW5jdGlvbiogaXRlcmF0ZU92ZXJBc3Qobm9kZSkge1xuICAgIHlpZWxkIG5vZGU7XG4gICAgc3dpdGNoIChub2RlLnR5cGUpIHtcbiAgICAgICAgY2FzZSBjb21tb25fMSQ0Lm5vZGVUeXBlLnN0eWxlc2hlZXQ6XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJ1bGUgb2Ygbm9kZS5ydWxlcykge1xuICAgICAgICAgICAgICAgIHlpZWxkKiBpdGVyYXRlT3ZlckFzdChydWxlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY2FzZSBjb21tb25fMSQ0Lm5vZGVUeXBlLnJ1bGVzZXQ6XG4gICAgICAgICAgICByZXR1cm4geWllbGQqIGl0ZXJhdGVPdmVyQXN0KG5vZGUucnVsZWxpc3QpO1xuICAgICAgICBjYXNlIGNvbW1vbl8xJDQubm9kZVR5cGUucnVsZWxpc3Q6XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJ1bGUgb2Ygbm9kZS5ydWxlcykge1xuICAgICAgICAgICAgICAgIHlpZWxkKiBpdGVyYXRlT3ZlckFzdChydWxlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY2FzZSBjb21tb25fMSQ0Lm5vZGVUeXBlLmRlY2xhcmF0aW9uOlxuICAgICAgICAgICAgaWYgKG5vZGUudmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHlpZWxkKiBpdGVyYXRlT3ZlckFzdChub2RlLnZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY2FzZSBjb21tb25fMSQ0Lm5vZGVUeXBlLmF0UnVsZTpcbiAgICAgICAgICAgIGlmIChub2RlLnJ1bGVsaXN0KSB7XG4gICAgICAgICAgICAgICAgeWllbGQqIGl0ZXJhdGVPdmVyQXN0KG5vZGUucnVsZWxpc3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjYXNlIGNvbW1vbl8xJDQubm9kZVR5cGUuZXhwcmVzc2lvbjpcbiAgICAgICAgY2FzZSBjb21tb25fMSQ0Lm5vZGVUeXBlLmNvbW1lbnQ6XG4gICAgICAgIGNhc2UgY29tbW9uXzEkNC5ub2RlVHlwZS5kaXNjYXJkZWQ6XG4gICAgICAgICAgICByZXR1cm47IC8vIG5vIGNoaWxkIG5vZGVzXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBjb25zdCBuZXZlciA9IG5vZGU7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGBHb3QgYSBub2RlIG9mIHVua25vd24gdHlwZTogJHt1dGlsLmluc3BlY3QobmV2ZXIpfWApO1xuICAgIH1cbn1cbmFzdEl0ZXJhdG9yLml0ZXJhdGVPdmVyQXN0ID0gaXRlcmF0ZU92ZXJBc3Q7XG5cbnZhciBub2RlRmFjdG9yeSA9IHt9O1xuXG4vKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTYgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0XG4gKiBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZFxuICogYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heVxuICogYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieVxuICogR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUFxuICogcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dFxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkobm9kZUZhY3RvcnksIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY29tbW9uXzEkMyA9IGNvbW1vbjtcbi8qKlxuICogQ2xhc3MgdXNlZCBmb3IgZ2VuZXJhdGluZyBub2RlcyBpbiBhIENTUyBBU1QuIEV4dGVuZCB0aGlzIGNsYXNzIHRvIGltcGxlbWVudFxuICogdmlzaXRvcnMgdG8gZGlmZmVyZW50IG5vZGVzIHdoaWxlIHRoZSB0cmVlIGlzIGJlaW5nIGdlbmVyYXRlZCwgYW5kIC8gb3JcbiAqIGN1c3RvbSBub2RlIGdlbmVyYXRpb24uXG4gKi9cbmNsYXNzIE5vZGVGYWN0b3J5IHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgU3R5bGVzaGVldCBub2RlLlxuICAgICAqIEBwYXJhbSBydWxlcyBUaGUgbGlzdCBvZiBydWxlcyB0aGF0IGFwcGVhciBhdCB0aGUgdG9wXG4gICAgICogbGV2ZWwgb2YgdGhlIHN0eWxlc2hlZXQuXG4gICAgICovXG4gICAgc3R5bGVzaGVldChydWxlcywgcmFuZ2UpIHtcbiAgICAgICAgcmV0dXJuIHsgdHlwZTogY29tbW9uXzEkMy5ub2RlVHlwZS5zdHlsZXNoZWV0LCBydWxlcywgcmFuZ2UgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBBdCBSdWxlIG5vZGUuXG4gICAgICogQHBhcmFtIG5hbWUgVGhlIFwibmFtZVwiIG9mIHRoZSBBdCBSdWxlIChlLmcuLCBgY2hhcnNldGApXG4gICAgICogQHBhcmFtIHBhcmFtZXRlcnMgVGhlIFwicGFyYW1ldGVyc1wiIG9mIHRoZSBBdCBSdWxlIChlLmcuLCBgdXRmOGApXG4gICAgICogQHBhcmFtIHJ1bGVsaXN0IFRoZSBSdWxlbGlzdCBub2RlIChpZiBhbnkpIG9mIHRoZSBBdCBSdWxlLlxuICAgICAqL1xuICAgIGF0UnVsZShuYW1lLCBwYXJhbWV0ZXJzLCBydWxlbGlzdCA9IHVuZGVmaW5lZCwgbmFtZVJhbmdlLCBwYXJhbWV0ZXJzUmFuZ2UsIHJhbmdlKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBjb21tb25fMSQzLm5vZGVUeXBlLmF0UnVsZSxcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICBwYXJhbWV0ZXJzLFxuICAgICAgICAgICAgcnVsZWxpc3QsXG4gICAgICAgICAgICBuYW1lUmFuZ2UsXG4gICAgICAgICAgICBwYXJhbWV0ZXJzUmFuZ2UsXG4gICAgICAgICAgICByYW5nZVxuICAgICAgICB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgQ29tbWVudCBub2RlLlxuICAgICAqIEBwYXJhbSB2YWx1ZSBUaGUgZnVsbCB0ZXh0IGNvbnRlbnQgb2YgdGhlIGNvbW1lbnQsIGluY2x1ZGluZ1xuICAgICAqIG9wZW5pbmcgYW5kIGNsb3NpbmcgY29tbWVudCBzaWduYXR1cmUuXG4gICAgICovXG4gICAgY29tbWVudCh2YWx1ZSwgcmFuZ2UpIHtcbiAgICAgICAgcmV0dXJuIHsgdHlwZTogY29tbW9uXzEkMy5ub2RlVHlwZS5jb21tZW50LCB2YWx1ZSwgcmFuZ2UgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIFJ1bGVsaXN0IG5vZGUuXG4gICAgICogQHBhcmFtIHJ1bGVzIEFuIGFycmF5IG9mIHRoZSBSdWxlIG5vZGVzIGZvdW5kIHdpdGhpbiB0aGUgUnVsZXNldC5cbiAgICAgKi9cbiAgICBydWxlbGlzdChydWxlcywgcmFuZ2UpIHtcbiAgICAgICAgcmV0dXJuIHsgdHlwZTogY29tbW9uXzEkMy5ub2RlVHlwZS5ydWxlbGlzdCwgcnVsZXMsIHJhbmdlIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBSdWxlc2V0IG5vZGUuXG4gICAgICogQHBhcmFtIHNlbGVjdG9yIFRoZSBzZWxlY3RvciB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSBTZWxlY3RvclxuICAgICAqIChlLmcuLCBgI2ZvbyA+IC5iYXJgKS5cbiAgICAgKiBAcGFyYW0gcnVsZWxpc3QgVGhlIFJ1bGVsaXN0IG5vZGUgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgU2VsZWN0b3IuXG4gICAgICovXG4gICAgcnVsZXNldChzZWxlY3RvciwgcnVsZWxpc3QsIHNlbGVjdG9yUmFuZ2UsIHJhbmdlKSB7XG4gICAgICAgIHJldHVybiB7IHR5cGU6IGNvbW1vbl8xJDMubm9kZVR5cGUucnVsZXNldCwgc2VsZWN0b3IsIHJ1bGVsaXN0LCBzZWxlY3RvclJhbmdlLCByYW5nZSB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgRGVjbGFyYXRpb24gbm9kZS5cbiAgICAgKiBAcGFyYW0gbmFtZSBUaGUgcHJvcGVydHkgbmFtZSBvZiB0aGUgRGVjbGFyYXRpb24gKGUuZy4sIGBjb2xvcmApLlxuICAgICAqIEBwYXJhbSB2YWx1ZSBFaXRoZXIgYW4gRXhwcmVzc2lvbiBub2RlLCBvciBhIFJ1bGVsaXN0IG5vZGUsIHRoYXRcbiAgICAgKiBjb3JyZXNwb25kcyB0byB0aGUgdmFsdWUgb2YgdGhlIERlY2xhcmF0aW9uLlxuICAgICAqL1xuICAgIGRlY2xhcmF0aW9uKG5hbWUsIHZhbHVlLCBuYW1lUmFuZ2UsIHJhbmdlKSB7XG4gICAgICAgIHJldHVybiB7IHR5cGU6IGNvbW1vbl8xJDMubm9kZVR5cGUuZGVjbGFyYXRpb24sIG5hbWUsIHZhbHVlLCBuYW1lUmFuZ2UsIHJhbmdlIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gRXhwcmVzc2lvbiBub2RlLlxuICAgICAqIEBwYXJhbSB0ZXh0IFRoZSBmdWxsIHRleHQgY29udGVudCBvZiB0aGUgZXhwcmVzc2lvbiAoZS5nLixcbiAgICAgKiBgdXJsKGltZy5qcGcpYClcbiAgICAgKi9cbiAgICBleHByZXNzaW9uKHRleHQsIHJhbmdlKSB7XG4gICAgICAgIHJldHVybiB7IHR5cGU6IGNvbW1vbl8xJDMubm9kZVR5cGUuZXhwcmVzc2lvbiwgdGV4dCwgcmFuZ2UgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIERpc2NhcmRlZCBub2RlLiBEaXNjYXJkZWQgbm9kZXMgY29udGFpbiBjb250ZW50IHRoYXQgd2FzIG5vdFxuICAgICAqIHBhcnNlYWJsZSAodXN1YWxseSBkdWUgdG8gdHlwb3MsIG9yIG90aGVyd2lzZSB1bnJlY29nbml6ZWQgc3ludGF4KS5cbiAgICAgKiBAcGFyYW0gdGV4dCBUaGUgdGV4dCBjb250ZW50IHRoYXQgaXMgZGlzY2FyZGVkLlxuICAgICAqL1xuICAgIGRpc2NhcmRlZCh0ZXh0LCByYW5nZSkge1xuICAgICAgICByZXR1cm4geyB0eXBlOiBjb21tb25fMSQzLm5vZGVUeXBlLmRpc2NhcmRlZCwgdGV4dCwgcmFuZ2UgfTtcbiAgICB9XG59XG5ub2RlRmFjdG9yeS5Ob2RlRmFjdG9yeSA9IE5vZGVGYWN0b3J5O1xuXG52YXIgbm9kZVZpc2l0b3IgPSB7fTtcblxuLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IChjKSAyMDE2IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdFxuICogaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmRcbiAqIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXlcbiAqIGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0IENvZGUgZGlzdHJpYnV0ZWQgYnlcbiAqIEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbyBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVBcbiAqIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHRcbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KG5vZGVWaXNpdG9yLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbi8qKlxuICogQ2xhc3MgdGhhdCBpbXBsZW1lbnRzIGEgdmlzaXRvciBwYXR0ZXJuIGZvciBBU1RzIHByb2R1Y2VkIGJ5IHRoZSBQYXJzZXIuXG4gKiBFeHRlbmQgdGhlIE5vZGVWaXNpdG9yIGNsYXNzIHRvIGltcGxlbWVudCB1c2VmdWwgdHJlZSB0cmF2ZXJzYWwgb3BlcmF0aW9uc1xuICogc3VjaCBhcyBzdHJpbmdpZmljYXRpb24uXG4gKi9cbmNsYXNzIE5vZGVWaXNpdG9yIHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYSBOb2RlVmlzaXRvciBpbnN0YW5jZS5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5wYXRoXyA9IFtdO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBIGxpc3Qgb2Ygbm9kZXMgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgY3VycmVudCBwYXRoIHRocm91Z2ggYW4gQVNUIGJlaW5nXG4gICAgICogdmlzaXRlZCwgbGVhZGluZyB0byB3aGVyZSB0aGUgY3VycmVudGx5IHZpc2l0ZWQgbm9kZSB3aWxsIGJlIGZvdW5kLlxuICAgICAqL1xuICAgIGdldCBwYXRoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wYXRoXztcbiAgICB9XG4gICAgLyoqXG4gICAgICogVmlzaXQgYSBub2RlLiBUaGUgdmlzaXRlZCBub2RlIHdpbGwgYmUgYWRkZWQgdG8gdGhlIGBwYXRoYCBiZWZvcmUgaXQgaXNcbiAgICAgKiB2aXNpdGVkLCBhbmQgd2lsbCBiZSByZW1vdmVkIGFmdGVyIGl0IGlzIHZpc2l0ZWQuIE5vZGVzIGFyZSBcInZpc2l0ZWRcIiBieVxuICAgICAqIGNhbGxpbmcgYSBtZXRob2Qgb24gdGhlIE5vZGVWaXNpdG9yIGluc3RhbmNlIHRoYXQgbWF0Y2hlcyB0aGUgbm9kZSdzIHR5cGUsXG4gICAgICogaWYgb25lIGlzIGF2YWlsYWJsZSBvbiB0aGUgTm9kZVZpc2l0b3IgaW5zdGFuY2UuXG4gICAgICogQHBhcmFtIG5vZGUgVGhlIG5vZGUgdG8gYmUgdmlzaXRlZC5cbiAgICAgKiBAcmV0dXJuIFRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIG1ldGhvZCB2aXNpdGluZyB0aGUgbm9kZSwgaWYgYW55LlxuICAgICAqL1xuICAgIHZpc2l0KG5vZGUpIHtcbiAgICAgICAgbGV0IHJlc3VsdDtcbiAgICAgICAgY29uc3QgY2FsbGJhY2sgPSB0aGlzW25vZGUudHlwZV07XG4gICAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICAgICAgdGhpcy5wYXRoXy5wdXNoKG5vZGUpO1xuICAgICAgICAgICAgcmVzdWx0ID0gdGhpc1tub2RlLnR5cGVdKG5vZGUpO1xuICAgICAgICAgICAgdGhpcy5wYXRoXy5wb3AoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cbm5vZGVWaXNpdG9yLk5vZGVWaXNpdG9yID0gTm9kZVZpc2l0b3I7XG5cbnZhciBwYXJzZXIgPSB7fTtcblxudmFyIHRva2VuID0ge307XG5cbihmdW5jdGlvbiAoZXhwb3J0cykge1xuXHQvKipcblx0ICogQGxpY2Vuc2Vcblx0ICogQ29weXJpZ2h0IChjKSAyMDE2IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cblx0ICogVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0XG5cdCAqIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kXG5cdCAqIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXlcblx0ICogYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieVxuXHQgKiBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQXG5cdCAqIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHRcblx0ICovXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0LyoqXG5cdCAqIEFuIGVudW1lcmF0aW9uIG9mIFRva2VuIHR5cGVzLlxuXHQgKi9cblx0dmFyIFRva2VuVHlwZTtcblx0KGZ1bmN0aW9uIChUb2tlblR5cGUpIHtcblx0ICAgIFRva2VuVHlwZVtUb2tlblR5cGVbXCJub25lXCJdID0gMF0gPSBcIm5vbmVcIjtcblx0ICAgIFRva2VuVHlwZVtUb2tlblR5cGVbXCJ3aGl0ZXNwYWNlXCJdID0gKE1hdGgucG93KDIsIDApKV0gPSBcIndoaXRlc3BhY2VcIjtcblx0ICAgIFRva2VuVHlwZVtUb2tlblR5cGVbXCJzdHJpbmdcIl0gPSAoTWF0aC5wb3coMiwgMSkpXSA9IFwic3RyaW5nXCI7XG5cdCAgICBUb2tlblR5cGVbVG9rZW5UeXBlW1wiY29tbWVudFwiXSA9IChNYXRoLnBvdygyLCAyKSldID0gXCJjb21tZW50XCI7XG5cdCAgICBUb2tlblR5cGVbVG9rZW5UeXBlW1wid29yZFwiXSA9IChNYXRoLnBvdygyLCAzKSldID0gXCJ3b3JkXCI7XG5cdCAgICBUb2tlblR5cGVbVG9rZW5UeXBlW1wiYm91bmRhcnlcIl0gPSAoTWF0aC5wb3coMiwgNCkpXSA9IFwiYm91bmRhcnlcIjtcblx0ICAgIFRva2VuVHlwZVtUb2tlblR5cGVbXCJwcm9wZXJ0eUJvdW5kYXJ5XCJdID0gKE1hdGgucG93KDIsIDUpKV0gPSBcInByb3BlcnR5Qm91bmRhcnlcIjtcblx0ICAgIC8vIFNwZWNpYWwgY2FzZXMgZm9yIGJvdW5kYXJ5OlxuXHQgICAgVG9rZW5UeXBlW1Rva2VuVHlwZVtcIm9wZW5QYXJlbnRoZXNpc1wiXSA9IChNYXRoLnBvdygyLCA2KSkgfCBUb2tlblR5cGUuYm91bmRhcnldID0gXCJvcGVuUGFyZW50aGVzaXNcIjtcblx0ICAgIFRva2VuVHlwZVtUb2tlblR5cGVbXCJjbG9zZVBhcmVudGhlc2lzXCJdID0gKE1hdGgucG93KDIsIDcpKSB8IFRva2VuVHlwZS5ib3VuZGFyeV0gPSBcImNsb3NlUGFyZW50aGVzaXNcIjtcblx0ICAgIFRva2VuVHlwZVtUb2tlblR5cGVbXCJhdFwiXSA9IChNYXRoLnBvdygyLCA4KSkgfCBUb2tlblR5cGUuYm91bmRhcnldID0gXCJhdFwiO1xuXHQgICAgVG9rZW5UeXBlW1Rva2VuVHlwZVtcIm9wZW5CcmFjZVwiXSA9IChNYXRoLnBvdygyLCA5KSkgfCBUb2tlblR5cGUuYm91bmRhcnldID0gXCJvcGVuQnJhY2VcIjtcblx0ICAgIC8vIFt9O10gYXJlIHByb3BlcnR5IGJvdW5kYXJpZXM6XG5cdCAgICBUb2tlblR5cGVbVG9rZW5UeXBlW1wiY2xvc2VCcmFjZVwiXSA9IChNYXRoLnBvdygyLCAxMCkpIHwgVG9rZW5UeXBlLnByb3BlcnR5Qm91bmRhcnkgfCBUb2tlblR5cGUuYm91bmRhcnldID0gXCJjbG9zZUJyYWNlXCI7XG5cdCAgICBUb2tlblR5cGVbVG9rZW5UeXBlW1wic2VtaWNvbG9uXCJdID0gKE1hdGgucG93KDIsIDExKSkgfCBUb2tlblR5cGUucHJvcGVydHlCb3VuZGFyeSB8IFRva2VuVHlwZS5ib3VuZGFyeV0gPSBcInNlbWljb2xvblwiO1xuXHQgICAgLy8gOiBpcyBhIGNoaW1hZXJpYyBhYm9taW5hdGlvbjpcblx0ICAgIC8vIGZvbzpiYXJ7fVxuXHQgICAgLy8gZm9vOmJhcjtcblx0ICAgIFRva2VuVHlwZVtUb2tlblR5cGVbXCJjb2xvblwiXSA9IChNYXRoLnBvdygyLCAxMikpIHwgVG9rZW5UeXBlLmJvdW5kYXJ5IHwgVG9rZW5UeXBlLndvcmRdID0gXCJjb2xvblwiO1xuXHQgICAgLy8gVE9ETzogYXJlIHRoZXNlIHR3byBib3VuZGFyaWVzPyBJIG1lYW4sIHNvbWV0aW1lcyB0aGV5IGFyZSBJIGd1ZXNzPyBPclxuXHQgICAgLy8gICAgICAgbWF5YmUgdGhleSBzaG91bGRuJ3QgZXhpc3QgaW4gdGhlIGJvdW5kYXJ5VG9rZW5UeXBlcyBtYXAuXG5cdCAgICBUb2tlblR5cGVbVG9rZW5UeXBlW1wiaHlwaGVuXCJdID0gKE1hdGgucG93KDIsIDEzKSldID0gXCJoeXBoZW5cIjtcblx0ICAgIFRva2VuVHlwZVtUb2tlblR5cGVbXCJ1bmRlcnNjb3JlXCJdID0gKE1hdGgucG93KDIsIDE0KSldID0gXCJ1bmRlcnNjb3JlXCI7XG5cdH0pKFRva2VuVHlwZSA9IGV4cG9ydHMuVG9rZW5UeXBlIHx8IChleHBvcnRzLlRva2VuVHlwZSA9IHt9KSk7XG5cdC8qKlxuXHQgKiBDbGFzcyB0aGF0IGRlc2NyaWJlcyBpbmRpdmlkdWFsIHRva2VucyBhcyBwcm9kdWNlZCBieSB0aGUgVG9rZW5pemVyLlxuXHQgKi9cblx0Y2xhc3MgVG9rZW4ge1xuXHQgICAgLyoqXG5cdCAgICAgKiBDcmVhdGUgYSBUb2tlbiBpbnN0YW5jZS5cblx0ICAgICAqIEBwYXJhbSB0eXBlIFRoZSBsZXhpY2FsIHR5cGUgb2YgdGhlIFRva2VuLlxuXHQgICAgICogQHBhcmFtIHN0YXJ0IFRoZSBzdGFydCBpbmRleCBvZiB0aGUgdGV4dCBjb3JyZXNwb25kaW5nIHRvIHRoZVxuXHQgICAgICogVG9rZW4gaW4gdGhlIENTUyB0ZXh0LlxuXHQgICAgICogQHBhcmFtIGVuZCBUaGUgZW5kIGluZGV4IG9mIHRoZSB0ZXh0IGNvcnJlc3BvbmRpbmcgdG8gdGhlIFRva2VuXG5cdCAgICAgKiBpbiB0aGUgQ1NTIHRleHQuXG5cdCAgICAgKi9cblx0ICAgIGNvbnN0cnVjdG9yKHR5cGUsIHN0YXJ0LCBlbmQpIHtcblx0ICAgICAgICB0aGlzLnR5cGUgPSB0eXBlO1xuXHQgICAgICAgIHRoaXMuc3RhcnQgPSBzdGFydDtcblx0ICAgICAgICB0aGlzLmVuZCA9IGVuZDtcblx0ICAgICAgICB0aGlzLnByZXZpb3VzID0gbnVsbDtcblx0ICAgICAgICB0aGlzLm5leHQgPSBudWxsO1xuXHQgICAgfVxuXHQgICAgLyoqXG5cdCAgICAgKiBUZXN0IGlmIHRoZSBUb2tlbiBtYXRjaGVzIGEgZ2l2ZW4gbnVtZXJpYyB0eXBlLiBUeXBlcyBtYXRjaCBpZiB0aGUgYml0d2lzZVxuXHQgICAgICogQU5EIG9mIHRoZSBUb2tlbidzIHR5cGUgYW5kIHRoZSBhcmd1bWVudCB0eXBlIGFyZSBlcXVpdmFsZW50IHRvIHRoZVxuXHQgICAgICogYXJndW1lbnQgdHlwZS5cblx0ICAgICAqIEBwYXJhbSB0eXBlIFRoZSBudW1lcmljIHR5cGUgdG8gdGVzdCBmb3IgZXF1aXZhbGVuY3kgd2l0aCB0aGVcblx0ICAgICAqIFRva2VuLlxuXHQgICAgICovXG5cdCAgICBpcyh0eXBlKSB7XG5cdCAgICAgICAgcmV0dXJuICh0aGlzLnR5cGUgJiB0eXBlKSA9PT0gdHlwZTtcblx0ICAgIH1cblx0fVxuXHRUb2tlbi50eXBlID0gVG9rZW5UeXBlO1xuXHRleHBvcnRzLlRva2VuID0gVG9rZW47XG5cdC8qKlxuXHQgKiBBIG1hcHBpbmcgb2YgYm91bmRhcnkgdG9rZW4gdGV4dCB0byB0aGVpciBjb3JyZXNwb25kaW5nIHR5cGVzLlxuXHQgKi9cblx0Y29uc3QgYm91bmRhcnlUb2tlblR5cGVzID0ge1xuXHQgICAgJygnOiBUb2tlbi50eXBlLm9wZW5QYXJlbnRoZXNpcyxcblx0ICAgICcpJzogVG9rZW4udHlwZS5jbG9zZVBhcmVudGhlc2lzLFxuXHQgICAgJzonOiBUb2tlbi50eXBlLmNvbG9uLFxuXHQgICAgJ0AnOiBUb2tlbi50eXBlLmF0LFxuXHQgICAgJ3snOiBUb2tlbi50eXBlLm9wZW5CcmFjZSxcblx0ICAgICd9JzogVG9rZW4udHlwZS5jbG9zZUJyYWNlLFxuXHQgICAgJzsnOiBUb2tlbi50eXBlLnNlbWljb2xvbixcblx0ICAgICctJzogVG9rZW4udHlwZS5oeXBoZW4sXG5cdCAgICAnXyc6IFRva2VuLnR5cGUudW5kZXJzY29yZVxuXHR9O1xuXHRleHBvcnRzLmJvdW5kYXJ5VG9rZW5UeXBlcyA9IGJvdW5kYXJ5VG9rZW5UeXBlcztcblx0XG59ICh0b2tlbikpO1xuXG52YXIgdG9rZW5pemVyID0ge307XG5cbi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAoYykgMjAxNiBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXRcbiAqIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kXG4gKiBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5XG4gKiBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dCBDb2RlIGRpc3RyaWJ1dGVkIGJ5XG4gKiBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQXG4gKiByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0XG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0b2tlbml6ZXIsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY29tbW9uXzEkMiA9IGNvbW1vbjtcbmNvbnN0IHRva2VuXzEkMiA9IHRva2VuO1xuLyoqXG4gKiBDbGFzcyB0aGF0IGltcGxlbWVudHMgdG9rZW5pemF0aW9uIG9mIHNpZ25pZmljYW50IGxleGljYWwgZmVhdHVyZXMgb2YgdGhlXG4gKiBDU1Mgc3ludGF4LlxuICovXG5jbGFzcyBUb2tlbml6ZXIge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhIFRva2VuaXplciBpbnN0YW5jZS5cbiAgICAgKiBAcGFyYW0gY3NzVGV4dCBUaGUgcmF3IENTUyBzdHJpbmcgdG8gYmUgdG9rZW5pemVkLlxuICAgICAqXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoY3NzVGV4dCkge1xuICAgICAgICAvKipcbiAgICAgICAgICogVHJhY2tzIHRoZSBwb3NpdGlvbiBvZiB0aGUgdG9rZW5pemVyIGluIHRoZSBzb3VyY2Ugc3RyaW5nLlxuICAgICAgICAgKiBBbHNvIHRoZSBkZWZhdWx0IGhlYWQgb2YgdGhlIFRva2VuIGxpbmtlZCBsaXN0LlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5jdXJzb3JUb2tlbl8gPSBuZXcgdG9rZW5fMSQyLlRva2VuKHRva2VuXzEkMi5Ub2tlbi50eXBlLm5vbmUsIDAsIDApO1xuICAgICAgICAvKipcbiAgICAgICAgICogSG9sZHMgYSByZWZlcmVuY2UgdG8gYSBUb2tlbiB0aGF0IGlzIFwibmV4dFwiIGluIHRoZSBzb3VyY2Ugc3RyaW5nLCBvZnRlblxuICAgICAgICAgKiBkdWUgdG8gaGF2aW5nIGJlZW4gcGVla2VkIGF0LlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW5fID0gbnVsbDtcbiAgICAgICAgdGhpcy5jc3NUZXh0ID0gY3NzVGV4dDtcbiAgICB9XG4gICAgZ2V0IG9mZnNldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3Vyc29yVG9rZW5fLmVuZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgdG9rZW4gdGhhdCB3aWxsIGJlIHJldHVybmVkIGJ5IGEgY2FsbCB0byBgYWR2YW5jZWAuIFRoaXNcbiAgICAgKiByZWZlcmVuY2UgaXMgdXNlZnVsIGZvciBcInBlZWtpbmdcIiBhdCB0aGUgbmV4dCB0b2tlbiBhaGVhZCBpbiB0aGUgc2VxdWVuY2UuXG4gICAgICogSWYgdGhlIGVudGlyZSBDU1MgdGV4dCBoYXMgYmVlbiB0b2tlbml6ZWQsIHRoZSBgY3VycmVudFRva2VuYCB3aWxsIGJlIG51bGwuXG4gICAgICovXG4gICAgZ2V0IGN1cnJlbnRUb2tlbigpIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFRva2VuXyA9PSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbl8gPSB0aGlzLmdldE5leHRUb2tlbl8oKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50VG9rZW5fO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBZHZhbmNlIHRoZSBUb2tlbml6ZXIgdG8gdGhlIG5leHQgdG9rZW4gaW4gdGhlIHNlcXVlbmNlLlxuICAgICAqIEByZXR1cm4gVGhlIGN1cnJlbnQgdG9rZW4gcHJpb3IgdG8gdGhlIGNhbGwgdG8gYGFkdmFuY2VgLCBvciBudWxsXG4gICAgICogaWYgdGhlIGVudGlyZSBDU1MgdGV4dCBoYXMgYmVlbiB0b2tlbml6ZWQuXG4gICAgICovXG4gICAgYWR2YW5jZSgpIHtcbiAgICAgICAgbGV0IHRva2VuO1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50VG9rZW5fICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRva2VuID0gdGhpcy5jdXJyZW50VG9rZW5fO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50VG9rZW5fID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRva2VuID0gdGhpcy5nZXROZXh0VG9rZW5fKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBFeHRyYWN0IGEgc2xpY2UgZnJvbSB0aGUgQ1NTIHRleHQsIHVzaW5nIHR3byB0b2tlbnMgdG8gcmVwcmVzZW50IHRoZSByYW5nZVxuICAgICAqIG9mIHRleHQgdG8gYmUgZXh0cmFjdGVkLiBUaGUgZXh0cmFjdGVkIHRleHQgd2lsbCBpbmNsdWRlIGFsbCB0ZXh0IGJldHdlZW5cbiAgICAgKiB0aGUgc3RhcnQgaW5kZXggb2YgdGhlIGZpcnN0IHRva2VuIGFuZCB0aGUgb2Zmc2V0IGluZGV4IG9mIHRoZSBzZWNvbmQgdG9rZW5cbiAgICAgKiAob3IgdGhlIG9mZnNldCBpbmRleCBvZiB0aGUgZmlyc3QgdG9rZW4gaWYgdGhlIHNlY29uZCBpcyBub3QgcHJvdmlkZWQpLlxuICAgICAqIEBwYXJhbSBzdGFydFRva2VuIFRoZSB0b2tlbiB0aGF0IHJlcHJlc2VudHMgdGhlIGJlZ2lubmluZyBvZiB0aGVcbiAgICAgKiB0ZXh0IHJhbmdlIHRvIGJlIGV4dHJhY3RlZC5cbiAgICAgKiBAcGFyYW0gZW5kVG9rZW4gVGhlIHRva2VuIHRoYXQgcmVwcmVzZW50cyB0aGUgZW5kIG9mIHRoZSB0ZXh0IHJhbmdlXG4gICAgICogdG8gYmUgZXh0cmFjdGVkLiBEZWZhdWx0cyB0byB0aGUgc3RhcnRUb2tlbiBpZiBubyBlbmRUb2tlbiBpcyBwcm92aWRlZC5cbiAgICAgKiBAcmV0dXJuIFRoZSBzdWJzdHJpbmcgb2YgdGhlIENTUyB0ZXh0IGNvcnJlc3BvbmRpbmcgdG8gdGhlXG4gICAgICogc3RhcnRUb2tlbiBhbmQgZW5kVG9rZW4uXG4gICAgICovXG4gICAgc2xpY2Uoc3RhcnRUb2tlbiwgZW5kVG9rZW4gPSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgeyBzdGFydCwgZW5kIH0gPSB0aGlzLmdldFJhbmdlKHN0YXJ0VG9rZW4sIGVuZFRva2VuKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3NzVGV4dC5zdWJzdHJpbmcoc3RhcnQsIGVuZCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIExpa2UgYHNsaWNlYCwgYnV0IHJldHVybnMgdGhlIG9mZnNldHMgaW50byB0aGUgc291cmNlLCByYXRoZXIgdGhhbiB0aGVcbiAgICAgKiBzdWJzdHJpbmcgaXRzZWxmLlxuICAgICAqL1xuICAgIGdldFJhbmdlKHN0YXJ0VG9rZW4sIGVuZFRva2VuID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB7IHN0YXJ0OiBzdGFydFRva2VuLnN0YXJ0LCBlbmQ6IChlbmRUb2tlbiB8fCBzdGFydFRva2VuKS5lbmQgfTtcbiAgICB9XG4gICAgdHJpbVJhbmdlKHsgc3RhcnQsIGVuZCB9KSB7XG4gICAgICAgIHdoaWxlIChzdGFydCA8PSBlbmQgJiYgL1xccy8udGVzdCh0aGlzLmNzc1RleHQuY2hhckF0KHN0YXJ0KSkpIHtcbiAgICAgICAgICAgIHN0YXJ0Kys7XG4gICAgICAgIH1cbiAgICAgICAgd2hpbGUgKHN0YXJ0IDw9IGVuZCAmJiBlbmQgPiAwICYmIC9cXHMvLnRlc3QodGhpcy5jc3NUZXh0LmNoYXJBdChlbmQgLSAxKSkpIHtcbiAgICAgICAgICAgIGVuZC0tO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IHN0YXJ0LCBlbmQgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRmx1c2ggYWxsIHRva2VucyBmcm9tIHRoZSBUb2tlbml6ZXIuXG4gICAgICogQHJldHVybiBBbiBhcnJheSBvZiBhbGwgdG9rZW5zIGNvcnJlc3BvbmRpbmcgdG8gdGhlIENTUyB0ZXh0LlxuICAgICAqL1xuICAgIGZsdXNoKCkge1xuICAgICAgICBjb25zdCB0b2tlbnMgPSBbXTtcbiAgICAgICAgd2hpbGUgKHRoaXMuY3VycmVudFRva2VuKSB7XG4gICAgICAgICAgICB0b2tlbnMucHVzaCh0aGlzLmFkdmFuY2UoKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRva2VucztcbiAgICB9XG4gICAgLyoqXG4gICAgICogRXh0cmFjdCB0aGUgbmV4dCB0b2tlbiBmcm9tIHRoZSBDU1MgdGV4dCBhbmQgYWR2YW5jZSB0aGUgVG9rZW5pemVyLlxuICAgICAqIEByZXR1cm4gQSBUb2tlbiBpbnN0YW5jZSwgb3IgbnVsbCBpZiB0aGUgZW50aXJlIENTUyB0ZXh0IGhhcyBiZWVlblxuICAgICAqIHRva2VuaXplZC5cbiAgICAgKi9cbiAgICBnZXROZXh0VG9rZW5fKCkge1xuICAgICAgICBjb25zdCBjaGFyYWN0ZXIgPSB0aGlzLmNzc1RleHRbdGhpcy5vZmZzZXRdO1xuICAgICAgICBsZXQgdG9rZW47XG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuXyA9IG51bGw7XG4gICAgICAgIGlmICh0aGlzLm9mZnNldCA+PSB0aGlzLmNzc1RleHQubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjb21tb25fMSQyLm1hdGNoZXIud2hpdGVzcGFjZS50ZXN0KGNoYXJhY3RlcikpIHtcbiAgICAgICAgICAgIHRva2VuID0gdGhpcy50b2tlbml6ZVdoaXRlc3BhY2UodGhpcy5vZmZzZXQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGNvbW1vbl8xJDIubWF0Y2hlci5zdHJpbmdCb3VuZGFyeS50ZXN0KGNoYXJhY3RlcikpIHtcbiAgICAgICAgICAgIHRva2VuID0gdGhpcy50b2tlbml6ZVN0cmluZyh0aGlzLm9mZnNldCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY2hhcmFjdGVyID09PSAnLycgJiYgdGhpcy5jc3NUZXh0W3RoaXMub2Zmc2V0ICsgMV0gPT09ICcqJykge1xuICAgICAgICAgICAgdG9rZW4gPSB0aGlzLnRva2VuaXplQ29tbWVudCh0aGlzLm9mZnNldCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY29tbW9uXzEkMi5tYXRjaGVyLmJvdW5kYXJ5LnRlc3QoY2hhcmFjdGVyKSkge1xuICAgICAgICAgICAgdG9rZW4gPSB0aGlzLnRva2VuaXplQm91bmRhcnkodGhpcy5vZmZzZXQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdG9rZW4gPSB0aGlzLnRva2VuaXplV29yZCh0aGlzLm9mZnNldCk7XG4gICAgICAgIH1cbiAgICAgICAgdG9rZW4ucHJldmlvdXMgPSB0aGlzLmN1cnNvclRva2VuXztcbiAgICAgICAgdGhpcy5jdXJzb3JUb2tlbl8ubmV4dCA9IHRva2VuO1xuICAgICAgICB0aGlzLmN1cnNvclRva2VuXyA9IHRva2VuO1xuICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRva2VuaXplIGEgc3RyaW5nIHN0YXJ0aW5nIGF0IGEgZ2l2ZW4gb2Zmc2V0IGluIHRoZSBDU1MgdGV4dC4gQSBzdHJpbmcgaXNcbiAgICAgKiBhbnkgc3BhbiBvZiB0ZXh0IHRoYXQgaXMgd3JhcHBlZCBieSBlY2x1c2l2ZWx5IHBhaXJlZCwgbm9uLWVzY2FwZWQgbWF0Y2hpbmdcbiAgICAgKiBxdW90YXRpb24gbWFya3MuXG4gICAgICogQHBhcmFtIG9mZnNldCBBbiBvZmZzZXQgaW4gdGhlIENTUyB0ZXh0LlxuICAgICAqIEByZXR1cm4gQSBzdHJpbmcgVG9rZW4gaW5zdGFuY2UuXG4gICAgICovXG4gICAgdG9rZW5pemVTdHJpbmcob2Zmc2V0KSB7XG4gICAgICAgIGNvbnN0IHF1b3RhdGlvbiA9IHRoaXMuY3NzVGV4dFtvZmZzZXRdO1xuICAgICAgICBsZXQgZXNjYXBlZCA9IGZhbHNlO1xuICAgICAgICBjb25zdCBzdGFydCA9IG9mZnNldDtcbiAgICAgICAgbGV0IGNoYXJhY3RlcjtcbiAgICAgICAgd2hpbGUgKGNoYXJhY3RlciA9IHRoaXMuY3NzVGV4dFsrK29mZnNldF0pIHtcbiAgICAgICAgICAgIGlmIChlc2NhcGVkKSB7XG4gICAgICAgICAgICAgICAgZXNjYXBlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGNoYXJhY3RlciA9PT0gcXVvdGF0aW9uKSB7XG4gICAgICAgICAgICAgICAgKytvZmZzZXQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY2hhcmFjdGVyID09PSAnXFxcXCcpIHtcbiAgICAgICAgICAgICAgICBlc2NhcGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IHRva2VuXzEkMi5Ub2tlbih0b2tlbl8xJDIuVG9rZW4udHlwZS5zdHJpbmcsIHN0YXJ0LCBvZmZzZXQpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUb2tlbml6ZSBhIHdvcmQgc3RhcnRpbmcgYXQgYSBnaXZlbiBvZmZzZXQgaW4gdGhlIENTUyB0ZXh0LiBBIHdvcmQgaXMgYW55XG4gICAgICogc3BhbiBvZiB0ZXh0IHRoYXQgaXMgbm90IHdoaXRlc3BhY2UsIGlzIG5vdCBhIHN0cmluZywgaXMgbm90IGEgY29tbWVudCBhbmRcbiAgICAgKiBpcyBub3QgYSBzdHJ1Y3R1cmFsIGRlbGltaXRlciAoc3VjaCBhcyBicmFjZXMgYW5kIHNlbWljb2xvbikuXG4gICAgICogQHBhcmFtIG51bWJlciBBbiBvZmZzZXQgaW4gdGhlIENTUyB0ZXh0LlxuICAgICAqIEByZXR1cm4gQSB3b3JkIFRva2VuIGluc3RhbmNlLlxuICAgICAqL1xuICAgIHRva2VuaXplV29yZChvZmZzZXQpIHtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBvZmZzZXQ7XG4gICAgICAgIGxldCBjaGFyYWN0ZXI7XG4gICAgICAgIC8vIFRPRE8oY2RhdGEpOiBjaGFuZ2UgdG8gZ3JlZWR5IHJlZ2V4IG1hdGNoP1xuICAgICAgICB3aGlsZSAoKGNoYXJhY3RlciA9IHRoaXMuY3NzVGV4dFtvZmZzZXRdKSAmJlxuICAgICAgICAgICAgIWNvbW1vbl8xJDIubWF0Y2hlci5ib3VuZGFyeS50ZXN0KGNoYXJhY3RlcikpIHtcbiAgICAgICAgICAgIG9mZnNldCsrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgdG9rZW5fMSQyLlRva2VuKHRva2VuXzEkMi5Ub2tlbi50eXBlLndvcmQsIHN0YXJ0LCBvZmZzZXQpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUb2tlbml6ZSB3aGl0ZXNwYWNlIHN0YXJ0aW5nIGF0IGEgZ2l2ZW4gb2Zmc2V0IGluIHRoZSBDU1MgdGV4dC4gV2hpdGVzcGFjZVxuICAgICAqIGlzIGFueSBzcGFuIG9mIHRleHQgbWFkZSB1cCBvZiBjb25zZWN1dGl2ZSBzcGFjZXMsIHRhYnMsIG5ld2xpbmVzIGFuZCBvdGhlclxuICAgICAqIHNpbmdsZSB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMuXG4gICAgICogQHBhcmFtIG51bWJlciBBbiBvZmZzZXQgaW4gdGhlIENTUyB0ZXh0LlxuICAgICAqIEByZXR1cm4gQSB3aGl0ZXNwYWNlIFRva2VuIGluc3RhbmNlLlxuICAgICAqL1xuICAgIHRva2VuaXplV2hpdGVzcGFjZShvZmZzZXQpIHtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBvZmZzZXQ7XG4gICAgICAgIGNvbW1vbl8xJDIubWF0Y2hlci53aGl0ZXNwYWNlR3JlZWR5Lmxhc3RJbmRleCA9IG9mZnNldDtcbiAgICAgICAgY29uc3QgbWF0Y2ggPSBjb21tb25fMSQyLm1hdGNoZXIud2hpdGVzcGFjZUdyZWVkeS5leGVjKHRoaXMuY3NzVGV4dCk7XG4gICAgICAgIGlmIChtYXRjaCAhPSBudWxsICYmIG1hdGNoLmluZGV4ID09PSBvZmZzZXQpIHtcbiAgICAgICAgICAgIG9mZnNldCA9IGNvbW1vbl8xJDIubWF0Y2hlci53aGl0ZXNwYWNlR3JlZWR5Lmxhc3RJbmRleDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IHRva2VuXzEkMi5Ub2tlbih0b2tlbl8xJDIuVG9rZW4udHlwZS53aGl0ZXNwYWNlLCBzdGFydCwgb2Zmc2V0KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVG9rZW5pemUgYSBjb21tZW50IHN0YXJ0aW5nIGF0IGEgZ2l2ZW4gb2Zmc2V0IGluIHRoZSBDU1MgdGV4dC4gQSBjb21tZW50IGlzXG4gICAgICogYW55IHNwYW4gb2YgdGV4dCBiZWdpbm5pbmcgd2l0aCB0aGUgdHdvIGNoYXJhY3RlcnMgLyBhbmQgKiwgYW5kIGVuZGluZyB3aXRoXG4gICAgICogYSBtYXRjaGluZyBjb3VudGVycGFydCBwYWlyIG9mIGNvbnNlY3VydGl2ZSBjaGFyYWN0ZXJzICgqIGFuZCAvKS5cbiAgICAgKiBAcGFyYW0gbnVtYmVyIEFuIG9mZnNldCBpbiB0aGUgQ1NTIHRleHQuXG4gICAgICogQHJldHVybiBBIGNvbW1lbnQgVG9rZW4gaW5zdGFuY2UuXG4gICAgICovXG4gICAgdG9rZW5pemVDb21tZW50KG9mZnNldCkge1xuICAgICAgICBjb25zdCBzdGFydCA9IG9mZnNldDtcbiAgICAgICAgY29tbW9uXzEkMi5tYXRjaGVyLmNvbW1lbnRHcmVlZHkubGFzdEluZGV4ID0gb2Zmc2V0O1xuICAgICAgICBjb25zdCBtYXRjaCA9IGNvbW1vbl8xJDIubWF0Y2hlci5jb21tZW50R3JlZWR5LmV4ZWModGhpcy5jc3NUZXh0KTtcbiAgICAgICAgaWYgKG1hdGNoID09IG51bGwpIHtcbiAgICAgICAgICAgIG9mZnNldCA9IHRoaXMuY3NzVGV4dC5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBvZmZzZXQgPSBjb21tb25fMSQyLm1hdGNoZXIuY29tbWVudEdyZWVkeS5sYXN0SW5kZXg7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyB0b2tlbl8xJDIuVG9rZW4odG9rZW5fMSQyLlRva2VuLnR5cGUuY29tbWVudCwgc3RhcnQsIG9mZnNldCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRva2VuaXplIGEgYm91bmRhcnkgYXQgYSBnaXZlbiBvZmZzZXQgaW4gdGhlIENTUyB0ZXh0LiBBIGJvdW5kYXJ5IGlzIGFueVxuICAgICAqIHNpbmdsZSBzdHJ1Y3R1cmFsbHkgc2lnbmlmaWNhbnQgY2hhcmFjdGVyLiBUaGVzZSBjaGFyYWN0ZXJzIGluY2x1ZGUgYnJhY2VzLFxuICAgICAqIHNlbWljb2xvbnMsIHRoZSBcImF0XCIgc3ltYm9sIGFuZCBvdGhlcnMuXG4gICAgICogQHBhcmFtIG51bWJlciBBbiBvZmZzZXQgaW4gdGhlIENTUyB0ZXh0LlxuICAgICAqIEByZXR1cm4gQSBib3VuZGFyeSBUb2tlbiBpbnN0YW5jZS5cbiAgICAgKi9cbiAgICB0b2tlbml6ZUJvdW5kYXJ5KG9mZnNldCkge1xuICAgICAgICAvLyBUT0RPKGNkYXRhKTogRXZhbHVhdGUgaWYgdGhpcyBpcyBmYXN0ZXIgdGhhbiBhIHN3aXRjaCBzdGF0ZW1lbnQ6XG4gICAgICAgIGNvbnN0IHR5cGUgPSB0b2tlbl8xJDIuYm91bmRhcnlUb2tlblR5cGVzW3RoaXMuY3NzVGV4dFtvZmZzZXRdXSB8fCB0b2tlbl8xJDIuVG9rZW4udHlwZS5ib3VuZGFyeTtcbiAgICAgICAgcmV0dXJuIG5ldyB0b2tlbl8xJDIuVG9rZW4odHlwZSwgb2Zmc2V0LCBvZmZzZXQgKyAxKTtcbiAgICB9XG59XG50b2tlbml6ZXIuVG9rZW5pemVyID0gVG9rZW5pemVyO1xuXG4vKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTYgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0XG4gKiBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZFxuICogYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heVxuICogYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieVxuICogR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUFxuICogcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dFxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkocGFyc2VyLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IG5vZGVfZmFjdG9yeV8xJDEgPSBub2RlRmFjdG9yeTtcbmNvbnN0IHRva2VuXzEkMSA9IHRva2VuO1xuY29uc3QgdG9rZW5pemVyXzEkMSA9IHRva2VuaXplcjtcbi8qKlxuICogQ2xhc3MgdGhhdCBpbXBsZW1lbnRzIGEgc2hhZHkgQ1NTIHBhcnNlci5cbiAqL1xuY2xhc3MgUGFyc2VyJDEge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhIFBhcnNlciBpbnN0YW5jZS4gV2hlbiBjcmVhdGluZyBhIFBhcnNlciBpbnN0YW5jZSwgYSBzcGVjaWFsaXplZFxuICAgICAqIE5vZGVGYWN0b3J5IGNhbiBiZSBzdXBwbGllZCB0byBpbXBsZW1lbnQgc3RyZWFtaW5nIGFuYWx5c2lzIGFuZFxuICAgICAqIG1hbmlwdWxhdGlvbiBvZiB0aGUgQ1NTIEFTVC5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3Rvcihub2RlRmFjdG9yeSA9IG5ldyBub2RlX2ZhY3RvcnlfMSQxLk5vZGVGYWN0b3J5KCkpIHtcbiAgICAgICAgdGhpcy5ub2RlRmFjdG9yeSA9IG5vZGVGYWN0b3J5O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBQYXJzZSBDU1MgYW5kIGdlbmVyYXRlIGFuIEFTVC5cbiAgICAgKiBAcGFyYW0gY3NzVGV4dCBUaGUgQ1NTIHRvIHBhcnNlLlxuICAgICAqIEByZXR1cm4gQSBDU1MgQVNUIGNvbnRhaW5pbmcgbm9kZXMgdGhhdCBjb3JyZXNwb25kIHRvIHRob3NlXG4gICAgICogICAgIGdlbmVyYXRlZCBieSB0aGUgUGFyc2VyJ3MgTm9kZUZhY3RvcnkuXG4gICAgICovXG4gICAgcGFyc2UoY3NzVGV4dCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZVN0eWxlc2hlZXQobmV3IHRva2VuaXplcl8xJDEuVG9rZW5pemVyKGNzc1RleHQpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ29uc3VtZXMgdG9rZW5zIGZyb20gYSBUb2tlbml6ZXIgdG8gcGFyc2UgYSBTdHlsZXNoZWV0IG5vZGUuXG4gICAgICogQHBhcmFtIHRva2VuaXplciBBIFRva2VuaXplciBpbnN0YW5jZS5cbiAgICAgKi9cbiAgICBwYXJzZVN0eWxlc2hlZXQodG9rZW5pemVyKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5vZGVGYWN0b3J5LnN0eWxlc2hlZXQodGhpcy5wYXJzZVJ1bGVzKHRva2VuaXplciksIHsgc3RhcnQ6IDAsIGVuZDogdG9rZW5pemVyLmNzc1RleHQubGVuZ3RoIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDb25zdW1lcyB0b2tlbnMgZnJvbSBhIFRva2VuaXplciB0byBwYXJzZSBhIHNlcXVlbmNlIG9mIHJ1bGVzLlxuICAgICAqIEBwYXJhbSB0b2tlbml6ZXIgQSBUb2tlbml6ZXIgaW5zdGFuY2UuXG4gICAgICogQHJldHVybiBBIGxpc3Qgb2Ygbm9kZXMgY29ycmVzcG9uZGluZyB0byBydWxlcy4gRm9yIGEgcGFyc2VyXG4gICAgICogICBjb25maWd1cmVkIHdpdGggYSBiYXNpYyBOb2RlRmFjdG9yeSwgYW55IG9mIENvbW1lbnQsIEF0UnVsZSwgUnVsZXNldCxcbiAgICAgKiAgIERlY2xhcmF0aW9uIGFuZCBEaXNjYXJkZWQgbm9kZXMgbWF5IGJlIHByZXNlbnQgaW4gdGhlIGxpc3QuXG4gICAgICovXG4gICAgcGFyc2VSdWxlcyh0b2tlbml6ZXIpIHtcbiAgICAgICAgY29uc3QgcnVsZXMgPSBbXTtcbiAgICAgICAgd2hpbGUgKHRva2VuaXplci5jdXJyZW50VG9rZW4pIHtcbiAgICAgICAgICAgIGNvbnN0IHJ1bGUgPSB0aGlzLnBhcnNlUnVsZSh0b2tlbml6ZXIpO1xuICAgICAgICAgICAgaWYgKHJ1bGUpIHtcbiAgICAgICAgICAgICAgICBydWxlcy5wdXNoKHJ1bGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBydWxlcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ29uc3VtZXMgdG9rZW5zIGZyb20gYSBUb2tlbml6ZXIgdG8gcGFyc2UgYSBzaW5nbGUgcnVsZS5cbiAgICAgKiBAcGFyYW0gdG9rZW5pemVyIEEgVG9rZW5pemVyIGluc3RhbmNlLlxuICAgICAqIEByZXR1cm4gSWYgdGhlIGN1cnJlbnQgdG9rZW4gaW4gdGhlIFRva2VuaXplciBpcyB3aGl0ZXNwYWNlLFxuICAgICAqICAgcmV0dXJucyBudWxsLiBPdGhlcndpc2UsIHJldHVybnMgdGhlIG5leHQgcGFyc2VhYmxlIG5vZGUuXG4gICAgICovXG4gICAgcGFyc2VSdWxlKHRva2VuaXplcikge1xuICAgICAgICAvLyBUcmltIGxlYWRpbmcgd2hpdGVzcGFjZTpcbiAgICAgICAgY29uc3QgdG9rZW4gPSB0b2tlbml6ZXIuY3VycmVudFRva2VuO1xuICAgICAgICBpZiAodG9rZW4gPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0b2tlbi5pcyh0b2tlbl8xJDEuVG9rZW4udHlwZS53aGl0ZXNwYWNlKSkge1xuICAgICAgICAgICAgdG9rZW5pemVyLmFkdmFuY2UoKTtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRva2VuLmlzKHRva2VuXzEkMS5Ub2tlbi50eXBlLmNvbW1lbnQpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJzZUNvbW1lbnQodG9rZW5pemVyKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0b2tlbi5pcyh0b2tlbl8xJDEuVG9rZW4udHlwZS53b3JkKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VEZWNsYXJhdGlvbk9yUnVsZXNldCh0b2tlbml6ZXIpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRva2VuLmlzKHRva2VuXzEkMS5Ub2tlbi50eXBlLnByb3BlcnR5Qm91bmRhcnkpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJzZVVua25vd24odG9rZW5pemVyKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0b2tlbi5pcyh0b2tlbl8xJDEuVG9rZW4udHlwZS5hdCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcnNlQXRSdWxlKHRva2VuaXplcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJzZVVua25vd24odG9rZW5pemVyKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBDb25zdW1lcyB0b2tlbnMgZnJvbSBhIFRva2VuaXplciB0byBwYXJzZSBhIENvbW1lbnQgbm9kZS5cbiAgICAgKiBAcGFyYW0gdG9rZW5pemVyIEEgVG9rZW5pemVyIGluc3RhbmNlLlxuICAgICAqL1xuICAgIHBhcnNlQ29tbWVudCh0b2tlbml6ZXIpIHtcbiAgICAgICAgY29uc3QgdG9rZW4gPSB0b2tlbml6ZXIuYWR2YW5jZSgpO1xuICAgICAgICBpZiAodG9rZW4gPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLm5vZGVGYWN0b3J5LmNvbW1lbnQodG9rZW5pemVyLnNsaWNlKHRva2VuKSwgeyBzdGFydDogdG9rZW4uc3RhcnQsIGVuZDogdG9rZW4uZW5kIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDb25zdW1lcyB0b2tlbnMgZnJvbSBhIFRva2VuaXplciB0aHJvdWdoIHRoZSBuZXh0IGJvdW5kYXJ5IHRva2VuIHRvXG4gICAgICogcHJvZHVjZSBhIERpc2NhcmRlZCBub2RlLiBUaGlzIHN1cHBvcnRzIGdyYWNlZnVsIHJlY292ZXJ5IGZyb20gbWFueVxuICAgICAqIG1hbGZvcm1lZCBDU1MgY29uZGl0aW9ucy5cbiAgICAgKiBAcGFyYW0gdG9rZW5pemVyIEEgVG9rZW5pemVyIGluc3RhbmNlLlxuICAgICAqL1xuICAgIHBhcnNlVW5rbm93bih0b2tlbml6ZXIpIHtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSB0b2tlbml6ZXIuYWR2YW5jZSgpO1xuICAgICAgICBsZXQgZW5kO1xuICAgICAgICBpZiAoc3RhcnQgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHdoaWxlICh0b2tlbml6ZXIuY3VycmVudFRva2VuICYmXG4gICAgICAgICAgICB0b2tlbml6ZXIuY3VycmVudFRva2VuLmlzKHRva2VuXzEkMS5Ub2tlbi50eXBlLmJvdW5kYXJ5KSkge1xuICAgICAgICAgICAgZW5kID0gdG9rZW5pemVyLmFkdmFuY2UoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5ub2RlRmFjdG9yeS5kaXNjYXJkZWQodG9rZW5pemVyLnNsaWNlKHN0YXJ0LCBlbmQpLCB0b2tlbml6ZXIuZ2V0UmFuZ2Uoc3RhcnQsIGVuZCkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDb25zdW1lcyB0b2tlbnMgZnJvbSBhIFRva2VuaXplciB0byBwYXJzZSBhbiBBdCBSdWxlIG5vZGUuXG4gICAgICogQHBhcmFtIHRva2VuaXplciBBIFRva2VuaXplciBpbnN0YW5jZS5cbiAgICAgKi9cbiAgICBwYXJzZUF0UnVsZSh0b2tlbml6ZXIpIHtcbiAgICAgICAgbGV0IG5hbWUgPSB1bmRlZmluZWQ7XG4gICAgICAgIGxldCBuYW1lUmFuZ2UgPSB1bmRlZmluZWQ7XG4gICAgICAgIGxldCBydWxlbGlzdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgbGV0IHBhcmFtZXRlcnNTdGFydCA9IHVuZGVmaW5lZDtcbiAgICAgICAgbGV0IHBhcmFtZXRlcnNFbmQgPSB1bmRlZmluZWQ7XG4gICAgICAgIGlmICghdG9rZW5pemVyLmN1cnJlbnRUb2tlbikge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3RhcnQgPSB0b2tlbml6ZXIuY3VycmVudFRva2VuLnN0YXJ0O1xuICAgICAgICB3aGlsZSAodG9rZW5pemVyLmN1cnJlbnRUb2tlbikge1xuICAgICAgICAgICAgaWYgKHRva2VuaXplci5jdXJyZW50VG9rZW4uaXModG9rZW5fMSQxLlRva2VuLnR5cGUud2hpdGVzcGFjZSkpIHtcbiAgICAgICAgICAgICAgICB0b2tlbml6ZXIuYWR2YW5jZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoIW5hbWUgJiYgdG9rZW5pemVyLmN1cnJlbnRUb2tlbi5pcyh0b2tlbl8xJDEuVG9rZW4udHlwZS5hdCkpIHtcbiAgICAgICAgICAgICAgICAvLyBEaXNjYXJkIHRoZSBAOlxuICAgICAgICAgICAgICAgIHRva2VuaXplci5hZHZhbmNlKCk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0b2tlbml6ZXIuY3VycmVudFRva2VuO1xuICAgICAgICAgICAgICAgIGxldCBlbmQ7XG4gICAgICAgICAgICAgICAgd2hpbGUgKHRva2VuaXplci5jdXJyZW50VG9rZW4gJiZcbiAgICAgICAgICAgICAgICAgICAgdG9rZW5pemVyLmN1cnJlbnRUb2tlbi5pcyh0b2tlbl8xJDEuVG9rZW4udHlwZS53b3JkKSkge1xuICAgICAgICAgICAgICAgICAgICBlbmQgPSB0b2tlbml6ZXIuYWR2YW5jZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBuYW1lUmFuZ2UgPSB0b2tlbml6ZXIuZ2V0UmFuZ2Uoc3RhcnQsIGVuZCk7XG4gICAgICAgICAgICAgICAgbmFtZSA9IHRva2VuaXplci5jc3NUZXh0LnNsaWNlKG5hbWVSYW5nZS5zdGFydCwgbmFtZVJhbmdlLmVuZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0b2tlbml6ZXIuY3VycmVudFRva2VuLmlzKHRva2VuXzEkMS5Ub2tlbi50eXBlLm9wZW5CcmFjZSkpIHtcbiAgICAgICAgICAgICAgICBydWxlbGlzdCA9IHRoaXMucGFyc2VSdWxlbGlzdCh0b2tlbml6ZXIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodG9rZW5pemVyLmN1cnJlbnRUb2tlbi5pcyh0b2tlbl8xJDEuVG9rZW4udHlwZS5wcm9wZXJ0eUJvdW5kYXJ5KSkge1xuICAgICAgICAgICAgICAgIHRva2VuaXplci5hZHZhbmNlKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAocGFyYW1ldGVyc1N0YXJ0ID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyc1N0YXJ0ID0gdG9rZW5pemVyLmFkdmFuY2UoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcnNFbmQgPSB0b2tlbml6ZXIuYWR2YW5jZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobmFtZSA9PT0gdW5kZWZpbmVkIHx8IG5hbWVSYW5nZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcGFyYW1ldGVyc1JhbmdlID0gdW5kZWZpbmVkO1xuICAgICAgICBsZXQgcGFyYW1ldGVycyA9ICcnO1xuICAgICAgICBpZiAocGFyYW1ldGVyc1N0YXJ0KSB7XG4gICAgICAgICAgICBwYXJhbWV0ZXJzUmFuZ2UgPSB0b2tlbml6ZXIudHJpbVJhbmdlKHRva2VuaXplci5nZXRSYW5nZShwYXJhbWV0ZXJzU3RhcnQsIHBhcmFtZXRlcnNFbmQpKTtcbiAgICAgICAgICAgIHBhcmFtZXRlcnMgPVxuICAgICAgICAgICAgICAgIHRva2VuaXplci5jc3NUZXh0LnNsaWNlKHBhcmFtZXRlcnNSYW5nZS5zdGFydCwgcGFyYW1ldGVyc1JhbmdlLmVuZCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZW5kID0gdG9rZW5pemVyLmN1cnJlbnRUb2tlbiA/IHRva2VuaXplci5jdXJyZW50VG9rZW4ucHJldmlvdXMuZW5kIDpcbiAgICAgICAgICAgIHRva2VuaXplci5jc3NUZXh0Lmxlbmd0aDtcbiAgICAgICAgcmV0dXJuIHRoaXMubm9kZUZhY3RvcnkuYXRSdWxlKG5hbWUsIHBhcmFtZXRlcnMsIHJ1bGVsaXN0LCBuYW1lUmFuZ2UsIHBhcmFtZXRlcnNSYW5nZSwgeyBzdGFydCwgZW5kIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDb25zdW1lcyB0b2tlbnMgZnJvbSBhIFRva2VuaXplciB0byBwcm9kdWNlIGEgUnVsZWxpc3Qgbm9kZS5cbiAgICAgKiBAcGFyYW0gdG9rZW5pemVyIEEgVG9rZW5pemVyIGluc3RhbmNlLlxuICAgICAqL1xuICAgIHBhcnNlUnVsZWxpc3QodG9rZW5pemVyKSB7XG4gICAgICAgIGNvbnN0IHJ1bGVzID0gW107XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gdG9rZW5pemVyLmN1cnJlbnRUb2tlbi5zdGFydDtcbiAgICAgICAgbGV0IGVuZFRva2VuO1xuICAgICAgICAvLyBUYWtlIHRoZSBvcGVuaW5nIHsgYm91bmRhcnk6XG4gICAgICAgIHRva2VuaXplci5hZHZhbmNlKCk7XG4gICAgICAgIHdoaWxlICh0b2tlbml6ZXIuY3VycmVudFRva2VuKSB7XG4gICAgICAgICAgICBpZiAodG9rZW5pemVyLmN1cnJlbnRUb2tlbi5pcyh0b2tlbl8xJDEuVG9rZW4udHlwZS5jbG9zZUJyYWNlKSkge1xuICAgICAgICAgICAgICAgIGVuZFRva2VuID0gdG9rZW5pemVyLmN1cnJlbnRUb2tlbjtcbiAgICAgICAgICAgICAgICB0b2tlbml6ZXIuYWR2YW5jZSgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcnVsZSA9IHRoaXMucGFyc2VSdWxlKHRva2VuaXplcik7XG4gICAgICAgICAgICAgICAgaWYgKHJ1bGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcnVsZXMucHVzaChydWxlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgd2UgZG9uJ3QgaGF2ZSBhbiBlbmQgdG9rZW4gaXQncyBiZWNhdXNlIHdlIHJlYWNoZWQgdGhlIGVuZCBvZiBpbnB1dC5cbiAgICAgICAgY29uc3QgZW5kID0gZW5kVG9rZW4gPyBlbmRUb2tlbi5lbmQgOiB0b2tlbml6ZXIuY3NzVGV4dC5sZW5ndGg7XG4gICAgICAgIHJldHVybiB0aGlzLm5vZGVGYWN0b3J5LnJ1bGVsaXN0KHJ1bGVzLCB7IHN0YXJ0LCBlbmQgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENvbnN1bWVzIHRva2VucyBmcm9tIGEgVG9rZW5pemVyIGluc3RhbmNlIHRvIHByb2R1Y2UgYSBEZWNsYXJhdGlvbiBub2RlIG9yXG4gICAgICogYSBSdWxlc2V0IG5vZGUsIGFzIGFwcHJvcHJpYXRlLlxuICAgICAqIEBwYXJhbSB0b2tlbml6ZXIgQSBUb2tlbml6ZXIgbm9kZS5cbiAgICAgKi9cbiAgICBwYXJzZURlY2xhcmF0aW9uT3JSdWxlc2V0KHRva2VuaXplcikge1xuICAgICAgICBsZXQgcnVsZVN0YXJ0ID0gbnVsbDtcbiAgICAgICAgbGV0IHJ1bGVFbmQgPSBudWxsO1xuICAgICAgICBsZXQgY29sb24gPSBudWxsO1xuICAgICAgICAvLyBUaGlzIGNvZGUgaXMgbm90IG9idmlvdXNseSBjb3JyZWN0LiBlLmcuIHRoZXJlJ3Mgd2hhdCBsb29rcyB0byBiZSBhXG4gICAgICAgIC8vIG51bGwtZGVyZWZlcmVuY2UgaWYgdGhlIGRlY2xhcmF0aW9uIHN0YXJ0cyB3aXRoIGFuIG9wZW4gYnJhY2Ugb3JcbiAgICAgICAgLy8gcHJvcGVydHkgYm91bmRhcnkuLiB0aG91Z2ggdGhhdCBtYXkgYmUgaW1wb3NzaWJsZS5cbiAgICAgICAgd2hpbGUgKHRva2VuaXplci5jdXJyZW50VG9rZW4pIHtcbiAgICAgICAgICAgIGlmICh0b2tlbml6ZXIuY3VycmVudFRva2VuLmlzKHRva2VuXzEkMS5Ub2tlbi50eXBlLndoaXRlc3BhY2UpKSB7XG4gICAgICAgICAgICAgICAgdG9rZW5pemVyLmFkdmFuY2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHRva2VuaXplci5jdXJyZW50VG9rZW4uaXModG9rZW5fMSQxLlRva2VuLnR5cGUub3BlblBhcmVudGhlc2lzKSkge1xuICAgICAgICAgICAgICAgIC8vIHNraXAgdW50aWwgY2xvc2UgcGFyZW5cbiAgICAgICAgICAgICAgICB3aGlsZSAodG9rZW5pemVyLmN1cnJlbnRUb2tlbiAmJlxuICAgICAgICAgICAgICAgICAgICAhdG9rZW5pemVyLmN1cnJlbnRUb2tlbi5pcyh0b2tlbl8xJDEuVG9rZW4udHlwZS5jbG9zZVBhcmVudGhlc2lzKSkge1xuICAgICAgICAgICAgICAgICAgICB0b2tlbml6ZXIuYWR2YW5jZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHRva2VuaXplci5jdXJyZW50VG9rZW4uaXModG9rZW5fMSQxLlRva2VuLnR5cGUub3BlbkJyYWNlKSB8fFxuICAgICAgICAgICAgICAgIHRva2VuaXplci5jdXJyZW50VG9rZW4uaXModG9rZW5fMSQxLlRva2VuLnR5cGUucHJvcGVydHlCb3VuZGFyeSkpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICh0b2tlbml6ZXIuY3VycmVudFRva2VuLmlzKHRva2VuXzEkMS5Ub2tlbi50eXBlLmNvbG9uKSkge1xuICAgICAgICAgICAgICAgICAgICBjb2xvbiA9IHRva2VuaXplci5jdXJyZW50VG9rZW47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChydWxlU3RhcnQgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgcnVsZVN0YXJ0ID0gdG9rZW5pemVyLmFkdmFuY2UoKTtcbiAgICAgICAgICAgICAgICAgICAgcnVsZUVuZCA9IHJ1bGVTdGFydDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJ1bGVFbmQgPSB0b2tlbml6ZXIuYWR2YW5jZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodG9rZW5pemVyLmN1cnJlbnRUb2tlbiA9PT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gdGVybWluYXRlZCBlYXJseVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQSBydWxlc2V0IG5ldmVyIGNvbnRhaW5zIG9yIGVuZHMgd2l0aCBhIHNlbWktY29sb24uXG4gICAgICAgIGlmICh0b2tlbml6ZXIuY3VycmVudFRva2VuLmlzKHRva2VuXzEkMS5Ub2tlbi50eXBlLnByb3BlcnR5Qm91bmRhcnkpKSB7XG4gICAgICAgICAgICBjb25zdCBuYW1lUmFuZ2UgPSB0b2tlbml6ZXIuZ2V0UmFuZ2UocnVsZVN0YXJ0LCBjb2xvbiA/IGNvbG9uLnByZXZpb3VzIDogcnVsZUVuZCk7XG4gICAgICAgICAgICBjb25zdCBkZWNsYXJhdGlvbk5hbWUgPSB0b2tlbml6ZXIuY3NzVGV4dC5zbGljZShuYW1lUmFuZ2Uuc3RhcnQsIG5hbWVSYW5nZS5lbmQpO1xuICAgICAgICAgICAgbGV0IGV4cHJlc3Npb24gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBpZiAoY29sb24gJiYgY29sb24ubmV4dCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJhd0V4cHJlc3Npb25SYW5nZSA9IHRva2VuaXplci5nZXRSYW5nZShjb2xvbi5uZXh0LCBydWxlRW5kKTtcbiAgICAgICAgICAgICAgICBjb25zdCBleHByZXNzaW9uUmFuZ2UgPSB0b2tlbml6ZXIudHJpbVJhbmdlKHJhd0V4cHJlc3Npb25SYW5nZSk7XG4gICAgICAgICAgICAgICAgY29uc3QgZXhwcmVzc2lvblZhbHVlID0gdG9rZW5pemVyLmNzc1RleHQuc2xpY2UoZXhwcmVzc2lvblJhbmdlLnN0YXJ0LCBleHByZXNzaW9uUmFuZ2UuZW5kKTtcbiAgICAgICAgICAgICAgICBleHByZXNzaW9uID1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ub2RlRmFjdG9yeS5leHByZXNzaW9uKGV4cHJlc3Npb25WYWx1ZSwgZXhwcmVzc2lvblJhbmdlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0b2tlbml6ZXIuY3VycmVudFRva2VuLmlzKHRva2VuXzEkMS5Ub2tlbi50eXBlLnNlbWljb2xvbikpIHtcbiAgICAgICAgICAgICAgICB0b2tlbml6ZXIuYWR2YW5jZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcmFuZ2UgPSB0b2tlbml6ZXIudHJpbVJhbmdlKHRva2VuaXplci5nZXRSYW5nZShydWxlU3RhcnQsIHRva2VuaXplci5jdXJyZW50VG9rZW4gJiYgdG9rZW5pemVyLmN1cnJlbnRUb2tlbi5wcmV2aW91cyB8fFxuICAgICAgICAgICAgICAgIHJ1bGVFbmQpKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm5vZGVGYWN0b3J5LmRlY2xhcmF0aW9uKGRlY2xhcmF0aW9uTmFtZSwgZXhwcmVzc2lvbiwgbmFtZVJhbmdlLCByYW5nZSk7XG4gICAgICAgICAgICAvLyBUaGlzIGlzIHRoZSBjYXNlIGZvciBhIG1peGluLWxpa2Ugc3RydWN0dXJlOlxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGNvbG9uICYmIGNvbG9uID09PSBydWxlRW5kKSB7XG4gICAgICAgICAgICBjb25zdCBydWxlbGlzdCA9IHRoaXMucGFyc2VSdWxlbGlzdCh0b2tlbml6ZXIpO1xuICAgICAgICAgICAgaWYgKHRva2VuaXplci5jdXJyZW50VG9rZW4uaXModG9rZW5fMSQxLlRva2VuLnR5cGUuc2VtaWNvbG9uKSkge1xuICAgICAgICAgICAgICAgIHRva2VuaXplci5hZHZhbmNlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBuYW1lUmFuZ2UgPSB0b2tlbml6ZXIuZ2V0UmFuZ2UocnVsZVN0YXJ0LCBydWxlRW5kLnByZXZpb3VzKTtcbiAgICAgICAgICAgIGNvbnN0IGRlY2xhcmF0aW9uTmFtZSA9IHRva2VuaXplci5jc3NUZXh0LnNsaWNlKG5hbWVSYW5nZS5zdGFydCwgbmFtZVJhbmdlLmVuZCk7XG4gICAgICAgICAgICBjb25zdCByYW5nZSA9IHRva2VuaXplci50cmltUmFuZ2UodG9rZW5pemVyLmdldFJhbmdlKHJ1bGVTdGFydCwgdG9rZW5pemVyLmN1cnJlbnRUb2tlbiAmJiB0b2tlbml6ZXIuY3VycmVudFRva2VuLnByZXZpb3VzIHx8XG4gICAgICAgICAgICAgICAgcnVsZUVuZCkpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubm9kZUZhY3RvcnkuZGVjbGFyYXRpb24oZGVjbGFyYXRpb25OYW1lLCBydWxlbGlzdCwgbmFtZVJhbmdlLCByYW5nZSk7XG4gICAgICAgICAgICAvLyBPdGhlcndpc2UsIHRoaXMgaXMgYSBydWxlc2V0OlxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3Qgc2VsZWN0b3JSYW5nZSA9IHRva2VuaXplci5nZXRSYW5nZShydWxlU3RhcnQsIHJ1bGVFbmQpO1xuICAgICAgICAgICAgY29uc3Qgc2VsZWN0b3IgPSB0b2tlbml6ZXIuY3NzVGV4dC5zbGljZShzZWxlY3RvclJhbmdlLnN0YXJ0LCBzZWxlY3RvclJhbmdlLmVuZCk7XG4gICAgICAgICAgICBjb25zdCBydWxlbGlzdCA9IHRoaXMucGFyc2VSdWxlbGlzdCh0b2tlbml6ZXIpO1xuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSBydWxlU3RhcnQuc3RhcnQ7XG4gICAgICAgICAgICBsZXQgZW5kO1xuICAgICAgICAgICAgaWYgKHRva2VuaXplci5jdXJyZW50VG9rZW4pIHtcbiAgICAgICAgICAgICAgICBlbmQgPSB0b2tlbml6ZXIuY3VycmVudFRva2VuLnByZXZpb3VzID9cbiAgICAgICAgICAgICAgICAgICAgdG9rZW5pemVyLmN1cnJlbnRUb2tlbi5wcmV2aW91cy5lbmQgOlxuICAgICAgICAgICAgICAgICAgICBydWxlU3RhcnQuZW5kO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gbm8gY3VycmVudCB0b2tlbj8gbXVzdCBoYXZlIHJlYWNoZWQgdGhlIGVuZCBvZiBpbnB1dCwgc28gZ28gdXBcbiAgICAgICAgICAgICAgICAvLyB1bnRpbCB0aGVyZVxuICAgICAgICAgICAgICAgIGVuZCA9IHRva2VuaXplci5jc3NUZXh0Lmxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLm5vZGVGYWN0b3J5LnJ1bGVzZXQoc2VsZWN0b3IsIHJ1bGVsaXN0LCBzZWxlY3RvclJhbmdlLCB7IHN0YXJ0LCBlbmQgfSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5wYXJzZXIuUGFyc2VyID0gUGFyc2VyJDE7XG5cbnZhciBzdHJpbmdpZmllciA9IHt9O1xuXG4vKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTYgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0XG4gKiBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZFxuICogYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heVxuICogYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieVxuICogR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUFxuICogcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dFxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoc3RyaW5naWZpZXIsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY29tbW9uXzEkMSA9IGNvbW1vbjtcbmNvbnN0IG5vZGVfdmlzaXRvcl8xJDEgPSBub2RlVmlzaXRvcjtcbi8qKlxuICogQ2xhc3MgdGhhdCBpbXBsZW1lbnRzIGJhc2ljIHN0cmluZ2lmaWNhdGlvbiBvZiBhbiBBU1QgcHJvZHVjZWQgYnkgdGhlIFBhcnNlci5cbiAqL1xuY2xhc3MgU3RyaW5naWZpZXIkMSBleHRlbmRzIG5vZGVfdmlzaXRvcl8xJDEuTm9kZVZpc2l0b3Ige1xuICAgIC8qKlxuICAgICAqIFN0cmluZ2lmeSBhbiBBU1Qgc3VjaCBhcyBvbmUgcHJvZHVjZWQgYnkgYSBQYXJzZXIuXG4gICAgICogQHBhcmFtIGFzdCBBIG5vZGUgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgcm9vdCBvZiBhbiBBU1QuXG4gICAgICogQHJldHVybiBUaGUgc3RyaW5naWZpZWQgQ1NTIGNvcnJlc3BvbmRpbmcgdG8gdGhlIEFTVC5cbiAgICAgKi9cbiAgICBzdHJpbmdpZnkoYXN0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZpc2l0KGFzdCkgfHwgJyc7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFZpc2l0IGFuZCBzdHJpbmdpZnkgYSBTdHlsZXNoZWV0IG5vZGUuXG4gICAgICogQHBhcmFtIHN0eWxlc2hlZXQgQSBTdHlsZXNoZWV0IG5vZGUuXG4gICAgICogQHJldHVybiBUaGUgc3RyaW5naWZpZWQgQ1NTIG9mIHRoZSBTdHlsZXNoZWV0LlxuICAgICAqL1xuICAgIFtjb21tb25fMSQxLm5vZGVUeXBlLnN0eWxlc2hlZXRdKHN0eWxlc2hlZXQpIHtcbiAgICAgICAgbGV0IHJ1bGVzID0gJyc7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3R5bGVzaGVldC5ydWxlcy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgcnVsZXMgKz0gdGhpcy52aXNpdChzdHlsZXNoZWV0LnJ1bGVzW2ldKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcnVsZXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFZpc2l0IGFuZCBzdHJpbmdpZnkgYW4gQXQgUnVsZSBub2RlLlxuICAgICAqIEBwYXJhbSBhdFJ1bGUgQW4gQXQgUnVsZSBub2RlLlxuICAgICAqIEByZXR1cm4gVGhlIHN0cmluZ2lmaWVkIENTUyBvZiB0aGUgQXQgUnVsZS5cbiAgICAgKi9cbiAgICBbY29tbW9uXzEkMS5ub2RlVHlwZS5hdFJ1bGVdKGF0UnVsZSkge1xuICAgICAgICByZXR1cm4gYEAke2F0UnVsZS5uYW1lfWAgK1xuICAgICAgICAgICAgKGF0UnVsZS5wYXJhbWV0ZXJzID8gYCAke2F0UnVsZS5wYXJhbWV0ZXJzfWAgOiAnJykgK1xuICAgICAgICAgICAgKGF0UnVsZS5ydWxlbGlzdCA/IGAke3RoaXMudmlzaXQoYXRSdWxlLnJ1bGVsaXN0KX1gIDogJzsnKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVmlzaXQgYW5kIHN0cmluZ2lmeSBhIFJ1bGVsaXN0IG5vZGUuXG4gICAgICogQHBhcmFtIHJ1bGVsaXN0IEEgUnVsZWxpc3Qgbm9kZS5cbiAgICAgKiBAcmV0dXJuIFRoZSBzdHJpbmdpZmllZCBDU1Mgb2YgdGhlIFJ1bGVsaXN0LlxuICAgICAqL1xuICAgIFtjb21tb25fMSQxLm5vZGVUeXBlLnJ1bGVsaXN0XShydWxlbGlzdCkge1xuICAgICAgICBsZXQgcnVsZXMgPSAneyc7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcnVsZWxpc3QucnVsZXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIHJ1bGVzICs9IHRoaXMudmlzaXQocnVsZWxpc3QucnVsZXNbaV0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBydWxlcyArICd9JztcbiAgICB9XG4gICAgLyoqXG4gICAgICogVmlzaXQgYW5kIHN0cmluZ2lmeSBhIENvbW1lbnQgbm9kZS5cbiAgICAgKiBAcGFyYW0gY29tbWVudCBBIENvbW1lbnQgbm9kZS5cbiAgICAgKiBAcmV0dXJuIFRoZSBzdHJpbmdpZmllZCBDU1Mgb2YgdGhlIENvbW1lbnQuXG4gICAgICovXG4gICAgW2NvbW1vbl8xJDEubm9kZVR5cGUuY29tbWVudF0oY29tbWVudCkge1xuICAgICAgICByZXR1cm4gYCR7Y29tbWVudC52YWx1ZX1gO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBWaXNpdCBhbmQgc3RyaW5naWZ5IGEgU2VsZXRvciBub2RlLlxuICAgICAqIEBwYXJhbSBydWxlc2V0IEEgUnVsZXNldCBub2RlLlxuICAgICAqIEByZXR1cm4gVGhlIHN0cmluZ2lmaWVkIENTUyBvZiB0aGUgUnVsZXNldC5cbiAgICAgKi9cbiAgICBbY29tbW9uXzEkMS5ub2RlVHlwZS5ydWxlc2V0XShydWxlc2V0KSB7XG4gICAgICAgIHJldHVybiBgJHtydWxlc2V0LnNlbGVjdG9yfSR7dGhpcy52aXNpdChydWxlc2V0LnJ1bGVsaXN0KX1gO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBWaXNpdCBhbmQgc3RyaW5naWZ5IGEgRGVjbGFyYXRpb24gbm9kZS5cbiAgICAgKiBAcGFyYW0gZGVjbGFyYXRpb24gQSBEZWNsYXJhdGlvbiBub2RlLlxuICAgICAqIEByZXR1cm4gVGhlIHN0cmluZ2lmaWVkIENTUyBvZiB0aGUgRGVjbGFyYXRpb24uXG4gICAgICovXG4gICAgW2NvbW1vbl8xJDEubm9kZVR5cGUuZGVjbGFyYXRpb25dKGRlY2xhcmF0aW9uKSB7XG4gICAgICAgIHJldHVybiBkZWNsYXJhdGlvbi52YWx1ZSAhPSBudWxsID9cbiAgICAgICAgICAgIGAke2RlY2xhcmF0aW9uLm5hbWV9OiR7dGhpcy52aXNpdChkZWNsYXJhdGlvbi52YWx1ZSl9O2AgOlxuICAgICAgICAgICAgYCR7ZGVjbGFyYXRpb24ubmFtZX07YDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVmlzaXQgYW5kIHN0cmluZ2lmeSBhbiBFeHByZXNzaW9uIG5vZGUuXG4gICAgICogQHBhcmFtIGV4cHJlc3Npb24gQW4gRXhwcmVzc2lvbiBub2RlLlxuICAgICAqIEByZXR1cm4gVGhlIHN0cmluZ2lmaWVkIENTUyBvZiB0aGUgRXhwcmVzc2lvbi5cbiAgICAgKi9cbiAgICBbY29tbW9uXzEkMS5ub2RlVHlwZS5leHByZXNzaW9uXShleHByZXNzaW9uKSB7XG4gICAgICAgIHJldHVybiBgJHtleHByZXNzaW9uLnRleHR9YDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVmlzaXQgYSBkaXNjYXJkZWQgbm9kZS5cbiAgICAgKiBAcGFyYW0gZGlzY2FyZGVkIEEgRGlzY2FyZGVkIG5vZGUuXG4gICAgICogQHJldHVybiBBbiBlbXB0eSBzdHJpbmcsIHNpbmNlIERpc2NhcmRlZCBub2RlcyBhcmUgZGlzY2FyZGVkLlxuICAgICAqL1xuICAgIFtjb21tb25fMSQxLm5vZGVUeXBlLmRpc2NhcmRlZF0oX2Rpc2NhcmRlZCkge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxufVxuc3RyaW5naWZpZXIuU3RyaW5naWZpZXIgPSBTdHJpbmdpZmllciQxO1xuXG4vKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTYgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0XG4gKiBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZFxuICogYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heVxuICogYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieVxuICogR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUFxuICogcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dFxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoc2hhZHlDc3MsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIGFzdF9pdGVyYXRvcl8xID0gYXN0SXRlcmF0b3I7XG5zaGFkeUNzcy5pdGVyYXRlT3ZlckFzdCA9IGFzdF9pdGVyYXRvcl8xLml0ZXJhdGVPdmVyQXN0O1xudmFyIGNvbW1vbl8xID0gY29tbW9uO1xuc2hhZHlDc3Mubm9kZVR5cGUgPSBjb21tb25fMS5ub2RlVHlwZTtcbnZhciBub2RlX2ZhY3RvcnlfMSA9IG5vZGVGYWN0b3J5O1xuc2hhZHlDc3MuTm9kZUZhY3RvcnkgPSBub2RlX2ZhY3RvcnlfMS5Ob2RlRmFjdG9yeTtcbnZhciBub2RlX3Zpc2l0b3JfMSA9IG5vZGVWaXNpdG9yO1xuc2hhZHlDc3MuTm9kZVZpc2l0b3IgPSBub2RlX3Zpc2l0b3JfMS5Ob2RlVmlzaXRvcjtcbnZhciBwYXJzZXJfMSA9IHBhcnNlcjtcbnZhciBQYXJzZXIgPSBzaGFkeUNzcy5QYXJzZXIgPSBwYXJzZXJfMS5QYXJzZXI7XG52YXIgc3RyaW5naWZpZXJfMSA9IHN0cmluZ2lmaWVyO1xudmFyIFN0cmluZ2lmaWVyID0gc2hhZHlDc3MuU3RyaW5naWZpZXIgPSBzdHJpbmdpZmllcl8xLlN0cmluZ2lmaWVyO1xudmFyIHRva2VuXzEgPSB0b2tlbjtcbnNoYWR5Q3NzLlRva2VuID0gdG9rZW5fMS5Ub2tlbjtcbnZhciB0b2tlbml6ZXJfMSA9IHRva2VuaXplcjtcbnNoYWR5Q3NzLlRva2VuaXplciA9IHRva2VuaXplcl8xLlRva2VuaXplcjtcblxudmFyIG1heWJlR2V0UHJldmlld2VySWZyYW1lID0gZnVuY3Rpb24gbWF5YmVHZXRQcmV2aWV3ZXJJZnJhbWUoKSB7XG4gIHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuZWRpdC1wb3N0LXZpc3VhbC1lZGl0b3JfX2NvbnRlbnQtYXJlYSBpZnJhbWVbbmFtZT1cImVkaXRvci1jYW52YXNcIl0nKTtcbn07XG5cbnZhciBzdHlsZVRhZ3NDYWNoZSA9IG51bGw7XG52YXIgY2xlYXJBc3RDYWNoZSA9IGZ1bmN0aW9uIGNsZWFyQXN0Q2FjaGUoKSB7XG4gIHN0eWxlVGFnc0NhY2hlID0gbnVsbDtcbn07XG52YXIgZ2V0U3R5bGVUYWdzV2l0aEFzdCA9IGZ1bmN0aW9uIGdldFN0eWxlVGFnc1dpdGhBc3QoKSB7XG4gIGlmIChzdHlsZVRhZ3NDYWNoZSkge1xuICAgIHJldHVybiBzdHlsZVRhZ3NDYWNoZTtcbiAgfVxuXG4gIHZhciBtYXliZVN0eWxlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI2N0LW1haW4tc3R5bGVzLWlubGluZS1jc3MnKTtcblxuICBpZiAoIW1heWJlU3R5bGUpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICB2YXIgcGFyc2VyID0gbmV3IFBhcnNlcigpO1xuXG4gIHZhciBhbGxTdHlsZXMgPSBfdG9Db25zdW1hYmxlQXJyYXkoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnc3R5bGUnKSkuZmlsdGVyKGZ1bmN0aW9uIChzKSB7XG4gICAgcmV0dXJuIHMuaW5uZXJUZXh0ICYmIHMuaW5uZXJUZXh0LmluZGV4T2YoJ25hcnJvdy1jb250YWluZXItbWF4LXdpZHRoJykgPiAtMTtcbiAgfSk7XG5cbiAgdmFyIG1heWJlSWZyYW1lID0gbWF5YmVHZXRQcmV2aWV3ZXJJZnJhbWUoKTtcblxuICBpZiAobWF5YmVJZnJhbWUpIHtcbiAgICBhbGxTdHlsZXMgPSBbXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KGFsbFN0eWxlcyksIF90b0NvbnN1bWFibGVBcnJheShfdG9Db25zdW1hYmxlQXJyYXkobWF5YmVJZnJhbWUuY29udGVudERvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ3N0eWxlJykpLmZpbHRlcihmdW5jdGlvbiAocykge1xuICAgICAgcmV0dXJuIHMuaW5uZXJUZXh0LmluZGV4T2YoJ25hcnJvdy1jb250YWluZXItbWF4LXdpZHRoJykgPiAtMTtcbiAgICB9KSkpO1xuICB9XG5cbiAgc3R5bGVUYWdzQ2FjaGUgPSBhbGxTdHlsZXMubWFwKGZ1bmN0aW9uIChzdHlsZSkge1xuICAgIHJldHVybiB7XG4gICAgICBzdHlsZTogc3R5bGUsXG4gICAgICBhc3Q6IHBhcnNlci5wYXJzZShzdHlsZS5pbm5lclRleHQucmVwbGFjZShuZXcgUmVnRXhwKCdcXG4nLCAnZycpLCAnJykpXG4gICAgfTtcbiAgfSk7XG4gIHJldHVybiBzdHlsZVRhZ3NDYWNoZTtcbn07XG52YXIgcGVyc2lzdE5ld0FzdHMgPSBmdW5jdGlvbiBwZXJzaXN0TmV3QXN0cyhzdHlsZVRhZ3MpIHtcbiAgc3R5bGVUYWdzQ2FjaGUgPSBzdHlsZVRhZ3M7XG4gIHZhciBzdHJpbmdpZmllciA9IG5ldyBTdHJpbmdpZmllcigpO1xuICBzdHlsZVRhZ3NDYWNoZS5tYXAoZnVuY3Rpb24gKHN0eWxlRGVzY3JpcHRvcikge1xuICAgIGlmICghc3R5bGVEZXNjcmlwdG9yLnN0eWxlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdObyBhc3QgZm9yIHN0eWxlJywgc3R5bGVEZXNjcmlwdG9yKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzdHlsZURlc2NyaXB0b3Iuc3R5bGUuaW5uZXJUZXh0ID0gc3RyaW5naWZpZXIuc3RyaW5naWZ5KHN0eWxlRGVzY3JpcHRvci5hc3QpO1xuICB9KTtcbn07XG52YXIgb3ZlcnJpZGVTdHlsZXNXaXRoQXN0ID0gZnVuY3Rpb24gb3ZlcnJpZGVTdHlsZXNXaXRoQXN0KCkge1xuICBpZiAoIXN0eWxlVGFnc0NhY2hlKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcGVyc2lzdE5ld0FzdHMoc3R5bGVUYWdzQ2FjaGUubWFwKGZ1bmN0aW9uIChzdHlsZURlc2NyaXB0b3IpIHtcbiAgICBpZiAoc3R5bGVEZXNjcmlwdG9yLnN0eWxlLmlkKSB7XG4gICAgICByZXR1cm4gc3R5bGVEZXNjcmlwdG9yO1xuICAgIH1cblxuICAgIHZhciBhbGxTdHlsZXMgPSBfdG9Db25zdW1hYmxlQXJyYXkoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnc3R5bGUnKSkuZmlsdGVyKGZ1bmN0aW9uIChzKSB7XG4gICAgICByZXR1cm4gcy5pbm5lclRleHQuaW5kZXhPZignbmFycm93LWNvbnRhaW5lci1tYXgtd2lkdGgnKSA+IC0xO1xuICAgIH0pO1xuXG4gICAgdmFyIG1heWJlSWZyYW1lID0gbWF5YmVHZXRQcmV2aWV3ZXJJZnJhbWUoKTtcblxuICAgIGlmIChtYXliZUlmcmFtZSkge1xuICAgICAgYWxsU3R5bGVzID0gW10uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShhbGxTdHlsZXMpLCBfdG9Db25zdW1hYmxlQXJyYXkoX3RvQ29uc3VtYWJsZUFycmF5KG1heWJlSWZyYW1lLmNvbnRlbnREb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdzdHlsZScpKS5maWx0ZXIoZnVuY3Rpb24gKHMpIHtcbiAgICAgICAgcmV0dXJuIHMuaW5uZXJUZXh0LmluZGV4T2YoJ25hcnJvdy1jb250YWluZXItbWF4LXdpZHRoJykgPiAtMTtcbiAgICAgIH0pKSk7XG4gICAgfVxuXG4gICAgc3R5bGVEZXNjcmlwdG9yLnN0eWxlID0gYWxsU3R5bGVzLmZpbmQoZnVuY3Rpb24gKHMpIHtcbiAgICAgIHJldHVybiAhcy5pZDtcbiAgICB9KTtcbiAgICByZXR1cm4gX29iamVjdFNwcmVhZDIoe30sIHN0eWxlRGVzY3JpcHRvcik7XG4gIH0pKTtcbn07XG5cbnZhciBwcmVwYXJlU3BhY2luZ1ZhbHVlRm9yID0gZnVuY3Rpb24gcHJlcGFyZVNwYWNpbmdWYWx1ZUZvcih2YWx1ZSkge1xuICBpZiAoW3ZhbHVlWyd0b3AnXSwgdmFsdWVbJ3JpZ2h0J10sIHZhbHVlWydib3R0b20nXSwgdmFsdWVbJ2xlZnQnXV0ucmVkdWNlKGZ1bmN0aW9uIChpc1ZhbHVlQ29tcGFjdCwgY3VycmVudFZhbHVlKSB7XG4gICAgcmV0dXJuICFpc1ZhbHVlQ29tcGFjdCA/IGZhbHNlIDogIShjdXJyZW50VmFsdWUgIT09ICdhdXRvJyAmJiBjdXJyZW50VmFsdWUgJiYgY3VycmVudFZhbHVlLnRvU3RyaW5nKCkubWF0Y2goL1xcZC9nKSk7XG4gIH0sIHRydWUpKSB7XG4gICAgcmV0dXJuICdDVF9DU1NfU0tJUF9SVUxFJztcbiAgfVxuXG4gIHZhciByZXN1bHQgPSBbdmFsdWVbJ3RvcCddID09PSAnYXV0bycgfHwgIXZhbHVlWyd0b3AnXS50b1N0cmluZygpLm1hdGNoKC9cXGQvZykgPyAwIDogdmFsdWVbJ3RvcCddLCB2YWx1ZVsncmlnaHQnXSA9PT0gJ2F1dG8nIHx8ICF2YWx1ZVsncmlnaHQnXS50b1N0cmluZygpLm1hdGNoKC9cXGQvZykgPyAwIDogdmFsdWVbJ3JpZ2h0J10sIHZhbHVlWydib3R0b20nXSA9PT0gJ2F1dG8nIHx8ICF2YWx1ZVsnYm90dG9tJ10udG9TdHJpbmcoKS5tYXRjaCgvXFxkL2cpID8gMCA6IHZhbHVlWydib3R0b20nXSwgdmFsdWVbJ2xlZnQnXSA9PT0gJ2F1dG8nIHx8ICF2YWx1ZVsnbGVmdCddLnRvU3RyaW5nKCkubWF0Y2goL1xcZC9nKSA/IDAgOiB2YWx1ZVsnbGVmdCddXTtcblxuICBpZiAocmVzdWx0WzBdID09PSByZXN1bHRbMV0gJiYgcmVzdWx0WzBdID09PSByZXN1bHRbMl0gJiYgcmVzdWx0WzBdID09PSByZXN1bHRbM10pIHtcbiAgICByZXR1cm4gcmVzdWx0WzBdO1xuICB9XG5cbiAgaWYgKHJlc3VsdFswXSA9PT0gcmVzdWx0WzJdICYmIHJlc3VsdFsxXSA9PT0gcmVzdWx0WzNdKSB7XG4gICAgcmV0dXJuIFwiXCIuY29uY2F0KHJlc3VsdFswXSwgXCIgXCIpLmNvbmNhdChyZXN1bHRbM10pO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdC5qb2luKCcgJyk7XG59O1xuXG52YXIgcHJlcGFyZUJveFNoYWRvd1ZhbHVlRm9yID0gZnVuY3Rpb24gcHJlcGFyZUJveFNoYWRvd1ZhbHVlRm9yKHZhbHVlLCBfcmVmKSB7XG4gIHZhciBfcmVmJGZvcmNlZE91dHB1dCA9IF9yZWYuZm9yY2VkT3V0cHV0LFxuICAgICAgZm9yY2VkT3V0cHV0ID0gX3JlZiRmb3JjZWRPdXRwdXQgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZiRmb3JjZWRPdXRwdXQ7XG5cbiAgaWYgKHZhbHVlID09PSAnQ1RfQ1NTX1NLSVBfUlVMRScpIHtcbiAgICByZXR1cm4gJ0NUX0NTU19TS0lQX1JVTEUnO1xuICB9XG5cbiAgaWYgKHZhbHVlID09PSAnbm9uZScpIHtcbiAgICByZXR1cm4gJ25vbmUnO1xuICB9XG5cbiAgaWYgKCF2YWx1ZS5lbmFibGUpIHtcbiAgICByZXR1cm4gJ25vbmUnO1xuICB9XG5cbiAgaWYgKHBhcnNlRmxvYXQodmFsdWUuYmx1cikgPT09IDAgJiYgcGFyc2VGbG9hdCh2YWx1ZS5zcHJlYWQpID09PSAwICYmIHBhcnNlRmxvYXQodmFsdWUudl9vZmZzZXQpID09PSAwICYmIHBhcnNlRmxvYXQodmFsdWUuaF9vZmZzZXQpID09PSAwKSB7XG4gICAgcmV0dXJuIGZvcmNlZE91dHB1dCA/ICdub25lJyA6ICdDVF9DU1NfU0tJUF9SVUxFJztcbiAgfVxuXG4gIHZhciBib3hfc2hhZG93X2NvbXBvbmVudHMgPSBbXTtcblxuICBpZiAodmFsdWUuaW5zZXQpIHtcbiAgICBib3hfc2hhZG93X2NvbXBvbmVudHMucHVzaCgnaW5zZXQnKTtcbiAgfVxuXG4gIGJveF9zaGFkb3dfY29tcG9uZW50cy5wdXNoKFwiXCIuY29uY2F0KHZhbHVlLmhfb2Zmc2V0LCBcInB4XCIpKTtcbiAgYm94X3NoYWRvd19jb21wb25lbnRzLnB1c2goXCJcIi5jb25jYXQodmFsdWUudl9vZmZzZXQsIFwicHhcIikpO1xuXG4gIGlmIChwYXJzZUZsb2F0KHZhbHVlLmJsdXIpICE9PSAwKSB7XG4gICAgYm94X3NoYWRvd19jb21wb25lbnRzLnB1c2goXCJcIi5jb25jYXQodmFsdWUuYmx1ciwgXCJweFwiKSk7XG5cbiAgICBpZiAocGFyc2VGbG9hdCh2YWx1ZS5zcHJlYWQpICE9PSAwKSB7XG4gICAgICBib3hfc2hhZG93X2NvbXBvbmVudHMucHVzaChcIlwiLmNvbmNhdCh2YWx1ZS5zcHJlYWQsIFwicHhcIikpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChwYXJzZUZsb2F0KHZhbHVlLmJsdXIpID09PSAwICYmIHBhcnNlRmxvYXQodmFsdWUuc3ByZWFkKSAhPT0gMCkge1xuICAgIGJveF9zaGFkb3dfY29tcG9uZW50cy5wdXNoKFwiXCIuY29uY2F0KHZhbHVlLmJsdXIsIFwicHhcIikpO1xuICAgIGJveF9zaGFkb3dfY29tcG9uZW50cy5wdXNoKFwiXCIuY29uY2F0KHZhbHVlLnNwcmVhZCwgXCJweFwiKSk7XG4gIH1cblxuICBib3hfc2hhZG93X2NvbXBvbmVudHMucHVzaCh2YWx1ZS5jb2xvci5jb2xvcik7XG4gIHJldHVybiBib3hfc2hhZG93X2NvbXBvbmVudHMuam9pbignICcpO1xufTtcblxudmFyIGlzRnVuY3Rpb24gPSBmdW5jdGlvbiBpc0Z1bmN0aW9uKGZ1bmN0aW9uVG9DaGVjaykge1xuICByZXR1cm4gZnVuY3Rpb25Ub0NoZWNrICYmIHt9LnRvU3RyaW5nLmNhbGwoZnVuY3Rpb25Ub0NoZWNrKSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJztcbn07XG5cbnZhciByZXBsYWNlVmFyaWFibGVJbkFzdCA9IGZ1bmN0aW9uIHJlcGxhY2VWYXJpYWJsZUluQXN0KCkge1xuICB2YXIgYXJncyA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge307XG4gIGFyZ3MgPSBfb2JqZWN0U3ByZWFkMih7XG4gICAgdmFyaWFibGVEZXNjcmlwdG9yOiB7fSxcbiAgICB2YWx1ZTogJycsXG4gICAgYXN0OiB7fVxuICB9LCBhcmdzKTtcbiAgdmFyIF9hcmdzID0gYXJncyxcbiAgICAgIHZhcmlhYmxlRGVzY3JpcHRvciA9IF9hcmdzLnZhcmlhYmxlRGVzY3JpcHRvcixcbiAgICAgIHZhbHVlID0gX2FyZ3MudmFsdWUsXG4gICAgICBhc3QgPSBfYXJncy5hc3Q7XG4gIHZhciBuZXdTZWxlY3RvciA9IHZhcmlhYmxlRGVzY3JpcHRvci5zZWxlY3RvciB8fCAnOnJvb3QnO1xuICB2YXIgdmFyaWFibGVQcmVmaXggPSAnLS0nO1xuXG4gIGlmICh2YXJpYWJsZURlc2NyaXB0b3IudmFyaWFibGVUeXBlID09PSAncHJvcGVydHknKSB7XG4gICAgdmFyaWFibGVQcmVmaXggPSAnJztcbiAgfVxuXG4gIHZhciB2YXJpYWJsZU5hbWUgPSBcIlwiLmNvbmNhdCh2YXJpYWJsZVByZWZpeCkuY29uY2F0KGlzRnVuY3Rpb24odmFyaWFibGVEZXNjcmlwdG9yLnZhcmlhYmxlKSA/IHZhcmlhYmxlRGVzY3JpcHRvci52YXJpYWJsZSgpIDogdmFyaWFibGVEZXNjcmlwdG9yLnZhcmlhYmxlKTtcbiAgdmFyIGhhc1N1Y2hTZWxlY3RvciA9IGFzdC5ydWxlcy5maW5kKGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgdmFyIHNlbGVjdG9yID0gX3JlZi5zZWxlY3RvcjtcbiAgICByZXR1cm4gc2VsZWN0b3IgPT09IG5ld1NlbGVjdG9yO1xuICB9KTtcbiAgdmFyIHJ1bGVUb0NvcHkgPSB7XG4gICAgdHlwZTogJ3J1bGVzZXQnLFxuICAgIHNlbGVjdG9yOiAnOnJvb3QnLFxuICAgIHJ1bGVsaXN0OiB7XG4gICAgICB0eXBlOiAncnVsZWxpc3QnLFxuICAgICAgcnVsZXM6IFt7XG4gICAgICAgIHR5cGU6ICdkZWNsYXJhdGlvbicsXG4gICAgICAgIG5hbWU6ICctLWNvbnRhaW5lci1tYXgtd2lkdGgnLFxuICAgICAgICB2YWx1ZToge1xuICAgICAgICAgIHR5cGU6ICdleHByZXNzaW9uJyxcbiAgICAgICAgICB0ZXh0OiAnMTI5MHB4J1xuICAgICAgICB9XG4gICAgICB9XVxuICAgIH1cbiAgfTtcbiAgdmFyIG5ld0FzdCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoYXN0KSk7XG5cbiAgaWYgKGhhc1N1Y2hTZWxlY3Rvcikge1xuICAgIG5ld0FzdC5ydWxlcyA9IG5ld0FzdC5ydWxlcy5tYXAoZnVuY3Rpb24gKHJ1bGUpIHtcbiAgICAgIHZhciBzZWxlY3RvciA9IHJ1bGUuc2VsZWN0b3I7XG5cbiAgICAgIGlmIChzZWxlY3RvciAhPT0gbmV3U2VsZWN0b3IpIHtcbiAgICAgICAgcmV0dXJuIHJ1bGU7XG4gICAgICB9XG5cbiAgICAgIGlmICh2YWx1ZS5pbmRleE9mKCdDVF9DU1NfU0tJUF9SVUxFJykgPiAtMSB8fCB2YWx1ZS5pbmRleE9mKHZhcmlhYmxlTmFtZSkgPiAtMSkge1xuICAgICAgICByZXR1cm4gX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIHJ1bGUpLCB7fSwge1xuICAgICAgICAgIHJ1bGVsaXN0OiBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgcnVsZS5ydWxlbGlzdCksIHt9LCB7XG4gICAgICAgICAgICBydWxlczogcnVsZS5ydWxlbGlzdC5ydWxlcy5maWx0ZXIoZnVuY3Rpb24gKF9yZWYyKSB7XG4gICAgICAgICAgICAgIHZhciBuYW1lID0gX3JlZjIubmFtZTtcbiAgICAgICAgICAgICAgcmV0dXJuIG5hbWUgIT09IHZhcmlhYmxlTmFtZTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfSlcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBoYXNTdWNoUnVsZSA9IHJ1bGUucnVsZWxpc3QucnVsZXMuZmluZChmdW5jdGlvbiAoX3JlZjMpIHtcbiAgICAgICAgdmFyIG5hbWUgPSBfcmVmMy5uYW1lO1xuICAgICAgICByZXR1cm4gbmFtZSA9PT0gdmFyaWFibGVOYW1lO1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChoYXNTdWNoUnVsZSkge1xuICAgICAgICByZXR1cm4gX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIHJ1bGUpLCB7fSwge1xuICAgICAgICAgIHJ1bGVsaXN0OiBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgcnVsZS5ydWxlbGlzdCksIHt9LCB7XG4gICAgICAgICAgICBydWxlczogcnVsZS5ydWxlbGlzdC5ydWxlcy5tYXAoZnVuY3Rpb24gKHJ1bGUpIHtcbiAgICAgICAgICAgICAgaWYgKHJ1bGUubmFtZSA9PT0gdmFyaWFibGVOYW1lKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBydWxlKSwge30sIHtcbiAgICAgICAgICAgICAgICAgIHZhbHVlOiBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgcnVsZS52YWx1ZSksIHt9LCB7XG4gICAgICAgICAgICAgICAgICAgIHRleHQ6IHZhbHVlXG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcmV0dXJuIHJ1bGU7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0pXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIHJ1bGUpLCB7fSwge1xuICAgICAgICBydWxlbGlzdDogX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIHJ1bGUucnVsZWxpc3QpLCB7fSwge1xuICAgICAgICAgIHJ1bGVzOiBbXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KHJ1bGUucnVsZWxpc3QucnVsZXMpLCBbX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIHJ1bGVUb0NvcHkucnVsZWxpc3QucnVsZXNbMF0pLCB7fSwge1xuICAgICAgICAgICAgbmFtZTogdmFyaWFibGVOYW1lLFxuICAgICAgICAgICAgdmFsdWU6IF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBydWxlVG9Db3B5LnJ1bGVsaXN0LnJ1bGVzWzBdLnZhbHVlKSwge30sIHtcbiAgICAgICAgICAgICAgdGV4dDogdmFsdWVcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfSldKVxuICAgICAgICB9KVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBpZiAoIWhhc1N1Y2hTZWxlY3RvciAmJiB2YWx1ZS5pbmRleE9mKCdDVF9DU1NfU0tJUF9SVUxFJykgPT09IC0xKSB7XG4gICAgbmV3QXN0LnJ1bGVzID0gW10uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShuZXdBc3QucnVsZXMpLCBbX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIHJ1bGVUb0NvcHkpLCB7fSwge1xuICAgICAgc2VsZWN0b3I6IG5ld1NlbGVjdG9yLFxuICAgICAgcnVsZWxpc3Q6IF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBydWxlVG9Db3B5LnJ1bGVsaXN0KSwge30sIHtcbiAgICAgICAgcnVsZXM6IFtfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgcnVsZVRvQ29weS5ydWxlbGlzdC5ydWxlc1swXSksIHt9LCB7XG4gICAgICAgICAgbmFtZTogdmFyaWFibGVOYW1lLFxuICAgICAgICAgIHZhbHVlOiBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgcnVsZVRvQ29weS5ydWxlbGlzdC5ydWxlc1swXS52YWx1ZSksIHt9LCB7XG4gICAgICAgICAgICB0ZXh0OiB2YWx1ZVxuICAgICAgICAgIH0pXG4gICAgICAgIH0pXVxuICAgICAgfSlcbiAgICB9KV0pO1xuICB9XG5cbiAgcmV0dXJuIG5ld0FzdDtcbn07XG5cbnZhciByZXBsYWNpbmdMb2dpYyA9IGZ1bmN0aW9uIHJlcGxhY2luZ0xvZ2ljKCkge1xuICB2YXIgYXJncyA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge307XG4gIGFyZ3MgPSBfb2JqZWN0U3ByZWFkMih7XG4gICAgdmFyaWFibGVEZXNjcmlwdG9yOiB7fSxcbiAgICB2YWx1ZToge30sXG4gICAgYXN0OiB7fVxuICB9LCBhcmdzKTtcbiAgdmFyIGFjdHVhbFZhbHVlID0gYXJncy52YWx1ZTtcblxuICBpZiAoKGFyZ3MudmFyaWFibGVEZXNjcmlwdG9yLnR5cGUgfHwgJycpLmluZGV4T2YoJ2NvbG9yJykgPiAtMSAmJiBhcmdzLnZhbHVlICE9PSAnQ1RfQ1NTX1NLSVBfUlVMRScpIHtcbiAgICBhY3R1YWxWYWx1ZSA9IGFyZ3MudmFsdWVbYXJncy52YXJpYWJsZURlc2NyaXB0b3IudHlwZSA9PT0gJ2NvbG9yJyA/ICdkZWZhdWx0JyA6IGFyZ3MudmFyaWFibGVEZXNjcmlwdG9yLnR5cGUuc3BsaXQoJzonKVsxXV0uY29sb3I7XG4gIH1cblxuICBpZiAoKGFyZ3MudmFyaWFibGVEZXNjcmlwdG9yLnR5cGUgfHwgJycpID09PSAnYm9yZGVyJykge1xuICAgIGFjdHVhbFZhbHVlID0gIWFyZ3MudmFsdWUgfHwgYXJncy52YWx1ZS5zdHlsZSA9PT0gJ25vbmUnID8gJ25vbmUnIDogXCJcIi5jb25jYXQoYXJncy52YWx1ZS53aWR0aCwgXCJweCBcIikuY29uY2F0KGFyZ3MudmFsdWUuc3R5bGUsIFwiIFwiKS5jb25jYXQoYXJncy52YWx1ZS5jb2xvci5jb2xvcik7XG5cbiAgICBpZiAoYXJncy52YXJpYWJsZURlc2NyaXB0b3Iuc2tpcF9ub25lICYmIGFjdHVhbFZhbHVlID09PSAnbm9uZScpIHtcbiAgICAgIGFjdHVhbFZhbHVlID0gJ0NUX0NTU19TS0lQX1JVTEUnO1xuICAgIH1cbiAgfVxuXG4gIGlmICgoYXJncy52YXJpYWJsZURlc2NyaXB0b3IudHlwZSB8fCAnJykgPT09ICdzcGFjaW5nJykge1xuICAgIGFjdHVhbFZhbHVlID0gcHJlcGFyZVNwYWNpbmdWYWx1ZUZvcihhcmdzLnZhbHVlKTtcbiAgfVxuXG4gIGlmICgoYXJncy52YXJpYWJsZURlc2NyaXB0b3IudHlwZSB8fCAnJykgPT09ICdib3gtc2hhZG93Jykge1xuICAgIGFjdHVhbFZhbHVlID0gcHJlcGFyZUJveFNoYWRvd1ZhbHVlRm9yKGFyZ3MudmFsdWUsIGFyZ3MudmFyaWFibGVEZXNjcmlwdG9yKTtcbiAgfVxuXG4gIHJldHVybiByZXBsYWNlVmFyaWFibGVJbkFzdCh7XG4gICAgdmFyaWFibGVEZXNjcmlwdG9yOiBhcmdzLnZhcmlhYmxlRGVzY3JpcHRvcixcbiAgICB2YWx1ZTogXCJcIi5jb25jYXQoYWN0dWFsVmFsdWUpLmNvbmNhdChhcmdzLnZhcmlhYmxlRGVzY3JpcHRvci51bml0IHx8ICcnKS5jb25jYXQoYXJncy52YXJpYWJsZURlc2NyaXB0b3IuaW1wb3J0YW50ID8gJyAhaW1wb3J0YW50JyA6ICcnKSxcbiAgICBhc3Q6IGFyZ3MuYXN0XG4gIH0pO1xufTtcblxudmFyIHVwZGF0ZVZhcmlhYmxlSW5TdHlsZVRhZ3MgPSBmdW5jdGlvbiB1cGRhdGVWYXJpYWJsZUluU3R5bGVUYWdzKCkge1xuICB2YXIgYXJncyA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge307XG4gIGFyZ3MgPSBfb2JqZWN0U3ByZWFkMih7XG4gICAgdmFyaWFibGVEZXNjcmlwdG9yOiB7fSxcbiAgICB2YWx1ZTogJycsXG4gICAgZnVsbFZhbHVlOiB7fSxcbiAgICB0YWJsZXRNUTogJyhtYXgtd2lkdGg6IDk5OS45OHB4KScsXG4gICAgbW9iaWxlTVE6ICcobWF4LXdpZHRoOiA2ODkuOThweCknXG4gIH0sIGFyZ3MpO1xuICB2YXIgYWxsRGVzY3JpcHRvcnMgPSBhcmdzLnZhcmlhYmxlRGVzY3JpcHRvcjtcblxuICBpZiAoaXNGdW5jdGlvbihhbGxEZXNjcmlwdG9ycykpIHtcbiAgICBhbGxEZXNjcmlwdG9ycyA9IGFsbERlc2NyaXB0b3JzKGFyZ3MudmFsdWUpO1xuICB9XG5cbiAgaWYgKCFBcnJheS5pc0FycmF5KGFsbERlc2NyaXB0b3JzKSkge1xuICAgIGFsbERlc2NyaXB0b3JzID0gW2FsbERlc2NyaXB0b3JzXTtcbiAgfVxuXG4gIHBlcnNpc3ROZXdBc3RzKGdldFN0eWxlVGFnc1dpdGhBc3QoKS5tYXAoZnVuY3Rpb24gKHN0eWxlRGVzY3JpcHRvcikge1xuICAgIHJldHVybiBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgc3R5bGVEZXNjcmlwdG9yKSwge30sIHtcbiAgICAgIGFzdDogYWxsRGVzY3JpcHRvcnMucmVkdWNlKGZ1bmN0aW9uIChjdXJyZW50QXN0LCB2YXJpYWJsZURlc2NyaXB0b3IpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gdmFyaWFibGVEZXNjcmlwdG9yLmZ1bGxWYWx1ZSA/IGFyZ3MuZnVsbFZhbHVlIDogYXJncy52YWx1ZTtcbiAgICAgICAgdmFsdWUgPSB2YXJpYWJsZURlc2NyaXB0b3IuZXh0cmFjdFZhbHVlID8gdmFyaWFibGVEZXNjcmlwdG9yLmV4dHJhY3RWYWx1ZSh2YWx1ZSkgOiB2YWx1ZTtcblxuICAgICAgICBpZiAodmFyaWFibGVEZXNjcmlwdG9yLndoZW5Eb25lKSB7XG4gICAgICAgICAgdmFyaWFibGVEZXNjcmlwdG9yLndoZW5Eb25lKHZhbHVlLCBhcmdzLnZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhbHVlID0gbWF5YmVQcm9tb3RlU2NhbGFyVmFsdWVJbnRvUmVzcG9uc2l2ZSh2YWx1ZSwgISF2YXJpYWJsZURlc2NyaXB0b3IucmVzcG9uc2l2ZSk7XG5cbiAgICAgICAgaWYgKCF2YXJpYWJsZURlc2NyaXB0b3IucmVzcG9uc2l2ZSkge1xuICAgICAgICAgIHJldHVybiByZXBsYWNpbmdMb2dpYyh7XG4gICAgICAgICAgICB2YXJpYWJsZURlc2NyaXB0b3I6IHZhcmlhYmxlRGVzY3JpcHRvcixcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgIGFzdDogY3VycmVudEFzdFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGRlc2t0b3BBc3QgPSByZXBsYWNpbmdMb2dpYyh7XG4gICAgICAgICAgdmFyaWFibGVEZXNjcmlwdG9yOiB2YXJpYWJsZURlc2NyaXB0b3IsXG4gICAgICAgICAgdmFsdWU6IHZhbHVlLmRlc2t0b3AsXG4gICAgICAgICAgYXN0OiBjdXJyZW50QXN0XG4gICAgICAgIH0pO1xuICAgICAgICB2YXIgdGFibGV0QXN0ID0gZGVza3RvcEFzdDtcblxuICAgICAgICBpZiAoIXRhYmxldEFzdC5ydWxlcy5maW5kKGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgICAgICAgdmFyIHR5cGUgPSBfcmVmLnR5cGUsXG4gICAgICAgICAgICAgIHBhcmFtZXRlcnMgPSBfcmVmLnBhcmFtZXRlcnM7XG4gICAgICAgICAgcmV0dXJuIHR5cGUgPT09ICdhdFJ1bGUnICYmIHBhcmFtZXRlcnMgPT09IGFyZ3MudGFibGV0TVE7XG4gICAgICAgIH0pKSB7XG4gICAgICAgICAgdGFibGV0QXN0ID0gX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIHRhYmxldEFzdCksIHt9LCB7XG4gICAgICAgICAgICBydWxlczogW10uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheSh0YWJsZXRBc3QucnVsZXMpLCBbe1xuICAgICAgICAgICAgICB0eXBlOiAnYXRSdWxlJyxcbiAgICAgICAgICAgICAgbmFtZTogJ21lZGlhJyxcbiAgICAgICAgICAgICAgcGFyYW1ldGVyczogYXJncy50YWJsZXRNUSxcbiAgICAgICAgICAgICAgcnVsZWxpc3Q6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiAncnVsZWxpc3QnLFxuICAgICAgICAgICAgICAgIHJ1bGVzOiBbXVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XSlcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRhYmxldEFzdCA9IF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCB0YWJsZXRBc3QpLCB7fSwge1xuICAgICAgICAgIHJ1bGVzOiB0YWJsZXRBc3QucnVsZXMubWFwKGZ1bmN0aW9uIChydWxlKSB7XG4gICAgICAgICAgICBpZiAocnVsZS50eXBlICE9PSAnYXRSdWxlJyB8fCBydWxlLnBhcmFtZXRlcnMgIT09IGFyZ3MudGFibGV0TVEpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHJ1bGU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgcnVsZSksIHt9LCB7XG4gICAgICAgICAgICAgIHJ1bGVsaXN0OiByZXBsYWNpbmdMb2dpYyh7XG4gICAgICAgICAgICAgICAgdmFyaWFibGVEZXNjcmlwdG9yOiBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgdmFyaWFibGVEZXNjcmlwdG9yKSwge30sIHtcbiAgICAgICAgICAgICAgICAgIHNlbGVjdG9yOiB2YXJpYWJsZURlc2NyaXB0b3Iuc2VsZWN0b3IgPT09ICcuZWRpdC1wb3N0LXZpc3VhbC1lZGl0b3JfX2NvbnRlbnQtYXJlYSA+IGRpdicgPyAnOnJvb3QnIDogdmFyaWFibGVEZXNjcmlwdG9yLnNlbGVjdG9yXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLnRhYmxldCxcbiAgICAgICAgICAgICAgICBhc3Q6IHJ1bGUucnVsZWxpc3RcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pXG4gICAgICAgIH0pO1xuICAgICAgICB2YXIgbW9iaWxlQXN0ID0gdGFibGV0QXN0O1xuXG4gICAgICAgIGlmICghbW9iaWxlQXN0LnJ1bGVzLmZpbmQoZnVuY3Rpb24gKF9yZWYyKSB7XG4gICAgICAgICAgdmFyIHR5cGUgPSBfcmVmMi50eXBlLFxuICAgICAgICAgICAgICBwYXJhbWV0ZXJzID0gX3JlZjIucGFyYW1ldGVycztcbiAgICAgICAgICByZXR1cm4gdHlwZSA9PT0gJ2F0UnVsZScgJiYgcGFyYW1ldGVycyA9PT0gYXJncy5tb2JpbGVNUTtcbiAgICAgICAgfSkpIHtcbiAgICAgICAgICBtb2JpbGVBc3QgPSBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgbW9iaWxlQXN0KSwge30sIHtcbiAgICAgICAgICAgIHJ1bGVzOiBbXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KG1vYmlsZUFzdC5ydWxlcyksIFt7XG4gICAgICAgICAgICAgIHR5cGU6ICdhdFJ1bGUnLFxuICAgICAgICAgICAgICBuYW1lOiAnbWVkaWEnLFxuICAgICAgICAgICAgICBwYXJhbWV0ZXJzOiBhcmdzLm1vYmlsZU1RLFxuICAgICAgICAgICAgICBydWxlbGlzdDoge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdydWxlbGlzdCcsXG4gICAgICAgICAgICAgICAgcnVsZXM6IFtdXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1dKVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgbW9iaWxlQXN0ID0gX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIG1vYmlsZUFzdCksIHt9LCB7XG4gICAgICAgICAgcnVsZXM6IG1vYmlsZUFzdC5ydWxlcy5tYXAoZnVuY3Rpb24gKHJ1bGUpIHtcbiAgICAgICAgICAgIGlmIChydWxlLnR5cGUgIT09ICdhdFJ1bGUnIHx8IHJ1bGUucGFyYW1ldGVycyAhPT0gYXJncy5tb2JpbGVNUSkge1xuICAgICAgICAgICAgICByZXR1cm4gcnVsZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBydWxlKSwge30sIHtcbiAgICAgICAgICAgICAgcnVsZWxpc3Q6IHJlcGxhY2luZ0xvZ2ljKHtcbiAgICAgICAgICAgICAgICB2YXJpYWJsZURlc2NyaXB0b3I6IF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCB2YXJpYWJsZURlc2NyaXB0b3IpLCB7fSwge1xuICAgICAgICAgICAgICAgICAgc2VsZWN0b3I6IHZhcmlhYmxlRGVzY3JpcHRvci5zZWxlY3RvciA9PT0gJy5lZGl0LXBvc3QtdmlzdWFsLWVkaXRvcl9fY29udGVudC1hcmVhID4gZGl2JyA/ICc6cm9vdCcgOiB2YXJpYWJsZURlc2NyaXB0b3Iuc2VsZWN0b3JcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUubW9iaWxlLFxuICAgICAgICAgICAgICAgIGFzdDogcnVsZS5ydWxlbGlzdFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSlcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBtb2JpbGVBc3Q7XG4gICAgICB9LCBzdHlsZURlc2NyaXB0b3IuYXN0KVxuICAgIH0pO1xuICB9KSk7XG59O1xuXG5leHBvcnQgeyBjbGVhckFzdENhY2hlLCBvdmVycmlkZVN0eWxlc1dpdGhBc3QsIHVwZGF0ZVZhcmlhYmxlSW5TdHlsZVRhZ3MgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmVzLmpzLm1hcFxuIiwiY29uc3QgX19XRUJQQUNLX05BTUVTUEFDRV9PQkpFQ1RfXyA9IHdpbmRvdy5ibG9ja3N5T3B0aW9uczsiLCJmdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgZW51bWVyYWJsZU9ubHkgJiYgKHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KSksIGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gbnVsbCAhPSBhcmd1bWVudHNbaV0gPyBhcmd1bWVudHNbaV0gOiB7fTsgaSAlIDIgPyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKSA6IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG5pbXBvcnQgeyBtYXliZVByb21vdGVTY2FsYXJWYWx1ZUludG9SZXNwb25zaXZlIH0gZnJvbSAnY3VzdG9taXplci1zeW5jLWhlbHBlcnMvZGlzdC9wcm9tb3RlLWludG8tcmVzcG9uc2l2ZSc7XG5cbmNvbnN0IGNvbXBvbmVudFRvSGV4ID0gYyA9PiB7XG4gIHZhciBoZXggPSBjLnRvU3RyaW5nKDE2KTtcbiAgcmV0dXJuIGhleC5sZW5ndGggPT0gMSA/ICcwJyArIGhleCA6IGhleDtcbn07XG5cbmNvbnN0IHdpdGhSZXNwb25zaXZlID0gX3JlZiA9PiB7XG4gIGxldCB7XG4gICAgcmVzcG9uc2l2ZSxcbiAgICB2YWx1ZSxcbiAgICBjYlxuICB9ID0gX3JlZjtcbiAgdmFsdWUgPSBtYXliZVByb21vdGVTY2FsYXJWYWx1ZUludG9SZXNwb25zaXZlKHZhbHVlLCByZXNwb25zaXZlKTtcblxuICBpZiAocmVzcG9uc2l2ZSkge1xuICAgIHJldHVybiB7XG4gICAgICBkZXNrdG9wOiBjYih2YWx1ZS5kZXNrdG9wKSxcbiAgICAgIHRhYmxldDogY2IodmFsdWUudGFibGV0KSxcbiAgICAgIG1vYmlsZTogY2IodmFsdWUubW9iaWxlKVxuICAgIH07XG4gIH1cblxuICByZXR1cm4gY2IodmFsdWUpO1xufTtcblxuZXhwb3J0IGNvbnN0IGhhbmRsZUJhY2tncm91bmRPcHRpb25Gb3IgPSBfcmVmMiA9PiB7XG4gIGxldCB7XG4gICAgaWQsXG4gICAgc2VsZWN0b3IsXG4gICAgcmVzcG9uc2l2ZSA9IGZhbHNlLFxuICAgIHZhbHVlRXh0cmFjdG9yID0gdmFsdWUgPT4gdmFsdWUsXG4gICAgYWRkVG9EZXNjcmlwdG9ycyA9IHt9LFxuICAgIGNvbmRpdGlvbmFsX3ZhciA9IGZhbHNlLFxuICAgIGZvcmNlZF9iYWNrZ3JvdW5kX2ltYWdlID0gZmFsc2VcbiAgfSA9IF9yZWYyO1xuICByZXR1cm4ge1xuICAgIFtpZF06IFtfb2JqZWN0U3ByZWFkKHtcbiAgICAgIHZhcmlhYmxlOiAnYmFja2dyb3VuZC1jb2xvcicsXG4gICAgICB2YXJpYWJsZVR5cGU6ICdwcm9wZXJ0eScsXG4gICAgICBzZWxlY3RvcixcbiAgICAgIHJlc3BvbnNpdmUsXG4gICAgICBleHRyYWN0VmFsdWU6IHZhbHVlID0+IHdpdGhSZXNwb25zaXZlKHtcbiAgICAgICAgdmFsdWU6IHZhbHVlRXh0cmFjdG9yKHZhbHVlKSxcbiAgICAgICAgcmVzcG9uc2l2ZSxcbiAgICAgICAgY2I6IHZhbHVlID0+IHtcbiAgICAgICAgICBpZiAoY29uZGl0aW9uYWxfdmFyKSB7XG4gICAgICAgICAgICByZXR1cm4gYHZhcigke2NvbmRpdGlvbmFsX3Zhcn0sICR7dmFsdWUuYmFja2dyb3VuZENvbG9yLmRlZmF1bHQuY29sb3J9KWA7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuICdDVF9DU1NfU0tJUF9SVUxFJztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gdmFsdWUuYmFja2dyb3VuZENvbG9yLmRlZmF1bHQuY29sb3I7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSwgYWRkVG9EZXNjcmlwdG9ycyksIF9vYmplY3RTcHJlYWQoe1xuICAgICAgdmFyaWFibGU6ICdiYWNrZ3JvdW5kLWltYWdlJyxcbiAgICAgIHZhcmlhYmxlVHlwZTogJ3Byb3BlcnR5JyxcbiAgICAgIHNlbGVjdG9yLFxuICAgICAgcmVzcG9uc2l2ZSxcbiAgICAgIGV4dHJhY3RWYWx1ZTogdmFsdWUgPT4gd2l0aFJlc3BvbnNpdmUoe1xuICAgICAgICB2YWx1ZTogdmFsdWVFeHRyYWN0b3IodmFsdWUpLFxuICAgICAgICByZXNwb25zaXZlLFxuICAgICAgICBjYjogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGxldCB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kX3R5cGUsXG4gICAgICAgICAgICBncmFkaWVudCxcbiAgICAgICAgICAgIGJhY2tncm91bmRfaW1hZ2UsXG4gICAgICAgICAgICBiYWNrZ3JvdW5kX3BhdHRlcm4sXG4gICAgICAgICAgICBwYXR0ZXJuQ29sb3IsXG4gICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3IsXG4gICAgICAgICAgICBvdmVybGF5Q29sb3JcbiAgICAgICAgICB9ID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcblxuICAgICAgICAgIGlmIChiYWNrZ3JvdW5kX3R5cGUgPT09ICdjb2xvcicpIHtcbiAgICAgICAgICAgIGlmIChmb3JjZWRfYmFja2dyb3VuZF9pbWFnZSkge1xuICAgICAgICAgICAgICByZXR1cm4gJ25vbmUnO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gJ0NUX0NTU19TS0lQX1JVTEUnO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHN0cl9yZXBsYWNlID0gKCRvbGQsICRuZXcsICR0ZXh0KSA9PiAoJHRleHQgKyAnJykuc3BsaXQoJG9sZCkuam9pbigkbmV3KTtcblxuICAgICAgICAgIGlmIChiYWNrZ3JvdW5kX3R5cGUgPT09ICdpbWFnZScpIHtcbiAgICAgICAgICAgIGlmICghYmFja2dyb3VuZF9pbWFnZS51cmwpIHtcbiAgICAgICAgICAgICAgcmV0dXJuICdDVF9DU1NfU0tJUF9SVUxFJztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGAke292ZXJsYXlDb2xvci5kZWZhdWx0LmNvbG9yICE9PSAnQ1RfQ1NTX1NLSVBfUlVMRScgPyBgbGluZWFyLWdyYWRpZW50KCR7b3ZlcmxheUNvbG9yLmRlZmF1bHQuY29sb3J9LCAke292ZXJsYXlDb2xvci5kZWZhdWx0LmNvbG9yfSksIGAgOiAnJ311cmwoJHtiYWNrZ3JvdW5kX2ltYWdlLnVybH0pYDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoYmFja2dyb3VuZF90eXBlID09PSAnZ3JhZGllbnQnKSB7XG4gICAgICAgICAgICByZXR1cm4gZ3JhZGllbnQ7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbGV0IG9wYWNpdHkgPSAxO1xuICAgICAgICAgIGxldCBjb2xvciA9IHBhdHRlcm5Db2xvciA/IHBhdHRlcm5Db2xvci5kZWZhdWx0LmNvbG9yIDogJyc7XG5cbiAgICAgICAgICBpZiAoY29sb3IuaW5kZXhPZigncGFsZXR0ZUNvbG9yMScpID4gLTEpIHtcbiAgICAgICAgICAgIGNvbG9yID0gZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KS5nZXRQcm9wZXJ0eVZhbHVlKCctLXBhbGV0dGVDb2xvcjEnKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoY29sb3IuaW5kZXhPZigncGFsZXR0ZUNvbG9yMicpID4gLTEpIHtcbiAgICAgICAgICAgIGNvbG9yID0gZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KS5nZXRQcm9wZXJ0eVZhbHVlKCctLXBhbGV0dGVDb2xvcjInKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoY29sb3IuaW5kZXhPZigncGFsZXR0ZUNvbG9yMycpID4gLTEpIHtcbiAgICAgICAgICAgIGNvbG9yID0gZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KS5nZXRQcm9wZXJ0eVZhbHVlKCctLXBhbGV0dGVDb2xvcjMnKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoY29sb3IuaW5kZXhPZigncGFsZXR0ZUNvbG9yNCcpID4gLTEpIHtcbiAgICAgICAgICAgIGNvbG9yID0gZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KS5nZXRQcm9wZXJ0eVZhbHVlKCctLXBhbGV0dGVDb2xvcjQnKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoY29sb3IuaW5kZXhPZigncGFsZXR0ZUNvbG9yNScpID4gLTEpIHtcbiAgICAgICAgICAgIGNvbG9yID0gZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KS5nZXRQcm9wZXJ0eVZhbHVlKCctLXBhbGV0dGVDb2xvcjUnKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoY29sb3IuaW5kZXhPZigncGFsZXR0ZUNvbG9yNicpID4gLTEpIHtcbiAgICAgICAgICAgIGNvbG9yID0gZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KS5nZXRQcm9wZXJ0eVZhbHVlKCctLXBhbGV0dGVDb2xvcjYnKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoY29sb3IuaW5kZXhPZigncGFsZXR0ZUNvbG9yNycpID4gLTEpIHtcbiAgICAgICAgICAgIGNvbG9yID0gZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KS5nZXRQcm9wZXJ0eVZhbHVlKCctLXBhbGV0dGVDb2xvcjcnKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoY29sb3IuaW5kZXhPZigncGFsZXR0ZUNvbG9yOCcpID4gLTEpIHtcbiAgICAgICAgICAgIGNvbG9yID0gZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KS5nZXRQcm9wZXJ0eVZhbHVlKCctLXBhbGV0dGVDb2xvcjgnKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoY29sb3IuaW5kZXhPZigncmdiJykgPiAtMSkge1xuICAgICAgICAgICAgY29uc3QgcmdiX2FycmF5ID0gc3RyX3JlcGxhY2UoJ3JnYignLCAnJywgc3RyX3JlcGxhY2UoJyknLCAnJywgc3RyX3JlcGxhY2UoJ3JnYmEoJywgJycsIHN0cl9yZXBsYWNlKCcgJywgJycsIGNvbG9yKSkpKS5zcGxpdCgnLCcpO1xuICAgICAgICAgICAgY29sb3IgPSBgIyR7Y29tcG9uZW50VG9IZXgocGFyc2VJbnQocmdiX2FycmF5WzBdLCAxMCkpfSR7Y29tcG9uZW50VG9IZXgocGFyc2VJbnQocmdiX2FycmF5WzFdLCAxMCkpfSR7Y29tcG9uZW50VG9IZXgocGFyc2VJbnQocmdiX2FycmF5WzJdLCAxMCkpfWA7XG5cbiAgICAgICAgICAgIGlmIChyZ2JfYXJyYXkubGVuZ3RoID4gMykge1xuICAgICAgICAgICAgICBvcGFjaXR5ID0gcmdiX2FycmF5WzNdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbG9yID0gc3RyX3JlcGxhY2UoJyMnLCAnJywgY29sb3IpO1xuICAgICAgICAgIHJldHVybiBgdXJsKFwiJHtzdHJfcmVwbGFjZSgnT1BBQ0lUWScsIG9wYWNpdHksIHN0cl9yZXBsYWNlKCdDT0xPUicsIGNvbG9yLCBjdF9sb2NhbGl6YXRpb25zLmN1c3RvbWl6ZXJfc3luYy5zdmdfcGF0dGVybnNbYmFja2dyb3VuZF9wYXR0ZXJuXSB8fCBjdF9sb2NhbGl6YXRpb25zLmN1c3RvbWl6ZXJfc3luYy5zdmdfcGF0dGVybnNbJ3R5cGUtMSddKSl9XCIpYDtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9LCBhZGRUb0Rlc2NyaXB0b3JzKSwgX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHtcbiAgICAgIHZhcmlhYmxlOiAnYmFja2dyb3VuZC1wb3NpdGlvbicsXG4gICAgICB2YXJpYWJsZVR5cGU6ICdwcm9wZXJ0eScsXG4gICAgICBzZWxlY3RvcixcbiAgICAgIHJlc3BvbnNpdmVcbiAgICB9LCBhZGRUb0Rlc2NyaXB0b3JzKSwge30sIHtcbiAgICAgIGV4dHJhY3RWYWx1ZTogdmFsdWUgPT4gd2l0aFJlc3BvbnNpdmUoe1xuICAgICAgICB2YWx1ZTogdmFsdWVFeHRyYWN0b3IodmFsdWUpLFxuICAgICAgICByZXNwb25zaXZlLFxuICAgICAgICBjYjogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGxldCB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kX3R5cGUsXG4gICAgICAgICAgICBiYWNrZ3JvdW5kX2ltYWdlXG4gICAgICAgICAgfSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge307XG5cbiAgICAgICAgICBpZiAoYmFja2dyb3VuZF90eXBlICE9PSAnaW1hZ2UnKSB7XG4gICAgICAgICAgICByZXR1cm4gJ0NUX0NTU19TS0lQX1JVTEUnO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBgJHtNYXRoLnJvdW5kKHBhcnNlRmxvYXQoYmFja2dyb3VuZF9pbWFnZS54IHx8IDApICogMTAwKX0lICR7TWF0aC5yb3VuZChwYXJzZUZsb2F0KGJhY2tncm91bmRfaW1hZ2UueSB8fCAwKSAqIDEwMCl9JWA7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSksIF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7XG4gICAgICB2YXJpYWJsZTogJ2JhY2tncm91bmQtc2l6ZScsXG4gICAgICB2YXJpYWJsZVR5cGU6ICdwcm9wZXJ0eScsXG4gICAgICBzZWxlY3RvcixcbiAgICAgIHJlc3BvbnNpdmVcbiAgICB9LCBhZGRUb0Rlc2NyaXB0b3JzKSwge30sIHtcbiAgICAgIGV4dHJhY3RWYWx1ZTogdmFsdWUgPT4gd2l0aFJlc3BvbnNpdmUoe1xuICAgICAgICB2YWx1ZTogdmFsdWVFeHRyYWN0b3IodmFsdWUpLFxuICAgICAgICByZXNwb25zaXZlLFxuICAgICAgICBjYjogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGxldCB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kX3R5cGUsXG4gICAgICAgICAgICBiYWNrZ3JvdW5kX3NpemVcbiAgICAgICAgICB9ID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcblxuICAgICAgICAgIGlmIChiYWNrZ3JvdW5kX3R5cGUgIT09ICdpbWFnZScpIHtcbiAgICAgICAgICAgIHJldHVybiAnQ1RfQ1NTX1NLSVBfUlVMRSc7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGJhY2tncm91bmRfc2l6ZTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9KSwgX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHtcbiAgICAgIHZhcmlhYmxlOiAnYmFja2dyb3VuZC1hdHRhY2htZW50JyxcbiAgICAgIHZhcmlhYmxlVHlwZTogJ3Byb3BlcnR5JyxcbiAgICAgIHNlbGVjdG9yLFxuICAgICAgcmVzcG9uc2l2ZVxuICAgIH0sIGFkZFRvRGVzY3JpcHRvcnMpLCB7fSwge1xuICAgICAgZXh0cmFjdFZhbHVlOiB2YWx1ZSA9PiB3aXRoUmVzcG9uc2l2ZSh7XG4gICAgICAgIHZhbHVlOiB2YWx1ZUV4dHJhY3Rvcih2YWx1ZSksXG4gICAgICAgIHJlc3BvbnNpdmUsXG4gICAgICAgIGNiOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgbGV0IHtcbiAgICAgICAgICAgIGJhY2tncm91bmRfdHlwZSxcbiAgICAgICAgICAgIGJhY2tncm91bmRfYXR0YWNobWVudFxuICAgICAgICAgIH0gPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9O1xuXG4gICAgICAgICAgaWYgKGJhY2tncm91bmRfdHlwZSAhPT0gJ2ltYWdlJykge1xuICAgICAgICAgICAgcmV0dXJuICdDVF9DU1NfU0tJUF9SVUxFJztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gYmFja2dyb3VuZF9hdHRhY2htZW50O1xuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0pLCBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe1xuICAgICAgc2VsZWN0b3IsXG4gICAgICB2YXJpYWJsZTogJ2JhY2tncm91bmQtcmVwZWF0JyxcbiAgICAgIHZhcmlhYmxlVHlwZTogJ3Byb3BlcnR5JyxcbiAgICAgIHJlc3BvbnNpdmVcbiAgICB9LCBhZGRUb0Rlc2NyaXB0b3JzKSwge30sIHtcbiAgICAgIGV4dHJhY3RWYWx1ZTogdmFsdWUgPT4gd2l0aFJlc3BvbnNpdmUoe1xuICAgICAgICB2YWx1ZTogdmFsdWVFeHRyYWN0b3IodmFsdWUpLFxuICAgICAgICByZXNwb25zaXZlLFxuICAgICAgICBjYjogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGxldCB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kX3R5cGUsXG4gICAgICAgICAgICBiYWNrZ3JvdW5kX3JlcGVhdFxuICAgICAgICAgIH0gPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9O1xuXG4gICAgICAgICAgaWYgKGJhY2tncm91bmRfdHlwZSAhPT0gJ2ltYWdlJykge1xuICAgICAgICAgICAgcmV0dXJuICdDVF9DU1NfU0tJUF9SVUxFJztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoYmFja2dyb3VuZF9yZXBlYXQgPT09ICdyZXBlYXQnKSB7XG4gICAgICAgICAgICByZXR1cm4gJ0NUX0NTU19TS0lQX1JVTEUnO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBiYWNrZ3JvdW5kX3JlcGVhdDtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9KV1cbiAgfTtcbn07XG5leHBvcnQgY29uc3QgZ2V0QmFja2dyb3VuZFZhcmlhYmxlc0ZvciA9ICgpID0+IF9vYmplY3RTcHJlYWQoe30sIGhhbmRsZUJhY2tncm91bmRPcHRpb25Gb3Ioe1xuICBpZDogJ3NpdGVfYmFja2dyb3VuZCcsXG4gIHNlbGVjdG9yOiAnYm9keScsXG4gIHJlc3BvbnNpdmU6IHRydWVcbn0pKTsiLCJmdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgZW51bWVyYWJsZU9ubHkgJiYgKHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KSksIGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gbnVsbCAhPSBhcmd1bWVudHNbaV0gPyBhcmd1bWVudHNbaV0gOiB7fTsgaSAlIDIgPyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKSA6IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG5pbXBvcnQgY3RFdmVudHMgZnJvbSAnY3QtZXZlbnRzJztcbmltcG9ydCB7IHNob3J0ZW5JdGVtSWQsIGdldE9yaWdpbmFsSWQgfSBmcm9tICcuLi9wYW5lbHMtYnVpbGRlci9wbGFjZW1lbnRzL2hlbHBlcnMnO1xuZXhwb3J0IGNvbnN0IGFzc2VtYmxlU2VsZWN0b3IgPSBzZWxlY3RvciA9PiBBcnJheS5pc0FycmF5KHNlbGVjdG9yKSA/IHNlbGVjdG9yLmpvaW4oJyAnKSA6IHNlbGVjdG9yO1xuZXhwb3J0IGNvbnN0IG11dGF0ZVNlbGVjdG9yID0gZnVuY3Rpb24gKCkge1xuICBsZXQgYXJncyA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge307XG4gIGFyZ3MgPSBfb2JqZWN0U3ByZWFkKHtcbiAgICBzZWxlY3RvcjogbnVsbCxcbiAgICAvLyBwcmVmaXggfCBzdWZmaXggfCBiZXR3ZWVuIHwgcmVwbGFjZS1sYXN0XG4gICAgb3BlcmF0aW9uOiAnYmV0d2VlbicsXG4gICAgdG9fYWRkOiAnJ1xuICB9LCBhcmdzKTtcblxuICBpZiAoYXJncy5vcGVyYXRpb24gPT09ICdiZXR3ZWVuJykge1xuICAgIGxldCBbZmlyc3QsIC4uLnJlc3RdID0gYXJncy5zZWxlY3RvcjtcbiAgICByZXR1cm4gW2ZpcnN0LCBhcmdzLnRvX2FkZCwgLi4ucmVzdF07XG4gIH1cblxuICBpZiAoYXJncy5vcGVyYXRpb24gPT09ICdlbC1wcmVmaXgnICYmIGFyZ3Muc2VsZWN0b3IubGVuZ3RoID4gMSkge1xuICAgIGxldCBbZmlyc3QsIHNlY29uZCwgLi4ucmVzdF0gPSBhcmdzLnNlbGVjdG9yO1xuICAgIHJldHVybiBbZmlyc3QsIGAke2FyZ3MudG9fYWRkfSR7c2Vjb25kfWAsIC4uLnJlc3RdO1xuICB9XG5cbiAgaWYgKGFyZ3Mub3BlcmF0aW9uID09PSAnZWwtc3VmZml4JyAmJiBhcmdzLnNlbGVjdG9yLmxlbmd0aCA+IDEpIHtcbiAgICBsZXQgW2ZpcnN0LCBzZWNvbmQsIC4uLnJlc3RdID0gYXJncy5zZWxlY3RvcjtcbiAgICByZXR1cm4gW2ZpcnN0LCBgJHtzZWNvbmR9JHthcmdzLnRvX2FkZH1gLCAuLi5yZXN0XTtcbiAgfVxuXG4gIGlmIChhcmdzLm9wZXJhdGlvbiA9PT0gJ2NvbnRhaW5lci1zdWZmaXgnKSB7XG4gICAgbGV0IFtmaXJzdCwgLi4ucmVzdF0gPSBhcmdzLnNlbGVjdG9yO1xuICAgIHJldHVybiBbYCR7Zmlyc3R9JHthcmdzLnRvX2FkZH1gLCAuLi5yZXN0XTtcbiAgfVxuXG4gIGlmIChhcmdzLm9wZXJhdGlvbiA9PT0gJ3N1ZmZpeCcpIHtcbiAgICByZXR1cm4gWy4uLmFyZ3Muc2VsZWN0b3IsIGFyZ3MudG9fYWRkXTtcbiAgfVxuXG4gIGlmIChhcmdzLm9wZXJhdGlvbiA9PT0gJ3ByZWZpeCcpIHtcbiAgICByZXR1cm4gW2FyZ3MudG9fYWRkLCAuLi5hcmdzLnNlbGVjdG9yXTtcbiAgfVxuXG4gIGlmIChhcmdzLm9wZXJhdGlvbiA9PT0gJ3JlcGxhY2UtbGFzdCcpIHtcbiAgICBsZXQgbGFzdCA9IGFyZ3Muc2VsZWN0b3IucG9wKCk7XG4gICAgcmV0dXJuIFsuLi5hcmdzLnNlbGVjdG9yLCBhcmdzLnRvX2FkZF07XG4gIH1cblxuICByZXR1cm4gYXJncy5zZWxlY3Rvcjtcbn07XG5leHBvcnQgY29uc3QgZ2V0Q29sdW1uU2VsZWN0b3JGb3IgPSBmdW5jdGlvbiAoKSB7XG4gIGxldCBhcmdzID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcbiAgYXJncyA9IF9vYmplY3RTcHJlYWQoe1xuICAgIGl0ZW1JZDogbnVsbFxuICB9LCBhcmdzKTtcbiAgbGV0IHJlc3VsdCA9IGdldE9yaWdpbmFsSWQoYXJncy5pdGVtSWQpO1xuXG4gIGlmIChnZXRPcmlnaW5hbElkKGFyZ3MuaXRlbUlkKSAhPT0gc2hvcnRlbkl0ZW1JZChhcmdzLml0ZW1JZCkpIHtcbiAgICByZXN1bHQgPSBgJHtyZXN1bHR9OiR7c2hvcnRlbkl0ZW1JZChhcmdzLml0ZW1JZCl9YDtcbiAgfVxuXG4gIHJldHVybiBgW2RhdGEtY29sdW1uPVwiJHtyZXN1bHR9XCJdYDtcbn07XG5leHBvcnQgY29uc3QgZ2V0Um9vdFNlbGVjdG9yRm9yID0gZnVuY3Rpb24gKCkge1xuICBsZXQgYXJncyA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge307XG4gIGFyZ3MgPSBfb2JqZWN0U3ByZWFkKHtcbiAgICAvLyBoZWFkZXIgfCBmb290ZXJcbiAgICBwYW5lbFR5cGU6ICdoZWFkZXInLFxuICAgIGl0ZW1JZDogbnVsbFxuICB9LCBhcmdzKTtcbiAgbGV0IHNlbGVjdG9yID0gJyc7XG5cbiAgaWYgKGFyZ3MuaXRlbUlkKSB7XG4gICAgc2VsZWN0b3IgPSBgW2RhdGEtaWQ9XCIke2FyZ3MuaXRlbUlkfVwiXWA7XG5cbiAgICBpZiAoWydtaWRkbGUtcm93JywgJ3RvcC1yb3cnLCAnYm90dG9tLXJvdyddLmluZGV4T2YoYXJncy5pdGVtSWQpID4gLTEpIHtcbiAgICAgIHNlbGVjdG9yID0gYFtkYXRhLXJvdyo9XCIke2FyZ3MuaXRlbUlkLnJlcGxhY2UoJy1yb3cnLCAnJyl9XCJdYDtcbiAgICB9XG5cbiAgICBpZiAoYXJncy5pdGVtSWQgPT09ICdzb2NpYWxzJykge1xuICAgICAgc2VsZWN0b3IgPSBgJHtzZWxlY3Rvcn0uY3QtJHthcmdzLnBhbmVsVHlwZX0tc29jaWFsc2A7XG4gICAgfVxuXG4gICAgaWYgKGFyZ3MuaXRlbUlkID09PSAnb2ZmY2FudmFzJykge1xuICAgICAgc2VsZWN0b3IgPSAnI29mZmNhbnZhcyc7XG4gICAgfVxuICB9XG5cbiAgbGV0IHNlY3Rpb24gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGFyZ3MucGFuZWxUeXBlID09PSAnaGVhZGVyJyA/ICdoZWFkZXIjaGVhZGVyJyA6ICdmb290ZXIuY3QtZm9vdGVyJyk7XG4gIGxldCBoZWFkZXJfcHJlZml4ID0gYFtkYXRhLSR7YXJncy5wYW5lbFR5cGV9Kj1cIiR7c2VjdGlvbiA/IHNlY3Rpb24uZGF0YXNldC5pZCB8fCAndHlwZS0xJyA6ICd0eXBlLTEnfVwiXWA7XG5cbiAgaWYgKGFyZ3MuaXRlbUlkICYmIFsnbWlkZGxlLXJvdycsICd0b3Atcm93JywgJ2JvdHRvbS1yb3cnLCAnbWVudScsICdtZW51LXNlY29uZGFyeScsICdtZW51LXRlcnRpYXJ5JywgJ2xvZ28nLCAnbGFuZ3VhZ2Utc3dpdGNoZXInLCAnYnV0dG9uJywgJ3RleHQnLCAnc2VhcmNoLWlucHV0JywgJ2NvbnRhY3RzJywgJ3dpZGdldC1hcmVhLTEnLCAnd2lkZ2V0LWFyZWEtMicsICd3aWRnZXQtYXJlYS0zJywgJ3dpZGdldC1hcmVhLTQnXS5pbmRleE9mKGFyZ3MuaXRlbUlkKSA+IC0xKSB7XG4gICAgaWYgKGFyZ3MucGFuZWxUeXBlID09PSAnaGVhZGVyJykge1xuICAgICAgaGVhZGVyX3ByZWZpeCA9IGAke2hlYWRlcl9wcmVmaXh9IC5jdC1oZWFkZXJgO1xuICAgIH1cblxuICAgIGlmIChhcmdzLnBhbmVsVHlwZSA9PT0gJ2Zvb3RlcicpIHtcbiAgICAgIGhlYWRlcl9wcmVmaXggPSBgJHtoZWFkZXJfcHJlZml4fSAuY3QtZm9vdGVyYDtcbiAgICB9XG4gIH1cblxuICBpZiAoIXNlbGVjdG9yKSB7XG4gICAgcmV0dXJuIFtoZWFkZXJfcHJlZml4XTtcbiAgfVxuXG4gIHJldHVybiBbaGVhZGVyX3ByZWZpeCwgc2VsZWN0b3JdO1xufTtcbmV4cG9ydCBjb25zdCBhcHBseVByZWZpeEZvciA9IChzZWxlY3RvciwgcHJlZml4KSA9PiB7XG4gIGlmIChwcmVmaXggJiYgcHJlZml4Lmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gYFtkYXRhLXByZWZpeD1cIiR7cHJlZml4fVwiXSAke3NlbGVjdG9yfWA7XG4gIH1cblxuICByZXR1cm4gc2VsZWN0b3I7XG59O1xuZXhwb3J0IGNvbnN0IGdldFByZWZpeEZvciA9IGZ1bmN0aW9uICgpIHtcbiAgbGV0IHtcbiAgICBhbGxvd2VkX3ByZWZpeGVzID0gbnVsbCxcbiAgICBkZWZhdWx0X3ByZWZpeCA9IG51bGxcbiAgfSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge307XG4gIGxldCBhY3R1YWxQcmVmaXggPSBkb2N1bWVudC5ib2R5LmRhdGFzZXQucHJlZml4O1xuXG4gIGlmIChhbGxvd2VkX3ByZWZpeGVzICYmIGFjdHVhbFByZWZpeC5pbmRleE9mKCdfYXJjaGl2ZScpID09PSAtMSAmJiBhbGxvd2VkX3ByZWZpeGVzLmluZGV4T2YoYWN0dWFsUHJlZml4KSA9PT0gLTEpIHtcbiAgICBhY3R1YWxQcmVmaXggPSBkZWZhdWx0X3ByZWZpeDtcbiAgfVxuXG4gIHJldHVybiBhY3R1YWxQcmVmaXg7XG59O1xuZXhwb3J0IGNvbnN0IG1heWJlSW5zZXJ0QmVmb3JlID0gX3JlZiA9PiB7XG4gIGxldCB7XG4gICAgZWwsXG4gICAgc2VsZWN0b3IsXG4gICAgZGVzdGluYXRpb25cbiAgfSA9IF9yZWY7XG5cbiAgaWYgKGRlc3RpbmF0aW9uLnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpKSB7XG4gICAgZGVzdGluYXRpb24uaW5zZXJ0QmVmb3JlKGVsLCBkZXN0aW5hdGlvbi5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKSk7XG4gIH0gZWxzZSB7XG4gICAgZGVzdGluYXRpb24uYXBwZW5kQ2hpbGQoZWwpO1xuICB9XG59O1xuZXhwb3J0IGNvbnN0IHdpdGhLZXlzID0gKGtleXMsIGRlc2NyaXB0b3IpID0+IGtleXMucmVkdWNlKChyZXN1bHQsIGN1cnJlbnRLZXkpID0+IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgcmVzdWx0KSwge30sIHtcbiAgW2N1cnJlbnRLZXldOiBkZXNjcmlwdG9yXG59KSwge30pO1xuZXhwb3J0IGNvbnN0IHNldFJhdGlvRm9yID0gKHJhdGlvLCBlbCkgPT4ge1xuICBsZXQgaW1nRWwgPSBlbC5xdWVyeVNlbGVjdG9yKCdbd2lkdGhdJyk7XG4gIGxldCB0aHVtYl9yYXRpbyA9IHJhdGlvID09PSAnb3JpZ2luYWwnID8gaW1nRWwgPyBbaW1nRWwucGFyZW50Tm9kZS5kYXRhc2V0LncgPyBwYXJzZUludChpbWdFbC5wYXJlbnROb2RlLmRhdGFzZXQudykgOiBpbWdFbC53aWR0aCwgaW1nRWwucGFyZW50Tm9kZS5kYXRhc2V0LmggPyBwYXJzZUludChpbWdFbC5wYXJlbnROb2RlLmRhdGFzZXQuaCkgOiBpbWdFbC5oZWlnaHRdIDogWzEsIDFdIDogKHJhdGlvIHx8ICc0LzMnKS5zcGxpdCgocmF0aW8gfHwgJzQvMycpLmluZGV4T2YoJy8nKSA+IC0xID8gJy8nIDogJzonKTtcbiAgaW1nRWwuc3R5bGUuYXNwZWN0UmF0aW8gPSBgJHt0aHVtYl9yYXRpb1swXSAvIHRodW1iX3JhdGlvWzFdfWA7XG59O1xuZXhwb3J0IGZ1bmN0aW9uIGNoYW5nZVRhZ05hbWUobm9kZSwgbmFtZSkge1xuICB2YXIgcmVuYW1lZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQobmFtZSk7XG4gIFsuLi5ub2RlLmF0dHJpYnV0ZXNdLm1hcChfcmVmMiA9PiB7XG4gICAgbGV0IHtcbiAgICAgIG5hbWUsXG4gICAgICB2YWx1ZVxuICAgIH0gPSBfcmVmMjtcbiAgICByZW5hbWVkLnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG4gIH0pO1xuXG4gIHdoaWxlIChub2RlLmZpcnN0Q2hpbGQpIHtcbiAgICByZW5hbWVkLmFwcGVuZENoaWxkKG5vZGUuZmlyc3RDaGlsZCk7XG4gIH1cblxuICByZXR1cm4gbm9kZS5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChyZW5hbWVkLCBub2RlKTtcbn1cbmV4cG9ydCBjb25zdCBnZXRDYWNoZSA9ICgpID0+IHtcbiAgY29uc3QgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gIGRpdi5pbm5lckhUTUwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuY3QtY3VzdG9taXplci1wcmV2aWV3LWNhY2hlLWNvbnRhaW5lcicpLnZhbHVlO1xuICByZXR1cm4gZGl2O1xufTtcbmV4cG9ydCBjb25zdCBnZXRGcmVzaEh0bWxGb3IgPSBmdW5jdGlvbiAoaWQpIHtcbiAgbGV0IGNhY2hlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBudWxsO1xuICBsZXQgYXR0ciA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogJ2lkJztcblxuICBpZiAoIWNhY2hlKSB7XG4gICAgY2FjaGUgPSBnZXRDYWNoZSgpO1xuICB9XG5cbiAgY29uc3QgbmV3SHRtbCA9IGNhY2hlLnF1ZXJ5U2VsZWN0b3IoYC5jdC1jdXN0b21pemVyLXByZXZpZXctY2FjaGUgW2RhdGEtJHthdHRyfT1cIiR7aWR9XCJdYCkuaW5uZXJIVE1MO1xuICBjb25zdCBlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gIGUuaW5uZXJIVE1MID0gbmV3SHRtbDtcbiAgcmV0dXJuIGU7XG59O1xuZXhwb3J0IGNvbnN0IGNoZWNrQW5kUmVwbGFjZSA9IGZ1bmN0aW9uICgpIHtcbiAgbGV0IGFyZ3MgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9O1xuICBhcmdzID0gX29iamVjdFNwcmVhZCh7XG4gICAgaWQ6IG51bGwsXG4gICAgZnJhZ21lbnRfaWQ6IG51bGwsXG4gICAgc2VsZWN0b3I6IG51bGwsXG4gICAgcGFyZW50X3NlbGVjdG9yOiBudWxsLFxuICAgIC8vIGFwcGVuZCB8IGZpcnN0Q2hpbGQgfCBtYXliZUJlZm9yZTpzZWxlY3RvclxuICAgIHN0cmF0ZWd5OiAnYXBwZW5kJyxcbiAgICB3aGVuSW5zZXJ0ZWQ6ICgpID0+IHt9LFxuICAgIGJlZm9yZUluc2VydDogZWwgPT4ge30sXG4gICAgd2F0Y2g6IFtdLFxuICAgIG9uQ2hhbmdlOiBudWxsXG4gIH0sIGFyZ3MpO1xuXG4gIGNvbnN0IHJlbmRlciA9ICgpID0+IHtcbiAgICBjb25zdCB0byA9IHdwLmN1c3RvbWl6ZShhcmdzLmlkKSgpO1xuXG4gICAgaWYgKGFyZ3Muc3RyYXRlZ3kgPT09ICdoaWRlJykge1xuICAgICAgQXJyYXkuZnJvbShkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGAke2FyZ3MucGFyZW50X3NlbGVjdG9yfSAke2FyZ3Muc2VsZWN0b3J9YCkpLm1hcChlbCA9PiB7XG4gICAgICAgIGVsLnJlbW92ZUF0dHJpYnV0ZSgnZGF0YS1jdXN0b21pemUtaGlkZScpO1xuXG4gICAgICAgIGlmICh0byAhPT0gJ3llcycpIHtcbiAgICAgICAgICBlbC5kYXRhc2V0LmN1c3RvbWl6ZUhpZGUgPSAnJztcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcGFyZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihhcmdzLnBhcmVudF9zZWxlY3Rvcik7XG4gICAgWy4uLmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYCR7YXJncy5wYXJlbnRfc2VsZWN0b3J9ICR7YXJncy5zZWxlY3Rvcn1gKV0ubWFwKGVsID0+IGVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZWwpKTtcbiAgICBpZiAodG8gIT09ICd5ZXMnKSByZXR1cm47XG4gICAgY29uc3QgZWwgPSBnZXRGcmVzaEh0bWxGb3IoYXJncy5mcmFnbWVudF9pZCk7XG5cbiAgICB3aGlsZSAoZWwuZmlyc3RFbGVtZW50Q2hpbGQpIHtcbiAgICAgIGFyZ3MuYmVmb3JlSW5zZXJ0KGVsLmZpcnN0RWxlbWVudENoaWxkKTtcblxuICAgICAgaWYgKGFyZ3Muc3RyYXRlZ3kgPT09ICdhcHBlbmQnKSB7XG4gICAgICAgIHBhcmVudC5hcHBlbmRDaGlsZChlbC5maXJzdEVsZW1lbnRDaGlsZCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChhcmdzLnN0cmF0ZWd5ID09PSAnZmlyc3RDaGlsZCcpIHtcbiAgICAgICAgcGFyZW50Lmluc2VydEJlZm9yZShlbC5maXJzdEVsZW1lbnRDaGlsZCwgcGFyZW50LmZpcnN0RWxlbWVudENoaWxkKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGFyZ3Muc3RyYXRlZ3kuaW5kZXhPZignbWF5YmVCZWZvcmUnKSA+IC0xKSB7XG4gICAgICAgIGNvbnN0IFtfLCBzZWxlY3Rvcl0gPSBhcmdzLnN0cmF0ZWd5LnNwbGl0KCc6Jyk7XG5cbiAgICAgICAgaWYgKHBhcmVudC5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKSkge1xuICAgICAgICAgIHBhcmVudC5pbnNlcnRCZWZvcmUoZWwuZmlyc3RFbGVtZW50Q2hpbGQsIHBhcmVudC5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGFyZW50LmFwcGVuZENoaWxkKGVsLmZpcnN0RWxlbWVudENoaWxkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGFyZ3Mud2hlbkluc2VydGVkKCk7XG4gIH07XG5cbiAgd3AuY3VzdG9taXplKGFyZ3MuaWQsIHZhbCA9PiB2YWwuYmluZCh0byA9PiByZW5kZXIoKSkpO1xuICBhcmdzLndhdGNoLm1hcChvcHQgPT4gd3AuY3VzdG9taXplKG9wdCwgdmFsID0+IHZhbC5iaW5kKCgpID0+IHJlbmRlcigpKSkpO1xufTtcbmV4cG9ydCBjb25zdCBnZXRPcHRpb25Gb3IgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIGxldCBwcmVmaXggPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6ICcnO1xuICBjb25zdCBpZCA9IGAke3ByZWZpeH0ke3ByZWZpeC5sZW5ndGggPiAwID8gJ18nIDogJyd9JHtrZXl9YDtcblxuICBpZiAod3AuY3VzdG9taXplKGlkKSkge1xuICAgIHJldHVybiB3cC5jdXN0b21pemUoaWQpKCk7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59O1xuZXhwb3J0IGNvbnN0IHdhdGNoT3B0aW9uc1dpdGhQcmVmaXggPSBmdW5jdGlvbiAoKSB7XG4gIGxldCBhcmdzID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcbiAgY29uc3Qge1xuICAgIGdldFByZWZpeCA9IGdldFByZWZpeEZvcixcbiAgICBnZXRPcHRpb25zRm9yUHJlZml4ID0gX3JlZjMgPT4ge1xuICAgICAgbGV0IHtcbiAgICAgICAgcHJlZml4XG4gICAgICB9ID0gX3JlZjM7XG4gICAgICByZXR1cm4gW107XG4gICAgfSxcbiAgICByZW5kZXIgPSAoKSA9PiB7fSxcbiAgICBldmVudHMgPSBbXVxuICB9ID0gYXJncztcbiAgbGV0IHByZWZpeCA9IGdldFByZWZpeCgpO1xuICBldmVudHMubWFwKGV2dCA9PiBjdEV2ZW50cy5vbihldnQsICgpID0+IHJlbmRlcih7XG4gICAgcHJlZml4XG4gIH0pKSk7XG4gIGdldE9wdGlvbnNGb3JQcmVmaXgoe1xuICAgIHByZWZpeFxuICB9KS5tYXAoaWQgPT4gd3AuY3VzdG9taXplKGlkLCB2YWwgPT4gdmFsLmJpbmQodG8gPT4gcmVuZGVyKHtcbiAgICBwcmVmaXgsXG4gICAgaWRcbiAgfSkpKSk7XG59O1xuZXhwb3J0IGNvbnN0IGhhbmRsZVJlc3BvbnNpdmVTd2l0Y2ggPSBfcmVmNCA9PiB7XG4gIGxldCB7XG4gICAgc2VsZWN0b3IsXG4gICAgdmFyaWFibGUgPSAndmlzaWJpbGl0eScsXG4gICAgb24gPSAnYmxvY2snLFxuICAgIG9mZiA9ICdub25lJ1xuICB9ID0gX3JlZjQ7XG4gIHJldHVybiB7XG4gICAgc2VsZWN0b3IsXG4gICAgdmFyaWFibGUsXG4gICAgcmVzcG9uc2l2ZTogdHJ1ZSxcbiAgICBleHRyYWN0VmFsdWU6IF9yZWY1ID0+IHtcbiAgICAgIGxldCB7XG4gICAgICAgIG1vYmlsZSxcbiAgICAgICAgdGFibGV0LFxuICAgICAgICBkZXNrdG9wXG4gICAgICB9ID0gX3JlZjU7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBtb2JpbGU6IG1vYmlsZSA/IG9uIDogb2ZmLFxuICAgICAgICB0YWJsZXQ6IHRhYmxldCA/IG9uIDogb2ZmLFxuICAgICAgICBkZXNrdG9wOiBkZXNrdG9wID8gb24gOiBvZmZcbiAgICAgIH07XG4gICAgfVxuICB9O1xufTtcbmV4cG9ydCBjb25zdCByZXNwb25zaXZlQ2xhc3Nlc0ZvciA9IChkYXRhLCBlbCkgPT4ge1xuICBlbC5jbGFzc0xpc3QucmVtb3ZlKCdjdC1oaWRkZW4tc20nLCAnY3QtaGlkZGVuLW1kJywgJ2N0LWhpZGRlbi1sZycpO1xuXG4gIGlmICh0eXBlb2YgZGF0YSAhPT0gJ29iamVjdCcpIHtcbiAgICBpZiAoIXdwLmN1c3RvbWl6ZShkYXRhKSkgcmV0dXJuO1xuICAgIGRhdGEgPSB3cC5jdXN0b21pemUoZGF0YSkoKSB8fCB7XG4gICAgICBtb2JpbGU6IGZhbHNlLFxuICAgICAgdGFibGV0OiB0cnVlLFxuICAgICAgZGVza3RvcDogdHJ1ZVxuICAgIH07XG4gIH1cblxuICBpZiAoIWRhdGEubW9iaWxlKSB7XG4gICAgZWwuY2xhc3NMaXN0LmFkZCgnY3QtaGlkZGVuLXNtJyk7XG4gIH1cblxuICBpZiAoIWRhdGEudGFibGV0KSB7XG4gICAgZWwuY2xhc3NMaXN0LmFkZCgnY3QtaGlkZGVuLW1kJyk7XG4gIH1cblxuICBpZiAoIWRhdGEuZGVza3RvcCkge1xuICAgIGVsLmNsYXNzTGlzdC5hZGQoJ2N0LWhpZGRlbi1sZycpO1xuICB9XG59O1xuZXhwb3J0IGNvbnN0IHJlcGxhY2VGaXJzdFRleHROb2RlID0gKGVsLCBuZXdUZXh0KSA9PiB7XG4gIGxldCB0ZXh0Tm9kZSA9IFsuLi5lbC5jaGlsZE5vZGVzXS5maW5kKGVsbSA9PiBlbG0ubm9kZVR5cGUgIT0gMSAmJiBlbG0udGV4dENvbnRlbnQudHJpbSgpLmxlbmd0aCAhPT0gMCk7XG5cbiAgaWYgKCF0ZXh0Tm9kZSkge1xuICAgIGVsLmluc2VydEFkamFjZW50VGV4dCgnYWZ0ZXJiZWdpbicsIG5ld1RleHQpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHRleHROb2RlLnRleHRDb250ZW50ID0gYCR7bmV3VGV4dH0ke1N0cmluZy5mcm9tQ2hhckNvZGUoMTYwKX1gO1xufTtcbmV4cG9ydCBjb25zdCBkaXNhYmxlVHJhbnNpdGlvbnNTdGFydCA9IGVsID0+IHtcbiAgQXJyYXkuZnJvbShlbCkubWFwKGVsID0+IHtcbiAgICBlbC5jbGFzc0xpc3QuYWRkKCdjdC1kaXNhYmxlLXRyYW5zaXRpb25zJyk7XG4gIH0pO1xufTtcbmV4cG9ydCBjb25zdCBkaXNhYmxlVHJhbnNpdGlvbnNFbmQgPSBlbCA9PiB7XG4gIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIEFycmF5LmZyb20oZWwpLm1hcChlbCA9PiB7XG4gICAgICBlbC5jbGFzc0xpc3QucmVtb3ZlKCdjdC1kaXNhYmxlLXRyYW5zaXRpb25zJyk7XG4gICAgfSk7XG4gIH0sIDUwKTtcbn07XG5leHBvcnQgY29uc3QgbWFwVmFsdWUgPSBmdW5jdGlvbiAoKSB7XG4gIGxldCBhcmdzID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcbiAgYXJncyA9IF9vYmplY3RTcHJlYWQoe1xuICAgIHZhbHVlOiB7fSxcbiAgICBtYXA6IHt9XG4gIH0sIGFyZ3MpO1xuXG4gIGlmIChhcmdzLnZhbHVlLmRlc2t0b3AgJiYgYXJncy5tYXBbYXJncy52YWx1ZS5kZXNrdG9wXSkge1xuICAgIGFyZ3MudmFsdWUuZGVza3RvcCA9IGFyZ3MubWFwW2FyZ3MudmFsdWUuZGVza3RvcF07XG4gIH1cblxuICBpZiAoYXJncy52YWx1ZS50YWJsZXQgJiYgYXJncy5tYXBbYXJncy52YWx1ZS50YWJsZXRdKSB7XG4gICAgYXJncy52YWx1ZS50YWJsZXQgPSBhcmdzLm1hcFthcmdzLnZhbHVlLnRhYmxldF07XG4gIH1cblxuICBpZiAoYXJncy52YWx1ZS5tb2JpbGUgJiYgYXJncy5tYXBbYXJncy52YWx1ZS5tb2JpbGVdKSB7XG4gICAgYXJncy52YWx1ZS5tb2JpbGUgPSBhcmdzLm1hcFthcmdzLnZhbHVlLm1vYmlsZV07XG4gIH1cblxuICBpZiAoYXJncy5tYXBbYXJncy52YWx1ZV0pIHtcbiAgICByZXR1cm4gYXJncy5tYXBbYXJncy52YWx1ZV07XG4gIH1cblxuICByZXR1cm4gYXJncy52YWx1ZTtcbn07IiwiZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGVudW1lcmFibGVPbmx5ICYmIChzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSkpLCBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IG51bGwgIT0gYXJndW1lbnRzW2ldID8gYXJndW1lbnRzW2ldIDoge307IGkgJSAyID8gb3duS2V5cyhPYmplY3Qoc291cmNlKSwgITApLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSkgOiBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuaW1wb3J0IHsgaGFuZGxlQmFja2dyb3VuZE9wdGlvbkZvciB9IGZyb20gJy4uL2N1c3RvbWl6ZXIvc3luYy92YXJpYWJsZXMvYmFja2dyb3VuZCc7XG5pbXBvcnQgeyB3aXRoS2V5cyB9IGZyb20gJy4uL2N1c3RvbWl6ZXIvc3luYy9oZWxwZXJzJztcbmltcG9ydCB7IG1heWJlUHJvbW90ZVNjYWxhclZhbHVlSW50b1Jlc3BvbnNpdmUgfSBmcm9tICdjdXN0b21pemVyLXN5bmMtaGVscGVycy9kaXN0L3Byb21vdGUtaW50by1yZXNwb25zaXZlJztcbmNvbnN0IGlzQ29udGVudEJsb2NrID0gZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuY29udGFpbnMoJ3Bvc3QtdHlwZS1jdF9jb250ZW50X2Jsb2NrJyk7XG5leHBvcnQgY29uc3QgZ3V0ZW5iZXJnVmFyaWFibGVzID0gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBoYW5kbGVCYWNrZ3JvdW5kT3B0aW9uRm9yKHtcbiAgaWQ6ICdiYWNrZ3JvdW5kJyxcbiAgc2VsZWN0b3I6ICcuZWRpdC1wb3N0LXZpc3VhbC1lZGl0b3JfX2NvbnRlbnQtYXJlYSA+IGRpdicsXG4gIHJlc3BvbnNpdmU6IHRydWUsXG4gIGFkZFRvRGVzY3JpcHRvcnM6IHtcbiAgICBmdWxsVmFsdWU6IHRydWUsXG4gICAgaW1wb3J0YW50OiB0cnVlXG4gIH0sXG4gIHZhbHVlRXh0cmFjdG9yOiBfcmVmID0+IHtcbiAgICBsZXQge1xuICAgICAgYmFja2dyb3VuZFxuICAgIH0gPSBfcmVmO1xuXG4gICAgaWYgKCFiYWNrZ3JvdW5kLmRlc2t0b3AgJiYgIWlzQ29udGVudEJsb2NrICYmIGJhY2tncm91bmQuYmFja2dyb3VuZF90eXBlID09PSAnY29sb3InICYmIGJhY2tncm91bmQuYmFja2dyb3VuZENvbG9yLmRlZmF1bHQuY29sb3IgJiYgYmFja2dyb3VuZC5iYWNrZ3JvdW5kQ29sb3IuZGVmYXVsdC5jb2xvci5pbmRleE9mKCdDVF9DU1NfU0tJUF9SVUxFJykgPiAtMSkge1xuICAgICAgcmV0dXJuIGN0X2VkaXRvcl9sb2NhbGl6YXRpb25zLmRlZmF1bHRfYmFja2dyb3VuZDtcbiAgICB9XG5cbiAgICByZXR1cm4gYmFja2dyb3VuZDtcbiAgfVxufSkpLCB3aXRoS2V5cyhbJ2NvbnRlbnRfc3R5bGVfc291cmNlJywgJ2NvbnRlbnRfc3R5bGUnLCAnY29udGVudF9iYWNrZ3JvdW5kJywgJ2NvbnRlbnRfYm94ZWRfc2hhZG93JywgJ2JveGVkX2NvbnRlbnRfc3BhY2luZycsICdjb250ZW50X2JveGVkX3JhZGl1cycsIC4uLihpc0NvbnRlbnRCbG9jayA/IFsnaGFzX2NvbnRlbnRfYmxvY2tfc3RydWN0dXJlJywgJ3RlbXBsYXRlX3N1YnR5cGUnLCAndGVtcGxhdGVfZWRpdG9yX3dpZHRoX3NvdXJjZScsICd0ZW1wbGF0ZV9lZGl0b3Jfd2lkdGgnXSA6IFtdKV0sIFt7XG4gIHNlbGVjdG9yOiBgLmVkaXRvci1zdHlsZXMtd3JhcHBlcmAsXG4gIHZhcmlhYmxlOiAnYmxvY2stbWF4LXdpZHRoJyxcbiAgZXh0cmFjdFZhbHVlOiBfcmVmMiA9PiB7XG4gICAgbGV0IHtcbiAgICAgIHRlbXBsYXRlX3N1YnR5cGUsXG4gICAgICB0ZW1wbGF0ZV9lZGl0b3Jfd2lkdGhfc291cmNlID0gJ3NtYWxsJyxcbiAgICAgIHRlbXBsYXRlX2VkaXRvcl93aWR0aCA9IDEyOTBcbiAgICB9ID0gX3JlZjI7XG5cbiAgICBpZiAoIXRlbXBsYXRlX3N1YnR5cGUpIHtcbiAgICAgIHJldHVybiAnQ1RfQ1NTX1NLSVBfUlVMRSc7XG4gICAgfVxuXG4gICAgaWYgKHRlbXBsYXRlX3N1YnR5cGUgIT09ICdjYXJkJykge1xuICAgICAgcmV0dXJuICdDVF9DU1NfU0tJUF9SVUxFJztcbiAgICB9XG5cbiAgICBpZiAodGVtcGxhdGVfZWRpdG9yX3dpZHRoX3NvdXJjZSA9PT0gJ3NtYWxsJykge1xuICAgICAgcmV0dXJuIDUwMDtcbiAgICB9XG5cbiAgICBpZiAodGVtcGxhdGVfZWRpdG9yX3dpZHRoX3NvdXJjZSA9PT0gJ21lZGl1bScpIHtcbiAgICAgIHJldHVybiA5MDA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRlbXBsYXRlX2VkaXRvcl93aWR0aDtcbiAgfSxcbiAgZnVsbFZhbHVlOiB0cnVlLFxuICB1bml0OiAncHgnLFxuICBpbXBvcnRhbnQ6IHRydWVcbn0sIHtcbiAgc2VsZWN0b3I6IGAuZWRpdG9yLXN0eWxlcy13cmFwcGVyYCxcbiAgdmFyaWFibGU6ICdoYXMtYm94ZWQnLFxuICByZXNwb25zaXZlOiB0cnVlLFxuICBleHRyYWN0VmFsdWU6IF9yZWYzID0+IHtcbiAgICBsZXQge1xuICAgICAgdGVtcGxhdGVfc3VidHlwZSxcbiAgICAgIGNvbnRlbnRfc3R5bGVfc291cmNlID0gJ2luaGVyaXQnLFxuICAgICAgaGFzX2NvbnRlbnRfYmxvY2tfc3RydWN0dXJlID0gJ3llcycsXG4gICAgICBjb250ZW50X3N0eWxlID0gJ3dpZGUnXG4gICAgfSA9IF9yZWYzO1xuXG4gICAgaWYgKCFpc0NvbnRlbnRCbG9jayAmJiBjb250ZW50X3N0eWxlX3NvdXJjZSA9PT0gJ2luaGVyaXQnKSB7XG4gICAgICBjb250ZW50X3N0eWxlID0gY3RfZWRpdG9yX2xvY2FsaXphdGlvbnMuZGVmYXVsdF9jb250ZW50X3N0eWxlO1xuICAgIH1cblxuICAgIGNvbnRlbnRfc3R5bGUgPSBtYXliZVByb21vdGVTY2FsYXJWYWx1ZUludG9SZXNwb25zaXZlKGNvbnRlbnRfc3R5bGUpO1xuXG4gICAgaWYgKGlzQ29udGVudEJsb2NrICYmIChoYXNfY29udGVudF9ibG9ja19zdHJ1Y3R1cmUgIT09ICd5ZXMnIHx8IHRlbXBsYXRlX3N1YnR5cGUgPT09ICdjYXJkJykpIHtcbiAgICAgIGNvbnRlbnRfc3R5bGUgPSB7XG4gICAgICAgIGRlc2t0b3A6ICd3aWRlJyxcbiAgICAgICAgdGFibGV0OiAnd2lkZScsXG4gICAgICAgIG1vYmlsZTogJ3dpZGUnXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBkZXNrdG9wOiBjb250ZW50X3N0eWxlLmRlc2t0b3AgPT09ICdib3hlZCcgPyAndmFyKC0tdHJ1ZSknIDogJ3ZhcigtLWZhbHNlKScsXG4gICAgICB0YWJsZXQ6IGNvbnRlbnRfc3R5bGUudGFibGV0ID09PSAnYm94ZWQnID8gJ3ZhcigtLXRydWUpJyA6ICd2YXIoLS1mYWxzZSknLFxuICAgICAgbW9iaWxlOiBjb250ZW50X3N0eWxlLm1vYmlsZSA9PT0gJ2JveGVkJyA/ICd2YXIoLS10cnVlKScgOiAndmFyKC0tZmFsc2UpJ1xuICAgIH07XG4gIH0sXG4gIGZ1bGxWYWx1ZTogdHJ1ZSxcbiAgdW5pdDogJydcbn0sIHtcbiAgc2VsZWN0b3I6IGAuZWRpdG9yLXN0eWxlcy13cmFwcGVyYCxcbiAgdmFyaWFibGU6ICdoYXMtd2lkZScsXG4gIHJlc3BvbnNpdmU6IHRydWUsXG4gIGV4dHJhY3RWYWx1ZTogX3JlZjQgPT4ge1xuICAgIGxldCB7XG4gICAgICB0ZW1wbGF0ZV9zdWJ0eXBlLFxuICAgICAgaGFzX2NvbnRlbnRfYmxvY2tfc3RydWN0dXJlID0gJ3llcycsXG4gICAgICBjb250ZW50X3N0eWxlX3NvdXJjZSA9ICdpbmhlcml0JyxcbiAgICAgIGNvbnRlbnRfc3R5bGUgPSAnd2lkZSdcbiAgICB9ID0gX3JlZjQ7XG5cbiAgICBpZiAoIWlzQ29udGVudEJsb2NrICYmIGNvbnRlbnRfc3R5bGVfc291cmNlID09PSAnaW5oZXJpdCcpIHtcbiAgICAgIGNvbnRlbnRfc3R5bGUgPSBjdF9lZGl0b3JfbG9jYWxpemF0aW9ucy5kZWZhdWx0X2NvbnRlbnRfc3R5bGU7XG4gICAgfVxuXG4gICAgY29udGVudF9zdHlsZSA9IG1heWJlUHJvbW90ZVNjYWxhclZhbHVlSW50b1Jlc3BvbnNpdmUoY29udGVudF9zdHlsZSk7XG5cbiAgICBpZiAoaXNDb250ZW50QmxvY2sgJiYgKGhhc19jb250ZW50X2Jsb2NrX3N0cnVjdHVyZSAhPT0gJ3llcycgfHwgdGVtcGxhdGVfc3VidHlwZSA9PT0gJ2NhcmQnKSkge1xuICAgICAgY29udGVudF9zdHlsZSA9IHtcbiAgICAgICAgZGVza3RvcDogJ3dpZGUnLFxuICAgICAgICB0YWJsZXQ6ICd3aWRlJyxcbiAgICAgICAgbW9iaWxlOiAnd2lkZSdcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGRlc2t0b3A6IGNvbnRlbnRfc3R5bGUuZGVza3RvcCA9PT0gJ3dpZGUnID8gJ3ZhcigtLXRydWUpJyA6ICd2YXIoLS1mYWxzZSknLFxuICAgICAgdGFibGV0OiBjb250ZW50X3N0eWxlLnRhYmxldCA9PT0gJ3dpZGUnID8gJ3ZhcigtLXRydWUpJyA6ICd2YXIoLS1mYWxzZSknLFxuICAgICAgbW9iaWxlOiBjb250ZW50X3N0eWxlLm1vYmlsZSA9PT0gJ3dpZGUnID8gJ3ZhcigtLXRydWUpJyA6ICd2YXIoLS1mYWxzZSknXG4gICAgfTtcbiAgfSxcbiAgZnVsbFZhbHVlOiB0cnVlLFxuICB1bml0OiAnJ1xufSwgLi4uaGFuZGxlQmFja2dyb3VuZE9wdGlvbkZvcih7XG4gIGlkOiAnYmFja2dyb3VuZCcsXG4gIHNlbGVjdG9yOiAnLmVkaXRvci1zdHlsZXMtd3JhcHBlcicsXG4gIHJlc3BvbnNpdmU6IHRydWUsXG4gIGNvbmRpdGlvbmFsX3ZhcjogJy0taGFzLWJveGVkJyxcbiAgYWRkVG9EZXNjcmlwdG9yczoge1xuICAgIGZ1bGxWYWx1ZTogdHJ1ZVxuICB9LFxuICB2YWx1ZUV4dHJhY3RvcjogX3JlZjUgPT4ge1xuICAgIGxldCB7XG4gICAgICB0ZW1wbGF0ZV9zdWJ0eXBlLFxuICAgICAgaGFzX2NvbnRlbnRfYmxvY2tfc3RydWN0dXJlID0gJ3llcycsXG4gICAgICBjb250ZW50X3N0eWxlX3NvdXJjZSA9ICdpbmhlcml0JyxcbiAgICAgIGNvbnRlbnRfYmFja2dyb3VuZFxuICAgIH0gPSBfcmVmNTtcblxuICAgIGlmICghaXNDb250ZW50QmxvY2sgJiYgY29udGVudF9zdHlsZV9zb3VyY2UgPT09ICdpbmhlcml0Jykge1xuICAgICAgY29udGVudF9iYWNrZ3JvdW5kID0gY3RfZWRpdG9yX2xvY2FsaXphdGlvbnMuZGVmYXVsdF9jb250ZW50X2JhY2tncm91bmQ7XG4gICAgfVxuXG4gICAgaWYgKGlzQ29udGVudEJsb2NrICYmIChoYXNfY29udGVudF9ibG9ja19zdHJ1Y3R1cmUgIT09ICd5ZXMnIHx8IHRlbXBsYXRlX3N1YnR5cGUgPT09ICdjYXJkJykpIHtcbiAgICAgIGNvbnRlbnRfYmFja2dyb3VuZCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkobWF5YmVQcm9tb3RlU2NhbGFyVmFsdWVJbnRvUmVzcG9uc2l2ZShjb250ZW50X2JhY2tncm91bmQpKSk7XG4gICAgICBjb250ZW50X2JhY2tncm91bmQuZGVza3RvcC5iYWNrZ3JvdW5kX3R5cGUgPSAnY29sb3InO1xuICAgICAgY29udGVudF9iYWNrZ3JvdW5kLmRlc2t0b3AuYmFja2dyb3VuZENvbG9yLmRlZmF1bHQuY29sb3IgPSAnQ1RfQ1NTX1NLSVBfUlVMRSc7XG4gICAgICBjb250ZW50X2JhY2tncm91bmQudGFibGV0LmJhY2tncm91bmRfdHlwZSA9ICdjb2xvcic7XG4gICAgICBjb250ZW50X2JhY2tncm91bmQudGFibGV0LmJhY2tncm91bmRDb2xvci5kZWZhdWx0LmNvbG9yID0gJ0NUX0NTU19TS0lQX1JVTEUnO1xuICAgICAgY29udGVudF9iYWNrZ3JvdW5kLm1vYmlsZS5iYWNrZ3JvdW5kX3R5cGUgPSAnY29sb3InO1xuICAgICAgY29udGVudF9iYWNrZ3JvdW5kLm1vYmlsZS5iYWNrZ3JvdW5kQ29sb3IuZGVmYXVsdC5jb2xvciA9ICdDVF9DU1NfU0tJUF9SVUxFJztcbiAgICB9XG5cbiAgICByZXR1cm4gY29udGVudF9iYWNrZ3JvdW5kO1xuICB9XG59KS5iYWNrZ3JvdW5kLCB7XG4gIHNlbGVjdG9yOiAnLmVkaXRvci1zdHlsZXMtd3JhcHBlcicsXG4gIHR5cGU6ICdzcGFjaW5nJyxcbiAgdmFyaWFibGU6ICdib3hlZC1jb250ZW50LXNwYWNpbmcnLFxuICByZXNwb25zaXZlOiB0cnVlLFxuICB1bml0OiAnJyxcbiAgZnVsbFZhbHVlOiB0cnVlLFxuICBleHRyYWN0VmFsdWU6IF9yZWY2ID0+IHtcbiAgICBsZXQge1xuICAgICAgdGVtcGxhdGVfc3VidHlwZSxcbiAgICAgIGNvbnRlbnRfc3R5bGVfc291cmNlID0gJ2luaGVyaXQnLFxuICAgICAgYm94ZWRfY29udGVudF9zcGFjaW5nLFxuICAgICAgaGFzX2NvbnRlbnRfYmxvY2tfc3RydWN0dXJlID0gJ3llcydcbiAgICB9ID0gX3JlZjY7XG5cbiAgICBpZiAoIWlzQ29udGVudEJsb2NrICYmIGNvbnRlbnRfc3R5bGVfc291cmNlID09PSAnaW5oZXJpdCcpIHtcbiAgICAgIGJveGVkX2NvbnRlbnRfc3BhY2luZyA9IGN0X2VkaXRvcl9sb2NhbGl6YXRpb25zLmRlZmF1bHRfYm94ZWRfY29udGVudF9zcGFjaW5nO1xuICAgIH1cblxuICAgIGlmIChpc0NvbnRlbnRCbG9jayAmJiAoaGFzX2NvbnRlbnRfYmxvY2tfc3RydWN0dXJlICE9PSAneWVzJyB8fCB0ZW1wbGF0ZV9zdWJ0eXBlID09PSAnY2FyZCcpKSB7XG4gICAgICByZXR1cm4gJ0NUX0NTU19TS0lQX1JVTEUnO1xuICAgIH1cblxuICAgIHJldHVybiBib3hlZF9jb250ZW50X3NwYWNpbmc7XG4gIH1cbn0sIHtcbiAgc2VsZWN0b3I6ICcuZWRpdG9yLXN0eWxlcy13cmFwcGVyJyxcbiAgdHlwZTogJ3NwYWNpbmcnLFxuICB2YXJpYWJsZTogJ2JvcmRlci1yYWRpdXMnLFxuICByZXNwb25zaXZlOiB0cnVlLFxuICBmdWxsVmFsdWU6IHRydWUsXG4gIGV4dHJhY3RWYWx1ZTogX3JlZjcgPT4ge1xuICAgIGxldCB7XG4gICAgICB0ZW1wbGF0ZV9zdWJ0eXBlLFxuICAgICAgY29udGVudF9zdHlsZV9zb3VyY2UgPSAnaW5oZXJpdCcsXG4gICAgICBjb250ZW50X2JveGVkX3JhZGl1cyxcbiAgICAgIGhhc19jb250ZW50X2Jsb2NrX3N0cnVjdHVyZSA9ICd5ZXMnXG4gICAgfSA9IF9yZWY3O1xuXG4gICAgaWYgKCFpc0NvbnRlbnRCbG9jayAmJiBjb250ZW50X3N0eWxlX3NvdXJjZSA9PT0gJ2luaGVyaXQnKSB7XG4gICAgICBjb250ZW50X2JveGVkX3JhZGl1cyA9IGN0X2VkaXRvcl9sb2NhbGl6YXRpb25zLmRlZmF1bHRfY29udGVudF9ib3hlZF9yYWRpdXM7XG4gICAgfVxuXG4gICAgaWYgKGlzQ29udGVudEJsb2NrICYmIChoYXNfY29udGVudF9ibG9ja19zdHJ1Y3R1cmUgIT09ICd5ZXMnIHx8IHRlbXBsYXRlX3N1YnR5cGUgPT09ICdjYXJkJykpIHtcbiAgICAgIHJldHVybiAnQ1RfQ1NTX1NLSVBfUlVMRSc7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnRlbnRfYm94ZWRfcmFkaXVzO1xuICB9XG59LCB7XG4gIHNlbGVjdG9yOiAnLmVkaXRvci1zdHlsZXMtd3JhcHBlcicsXG4gIHR5cGU6ICdib3gtc2hhZG93JyxcbiAgdmFyaWFibGU6ICdib3gtc2hhZG93JyxcbiAgcmVzcG9uc2l2ZTogdHJ1ZSxcbiAgZnVsbFZhbHVlOiB0cnVlLFxuICBleHRyYWN0VmFsdWU6IF9yZWY4ID0+IHtcbiAgICBsZXQge1xuICAgICAgdGVtcGxhdGVfc3VidHlwZSxcbiAgICAgIGNvbnRlbnRfc3R5bGVfc291cmNlID0gJ2luaGVyaXQnLFxuICAgICAgY29udGVudF9ib3hlZF9zaGFkb3csXG4gICAgICBoYXNfY29udGVudF9ibG9ja19zdHJ1Y3R1cmUgPSAneWVzJ1xuICAgIH0gPSBfcmVmODtcblxuICAgIGlmICghaXNDb250ZW50QmxvY2sgJiYgY29udGVudF9zdHlsZV9zb3VyY2UgPT09ICdpbmhlcml0Jykge1xuICAgICAgY29udGVudF9ib3hlZF9zaGFkb3cgPSBjdF9lZGl0b3JfbG9jYWxpemF0aW9ucy5kZWZhdWx0X2NvbnRlbnRfYm94ZWRfc2hhZG93O1xuICAgIH1cblxuICAgIGlmIChpc0NvbnRlbnRCbG9jayAmJiAoaGFzX2NvbnRlbnRfYmxvY2tfc3RydWN0dXJlICE9PSAneWVzJyB8fCB0ZW1wbGF0ZV9zdWJ0eXBlID09PSAnY2FyZCcpKSB7XG4gICAgICByZXR1cm4gJ0NUX0NTU19TS0lQX1JVTEUnO1xuICAgIH1cblxuICAgIHJldHVybiBjb250ZW50X2JveGVkX3NoYWRvdztcbiAgfVxufV0pKTsiLCJmdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgZW51bWVyYWJsZU9ubHkgJiYgKHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KSksIGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gbnVsbCAhPSBhcmd1bWVudHNbaV0gPyBhcmd1bWVudHNbaV0gOiB7fTsgaSAlIDIgPyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKSA6IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG5pbXBvcnQgY3RFdmVudHMgZnJvbSAnY3QtZXZlbnRzJztcbmltcG9ydCB7IHNlbGVjdCwgdXNlU2VsZWN0IH0gZnJvbSAnQHdvcmRwcmVzcy9kYXRhJztcbmltcG9ydCB7IHVwZGF0ZVZhcmlhYmxlSW5TdHlsZVRhZ3MsIG92ZXJyaWRlU3R5bGVzV2l0aEFzdCB9IGZyb20gJ2N1c3RvbWl6ZXItc3luYy1oZWxwZXJzJztcbmltcG9ydCB7IGdldFZhbHVlRnJvbUlucHV0IH0gZnJvbSAnYmxvY2tzeS1vcHRpb25zJztcbmltcG9ydCB7IGd1dGVuYmVyZ1ZhcmlhYmxlcyB9IGZyb20gJy4vdmFyaWFibGVzJztcblxubGV0IG9sZEZuID0gd3AuZGF0YS5kaXNwYXRjaCgnY29yZS9lZGl0LXBvc3QnKS5fX2V4cGVyaW1lbnRhbFNldFByZXZpZXdEZXZpY2VUeXBlO1xuXG5sZXQgb2xkRm5Ub2dnbGVGZWF0dXJlID0gd3AuZGF0YS5kaXNwYXRjaCgnY29yZS9lZGl0LXBvc3QnKS50b2dnbGVGZWF0dXJlO1xuXG5jb25zdCBwZXJmb3JtU2VsZWN0b3JzUmVwbGFjZSA9ICgpID0+IHtcbiAgbGV0IGdvb2dsZUZvbnRzVXJsID0gJyc7XG4gIGxldCBtYXliZUdsb2JhbFN0eWxlcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNjdC1tYWluLXN0eWxlcy1pbmxpbmUtY3NzJyk7XG5cbiAgaWYgKG1heWJlR2xvYmFsU3R5bGVzICYmIG1heWJlR2xvYmFsU3R5bGVzLmlubmVyVGV4dC5pbmRleE9mKCdnb29nbGVhcGlzLmNvbScpID4gLTEpIHtcbiAgICBsZXQgZ29vZ2xlRm9udHMgPSBtYXliZUdsb2JhbFN0eWxlcy5pbm5lclRleHQuc3BsaXQoJ2Rpc3BsYXk9c3dhcCcpO1xuICAgIGdvb2dsZUZvbnRzVXJsID0gZ29vZ2xlRm9udHNbMF0udHJpbSgpLnJlcGxhY2UoXCJAaW1wb3J0IHVybCgnXCIsICcnKSArICdkaXNwbGF5PXN3YXAnO1xuICB9XG5cbiAgO1xuICBbLi4uZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnc3R5bGUnKV0ubWFwKHN0eWxlID0+IHtcbiAgICBpZiAoIXN0eWxlLmlubmVyVGV4dCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChzdHlsZS5pbm5lclRleHQuaW5kZXhPZignbmFycm93LWNvbnRhaW5lci1tYXgtd2lkdGgnKSA9PT0gLTEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzdHlsZS5pbm5lclRleHQgPSBzdHlsZS5pbm5lclRleHQucmVwbGFjZSgvXFwuZWRpdG9yLXN0eWxlcy13cmFwcGVyIFxcLmVkaXQtcG9zdC12aXN1YWwtZWRpdG9yX19jb250ZW50LWFyZWEgXFw+IGRpdi9nLCAnLmVkaXQtcG9zdC12aXN1YWwtZWRpdG9yX19jb250ZW50LWFyZWEgPiBkaXYnKTtcbiAgICBzdHlsZS5pbm5lclRleHQgPSBzdHlsZS5pbm5lclRleHQucmVwbGFjZSgnLmVkaXRvci1zdHlsZXMtd3JhcHBlcnJvb3QnLCAnOnJvb3QnKTtcbiAgfSk7XG4gIGNvbnN0IG1heWJlSWZyYW1lID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmVkaXQtcG9zdC12aXN1YWwtZWRpdG9yX19jb250ZW50LWFyZWEgaWZyYW1lW25hbWU9XCJlZGl0b3ItY2FudmFzXCJdJyk7XG5cbiAgaWYgKG1heWJlSWZyYW1lKSB7XG4gICAgO1xuICAgIFsuLi5tYXliZUlmcmFtZS5jb250ZW50RG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnc3R5bGUnKV0ubWFwKHN0eWxlID0+IHtcbiAgICAgIGlmIChzdHlsZS5pbm5lclRleHQuaW5kZXhPZignbmFycm93LWNvbnRhaW5lci1tYXgtd2lkdGgnKSA9PT0gLTEpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoZ29vZ2xlRm9udHNVcmwpIHtcbiAgICAgICAgaWYgKHN0eWxlLmlubmVySFRNTC5pbmRleE9mKGdvb2dsZUZvbnRzVXJsKSA9PT0gLTEpIHtcbiAgICAgICAgICBzdHlsZS5pbm5lckhUTUwgPSBgQGltcG9ydCB1cmwoJyR7Z29vZ2xlRm9udHNVcmx9Jyk7JHtzdHlsZS5pbm5lckhUTUx9YDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBzdHlsZS5pbm5lckhUTUwgPSBzdHlsZS5pbm5lckhUTUwucmVwbGFjZSgvXFwuZWRpdG9yLXN0eWxlcy13cmFwcGVyIFxcLmVkaXQtcG9zdC12aXN1YWwtZWRpdG9yX19jb250ZW50LWFyZWEgXFw+IGRpdi9nLCAnOnJvb3QnKTtcbiAgICAgIHN0eWxlLmlubmVySFRNTCA9IHN0eWxlLmlubmVySFRNTC5yZXBsYWNlKC9cXC5lZGl0LXBvc3QtdmlzdWFsLWVkaXRvcl9fY29udGVudC1hcmVhIFxcPiBkaXYvZywgJzpyb290Jyk7XG4gICAgICBzdHlsZS5pbm5lckhUTUwgPSBzdHlsZS5pbm5lckhUTUwucmVwbGFjZSgnLmVkaXRvci1zdHlsZXMtd3JhcHBlcnJvb3QnLCAnOnJvb3QnKTtcbiAgICB9KTtcbiAgfVxufTtcblxuY29uc3QgcGVyZm9ybVRoZW1lRWRpdG9yU3R5bGVzVXBkYXRlID0gKCkgPT4ge1xuICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICBjb25zdCB0aGVtZVN0eWxlcyA9IHNlbGVjdCgnY29yZS9lZGl0LXBvc3QnKS5pc0ZlYXR1cmVBY3RpdmUoJ3RoZW1lU3R5bGVzJyk7XG4gICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKCdjdC10aGVtZS1lZGl0b3Itc3R5bGVzJyk7XG5cbiAgICBpZiAodGhlbWVTdHlsZXMpIHtcbiAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZCgnY3QtdGhlbWUtZWRpdG9yLXN0eWxlcycpO1xuICAgIH1cbiAgfSk7XG59O1xuXG5pZiAob2xkRm4pIHtcbiAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgcGVyZm9ybVNlbGVjdG9yc1JlcGxhY2UoKTtcbiAgICBwZXJmb3JtVGhlbWVFZGl0b3JTdHlsZXNVcGRhdGUoKTtcbiAgfSwgMTAwMCk7XG5cbiAgd3AuZGF0YS5kaXNwYXRjaCgnY29yZS9lZGl0LXBvc3QnKS5fX2V4cGVyaW1lbnRhbFNldFByZXZpZXdEZXZpY2VUeXBlID0gZnVuY3Rpb24gKCkge1xuICAgIG9sZEZuKC4uLmFyZ3VtZW50cyk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBvdmVycmlkZVN0eWxlc1dpdGhBc3QoKTtcbiAgICAgIHBlcmZvcm1TZWxlY3RvcnNSZXBsYWNlKCk7XG4gICAgfSwgMjAwKTtcbiAgfTtcblxuICB3cC5kYXRhLmRpc3BhdGNoKCdjb3JlL2VkaXQtcG9zdCcpLnRvZ2dsZUZlYXR1cmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgb2xkRm5Ub2dnbGVGZWF0dXJlKC4uLmFyZ3VtZW50cyk7XG4gICAgcGVyZm9ybVRoZW1lRWRpdG9yU3R5bGVzVXBkYXRlKCk7XG4gIH07XG59XG5cbmNvbnN0IHVuc3Vic2NyaWJlID0gd3AuZGF0YS5zdWJzY3JpYmUoKCkgPT4ge1xuICBjb25zdCB0aGVtZVN0eWxlcyA9IHNlbGVjdCgnY29yZS9lZGl0LXBvc3QnKS5pc0ZlYXR1cmVBY3RpdmUoJ3RoZW1lU3R5bGVzJyk7XG4gIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZSgnY3QtdGhlbWUtZWRpdG9yLXN0eWxlcycpO1xuXG4gIGlmICh0aGVtZVN0eWxlcykge1xuICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZCgnY3QtdGhlbWUtZWRpdG9yLXN0eWxlcycpO1xuICB9XG5cbiAgdW5zdWJzY3JpYmUoKTtcbn0pO1xuXG5jb25zdCBzeW5jQ29udGVudEJsb2NrcyA9IF9yZWYgPT4ge1xuICBsZXQge1xuICAgIGF0dHNcbiAgfSA9IF9yZWY7XG4gIGxldCBwYWdlX3N0cnVjdHVyZV90eXBlID0gYXR0cy5jb250ZW50X2Jsb2NrX3N0cnVjdHVyZSB8fCAndHlwZS00JztcbiAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKCdjdC1zdHJ1Y3R1cmUtbmFycm93JywgJ2N0LXN0cnVjdHVyZS1ub3JtYWwnKTtcblxuICBpZiAoYXR0cy5oYXNfY29udGVudF9ibG9ja19zdHJ1Y3R1cmUgJiYgYXR0cy5oYXNfY29udGVudF9ibG9ja19zdHJ1Y3R1cmUgIT09ICd5ZXMnKSB7XG4gICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKGBjdC1zdHJ1Y3R1cmUtbm9ybWFsYCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKGBjdC1zdHJ1Y3R1cmUtJHtwYWdlX3N0cnVjdHVyZV90eXBlID09PSAndHlwZS00JyA/ICdub3JtYWwnIDogJ25hcnJvdyd9YCk7XG59O1xuXG5leHBvcnQgY29uc3QgbW91bnRTeW5jID0gZnVuY3Rpb24gKCkge1xuICBsZXQgYXR0cyA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge307XG4gIGF0dHMgPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHNlbGVjdCgnY29yZS9lZGl0b3InKS5nZXRFZGl0ZWRQb3N0QXR0cmlidXRlKCdibG9ja3N5X21ldGEnKSB8fCB7fSksIGF0dHMpO1xuXG4gIGlmIChkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5jb250YWlucygncG9zdC10eXBlLWN0X2NvbnRlbnRfYmxvY2snKSkge1xuICAgIHN5bmNDb250ZW50QmxvY2tzKHtcbiAgICAgIGF0dHNcbiAgICB9KTtcbiAgICByZXR1cm47XG4gIH1cblxuICBsZXQgcGFnZV9zdHJ1Y3R1cmVfdHlwZSA9IGF0dHMucGFnZV9zdHJ1Y3R1cmVfdHlwZSB8fCAnZGVmYXVsdCc7XG5cbiAgaWYgKHBhZ2Vfc3RydWN0dXJlX3R5cGUgPT09ICdkZWZhdWx0Jykge1xuICAgIHBhZ2Vfc3RydWN0dXJlX3R5cGUgPSBjdF9lZGl0b3JfbG9jYWxpemF0aW9ucy5kZWZhdWx0X3BhZ2Vfc3RydWN0dXJlO1xuICB9XG5cbiAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKCdjdC1zdHJ1Y3R1cmUtbmFycm93JywgJ2N0LXN0cnVjdHVyZS1ub3JtYWwnKTtcbiAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKGBjdC1zdHJ1Y3R1cmUtJHtwYWdlX3N0cnVjdHVyZV90eXBlID09PSAndHlwZS00JyA/ICdub3JtYWwnIDogJ25hcnJvdyd9YCk7XG59O1xuZXhwb3J0IGNvbnN0IGhhbmRsZU1ldGFib3hWYWx1ZUNoYW5nZSA9IChvcHRpb25JZCwgb3B0aW9uVmFsdWUpID0+IHtcbiAgaWYgKG9wdGlvbklkID09PSAncGFnZV9zdHJ1Y3R1cmVfdHlwZScgfHwgb3B0aW9uSWQgPT09ICdoYXNfY29udGVudF9ibG9ja19zdHJ1Y3R1cmUnIHx8IG9wdGlvbklkID09PSAnY29udGVudF9ibG9ja19zdHJ1Y3R1cmUnKSB7XG4gICAgbW91bnRTeW5jKHtcbiAgICAgIFtvcHRpb25JZF06IG9wdGlvblZhbHVlXG4gICAgfSk7XG4gIH1cblxuICBjb25zdCBhdHRzID0gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBnZXRWYWx1ZUZyb21JbnB1dChjdF9lZGl0b3JfbG9jYWxpemF0aW9ucy5wb3N0X29wdGlvbnMsIHdwLmRhdGEuc2VsZWN0KCdjb3JlL2VkaXRvcicpLmdldEVkaXRlZFBvc3RBdHRyaWJ1dGUoJ2Jsb2Nrc3lfbWV0YScpIHx8IHt9KSksIHt9LCB7XG4gICAgW29wdGlvbklkXTogb3B0aW9uVmFsdWVcbiAgfSk7XG5cbiAgaWYgKGd1dGVuYmVyZ1ZhcmlhYmxlc1tvcHRpb25JZF0pIHtcbiAgICB1cGRhdGVWYXJpYWJsZUluU3R5bGVUYWdzKHtcbiAgICAgIHZhcmlhYmxlRGVzY3JpcHRvcjogQXJyYXkuaXNBcnJheShndXRlbmJlcmdWYXJpYWJsZXNbb3B0aW9uSWRdKSA/IGd1dGVuYmVyZ1ZhcmlhYmxlc1tvcHRpb25JZF0gOiBbZ3V0ZW5iZXJnVmFyaWFibGVzW29wdGlvbklkXV0sXG4gICAgICB2YWx1ZTogb3B0aW9uVmFsdWUsXG4gICAgICBmdWxsVmFsdWU6IGF0dHMsXG4gICAgICB0YWJsZXRNUTogJyhtYXgtd2lkdGg6IDgwMHB4KScsXG4gICAgICBtb2JpbGVNUTogJyhtYXgtd2lkdGg6IDM3MHB4KSdcbiAgICB9KTtcbiAgICBwZXJmb3JtU2VsZWN0b3JzUmVwbGFjZSgpO1xuICB9XG59OyIsImNvbnN0IF9fV0VCUEFDS19OQU1FU1BBQ0VfT0JKRUNUX18gPSB3aW5kb3cud3AuaTE4bjsiLCJjb25zdCBfX1dFQlBBQ0tfTkFNRVNQQUNFX09CSkVDVF9fID0gd2luZG93LndwLnByaW1pdGl2ZXM7IiwiZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGVudW1lcmFibGVPbmx5ICYmIChzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSkpLCBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IG51bGwgIT0gYXJndW1lbnRzW2ldID8gYXJndW1lbnRzW2ldIDoge307IGkgJSAyID8gb3duS2V5cyhPYmplY3Qoc291cmNlKSwgITApLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSkgOiBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuaW1wb3J0IHsgY3JlYXRlRWxlbWVudCwgRnJhZ21lbnQsIENvbXBvbmVudCwgdXNlQ2FsbGJhY2ssIHVzZVJlZiwgdXNlRWZmZWN0LCB1c2VTdGF0ZSB9IGZyb20gJ0B3b3JkcHJlc3MvZWxlbWVudCc7XG5pbXBvcnQgeyByZWdpc3RlclBsdWdpbiwgd2l0aFBsdWdpbkNvbnRleHQgfSBmcm9tICdAd29yZHByZXNzL3BsdWdpbnMnO1xuaW1wb3J0IHsgUGx1Z2luU2lkZWJhciwgUGx1Z2luU2lkZWJhck1vcmVNZW51SXRlbSB9IGZyb20gJ0B3b3JkcHJlc3MvZWRpdC1wb3N0JztcbmltcG9ydCB7IHdpdGhTZWxlY3QsIHdpdGhEaXNwYXRjaCB9IGZyb20gJ0B3b3JkcHJlc3MvZGF0YSc7XG5pbXBvcnQgeyBjb21wb3NlIH0gZnJvbSAnQHdvcmRwcmVzcy9jb21wb3NlJztcbmltcG9ydCB7IEljb25CdXR0b24sIEJ1dHRvbiB9IGZyb20gJ0B3b3JkcHJlc3MvY29tcG9uZW50cyc7XG5pbXBvcnQgeyBoYW5kbGVNZXRhYm94VmFsdWVDaGFuZ2UsIG1vdW50U3luYyB9IGZyb20gJy4vZWRpdG9yL3N5bmMnO1xuaW1wb3J0IGN0RXZlbnRzIGZyb20gJ2N0LWV2ZW50cyc7XG5pbXBvcnQgeyBfXywgc3ByaW50ZiB9IGZyb20gJ2N0LWkxOG4nO1xuaW1wb3J0IHsgT3B0aW9uc1BhbmVsLCBnZXRWYWx1ZUZyb21JbnB1dCwgUGFuZWxMZXZlbCwgRGV2aWNlTWFuYWdlclByb3ZpZGVyIH0gZnJvbSAnYmxvY2tzeS1vcHRpb25zJztcbmltcG9ydCB7IFNWRywgUGF0aCB9IGZyb20gJ0B3b3JkcHJlc3MvcHJpbWl0aXZlcyc7XG5jb25zdCBjbG9zZVNtYWxsID0gY3JlYXRlRWxlbWVudChTVkcsIHtcbiAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgdmlld0JveDogXCIwIDAgMjQgMjRcIlxufSwgY3JlYXRlRWxlbWVudChQYXRoLCB7XG4gIGQ6IFwiTTEzIDExLjlsMy4zLTMuNC0xLjEtMS0zLjIgMy4zLTMuMi0zLjMtMS4xIDEgMy4zIDMuNC0zLjUgMy42IDEgMUwxMiAxM2wzLjUgMy41IDEtMXpcIlxufSkpO1xuY29uc3Qgc3RhckVtcHR5ID0gY3JlYXRlRWxlbWVudChTVkcsIHtcbiAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgdmlld0JveDogXCIwIDAgMjQgMjRcIlxufSwgY3JlYXRlRWxlbWVudChQYXRoLCB7XG4gIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgZDogXCJNOS43MDYgOC42NDZhLjI1LjI1IDAgMDEtLjE4OC4xMzdsLTQuNjI2LjY3MmEuMjUuMjUgMCAwMC0uMTM5LjQyN2wzLjM0OCAzLjI2MmEuMjUuMjUgMCAwMS4wNzIuMjIybC0uNzkgNC42MDdhLjI1LjI1IDAgMDAuMzYyLjI2NGw0LjEzOC0yLjE3NmEuMjUuMjUgMCAwMS4yMzMgMGw0LjEzNyAyLjE3NWEuMjUuMjUgMCAwMC4zNjMtLjI2M2wtLjc5LTQuNjA3YS4yNS4yNSAwIDAxLjA3Mi0uMjIybDMuMzQ3LTMuMjYyYS4yNS4yNSAwIDAwLS4xMzktLjQyN2wtNC42MjYtLjY3MmEuMjUuMjUgMCAwMS0uMTg4LS4xMzdsLTIuMDY5LTQuMTkyYS4yNS4yNSAwIDAwLS40NDggMEw5LjcwNiA4LjY0NnpNMTIgNy4zOWwtLjk0OCAxLjkyMWExLjc1IDEuNzUgMCAwMS0xLjMxNy45NTdsLTIuMTIuMzA4IDEuNTM0IDEuNDk1Yy40MTIuNDAyLjYuOTgyLjUwMyAxLjU1bC0uMzYyIDIuMTEgMS44OTYtLjk5N2ExLjc1IDEuNzUgMCAwMTEuNjI5IDBsMS44OTUuOTk3LS4zNjItMi4xMWExLjc1IDEuNzUgMCAwMS41MDQtMS41NWwxLjUzMy0xLjQ5NS0yLjEyLS4zMDhhMS43NSAxLjc1IDAgMDEtMS4zMTctLjk1N0wxMiA3LjM5elwiLFxuICBjbGlwUnVsZTogXCJldmVub2RkXCJcbn0pKTtcbmNvbnN0IHN0YXJGaWxsZWQgPSBjcmVhdGVFbGVtZW50KFNWRywge1xuICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiXG59LCBjcmVhdGVFbGVtZW50KFBhdGgsIHtcbiAgZDogXCJNMTEuNzc2IDQuNDU0YS4yNS4yNSAwIDAxLjQ0OCAwbDIuMDY5IDQuMTkyYS4yNS4yNSAwIDAwLjE4OC4xMzdsNC42MjYuNjcyYS4yNS4yNSAwIDAxLjEzOS40MjZsLTMuMzQ4IDMuMjYzYS4yNS4yNSAwIDAwLS4wNzIuMjIybC43OSA0LjYwN2EuMjUuMjUgMCAwMS0uMzYyLjI2M2wtNC4xMzgtMi4xNzVhLjI1LjI1IDAgMDAtLjIzMiAwbC00LjEzOCAyLjE3NWEuMjUuMjUgMCAwMS0uMzYzLS4yNjNsLjc5LTQuNjA3YS4yNS4yNSAwIDAwLS4wNzEtLjIyMkw0Ljc1NCA5Ljg4MWEuMjUuMjUgMCAwMS4xMzktLjQyNmw0LjYyNi0uNjcyYS4yNS4yNSAwIDAwLjE4OC0uMTM3bDIuMDY5LTQuMTkyelwiXG59KSk7XG5cbmNvbnN0IEJsb2Nrc3lPcHRpb25zID0gX3JlZiA9PiB7XG4gIGxldCB7XG4gICAgbmFtZSxcbiAgICB2YWx1ZSxcbiAgICBvcHRpb25zLFxuICAgIG9uQ2hhbmdlLFxuICAgIGlzQWN0aXZlLFxuICAgIGlzUGlubmFibGUgPSB0cnVlLFxuICAgIGlzUGlubmVkLFxuICAgIHRvZ2dsZVBpbixcbiAgICB0b2dnbGVTaWRlYmFyLFxuICAgIGNsb3NlR2VuZXJhbFNpZGViYXJcbiAgfSA9IF9yZWY7XG4gIGNvbnN0IGNvbnRhaW5lclJlZiA9IHVzZVJlZigpO1xuICBjb25zdCBwYXJlbnRDb250YWluZXJSZWYgPSB1c2VSZWYoKTtcbiAgY29uc3QgW3ZhbHVlcywgc2V0VmFsdWVzXSA9IHVzZVN0YXRlKG51bGwpO1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0W2lzQWN0aXZlID8gJ2FkZCcgOiAncmVtb3ZlJ10oJ2Jsb2Nrc3ktc2lkZWJhci1hY3RpdmUnKTtcbiAgfSwgW2lzQWN0aXZlXSk7XG5cbiAgY29uc3QgaGFuZGxlQ2hhbmdlID0gX3JlZjIgPT4ge1xuICAgIGxldCB7XG4gICAgICBpZDoga2V5LFxuICAgICAgdmFsdWU6IHZcbiAgICB9ID0gX3JlZjI7XG5cbiAgICBjb25zdCBmdXR1cmVWYWx1ZSA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgdmFsdWVzIHx8IGdldFZhbHVlRnJvbUlucHV0KG9wdGlvbnMsIHZhbHVlIHx8IHt9KSksIHt9LCB7XG4gICAgICBba2V5XTogdlxuICAgIH0pO1xuXG4gICAgaGFuZGxlTWV0YWJveFZhbHVlQ2hhbmdlKGtleSwgdik7XG4gICAgb25DaGFuZ2UoZnV0dXJlVmFsdWUpO1xuICAgIHNldFZhbHVlcyhmdXR1cmVWYWx1ZSk7XG4gIH07XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjdEV2ZW50cy5vbignY3Q6bWV0YWJveDpvcHRpb25zOnRyaWdnZXItY2hhbmdlJywgaGFuZGxlQ2hhbmdlKTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgY3RFdmVudHMub2ZmKCdjdDptZXRhYm94Om9wdGlvbnM6dHJpZ2dlci1jaGFuZ2UnLCBoYW5kbGVDaGFuZ2UpO1xuICAgIH07XG4gIH0sIFtdKTtcbiAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQoRnJhZ21lbnQsIG51bGwsIGNyZWF0ZUVsZW1lbnQoUGx1Z2luU2lkZWJhck1vcmVNZW51SXRlbSwge1xuICAgIHRhcmdldDogXCJibG9ja3N5XCIsXG4gICAgaWNvbjogXCJhZG1pbi1jdXN0b21pemVyXCJcbiAgfSwgc3ByaW50ZihfXygnJXMgUGFnZSBTZXR0aW5ncycsICdibG9ja3N5JyksIGN0X2xvY2FsaXphdGlvbnMucHJvZHVjdF9uYW1lKSksIGNyZWF0ZUVsZW1lbnQoUGx1Z2luU2lkZWJhciwge1xuICAgIG5hbWU6IG5hbWUsXG4gICAgaWNvbjogY3JlYXRlRWxlbWVudChcInNwYW5cIiwge1xuICAgICAgc3R5bGU6IHtcbiAgICAgICAgZGlzcGxheTogJ2ZsZXgnXG4gICAgICB9LFxuICAgICAgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw6IHtcbiAgICAgICAgX19odG1sOiBjdF9lZGl0b3JfbG9jYWxpemF0aW9ucy5vcHRpb25zX3BhbmVsX3N2Z1xuICAgICAgfVxuICAgIH0pLFxuICAgIGNsYXNzTmFtZTogXCJjdC1jb21wb25lbnRzLXBhbmVsXCIsXG4gICAgdGl0bGU6IHNwcmludGYoX18oJyVzIFBhZ2UgU2V0dGluZ3MnLCAnYmxvY2tzeScpLCBjdF9sb2NhbGl6YXRpb25zLnByb2R1Y3RfbmFtZSlcbiAgfSwgY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgaWQ6IFwiY3QtcGFnZS1vcHRpb25zXCIsXG4gICAgcmVmOiBwYXJlbnRDb250YWluZXJSZWZcbiAgfSwgY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImN0LW9wdGlvbnMtY29udGFpbmVyXCIsXG4gICAgcmVmOiBjb250YWluZXJSZWZcbiAgfSwgY3JlYXRlRWxlbWVudChEZXZpY2VNYW5hZ2VyUHJvdmlkZXIsIG51bGwsIGNyZWF0ZUVsZW1lbnQoUGFuZWxMZXZlbCwge1xuICAgIGNvbnRhaW5lclJlZjogY29udGFpbmVyUmVmLFxuICAgIHBhcmVudENvbnRhaW5lclJlZjogcGFyZW50Q29udGFpbmVyUmVmLFxuICAgIHVzZVJlZnNBc1dyYXBwZXJzOiB0cnVlXG4gIH0sIGNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgIGNsYXNzTmFtZTogXCJjdC1wYW5lbC1vcHRpb25zLWhlYWRlciBjb21wb25lbnRzLXBhbmVsX19oZWFkZXIgZWRpdC1wb3N0LXNpZGViYXItaGVhZGVyXCJcbiAgfSwgY3JlYXRlRWxlbWVudChcInN0cm9uZ1wiLCBudWxsLCBzcHJpbnRmKF9fKCclcyBQYWdlIFNldHRpbmdzJywgJ2Jsb2Nrc3knKSwgY3RfbG9jYWxpemF0aW9ucy5wcm9kdWN0X25hbWUpKSwgaXNQaW5uYWJsZSAmJiBjcmVhdGVFbGVtZW50KEJ1dHRvbiwge1xuICAgIGljb246IGlzUGlubmVkID8gc3RhckZpbGxlZCA6IHN0YXJFbXB0eSxcbiAgICBsYWJlbDogaXNQaW5uZWQgPyBfXygnVW5waW4gZnJvbSB0b29sYmFyJywgJ2Jsb2Nrc3knKSA6IF9fKCdQaW4gdG8gdG9vbGJhcicsICdibG9ja3N5JyksXG4gICAgb25DbGljazogdG9nZ2xlUGluLFxuICAgIGlzUHJlc3NlZDogaXNQaW5uZWQsXG4gICAgXCJhcmlhLWV4cGFuZGVkXCI6IGlzUGlubmVkXG4gIH0pLCBjcmVhdGVFbGVtZW50KEljb25CdXR0b24sIHtcbiAgICBvbkNsaWNrOiBjbG9zZUdlbmVyYWxTaWRlYmFyLFxuICAgIGljb246IGNsb3NlU21hbGwsXG4gICAgbGFiZWw6IF9fKCdDbG9zZSBwbHVnaW4nLCAnYmxvY2tzeScpXG4gIH0pKSwgY3JlYXRlRWxlbWVudChPcHRpb25zUGFuZWwsIHtcbiAgICBvbkNoYW5nZTogKGtleSwgdikgPT4ge1xuICAgICAgY29uc3QgZnV0dXJlVmFsdWUgPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHZhbHVlcyB8fCBnZXRWYWx1ZUZyb21JbnB1dChvcHRpb25zLCB2YWx1ZSB8fCB7fSkpLCB7fSwge1xuICAgICAgICBba2V5XTogdlxuICAgICAgfSk7XG5cbiAgICAgIGhhbmRsZU1ldGFib3hWYWx1ZUNoYW5nZShrZXksIHYpO1xuICAgICAgb25DaGFuZ2UoZnV0dXJlVmFsdWUpO1xuICAgICAgc2V0VmFsdWVzKGZ1dHVyZVZhbHVlKTtcbiAgICB9LFxuICAgIHZhbHVlOiB2YWx1ZXMgfHwgZ2V0VmFsdWVGcm9tSW5wdXQob3B0aW9ucywgdmFsdWUgfHwge30pLFxuICAgIG9wdGlvbnM6IG9wdGlvbnNcbiAgfSkpKSkpKSk7XG59O1xuXG5jb25zdCBCbG9ja3N5T3B0aW9uc0NvbXBvc2VkID0gY29tcG9zZSh3aXRoUGx1Z2luQ29udGV4dCgoY29udGV4dCwgX3JlZjMpID0+IHtcbiAgbGV0IHtcbiAgICBuYW1lXG4gIH0gPSBfcmVmMztcbiAgcmV0dXJuIHtcbiAgICBzaWRlYmFyTmFtZTogYCR7Y29udGV4dC5uYW1lfS8ke25hbWV9YFxuICB9O1xufSksIHdpdGhTZWxlY3QoKHNlbGVjdCwgX3JlZjQpID0+IHtcbiAgbGV0IHtcbiAgICBzaWRlYmFyTmFtZVxuICB9ID0gX3JlZjQ7XG4gIGNvbnN0IHZhbHVlID0gc2VsZWN0KCdjb3JlL2VkaXRvcicpLmdldEVkaXRlZFBvc3RBdHRyaWJ1dGUoJ2Jsb2Nrc3lfbWV0YScpO1xuICBjb25zdCB7XG4gICAgZ2V0QWN0aXZlR2VuZXJhbFNpZGViYXJOYW1lLFxuICAgIGlzUGx1Z2luSXRlbVBpbm5lZFxuICB9ID0gc2VsZWN0KCdjb3JlL2VkaXQtcG9zdCcpO1xuICByZXR1cm4ge1xuICAgIGlzQWN0aXZlOiBnZXRBY3RpdmVHZW5lcmFsU2lkZWJhck5hbWUoKSA9PT0gc2lkZWJhck5hbWUsXG4gICAgaXNQaW5uZWQ6IGlzUGx1Z2luSXRlbVBpbm5lZChzaWRlYmFyTmFtZSksXG4gICAgdmFsdWU6IEFycmF5LmlzQXJyYXkodmFsdWUpID8ge30gOiB2YWx1ZSB8fCB7fSxcbiAgICBvcHRpb25zOiBjdF9lZGl0b3JfbG9jYWxpemF0aW9ucy5wb3N0X29wdGlvbnNcbiAgfTtcbn0pLCB3aXRoRGlzcGF0Y2goKGRpc3BhdGNoLCBfcmVmNSkgPT4ge1xuICBsZXQge1xuICAgIHNpZGViYXJOYW1lXG4gIH0gPSBfcmVmNTtcbiAgY29uc3Qge1xuICAgIGNsb3NlR2VuZXJhbFNpZGViYXIsXG4gICAgb3BlbkdlbmVyYWxTaWRlYmFyLFxuICAgIHRvZ2dsZVBpbm5lZFBsdWdpbkl0ZW1cbiAgfSA9IGRpc3BhdGNoKCdjb3JlL2VkaXQtcG9zdCcpO1xuICByZXR1cm4ge1xuICAgIGNsb3NlR2VuZXJhbFNpZGViYXIsXG4gICAgdG9nZ2xlUGluOiAoKSA9PiB7XG4gICAgICB0b2dnbGVQaW5uZWRQbHVnaW5JdGVtKHNpZGViYXJOYW1lKTtcbiAgICB9LFxuICAgIG9uQ2hhbmdlOiBibG9ja3N5X21ldGEgPT4ge1xuICAgICAgZGlzcGF0Y2goJ2NvcmUvZWRpdG9yJykuZWRpdFBvc3Qoe1xuICAgICAgICBibG9ja3N5X21ldGFcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcbn0pKShCbG9ja3N5T3B0aW9ucyk7XG5cbmlmIChjdF9lZGl0b3JfbG9jYWxpemF0aW9ucy5wb3N0X29wdGlvbnMpIHtcbiAgcmVnaXN0ZXJQbHVnaW4oJ2Jsb2Nrc3knLCB7XG4gICAgcmVuZGVyOiAoKSA9PiBjcmVhdGVFbGVtZW50KEJsb2Nrc3lPcHRpb25zQ29tcG9zZWQsIHtcbiAgICAgIG5hbWU6IFwiYmxvY2tzeVwiXG4gICAgfSlcbiAgfSk7XG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///552\n")},924:(module,__unused_webpack_exports,__webpack_require__)=>{"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar callBind = __webpack_require__(559);\n\nvar $indexOf = callBind(GetIntrinsic('String.prototype.indexOf'));\n\nmodule.exports = function callBoundIntrinsic(name, allowMissing) {\n\tvar intrinsic = GetIntrinsic(name, !!allowMissing);\n\tif (typeof intrinsic === 'function' && $indexOf(name, '.prototype.') > -1) {\n\t\treturn callBind(intrinsic);\n\t}\n\treturn intrinsic;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTI0LmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3NtYWxsLWN0Ly4vbm9kZV9tb2R1bGVzL2NhbGwtYmluZC9jYWxsQm91bmQuanM/NTQ1ZSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciBjYWxsQmluZCA9IHJlcXVpcmUoJy4vJyk7XG5cbnZhciAkaW5kZXhPZiA9IGNhbGxCaW5kKEdldEludHJpbnNpYygnU3RyaW5nLnByb3RvdHlwZS5pbmRleE9mJykpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGNhbGxCb3VuZEludHJpbnNpYyhuYW1lLCBhbGxvd01pc3NpbmcpIHtcblx0dmFyIGludHJpbnNpYyA9IEdldEludHJpbnNpYyhuYW1lLCAhIWFsbG93TWlzc2luZyk7XG5cdGlmICh0eXBlb2YgaW50cmluc2ljID09PSAnZnVuY3Rpb24nICYmICRpbmRleE9mKG5hbWUsICcucHJvdG90eXBlLicpID4gLTEpIHtcblx0XHRyZXR1cm4gY2FsbEJpbmQoaW50cmluc2ljKTtcblx0fVxuXHRyZXR1cm4gaW50cmluc2ljO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///924\n")},559:(module,__unused_webpack_exports,__webpack_require__)=>{"use strict";eval("\n\nvar bind = __webpack_require__(612);\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $apply = GetIntrinsic('%Function.prototype.apply%');\nvar $call = GetIntrinsic('%Function.prototype.call%');\nvar $reflectApply = GetIntrinsic('%Reflect.apply%', true) || bind.call($call, $apply);\n\nvar $gOPD = GetIntrinsic('%Object.getOwnPropertyDescriptor%', true);\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\nvar $max = GetIntrinsic('%Math.max%');\n\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = null;\n\t}\n}\n\nmodule.exports = function callBind(originalFunction) {\n\tvar func = $reflectApply(bind, $call, arguments);\n\tif ($gOPD && $defineProperty) {\n\t\tvar desc = $gOPD(func, 'length');\n\t\tif (desc.configurable) {\n\t\t\t// original length, plus the receiver, minus any additional arguments (after the receiver)\n\t\t\t$defineProperty(\n\t\t\t\tfunc,\n\t\t\t\t'length',\n\t\t\t\t{ value: 1 + $max(0, originalFunction.length - (arguments.length - 1)) }\n\t\t\t);\n\t\t}\n\t}\n\treturn func;\n};\n\nvar applyBind = function applyBind() {\n\treturn $reflectApply(bind, $apply, arguments);\n};\n\nif ($defineProperty) {\n\t$defineProperty(module.exports, 'apply', { value: applyBind });\n} else {\n\tmodule.exports.apply = applyBind;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTU5LmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9zbWFsbC1jdC8uL25vZGVfbW9kdWxlcy9jYWxsLWJpbmQvaW5kZXguanM/M2ViMSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBiaW5kID0gcmVxdWlyZSgnZnVuY3Rpb24tYmluZCcpO1xudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRhcHBseSA9IEdldEludHJpbnNpYygnJUZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseSUnKTtcbnZhciAkY2FsbCA9IEdldEludHJpbnNpYygnJUZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsJScpO1xudmFyICRyZWZsZWN0QXBwbHkgPSBHZXRJbnRyaW5zaWMoJyVSZWZsZWN0LmFwcGx5JScsIHRydWUpIHx8IGJpbmQuY2FsbCgkY2FsbCwgJGFwcGx5KTtcblxudmFyICRnT1BEID0gR2V0SW50cmluc2ljKCclT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvciUnLCB0cnVlKTtcbnZhciAkZGVmaW5lUHJvcGVydHkgPSBHZXRJbnRyaW5zaWMoJyVPYmplY3QuZGVmaW5lUHJvcGVydHklJywgdHJ1ZSk7XG52YXIgJG1heCA9IEdldEludHJpbnNpYygnJU1hdGgubWF4JScpO1xuXG5pZiAoJGRlZmluZVByb3BlcnR5KSB7XG5cdHRyeSB7XG5cdFx0JGRlZmluZVByb3BlcnR5KHt9LCAnYScsIHsgdmFsdWU6IDEgfSk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHQvLyBJRSA4IGhhcyBhIGJyb2tlbiBkZWZpbmVQcm9wZXJ0eVxuXHRcdCRkZWZpbmVQcm9wZXJ0eSA9IG51bGw7XG5cdH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBjYWxsQmluZChvcmlnaW5hbEZ1bmN0aW9uKSB7XG5cdHZhciBmdW5jID0gJHJlZmxlY3RBcHBseShiaW5kLCAkY2FsbCwgYXJndW1lbnRzKTtcblx0aWYgKCRnT1BEICYmICRkZWZpbmVQcm9wZXJ0eSkge1xuXHRcdHZhciBkZXNjID0gJGdPUEQoZnVuYywgJ2xlbmd0aCcpO1xuXHRcdGlmIChkZXNjLmNvbmZpZ3VyYWJsZSkge1xuXHRcdFx0Ly8gb3JpZ2luYWwgbGVuZ3RoLCBwbHVzIHRoZSByZWNlaXZlciwgbWludXMgYW55IGFkZGl0aW9uYWwgYXJndW1lbnRzIChhZnRlciB0aGUgcmVjZWl2ZXIpXG5cdFx0XHQkZGVmaW5lUHJvcGVydHkoXG5cdFx0XHRcdGZ1bmMsXG5cdFx0XHRcdCdsZW5ndGgnLFxuXHRcdFx0XHR7IHZhbHVlOiAxICsgJG1heCgwLCBvcmlnaW5hbEZ1bmN0aW9uLmxlbmd0aCAtIChhcmd1bWVudHMubGVuZ3RoIC0gMSkpIH1cblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBmdW5jO1xufTtcblxudmFyIGFwcGx5QmluZCA9IGZ1bmN0aW9uIGFwcGx5QmluZCgpIHtcblx0cmV0dXJuICRyZWZsZWN0QXBwbHkoYmluZCwgJGFwcGx5LCBhcmd1bWVudHMpO1xufTtcblxuaWYgKCRkZWZpbmVQcm9wZXJ0eSkge1xuXHQkZGVmaW5lUHJvcGVydHkobW9kdWxlLmV4cG9ydHMsICdhcHBseScsIHsgdmFsdWU6IGFwcGx5QmluZCB9KTtcbn0gZWxzZSB7XG5cdG1vZHVsZS5leHBvcnRzLmFwcGx5ID0gYXBwbHlCaW5kO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///559\n")},600:(__unused_webpack_module,exports)=>{"use strict";eval("var __webpack_unused_export__;\n\n\n__webpack_unused_export__ = ({ value: true });\n\nvar maybePromoteScalarValueIntoResponsive = function maybePromoteScalarValueIntoResponsive(value) {\n var isResponsive = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n /**\n * Responsive value must necessarily have the desktop key attached to it\n */\n if (value && Object.keys(value).indexOf('desktop') > -1) {\n if (!isResponsive) {\n return value.desktop;\n }\n\n return value;\n }\n\n if (!isResponsive) {\n return value;\n }\n\n return {\n desktop: value,\n tablet: value,\n mobile: value\n };\n};\n\nexports.T = maybePromoteScalarValueIntoResponsive;\n//# sourceMappingURL=promote-into-responsive.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjAwLmpzIiwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3NtYWxsLWN0Ly4vbm9kZV9tb2R1bGVzL2N1c3RvbWl6ZXItc3luYy1oZWxwZXJzL2Rpc3QvcHJvbW90ZS1pbnRvLXJlc3BvbnNpdmUuanM/Y2NhYSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbnZhciBtYXliZVByb21vdGVTY2FsYXJWYWx1ZUludG9SZXNwb25zaXZlID0gZnVuY3Rpb24gbWF5YmVQcm9tb3RlU2NhbGFyVmFsdWVJbnRvUmVzcG9uc2l2ZSh2YWx1ZSkge1xuICB2YXIgaXNSZXNwb25zaXZlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB0cnVlO1xuXG4gIC8qKlxuICAgKiBSZXNwb25zaXZlIHZhbHVlIG11c3QgbmVjZXNzYXJpbHkgaGF2ZSB0aGUgZGVza3RvcCBrZXkgYXR0YWNoZWQgdG8gaXRcbiAgICovXG4gIGlmICh2YWx1ZSAmJiBPYmplY3Qua2V5cyh2YWx1ZSkuaW5kZXhPZignZGVza3RvcCcpID4gLTEpIHtcbiAgICBpZiAoIWlzUmVzcG9uc2l2ZSkge1xuICAgICAgcmV0dXJuIHZhbHVlLmRlc2t0b3A7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgaWYgKCFpc1Jlc3BvbnNpdmUpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGRlc2t0b3A6IHZhbHVlLFxuICAgIHRhYmxldDogdmFsdWUsXG4gICAgbW9iaWxlOiB2YWx1ZVxuICB9O1xufTtcblxuZXhwb3J0cy5tYXliZVByb21vdGVTY2FsYXJWYWx1ZUludG9SZXNwb25zaXZlID0gbWF5YmVQcm9tb3RlU2NhbGFyVmFsdWVJbnRvUmVzcG9uc2l2ZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXByb21vdGUtaW50by1yZXNwb25zaXZlLmpzLm1hcFxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///600\n")},29:(module,__unused_webpack_exports,__webpack_require__)=>{"use strict";eval("\n\nvar isCallable = __webpack_require__(320);\n\nvar toStr = Object.prototype.toString;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nvar forEachArray = function forEachArray(array, iterator, receiver) {\n for (var i = 0, len = array.length; i < len; i++) {\n if (hasOwnProperty.call(array, i)) {\n if (receiver == null) {\n iterator(array[i], i, array);\n } else {\n iterator.call(receiver, array[i], i, array);\n }\n }\n }\n};\n\nvar forEachString = function forEachString(string, iterator, receiver) {\n for (var i = 0, len = string.length; i < len; i++) {\n // no such thing as a sparse string.\n if (receiver == null) {\n iterator(string.charAt(i), i, string);\n } else {\n iterator.call(receiver, string.charAt(i), i, string);\n }\n }\n};\n\nvar forEachObject = function forEachObject(object, iterator, receiver) {\n for (var k in object) {\n if (hasOwnProperty.call(object, k)) {\n if (receiver == null) {\n iterator(object[k], k, object);\n } else {\n iterator.call(receiver, object[k], k, object);\n }\n }\n }\n};\n\nvar forEach = function forEach(list, iterator, thisArg) {\n if (!isCallable(iterator)) {\n throw new TypeError('iterator must be a function');\n }\n\n var receiver;\n if (arguments.length >= 3) {\n receiver = thisArg;\n }\n\n if (toStr.call(list) === '[object Array]') {\n forEachArray(list, iterator, receiver);\n } else if (typeof list === 'string') {\n forEachString(list, iterator, receiver);\n } else {\n forEachObject(list, iterator, receiver);\n }\n};\n\nmodule.exports = forEach;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjkuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3NtYWxsLWN0Ly4vbm9kZV9tb2R1bGVzL2Zvci1lYWNoL2luZGV4LmpzP2QwMjQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJ2lzLWNhbGxhYmxlJyk7XG5cbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuXG52YXIgZm9yRWFjaEFycmF5ID0gZnVuY3Rpb24gZm9yRWFjaEFycmF5KGFycmF5LCBpdGVyYXRvciwgcmVjZWl2ZXIpIHtcbiAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gYXJyYXkubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoYXJyYXksIGkpKSB7XG4gICAgICAgICAgICBpZiAocmVjZWl2ZXIgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGl0ZXJhdG9yKGFycmF5W2ldLCBpLCBhcnJheSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGl0ZXJhdG9yLmNhbGwocmVjZWl2ZXIsIGFycmF5W2ldLCBpLCBhcnJheSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG52YXIgZm9yRWFjaFN0cmluZyA9IGZ1bmN0aW9uIGZvckVhY2hTdHJpbmcoc3RyaW5nLCBpdGVyYXRvciwgcmVjZWl2ZXIpIHtcbiAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gc3RyaW5nLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIC8vIG5vIHN1Y2ggdGhpbmcgYXMgYSBzcGFyc2Ugc3RyaW5nLlxuICAgICAgICBpZiAocmVjZWl2ZXIgPT0gbnVsbCkge1xuICAgICAgICAgICAgaXRlcmF0b3Ioc3RyaW5nLmNoYXJBdChpKSwgaSwgc3RyaW5nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yLmNhbGwocmVjZWl2ZXIsIHN0cmluZy5jaGFyQXQoaSksIGksIHN0cmluZyk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG52YXIgZm9yRWFjaE9iamVjdCA9IGZ1bmN0aW9uIGZvckVhY2hPYmplY3Qob2JqZWN0LCBpdGVyYXRvciwgcmVjZWl2ZXIpIHtcbiAgICBmb3IgKHZhciBrIGluIG9iamVjdCkge1xuICAgICAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGspKSB7XG4gICAgICAgICAgICBpZiAocmVjZWl2ZXIgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGl0ZXJhdG9yKG9iamVjdFtrXSwgaywgb2JqZWN0KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaXRlcmF0b3IuY2FsbChyZWNlaXZlciwgb2JqZWN0W2tdLCBrLCBvYmplY3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufTtcblxudmFyIGZvckVhY2ggPSBmdW5jdGlvbiBmb3JFYWNoKGxpc3QsIGl0ZXJhdG9yLCB0aGlzQXJnKSB7XG4gICAgaWYgKCFpc0NhbGxhYmxlKGl0ZXJhdG9yKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpdGVyYXRvciBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcbiAgICB9XG5cbiAgICB2YXIgcmVjZWl2ZXI7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPj0gMykge1xuICAgICAgICByZWNlaXZlciA9IHRoaXNBcmc7XG4gICAgfVxuXG4gICAgaWYgKHRvU3RyLmNhbGwobGlzdCkgPT09ICdbb2JqZWN0IEFycmF5XScpIHtcbiAgICAgICAgZm9yRWFjaEFycmF5KGxpc3QsIGl0ZXJhdG9yLCByZWNlaXZlcik7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgbGlzdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgZm9yRWFjaFN0cmluZyhsaXN0LCBpdGVyYXRvciwgcmVjZWl2ZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGZvckVhY2hPYmplY3QobGlzdCwgaXRlcmF0b3IsIHJlY2VpdmVyKTtcbiAgICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZvckVhY2g7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///29\n")},648:module=>{"use strict";eval("\n\n/* eslint no-invalid-this: 1 */\n\nvar ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';\nvar slice = Array.prototype.slice;\nvar toStr = Object.prototype.toString;\nvar funcType = '[object Function]';\n\nmodule.exports = function bind(that) {\n var target = this;\n if (typeof target !== 'function' || toStr.call(target) !== funcType) {\n throw new TypeError(ERROR_MESSAGE + target);\n }\n var args = slice.call(arguments, 1);\n\n var bound;\n var binder = function () {\n if (this instanceof bound) {\n var result = target.apply(\n this,\n args.concat(slice.call(arguments))\n );\n if (Object(result) === result) {\n return result;\n }\n return this;\n } else {\n return target.apply(\n that,\n args.concat(slice.call(arguments))\n );\n }\n };\n\n var boundLength = Math.max(0, target.length - args.length);\n var boundArgs = [];\n for (var i = 0; i < boundLength; i++) {\n boundArgs.push('$' + i);\n }\n\n bound = Function('binder', 'return function (' + boundArgs.join(',') + '){ return binder.apply(this,arguments); }')(binder);\n\n if (target.prototype) {\n var Empty = function Empty() {};\n Empty.prototype = target.prototype;\n bound.prototype = new Empty();\n Empty.prototype = null;\n }\n\n return bound;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjQ4LmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vc21hbGwtY3QvLi9ub2RlX21vZHVsZXMvZnVuY3Rpb24tYmluZC9pbXBsZW1lbnRhdGlvbi5qcz82ODhlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLyogZXNsaW50IG5vLWludmFsaWQtdGhpczogMSAqL1xuXG52YXIgRVJST1JfTUVTU0FHRSA9ICdGdW5jdGlvbi5wcm90b3R5cGUuYmluZCBjYWxsZWQgb24gaW5jb21wYXRpYmxlICc7XG52YXIgc2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7XG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIGZ1bmNUeXBlID0gJ1tvYmplY3QgRnVuY3Rpb25dJztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBiaW5kKHRoYXQpIHtcbiAgICB2YXIgdGFyZ2V0ID0gdGhpcztcbiAgICBpZiAodHlwZW9mIHRhcmdldCAhPT0gJ2Z1bmN0aW9uJyB8fCB0b1N0ci5jYWxsKHRhcmdldCkgIT09IGZ1bmNUeXBlKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRVJST1JfTUVTU0FHRSArIHRhcmdldCk7XG4gICAgfVxuICAgIHZhciBhcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuXG4gICAgdmFyIGJvdW5kO1xuICAgIHZhciBiaW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgYm91bmQpIHtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSB0YXJnZXQuYXBwbHkoXG4gICAgICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgICAgICBhcmdzLmNvbmNhdChzbGljZS5jYWxsKGFyZ3VtZW50cykpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKE9iamVjdChyZXN1bHQpID09PSByZXN1bHQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGFyZ2V0LmFwcGx5KFxuICAgICAgICAgICAgICAgIHRoYXQsXG4gICAgICAgICAgICAgICAgYXJncy5jb25jYXQoc2xpY2UuY2FsbChhcmd1bWVudHMpKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICB2YXIgYm91bmRMZW5ndGggPSBNYXRoLm1heCgwLCB0YXJnZXQubGVuZ3RoIC0gYXJncy5sZW5ndGgpO1xuICAgIHZhciBib3VuZEFyZ3MgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJvdW5kTGVuZ3RoOyBpKyspIHtcbiAgICAgICAgYm91bmRBcmdzLnB1c2goJyQnICsgaSk7XG4gICAgfVxuXG4gICAgYm91bmQgPSBGdW5jdGlvbignYmluZGVyJywgJ3JldHVybiBmdW5jdGlvbiAoJyArIGJvdW5kQXJncy5qb2luKCcsJykgKyAnKXsgcmV0dXJuIGJpbmRlci5hcHBseSh0aGlzLGFyZ3VtZW50cyk7IH0nKShiaW5kZXIpO1xuXG4gICAgaWYgKHRhcmdldC5wcm90b3R5cGUpIHtcbiAgICAgICAgdmFyIEVtcHR5ID0gZnVuY3Rpb24gRW1wdHkoKSB7fTtcbiAgICAgICAgRW1wdHkucHJvdG90eXBlID0gdGFyZ2V0LnByb3RvdHlwZTtcbiAgICAgICAgYm91bmQucHJvdG90eXBlID0gbmV3IEVtcHR5KCk7XG4gICAgICAgIEVtcHR5LnByb3RvdHlwZSA9IG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJvdW5kO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///648\n")},612:(module,__unused_webpack_exports,__webpack_require__)=>{"use strict";eval("\n\nvar implementation = __webpack_require__(648);\n\nmodule.exports = Function.prototype.bind || implementation;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjEyLmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9zbWFsbC1jdC8uL25vZGVfbW9kdWxlcy9mdW5jdGlvbi1iaW5kL2luZGV4LmpzPzBmN2MiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaW1wbGVtZW50YXRpb24gPSByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQgfHwgaW1wbGVtZW50YXRpb247XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///612\n")},210:(module,__unused_webpack_exports,__webpack_require__)=>{"use strict";eval("\n\nvar undefined;\n\nvar $SyntaxError = SyntaxError;\nvar $Function = Function;\nvar $TypeError = TypeError;\n\n// eslint-disable-next-line consistent-return\nvar getEvalledConstructor = function (expressionSyntax) {\n\ttry {\n\t\treturn $Function('\"use strict\"; return (' + expressionSyntax + ').constructor;')();\n\t} catch (e) {}\n};\n\nvar $gOPD = Object.getOwnPropertyDescriptor;\nif ($gOPD) {\n\ttry {\n\t\t$gOPD({}, '');\n\t} catch (e) {\n\t\t$gOPD = null; // this is IE 8, which has a broken gOPD\n\t}\n}\n\nvar throwTypeError = function () {\n\tthrow new $TypeError();\n};\nvar ThrowTypeError = $gOPD\n\t? (function () {\n\t\ttry {\n\t\t\t// eslint-disable-next-line no-unused-expressions, no-caller, no-restricted-properties\n\t\t\targuments.callee; // IE 8 does not throw here\n\t\t\treturn throwTypeError;\n\t\t} catch (calleeThrows) {\n\t\t\ttry {\n\t\t\t\t// IE 8 throws on Object.getOwnPropertyDescriptor(arguments, '')\n\t\t\t\treturn $gOPD(arguments, 'callee').get;\n\t\t\t} catch (gOPDthrows) {\n\t\t\t\treturn throwTypeError;\n\t\t\t}\n\t\t}\n\t}())\n\t: throwTypeError;\n\nvar hasSymbols = __webpack_require__(405)();\n\nvar getProto = Object.getPrototypeOf || function (x) { return x.__proto__; }; // eslint-disable-line no-proto\n\nvar needsEval = {};\n\nvar TypedArray = typeof Uint8Array === 'undefined' ? undefined : getProto(Uint8Array);\n\nvar INTRINSICS = {\n\t'%AggregateError%': typeof AggregateError === 'undefined' ? undefined : AggregateError,\n\t'%Array%': Array,\n\t'%ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer,\n\t'%ArrayIteratorPrototype%': hasSymbols ? getProto([][Symbol.iterator]()) : undefined,\n\t'%AsyncFromSyncIteratorPrototype%': undefined,\n\t'%AsyncFunction%': needsEval,\n\t'%AsyncGenerator%': needsEval,\n\t'%AsyncGeneratorFunction%': needsEval,\n\t'%AsyncIteratorPrototype%': needsEval,\n\t'%Atomics%': typeof Atomics === 'undefined' ? undefined : Atomics,\n\t'%BigInt%': typeof BigInt === 'undefined' ? undefined : BigInt,\n\t'%Boolean%': Boolean,\n\t'%DataView%': typeof DataView === 'undefined' ? undefined : DataView,\n\t'%Date%': Date,\n\t'%decodeURI%': decodeURI,\n\t'%decodeURIComponent%': decodeURIComponent,\n\t'%encodeURI%': encodeURI,\n\t'%encodeURIComponent%': encodeURIComponent,\n\t'%Error%': Error,\n\t'%eval%': eval, // eslint-disable-line no-eval\n\t'%EvalError%': EvalError,\n\t'%Float32Array%': typeof Float32Array === 'undefined' ? undefined : Float32Array,\n\t'%Float64Array%': typeof Float64Array === 'undefined' ? undefined : Float64Array,\n\t'%FinalizationRegistry%': typeof FinalizationRegistry === 'undefined' ? undefined : FinalizationRegistry,\n\t'%Function%': $Function,\n\t'%GeneratorFunction%': needsEval,\n\t'%Int8Array%': typeof Int8Array === 'undefined' ? undefined : Int8Array,\n\t'%Int16Array%': typeof Int16Array === 'undefined' ? undefined : Int16Array,\n\t'%Int32Array%': typeof Int32Array === 'undefined' ? undefined : Int32Array,\n\t'%isFinite%': isFinite,\n\t'%isNaN%': isNaN,\n\t'%IteratorPrototype%': hasSymbols ? getProto(getProto([][Symbol.iterator]())) : undefined,\n\t'%JSON%': typeof JSON === 'object' ? JSON : undefined,\n\t'%Map%': typeof Map === 'undefined' ? undefined : Map,\n\t'%MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols ? undefined : getProto(new Map()[Symbol.iterator]()),\n\t'%Math%': Math,\n\t'%Number%': Number,\n\t'%Object%': Object,\n\t'%parseFloat%': parseFloat,\n\t'%parseInt%': parseInt,\n\t'%Promise%': typeof Promise === 'undefined' ? undefined : Promise,\n\t'%Proxy%': typeof Proxy === 'undefined' ? undefined : Proxy,\n\t'%RangeError%': RangeError,\n\t'%ReferenceError%': ReferenceError,\n\t'%Reflect%': typeof Reflect === 'undefined' ? undefined : Reflect,\n\t'%RegExp%': RegExp,\n\t'%Set%': typeof Set === 'undefined' ? undefined : Set,\n\t'%SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols ? undefined : getProto(new Set()[Symbol.iterator]()),\n\t'%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer,\n\t'%String%': String,\n\t'%StringIteratorPrototype%': hasSymbols ? getProto(''[Symbol.iterator]()) : undefined,\n\t'%Symbol%': hasSymbols ? Symbol : undefined,\n\t'%SyntaxError%': $SyntaxError,\n\t'%ThrowTypeError%': ThrowTypeError,\n\t'%TypedArray%': TypedArray,\n\t'%TypeError%': $TypeError,\n\t'%Uint8Array%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array,\n\t'%Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray,\n\t'%Uint16Array%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array,\n\t'%Uint32Array%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array,\n\t'%URIError%': URIError,\n\t'%WeakMap%': typeof WeakMap === 'undefined' ? undefined : WeakMap,\n\t'%WeakRef%': typeof WeakRef === 'undefined' ? undefined : WeakRef,\n\t'%WeakSet%': typeof WeakSet === 'undefined' ? undefined : WeakSet\n};\n\nvar doEval = function doEval(name) {\n\tvar value;\n\tif (name === '%AsyncFunction%') {\n\t\tvalue = getEvalledConstructor('async function () {}');\n\t} else if (name === '%GeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('function* () {}');\n\t} else if (name === '%AsyncGeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('async function* () {}');\n\t} else if (name === '%AsyncGenerator%') {\n\t\tvar fn = doEval('%AsyncGeneratorFunction%');\n\t\tif (fn) {\n\t\t\tvalue = fn.prototype;\n\t\t}\n\t} else if (name === '%AsyncIteratorPrototype%') {\n\t\tvar gen = doEval('%AsyncGenerator%');\n\t\tif (gen) {\n\t\t\tvalue = getProto(gen.prototype);\n\t\t}\n\t}\n\n\tINTRINSICS[name] = value;\n\n\treturn value;\n};\n\nvar LEGACY_ALIASES = {\n\t'%ArrayBufferPrototype%': ['ArrayBuffer', 'prototype'],\n\t'%ArrayPrototype%': ['Array', 'prototype'],\n\t'%ArrayProto_entries%': ['Array', 'prototype', 'entries'],\n\t'%ArrayProto_forEach%': ['Array', 'prototype', 'forEach'],\n\t'%ArrayProto_keys%': ['Array', 'prototype', 'keys'],\n\t'%ArrayProto_values%': ['Array', 'prototype', 'values'],\n\t'%AsyncFunctionPrototype%': ['AsyncFunction', 'prototype'],\n\t'%AsyncGenerator%': ['AsyncGeneratorFunction', 'prototype'],\n\t'%AsyncGeneratorPrototype%': ['AsyncGeneratorFunction', 'prototype', 'prototype'],\n\t'%BooleanPrototype%': ['Boolean', 'prototype'],\n\t'%DataViewPrototype%': ['DataView', 'prototype'],\n\t'%DatePrototype%': ['Date', 'prototype'],\n\t'%ErrorPrototype%': ['Error', 'prototype'],\n\t'%EvalErrorPrototype%': ['EvalError', 'prototype'],\n\t'%Float32ArrayPrototype%': ['Float32Array', 'prototype'],\n\t'%Float64ArrayPrototype%': ['Float64Array', 'prototype'],\n\t'%FunctionPrototype%': ['Function', 'prototype'],\n\t'%Generator%': ['GeneratorFunction', 'prototype'],\n\t'%GeneratorPrototype%': ['GeneratorFunction', 'prototype', 'prototype'],\n\t'%Int8ArrayPrototype%': ['Int8Array', 'prototype'],\n\t'%Int16ArrayPrototype%': ['Int16Array', 'prototype'],\n\t'%Int32ArrayPrototype%': ['Int32Array', 'prototype'],\n\t'%JSONParse%': ['JSON', 'parse'],\n\t'%JSONStringify%': ['JSON', 'stringify'],\n\t'%MapPrototype%': ['Map', 'prototype'],\n\t'%NumberPrototype%': ['Number', 'prototype'],\n\t'%ObjectPrototype%': ['Object', 'prototype'],\n\t'%ObjProto_toString%': ['Object', 'prototype', 'toString'],\n\t'%ObjProto_valueOf%': ['Object', 'prototype', 'valueOf'],\n\t'%PromisePrototype%': ['Promise', 'prototype'],\n\t'%PromiseProto_then%': ['Promise', 'prototype', 'then'],\n\t'%Promise_all%': ['Promise', 'all'],\n\t'%Promise_reject%': ['Promise', 'reject'],\n\t'%Promise_resolve%': ['Promise', 'resolve'],\n\t'%RangeErrorPrototype%': ['RangeError', 'prototype'],\n\t'%ReferenceErrorPrototype%': ['ReferenceError', 'prototype'],\n\t'%RegExpPrototype%': ['RegExp', 'prototype'],\n\t'%SetPrototype%': ['Set', 'prototype'],\n\t'%SharedArrayBufferPrototype%': ['SharedArrayBuffer', 'prototype'],\n\t'%StringPrototype%': ['String', 'prototype'],\n\t'%SymbolPrototype%': ['Symbol', 'prototype'],\n\t'%SyntaxErrorPrototype%': ['SyntaxError', 'prototype'],\n\t'%TypedArrayPrototype%': ['TypedArray', 'prototype'],\n\t'%TypeErrorPrototype%': ['TypeError', 'prototype'],\n\t'%Uint8ArrayPrototype%': ['Uint8Array', 'prototype'],\n\t'%Uint8ClampedArrayPrototype%': ['Uint8ClampedArray', 'prototype'],\n\t'%Uint16ArrayPrototype%': ['Uint16Array', 'prototype'],\n\t'%Uint32ArrayPrototype%': ['Uint32Array', 'prototype'],\n\t'%URIErrorPrototype%': ['URIError', 'prototype'],\n\t'%WeakMapPrototype%': ['WeakMap', 'prototype'],\n\t'%WeakSetPrototype%': ['WeakSet', 'prototype']\n};\n\nvar bind = __webpack_require__(612);\nvar hasOwn = __webpack_require__(642);\nvar $concat = bind.call(Function.call, Array.prototype.concat);\nvar $spliceApply = bind.call(Function.apply, Array.prototype.splice);\nvar $replace = bind.call(Function.call, String.prototype.replace);\nvar $strSlice = bind.call(Function.call, String.prototype.slice);\n\n/* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */\nvar rePropName = /[^%.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|%$))/g;\nvar reEscapeChar = /\\\\(\\\\)?/g; /** Used to match backslashes in property paths. */\nvar stringToPath = function stringToPath(string) {\n\tvar first = $strSlice(string, 0, 1);\n\tvar last = $strSlice(string, -1);\n\tif (first === '%' && last !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected closing `%`');\n\t} else if (last === '%' && first !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected opening `%`');\n\t}\n\tvar result = [];\n\t$replace(string, rePropName, function (match, number, quote, subString) {\n\t\tresult[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : number || match;\n\t});\n\treturn result;\n};\n/* end adaptation */\n\nvar getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) {\n\tvar intrinsicName = name;\n\tvar alias;\n\tif (hasOwn(LEGACY_ALIASES, intrinsicName)) {\n\t\talias = LEGACY_ALIASES[intrinsicName];\n\t\tintrinsicName = '%' + alias[0] + '%';\n\t}\n\n\tif (hasOwn(INTRINSICS, intrinsicName)) {\n\t\tvar value = INTRINSICS[intrinsicName];\n\t\tif (value === needsEval) {\n\t\t\tvalue = doEval(intrinsicName);\n\t\t}\n\t\tif (typeof value === 'undefined' && !allowMissing) {\n\t\t\tthrow new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!');\n\t\t}\n\n\t\treturn {\n\t\t\talias: alias,\n\t\t\tname: intrinsicName,\n\t\t\tvalue: value\n\t\t};\n\t}\n\n\tthrow new $SyntaxError('intrinsic ' + name + ' does not exist!');\n};\n\nmodule.exports = function GetIntrinsic(name, allowMissing) {\n\tif (typeof name !== 'string' || name.length === 0) {\n\t\tthrow new $TypeError('intrinsic name must be a non-empty string');\n\t}\n\tif (arguments.length > 1 && typeof allowMissing !== 'boolean') {\n\t\tthrow new $TypeError('\"allowMissing\" argument must be a boolean');\n\t}\n\n\tvar parts = stringToPath(name);\n\tvar intrinsicBaseName = parts.length > 0 ? parts[0] : '';\n\n\tvar intrinsic = getBaseIntrinsic('%' + intrinsicBaseName + '%', allowMissing);\n\tvar intrinsicRealName = intrinsic.name;\n\tvar value = intrinsic.value;\n\tvar skipFurtherCaching = false;\n\n\tvar alias = intrinsic.alias;\n\tif (alias) {\n\t\tintrinsicBaseName = alias[0];\n\t\t$spliceApply(parts, $concat([0, 1], alias));\n\t}\n\n\tfor (var i = 1, isOwn = true; i < parts.length; i += 1) {\n\t\tvar part = parts[i];\n\t\tvar first = $strSlice(part, 0, 1);\n\t\tvar last = $strSlice(part, -1);\n\t\tif (\n\t\t\t(\n\t\t\t\t(first === '\"' || first === \"'\" || first === '`')\n\t\t\t\t|| (last === '\"' || last === \"'\" || last === '`')\n\t\t\t)\n\t\t\t&& first !== last\n\t\t) {\n\t\t\tthrow new $SyntaxError('property names with quotes must have matching quotes');\n\t\t}\n\t\tif (part === 'constructor' || !isOwn) {\n\t\t\tskipFurtherCaching = true;\n\t\t}\n\n\t\tintrinsicBaseName += '.' + part;\n\t\tintrinsicRealName = '%' + intrinsicBaseName + '%';\n\n\t\tif (hasOwn(INTRINSICS, intrinsicRealName)) {\n\t\t\tvalue = INTRINSICS[intrinsicRealName];\n\t\t} else if (value != null) {\n\t\t\tif (!(part in value)) {\n\t\t\t\tif (!allowMissing) {\n\t\t\t\t\tthrow new $TypeError('base intrinsic for ' + name + ' exists, but the property is not available.');\n\t\t\t\t}\n\t\t\t\treturn void undefined;\n\t\t\t}\n\t\t\tif ($gOPD && (i + 1) >= parts.length) {\n\t\t\t\tvar desc = $gOPD(value, part);\n\t\t\t\tisOwn = !!desc;\n\n\t\t\t\t// By convention, when a data property is converted to an accessor\n\t\t\t\t// property to emulate a data property that does not suffer from\n\t\t\t\t// the override mistake, that accessor's getter is marked with\n\t\t\t\t// an `originalValue` property. Here, when we detect this, we\n\t\t\t\t// uphold the illusion by pretending to see that original data\n\t\t\t\t// property, i.e., returning the value rather than the getter\n\t\t\t\t// itself.\n\t\t\t\tif (isOwn && 'get' in desc && !('originalValue' in desc.get)) {\n\t\t\t\t\tvalue = desc.get;\n\t\t\t\t} else {\n\t\t\t\t\tvalue = value[part];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tisOwn = hasOwn(value, part);\n\t\t\t\tvalue = value[part];\n\t\t\t}\n\n\t\t\tif (isOwn && !skipFurtherCaching) {\n\t\t\t\tINTRINSICS[intrinsicRealName] = value;\n\t\t\t}\n\t\t}\n\t}\n\treturn value;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjEwLmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3NtYWxsLWN0Ly4vbm9kZV9tb2R1bGVzL2dldC1pbnRyaW5zaWMvaW5kZXguanM/MDBjZSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB1bmRlZmluZWQ7XG5cbnZhciAkU3ludGF4RXJyb3IgPSBTeW50YXhFcnJvcjtcbnZhciAkRnVuY3Rpb24gPSBGdW5jdGlvbjtcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbnZhciBnZXRFdmFsbGVkQ29uc3RydWN0b3IgPSBmdW5jdGlvbiAoZXhwcmVzc2lvblN5bnRheCkge1xuXHR0cnkge1xuXHRcdHJldHVybiAkRnVuY3Rpb24oJ1widXNlIHN0cmljdFwiOyByZXR1cm4gKCcgKyBleHByZXNzaW9uU3ludGF4ICsgJykuY29uc3RydWN0b3I7JykoKTtcblx0fSBjYXRjaCAoZSkge31cbn07XG5cbnZhciAkZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5pZiAoJGdPUEQpIHtcblx0dHJ5IHtcblx0XHQkZ09QRCh7fSwgJycpO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0JGdPUEQgPSBudWxsOyAvLyB0aGlzIGlzIElFIDgsIHdoaWNoIGhhcyBhIGJyb2tlbiBnT1BEXG5cdH1cbn1cblxudmFyIHRocm93VHlwZUVycm9yID0gZnVuY3Rpb24gKCkge1xuXHR0aHJvdyBuZXcgJFR5cGVFcnJvcigpO1xufTtcbnZhciBUaHJvd1R5cGVFcnJvciA9ICRnT1BEXG5cdD8gKGZ1bmN0aW9uICgpIHtcblx0XHR0cnkge1xuXHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC1leHByZXNzaW9ucywgbm8tY2FsbGVyLCBuby1yZXN0cmljdGVkLXByb3BlcnRpZXNcblx0XHRcdGFyZ3VtZW50cy5jYWxsZWU7IC8vIElFIDggZG9lcyBub3QgdGhyb3cgaGVyZVxuXHRcdFx0cmV0dXJuIHRocm93VHlwZUVycm9yO1xuXHRcdH0gY2F0Y2ggKGNhbGxlZVRocm93cykge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0Ly8gSUUgOCB0aHJvd3Mgb24gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihhcmd1bWVudHMsICcnKVxuXHRcdFx0XHRyZXR1cm4gJGdPUEQoYXJndW1lbnRzLCAnY2FsbGVlJykuZ2V0O1xuXHRcdFx0fSBjYXRjaCAoZ09QRHRocm93cykge1xuXHRcdFx0XHRyZXR1cm4gdGhyb3dUeXBlRXJyb3I7XG5cdFx0XHR9XG5cdFx0fVxuXHR9KCkpXG5cdDogdGhyb3dUeXBlRXJyb3I7XG5cbnZhciBoYXNTeW1ib2xzID0gcmVxdWlyZSgnaGFzLXN5bWJvbHMnKSgpO1xuXG52YXIgZ2V0UHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHguX19wcm90b19fOyB9OyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXByb3RvXG5cbnZhciBuZWVkc0V2YWwgPSB7fTtcblxudmFyIFR5cGVkQXJyYXkgPSB0eXBlb2YgVWludDhBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBnZXRQcm90byhVaW50OEFycmF5KTtcblxudmFyIElOVFJJTlNJQ1MgPSB7XG5cdCclQWdncmVnYXRlRXJyb3IlJzogdHlwZW9mIEFnZ3JlZ2F0ZUVycm9yID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEFnZ3JlZ2F0ZUVycm9yLFxuXHQnJUFycmF5JSc6IEFycmF5LFxuXHQnJUFycmF5QnVmZmVyJSc6IHR5cGVvZiBBcnJheUJ1ZmZlciA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBBcnJheUJ1ZmZlcixcblx0JyVBcnJheUl0ZXJhdG9yUHJvdG90eXBlJSc6IGhhc1N5bWJvbHMgPyBnZXRQcm90byhbXVtTeW1ib2wuaXRlcmF0b3JdKCkpIDogdW5kZWZpbmVkLFxuXHQnJUFzeW5jRnJvbVN5bmNJdGVyYXRvclByb3RvdHlwZSUnOiB1bmRlZmluZWQsXG5cdCclQXN5bmNGdW5jdGlvbiUnOiBuZWVkc0V2YWwsXG5cdCclQXN5bmNHZW5lcmF0b3IlJzogbmVlZHNFdmFsLFxuXHQnJUFzeW5jR2VuZXJhdG9yRnVuY3Rpb24lJzogbmVlZHNFdmFsLFxuXHQnJUFzeW5jSXRlcmF0b3JQcm90b3R5cGUlJzogbmVlZHNFdmFsLFxuXHQnJUF0b21pY3MlJzogdHlwZW9mIEF0b21pY3MgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogQXRvbWljcyxcblx0JyVCaWdJbnQlJzogdHlwZW9mIEJpZ0ludCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBCaWdJbnQsXG5cdCclQm9vbGVhbiUnOiBCb29sZWFuLFxuXHQnJURhdGFWaWV3JSc6IHR5cGVvZiBEYXRhVmlldyA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBEYXRhVmlldyxcblx0JyVEYXRlJSc6IERhdGUsXG5cdCclZGVjb2RlVVJJJSc6IGRlY29kZVVSSSxcblx0JyVkZWNvZGVVUklDb21wb25lbnQlJzogZGVjb2RlVVJJQ29tcG9uZW50LFxuXHQnJWVuY29kZVVSSSUnOiBlbmNvZGVVUkksXG5cdCclZW5jb2RlVVJJQ29tcG9uZW50JSc6IGVuY29kZVVSSUNvbXBvbmVudCxcblx0JyVFcnJvciUnOiBFcnJvcixcblx0JyVldmFsJSc6IGV2YWwsIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZXZhbFxuXHQnJUV2YWxFcnJvciUnOiBFdmFsRXJyb3IsXG5cdCclRmxvYXQzMkFycmF5JSc6IHR5cGVvZiBGbG9hdDMyQXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogRmxvYXQzMkFycmF5LFxuXHQnJUZsb2F0NjRBcnJheSUnOiB0eXBlb2YgRmxvYXQ2NEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEZsb2F0NjRBcnJheSxcblx0JyVGaW5hbGl6YXRpb25SZWdpc3RyeSUnOiB0eXBlb2YgRmluYWxpemF0aW9uUmVnaXN0cnkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogRmluYWxpemF0aW9uUmVnaXN0cnksXG5cdCclRnVuY3Rpb24lJzogJEZ1bmN0aW9uLFxuXHQnJUdlbmVyYXRvckZ1bmN0aW9uJSc6IG5lZWRzRXZhbCxcblx0JyVJbnQ4QXJyYXklJzogdHlwZW9mIEludDhBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBJbnQ4QXJyYXksXG5cdCclSW50MTZBcnJheSUnOiB0eXBlb2YgSW50MTZBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBJbnQxNkFycmF5LFxuXHQnJUludDMyQXJyYXklJzogdHlwZW9mIEludDMyQXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogSW50MzJBcnJheSxcblx0JyVpc0Zpbml0ZSUnOiBpc0Zpbml0ZSxcblx0JyVpc05hTiUnOiBpc05hTixcblx0JyVJdGVyYXRvclByb3RvdHlwZSUnOiBoYXNTeW1ib2xzID8gZ2V0UHJvdG8oZ2V0UHJvdG8oW11bU3ltYm9sLml0ZXJhdG9yXSgpKSkgOiB1bmRlZmluZWQsXG5cdCclSlNPTiUnOiB0eXBlb2YgSlNPTiA9PT0gJ29iamVjdCcgPyBKU09OIDogdW5kZWZpbmVkLFxuXHQnJU1hcCUnOiB0eXBlb2YgTWFwID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IE1hcCxcblx0JyVNYXBJdGVyYXRvclByb3RvdHlwZSUnOiB0eXBlb2YgTWFwID09PSAndW5kZWZpbmVkJyB8fCAhaGFzU3ltYm9scyA/IHVuZGVmaW5lZCA6IGdldFByb3RvKG5ldyBNYXAoKVtTeW1ib2wuaXRlcmF0b3JdKCkpLFxuXHQnJU1hdGglJzogTWF0aCxcblx0JyVOdW1iZXIlJzogTnVtYmVyLFxuXHQnJU9iamVjdCUnOiBPYmplY3QsXG5cdCclcGFyc2VGbG9hdCUnOiBwYXJzZUZsb2F0LFxuXHQnJXBhcnNlSW50JSc6IHBhcnNlSW50LFxuXHQnJVByb21pc2UlJzogdHlwZW9mIFByb21pc2UgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogUHJvbWlzZSxcblx0JyVQcm94eSUnOiB0eXBlb2YgUHJveHkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogUHJveHksXG5cdCclUmFuZ2VFcnJvciUnOiBSYW5nZUVycm9yLFxuXHQnJVJlZmVyZW5jZUVycm9yJSc6IFJlZmVyZW5jZUVycm9yLFxuXHQnJVJlZmxlY3QlJzogdHlwZW9mIFJlZmxlY3QgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogUmVmbGVjdCxcblx0JyVSZWdFeHAlJzogUmVnRXhwLFxuXHQnJVNldCUnOiB0eXBlb2YgU2V0ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFNldCxcblx0JyVTZXRJdGVyYXRvclByb3RvdHlwZSUnOiB0eXBlb2YgU2V0ID09PSAndW5kZWZpbmVkJyB8fCAhaGFzU3ltYm9scyA/IHVuZGVmaW5lZCA6IGdldFByb3RvKG5ldyBTZXQoKVtTeW1ib2wuaXRlcmF0b3JdKCkpLFxuXHQnJVNoYXJlZEFycmF5QnVmZmVyJSc6IHR5cGVvZiBTaGFyZWRBcnJheUJ1ZmZlciA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBTaGFyZWRBcnJheUJ1ZmZlcixcblx0JyVTdHJpbmclJzogU3RyaW5nLFxuXHQnJVN0cmluZ0l0ZXJhdG9yUHJvdG90eXBlJSc6IGhhc1N5bWJvbHMgPyBnZXRQcm90bygnJ1tTeW1ib2wuaXRlcmF0b3JdKCkpIDogdW5kZWZpbmVkLFxuXHQnJVN5bWJvbCUnOiBoYXNTeW1ib2xzID8gU3ltYm9sIDogdW5kZWZpbmVkLFxuXHQnJVN5bnRheEVycm9yJSc6ICRTeW50YXhFcnJvcixcblx0JyVUaHJvd1R5cGVFcnJvciUnOiBUaHJvd1R5cGVFcnJvcixcblx0JyVUeXBlZEFycmF5JSc6IFR5cGVkQXJyYXksXG5cdCclVHlwZUVycm9yJSc6ICRUeXBlRXJyb3IsXG5cdCclVWludDhBcnJheSUnOiB0eXBlb2YgVWludDhBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBVaW50OEFycmF5LFxuXHQnJVVpbnQ4Q2xhbXBlZEFycmF5JSc6IHR5cGVvZiBVaW50OENsYW1wZWRBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBVaW50OENsYW1wZWRBcnJheSxcblx0JyVVaW50MTZBcnJheSUnOiB0eXBlb2YgVWludDE2QXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogVWludDE2QXJyYXksXG5cdCclVWludDMyQXJyYXklJzogdHlwZW9mIFVpbnQzMkFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFVpbnQzMkFycmF5LFxuXHQnJVVSSUVycm9yJSc6IFVSSUVycm9yLFxuXHQnJVdlYWtNYXAlJzogdHlwZW9mIFdlYWtNYXAgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogV2Vha01hcCxcblx0JyVXZWFrUmVmJSc6IHR5cGVvZiBXZWFrUmVmID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFdlYWtSZWYsXG5cdCclV2Vha1NldCUnOiB0eXBlb2YgV2Vha1NldCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBXZWFrU2V0XG59O1xuXG52YXIgZG9FdmFsID0gZnVuY3Rpb24gZG9FdmFsKG5hbWUpIHtcblx0dmFyIHZhbHVlO1xuXHRpZiAobmFtZSA9PT0gJyVBc3luY0Z1bmN0aW9uJScpIHtcblx0XHR2YWx1ZSA9IGdldEV2YWxsZWRDb25zdHJ1Y3RvcignYXN5bmMgZnVuY3Rpb24gKCkge30nKTtcblx0fSBlbHNlIGlmIChuYW1lID09PSAnJUdlbmVyYXRvckZ1bmN0aW9uJScpIHtcblx0XHR2YWx1ZSA9IGdldEV2YWxsZWRDb25zdHJ1Y3RvcignZnVuY3Rpb24qICgpIHt9Jyk7XG5cdH0gZWxzZSBpZiAobmFtZSA9PT0gJyVBc3luY0dlbmVyYXRvckZ1bmN0aW9uJScpIHtcblx0XHR2YWx1ZSA9IGdldEV2YWxsZWRDb25zdHJ1Y3RvcignYXN5bmMgZnVuY3Rpb24qICgpIHt9Jyk7XG5cdH0gZWxzZSBpZiAobmFtZSA9PT0gJyVBc3luY0dlbmVyYXRvciUnKSB7XG5cdFx0dmFyIGZuID0gZG9FdmFsKCclQXN5bmNHZW5lcmF0b3JGdW5jdGlvbiUnKTtcblx0XHRpZiAoZm4pIHtcblx0XHRcdHZhbHVlID0gZm4ucHJvdG90eXBlO1xuXHRcdH1cblx0fSBlbHNlIGlmIChuYW1lID09PSAnJUFzeW5jSXRlcmF0b3JQcm90b3R5cGUlJykge1xuXHRcdHZhciBnZW4gPSBkb0V2YWwoJyVBc3luY0dlbmVyYXRvciUnKTtcblx0XHRpZiAoZ2VuKSB7XG5cdFx0XHR2YWx1ZSA9IGdldFByb3RvKGdlbi5wcm90b3R5cGUpO1xuXHRcdH1cblx0fVxuXG5cdElOVFJJTlNJQ1NbbmFtZV0gPSB2YWx1ZTtcblxuXHRyZXR1cm4gdmFsdWU7XG59O1xuXG52YXIgTEVHQUNZX0FMSUFTRVMgPSB7XG5cdCclQXJyYXlCdWZmZXJQcm90b3R5cGUlJzogWydBcnJheUJ1ZmZlcicsICdwcm90b3R5cGUnXSxcblx0JyVBcnJheVByb3RvdHlwZSUnOiBbJ0FycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJUFycmF5UHJvdG9fZW50cmllcyUnOiBbJ0FycmF5JywgJ3Byb3RvdHlwZScsICdlbnRyaWVzJ10sXG5cdCclQXJyYXlQcm90b19mb3JFYWNoJSc6IFsnQXJyYXknLCAncHJvdG90eXBlJywgJ2ZvckVhY2gnXSxcblx0JyVBcnJheVByb3RvX2tleXMlJzogWydBcnJheScsICdwcm90b3R5cGUnLCAna2V5cyddLFxuXHQnJUFycmF5UHJvdG9fdmFsdWVzJSc6IFsnQXJyYXknLCAncHJvdG90eXBlJywgJ3ZhbHVlcyddLFxuXHQnJUFzeW5jRnVuY3Rpb25Qcm90b3R5cGUlJzogWydBc3luY0Z1bmN0aW9uJywgJ3Byb3RvdHlwZSddLFxuXHQnJUFzeW5jR2VuZXJhdG9yJSc6IFsnQXN5bmNHZW5lcmF0b3JGdW5jdGlvbicsICdwcm90b3R5cGUnXSxcblx0JyVBc3luY0dlbmVyYXRvclByb3RvdHlwZSUnOiBbJ0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24nLCAncHJvdG90eXBlJywgJ3Byb3RvdHlwZSddLFxuXHQnJUJvb2xlYW5Qcm90b3R5cGUlJzogWydCb29sZWFuJywgJ3Byb3RvdHlwZSddLFxuXHQnJURhdGFWaWV3UHJvdG90eXBlJSc6IFsnRGF0YVZpZXcnLCAncHJvdG90eXBlJ10sXG5cdCclRGF0ZVByb3RvdHlwZSUnOiBbJ0RhdGUnLCAncHJvdG90eXBlJ10sXG5cdCclRXJyb3JQcm90b3R5cGUlJzogWydFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVFdmFsRXJyb3JQcm90b3R5cGUlJzogWydFdmFsRXJyb3InLCAncHJvdG90eXBlJ10sXG5cdCclRmxvYXQzMkFycmF5UHJvdG90eXBlJSc6IFsnRmxvYXQzMkFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJUZsb2F0NjRBcnJheVByb3RvdHlwZSUnOiBbJ0Zsb2F0NjRBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVGdW5jdGlvblByb3RvdHlwZSUnOiBbJ0Z1bmN0aW9uJywgJ3Byb3RvdHlwZSddLFxuXHQnJUdlbmVyYXRvciUnOiBbJ0dlbmVyYXRvckZ1bmN0aW9uJywgJ3Byb3RvdHlwZSddLFxuXHQnJUdlbmVyYXRvclByb3RvdHlwZSUnOiBbJ0dlbmVyYXRvckZ1bmN0aW9uJywgJ3Byb3RvdHlwZScsICdwcm90b3R5cGUnXSxcblx0JyVJbnQ4QXJyYXlQcm90b3R5cGUlJzogWydJbnQ4QXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclSW50MTZBcnJheVByb3RvdHlwZSUnOiBbJ0ludDE2QXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclSW50MzJBcnJheVByb3RvdHlwZSUnOiBbJ0ludDMyQXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclSlNPTlBhcnNlJSc6IFsnSlNPTicsICdwYXJzZSddLFxuXHQnJUpTT05TdHJpbmdpZnklJzogWydKU09OJywgJ3N0cmluZ2lmeSddLFxuXHQnJU1hcFByb3RvdHlwZSUnOiBbJ01hcCcsICdwcm90b3R5cGUnXSxcblx0JyVOdW1iZXJQcm90b3R5cGUlJzogWydOdW1iZXInLCAncHJvdG90eXBlJ10sXG5cdCclT2JqZWN0UHJvdG90eXBlJSc6IFsnT2JqZWN0JywgJ3Byb3RvdHlwZSddLFxuXHQnJU9ialByb3RvX3RvU3RyaW5nJSc6IFsnT2JqZWN0JywgJ3Byb3RvdHlwZScsICd0b1N0cmluZyddLFxuXHQnJU9ialByb3RvX3ZhbHVlT2YlJzogWydPYmplY3QnLCAncHJvdG90eXBlJywgJ3ZhbHVlT2YnXSxcblx0JyVQcm9taXNlUHJvdG90eXBlJSc6IFsnUHJvbWlzZScsICdwcm90b3R5cGUnXSxcblx0JyVQcm9taXNlUHJvdG9fdGhlbiUnOiBbJ1Byb21pc2UnLCAncHJvdG90eXBlJywgJ3RoZW4nXSxcblx0JyVQcm9taXNlX2FsbCUnOiBbJ1Byb21pc2UnLCAnYWxsJ10sXG5cdCclUHJvbWlzZV9yZWplY3QlJzogWydQcm9taXNlJywgJ3JlamVjdCddLFxuXHQnJVByb21pc2VfcmVzb2x2ZSUnOiBbJ1Byb21pc2UnLCAncmVzb2x2ZSddLFxuXHQnJVJhbmdlRXJyb3JQcm90b3R5cGUlJzogWydSYW5nZUVycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJVJlZmVyZW5jZUVycm9yUHJvdG90eXBlJSc6IFsnUmVmZXJlbmNlRXJyb3InLCAncHJvdG90eXBlJ10sXG5cdCclUmVnRXhwUHJvdG90eXBlJSc6IFsnUmVnRXhwJywgJ3Byb3RvdHlwZSddLFxuXHQnJVNldFByb3RvdHlwZSUnOiBbJ1NldCcsICdwcm90b3R5cGUnXSxcblx0JyVTaGFyZWRBcnJheUJ1ZmZlclByb3RvdHlwZSUnOiBbJ1NoYXJlZEFycmF5QnVmZmVyJywgJ3Byb3RvdHlwZSddLFxuXHQnJVN0cmluZ1Byb3RvdHlwZSUnOiBbJ1N0cmluZycsICdwcm90b3R5cGUnXSxcblx0JyVTeW1ib2xQcm90b3R5cGUlJzogWydTeW1ib2wnLCAncHJvdG90eXBlJ10sXG5cdCclU3ludGF4RXJyb3JQcm90b3R5cGUlJzogWydTeW50YXhFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVUeXBlZEFycmF5UHJvdG90eXBlJSc6IFsnVHlwZWRBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVUeXBlRXJyb3JQcm90b3R5cGUlJzogWydUeXBlRXJyb3InLCAncHJvdG90eXBlJ10sXG5cdCclVWludDhBcnJheVByb3RvdHlwZSUnOiBbJ1VpbnQ4QXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclVWludDhDbGFtcGVkQXJyYXlQcm90b3R5cGUlJzogWydVaW50OENsYW1wZWRBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVVaW50MTZBcnJheVByb3RvdHlwZSUnOiBbJ1VpbnQxNkFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJVVpbnQzMkFycmF5UHJvdG90eXBlJSc6IFsnVWludDMyQXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclVVJJRXJyb3JQcm90b3R5cGUlJzogWydVUklFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVXZWFrTWFwUHJvdG90eXBlJSc6IFsnV2Vha01hcCcsICdwcm90b3R5cGUnXSxcblx0JyVXZWFrU2V0UHJvdG90eXBlJSc6IFsnV2Vha1NldCcsICdwcm90b3R5cGUnXVxufTtcblxudmFyIGJpbmQgPSByZXF1aXJlKCdmdW5jdGlvbi1iaW5kJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnaGFzJyk7XG52YXIgJGNvbmNhdCA9IGJpbmQuY2FsbChGdW5jdGlvbi5jYWxsLCBBcnJheS5wcm90b3R5cGUuY29uY2F0KTtcbnZhciAkc3BsaWNlQXBwbHkgPSBiaW5kLmNhbGwoRnVuY3Rpb24uYXBwbHksIEFycmF5LnByb3RvdHlwZS5zcGxpY2UpO1xudmFyICRyZXBsYWNlID0gYmluZC5jYWxsKEZ1bmN0aW9uLmNhbGwsIFN0cmluZy5wcm90b3R5cGUucmVwbGFjZSk7XG52YXIgJHN0clNsaWNlID0gYmluZC5jYWxsKEZ1bmN0aW9uLmNhbGwsIFN0cmluZy5wcm90b3R5cGUuc2xpY2UpO1xuXG4vKiBhZGFwdGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2xvZGFzaC9sb2Rhc2gvYmxvYi80LjE3LjE1L2Rpc3QvbG9kYXNoLmpzI0w2NzM1LUw2NzQ0ICovXG52YXIgcmVQcm9wTmFtZSA9IC9bXiUuW1xcXV0rfFxcWyg/OigtP1xcZCsoPzpcXC5cXGQrKT8pfChbXCInXSkoKD86KD8hXFwyKVteXFxcXF18XFxcXC4pKj8pXFwyKVxcXXwoPz0oPzpcXC58XFxbXFxdKSg/OlxcLnxcXFtcXF18JSQpKS9nO1xudmFyIHJlRXNjYXBlQ2hhciA9IC9cXFxcKFxcXFwpPy9nOyAvKiogVXNlZCB0byBtYXRjaCBiYWNrc2xhc2hlcyBpbiBwcm9wZXJ0eSBwYXRocy4gKi9cbnZhciBzdHJpbmdUb1BhdGggPSBmdW5jdGlvbiBzdHJpbmdUb1BhdGgoc3RyaW5nKSB7XG5cdHZhciBmaXJzdCA9ICRzdHJTbGljZShzdHJpbmcsIDAsIDEpO1xuXHR2YXIgbGFzdCA9ICRzdHJTbGljZShzdHJpbmcsIC0xKTtcblx0aWYgKGZpcnN0ID09PSAnJScgJiYgbGFzdCAhPT0gJyUnKSB7XG5cdFx0dGhyb3cgbmV3ICRTeW50YXhFcnJvcignaW52YWxpZCBpbnRyaW5zaWMgc3ludGF4LCBleHBlY3RlZCBjbG9zaW5nIGAlYCcpO1xuXHR9IGVsc2UgaWYgKGxhc3QgPT09ICclJyAmJiBmaXJzdCAhPT0gJyUnKSB7XG5cdFx0dGhyb3cgbmV3ICRTeW50YXhFcnJvcignaW52YWxpZCBpbnRyaW5zaWMgc3ludGF4LCBleHBlY3RlZCBvcGVuaW5nIGAlYCcpO1xuXHR9XG5cdHZhciByZXN1bHQgPSBbXTtcblx0JHJlcGxhY2Uoc3RyaW5nLCByZVByb3BOYW1lLCBmdW5jdGlvbiAobWF0Y2gsIG51bWJlciwgcXVvdGUsIHN1YlN0cmluZykge1xuXHRcdHJlc3VsdFtyZXN1bHQubGVuZ3RoXSA9IHF1b3RlID8gJHJlcGxhY2Uoc3ViU3RyaW5nLCByZUVzY2FwZUNoYXIsICckMScpIDogbnVtYmVyIHx8IG1hdGNoO1xuXHR9KTtcblx0cmV0dXJuIHJlc3VsdDtcbn07XG4vKiBlbmQgYWRhcHRhdGlvbiAqL1xuXG52YXIgZ2V0QmFzZUludHJpbnNpYyA9IGZ1bmN0aW9uIGdldEJhc2VJbnRyaW5zaWMobmFtZSwgYWxsb3dNaXNzaW5nKSB7XG5cdHZhciBpbnRyaW5zaWNOYW1lID0gbmFtZTtcblx0dmFyIGFsaWFzO1xuXHRpZiAoaGFzT3duKExFR0FDWV9BTElBU0VTLCBpbnRyaW5zaWNOYW1lKSkge1xuXHRcdGFsaWFzID0gTEVHQUNZX0FMSUFTRVNbaW50cmluc2ljTmFtZV07XG5cdFx0aW50cmluc2ljTmFtZSA9ICclJyArIGFsaWFzWzBdICsgJyUnO1xuXHR9XG5cblx0aWYgKGhhc093bihJTlRSSU5TSUNTLCBpbnRyaW5zaWNOYW1lKSkge1xuXHRcdHZhciB2YWx1ZSA9IElOVFJJTlNJQ1NbaW50cmluc2ljTmFtZV07XG5cdFx0aWYgKHZhbHVlID09PSBuZWVkc0V2YWwpIHtcblx0XHRcdHZhbHVlID0gZG9FdmFsKGludHJpbnNpY05hbWUpO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJyAmJiAhYWxsb3dNaXNzaW5nKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignaW50cmluc2ljICcgKyBuYW1lICsgJyBleGlzdHMsIGJ1dCBpcyBub3QgYXZhaWxhYmxlLiBQbGVhc2UgZmlsZSBhbiBpc3N1ZSEnKTtcblx0XHR9XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0YWxpYXM6IGFsaWFzLFxuXHRcdFx0bmFtZTogaW50cmluc2ljTmFtZSxcblx0XHRcdHZhbHVlOiB2YWx1ZVxuXHRcdH07XG5cdH1cblxuXHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCdpbnRyaW5zaWMgJyArIG5hbWUgKyAnIGRvZXMgbm90IGV4aXN0IScpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBHZXRJbnRyaW5zaWMobmFtZSwgYWxsb3dNaXNzaW5nKSB7XG5cdGlmICh0eXBlb2YgbmFtZSAhPT0gJ3N0cmluZycgfHwgbmFtZS5sZW5ndGggPT09IDApIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignaW50cmluc2ljIG5hbWUgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmcnKTtcblx0fVxuXHRpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgdHlwZW9mIGFsbG93TWlzc2luZyAhPT0gJ2Jvb2xlYW4nKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ1wiYWxsb3dNaXNzaW5nXCIgYXJndW1lbnQgbXVzdCBiZSBhIGJvb2xlYW4nKTtcblx0fVxuXG5cdHZhciBwYXJ0cyA9IHN0cmluZ1RvUGF0aChuYW1lKTtcblx0dmFyIGludHJpbnNpY0Jhc2VOYW1lID0gcGFydHMubGVuZ3RoID4gMCA/IHBhcnRzWzBdIDogJyc7XG5cblx0dmFyIGludHJpbnNpYyA9IGdldEJhc2VJbnRyaW5zaWMoJyUnICsgaW50cmluc2ljQmFzZU5hbWUgKyAnJScsIGFsbG93TWlzc2luZyk7XG5cdHZhciBpbnRyaW5zaWNSZWFsTmFtZSA9IGludHJpbnNpYy5uYW1lO1xuXHR2YXIgdmFsdWUgPSBpbnRyaW5zaWMudmFsdWU7XG5cdHZhciBza2lwRnVydGhlckNhY2hpbmcgPSBmYWxzZTtcblxuXHR2YXIgYWxpYXMgPSBpbnRyaW5zaWMuYWxpYXM7XG5cdGlmIChhbGlhcykge1xuXHRcdGludHJpbnNpY0Jhc2VOYW1lID0gYWxpYXNbMF07XG5cdFx0JHNwbGljZUFwcGx5KHBhcnRzLCAkY29uY2F0KFswLCAxXSwgYWxpYXMpKTtcblx0fVxuXG5cdGZvciAodmFyIGkgPSAxLCBpc093biA9IHRydWU7IGkgPCBwYXJ0cy5sZW5ndGg7IGkgKz0gMSkge1xuXHRcdHZhciBwYXJ0ID0gcGFydHNbaV07XG5cdFx0dmFyIGZpcnN0ID0gJHN0clNsaWNlKHBhcnQsIDAsIDEpO1xuXHRcdHZhciBsYXN0ID0gJHN0clNsaWNlKHBhcnQsIC0xKTtcblx0XHRpZiAoXG5cdFx0XHQoXG5cdFx0XHRcdChmaXJzdCA9PT0gJ1wiJyB8fCBmaXJzdCA9PT0gXCInXCIgfHwgZmlyc3QgPT09ICdgJylcblx0XHRcdFx0fHwgKGxhc3QgPT09ICdcIicgfHwgbGFzdCA9PT0gXCInXCIgfHwgbGFzdCA9PT0gJ2AnKVxuXHRcdFx0KVxuXHRcdFx0JiYgZmlyc3QgIT09IGxhc3Rcblx0XHQpIHtcblx0XHRcdHRocm93IG5ldyAkU3ludGF4RXJyb3IoJ3Byb3BlcnR5IG5hbWVzIHdpdGggcXVvdGVzIG11c3QgaGF2ZSBtYXRjaGluZyBxdW90ZXMnKTtcblx0XHR9XG5cdFx0aWYgKHBhcnQgPT09ICdjb25zdHJ1Y3RvcicgfHwgIWlzT3duKSB7XG5cdFx0XHRza2lwRnVydGhlckNhY2hpbmcgPSB0cnVlO1xuXHRcdH1cblxuXHRcdGludHJpbnNpY0Jhc2VOYW1lICs9ICcuJyArIHBhcnQ7XG5cdFx0aW50cmluc2ljUmVhbE5hbWUgPSAnJScgKyBpbnRyaW5zaWNCYXNlTmFtZSArICclJztcblxuXHRcdGlmIChoYXNPd24oSU5UUklOU0lDUywgaW50cmluc2ljUmVhbE5hbWUpKSB7XG5cdFx0XHR2YWx1ZSA9IElOVFJJTlNJQ1NbaW50cmluc2ljUmVhbE5hbWVdO1xuXHRcdH0gZWxzZSBpZiAodmFsdWUgIT0gbnVsbCkge1xuXHRcdFx0aWYgKCEocGFydCBpbiB2YWx1ZSkpIHtcblx0XHRcdFx0aWYgKCFhbGxvd01pc3NpbmcpIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYmFzZSBpbnRyaW5zaWMgZm9yICcgKyBuYW1lICsgJyBleGlzdHMsIGJ1dCB0aGUgcHJvcGVydHkgaXMgbm90IGF2YWlsYWJsZS4nKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdm9pZCB1bmRlZmluZWQ7XG5cdFx0XHR9XG5cdFx0XHRpZiAoJGdPUEQgJiYgKGkgKyAxKSA+PSBwYXJ0cy5sZW5ndGgpIHtcblx0XHRcdFx0dmFyIGRlc2MgPSAkZ09QRCh2YWx1ZSwgcGFydCk7XG5cdFx0XHRcdGlzT3duID0gISFkZXNjO1xuXG5cdFx0XHRcdC8vIEJ5IGNvbnZlbnRpb24sIHdoZW4gYSBkYXRhIHByb3BlcnR5IGlzIGNvbnZlcnRlZCB0byBhbiBhY2Nlc3NvclxuXHRcdFx0XHQvLyBwcm9wZXJ0eSB0byBlbXVsYXRlIGEgZGF0YSBwcm9wZXJ0eSB0aGF0IGRvZXMgbm90IHN1ZmZlciBmcm9tXG5cdFx0XHRcdC8vIHRoZSBvdmVycmlkZSBtaXN0YWtlLCB0aGF0IGFjY2Vzc29yJ3MgZ2V0dGVyIGlzIG1hcmtlZCB3aXRoXG5cdFx0XHRcdC8vIGFuIGBvcmlnaW5hbFZhbHVlYCBwcm9wZXJ0eS4gSGVyZSwgd2hlbiB3ZSBkZXRlY3QgdGhpcywgd2Vcblx0XHRcdFx0Ly8gdXBob2xkIHRoZSBpbGx1c2lvbiBieSBwcmV0ZW5kaW5nIHRvIHNlZSB0aGF0IG9yaWdpbmFsIGRhdGFcblx0XHRcdFx0Ly8gcHJvcGVydHksIGkuZS4sIHJldHVybmluZyB0aGUgdmFsdWUgcmF0aGVyIHRoYW4gdGhlIGdldHRlclxuXHRcdFx0XHQvLyBpdHNlbGYuXG5cdFx0XHRcdGlmIChpc093biAmJiAnZ2V0JyBpbiBkZXNjICYmICEoJ29yaWdpbmFsVmFsdWUnIGluIGRlc2MuZ2V0KSkge1xuXHRcdFx0XHRcdHZhbHVlID0gZGVzYy5nZXQ7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dmFsdWUgPSB2YWx1ZVtwYXJ0XTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aXNPd24gPSBoYXNPd24odmFsdWUsIHBhcnQpO1xuXHRcdFx0XHR2YWx1ZSA9IHZhbHVlW3BhcnRdO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoaXNPd24gJiYgIXNraXBGdXJ0aGVyQ2FjaGluZykge1xuXHRcdFx0XHRJTlRSSU5TSUNTW2ludHJpbnNpY1JlYWxOYW1lXSA9IHZhbHVlO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gdmFsdWU7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///210\n")},405:(module,__unused_webpack_exports,__webpack_require__)=>{"use strict";eval("\n\nvar origSymbol = typeof Symbol !== 'undefined' && Symbol;\nvar hasSymbolSham = __webpack_require__(419);\n\nmodule.exports = function hasNativeSymbols() {\n\tif (typeof origSymbol !== 'function') { return false; }\n\tif (typeof Symbol !== 'function') { return false; }\n\tif (typeof origSymbol('foo') !== 'symbol') { return false; }\n\tif (typeof Symbol('bar') !== 'symbol') { return false; }\n\n\treturn hasSymbolSham();\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDA1LmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vc21hbGwtY3QvLi9ub2RlX21vZHVsZXMvaGFzLXN5bWJvbHMvaW5kZXguanM/NTE1NiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBvcmlnU3ltYm9sID0gdHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sO1xudmFyIGhhc1N5bWJvbFNoYW0gPSByZXF1aXJlKCcuL3NoYW1zJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaGFzTmF0aXZlU3ltYm9scygpIHtcblx0aWYgKHR5cGVvZiBvcmlnU3ltYm9sICE9PSAnZnVuY3Rpb24nKSB7IHJldHVybiBmYWxzZTsgfVxuXHRpZiAodHlwZW9mIFN5bWJvbCAhPT0gJ2Z1bmN0aW9uJykgeyByZXR1cm4gZmFsc2U7IH1cblx0aWYgKHR5cGVvZiBvcmlnU3ltYm9sKCdmb28nKSAhPT0gJ3N5bWJvbCcpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdGlmICh0eXBlb2YgU3ltYm9sKCdiYXInKSAhPT0gJ3N5bWJvbCcpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0cmV0dXJuIGhhc1N5bWJvbFNoYW0oKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///405\n")},419:module=>{"use strict";eval("\n\n/* eslint complexity: [2, 18], max-statements: [2, 33] */\nmodule.exports = function hasSymbols() {\n\tif (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; }\n\tif (typeof Symbol.iterator === 'symbol') { return true; }\n\n\tvar obj = {};\n\tvar sym = Symbol('test');\n\tvar symObj = Object(sym);\n\tif (typeof sym === 'string') { return false; }\n\n\tif (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; }\n\tif (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; }\n\n\t// temp disabled per https://github.com/ljharb/object.assign/issues/17\n\t// if (sym instanceof Symbol) { return false; }\n\t// temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4\n\t// if (!(symObj instanceof Symbol)) { return false; }\n\n\t// if (typeof Symbol.prototype.toString !== 'function') { return false; }\n\t// if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; }\n\n\tvar symVal = 42;\n\tobj[sym] = symVal;\n\tfor (sym in obj) { return false; } // eslint-disable-line no-restricted-syntax, no-unreachable-loop\n\tif (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; }\n\n\tif (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; }\n\n\tvar syms = Object.getOwnPropertySymbols(obj);\n\tif (syms.length !== 1 || syms[0] !== sym) { return false; }\n\n\tif (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; }\n\n\tif (typeof Object.getOwnPropertyDescriptor === 'function') {\n\t\tvar descriptor = Object.getOwnPropertyDescriptor(obj, sym);\n\t\tif (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; }\n\t}\n\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDE5LmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3NtYWxsLWN0Ly4vbm9kZV9tb2R1bGVzL2hhcy1zeW1ib2xzL3NoYW1zLmpzPzE2OTYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vKiBlc2xpbnQgY29tcGxleGl0eTogWzIsIDE4XSwgbWF4LXN0YXRlbWVudHM6IFsyLCAzM10gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaGFzU3ltYm9scygpIHtcblx0aWYgKHR5cGVvZiBTeW1ib2wgIT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgIT09ICdmdW5jdGlvbicpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdGlmICh0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSAnc3ltYm9sJykgeyByZXR1cm4gdHJ1ZTsgfVxuXG5cdHZhciBvYmogPSB7fTtcblx0dmFyIHN5bSA9IFN5bWJvbCgndGVzdCcpO1xuXHR2YXIgc3ltT2JqID0gT2JqZWN0KHN5bSk7XG5cdGlmICh0eXBlb2Ygc3ltID09PSAnc3RyaW5nJykgeyByZXR1cm4gZmFsc2U7IH1cblxuXHRpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHN5bSkgIT09ICdbb2JqZWN0IFN5bWJvbF0nKSB7IHJldHVybiBmYWxzZTsgfVxuXHRpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHN5bU9iaikgIT09ICdbb2JqZWN0IFN5bWJvbF0nKSB7IHJldHVybiBmYWxzZTsgfVxuXG5cdC8vIHRlbXAgZGlzYWJsZWQgcGVyIGh0dHBzOi8vZ2l0aHViLmNvbS9samhhcmIvb2JqZWN0LmFzc2lnbi9pc3N1ZXMvMTdcblx0Ly8gaWYgKHN5bSBpbnN0YW5jZW9mIFN5bWJvbCkgeyByZXR1cm4gZmFsc2U7IH1cblx0Ly8gdGVtcCBkaXNhYmxlZCBwZXIgaHR0cHM6Ly9naXRodWIuY29tL1dlYlJlZmxlY3Rpb24vZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzL2lzc3Vlcy80XG5cdC8vIGlmICghKHN5bU9iaiBpbnN0YW5jZW9mIFN5bWJvbCkpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0Ly8gaWYgKHR5cGVvZiBTeW1ib2wucHJvdG90eXBlLnRvU3RyaW5nICE9PSAnZnVuY3Rpb24nKSB7IHJldHVybiBmYWxzZTsgfVxuXHQvLyBpZiAoU3RyaW5nKHN5bSkgIT09IFN5bWJvbC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChzeW0pKSB7IHJldHVybiBmYWxzZTsgfVxuXG5cdHZhciBzeW1WYWwgPSA0Mjtcblx0b2JqW3N5bV0gPSBzeW1WYWw7XG5cdGZvciAoc3ltIGluIG9iaikgeyByZXR1cm4gZmFsc2U7IH0gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheCwgbm8tdW5yZWFjaGFibGUtbG9vcFxuXHRpZiAodHlwZW9mIE9iamVjdC5rZXlzID09PSAnZnVuY3Rpb24nICYmIE9iamVjdC5rZXlzKG9iaikubGVuZ3RoICE9PSAwKSB7IHJldHVybiBmYWxzZTsgfVxuXG5cdGlmICh0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgPT09ICdmdW5jdGlvbicgJiYgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMob2JqKS5sZW5ndGggIT09IDApIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0dmFyIHN5bXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iaik7XG5cdGlmIChzeW1zLmxlbmd0aCAhPT0gMSB8fCBzeW1zWzBdICE9PSBzeW0pIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0aWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwob2JqLCBzeW0pKSB7IHJldHVybiBmYWxzZTsgfVxuXG5cdGlmICh0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvciA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdHZhciBkZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmosIHN5bSk7XG5cdFx0aWYgKGRlc2NyaXB0b3IudmFsdWUgIT09IHN5bVZhbCB8fCBkZXNjcmlwdG9yLmVudW1lcmFibGUgIT09IHRydWUpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdH1cblxuXHRyZXR1cm4gdHJ1ZTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///419\n")},410:(module,__unused_webpack_exports,__webpack_require__)=>{"use strict";eval("\n\nvar hasSymbols = __webpack_require__(419);\n\nmodule.exports = function hasToStringTagShams() {\n\treturn hasSymbols() && !!Symbol.toStringTag;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDEwLmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vc21hbGwtY3QvLi9ub2RlX21vZHVsZXMvaGFzLXRvc3RyaW5ndGFnL3NoYW1zLmpzPzA3YTQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzL3NoYW1zJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaGFzVG9TdHJpbmdUYWdTaGFtcygpIHtcblx0cmV0dXJuIGhhc1N5bWJvbHMoKSAmJiAhIVN5bWJvbC50b1N0cmluZ1RhZztcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///410\n")},642:(module,__unused_webpack_exports,__webpack_require__)=>{"use strict";eval("\n\nvar bind = __webpack_require__(612);\n\nmodule.exports = bind.call(Function.call, Object.prototype.hasOwnProperty);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjQyLmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9zbWFsbC1jdC8uL25vZGVfbW9kdWxlcy9oYXMvc3JjL2luZGV4LmpzP2EwZDMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYmluZCA9IHJlcXVpcmUoJ2Z1bmN0aW9uLWJpbmQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBiaW5kLmNhbGwoRnVuY3Rpb24uY2FsbCwgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///642\n")},717:module=>{eval("if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n })\n }\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzE3LmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3NtYWxsLWN0Ly4vbm9kZV9tb2R1bGVzL2luaGVyaXRzL2luaGVyaXRzX2Jyb3dzZXIuanM/M2ZiNSJdLCJzb3VyY2VzQ29udGVudCI6WyJpZiAodHlwZW9mIE9iamVjdC5jcmVhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgLy8gaW1wbGVtZW50YXRpb24gZnJvbSBzdGFuZGFyZCBub2RlLmpzICd1dGlsJyBtb2R1bGVcbiAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpbmhlcml0cyhjdG9yLCBzdXBlckN0b3IpIHtcbiAgICBpZiAoc3VwZXJDdG9yKSB7XG4gICAgICBjdG9yLnN1cGVyXyA9IHN1cGVyQ3RvclxuICAgICAgY3Rvci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ3Rvci5wcm90b3R5cGUsIHtcbiAgICAgICAgY29uc3RydWN0b3I6IHtcbiAgICAgICAgICB2YWx1ZTogY3RvcixcbiAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH07XG59IGVsc2Uge1xuICAvLyBvbGQgc2Nob29sIHNoaW0gZm9yIG9sZCBicm93c2Vyc1xuICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGluaGVyaXRzKGN0b3IsIHN1cGVyQ3Rvcikge1xuICAgIGlmIChzdXBlckN0b3IpIHtcbiAgICAgIGN0b3Iuc3VwZXJfID0gc3VwZXJDdG9yXG4gICAgICB2YXIgVGVtcEN0b3IgPSBmdW5jdGlvbiAoKSB7fVxuICAgICAgVGVtcEN0b3IucHJvdG90eXBlID0gc3VwZXJDdG9yLnByb3RvdHlwZVxuICAgICAgY3Rvci5wcm90b3R5cGUgPSBuZXcgVGVtcEN0b3IoKVxuICAgICAgY3Rvci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBjdG9yXG4gICAgfVxuICB9XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///717\n")},584:(module,__unused_webpack_exports,__webpack_require__)=>{"use strict";eval("\n\nvar hasToStringTag = __webpack_require__(410)();\nvar callBound = __webpack_require__(924);\n\nvar $toString = callBound('Object.prototype.toString');\n\nvar isStandardArguments = function isArguments(value) {\n\tif (hasToStringTag && value && typeof value === 'object' && Symbol.toStringTag in value) {\n\t\treturn false;\n\t}\n\treturn $toString(value) === '[object Arguments]';\n};\n\nvar isLegacyArguments = function isArguments(value) {\n\tif (isStandardArguments(value)) {\n\t\treturn true;\n\t}\n\treturn value !== null &&\n\t\ttypeof value === 'object' &&\n\t\ttypeof value.length === 'number' &&\n\t\tvalue.length >= 0 &&\n\t\t$toString(value) !== '[object Array]' &&\n\t\t$toString(value.callee) === '[object Function]';\n};\n\nvar supportsStandardArguments = (function () {\n\treturn isStandardArguments(arguments);\n}());\n\nisStandardArguments.isLegacyArguments = isLegacyArguments; // for tests\n\nmodule.exports = supportsStandardArguments ? isStandardArguments : isLegacyArguments;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTg0LmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3NtYWxsLWN0Ly4vbm9kZV9tb2R1bGVzL2lzLWFyZ3VtZW50cy9pbmRleC5qcz9lMzljIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGhhc1RvU3RyaW5nVGFnID0gcmVxdWlyZSgnaGFzLXRvc3RyaW5ndGFnL3NoYW1zJykoKTtcbnZhciBjYWxsQm91bmQgPSByZXF1aXJlKCdjYWxsLWJpbmQvY2FsbEJvdW5kJyk7XG5cbnZhciAkdG9TdHJpbmcgPSBjYWxsQm91bmQoJ09iamVjdC5wcm90b3R5cGUudG9TdHJpbmcnKTtcblxudmFyIGlzU3RhbmRhcmRBcmd1bWVudHMgPSBmdW5jdGlvbiBpc0FyZ3VtZW50cyh2YWx1ZSkge1xuXHRpZiAoaGFzVG9TdHJpbmdUYWcgJiYgdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiBTeW1ib2wudG9TdHJpbmdUYWcgaW4gdmFsdWUpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0cmV0dXJuICR0b1N0cmluZyh2YWx1ZSkgPT09ICdbb2JqZWN0IEFyZ3VtZW50c10nO1xufTtcblxudmFyIGlzTGVnYWN5QXJndW1lbnRzID0gZnVuY3Rpb24gaXNBcmd1bWVudHModmFsdWUpIHtcblx0aWYgKGlzU3RhbmRhcmRBcmd1bWVudHModmFsdWUpKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0cmV0dXJuIHZhbHVlICE9PSBudWxsICYmXG5cdFx0dHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJlxuXHRcdHR5cGVvZiB2YWx1ZS5sZW5ndGggPT09ICdudW1iZXInICYmXG5cdFx0dmFsdWUubGVuZ3RoID49IDAgJiZcblx0XHQkdG9TdHJpbmcodmFsdWUpICE9PSAnW29iamVjdCBBcnJheV0nICYmXG5cdFx0JHRvU3RyaW5nKHZhbHVlLmNhbGxlZSkgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XG59O1xuXG52YXIgc3VwcG9ydHNTdGFuZGFyZEFyZ3VtZW50cyA9IChmdW5jdGlvbiAoKSB7XG5cdHJldHVybiBpc1N0YW5kYXJkQXJndW1lbnRzKGFyZ3VtZW50cyk7XG59KCkpO1xuXG5pc1N0YW5kYXJkQXJndW1lbnRzLmlzTGVnYWN5QXJndW1lbnRzID0gaXNMZWdhY3lBcmd1bWVudHM7IC8vIGZvciB0ZXN0c1xuXG5tb2R1bGUuZXhwb3J0cyA9IHN1cHBvcnRzU3RhbmRhcmRBcmd1bWVudHMgPyBpc1N0YW5kYXJkQXJndW1lbnRzIDogaXNMZWdhY3lBcmd1bWVudHM7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///584\n")},320:module=>{"use strict";eval("\n\nvar fnToStr = Function.prototype.toString;\nvar reflectApply = typeof Reflect === 'object' && Reflect !== null && Reflect.apply;\nvar badArrayLike;\nvar isCallableMarker;\nif (typeof reflectApply === 'function' && typeof Object.defineProperty === 'function') {\n\ttry {\n\t\tbadArrayLike = Object.defineProperty({}, 'length', {\n\t\t\tget: function () {\n\t\t\t\tthrow isCallableMarker;\n\t\t\t}\n\t\t});\n\t\tisCallableMarker = {};\n\t\t// eslint-disable-next-line no-throw-literal\n\t\treflectApply(function () { throw 42; }, null, badArrayLike);\n\t} catch (_) {\n\t\tif (_ !== isCallableMarker) {\n\t\t\treflectApply = null;\n\t\t}\n\t}\n} else {\n\treflectApply = null;\n}\n\nvar constructorRegex = /^\\s*class\\b/;\nvar isES6ClassFn = function isES6ClassFunction(value) {\n\ttry {\n\t\tvar fnStr = fnToStr.call(value);\n\t\treturn constructorRegex.test(fnStr);\n\t} catch (e) {\n\t\treturn false; // not a function\n\t}\n};\n\nvar tryFunctionObject = function tryFunctionToStr(value) {\n\ttry {\n\t\tif (isES6ClassFn(value)) { return false; }\n\t\tfnToStr.call(value);\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\nvar toStr = Object.prototype.toString;\nvar fnClass = '[object Function]';\nvar genClass = '[object GeneratorFunction]';\nvar hasToStringTag = typeof Symbol === 'function' && !!Symbol.toStringTag; // better: use `has-tostringtag`\n/* globals document: false */\nvar documentDotAll = typeof document === 'object' && typeof document.all === 'undefined' && document.all !== undefined ? document.all : {};\n\nmodule.exports = reflectApply\n\t? function isCallable(value) {\n\t\tif (value === documentDotAll) { return true; }\n\t\tif (!value) { return false; }\n\t\tif (typeof value !== 'function' && typeof value !== 'object') { return false; }\n\t\tif (typeof value === 'function' && !value.prototype) { return true; }\n\t\ttry {\n\t\t\treflectApply(value, null, badArrayLike);\n\t\t} catch (e) {\n\t\t\tif (e !== isCallableMarker) { return false; }\n\t\t}\n\t\treturn !isES6ClassFn(value);\n\t}\n\t: function isCallable(value) {\n\t\tif (value === documentDotAll) { return true; }\n\t\tif (!value) { return false; }\n\t\tif (typeof value !== 'function' && typeof value !== 'object') { return false; }\n\t\tif (typeof value === 'function' && !value.prototype) { return true; }\n\t\tif (hasToStringTag) { return tryFunctionObject(value); }\n\t\tif (isES6ClassFn(value)) { return false; }\n\t\tvar strClass = toStr.call(value);\n\t\treturn strClass === fnClass || strClass === genClass;\n\t};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzIwLmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9zbWFsbC1jdC8uL25vZGVfbW9kdWxlcy9pcy1jYWxsYWJsZS9pbmRleC5qcz8yMWQwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGZuVG9TdHIgPSBGdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgcmVmbGVjdEFwcGx5ID0gdHlwZW9mIFJlZmxlY3QgPT09ICdvYmplY3QnICYmIFJlZmxlY3QgIT09IG51bGwgJiYgUmVmbGVjdC5hcHBseTtcbnZhciBiYWRBcnJheUxpa2U7XG52YXIgaXNDYWxsYWJsZU1hcmtlcjtcbmlmICh0eXBlb2YgcmVmbGVjdEFwcGx5ID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBPYmplY3QuZGVmaW5lUHJvcGVydHkgPT09ICdmdW5jdGlvbicpIHtcblx0dHJ5IHtcblx0XHRiYWRBcnJheUxpa2UgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sICdsZW5ndGgnLCB7XG5cdFx0XHRnZXQ6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0dGhyb3cgaXNDYWxsYWJsZU1hcmtlcjtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRpc0NhbGxhYmxlTWFya2VyID0ge307XG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXRocm93LWxpdGVyYWxcblx0XHRyZWZsZWN0QXBwbHkoZnVuY3Rpb24gKCkgeyB0aHJvdyA0MjsgfSwgbnVsbCwgYmFkQXJyYXlMaWtlKTtcblx0fSBjYXRjaCAoXykge1xuXHRcdGlmIChfICE9PSBpc0NhbGxhYmxlTWFya2VyKSB7XG5cdFx0XHRyZWZsZWN0QXBwbHkgPSBudWxsO1xuXHRcdH1cblx0fVxufSBlbHNlIHtcblx0cmVmbGVjdEFwcGx5ID0gbnVsbDtcbn1cblxudmFyIGNvbnN0cnVjdG9yUmVnZXggPSAvXlxccypjbGFzc1xcYi87XG52YXIgaXNFUzZDbGFzc0ZuID0gZnVuY3Rpb24gaXNFUzZDbGFzc0Z1bmN0aW9uKHZhbHVlKSB7XG5cdHRyeSB7XG5cdFx0dmFyIGZuU3RyID0gZm5Ub1N0ci5jYWxsKHZhbHVlKTtcblx0XHRyZXR1cm4gY29uc3RydWN0b3JSZWdleC50ZXN0KGZuU3RyKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdHJldHVybiBmYWxzZTsgLy8gbm90IGEgZnVuY3Rpb25cblx0fVxufTtcblxudmFyIHRyeUZ1bmN0aW9uT2JqZWN0ID0gZnVuY3Rpb24gdHJ5RnVuY3Rpb25Ub1N0cih2YWx1ZSkge1xuXHR0cnkge1xuXHRcdGlmIChpc0VTNkNsYXNzRm4odmFsdWUpKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdGZuVG9TdHIuY2FsbCh2YWx1ZSk7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn07XG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIGZuQ2xhc3MgPSAnW29iamVjdCBGdW5jdGlvbl0nO1xudmFyIGdlbkNsYXNzID0gJ1tvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dJztcbnZhciBoYXNUb1N0cmluZ1RhZyA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgISFTeW1ib2wudG9TdHJpbmdUYWc7IC8vIGJldHRlcjogdXNlIGBoYXMtdG9zdHJpbmd0YWdgXG4vKiBnbG9iYWxzIGRvY3VtZW50OiBmYWxzZSAqL1xudmFyIGRvY3VtZW50RG90QWxsID0gdHlwZW9mIGRvY3VtZW50ID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgZG9jdW1lbnQuYWxsID09PSAndW5kZWZpbmVkJyAmJiBkb2N1bWVudC5hbGwgIT09IHVuZGVmaW5lZCA/IGRvY3VtZW50LmFsbCA6IHt9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlZmxlY3RBcHBseVxuXHQ/IGZ1bmN0aW9uIGlzQ2FsbGFibGUodmFsdWUpIHtcblx0XHRpZiAodmFsdWUgPT09IGRvY3VtZW50RG90QWxsKSB7IHJldHVybiB0cnVlOyB9XG5cdFx0aWYgKCF2YWx1ZSkgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRpZiAodHlwZW9mIHZhbHVlICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdFx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyAmJiAhdmFsdWUucHJvdG90eXBlKSB7IHJldHVybiB0cnVlOyB9XG5cdFx0dHJ5IHtcblx0XHRcdHJlZmxlY3RBcHBseSh2YWx1ZSwgbnVsbCwgYmFkQXJyYXlMaWtlKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRpZiAoZSAhPT0gaXNDYWxsYWJsZU1hcmtlcikgeyByZXR1cm4gZmFsc2U7IH1cblx0XHR9XG5cdFx0cmV0dXJuICFpc0VTNkNsYXNzRm4odmFsdWUpO1xuXHR9XG5cdDogZnVuY3Rpb24gaXNDYWxsYWJsZSh2YWx1ZSkge1xuXHRcdGlmICh2YWx1ZSA9PT0gZG9jdW1lbnREb3RBbGwpIHsgcmV0dXJuIHRydWU7IH1cblx0XHRpZiAoIXZhbHVlKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdGlmICh0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JykgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nICYmICF2YWx1ZS5wcm90b3R5cGUpIHsgcmV0dXJuIHRydWU7IH1cblx0XHRpZiAoaGFzVG9TdHJpbmdUYWcpIHsgcmV0dXJuIHRyeUZ1bmN0aW9uT2JqZWN0KHZhbHVlKTsgfVxuXHRcdGlmIChpc0VTNkNsYXNzRm4odmFsdWUpKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdHZhciBzdHJDbGFzcyA9IHRvU3RyLmNhbGwodmFsdWUpO1xuXHRcdHJldHVybiBzdHJDbGFzcyA9PT0gZm5DbGFzcyB8fCBzdHJDbGFzcyA9PT0gZ2VuQ2xhc3M7XG5cdH07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///320\n")},662:(module,__unused_webpack_exports,__webpack_require__)=>{"use strict";eval("\n\nvar toStr = Object.prototype.toString;\nvar fnToStr = Function.prototype.toString;\nvar isFnRegex = /^\\s*(?:function)?\\*/;\nvar hasToStringTag = __webpack_require__(410)();\nvar getProto = Object.getPrototypeOf;\nvar getGeneratorFunc = function () { // eslint-disable-line consistent-return\n\tif (!hasToStringTag) {\n\t\treturn false;\n\t}\n\ttry {\n\t\treturn Function('return function*() {}')();\n\t} catch (e) {\n\t}\n};\nvar GeneratorFunction;\n\nmodule.exports = function isGeneratorFunction(fn) {\n\tif (typeof fn !== 'function') {\n\t\treturn false;\n\t}\n\tif (isFnRegex.test(fnToStr.call(fn))) {\n\t\treturn true;\n\t}\n\tif (!hasToStringTag) {\n\t\tvar str = toStr.call(fn);\n\t\treturn str === '[object GeneratorFunction]';\n\t}\n\tif (!getProto) {\n\t\treturn false;\n\t}\n\tif (typeof GeneratorFunction === 'undefined') {\n\t\tvar generatorFunc = getGeneratorFunc();\n\t\tGeneratorFunction = generatorFunc ? getProto(generatorFunc) : false;\n\t}\n\treturn getProto(fn) === GeneratorFunction;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjYyLmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9zbWFsbC1jdC8uL25vZGVfbW9kdWxlcy9pcy1nZW5lcmF0b3ItZnVuY3Rpb24vaW5kZXguanM/MGEzZSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgZm5Ub1N0ciA9IEZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZztcbnZhciBpc0ZuUmVnZXggPSAvXlxccyooPzpmdW5jdGlvbik/XFwqLztcbnZhciBoYXNUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJ2hhcy10b3N0cmluZ3RhZy9zaGFtcycpKCk7XG52YXIgZ2V0UHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Y7XG52YXIgZ2V0R2VuZXJhdG9yRnVuYyA9IGZ1bmN0aW9uICgpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjb25zaXN0ZW50LXJldHVyblxuXHRpZiAoIWhhc1RvU3RyaW5nVGFnKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdHRyeSB7XG5cdFx0cmV0dXJuIEZ1bmN0aW9uKCdyZXR1cm4gZnVuY3Rpb24qKCkge30nKSgpO1xuXHR9IGNhdGNoIChlKSB7XG5cdH1cbn07XG52YXIgR2VuZXJhdG9yRnVuY3Rpb247XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNHZW5lcmF0b3JGdW5jdGlvbihmbikge1xuXHRpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmIChpc0ZuUmVnZXgudGVzdChmblRvU3RyLmNhbGwoZm4pKSkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGlmICghaGFzVG9TdHJpbmdUYWcpIHtcblx0XHR2YXIgc3RyID0gdG9TdHIuY2FsbChmbik7XG5cdFx0cmV0dXJuIHN0ciA9PT0gJ1tvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dJztcblx0fVxuXHRpZiAoIWdldFByb3RvKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmICh0eXBlb2YgR2VuZXJhdG9yRnVuY3Rpb24gPT09ICd1bmRlZmluZWQnKSB7XG5cdFx0dmFyIGdlbmVyYXRvckZ1bmMgPSBnZXRHZW5lcmF0b3JGdW5jKCk7XG5cdFx0R2VuZXJhdG9yRnVuY3Rpb24gPSBnZW5lcmF0b3JGdW5jID8gZ2V0UHJvdG8oZ2VuZXJhdG9yRnVuYykgOiBmYWxzZTtcblx0fVxuXHRyZXR1cm4gZ2V0UHJvdG8oZm4pID09PSBHZW5lcmF0b3JGdW5jdGlvbjtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///662\n")},692:(module,__unused_webpack_exports,__webpack_require__)=>{"use strict";eval("\n\nvar forEach = __webpack_require__(29);\nvar availableTypedArrays = __webpack_require__(83);\nvar callBound = __webpack_require__(924);\n\nvar $toString = callBound('Object.prototype.toString');\nvar hasToStringTag = __webpack_require__(410)();\n\nvar g = typeof globalThis === 'undefined' ? __webpack_require__.g : globalThis;\nvar typedArrays = availableTypedArrays();\n\nvar $indexOf = callBound('Array.prototype.indexOf', true) || function indexOf(array, value) {\n\tfor (var i = 0; i < array.length; i += 1) {\n\t\tif (array[i] === value) {\n\t\t\treturn i;\n\t\t}\n\t}\n\treturn -1;\n};\nvar $slice = callBound('String.prototype.slice');\nvar toStrTags = {};\nvar gOPD = __webpack_require__(882);\nvar getPrototypeOf = Object.getPrototypeOf; // require('getprototypeof');\nif (hasToStringTag && gOPD && getPrototypeOf) {\n\tforEach(typedArrays, function (typedArray) {\n\t\tvar arr = new g[typedArray]();\n\t\tif (Symbol.toStringTag in arr) {\n\t\t\tvar proto = getPrototypeOf(arr);\n\t\t\tvar descriptor = gOPD(proto, Symbol.toStringTag);\n\t\t\tif (!descriptor) {\n\t\t\t\tvar superProto = getPrototypeOf(proto);\n\t\t\t\tdescriptor = gOPD(superProto, Symbol.toStringTag);\n\t\t\t}\n\t\t\ttoStrTags[typedArray] = descriptor.get;\n\t\t}\n\t});\n}\n\nvar tryTypedArrays = function tryAllTypedArrays(value) {\n\tvar anyTrue = false;\n\tforEach(toStrTags, function (getter, typedArray) {\n\t\tif (!anyTrue) {\n\t\t\ttry {\n\t\t\t\tanyTrue = getter.call(value) === typedArray;\n\t\t\t} catch (e) { /**/ }\n\t\t}\n\t});\n\treturn anyTrue;\n};\n\nmodule.exports = function isTypedArray(value) {\n\tif (!value || typeof value !== 'object') { return false; }\n\tif (!hasToStringTag || !(Symbol.toStringTag in value)) {\n\t\tvar tag = $slice($toString(value), 8, -1);\n\t\treturn $indexOf(typedArrays, tag) > -1;\n\t}\n\tif (!gOPD) { return false; }\n\treturn tryTypedArrays(value);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjkyLmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3NtYWxsLWN0Ly4vbm9kZV9tb2R1bGVzL2lzLXR5cGVkLWFycmF5L2luZGV4LmpzP2Y0ZTMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgZm9yRWFjaCA9IHJlcXVpcmUoJ2Zvci1lYWNoJyk7XG52YXIgYXZhaWxhYmxlVHlwZWRBcnJheXMgPSByZXF1aXJlKCdhdmFpbGFibGUtdHlwZWQtYXJyYXlzJyk7XG52YXIgY2FsbEJvdW5kID0gcmVxdWlyZSgnY2FsbC1iaW5kL2NhbGxCb3VuZCcpO1xuXG52YXIgJHRvU3RyaW5nID0gY2FsbEJvdW5kKCdPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nJyk7XG52YXIgaGFzVG9TdHJpbmdUYWcgPSByZXF1aXJlKCdoYXMtdG9zdHJpbmd0YWcvc2hhbXMnKSgpO1xuXG52YXIgZyA9IHR5cGVvZiBnbG9iYWxUaGlzID09PSAndW5kZWZpbmVkJyA/IGdsb2JhbCA6IGdsb2JhbFRoaXM7XG52YXIgdHlwZWRBcnJheXMgPSBhdmFpbGFibGVUeXBlZEFycmF5cygpO1xuXG52YXIgJGluZGV4T2YgPSBjYWxsQm91bmQoJ0FycmF5LnByb3RvdHlwZS5pbmRleE9mJywgdHJ1ZSkgfHwgZnVuY3Rpb24gaW5kZXhPZihhcnJheSwgdmFsdWUpIHtcblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkgKz0gMSkge1xuXHRcdGlmIChhcnJheVtpXSA9PT0gdmFsdWUpIHtcblx0XHRcdHJldHVybiBpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gLTE7XG59O1xudmFyICRzbGljZSA9IGNhbGxCb3VuZCgnU3RyaW5nLnByb3RvdHlwZS5zbGljZScpO1xudmFyIHRvU3RyVGFncyA9IHt9O1xudmFyIGdPUEQgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC9oZWxwZXJzL2dldE93blByb3BlcnR5RGVzY3JpcHRvcicpO1xudmFyIGdldFByb3RvdHlwZU9mID0gT2JqZWN0LmdldFByb3RvdHlwZU9mOyAvLyByZXF1aXJlKCdnZXRwcm90b3R5cGVvZicpO1xuaWYgKGhhc1RvU3RyaW5nVGFnICYmIGdPUEQgJiYgZ2V0UHJvdG90eXBlT2YpIHtcblx0Zm9yRWFjaCh0eXBlZEFycmF5cywgZnVuY3Rpb24gKHR5cGVkQXJyYXkpIHtcblx0XHR2YXIgYXJyID0gbmV3IGdbdHlwZWRBcnJheV0oKTtcblx0XHRpZiAoU3ltYm9sLnRvU3RyaW5nVGFnIGluIGFycikge1xuXHRcdFx0dmFyIHByb3RvID0gZ2V0UHJvdG90eXBlT2YoYXJyKTtcblx0XHRcdHZhciBkZXNjcmlwdG9yID0gZ09QRChwcm90bywgU3ltYm9sLnRvU3RyaW5nVGFnKTtcblx0XHRcdGlmICghZGVzY3JpcHRvcikge1xuXHRcdFx0XHR2YXIgc3VwZXJQcm90byA9IGdldFByb3RvdHlwZU9mKHByb3RvKTtcblx0XHRcdFx0ZGVzY3JpcHRvciA9IGdPUEQoc3VwZXJQcm90bywgU3ltYm9sLnRvU3RyaW5nVGFnKTtcblx0XHRcdH1cblx0XHRcdHRvU3RyVGFnc1t0eXBlZEFycmF5XSA9IGRlc2NyaXB0b3IuZ2V0O1xuXHRcdH1cblx0fSk7XG59XG5cbnZhciB0cnlUeXBlZEFycmF5cyA9IGZ1bmN0aW9uIHRyeUFsbFR5cGVkQXJyYXlzKHZhbHVlKSB7XG5cdHZhciBhbnlUcnVlID0gZmFsc2U7XG5cdGZvckVhY2godG9TdHJUYWdzLCBmdW5jdGlvbiAoZ2V0dGVyLCB0eXBlZEFycmF5KSB7XG5cdFx0aWYgKCFhbnlUcnVlKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRhbnlUcnVlID0gZ2V0dGVyLmNhbGwodmFsdWUpID09PSB0eXBlZEFycmF5O1xuXHRcdFx0fSBjYXRjaCAoZSkgeyAvKiovIH1cblx0XHR9XG5cdH0pO1xuXHRyZXR1cm4gYW55VHJ1ZTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNUeXBlZEFycmF5KHZhbHVlKSB7XG5cdGlmICghdmFsdWUgfHwgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JykgeyByZXR1cm4gZmFsc2U7IH1cblx0aWYgKCFoYXNUb1N0cmluZ1RhZyB8fCAhKFN5bWJvbC50b1N0cmluZ1RhZyBpbiB2YWx1ZSkpIHtcblx0XHR2YXIgdGFnID0gJHNsaWNlKCR0b1N0cmluZyh2YWx1ZSksIDgsIC0xKTtcblx0XHRyZXR1cm4gJGluZGV4T2YodHlwZWRBcnJheXMsIHRhZykgPiAtMTtcblx0fVxuXHRpZiAoIWdPUEQpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdHJldHVybiB0cnlUeXBlZEFycmF5cyh2YWx1ZSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///692\n")},155:module=>{eval("// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTU1LmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vc21hbGwtY3QvLi9ub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzP2YyOGMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gc2hpbSBmb3IgdXNpbmcgcHJvY2VzcyBpbiBicm93c2VyXG52YXIgcHJvY2VzcyA9IG1vZHVsZS5leHBvcnRzID0ge307XG5cbi8vIGNhY2hlZCBmcm9tIHdoYXRldmVyIGdsb2JhbCBpcyBwcmVzZW50IHNvIHRoYXQgdGVzdCBydW5uZXJzIHRoYXQgc3R1YiBpdFxuLy8gZG9uJ3QgYnJlYWsgdGhpbmdzLiAgQnV0IHdlIG5lZWQgdG8gd3JhcCBpdCBpbiBhIHRyeSBjYXRjaCBpbiBjYXNlIGl0IGlzXG4vLyB3cmFwcGVkIGluIHN0cmljdCBtb2RlIGNvZGUgd2hpY2ggZG9lc24ndCBkZWZpbmUgYW55IGdsb2JhbHMuICBJdCdzIGluc2lkZSBhXG4vLyBmdW5jdGlvbiBiZWNhdXNlIHRyeS9jYXRjaGVzIGRlb3B0aW1pemUgaW4gY2VydGFpbiBlbmdpbmVzLlxuXG52YXIgY2FjaGVkU2V0VGltZW91dDtcbnZhciBjYWNoZWRDbGVhclRpbWVvdXQ7XG5cbmZ1bmN0aW9uIGRlZmF1bHRTZXRUaW1vdXQoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdzZXRUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkJyk7XG59XG5mdW5jdGlvbiBkZWZhdWx0Q2xlYXJUaW1lb3V0ICgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2NsZWFyVGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCcpO1xufVxuKGZ1bmN0aW9uICgpIHtcbiAgICB0cnkge1xuICAgICAgICBpZiAodHlwZW9mIHNldFRpbWVvdXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IGRlZmF1bHRTZXRUaW1vdXQ7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBkZWZhdWx0U2V0VGltb3V0O1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBpZiAodHlwZW9mIGNsZWFyVGltZW91dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gY2xlYXJUaW1lb3V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gZGVmYXVsdENsZWFyVGltZW91dDtcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gZGVmYXVsdENsZWFyVGltZW91dDtcbiAgICB9XG59ICgpKVxuZnVuY3Rpb24gcnVuVGltZW91dChmdW4pIHtcbiAgICBpZiAoY2FjaGVkU2V0VGltZW91dCA9PT0gc2V0VGltZW91dCkge1xuICAgICAgICAvL25vcm1hbCBlbnZpcm9tZW50cyBpbiBzYW5lIHNpdHVhdGlvbnNcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9XG4gICAgLy8gaWYgc2V0VGltZW91dCB3YXNuJ3QgYXZhaWxhYmxlIGJ1dCB3YXMgbGF0dGVyIGRlZmluZWRcbiAgICBpZiAoKGNhY2hlZFNldFRpbWVvdXQgPT09IGRlZmF1bHRTZXRUaW1vdXQgfHwgIWNhY2hlZFNldFRpbWVvdXQpICYmIHNldFRpbWVvdXQpIHtcbiAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IHNldFRpbWVvdXQ7XG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIC8vIHdoZW4gd2hlbiBzb21lYm9keSBoYXMgc2NyZXdlZCB3aXRoIHNldFRpbWVvdXQgYnV0IG5vIEkuRS4gbWFkZG5lc3NcbiAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9IGNhdGNoKGUpe1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gV2hlbiB3ZSBhcmUgaW4gSS5FLiBidXQgdGhlIHNjcmlwdCBoYXMgYmVlbiBldmFsZWQgc28gSS5FLiBkb2Vzbid0IHRydXN0IHRoZSBnbG9iYWwgb2JqZWN0IHdoZW4gY2FsbGVkIG5vcm1hbGx5XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dC5jYWxsKG51bGwsIGZ1biwgMCk7XG4gICAgICAgIH0gY2F0Y2goZSl7XG4gICAgICAgICAgICAvLyBzYW1lIGFzIGFib3ZlIGJ1dCB3aGVuIGl0J3MgYSB2ZXJzaW9uIG9mIEkuRS4gdGhhdCBtdXN0IGhhdmUgdGhlIGdsb2JhbCBvYmplY3QgZm9yICd0aGlzJywgaG9wZnVsbHkgb3VyIGNvbnRleHQgY29ycmVjdCBvdGhlcndpc2UgaXQgd2lsbCB0aHJvdyBhIGdsb2JhbCBlcnJvclxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQuY2FsbCh0aGlzLCBmdW4sIDApO1xuICAgICAgICB9XG4gICAgfVxuXG5cbn1cbmZ1bmN0aW9uIHJ1bkNsZWFyVGltZW91dChtYXJrZXIpIHtcbiAgICBpZiAoY2FjaGVkQ2xlYXJUaW1lb3V0ID09PSBjbGVhclRpbWVvdXQpIHtcbiAgICAgICAgLy9ub3JtYWwgZW52aXJvbWVudHMgaW4gc2FuZSBzaXR1YXRpb25zXG4gICAgICAgIHJldHVybiBjbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9XG4gICAgLy8gaWYgY2xlYXJUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxuICAgIGlmICgoY2FjaGVkQ2xlYXJUaW1lb3V0ID09PSBkZWZhdWx0Q2xlYXJUaW1lb3V0IHx8ICFjYWNoZWRDbGVhclRpbWVvdXQpICYmIGNsZWFyVGltZW91dCkge1xuICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBjbGVhclRpbWVvdXQ7XG4gICAgICAgIHJldHVybiBjbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xuICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfSBjYXRjaCAoZSl7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBXaGVuIHdlIGFyZSBpbiBJLkUuIGJ1dCB0aGUgc2NyaXB0IGhhcyBiZWVuIGV2YWxlZCBzbyBJLkUuIGRvZXNuJ3QgIHRydXN0IHRoZSBnbG9iYWwgb2JqZWN0IHdoZW4gY2FsbGVkIG5vcm1hbGx5XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0LmNhbGwobnVsbCwgbWFya2VyKTtcbiAgICAgICAgfSBjYXRjaCAoZSl7XG4gICAgICAgICAgICAvLyBzYW1lIGFzIGFib3ZlIGJ1dCB3aGVuIGl0J3MgYSB2ZXJzaW9uIG9mIEkuRS4gdGhhdCBtdXN0IGhhdmUgdGhlIGdsb2JhbCBvYmplY3QgZm9yICd0aGlzJywgaG9wZnVsbHkgb3VyIGNvbnRleHQgY29ycmVjdCBvdGhlcndpc2UgaXQgd2lsbCB0aHJvdyBhIGdsb2JhbCBlcnJvci5cbiAgICAgICAgICAgIC8vIFNvbWUgdmVyc2lvbnMgb2YgSS5FLiBoYXZlIGRpZmZlcmVudCBydWxlcyBmb3IgY2xlYXJUaW1lb3V0IHZzIHNldFRpbWVvdXRcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbCh0aGlzLCBtYXJrZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG5cblxufVxudmFyIHF1ZXVlID0gW107XG52YXIgZHJhaW5pbmcgPSBmYWxzZTtcbnZhciBjdXJyZW50UXVldWU7XG52YXIgcXVldWVJbmRleCA9IC0xO1xuXG5mdW5jdGlvbiBjbGVhblVwTmV4dFRpY2soKSB7XG4gICAgaWYgKCFkcmFpbmluZyB8fCAhY3VycmVudFF1ZXVlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBpZiAoY3VycmVudFF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBxdWV1ZSA9IGN1cnJlbnRRdWV1ZS5jb25jYXQocXVldWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICB9XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBkcmFpblF1ZXVlKCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBkcmFpblF1ZXVlKCkge1xuICAgIGlmIChkcmFpbmluZykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciB0aW1lb3V0ID0gcnVuVGltZW91dChjbGVhblVwTmV4dFRpY2spO1xuICAgIGRyYWluaW5nID0gdHJ1ZTtcblxuICAgIHZhciBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgd2hpbGUobGVuKSB7XG4gICAgICAgIGN1cnJlbnRRdWV1ZSA9IHF1ZXVlO1xuICAgICAgICBxdWV1ZSA9IFtdO1xuICAgICAgICB3aGlsZSAoKytxdWV1ZUluZGV4IDwgbGVuKSB7XG4gICAgICAgICAgICBpZiAoY3VycmVudFF1ZXVlKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFF1ZXVlW3F1ZXVlSW5kZXhdLnJ1bigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICAgICAgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIH1cbiAgICBjdXJyZW50UXVldWUgPSBudWxsO1xuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgcnVuQ2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xufVxuXG5wcm9jZXNzLm5leHRUaWNrID0gZnVuY3Rpb24gKGZ1bikge1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGggLSAxKTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHF1ZXVlLnB1c2gobmV3IEl0ZW0oZnVuLCBhcmdzKSk7XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCA9PT0gMSAmJiAhZHJhaW5pbmcpIHtcbiAgICAgICAgcnVuVGltZW91dChkcmFpblF1ZXVlKTtcbiAgICB9XG59O1xuXG4vLyB2OCBsaWtlcyBwcmVkaWN0aWJsZSBvYmplY3RzXG5mdW5jdGlvbiBJdGVtKGZ1biwgYXJyYXkpIHtcbiAgICB0aGlzLmZ1biA9IGZ1bjtcbiAgICB0aGlzLmFycmF5ID0gYXJyYXk7XG59XG5JdGVtLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5mdW4uYXBwbHkobnVsbCwgdGhpcy5hcnJheSk7XG59O1xucHJvY2Vzcy50aXRsZSA9ICdicm93c2VyJztcbnByb2Nlc3MuYnJvd3NlciA9IHRydWU7XG5wcm9jZXNzLmVudiA9IHt9O1xucHJvY2Vzcy5hcmd2ID0gW107XG5wcm9jZXNzLnZlcnNpb24gPSAnJzsgLy8gZW1wdHkgc3RyaW5nIHRvIGF2b2lkIHJlZ2V4cCBpc3N1ZXNcbnByb2Nlc3MudmVyc2lvbnMgPSB7fTtcblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cbnByb2Nlc3Mub24gPSBub29wO1xucHJvY2Vzcy5hZGRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLm9uY2UgPSBub29wO1xucHJvY2Vzcy5vZmYgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUFsbExpc3RlbmVycyA9IG5vb3A7XG5wcm9jZXNzLmVtaXQgPSBub29wO1xucHJvY2Vzcy5wcmVwZW5kTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5wcmVwZW5kT25jZUxpc3RlbmVyID0gbm9vcDtcblxucHJvY2Vzcy5saXN0ZW5lcnMgPSBmdW5jdGlvbiAobmFtZSkgeyByZXR1cm4gW10gfVxuXG5wcm9jZXNzLmJpbmRpbmcgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5cbnByb2Nlc3MuY3dkID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gJy8nIH07XG5wcm9jZXNzLmNoZGlyID0gZnVuY3Rpb24gKGRpcikge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xucHJvY2Vzcy51bWFzayA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gMDsgfTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///155\n")},384:module=>{eval("module.exports = function isBuffer(arg) {\n return arg && typeof arg === 'object'\n && typeof arg.copy === 'function'\n && typeof arg.fill === 'function'\n && typeof arg.readUInt8 === 'function';\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzg0LmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3NtYWxsLWN0Ly4vbm9kZV9tb2R1bGVzL3V0aWwvc3VwcG9ydC9pc0J1ZmZlckJyb3dzZXIuanM/ZDYwYSJdLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzQnVmZmVyKGFyZykge1xuICByZXR1cm4gYXJnICYmIHR5cGVvZiBhcmcgPT09ICdvYmplY3QnXG4gICAgJiYgdHlwZW9mIGFyZy5jb3B5ID09PSAnZnVuY3Rpb24nXG4gICAgJiYgdHlwZW9mIGFyZy5maWxsID09PSAnZnVuY3Rpb24nXG4gICAgJiYgdHlwZW9mIGFyZy5yZWFkVUludDggPT09ICdmdW5jdGlvbic7XG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///384\n")},955:(__unused_webpack_module,exports,__webpack_require__)=>{"use strict";eval("// Currently in sync with Node.js lib/internal/util/types.js\n// https://github.com/nodejs/node/commit/112cc7c27551254aa2b17098fb774867f05ed0d9\n\n\n\nvar isArgumentsObject = __webpack_require__(584);\nvar isGeneratorFunction = __webpack_require__(662);\nvar whichTypedArray = __webpack_require__(430);\nvar isTypedArray = __webpack_require__(692);\n\nfunction uncurryThis(f) {\n return f.call.bind(f);\n}\n\nvar BigIntSupported = typeof BigInt !== 'undefined';\nvar SymbolSupported = typeof Symbol !== 'undefined';\n\nvar ObjectToString = uncurryThis(Object.prototype.toString);\n\nvar numberValue = uncurryThis(Number.prototype.valueOf);\nvar stringValue = uncurryThis(String.prototype.valueOf);\nvar booleanValue = uncurryThis(Boolean.prototype.valueOf);\n\nif (BigIntSupported) {\n var bigIntValue = uncurryThis(BigInt.prototype.valueOf);\n}\n\nif (SymbolSupported) {\n var symbolValue = uncurryThis(Symbol.prototype.valueOf);\n}\n\nfunction checkBoxedPrimitive(value, prototypeValueOf) {\n if (typeof value !== 'object') {\n return false;\n }\n try {\n prototypeValueOf(value);\n return true;\n } catch(e) {\n return false;\n }\n}\n\nexports.isArgumentsObject = isArgumentsObject;\nexports.isGeneratorFunction = isGeneratorFunction;\nexports.isTypedArray = isTypedArray;\n\n// Taken from here and modified for better browser support\n// https://github.com/sindresorhus/p-is-promise/blob/cda35a513bda03f977ad5cde3a079d237e82d7ef/index.js\nfunction isPromise(input) {\n\treturn (\n\t\t(\n\t\t\ttypeof Promise !== 'undefined' &&\n\t\t\tinput instanceof Promise\n\t\t) ||\n\t\t(\n\t\t\tinput !== null &&\n\t\t\ttypeof input === 'object' &&\n\t\t\ttypeof input.then === 'function' &&\n\t\t\ttypeof input.catch === 'function'\n\t\t)\n\t);\n}\nexports.isPromise = isPromise;\n\nfunction isArrayBufferView(value) {\n if (typeof ArrayBuffer !== 'undefined' && ArrayBuffer.isView) {\n return ArrayBuffer.isView(value);\n }\n\n return (\n isTypedArray(value) ||\n isDataView(value)\n );\n}\nexports.isArrayBufferView = isArrayBufferView;\n\n\nfunction isUint8Array(value) {\n return whichTypedArray(value) === 'Uint8Array';\n}\nexports.isUint8Array = isUint8Array;\n\nfunction isUint8ClampedArray(value) {\n return whichTypedArray(value) === 'Uint8ClampedArray';\n}\nexports.isUint8ClampedArray = isUint8ClampedArray;\n\nfunction isUint16Array(value) {\n return whichTypedArray(value) === 'Uint16Array';\n}\nexports.isUint16Array = isUint16Array;\n\nfunction isUint32Array(value) {\n return whichTypedArray(value) === 'Uint32Array';\n}\nexports.isUint32Array = isUint32Array;\n\nfunction isInt8Array(value) {\n return whichTypedArray(value) === 'Int8Array';\n}\nexports.isInt8Array = isInt8Array;\n\nfunction isInt16Array(value) {\n return whichTypedArray(value) === 'Int16Array';\n}\nexports.isInt16Array = isInt16Array;\n\nfunction isInt32Array(value) {\n return whichTypedArray(value) === 'Int32Array';\n}\nexports.isInt32Array = isInt32Array;\n\nfunction isFloat32Array(value) {\n return whichTypedArray(value) === 'Float32Array';\n}\nexports.isFloat32Array = isFloat32Array;\n\nfunction isFloat64Array(value) {\n return whichTypedArray(value) === 'Float64Array';\n}\nexports.isFloat64Array = isFloat64Array;\n\nfunction isBigInt64Array(value) {\n return whichTypedArray(value) === 'BigInt64Array';\n}\nexports.isBigInt64Array = isBigInt64Array;\n\nfunction isBigUint64Array(value) {\n return whichTypedArray(value) === 'BigUint64Array';\n}\nexports.isBigUint64Array = isBigUint64Array;\n\nfunction isMapToString(value) {\n return ObjectToString(value) === '[object Map]';\n}\nisMapToString.working = (\n typeof Map !== 'undefined' &&\n isMapToString(new Map())\n);\n\nfunction isMap(value) {\n if (typeof Map === 'undefined') {\n return false;\n }\n\n return isMapToString.working\n ? isMapToString(value)\n : value instanceof Map;\n}\nexports.isMap = isMap;\n\nfunction isSetToString(value) {\n return ObjectToString(value) === '[object Set]';\n}\nisSetToString.working = (\n typeof Set !== 'undefined' &&\n isSetToString(new Set())\n);\nfunction isSet(value) {\n if (typeof Set === 'undefined') {\n return false;\n }\n\n return isSetToString.working\n ? isSetToString(value)\n : value instanceof Set;\n}\nexports.isSet = isSet;\n\nfunction isWeakMapToString(value) {\n return ObjectToString(value) === '[object WeakMap]';\n}\nisWeakMapToString.working = (\n typeof WeakMap !== 'undefined' &&\n isWeakMapToString(new WeakMap())\n);\nfunction isWeakMap(value) {\n if (typeof WeakMap === 'undefined') {\n return false;\n }\n\n return isWeakMapToString.working\n ? isWeakMapToString(value)\n : value instanceof WeakMap;\n}\nexports.isWeakMap = isWeakMap;\n\nfunction isWeakSetToString(value) {\n return ObjectToString(value) === '[object WeakSet]';\n}\nisWeakSetToString.working = (\n typeof WeakSet !== 'undefined' &&\n isWeakSetToString(new WeakSet())\n);\nfunction isWeakSet(value) {\n return isWeakSetToString(value);\n}\nexports.isWeakSet = isWeakSet;\n\nfunction isArrayBufferToString(value) {\n return ObjectToString(value) === '[object ArrayBuffer]';\n}\nisArrayBufferToString.working = (\n typeof ArrayBuffer !== 'undefined' &&\n isArrayBufferToString(new ArrayBuffer())\n);\nfunction isArrayBuffer(value) {\n if (typeof ArrayBuffer === 'undefined') {\n return false;\n }\n\n return isArrayBufferToString.working\n ? isArrayBufferToString(value)\n : value instanceof ArrayBuffer;\n}\nexports.isArrayBuffer = isArrayBuffer;\n\nfunction isDataViewToString(value) {\n return ObjectToString(value) === '[object DataView]';\n}\nisDataViewToString.working = (\n typeof ArrayBuffer !== 'undefined' &&\n typeof DataView !== 'undefined' &&\n isDataViewToString(new DataView(new ArrayBuffer(1), 0, 1))\n);\nfunction isDataView(value) {\n if (typeof DataView === 'undefined') {\n return false;\n }\n\n return isDataViewToString.working\n ? isDataViewToString(value)\n : value instanceof DataView;\n}\nexports.isDataView = isDataView;\n\n// Store a copy of SharedArrayBuffer in case it's deleted elsewhere\nvar SharedArrayBufferCopy = typeof SharedArrayBuffer !== 'undefined' ? SharedArrayBuffer : undefined;\nfunction isSharedArrayBufferToString(value) {\n return ObjectToString(value) === '[object SharedArrayBuffer]';\n}\nfunction isSharedArrayBuffer(value) {\n if (typeof SharedArrayBufferCopy === 'undefined') {\n return false;\n }\n\n if (typeof isSharedArrayBufferToString.working === 'undefined') {\n isSharedArrayBufferToString.working = isSharedArrayBufferToString(new SharedArrayBufferCopy());\n }\n\n return isSharedArrayBufferToString.working\n ? isSharedArrayBufferToString(value)\n : value instanceof SharedArrayBufferCopy;\n}\nexports.isSharedArrayBuffer = isSharedArrayBuffer;\n\nfunction isAsyncFunction(value) {\n return ObjectToString(value) === '[object AsyncFunction]';\n}\nexports.isAsyncFunction = isAsyncFunction;\n\nfunction isMapIterator(value) {\n return ObjectToString(value) === '[object Map Iterator]';\n}\nexports.isMapIterator = isMapIterator;\n\nfunction isSetIterator(value) {\n return ObjectToString(value) === '[object Set Iterator]';\n}\nexports.isSetIterator = isSetIterator;\n\nfunction isGeneratorObject(value) {\n return ObjectToString(value) === '[object Generator]';\n}\nexports.isGeneratorObject = isGeneratorObject;\n\nfunction isWebAssemblyCompiledModule(value) {\n return ObjectToString(value) === '[object WebAssembly.Module]';\n}\nexports.isWebAssemblyCompiledModule = isWebAssemblyCompiledModule;\n\nfunction isNumberObject(value) {\n return checkBoxedPrimitive(value, numberValue);\n}\nexports.isNumberObject = isNumberObject;\n\nfunction isStringObject(value) {\n return checkBoxedPrimitive(value, stringValue);\n}\nexports.isStringObject = isStringObject;\n\nfunction isBooleanObject(value) {\n return checkBoxedPrimitive(value, booleanValue);\n}\nexports.isBooleanObject = isBooleanObject;\n\nfunction isBigIntObject(value) {\n return BigIntSupported && checkBoxedPrimitive(value, bigIntValue);\n}\nexports.isBigIntObject = isBigIntObject;\n\nfunction isSymbolObject(value) {\n return SymbolSupported && checkBoxedPrimitive(value, symbolValue);\n}\nexports.isSymbolObject = isSymbolObject;\n\nfunction isBoxedPrimitive(value) {\n return (\n isNumberObject(value) ||\n isStringObject(value) ||\n isBooleanObject(value) ||\n isBigIntObject(value) ||\n isSymbolObject(value)\n );\n}\nexports.isBoxedPrimitive = isBoxedPrimitive;\n\nfunction isAnyArrayBuffer(value) {\n return typeof Uint8Array !== 'undefined' && (\n isArrayBuffer(value) ||\n isSharedArrayBuffer(value)\n );\n}\nexports.isAnyArrayBuffer = isAnyArrayBuffer;\n\n['isProxy', 'isExternal', 'isModuleNamespaceObject'].forEach(function(method) {\n Object.defineProperty(exports, method, {\n enumerable: false,\n value: function() {\n throw new Error(method + ' is not supported in userland');\n }\n });\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTU1LmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vc21hbGwtY3QvLi9ub2RlX21vZHVsZXMvdXRpbC9zdXBwb3J0L3R5cGVzLmpzP2JkNTUiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ3VycmVudGx5IGluIHN5bmMgd2l0aCBOb2RlLmpzIGxpYi9pbnRlcm5hbC91dGlsL3R5cGVzLmpzXG4vLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvY29tbWl0LzExMmNjN2MyNzU1MTI1NGFhMmIxNzA5OGZiNzc0ODY3ZjA1ZWQwZDlcblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgaXNBcmd1bWVudHNPYmplY3QgPSByZXF1aXJlKCdpcy1hcmd1bWVudHMnKTtcbnZhciBpc0dlbmVyYXRvckZ1bmN0aW9uID0gcmVxdWlyZSgnaXMtZ2VuZXJhdG9yLWZ1bmN0aW9uJyk7XG52YXIgd2hpY2hUeXBlZEFycmF5ID0gcmVxdWlyZSgnd2hpY2gtdHlwZWQtYXJyYXknKTtcbnZhciBpc1R5cGVkQXJyYXkgPSByZXF1aXJlKCdpcy10eXBlZC1hcnJheScpO1xuXG5mdW5jdGlvbiB1bmN1cnJ5VGhpcyhmKSB7XG4gIHJldHVybiBmLmNhbGwuYmluZChmKTtcbn1cblxudmFyIEJpZ0ludFN1cHBvcnRlZCA9IHR5cGVvZiBCaWdJbnQgIT09ICd1bmRlZmluZWQnO1xudmFyIFN5bWJvbFN1cHBvcnRlZCA9IHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnO1xuXG52YXIgT2JqZWN0VG9TdHJpbmcgPSB1bmN1cnJ5VGhpcyhPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nKTtcblxudmFyIG51bWJlclZhbHVlID0gdW5jdXJyeVRoaXMoTnVtYmVyLnByb3RvdHlwZS52YWx1ZU9mKTtcbnZhciBzdHJpbmdWYWx1ZSA9IHVuY3VycnlUaGlzKFN0cmluZy5wcm90b3R5cGUudmFsdWVPZik7XG52YXIgYm9vbGVhblZhbHVlID0gdW5jdXJyeVRoaXMoQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZik7XG5cbmlmIChCaWdJbnRTdXBwb3J0ZWQpIHtcbiAgdmFyIGJpZ0ludFZhbHVlID0gdW5jdXJyeVRoaXMoQmlnSW50LnByb3RvdHlwZS52YWx1ZU9mKTtcbn1cblxuaWYgKFN5bWJvbFN1cHBvcnRlZCkge1xuICB2YXIgc3ltYm9sVmFsdWUgPSB1bmN1cnJ5VGhpcyhTeW1ib2wucHJvdG90eXBlLnZhbHVlT2YpO1xufVxuXG5mdW5jdGlvbiBjaGVja0JveGVkUHJpbWl0aXZlKHZhbHVlLCBwcm90b3R5cGVWYWx1ZU9mKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHRyeSB7XG4gICAgcHJvdG90eXBlVmFsdWVPZih2YWx1ZSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2goZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5leHBvcnRzLmlzQXJndW1lbnRzT2JqZWN0ID0gaXNBcmd1bWVudHNPYmplY3Q7XG5leHBvcnRzLmlzR2VuZXJhdG9yRnVuY3Rpb24gPSBpc0dlbmVyYXRvckZ1bmN0aW9uO1xuZXhwb3J0cy5pc1R5cGVkQXJyYXkgPSBpc1R5cGVkQXJyYXk7XG5cbi8vIFRha2VuIGZyb20gaGVyZSBhbmQgbW9kaWZpZWQgZm9yIGJldHRlciBicm93c2VyIHN1cHBvcnRcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9zaW5kcmVzb3JodXMvcC1pcy1wcm9taXNlL2Jsb2IvY2RhMzVhNTEzYmRhMDNmOTc3YWQ1Y2RlM2EwNzlkMjM3ZTgyZDdlZi9pbmRleC5qc1xuZnVuY3Rpb24gaXNQcm9taXNlKGlucHV0KSB7XG5cdHJldHVybiAoXG5cdFx0KFxuXHRcdFx0dHlwZW9mIFByb21pc2UgIT09ICd1bmRlZmluZWQnICYmXG5cdFx0XHRpbnB1dCBpbnN0YW5jZW9mIFByb21pc2Vcblx0XHQpIHx8XG5cdFx0KFxuXHRcdFx0aW5wdXQgIT09IG51bGwgJiZcblx0XHRcdHR5cGVvZiBpbnB1dCA9PT0gJ29iamVjdCcgJiZcblx0XHRcdHR5cGVvZiBpbnB1dC50aGVuID09PSAnZnVuY3Rpb24nICYmXG5cdFx0XHR0eXBlb2YgaW5wdXQuY2F0Y2ggPT09ICdmdW5jdGlvbidcblx0XHQpXG5cdCk7XG59XG5leHBvcnRzLmlzUHJvbWlzZSA9IGlzUHJvbWlzZTtcblxuZnVuY3Rpb24gaXNBcnJheUJ1ZmZlclZpZXcodmFsdWUpIHtcbiAgaWYgKHR5cGVvZiBBcnJheUJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcgJiYgQXJyYXlCdWZmZXIuaXNWaWV3KSB7XG4gICAgcmV0dXJuIEFycmF5QnVmZmVyLmlzVmlldyh2YWx1ZSk7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIGlzVHlwZWRBcnJheSh2YWx1ZSkgfHxcbiAgICBpc0RhdGFWaWV3KHZhbHVlKVxuICApO1xufVxuZXhwb3J0cy5pc0FycmF5QnVmZmVyVmlldyA9IGlzQXJyYXlCdWZmZXJWaWV3O1xuXG5cbmZ1bmN0aW9uIGlzVWludDhBcnJheSh2YWx1ZSkge1xuICByZXR1cm4gd2hpY2hUeXBlZEFycmF5KHZhbHVlKSA9PT0gJ1VpbnQ4QXJyYXknO1xufVxuZXhwb3J0cy5pc1VpbnQ4QXJyYXkgPSBpc1VpbnQ4QXJyYXk7XG5cbmZ1bmN0aW9uIGlzVWludDhDbGFtcGVkQXJyYXkodmFsdWUpIHtcbiAgcmV0dXJuIHdoaWNoVHlwZWRBcnJheSh2YWx1ZSkgPT09ICdVaW50OENsYW1wZWRBcnJheSc7XG59XG5leHBvcnRzLmlzVWludDhDbGFtcGVkQXJyYXkgPSBpc1VpbnQ4Q2xhbXBlZEFycmF5O1xuXG5mdW5jdGlvbiBpc1VpbnQxNkFycmF5KHZhbHVlKSB7XG4gIHJldHVybiB3aGljaFR5cGVkQXJyYXkodmFsdWUpID09PSAnVWludDE2QXJyYXknO1xufVxuZXhwb3J0cy5pc1VpbnQxNkFycmF5ID0gaXNVaW50MTZBcnJheTtcblxuZnVuY3Rpb24gaXNVaW50MzJBcnJheSh2YWx1ZSkge1xuICByZXR1cm4gd2hpY2hUeXBlZEFycmF5KHZhbHVlKSA9PT0gJ1VpbnQzMkFycmF5Jztcbn1cbmV4cG9ydHMuaXNVaW50MzJBcnJheSA9IGlzVWludDMyQXJyYXk7XG5cbmZ1bmN0aW9uIGlzSW50OEFycmF5KHZhbHVlKSB7XG4gIHJldHVybiB3aGljaFR5cGVkQXJyYXkodmFsdWUpID09PSAnSW50OEFycmF5Jztcbn1cbmV4cG9ydHMuaXNJbnQ4QXJyYXkgPSBpc0ludDhBcnJheTtcblxuZnVuY3Rpb24gaXNJbnQxNkFycmF5KHZhbHVlKSB7XG4gIHJldHVybiB3aGljaFR5cGVkQXJyYXkodmFsdWUpID09PSAnSW50MTZBcnJheSc7XG59XG5leHBvcnRzLmlzSW50MTZBcnJheSA9IGlzSW50MTZBcnJheTtcblxuZnVuY3Rpb24gaXNJbnQzMkFycmF5KHZhbHVlKSB7XG4gIHJldHVybiB3aGljaFR5cGVkQXJyYXkodmFsdWUpID09PSAnSW50MzJBcnJheSc7XG59XG5leHBvcnRzLmlzSW50MzJBcnJheSA9IGlzSW50MzJBcnJheTtcblxuZnVuY3Rpb24gaXNGbG9hdDMyQXJyYXkodmFsdWUpIHtcbiAgcmV0dXJuIHdoaWNoVHlwZWRBcnJheSh2YWx1ZSkgPT09ICdGbG9hdDMyQXJyYXknO1xufVxuZXhwb3J0cy5pc0Zsb2F0MzJBcnJheSA9IGlzRmxvYXQzMkFycmF5O1xuXG5mdW5jdGlvbiBpc0Zsb2F0NjRBcnJheSh2YWx1ZSkge1xuICByZXR1cm4gd2hpY2hUeXBlZEFycmF5KHZhbHVlKSA9PT0gJ0Zsb2F0NjRBcnJheSc7XG59XG5leHBvcnRzLmlzRmxvYXQ2NEFycmF5ID0gaXNGbG9hdDY0QXJyYXk7XG5cbmZ1bmN0aW9uIGlzQmlnSW50NjRBcnJheSh2YWx1ZSkge1xuICByZXR1cm4gd2hpY2hUeXBlZEFycmF5KHZhbHVlKSA9PT0gJ0JpZ0ludDY0QXJyYXknO1xufVxuZXhwb3J0cy5pc0JpZ0ludDY0QXJyYXkgPSBpc0JpZ0ludDY0QXJyYXk7XG5cbmZ1bmN0aW9uIGlzQmlnVWludDY0QXJyYXkodmFsdWUpIHtcbiAgcmV0dXJuIHdoaWNoVHlwZWRBcnJheSh2YWx1ZSkgPT09ICdCaWdVaW50NjRBcnJheSc7XG59XG5leHBvcnRzLmlzQmlnVWludDY0QXJyYXkgPSBpc0JpZ1VpbnQ2NEFycmF5O1xuXG5mdW5jdGlvbiBpc01hcFRvU3RyaW5nKHZhbHVlKSB7XG4gIHJldHVybiBPYmplY3RUb1N0cmluZyh2YWx1ZSkgPT09ICdbb2JqZWN0IE1hcF0nO1xufVxuaXNNYXBUb1N0cmluZy53b3JraW5nID0gKFxuICB0eXBlb2YgTWFwICE9PSAndW5kZWZpbmVkJyAmJlxuICBpc01hcFRvU3RyaW5nKG5ldyBNYXAoKSlcbik7XG5cbmZ1bmN0aW9uIGlzTWFwKHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgTWFwID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBpc01hcFRvU3RyaW5nLndvcmtpbmdcbiAgICA/IGlzTWFwVG9TdHJpbmcodmFsdWUpXG4gICAgOiB2YWx1ZSBpbnN0YW5jZW9mIE1hcDtcbn1cbmV4cG9ydHMuaXNNYXAgPSBpc01hcDtcblxuZnVuY3Rpb24gaXNTZXRUb1N0cmluZyh2YWx1ZSkge1xuICByZXR1cm4gT2JqZWN0VG9TdHJpbmcodmFsdWUpID09PSAnW29iamVjdCBTZXRdJztcbn1cbmlzU2V0VG9TdHJpbmcud29ya2luZyA9IChcbiAgdHlwZW9mIFNldCAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgaXNTZXRUb1N0cmluZyhuZXcgU2V0KCkpXG4pO1xuZnVuY3Rpb24gaXNTZXQodmFsdWUpIHtcbiAgaWYgKHR5cGVvZiBTZXQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIGlzU2V0VG9TdHJpbmcud29ya2luZ1xuICAgID8gaXNTZXRUb1N0cmluZyh2YWx1ZSlcbiAgICA6IHZhbHVlIGluc3RhbmNlb2YgU2V0O1xufVxuZXhwb3J0cy5pc1NldCA9IGlzU2V0O1xuXG5mdW5jdGlvbiBpc1dlYWtNYXBUb1N0cmluZyh2YWx1ZSkge1xuICByZXR1cm4gT2JqZWN0VG9TdHJpbmcodmFsdWUpID09PSAnW29iamVjdCBXZWFrTWFwXSc7XG59XG5pc1dlYWtNYXBUb1N0cmluZy53b3JraW5nID0gKFxuICB0eXBlb2YgV2Vha01hcCAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgaXNXZWFrTWFwVG9TdHJpbmcobmV3IFdlYWtNYXAoKSlcbik7XG5mdW5jdGlvbiBpc1dlYWtNYXAodmFsdWUpIHtcbiAgaWYgKHR5cGVvZiBXZWFrTWFwID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBpc1dlYWtNYXBUb1N0cmluZy53b3JraW5nXG4gICAgPyBpc1dlYWtNYXBUb1N0cmluZyh2YWx1ZSlcbiAgICA6IHZhbHVlIGluc3RhbmNlb2YgV2Vha01hcDtcbn1cbmV4cG9ydHMuaXNXZWFrTWFwID0gaXNXZWFrTWFwO1xuXG5mdW5jdGlvbiBpc1dlYWtTZXRUb1N0cmluZyh2YWx1ZSkge1xuICByZXR1cm4gT2JqZWN0VG9TdHJpbmcodmFsdWUpID09PSAnW29iamVjdCBXZWFrU2V0XSc7XG59XG5pc1dlYWtTZXRUb1N0cmluZy53b3JraW5nID0gKFxuICB0eXBlb2YgV2Vha1NldCAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgaXNXZWFrU2V0VG9TdHJpbmcobmV3IFdlYWtTZXQoKSlcbik7XG5mdW5jdGlvbiBpc1dlYWtTZXQodmFsdWUpIHtcbiAgcmV0dXJuIGlzV2Vha1NldFRvU3RyaW5nKHZhbHVlKTtcbn1cbmV4cG9ydHMuaXNXZWFrU2V0ID0gaXNXZWFrU2V0O1xuXG5mdW5jdGlvbiBpc0FycmF5QnVmZmVyVG9TdHJpbmcodmFsdWUpIHtcbiAgcmV0dXJuIE9iamVjdFRvU3RyaW5nKHZhbHVlKSA9PT0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJztcbn1cbmlzQXJyYXlCdWZmZXJUb1N0cmluZy53b3JraW5nID0gKFxuICB0eXBlb2YgQXJyYXlCdWZmZXIgIT09ICd1bmRlZmluZWQnICYmXG4gIGlzQXJyYXlCdWZmZXJUb1N0cmluZyhuZXcgQXJyYXlCdWZmZXIoKSlcbik7XG5mdW5jdGlvbiBpc0FycmF5QnVmZmVyKHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgQXJyYXlCdWZmZXIgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIGlzQXJyYXlCdWZmZXJUb1N0cmluZy53b3JraW5nXG4gICAgPyBpc0FycmF5QnVmZmVyVG9TdHJpbmcodmFsdWUpXG4gICAgOiB2YWx1ZSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyO1xufVxuZXhwb3J0cy5pc0FycmF5QnVmZmVyID0gaXNBcnJheUJ1ZmZlcjtcblxuZnVuY3Rpb24gaXNEYXRhVmlld1RvU3RyaW5nKHZhbHVlKSB7XG4gIHJldHVybiBPYmplY3RUb1N0cmluZyh2YWx1ZSkgPT09ICdbb2JqZWN0IERhdGFWaWV3XSc7XG59XG5pc0RhdGFWaWV3VG9TdHJpbmcud29ya2luZyA9IChcbiAgdHlwZW9mIEFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJyAmJlxuICB0eXBlb2YgRGF0YVZpZXcgIT09ICd1bmRlZmluZWQnICYmXG4gIGlzRGF0YVZpZXdUb1N0cmluZyhuZXcgRGF0YVZpZXcobmV3IEFycmF5QnVmZmVyKDEpLCAwLCAxKSlcbik7XG5mdW5jdGlvbiBpc0RhdGFWaWV3KHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgRGF0YVZpZXcgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIGlzRGF0YVZpZXdUb1N0cmluZy53b3JraW5nXG4gICAgPyBpc0RhdGFWaWV3VG9TdHJpbmcodmFsdWUpXG4gICAgOiB2YWx1ZSBpbnN0YW5jZW9mIERhdGFWaWV3O1xufVxuZXhwb3J0cy5pc0RhdGFWaWV3ID0gaXNEYXRhVmlldztcblxuLy8gU3RvcmUgYSBjb3B5IG9mIFNoYXJlZEFycmF5QnVmZmVyIGluIGNhc2UgaXQncyBkZWxldGVkIGVsc2V3aGVyZVxudmFyIFNoYXJlZEFycmF5QnVmZmVyQ29weSA9IHR5cGVvZiBTaGFyZWRBcnJheUJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcgPyBTaGFyZWRBcnJheUJ1ZmZlciA6IHVuZGVmaW5lZDtcbmZ1bmN0aW9uIGlzU2hhcmVkQXJyYXlCdWZmZXJUb1N0cmluZyh2YWx1ZSkge1xuICByZXR1cm4gT2JqZWN0VG9TdHJpbmcodmFsdWUpID09PSAnW29iamVjdCBTaGFyZWRBcnJheUJ1ZmZlcl0nO1xufVxuZnVuY3Rpb24gaXNTaGFyZWRBcnJheUJ1ZmZlcih2YWx1ZSkge1xuICBpZiAodHlwZW9mIFNoYXJlZEFycmF5QnVmZmVyQ29weSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAodHlwZW9mIGlzU2hhcmVkQXJyYXlCdWZmZXJUb1N0cmluZy53b3JraW5nID09PSAndW5kZWZpbmVkJykge1xuICAgIGlzU2hhcmVkQXJyYXlCdWZmZXJUb1N0cmluZy53b3JraW5nID0gaXNTaGFyZWRBcnJheUJ1ZmZlclRvU3RyaW5nKG5ldyBTaGFyZWRBcnJheUJ1ZmZlckNvcHkoKSk7XG4gIH1cblxuICByZXR1cm4gaXNTaGFyZWRBcnJheUJ1ZmZlclRvU3RyaW5nLndvcmtpbmdcbiAgICA/IGlzU2hhcmVkQXJyYXlCdWZmZXJUb1N0cmluZyh2YWx1ZSlcbiAgICA6IHZhbHVlIGluc3RhbmNlb2YgU2hhcmVkQXJyYXlCdWZmZXJDb3B5O1xufVxuZXhwb3J0cy5pc1NoYXJlZEFycmF5QnVmZmVyID0gaXNTaGFyZWRBcnJheUJ1ZmZlcjtcblxuZnVuY3Rpb24gaXNBc3luY0Z1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBPYmplY3RUb1N0cmluZyh2YWx1ZSkgPT09ICdbb2JqZWN0IEFzeW5jRnVuY3Rpb25dJztcbn1cbmV4cG9ydHMuaXNBc3luY0Z1bmN0aW9uID0gaXNBc3luY0Z1bmN0aW9uO1xuXG5mdW5jdGlvbiBpc01hcEl0ZXJhdG9yKHZhbHVlKSB7XG4gIHJldHVybiBPYmplY3RUb1N0cmluZyh2YWx1ZSkgPT09ICdbb2JqZWN0IE1hcCBJdGVyYXRvcl0nO1xufVxuZXhwb3J0cy5pc01hcEl0ZXJhdG9yID0gaXNNYXBJdGVyYXRvcjtcblxuZnVuY3Rpb24gaXNTZXRJdGVyYXRvcih2YWx1ZSkge1xuICByZXR1cm4gT2JqZWN0VG9TdHJpbmcodmFsdWUpID09PSAnW29iamVjdCBTZXQgSXRlcmF0b3JdJztcbn1cbmV4cG9ydHMuaXNTZXRJdGVyYXRvciA9IGlzU2V0SXRlcmF0b3I7XG5cbmZ1bmN0aW9uIGlzR2VuZXJhdG9yT2JqZWN0KHZhbHVlKSB7XG4gIHJldHVybiBPYmplY3RUb1N0cmluZyh2YWx1ZSkgPT09ICdbb2JqZWN0IEdlbmVyYXRvcl0nO1xufVxuZXhwb3J0cy5pc0dlbmVyYXRvck9iamVjdCA9IGlzR2VuZXJhdG9yT2JqZWN0O1xuXG5mdW5jdGlvbiBpc1dlYkFzc2VtYmx5Q29tcGlsZWRNb2R1bGUodmFsdWUpIHtcbiAgcmV0dXJuIE9iamVjdFRvU3RyaW5nKHZhbHVlKSA9PT0gJ1tvYmplY3QgV2ViQXNzZW1ibHkuTW9kdWxlXSc7XG59XG5leHBvcnRzLmlzV2ViQXNzZW1ibHlDb21waWxlZE1vZHVsZSA9IGlzV2ViQXNzZW1ibHlDb21waWxlZE1vZHVsZTtcblxuZnVuY3Rpb24gaXNOdW1iZXJPYmplY3QodmFsdWUpIHtcbiAgcmV0dXJuIGNoZWNrQm94ZWRQcmltaXRpdmUodmFsdWUsIG51bWJlclZhbHVlKTtcbn1cbmV4cG9ydHMuaXNOdW1iZXJPYmplY3QgPSBpc051bWJlck9iamVjdDtcblxuZnVuY3Rpb24gaXNTdHJpbmdPYmplY3QodmFsdWUpIHtcbiAgcmV0dXJuIGNoZWNrQm94ZWRQcmltaXRpdmUodmFsdWUsIHN0cmluZ1ZhbHVlKTtcbn1cbmV4cG9ydHMuaXNTdHJpbmdPYmplY3QgPSBpc1N0cmluZ09iamVjdDtcblxuZnVuY3Rpb24gaXNCb29sZWFuT2JqZWN0KHZhbHVlKSB7XG4gIHJldHVybiBjaGVja0JveGVkUHJpbWl0aXZlKHZhbHVlLCBib29sZWFuVmFsdWUpO1xufVxuZXhwb3J0cy5pc0Jvb2xlYW5PYmplY3QgPSBpc0Jvb2xlYW5PYmplY3Q7XG5cbmZ1bmN0aW9uIGlzQmlnSW50T2JqZWN0KHZhbHVlKSB7XG4gIHJldHVybiBCaWdJbnRTdXBwb3J0ZWQgJiYgY2hlY2tCb3hlZFByaW1pdGl2ZSh2YWx1ZSwgYmlnSW50VmFsdWUpO1xufVxuZXhwb3J0cy5pc0JpZ0ludE9iamVjdCA9IGlzQmlnSW50T2JqZWN0O1xuXG5mdW5jdGlvbiBpc1N5bWJvbE9iamVjdCh2YWx1ZSkge1xuICByZXR1cm4gU3ltYm9sU3VwcG9ydGVkICYmIGNoZWNrQm94ZWRQcmltaXRpdmUodmFsdWUsIHN5bWJvbFZhbHVlKTtcbn1cbmV4cG9ydHMuaXNTeW1ib2xPYmplY3QgPSBpc1N5bWJvbE9iamVjdDtcblxuZnVuY3Rpb24gaXNCb3hlZFByaW1pdGl2ZSh2YWx1ZSkge1xuICByZXR1cm4gKFxuICAgIGlzTnVtYmVyT2JqZWN0KHZhbHVlKSB8fFxuICAgIGlzU3RyaW5nT2JqZWN0KHZhbHVlKSB8fFxuICAgIGlzQm9vbGVhbk9iamVjdCh2YWx1ZSkgfHxcbiAgICBpc0JpZ0ludE9iamVjdCh2YWx1ZSkgfHxcbiAgICBpc1N5bWJvbE9iamVjdCh2YWx1ZSlcbiAgKTtcbn1cbmV4cG9ydHMuaXNCb3hlZFByaW1pdGl2ZSA9IGlzQm94ZWRQcmltaXRpdmU7XG5cbmZ1bmN0aW9uIGlzQW55QXJyYXlCdWZmZXIodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiBVaW50OEFycmF5ICE9PSAndW5kZWZpbmVkJyAmJiAoXG4gICAgaXNBcnJheUJ1ZmZlcih2YWx1ZSkgfHxcbiAgICBpc1NoYXJlZEFycmF5QnVmZmVyKHZhbHVlKVxuICApO1xufVxuZXhwb3J0cy5pc0FueUFycmF5QnVmZmVyID0gaXNBbnlBcnJheUJ1ZmZlcjtcblxuWydpc1Byb3h5JywgJ2lzRXh0ZXJuYWwnLCAnaXNNb2R1bGVOYW1lc3BhY2VPYmplY3QnXS5mb3JFYWNoKGZ1bmN0aW9uKG1ldGhvZCkge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbWV0aG9kLCB7XG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgdmFsdWU6IGZ1bmN0aW9uKCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKG1ldGhvZCArICcgaXMgbm90IHN1cHBvcnRlZCBpbiB1c2VybGFuZCcpO1xuICAgIH1cbiAgfSk7XG59KTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///955\n")},539:(__unused_webpack_module,exports,__webpack_require__)=>{eval("/* provided dependency */ var process = __webpack_require__(155);\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nvar getOwnPropertyDescriptors = Object.getOwnPropertyDescriptors ||\n function getOwnPropertyDescriptors(obj) {\n var keys = Object.keys(obj);\n var descriptors = {};\n for (var i = 0; i < keys.length; i++) {\n descriptors[keys[i]] = Object.getOwnPropertyDescriptor(obj, keys[i]);\n }\n return descriptors;\n };\n\nvar formatRegExp = /%[sdj%]/g;\nexports.format = function(f) {\n if (!isString(f)) {\n var objects = [];\n for (var i = 0; i < arguments.length; i++) {\n objects.push(inspect(arguments[i]));\n }\n return objects.join(' ');\n }\n\n var i = 1;\n var args = arguments;\n var len = args.length;\n var str = String(f).replace(formatRegExp, function(x) {\n if (x === '%%') return '%';\n if (i >= len) return x;\n switch (x) {\n case '%s': return String(args[i++]);\n case '%d': return Number(args[i++]);\n case '%j':\n try {\n return JSON.stringify(args[i++]);\n } catch (_) {\n return '[Circular]';\n }\n default:\n return x;\n }\n });\n for (var x = args[i]; i < len; x = args[++i]) {\n if (isNull(x) || !isObject(x)) {\n str += ' ' + x;\n } else {\n str += ' ' + inspect(x);\n }\n }\n return str;\n};\n\n\n// Mark that a method should not be used.\n// Returns a modified function which warns once by default.\n// If --no-deprecation is set, then it is a no-op.\nexports.deprecate = function(fn, msg) {\n if (typeof process !== 'undefined' && process.noDeprecation === true) {\n return fn;\n }\n\n // Allow for deprecating things in the process of starting up.\n if (typeof process === 'undefined') {\n return function() {\n return exports.deprecate(fn, msg).apply(this, arguments);\n };\n }\n\n var warned = false;\n function deprecated() {\n if (!warned) {\n if (process.throwDeprecation) {\n throw new Error(msg);\n } else if (process.traceDeprecation) {\n console.trace(msg);\n } else {\n console.error(msg);\n }\n warned = true;\n }\n return fn.apply(this, arguments);\n }\n\n return deprecated;\n};\n\n\nvar debugs = {};\nvar debugEnvRegex = /^$/;\n\nif (process.env.NODE_DEBUG) {\n var debugEnv = process.env.NODE_DEBUG;\n debugEnv = debugEnv.replace(/[|\\\\{}()[\\]^$+?.]/g, '\\\\$&')\n .replace(/\\*/g, '.*')\n .replace(/,/g, '$|^')\n .toUpperCase();\n debugEnvRegex = new RegExp('^' + debugEnv + '$', 'i');\n}\nexports.debuglog = function(set) {\n set = set.toUpperCase();\n if (!debugs[set]) {\n if (debugEnvRegex.test(set)) {\n var pid = process.pid;\n debugs[set] = function() {\n var msg = exports.format.apply(exports, arguments);\n console.error('%s %d: %s', set, pid, msg);\n };\n } else {\n debugs[set] = function() {};\n }\n }\n return debugs[set];\n};\n\n\n/**\n * Echos the value of a value. Trys to print the value out\n * in the best way possible given the different types.\n *\n * @param {Object} obj The object to print out.\n * @param {Object} opts Optional options object that alters the output.\n */\n/* legacy: obj, showHidden, depth, colors*/\nfunction inspect(obj, opts) {\n // default options\n var ctx = {\n seen: [],\n stylize: stylizeNoColor\n };\n // legacy...\n if (arguments.length >= 3) ctx.depth = arguments[2];\n if (arguments.length >= 4) ctx.colors = arguments[3];\n if (isBoolean(opts)) {\n // legacy...\n ctx.showHidden = opts;\n } else if (opts) {\n // got an \"options\" object\n exports._extend(ctx, opts);\n }\n // set default options\n if (isUndefined(ctx.showHidden)) ctx.showHidden = false;\n if (isUndefined(ctx.depth)) ctx.depth = 2;\n if (isUndefined(ctx.colors)) ctx.colors = false;\n if (isUndefined(ctx.customInspect)) ctx.customInspect = true;\n if (ctx.colors) ctx.stylize = stylizeWithColor;\n return formatValue(ctx, obj, ctx.depth);\n}\nexports.inspect = inspect;\n\n\n// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics\ninspect.colors = {\n 'bold' : [1, 22],\n 'italic' : [3, 23],\n 'underline' : [4, 24],\n 'inverse' : [7, 27],\n 'white' : [37, 39],\n 'grey' : [90, 39],\n 'black' : [30, 39],\n 'blue' : [34, 39],\n 'cyan' : [36, 39],\n 'green' : [32, 39],\n 'magenta' : [35, 39],\n 'red' : [31, 39],\n 'yellow' : [33, 39]\n};\n\n// Don't use 'blue' not visible on cmd.exe\ninspect.styles = {\n 'special': 'cyan',\n 'number': 'yellow',\n 'boolean': 'yellow',\n 'undefined': 'grey',\n 'null': 'bold',\n 'string': 'green',\n 'date': 'magenta',\n // \"name\": intentionally not styling\n 'regexp': 'red'\n};\n\n\nfunction stylizeWithColor(str, styleType) {\n var style = inspect.styles[styleType];\n\n if (style) {\n return '\\u001b[' + inspect.colors[style][0] + 'm' + str +\n '\\u001b[' + inspect.colors[style][1] + 'm';\n } else {\n return str;\n }\n}\n\n\nfunction stylizeNoColor(str, styleType) {\n return str;\n}\n\n\nfunction arrayToHash(array) {\n var hash = {};\n\n array.forEach(function(val, idx) {\n hash[val] = true;\n });\n\n return hash;\n}\n\n\nfunction formatValue(ctx, value, recurseTimes) {\n // Provide a hook for user-specified inspect functions.\n // Check that value is an object with an inspect function on it\n if (ctx.customInspect &&\n value &&\n isFunction(value.inspect) &&\n // Filter out the util module, it's inspect function is special\n value.inspect !== exports.inspect &&\n // Also filter out any prototype objects using the circular check.\n !(value.constructor && value.constructor.prototype === value)) {\n var ret = value.inspect(recurseTimes, ctx);\n if (!isString(ret)) {\n ret = formatValue(ctx, ret, recurseTimes);\n }\n return ret;\n }\n\n // Primitive types cannot have properties\n var primitive = formatPrimitive(ctx, value);\n if (primitive) {\n return primitive;\n }\n\n // Look up the keys of the object.\n var keys = Object.keys(value);\n var visibleKeys = arrayToHash(keys);\n\n if (ctx.showHidden) {\n keys = Object.getOwnPropertyNames(value);\n }\n\n // IE doesn't make error fields non-enumerable\n // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx\n if (isError(value)\n && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {\n return formatError(value);\n }\n\n // Some type of object without properties can be shortcutted.\n if (keys.length === 0) {\n if (isFunction(value)) {\n var name = value.name ? ': ' + value.name : '';\n return ctx.stylize('[Function' + name + ']', 'special');\n }\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n }\n if (isDate(value)) {\n return ctx.stylize(Date.prototype.toString.call(value), 'date');\n }\n if (isError(value)) {\n return formatError(value);\n }\n }\n\n var base = '', array = false, braces = ['{', '}'];\n\n // Make Array say that they are Array\n if (isArray(value)) {\n array = true;\n braces = ['[', ']'];\n }\n\n // Make functions say that they are functions\n if (isFunction(value)) {\n var n = value.name ? ': ' + value.name : '';\n base = ' [Function' + n + ']';\n }\n\n // Make RegExps say that they are RegExps\n if (isRegExp(value)) {\n base = ' ' + RegExp.prototype.toString.call(value);\n }\n\n // Make dates with properties first say the date\n if (isDate(value)) {\n base = ' ' + Date.prototype.toUTCString.call(value);\n }\n\n // Make error with message first say the error\n if (isError(value)) {\n base = ' ' + formatError(value);\n }\n\n if (keys.length === 0 && (!array || value.length == 0)) {\n return braces[0] + base + braces[1];\n }\n\n if (recurseTimes < 0) {\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n } else {\n return ctx.stylize('[Object]', 'special');\n }\n }\n\n ctx.seen.push(value);\n\n var output;\n if (array) {\n output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);\n } else {\n output = keys.map(function(key) {\n return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);\n });\n }\n\n ctx.seen.pop();\n\n return reduceToSingleString(output, base, braces);\n}\n\n\nfunction formatPrimitive(ctx, value) {\n if (isUndefined(value))\n return ctx.stylize('undefined', 'undefined');\n if (isString(value)) {\n var simple = '\\'' + JSON.stringify(value).replace(/^\"|\"$/g, '')\n .replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"') + '\\'';\n return ctx.stylize(simple, 'string');\n }\n if (isNumber(value))\n return ctx.stylize('' + value, 'number');\n if (isBoolean(value))\n return ctx.stylize('' + value, 'boolean');\n // For some reason typeof null is \"object\", so special case here.\n if (isNull(value))\n return ctx.stylize('null', 'null');\n}\n\n\nfunction formatError(value) {\n return '[' + Error.prototype.toString.call(value) + ']';\n}\n\n\nfunction formatArray(ctx, value, recurseTimes, visibleKeys, keys) {\n var output = [];\n for (var i = 0, l = value.length; i < l; ++i) {\n if (hasOwnProperty(value, String(i))) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n String(i), true));\n } else {\n output.push('');\n }\n }\n keys.forEach(function(key) {\n if (!key.match(/^\\d+$/)) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n key, true));\n }\n });\n return output;\n}\n\n\nfunction formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {\n var name, str, desc;\n desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };\n if (desc.get) {\n if (desc.set) {\n str = ctx.stylize('[Getter/Setter]', 'special');\n } else {\n str = ctx.stylize('[Getter]', 'special');\n }\n } else {\n if (desc.set) {\n str = ctx.stylize('[Setter]', 'special');\n }\n }\n if (!hasOwnProperty(visibleKeys, key)) {\n name = '[' + key + ']';\n }\n if (!str) {\n if (ctx.seen.indexOf(desc.value) < 0) {\n if (isNull(recurseTimes)) {\n str = formatValue(ctx, desc.value, null);\n } else {\n str = formatValue(ctx, desc.value, recurseTimes - 1);\n }\n if (str.indexOf('\\n') > -1) {\n if (array) {\n str = str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n').substr(2);\n } else {\n str = '\\n' + str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n');\n }\n }\n } else {\n str = ctx.stylize('[Circular]', 'special');\n }\n }\n if (isUndefined(name)) {\n if (array && key.match(/^\\d+$/)) {\n return str;\n }\n name = JSON.stringify('' + key);\n if (name.match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)) {\n name = name.substr(1, name.length - 2);\n name = ctx.stylize(name, 'name');\n } else {\n name = name.replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"')\n .replace(/(^\"|\"$)/g, \"'\");\n name = ctx.stylize(name, 'string');\n }\n }\n\n return name + ': ' + str;\n}\n\n\nfunction reduceToSingleString(output, base, braces) {\n var numLinesEst = 0;\n var length = output.reduce(function(prev, cur) {\n numLinesEst++;\n if (cur.indexOf('\\n') >= 0) numLinesEst++;\n return prev + cur.replace(/\\u001b\\[\\d\\d?m/g, '').length + 1;\n }, 0);\n\n if (length > 60) {\n return braces[0] +\n (base === '' ? '' : base + '\\n ') +\n ' ' +\n output.join(',\\n ') +\n ' ' +\n braces[1];\n }\n\n return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];\n}\n\n\n// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\nexports.types = __webpack_require__(955);\n\nfunction isArray(ar) {\n return Array.isArray(ar);\n}\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n return typeof arg === 'boolean';\n}\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n return arg === null;\n}\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n return arg == null;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n return typeof arg === 'number';\n}\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n return typeof arg === 'string';\n}\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n return typeof arg === 'symbol';\n}\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n return arg === void 0;\n}\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n return isObject(re) && objectToString(re) === '[object RegExp]';\n}\nexports.isRegExp = isRegExp;\nexports.types.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n return typeof arg === 'object' && arg !== null;\n}\nexports.isObject = isObject;\n\nfunction isDate(d) {\n return isObject(d) && objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\nexports.types.isDate = isDate;\n\nfunction isError(e) {\n return isObject(e) &&\n (objectToString(e) === '[object Error]' || e instanceof Error);\n}\nexports.isError = isError;\nexports.types.isNativeError = isError;\n\nfunction isFunction(arg) {\n return typeof arg === 'function';\n}\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n return arg === null ||\n typeof arg === 'boolean' ||\n typeof arg === 'number' ||\n typeof arg === 'string' ||\n typeof arg === 'symbol' || // ES6 symbol\n typeof arg === 'undefined';\n}\nexports.isPrimitive = isPrimitive;\n\nexports.isBuffer = __webpack_require__(384);\n\nfunction objectToString(o) {\n return Object.prototype.toString.call(o);\n}\n\n\nfunction pad(n) {\n return n < 10 ? '0' + n.toString(10) : n.toString(10);\n}\n\n\nvar months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',\n 'Oct', 'Nov', 'Dec'];\n\n// 26 Feb 16:19:34\nfunction timestamp() {\n var d = new Date();\n var time = [pad(d.getHours()),\n pad(d.getMinutes()),\n pad(d.getSeconds())].join(':');\n return [d.getDate(), months[d.getMonth()], time].join(' ');\n}\n\n\n// log is just a thin wrapper to console.log that prepends a timestamp\nexports.log = function() {\n console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));\n};\n\n\n/**\n * Inherit the prototype methods from one constructor into another.\n *\n * The Function.prototype.inherits from lang.js rewritten as a standalone\n * function (not on Function.prototype). NOTE: If this file is to be loaded\n * during bootstrapping this function needs to be rewritten using some native\n * functions as prototype setup using normal JavaScript does not work as\n * expected during bootstrapping (see mirror.js in r114903).\n *\n * @param {function} ctor Constructor function which needs to inherit the\n * prototype.\n * @param {function} superCtor Constructor function to inherit prototype from.\n */\nexports.inherits = __webpack_require__(717);\n\nexports._extend = function(origin, add) {\n // Don't do anything if add isn't an object\n if (!add || !isObject(add)) return origin;\n\n var keys = Object.keys(add);\n var i = keys.length;\n while (i--) {\n origin[keys[i]] = add[keys[i]];\n }\n return origin;\n};\n\nfunction hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nvar kCustomPromisifiedSymbol = typeof Symbol !== 'undefined' ? Symbol('util.promisify.custom') : undefined;\n\nexports.promisify = function promisify(original) {\n if (typeof original !== 'function')\n throw new TypeError('The \"original\" argument must be of type Function');\n\n if (kCustomPromisifiedSymbol && original[kCustomPromisifiedSymbol]) {\n var fn = original[kCustomPromisifiedSymbol];\n if (typeof fn !== 'function') {\n throw new TypeError('The \"util.promisify.custom\" argument must be of type Function');\n }\n Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n value: fn, enumerable: false, writable: false, configurable: true\n });\n return fn;\n }\n\n function fn() {\n var promiseResolve, promiseReject;\n var promise = new Promise(function (resolve, reject) {\n promiseResolve = resolve;\n promiseReject = reject;\n });\n\n var args = [];\n for (var i = 0; i < arguments.length; i++) {\n args.push(arguments[i]);\n }\n args.push(function (err, value) {\n if (err) {\n promiseReject(err);\n } else {\n promiseResolve(value);\n }\n });\n\n try {\n original.apply(this, args);\n } catch (err) {\n promiseReject(err);\n }\n\n return promise;\n }\n\n Object.setPrototypeOf(fn, Object.getPrototypeOf(original));\n\n if (kCustomPromisifiedSymbol) Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n value: fn, enumerable: false, writable: false, configurable: true\n });\n return Object.defineProperties(\n fn,\n getOwnPropertyDescriptors(original)\n );\n}\n\nexports.promisify.custom = kCustomPromisifiedSymbol\n\nfunction callbackifyOnRejected(reason, cb) {\n // `!reason` guard inspired by bluebird (Ref: https://goo.gl/t5IS6M).\n // Because `null` is a special error value in callbacks which means \"no error\n // occurred\", we error-wrap so the callback consumer can distinguish between\n // \"the promise rejected with null\" or \"the promise fulfilled with undefined\".\n if (!reason) {\n var newReason = new Error('Promise was rejected with a falsy value');\n newReason.reason = reason;\n reason = newReason;\n }\n return cb(reason);\n}\n\nfunction callbackify(original) {\n if (typeof original !== 'function') {\n throw new TypeError('The \"original\" argument must be of type Function');\n }\n\n // We DO NOT return the promise as it gives the user a false sense that\n // the promise is actually somehow related to the callback's execution\n // and that the callback throwing will reject the promise.\n function callbackified() {\n var args = [];\n for (var i = 0; i < arguments.length; i++) {\n args.push(arguments[i]);\n }\n\n var maybeCb = args.pop();\n if (typeof maybeCb !== 'function') {\n throw new TypeError('The last argument must be of type Function');\n }\n var self = this;\n var cb = function() {\n return maybeCb.apply(self, arguments);\n };\n // In true node style we process the callback on `nextTick` with all the\n // implications (stack, `uncaughtException`, `async_hooks`)\n original.apply(this, args)\n .then(function(ret) { process.nextTick(cb.bind(null, null, ret)) },\n function(rej) { process.nextTick(callbackifyOnRejected.bind(null, rej, cb)) });\n }\n\n Object.setPrototypeOf(callbackified, Object.getPrototypeOf(original));\n Object.defineProperties(callbackified,\n getOwnPropertyDescriptors(original));\n return callbackified;\n}\nexports.callbackify = callbackify;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTM5LmpzIiwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3NtYWxsLWN0Ly4vbm9kZV9tb2R1bGVzL3V0aWwvdXRpbC5qcz8zMDIyIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIHx8XG4gIGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcnMob2JqKSB7XG4gICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmopO1xuICAgIHZhciBkZXNjcmlwdG9ycyA9IHt9O1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgZGVzY3JpcHRvcnNba2V5c1tpXV0gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwga2V5c1tpXSk7XG4gICAgfVxuICAgIHJldHVybiBkZXNjcmlwdG9ycztcbiAgfTtcblxudmFyIGZvcm1hdFJlZ0V4cCA9IC8lW3NkaiVdL2c7XG5leHBvcnRzLmZvcm1hdCA9IGZ1bmN0aW9uKGYpIHtcbiAgaWYgKCFpc1N0cmluZyhmKSkge1xuICAgIHZhciBvYmplY3RzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIG9iamVjdHMucHVzaChpbnNwZWN0KGFyZ3VtZW50c1tpXSkpO1xuICAgIH1cbiAgICByZXR1cm4gb2JqZWN0cy5qb2luKCcgJyk7XG4gIH1cblxuICB2YXIgaSA9IDE7XG4gIHZhciBhcmdzID0gYXJndW1lbnRzO1xuICB2YXIgbGVuID0gYXJncy5sZW5ndGg7XG4gIHZhciBzdHIgPSBTdHJpbmcoZikucmVwbGFjZShmb3JtYXRSZWdFeHAsIGZ1bmN0aW9uKHgpIHtcbiAgICBpZiAoeCA9PT0gJyUlJykgcmV0dXJuICclJztcbiAgICBpZiAoaSA+PSBsZW4pIHJldHVybiB4O1xuICAgIHN3aXRjaCAoeCkge1xuICAgICAgY2FzZSAnJXMnOiByZXR1cm4gU3RyaW5nKGFyZ3NbaSsrXSk7XG4gICAgICBjYXNlICclZCc6IHJldHVybiBOdW1iZXIoYXJnc1tpKytdKTtcbiAgICAgIGNhc2UgJyVqJzpcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoYXJnc1tpKytdKTtcbiAgICAgICAgfSBjYXRjaCAoXykge1xuICAgICAgICAgIHJldHVybiAnW0NpcmN1bGFyXSc7XG4gICAgICAgIH1cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB4O1xuICAgIH1cbiAgfSk7XG4gIGZvciAodmFyIHggPSBhcmdzW2ldOyBpIDwgbGVuOyB4ID0gYXJnc1srK2ldKSB7XG4gICAgaWYgKGlzTnVsbCh4KSB8fCAhaXNPYmplY3QoeCkpIHtcbiAgICAgIHN0ciArPSAnICcgKyB4O1xuICAgIH0gZWxzZSB7XG4gICAgICBzdHIgKz0gJyAnICsgaW5zcGVjdCh4KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHN0cjtcbn07XG5cblxuLy8gTWFyayB0aGF0IGEgbWV0aG9kIHNob3VsZCBub3QgYmUgdXNlZC5cbi8vIFJldHVybnMgYSBtb2RpZmllZCBmdW5jdGlvbiB3aGljaCB3YXJucyBvbmNlIGJ5IGRlZmF1bHQuXG4vLyBJZiAtLW5vLWRlcHJlY2F0aW9uIGlzIHNldCwgdGhlbiBpdCBpcyBhIG5vLW9wLlxuZXhwb3J0cy5kZXByZWNhdGUgPSBmdW5jdGlvbihmbiwgbXNnKSB7XG4gIGlmICh0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgJiYgcHJvY2Vzcy5ub0RlcHJlY2F0aW9uID09PSB0cnVlKSB7XG4gICAgcmV0dXJuIGZuO1xuICB9XG5cbiAgLy8gQWxsb3cgZm9yIGRlcHJlY2F0aW5nIHRoaW5ncyBpbiB0aGUgcHJvY2VzcyBvZiBzdGFydGluZyB1cC5cbiAgaWYgKHR5cGVvZiBwcm9jZXNzID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBleHBvcnRzLmRlcHJlY2F0ZShmbiwgbXNnKS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH07XG4gIH1cblxuICB2YXIgd2FybmVkID0gZmFsc2U7XG4gIGZ1bmN0aW9uIGRlcHJlY2F0ZWQoKSB7XG4gICAgaWYgKCF3YXJuZWQpIHtcbiAgICAgIGlmIChwcm9jZXNzLnRocm93RGVwcmVjYXRpb24pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1zZyk7XG4gICAgICB9IGVsc2UgaWYgKHByb2Nlc3MudHJhY2VEZXByZWNhdGlvbikge1xuICAgICAgICBjb25zb2xlLnRyYWNlKG1zZyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmVycm9yKG1zZyk7XG4gICAgICB9XG4gICAgICB3YXJuZWQgPSB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuXG4gIHJldHVybiBkZXByZWNhdGVkO1xufTtcblxuXG52YXIgZGVidWdzID0ge307XG52YXIgZGVidWdFbnZSZWdleCA9IC9eJC87XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0RFQlVHKSB7XG4gIHZhciBkZWJ1Z0VudiA9IHByb2Nlc3MuZW52Lk5PREVfREVCVUc7XG4gIGRlYnVnRW52ID0gZGVidWdFbnYucmVwbGFjZSgvW3xcXFxce30oKVtcXF1eJCs/Ll0vZywgJ1xcXFwkJicpXG4gICAgLnJlcGxhY2UoL1xcKi9nLCAnLionKVxuICAgIC5yZXBsYWNlKC8sL2csICckfF4nKVxuICAgIC50b1VwcGVyQ2FzZSgpO1xuICBkZWJ1Z0VudlJlZ2V4ID0gbmV3IFJlZ0V4cCgnXicgKyBkZWJ1Z0VudiArICckJywgJ2knKTtcbn1cbmV4cG9ydHMuZGVidWdsb2cgPSBmdW5jdGlvbihzZXQpIHtcbiAgc2V0ID0gc2V0LnRvVXBwZXJDYXNlKCk7XG4gIGlmICghZGVidWdzW3NldF0pIHtcbiAgICBpZiAoZGVidWdFbnZSZWdleC50ZXN0KHNldCkpIHtcbiAgICAgIHZhciBwaWQgPSBwcm9jZXNzLnBpZDtcbiAgICAgIGRlYnVnc1tzZXRdID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBtc2cgPSBleHBvcnRzLmZvcm1hdC5hcHBseShleHBvcnRzLCBhcmd1bWVudHMpO1xuICAgICAgICBjb25zb2xlLmVycm9yKCclcyAlZDogJXMnLCBzZXQsIHBpZCwgbXNnKTtcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlYnVnc1tzZXRdID0gZnVuY3Rpb24oKSB7fTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGRlYnVnc1tzZXRdO1xufTtcblxuXG4vKipcbiAqIEVjaG9zIHRoZSB2YWx1ZSBvZiBhIHZhbHVlLiBUcnlzIHRvIHByaW50IHRoZSB2YWx1ZSBvdXRcbiAqIGluIHRoZSBiZXN0IHdheSBwb3NzaWJsZSBnaXZlbiB0aGUgZGlmZmVyZW50IHR5cGVzLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmogVGhlIG9iamVjdCB0byBwcmludCBvdXQuXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0cyBPcHRpb25hbCBvcHRpb25zIG9iamVjdCB0aGF0IGFsdGVycyB0aGUgb3V0cHV0LlxuICovXG4vKiBsZWdhY3k6IG9iaiwgc2hvd0hpZGRlbiwgZGVwdGgsIGNvbG9ycyovXG5mdW5jdGlvbiBpbnNwZWN0KG9iaiwgb3B0cykge1xuICAvLyBkZWZhdWx0IG9wdGlvbnNcbiAgdmFyIGN0eCA9IHtcbiAgICBzZWVuOiBbXSxcbiAgICBzdHlsaXplOiBzdHlsaXplTm9Db2xvclxuICB9O1xuICAvLyBsZWdhY3kuLi5cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPj0gMykgY3R4LmRlcHRoID0gYXJndW1lbnRzWzJdO1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+PSA0KSBjdHguY29sb3JzID0gYXJndW1lbnRzWzNdO1xuICBpZiAoaXNCb29sZWFuKG9wdHMpKSB7XG4gICAgLy8gbGVnYWN5Li4uXG4gICAgY3R4LnNob3dIaWRkZW4gPSBvcHRzO1xuICB9IGVsc2UgaWYgKG9wdHMpIHtcbiAgICAvLyBnb3QgYW4gXCJvcHRpb25zXCIgb2JqZWN0XG4gICAgZXhwb3J0cy5fZXh0ZW5kKGN0eCwgb3B0cyk7XG4gIH1cbiAgLy8gc2V0IGRlZmF1bHQgb3B0aW9uc1xuICBpZiAoaXNVbmRlZmluZWQoY3R4LnNob3dIaWRkZW4pKSBjdHguc2hvd0hpZGRlbiA9IGZhbHNlO1xuICBpZiAoaXNVbmRlZmluZWQoY3R4LmRlcHRoKSkgY3R4LmRlcHRoID0gMjtcbiAgaWYgKGlzVW5kZWZpbmVkKGN0eC5jb2xvcnMpKSBjdHguY29sb3JzID0gZmFsc2U7XG4gIGlmIChpc1VuZGVmaW5lZChjdHguY3VzdG9tSW5zcGVjdCkpIGN0eC5jdXN0b21JbnNwZWN0ID0gdHJ1ZTtcbiAgaWYgKGN0eC5jb2xvcnMpIGN0eC5zdHlsaXplID0gc3R5bGl6ZVdpdGhDb2xvcjtcbiAgcmV0dXJuIGZvcm1hdFZhbHVlKGN0eCwgb2JqLCBjdHguZGVwdGgpO1xufVxuZXhwb3J0cy5pbnNwZWN0ID0gaW5zcGVjdDtcblxuXG4vLyBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0FOU0lfZXNjYXBlX2NvZGUjZ3JhcGhpY3Ncbmluc3BlY3QuY29sb3JzID0ge1xuICAnYm9sZCcgOiBbMSwgMjJdLFxuICAnaXRhbGljJyA6IFszLCAyM10sXG4gICd1bmRlcmxpbmUnIDogWzQsIDI0XSxcbiAgJ2ludmVyc2UnIDogWzcsIDI3XSxcbiAgJ3doaXRlJyA6IFszNywgMzldLFxuICAnZ3JleScgOiBbOTAsIDM5XSxcbiAgJ2JsYWNrJyA6IFszMCwgMzldLFxuICAnYmx1ZScgOiBbMzQsIDM5XSxcbiAgJ2N5YW4nIDogWzM2LCAzOV0sXG4gICdncmVlbicgOiBbMzIsIDM5XSxcbiAgJ21hZ2VudGEnIDogWzM1LCAzOV0sXG4gICdyZWQnIDogWzMxLCAzOV0sXG4gICd5ZWxsb3cnIDogWzMzLCAzOV1cbn07XG5cbi8vIERvbid0IHVzZSAnYmx1ZScgbm90IHZpc2libGUgb24gY21kLmV4ZVxuaW5zcGVjdC5zdHlsZXMgPSB7XG4gICdzcGVjaWFsJzogJ2N5YW4nLFxuICAnbnVtYmVyJzogJ3llbGxvdycsXG4gICdib29sZWFuJzogJ3llbGxvdycsXG4gICd1bmRlZmluZWQnOiAnZ3JleScsXG4gICdudWxsJzogJ2JvbGQnLFxuICAnc3RyaW5nJzogJ2dyZWVuJyxcbiAgJ2RhdGUnOiAnbWFnZW50YScsXG4gIC8vIFwibmFtZVwiOiBpbnRlbnRpb25hbGx5IG5vdCBzdHlsaW5nXG4gICdyZWdleHAnOiAncmVkJ1xufTtcblxuXG5mdW5jdGlvbiBzdHlsaXplV2l0aENvbG9yKHN0ciwgc3R5bGVUeXBlKSB7XG4gIHZhciBzdHlsZSA9IGluc3BlY3Quc3R5bGVzW3N0eWxlVHlwZV07XG5cbiAgaWYgKHN0eWxlKSB7XG4gICAgcmV0dXJuICdcXHUwMDFiWycgKyBpbnNwZWN0LmNvbG9yc1tzdHlsZV1bMF0gKyAnbScgKyBzdHIgK1xuICAgICAgICAgICAnXFx1MDAxYlsnICsgaW5zcGVjdC5jb2xvcnNbc3R5bGVdWzFdICsgJ20nO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBzdHI7XG4gIH1cbn1cblxuXG5mdW5jdGlvbiBzdHlsaXplTm9Db2xvcihzdHIsIHN0eWxlVHlwZSkge1xuICByZXR1cm4gc3RyO1xufVxuXG5cbmZ1bmN0aW9uIGFycmF5VG9IYXNoKGFycmF5KSB7XG4gIHZhciBoYXNoID0ge307XG5cbiAgYXJyYXkuZm9yRWFjaChmdW5jdGlvbih2YWwsIGlkeCkge1xuICAgIGhhc2hbdmFsXSA9IHRydWU7XG4gIH0pO1xuXG4gIHJldHVybiBoYXNoO1xufVxuXG5cbmZ1bmN0aW9uIGZvcm1hdFZhbHVlKGN0eCwgdmFsdWUsIHJlY3Vyc2VUaW1lcykge1xuICAvLyBQcm92aWRlIGEgaG9vayBmb3IgdXNlci1zcGVjaWZpZWQgaW5zcGVjdCBmdW5jdGlvbnMuXG4gIC8vIENoZWNrIHRoYXQgdmFsdWUgaXMgYW4gb2JqZWN0IHdpdGggYW4gaW5zcGVjdCBmdW5jdGlvbiBvbiBpdFxuICBpZiAoY3R4LmN1c3RvbUluc3BlY3QgJiZcbiAgICAgIHZhbHVlICYmXG4gICAgICBpc0Z1bmN0aW9uKHZhbHVlLmluc3BlY3QpICYmXG4gICAgICAvLyBGaWx0ZXIgb3V0IHRoZSB1dGlsIG1vZHVsZSwgaXQncyBpbnNwZWN0IGZ1bmN0aW9uIGlzIHNwZWNpYWxcbiAgICAgIHZhbHVlLmluc3BlY3QgIT09IGV4cG9ydHMuaW5zcGVjdCAmJlxuICAgICAgLy8gQWxzbyBmaWx0ZXIgb3V0IGFueSBwcm90b3R5cGUgb2JqZWN0cyB1c2luZyB0aGUgY2lyY3VsYXIgY2hlY2suXG4gICAgICAhKHZhbHVlLmNvbnN0cnVjdG9yICYmIHZhbHVlLmNvbnN0cnVjdG9yLnByb3RvdHlwZSA9PT0gdmFsdWUpKSB7XG4gICAgdmFyIHJldCA9IHZhbHVlLmluc3BlY3QocmVjdXJzZVRpbWVzLCBjdHgpO1xuICAgIGlmICghaXNTdHJpbmcocmV0KSkge1xuICAgICAgcmV0ID0gZm9ybWF0VmFsdWUoY3R4LCByZXQsIHJlY3Vyc2VUaW1lcyk7XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG4gIH1cblxuICAvLyBQcmltaXRpdmUgdHlwZXMgY2Fubm90IGhhdmUgcHJvcGVydGllc1xuICB2YXIgcHJpbWl0aXZlID0gZm9ybWF0UHJpbWl0aXZlKGN0eCwgdmFsdWUpO1xuICBpZiAocHJpbWl0aXZlKSB7XG4gICAgcmV0dXJuIHByaW1pdGl2ZTtcbiAgfVxuXG4gIC8vIExvb2sgdXAgdGhlIGtleXMgb2YgdGhlIG9iamVjdC5cbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyh2YWx1ZSk7XG4gIHZhciB2aXNpYmxlS2V5cyA9IGFycmF5VG9IYXNoKGtleXMpO1xuXG4gIGlmIChjdHguc2hvd0hpZGRlbikge1xuICAgIGtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh2YWx1ZSk7XG4gIH1cblxuICAvLyBJRSBkb2Vzbid0IG1ha2UgZXJyb3IgZmllbGRzIG5vbi1lbnVtZXJhYmxlXG4gIC8vIGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9pZS9kd3c1MnNidCh2PXZzLjk0KS5hc3B4XG4gIGlmIChpc0Vycm9yKHZhbHVlKVxuICAgICAgJiYgKGtleXMuaW5kZXhPZignbWVzc2FnZScpID49IDAgfHwga2V5cy5pbmRleE9mKCdkZXNjcmlwdGlvbicpID49IDApKSB7XG4gICAgcmV0dXJuIGZvcm1hdEVycm9yKHZhbHVlKTtcbiAgfVxuXG4gIC8vIFNvbWUgdHlwZSBvZiBvYmplY3Qgd2l0aG91dCBwcm9wZXJ0aWVzIGNhbiBiZSBzaG9ydGN1dHRlZC5cbiAgaWYgKGtleXMubGVuZ3RoID09PSAwKSB7XG4gICAgaWYgKGlzRnVuY3Rpb24odmFsdWUpKSB7XG4gICAgICB2YXIgbmFtZSA9IHZhbHVlLm5hbWUgPyAnOiAnICsgdmFsdWUubmFtZSA6ICcnO1xuICAgICAgcmV0dXJuIGN0eC5zdHlsaXplKCdbRnVuY3Rpb24nICsgbmFtZSArICddJywgJ3NwZWNpYWwnKTtcbiAgICB9XG4gICAgaWYgKGlzUmVnRXhwKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIGN0eC5zdHlsaXplKFJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSksICdyZWdleHAnKTtcbiAgICB9XG4gICAgaWYgKGlzRGF0ZSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBjdHguc3R5bGl6ZShEYXRlLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKSwgJ2RhdGUnKTtcbiAgICB9XG4gICAgaWYgKGlzRXJyb3IodmFsdWUpKSB7XG4gICAgICByZXR1cm4gZm9ybWF0RXJyb3IodmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBiYXNlID0gJycsIGFycmF5ID0gZmFsc2UsIGJyYWNlcyA9IFsneycsICd9J107XG5cbiAgLy8gTWFrZSBBcnJheSBzYXkgdGhhdCB0aGV5IGFyZSBBcnJheVxuICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICBhcnJheSA9IHRydWU7XG4gICAgYnJhY2VzID0gWydbJywgJ10nXTtcbiAgfVxuXG4gIC8vIE1ha2UgZnVuY3Rpb25zIHNheSB0aGF0IHRoZXkgYXJlIGZ1bmN0aW9uc1xuICBpZiAoaXNGdW5jdGlvbih2YWx1ZSkpIHtcbiAgICB2YXIgbiA9IHZhbHVlLm5hbWUgPyAnOiAnICsgdmFsdWUubmFtZSA6ICcnO1xuICAgIGJhc2UgPSAnIFtGdW5jdGlvbicgKyBuICsgJ10nO1xuICB9XG5cbiAgLy8gTWFrZSBSZWdFeHBzIHNheSB0aGF0IHRoZXkgYXJlIFJlZ0V4cHNcbiAgaWYgKGlzUmVnRXhwKHZhbHVlKSkge1xuICAgIGJhc2UgPSAnICcgKyBSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpO1xuICB9XG5cbiAgLy8gTWFrZSBkYXRlcyB3aXRoIHByb3BlcnRpZXMgZmlyc3Qgc2F5IHRoZSBkYXRlXG4gIGlmIChpc0RhdGUodmFsdWUpKSB7XG4gICAgYmFzZSA9ICcgJyArIERhdGUucHJvdG90eXBlLnRvVVRDU3RyaW5nLmNhbGwodmFsdWUpO1xuICB9XG5cbiAgLy8gTWFrZSBlcnJvciB3aXRoIG1lc3NhZ2UgZmlyc3Qgc2F5IHRoZSBlcnJvclxuICBpZiAoaXNFcnJvcih2YWx1ZSkpIHtcbiAgICBiYXNlID0gJyAnICsgZm9ybWF0RXJyb3IodmFsdWUpO1xuICB9XG5cbiAgaWYgKGtleXMubGVuZ3RoID09PSAwICYmICghYXJyYXkgfHwgdmFsdWUubGVuZ3RoID09IDApKSB7XG4gICAgcmV0dXJuIGJyYWNlc1swXSArIGJhc2UgKyBicmFjZXNbMV07XG4gIH1cblxuICBpZiAocmVjdXJzZVRpbWVzIDwgMCkge1xuICAgIGlmIChpc1JlZ0V4cCh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBjdHguc3R5bGl6ZShSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpLCAncmVnZXhwJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBjdHguc3R5bGl6ZSgnW09iamVjdF0nLCAnc3BlY2lhbCcpO1xuICAgIH1cbiAgfVxuXG4gIGN0eC5zZWVuLnB1c2godmFsdWUpO1xuXG4gIHZhciBvdXRwdXQ7XG4gIGlmIChhcnJheSkge1xuICAgIG91dHB1dCA9IGZvcm1hdEFycmF5KGN0eCwgdmFsdWUsIHJlY3Vyc2VUaW1lcywgdmlzaWJsZUtleXMsIGtleXMpO1xuICB9IGVsc2Uge1xuICAgIG91dHB1dCA9IGtleXMubWFwKGZ1bmN0aW9uKGtleSkge1xuICAgICAgcmV0dXJuIGZvcm1hdFByb3BlcnR5KGN0eCwgdmFsdWUsIHJlY3Vyc2VUaW1lcywgdmlzaWJsZUtleXMsIGtleSwgYXJyYXkpO1xuICAgIH0pO1xuICB9XG5cbiAgY3R4LnNlZW4ucG9wKCk7XG5cbiAgcmV0dXJuIHJlZHVjZVRvU2luZ2xlU3RyaW5nKG91dHB1dCwgYmFzZSwgYnJhY2VzKTtcbn1cblxuXG5mdW5jdGlvbiBmb3JtYXRQcmltaXRpdmUoY3R4LCB2YWx1ZSkge1xuICBpZiAoaXNVbmRlZmluZWQodmFsdWUpKVxuICAgIHJldHVybiBjdHguc3R5bGl6ZSgndW5kZWZpbmVkJywgJ3VuZGVmaW5lZCcpO1xuICBpZiAoaXNTdHJpbmcodmFsdWUpKSB7XG4gICAgdmFyIHNpbXBsZSA9ICdcXCcnICsgSlNPTi5zdHJpbmdpZnkodmFsdWUpLnJlcGxhY2UoL15cInxcIiQvZywgJycpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvJy9nLCBcIlxcXFwnXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFxcXFwiL2csICdcIicpICsgJ1xcJyc7XG4gICAgcmV0dXJuIGN0eC5zdHlsaXplKHNpbXBsZSwgJ3N0cmluZycpO1xuICB9XG4gIGlmIChpc051bWJlcih2YWx1ZSkpXG4gICAgcmV0dXJuIGN0eC5zdHlsaXplKCcnICsgdmFsdWUsICdudW1iZXInKTtcbiAgaWYgKGlzQm9vbGVhbih2YWx1ZSkpXG4gICAgcmV0dXJuIGN0eC5zdHlsaXplKCcnICsgdmFsdWUsICdib29sZWFuJyk7XG4gIC8vIEZvciBzb21lIHJlYXNvbiB0eXBlb2YgbnVsbCBpcyBcIm9iamVjdFwiLCBzbyBzcGVjaWFsIGNhc2UgaGVyZS5cbiAgaWYgKGlzTnVsbCh2YWx1ZSkpXG4gICAgcmV0dXJuIGN0eC5zdHlsaXplKCdudWxsJywgJ251bGwnKTtcbn1cblxuXG5mdW5jdGlvbiBmb3JtYXRFcnJvcih2YWx1ZSkge1xuICByZXR1cm4gJ1snICsgRXJyb3IucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpICsgJ10nO1xufVxuXG5cbmZ1bmN0aW9uIGZvcm1hdEFycmF5KGN0eCwgdmFsdWUsIHJlY3Vyc2VUaW1lcywgdmlzaWJsZUtleXMsIGtleXMpIHtcbiAgdmFyIG91dHB1dCA9IFtdO1xuICBmb3IgKHZhciBpID0gMCwgbCA9IHZhbHVlLmxlbmd0aDsgaSA8IGw7ICsraSkge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eSh2YWx1ZSwgU3RyaW5nKGkpKSkge1xuICAgICAgb3V0cHV0LnB1c2goZm9ybWF0UHJvcGVydHkoY3R4LCB2YWx1ZSwgcmVjdXJzZVRpbWVzLCB2aXNpYmxlS2V5cyxcbiAgICAgICAgICBTdHJpbmcoaSksIHRydWUpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0cHV0LnB1c2goJycpO1xuICAgIH1cbiAgfVxuICBrZXlzLmZvckVhY2goZnVuY3Rpb24oa2V5KSB7XG4gICAgaWYgKCFrZXkubWF0Y2goL15cXGQrJC8pKSB7XG4gICAgICBvdXRwdXQucHVzaChmb3JtYXRQcm9wZXJ0eShjdHgsIHZhbHVlLCByZWN1cnNlVGltZXMsIHZpc2libGVLZXlzLFxuICAgICAgICAgIGtleSwgdHJ1ZSkpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBvdXRwdXQ7XG59XG5cblxuZnVuY3Rpb24gZm9ybWF0UHJvcGVydHkoY3R4LCB2YWx1ZSwgcmVjdXJzZVRpbWVzLCB2aXNpYmxlS2V5cywga2V5LCBhcnJheSkge1xuICB2YXIgbmFtZSwgc3RyLCBkZXNjO1xuICBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih2YWx1ZSwga2V5KSB8fCB7IHZhbHVlOiB2YWx1ZVtrZXldIH07XG4gIGlmIChkZXNjLmdldCkge1xuICAgIGlmIChkZXNjLnNldCkge1xuICAgICAgc3RyID0gY3R4LnN0eWxpemUoJ1tHZXR0ZXIvU2V0dGVyXScsICdzcGVjaWFsJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0ciA9IGN0eC5zdHlsaXplKCdbR2V0dGVyXScsICdzcGVjaWFsJyk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmIChkZXNjLnNldCkge1xuICAgICAgc3RyID0gY3R4LnN0eWxpemUoJ1tTZXR0ZXJdJywgJ3NwZWNpYWwnKTtcbiAgICB9XG4gIH1cbiAgaWYgKCFoYXNPd25Qcm9wZXJ0eSh2aXNpYmxlS2V5cywga2V5KSkge1xuICAgIG5hbWUgPSAnWycgKyBrZXkgKyAnXSc7XG4gIH1cbiAgaWYgKCFzdHIpIHtcbiAgICBpZiAoY3R4LnNlZW4uaW5kZXhPZihkZXNjLnZhbHVlKSA8IDApIHtcbiAgICAgIGlmIChpc051bGwocmVjdXJzZVRpbWVzKSkge1xuICAgICAgICBzdHIgPSBmb3JtYXRWYWx1ZShjdHgsIGRlc2MudmFsdWUsIG51bGwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RyID0gZm9ybWF0VmFsdWUoY3R4LCBkZXNjLnZhbHVlLCByZWN1cnNlVGltZXMgLSAxKTtcbiAgICAgIH1cbiAgICAgIGlmIChzdHIuaW5kZXhPZignXFxuJykgPiAtMSkge1xuICAgICAgICBpZiAoYXJyYXkpIHtcbiAgICAgICAgICBzdHIgPSBzdHIuc3BsaXQoJ1xcbicpLm1hcChmdW5jdGlvbihsaW5lKSB7XG4gICAgICAgICAgICByZXR1cm4gJyAgJyArIGxpbmU7XG4gICAgICAgICAgfSkuam9pbignXFxuJykuc3Vic3RyKDIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0ciA9ICdcXG4nICsgc3RyLnNwbGl0KCdcXG4nKS5tYXAoZnVuY3Rpb24obGluZSkge1xuICAgICAgICAgICAgcmV0dXJuICcgICAnICsgbGluZTtcbiAgICAgICAgICB9KS5qb2luKCdcXG4nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzdHIgPSBjdHguc3R5bGl6ZSgnW0NpcmN1bGFyXScsICdzcGVjaWFsJyk7XG4gICAgfVxuICB9XG4gIGlmIChpc1VuZGVmaW5lZChuYW1lKSkge1xuICAgIGlmIChhcnJheSAmJiBrZXkubWF0Y2goL15cXGQrJC8pKSB7XG4gICAgICByZXR1cm4gc3RyO1xuICAgIH1cbiAgICBuYW1lID0gSlNPTi5zdHJpbmdpZnkoJycgKyBrZXkpO1xuICAgIGlmIChuYW1lLm1hdGNoKC9eXCIoW2EtekEtWl9dW2EtekEtWl8wLTldKilcIiQvKSkge1xuICAgICAgbmFtZSA9IG5hbWUuc3Vic3RyKDEsIG5hbWUubGVuZ3RoIC0gMik7XG4gICAgICBuYW1lID0gY3R4LnN0eWxpemUobmFtZSwgJ25hbWUnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmFtZSA9IG5hbWUucmVwbGFjZSgvJy9nLCBcIlxcXFwnXCIpXG4gICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXFxcXCIvZywgJ1wiJylcbiAgICAgICAgICAgICAgICAgLnJlcGxhY2UoLyheXCJ8XCIkKS9nLCBcIidcIik7XG4gICAgICBuYW1lID0gY3R4LnN0eWxpemUobmFtZSwgJ3N0cmluZycpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuYW1lICsgJzogJyArIHN0cjtcbn1cblxuXG5mdW5jdGlvbiByZWR1Y2VUb1NpbmdsZVN0cmluZyhvdXRwdXQsIGJhc2UsIGJyYWNlcykge1xuICB2YXIgbnVtTGluZXNFc3QgPSAwO1xuICB2YXIgbGVuZ3RoID0gb3V0cHV0LnJlZHVjZShmdW5jdGlvbihwcmV2LCBjdXIpIHtcbiAgICBudW1MaW5lc0VzdCsrO1xuICAgIGlmIChjdXIuaW5kZXhPZignXFxuJykgPj0gMCkgbnVtTGluZXNFc3QrKztcbiAgICByZXR1cm4gcHJldiArIGN1ci5yZXBsYWNlKC9cXHUwMDFiXFxbXFxkXFxkP20vZywgJycpLmxlbmd0aCArIDE7XG4gIH0sIDApO1xuXG4gIGlmIChsZW5ndGggPiA2MCkge1xuICAgIHJldHVybiBicmFjZXNbMF0gK1xuICAgICAgICAgICAoYmFzZSA9PT0gJycgPyAnJyA6IGJhc2UgKyAnXFxuICcpICtcbiAgICAgICAgICAgJyAnICtcbiAgICAgICAgICAgb3V0cHV0LmpvaW4oJyxcXG4gICcpICtcbiAgICAgICAgICAgJyAnICtcbiAgICAgICAgICAgYnJhY2VzWzFdO1xuICB9XG5cbiAgcmV0dXJuIGJyYWNlc1swXSArIGJhc2UgKyAnICcgKyBvdXRwdXQuam9pbignLCAnKSArICcgJyArIGJyYWNlc1sxXTtcbn1cblxuXG4vLyBOT1RFOiBUaGVzZSB0eXBlIGNoZWNraW5nIGZ1bmN0aW9ucyBpbnRlbnRpb25hbGx5IGRvbid0IHVzZSBgaW5zdGFuY2VvZmBcbi8vIGJlY2F1c2UgaXQgaXMgZnJhZ2lsZSBhbmQgY2FuIGJlIGVhc2lseSBmYWtlZCB3aXRoIGBPYmplY3QuY3JlYXRlKClgLlxuZXhwb3J0cy50eXBlcyA9IHJlcXVpcmUoJy4vc3VwcG9ydC90eXBlcycpO1xuXG5mdW5jdGlvbiBpc0FycmF5KGFyKSB7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KGFyKTtcbn1cbmV4cG9ydHMuaXNBcnJheSA9IGlzQXJyYXk7XG5cbmZ1bmN0aW9uIGlzQm9vbGVhbihhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdib29sZWFuJztcbn1cbmV4cG9ydHMuaXNCb29sZWFuID0gaXNCb29sZWFuO1xuXG5mdW5jdGlvbiBpc051bGwoYXJnKSB7XG4gIHJldHVybiBhcmcgPT09IG51bGw7XG59XG5leHBvcnRzLmlzTnVsbCA9IGlzTnVsbDtcblxuZnVuY3Rpb24gaXNOdWxsT3JVbmRlZmluZWQoYXJnKSB7XG4gIHJldHVybiBhcmcgPT0gbnVsbDtcbn1cbmV4cG9ydHMuaXNOdWxsT3JVbmRlZmluZWQgPSBpc051bGxPclVuZGVmaW5lZDtcblxuZnVuY3Rpb24gaXNOdW1iZXIoYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnbnVtYmVyJztcbn1cbmV4cG9ydHMuaXNOdW1iZXIgPSBpc051bWJlcjtcblxuZnVuY3Rpb24gaXNTdHJpbmcoYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnc3RyaW5nJztcbn1cbmV4cG9ydHMuaXNTdHJpbmcgPSBpc1N0cmluZztcblxuZnVuY3Rpb24gaXNTeW1ib2woYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnc3ltYm9sJztcbn1cbmV4cG9ydHMuaXNTeW1ib2wgPSBpc1N5bWJvbDtcblxuZnVuY3Rpb24gaXNVbmRlZmluZWQoYXJnKSB7XG4gIHJldHVybiBhcmcgPT09IHZvaWQgMDtcbn1cbmV4cG9ydHMuaXNVbmRlZmluZWQgPSBpc1VuZGVmaW5lZDtcblxuZnVuY3Rpb24gaXNSZWdFeHAocmUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0KHJlKSAmJiBvYmplY3RUb1N0cmluZyhyZSkgPT09ICdbb2JqZWN0IFJlZ0V4cF0nO1xufVxuZXhwb3J0cy5pc1JlZ0V4cCA9IGlzUmVnRXhwO1xuZXhwb3J0cy50eXBlcy5pc1JlZ0V4cCA9IGlzUmVnRXhwO1xuXG5mdW5jdGlvbiBpc09iamVjdChhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdvYmplY3QnICYmIGFyZyAhPT0gbnVsbDtcbn1cbmV4cG9ydHMuaXNPYmplY3QgPSBpc09iamVjdDtcblxuZnVuY3Rpb24gaXNEYXRlKGQpIHtcbiAgcmV0dXJuIGlzT2JqZWN0KGQpICYmIG9iamVjdFRvU3RyaW5nKGQpID09PSAnW29iamVjdCBEYXRlXSc7XG59XG5leHBvcnRzLmlzRGF0ZSA9IGlzRGF0ZTtcbmV4cG9ydHMudHlwZXMuaXNEYXRlID0gaXNEYXRlO1xuXG5mdW5jdGlvbiBpc0Vycm9yKGUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0KGUpICYmXG4gICAgICAob2JqZWN0VG9TdHJpbmcoZSkgPT09ICdbb2JqZWN0IEVycm9yXScgfHwgZSBpbnN0YW5jZW9mIEVycm9yKTtcbn1cbmV4cG9ydHMuaXNFcnJvciA9IGlzRXJyb3I7XG5leHBvcnRzLnR5cGVzLmlzTmF0aXZlRXJyb3IgPSBpc0Vycm9yO1xuXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ2Z1bmN0aW9uJztcbn1cbmV4cG9ydHMuaXNGdW5jdGlvbiA9IGlzRnVuY3Rpb247XG5cbmZ1bmN0aW9uIGlzUHJpbWl0aXZlKGFyZykge1xuICByZXR1cm4gYXJnID09PSBudWxsIHx8XG4gICAgICAgICB0eXBlb2YgYXJnID09PSAnYm9vbGVhbicgfHxcbiAgICAgICAgIHR5cGVvZiBhcmcgPT09ICdudW1iZXInIHx8XG4gICAgICAgICB0eXBlb2YgYXJnID09PSAnc3RyaW5nJyB8fFxuICAgICAgICAgdHlwZW9mIGFyZyA9PT0gJ3N5bWJvbCcgfHwgIC8vIEVTNiBzeW1ib2xcbiAgICAgICAgIHR5cGVvZiBhcmcgPT09ICd1bmRlZmluZWQnO1xufVxuZXhwb3J0cy5pc1ByaW1pdGl2ZSA9IGlzUHJpbWl0aXZlO1xuXG5leHBvcnRzLmlzQnVmZmVyID0gcmVxdWlyZSgnLi9zdXBwb3J0L2lzQnVmZmVyJyk7XG5cbmZ1bmN0aW9uIG9iamVjdFRvU3RyaW5nKG8pIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKTtcbn1cblxuXG5mdW5jdGlvbiBwYWQobikge1xuICByZXR1cm4gbiA8IDEwID8gJzAnICsgbi50b1N0cmluZygxMCkgOiBuLnRvU3RyaW5nKDEwKTtcbn1cblxuXG52YXIgbW9udGhzID0gWydKYW4nLCAnRmViJywgJ01hcicsICdBcHInLCAnTWF5JywgJ0p1bicsICdKdWwnLCAnQXVnJywgJ1NlcCcsXG4gICAgICAgICAgICAgICdPY3QnLCAnTm92JywgJ0RlYyddO1xuXG4vLyAyNiBGZWIgMTY6MTk6MzRcbmZ1bmN0aW9uIHRpbWVzdGFtcCgpIHtcbiAgdmFyIGQgPSBuZXcgRGF0ZSgpO1xuICB2YXIgdGltZSA9IFtwYWQoZC5nZXRIb3VycygpKSxcbiAgICAgICAgICAgICAgcGFkKGQuZ2V0TWludXRlcygpKSxcbiAgICAgICAgICAgICAgcGFkKGQuZ2V0U2Vjb25kcygpKV0uam9pbignOicpO1xuICByZXR1cm4gW2QuZ2V0RGF0ZSgpLCBtb250aHNbZC5nZXRNb250aCgpXSwgdGltZV0uam9pbignICcpO1xufVxuXG5cbi8vIGxvZyBpcyBqdXN0IGEgdGhpbiB3cmFwcGVyIHRvIGNvbnNvbGUubG9nIHRoYXQgcHJlcGVuZHMgYSB0aW1lc3RhbXBcbmV4cG9ydHMubG9nID0gZnVuY3Rpb24oKSB7XG4gIGNvbnNvbGUubG9nKCclcyAtICVzJywgdGltZXN0YW1wKCksIGV4cG9ydHMuZm9ybWF0LmFwcGx5KGV4cG9ydHMsIGFyZ3VtZW50cykpO1xufTtcblxuXG4vKipcbiAqIEluaGVyaXQgdGhlIHByb3RvdHlwZSBtZXRob2RzIGZyb20gb25lIGNvbnN0cnVjdG9yIGludG8gYW5vdGhlci5cbiAqXG4gKiBUaGUgRnVuY3Rpb24ucHJvdG90eXBlLmluaGVyaXRzIGZyb20gbGFuZy5qcyByZXdyaXR0ZW4gYXMgYSBzdGFuZGFsb25lXG4gKiBmdW5jdGlvbiAobm90IG9uIEZ1bmN0aW9uLnByb3RvdHlwZSkuIE5PVEU6IElmIHRoaXMgZmlsZSBpcyB0byBiZSBsb2FkZWRcbiAqIGR1cmluZyBib290c3RyYXBwaW5nIHRoaXMgZnVuY3Rpb24gbmVlZHMgdG8gYmUgcmV3cml0dGVuIHVzaW5nIHNvbWUgbmF0aXZlXG4gKiBmdW5jdGlvbnMgYXMgcHJvdG90eXBlIHNldHVwIHVzaW5nIG5vcm1hbCBKYXZhU2NyaXB0IGRvZXMgbm90IHdvcmsgYXNcbiAqIGV4cGVjdGVkIGR1cmluZyBib290c3RyYXBwaW5nIChzZWUgbWlycm9yLmpzIGluIHIxMTQ5MDMpLlxuICpcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGN0b3IgQ29uc3RydWN0b3IgZnVuY3Rpb24gd2hpY2ggbmVlZHMgdG8gaW5oZXJpdCB0aGVcbiAqICAgICBwcm90b3R5cGUuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBzdXBlckN0b3IgQ29uc3RydWN0b3IgZnVuY3Rpb24gdG8gaW5oZXJpdCBwcm90b3R5cGUgZnJvbS5cbiAqL1xuZXhwb3J0cy5pbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJyk7XG5cbmV4cG9ydHMuX2V4dGVuZCA9IGZ1bmN0aW9uKG9yaWdpbiwgYWRkKSB7XG4gIC8vIERvbid0IGRvIGFueXRoaW5nIGlmIGFkZCBpc24ndCBhbiBvYmplY3RcbiAgaWYgKCFhZGQgfHwgIWlzT2JqZWN0KGFkZCkpIHJldHVybiBvcmlnaW47XG5cbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhhZGQpO1xuICB2YXIgaSA9IGtleXMubGVuZ3RoO1xuICB3aGlsZSAoaS0tKSB7XG4gICAgb3JpZ2luW2tleXNbaV1dID0gYWRkW2tleXNbaV1dO1xuICB9XG4gIHJldHVybiBvcmlnaW47XG59O1xuXG5mdW5jdGlvbiBoYXNPd25Qcm9wZXJ0eShvYmosIHByb3ApIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApO1xufVxuXG52YXIga0N1c3RvbVByb21pc2lmaWVkU3ltYm9sID0gdHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgPyBTeW1ib2woJ3V0aWwucHJvbWlzaWZ5LmN1c3RvbScpIDogdW5kZWZpbmVkO1xuXG5leHBvcnRzLnByb21pc2lmeSA9IGZ1bmN0aW9uIHByb21pc2lmeShvcmlnaW5hbCkge1xuICBpZiAodHlwZW9mIG9yaWdpbmFsICE9PSAnZnVuY3Rpb24nKVxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcIm9yaWdpbmFsXCIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIEZ1bmN0aW9uJyk7XG5cbiAgaWYgKGtDdXN0b21Qcm9taXNpZmllZFN5bWJvbCAmJiBvcmlnaW5hbFtrQ3VzdG9tUHJvbWlzaWZpZWRTeW1ib2xdKSB7XG4gICAgdmFyIGZuID0gb3JpZ2luYWxba0N1c3RvbVByb21pc2lmaWVkU3ltYm9sXTtcbiAgICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJ1dGlsLnByb21pc2lmeS5jdXN0b21cIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgRnVuY3Rpb24nKTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGZuLCBrQ3VzdG9tUHJvbWlzaWZpZWRTeW1ib2wsIHtcbiAgICAgIHZhbHVlOiBmbiwgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiBmYWxzZSwgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgcmV0dXJuIGZuO1xuICB9XG5cbiAgZnVuY3Rpb24gZm4oKSB7XG4gICAgdmFyIHByb21pc2VSZXNvbHZlLCBwcm9taXNlUmVqZWN0O1xuICAgIHZhciBwcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgcHJvbWlzZVJlc29sdmUgPSByZXNvbHZlO1xuICAgICAgcHJvbWlzZVJlamVjdCA9IHJlamVjdDtcbiAgICB9KTtcblxuICAgIHZhciBhcmdzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGFyZ3MucHVzaChhcmd1bWVudHNbaV0pO1xuICAgIH1cbiAgICBhcmdzLnB1c2goZnVuY3Rpb24gKGVyciwgdmFsdWUpIHtcbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgcHJvbWlzZVJlamVjdChlcnIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcHJvbWlzZVJlc29sdmUodmFsdWUpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdHJ5IHtcbiAgICAgIG9yaWdpbmFsLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcHJvbWlzZVJlamVjdChlcnIpO1xuICAgIH1cblxuICAgIHJldHVybiBwcm9taXNlO1xuICB9XG5cbiAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGZuLCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob3JpZ2luYWwpKTtcblxuICBpZiAoa0N1c3RvbVByb21pc2lmaWVkU3ltYm9sKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoZm4sIGtDdXN0b21Qcm9taXNpZmllZFN5bWJvbCwge1xuICAgIHZhbHVlOiBmbiwgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiBmYWxzZSwgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0pO1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoXG4gICAgZm4sXG4gICAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhvcmlnaW5hbClcbiAgKTtcbn1cblxuZXhwb3J0cy5wcm9taXNpZnkuY3VzdG9tID0ga0N1c3RvbVByb21pc2lmaWVkU3ltYm9sXG5cbmZ1bmN0aW9uIGNhbGxiYWNraWZ5T25SZWplY3RlZChyZWFzb24sIGNiKSB7XG4gIC8vIGAhcmVhc29uYCBndWFyZCBpbnNwaXJlZCBieSBibHVlYmlyZCAoUmVmOiBodHRwczovL2dvby5nbC90NUlTNk0pLlxuICAvLyBCZWNhdXNlIGBudWxsYCBpcyBhIHNwZWNpYWwgZXJyb3IgdmFsdWUgaW4gY2FsbGJhY2tzIHdoaWNoIG1lYW5zIFwibm8gZXJyb3JcbiAgLy8gb2NjdXJyZWRcIiwgd2UgZXJyb3Itd3JhcCBzbyB0aGUgY2FsbGJhY2sgY29uc3VtZXIgY2FuIGRpc3Rpbmd1aXNoIGJldHdlZW5cbiAgLy8gXCJ0aGUgcHJvbWlzZSByZWplY3RlZCB3aXRoIG51bGxcIiBvciBcInRoZSBwcm9taXNlIGZ1bGZpbGxlZCB3aXRoIHVuZGVmaW5lZFwiLlxuICBpZiAoIXJlYXNvbikge1xuICAgIHZhciBuZXdSZWFzb24gPSBuZXcgRXJyb3IoJ1Byb21pc2Ugd2FzIHJlamVjdGVkIHdpdGggYSBmYWxzeSB2YWx1ZScpO1xuICAgIG5ld1JlYXNvbi5yZWFzb24gPSByZWFzb247XG4gICAgcmVhc29uID0gbmV3UmVhc29uO1xuICB9XG4gIHJldHVybiBjYihyZWFzb24pO1xufVxuXG5mdW5jdGlvbiBjYWxsYmFja2lmeShvcmlnaW5hbCkge1xuICBpZiAodHlwZW9mIG9yaWdpbmFsICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwib3JpZ2luYWxcIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgRnVuY3Rpb24nKTtcbiAgfVxuXG4gIC8vIFdlIERPIE5PVCByZXR1cm4gdGhlIHByb21pc2UgYXMgaXQgZ2l2ZXMgdGhlIHVzZXIgYSBmYWxzZSBzZW5zZSB0aGF0XG4gIC8vIHRoZSBwcm9taXNlIGlzIGFjdHVhbGx5IHNvbWVob3cgcmVsYXRlZCB0byB0aGUgY2FsbGJhY2sncyBleGVjdXRpb25cbiAgLy8gYW5kIHRoYXQgdGhlIGNhbGxiYWNrIHRocm93aW5nIHdpbGwgcmVqZWN0IHRoZSBwcm9taXNlLlxuICBmdW5jdGlvbiBjYWxsYmFja2lmaWVkKCkge1xuICAgIHZhciBhcmdzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGFyZ3MucHVzaChhcmd1bWVudHNbaV0pO1xuICAgIH1cblxuICAgIHZhciBtYXliZUNiID0gYXJncy5wb3AoKTtcbiAgICBpZiAodHlwZW9mIG1heWJlQ2IgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBsYXN0IGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBGdW5jdGlvbicpO1xuICAgIH1cbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdmFyIGNiID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gbWF5YmVDYi5hcHBseShzZWxmLCBhcmd1bWVudHMpO1xuICAgIH07XG4gICAgLy8gSW4gdHJ1ZSBub2RlIHN0eWxlIHdlIHByb2Nlc3MgdGhlIGNhbGxiYWNrIG9uIGBuZXh0VGlja2Agd2l0aCBhbGwgdGhlXG4gICAgLy8gaW1wbGljYXRpb25zIChzdGFjaywgYHVuY2F1Z2h0RXhjZXB0aW9uYCwgYGFzeW5jX2hvb2tzYClcbiAgICBvcmlnaW5hbC5hcHBseSh0aGlzLCBhcmdzKVxuICAgICAgLnRoZW4oZnVuY3Rpb24ocmV0KSB7IHByb2Nlc3MubmV4dFRpY2soY2IuYmluZChudWxsLCBudWxsLCByZXQpKSB9LFxuICAgICAgICAgICAgZnVuY3Rpb24ocmVqKSB7IHByb2Nlc3MubmV4dFRpY2soY2FsbGJhY2tpZnlPblJlamVjdGVkLmJpbmQobnVsbCwgcmVqLCBjYikpIH0pO1xuICB9XG5cbiAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGNhbGxiYWNraWZpZWQsIE9iamVjdC5nZXRQcm90b3R5cGVPZihvcmlnaW5hbCkpO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhjYWxsYmFja2lmaWVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG9yaWdpbmFsKSk7XG4gIHJldHVybiBjYWxsYmFja2lmaWVkO1xufVxuZXhwb3J0cy5jYWxsYmFja2lmeSA9IGNhbGxiYWNraWZ5O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///539\n")},430:(module,__unused_webpack_exports,__webpack_require__)=>{"use strict";eval("\n\nvar forEach = __webpack_require__(29);\nvar availableTypedArrays = __webpack_require__(83);\nvar callBound = __webpack_require__(924);\n\nvar $toString = callBound('Object.prototype.toString');\nvar hasToStringTag = __webpack_require__(410)();\n\nvar g = typeof globalThis === 'undefined' ? __webpack_require__.g : globalThis;\nvar typedArrays = availableTypedArrays();\n\nvar $slice = callBound('String.prototype.slice');\nvar toStrTags = {};\nvar gOPD = __webpack_require__(882);\nvar getPrototypeOf = Object.getPrototypeOf; // require('getprototypeof');\nif (hasToStringTag && gOPD && getPrototypeOf) {\n\tforEach(typedArrays, function (typedArray) {\n\t\tif (typeof g[typedArray] === 'function') {\n\t\t\tvar arr = new g[typedArray]();\n\t\t\tif (Symbol.toStringTag in arr) {\n\t\t\t\tvar proto = getPrototypeOf(arr);\n\t\t\t\tvar descriptor = gOPD(proto, Symbol.toStringTag);\n\t\t\t\tif (!descriptor) {\n\t\t\t\t\tvar superProto = getPrototypeOf(proto);\n\t\t\t\t\tdescriptor = gOPD(superProto, Symbol.toStringTag);\n\t\t\t\t}\n\t\t\t\ttoStrTags[typedArray] = descriptor.get;\n\t\t\t}\n\t\t}\n\t});\n}\n\nvar tryTypedArrays = function tryAllTypedArrays(value) {\n\tvar foundName = false;\n\tforEach(toStrTags, function (getter, typedArray) {\n\t\tif (!foundName) {\n\t\t\ttry {\n\t\t\t\tvar name = getter.call(value);\n\t\t\t\tif (name === typedArray) {\n\t\t\t\t\tfoundName = name;\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\t\t}\n\t});\n\treturn foundName;\n};\n\nvar isTypedArray = __webpack_require__(692);\n\nmodule.exports = function whichTypedArray(value) {\n\tif (!isTypedArray(value)) { return false; }\n\tif (!hasToStringTag || !(Symbol.toStringTag in value)) { return $slice($toString(value), 8, -1); }\n\treturn tryTypedArrays(value);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDMwLmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vc21hbGwtY3QvLi9ub2RlX21vZHVsZXMvd2hpY2gtdHlwZWQtYXJyYXkvaW5kZXguanM/ZWRjNCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBmb3JFYWNoID0gcmVxdWlyZSgnZm9yLWVhY2gnKTtcbnZhciBhdmFpbGFibGVUeXBlZEFycmF5cyA9IHJlcXVpcmUoJ2F2YWlsYWJsZS10eXBlZC1hcnJheXMnKTtcbnZhciBjYWxsQm91bmQgPSByZXF1aXJlKCdjYWxsLWJpbmQvY2FsbEJvdW5kJyk7XG5cbnZhciAkdG9TdHJpbmcgPSBjYWxsQm91bmQoJ09iamVjdC5wcm90b3R5cGUudG9TdHJpbmcnKTtcbnZhciBoYXNUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJ2hhcy10b3N0cmluZ3RhZy9zaGFtcycpKCk7XG5cbnZhciBnID0gdHlwZW9mIGdsb2JhbFRoaXMgPT09ICd1bmRlZmluZWQnID8gZ2xvYmFsIDogZ2xvYmFsVGhpcztcbnZhciB0eXBlZEFycmF5cyA9IGF2YWlsYWJsZVR5cGVkQXJyYXlzKCk7XG5cbnZhciAkc2xpY2UgPSBjYWxsQm91bmQoJ1N0cmluZy5wcm90b3R5cGUuc2xpY2UnKTtcbnZhciB0b1N0clRhZ3MgPSB7fTtcbnZhciBnT1BEID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvaGVscGVycy9nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3InKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IE9iamVjdC5nZXRQcm90b3R5cGVPZjsgLy8gcmVxdWlyZSgnZ2V0cHJvdG90eXBlb2YnKTtcbmlmIChoYXNUb1N0cmluZ1RhZyAmJiBnT1BEICYmIGdldFByb3RvdHlwZU9mKSB7XG5cdGZvckVhY2godHlwZWRBcnJheXMsIGZ1bmN0aW9uICh0eXBlZEFycmF5KSB7XG5cdFx0aWYgKHR5cGVvZiBnW3R5cGVkQXJyYXldID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHR2YXIgYXJyID0gbmV3IGdbdHlwZWRBcnJheV0oKTtcblx0XHRcdGlmIChTeW1ib2wudG9TdHJpbmdUYWcgaW4gYXJyKSB7XG5cdFx0XHRcdHZhciBwcm90byA9IGdldFByb3RvdHlwZU9mKGFycik7XG5cdFx0XHRcdHZhciBkZXNjcmlwdG9yID0gZ09QRChwcm90bywgU3ltYm9sLnRvU3RyaW5nVGFnKTtcblx0XHRcdFx0aWYgKCFkZXNjcmlwdG9yKSB7XG5cdFx0XHRcdFx0dmFyIHN1cGVyUHJvdG8gPSBnZXRQcm90b3R5cGVPZihwcm90byk7XG5cdFx0XHRcdFx0ZGVzY3JpcHRvciA9IGdPUEQoc3VwZXJQcm90bywgU3ltYm9sLnRvU3RyaW5nVGFnKTtcblx0XHRcdFx0fVxuXHRcdFx0XHR0b1N0clRhZ3NbdHlwZWRBcnJheV0gPSBkZXNjcmlwdG9yLmdldDtcblx0XHRcdH1cblx0XHR9XG5cdH0pO1xufVxuXG52YXIgdHJ5VHlwZWRBcnJheXMgPSBmdW5jdGlvbiB0cnlBbGxUeXBlZEFycmF5cyh2YWx1ZSkge1xuXHR2YXIgZm91bmROYW1lID0gZmFsc2U7XG5cdGZvckVhY2godG9TdHJUYWdzLCBmdW5jdGlvbiAoZ2V0dGVyLCB0eXBlZEFycmF5KSB7XG5cdFx0aWYgKCFmb3VuZE5hbWUpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHZhciBuYW1lID0gZ2V0dGVyLmNhbGwodmFsdWUpO1xuXHRcdFx0XHRpZiAobmFtZSA9PT0gdHlwZWRBcnJheSkge1xuXHRcdFx0XHRcdGZvdW5kTmFtZSA9IG5hbWU7XG5cdFx0XHRcdH1cblx0XHRcdH0gY2F0Y2ggKGUpIHt9XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIGZvdW5kTmFtZTtcbn07XG5cbnZhciBpc1R5cGVkQXJyYXkgPSByZXF1aXJlKCdpcy10eXBlZC1hcnJheScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHdoaWNoVHlwZWRBcnJheSh2YWx1ZSkge1xuXHRpZiAoIWlzVHlwZWRBcnJheSh2YWx1ZSkpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdGlmICghaGFzVG9TdHJpbmdUYWcgfHwgIShTeW1ib2wudG9TdHJpbmdUYWcgaW4gdmFsdWUpKSB7IHJldHVybiAkc2xpY2UoJHRvU3RyaW5nKHZhbHVlKSwgOCwgLTEpOyB9XG5cdHJldHVybiB0cnlUeXBlZEFycmF5cyh2YWx1ZSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///430\n")},83:(module,__unused_webpack_exports,__webpack_require__)=>{"use strict";eval("\n\nvar possibleNames = [\n\t'BigInt64Array',\n\t'BigUint64Array',\n\t'Float32Array',\n\t'Float64Array',\n\t'Int16Array',\n\t'Int32Array',\n\t'Int8Array',\n\t'Uint16Array',\n\t'Uint32Array',\n\t'Uint8Array',\n\t'Uint8ClampedArray'\n];\n\nvar g = typeof globalThis === 'undefined' ? __webpack_require__.g : globalThis;\n\nmodule.exports = function availableTypedArrays() {\n\tvar out = [];\n\tfor (var i = 0; i < possibleNames.length; i++) {\n\t\tif (typeof g[possibleNames[i]] === 'function') {\n\t\t\tout[out.length] = possibleNames[i];\n\t\t}\n\t}\n\treturn out;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODMuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vc21hbGwtY3QvLi9ub2RlX21vZHVsZXMvYXZhaWxhYmxlLXR5cGVkLWFycmF5cy9pbmRleC5qcz9mYjNjIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHBvc3NpYmxlTmFtZXMgPSBbXG5cdCdCaWdJbnQ2NEFycmF5Jyxcblx0J0JpZ1VpbnQ2NEFycmF5Jyxcblx0J0Zsb2F0MzJBcnJheScsXG5cdCdGbG9hdDY0QXJyYXknLFxuXHQnSW50MTZBcnJheScsXG5cdCdJbnQzMkFycmF5Jyxcblx0J0ludDhBcnJheScsXG5cdCdVaW50MTZBcnJheScsXG5cdCdVaW50MzJBcnJheScsXG5cdCdVaW50OEFycmF5Jyxcblx0J1VpbnQ4Q2xhbXBlZEFycmF5J1xuXTtcblxudmFyIGcgPSB0eXBlb2YgZ2xvYmFsVGhpcyA9PT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWwgOiBnbG9iYWxUaGlzO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGF2YWlsYWJsZVR5cGVkQXJyYXlzKCkge1xuXHR2YXIgb3V0ID0gW107XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgcG9zc2libGVOYW1lcy5sZW5ndGg7IGkrKykge1xuXHRcdGlmICh0eXBlb2YgZ1twb3NzaWJsZU5hbWVzW2ldXSA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0b3V0W291dC5sZW5ndGhdID0gcG9zc2libGVOYW1lc1tpXTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIG91dDtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///83\n")},882:(module,__unused_webpack_exports,__webpack_require__)=>{"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $gOPD = GetIntrinsic('%Object.getOwnPropertyDescriptor%', true);\nif ($gOPD) {\n\ttry {\n\t\t$gOPD([], 'length');\n\t} catch (e) {\n\t\t// IE 8 has a broken gOPD\n\t\t$gOPD = null;\n\t}\n}\n\nmodule.exports = $gOPD;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODgyLmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3NtYWxsLWN0Ly4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLmpzPzljOWMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJGdPUEQgPSBHZXRJbnRyaW5zaWMoJyVPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yJScsIHRydWUpO1xuaWYgKCRnT1BEKSB7XG5cdHRyeSB7XG5cdFx0JGdPUEQoW10sICdsZW5ndGgnKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdC8vIElFIDggaGFzIGEgYnJva2VuIGdPUERcblx0XHQkZ09QRCA9IG51bGw7XG5cdH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSAkZ09QRDtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///882\n")}},__webpack_module_cache__={};function __webpack_require__(n){var e=__webpack_module_cache__[n];if(void 0!==e)return e.exports;var t=__webpack_module_cache__[n]={exports:{}};return __webpack_modules__[n](t,t.exports,__webpack_require__),t.exports}__webpack_require__.n=n=>{var e=n&&n.__esModule?()=>n.default:()=>n;return __webpack_require__.d(e,{a:e}),e},__webpack_require__.d=(n,e)=>{for(var t in e)__webpack_require__.o(e,t)&&!__webpack_require__.o(n,t)&&Object.defineProperty(n,t,{enumerable:!0,get:e[t]})},__webpack_require__.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(n){if("object"==typeof window)return window}}(),__webpack_require__.o=(n,e)=>Object.prototype.hasOwnProperty.call(n,e);var __webpack_exports__=__webpack_require__(552)})();