docsys-guidebook._nuxt.78eea47.js Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of driver-cql-shaded Show documentation
Show all versions of driver-cql-shaded Show documentation
A Shaded CQL ActivityType driver for http://nosqlbench.io/
(window["webpackJsonp"] = window["webpackJsonp"] || []).push([[17],{
/***/ 10:
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nvar YAMLException = __webpack_require__(74);\n\nvar TYPE_CONSTRUCTOR_OPTIONS = [\n 'kind',\n 'resolve',\n 'construct',\n 'instanceOf',\n 'predicate',\n 'represent',\n 'defaultStyle',\n 'styleAliases'\n];\n\nvar YAML_NODE_KINDS = [\n 'scalar',\n 'sequence',\n 'mapping'\n];\n\nfunction compileStyleAliases(map) {\n var result = {};\n\n if (map !== null) {\n Object.keys(map).forEach(function (style) {\n map[style].forEach(function (alias) {\n result[String(alias)] = style;\n });\n });\n }\n\n return result;\n}\n\nfunction Type(tag, options) {\n options = options || {};\n\n Object.keys(options).forEach(function (name) {\n if (TYPE_CONSTRUCTOR_OPTIONS.indexOf(name) === -1) {\n throw new YAMLException('Unknown option \"' + name + '\" is met in definition of \"' + tag + '\" YAML type.');\n }\n });\n\n // TODO: Add tag format check.\n this.tag = tag;\n this.kind = options['kind'] || null;\n this.resolve = options['resolve'] || function () { return true; };\n this.construct = options['construct'] || function (data) { return data; };\n this.instanceOf = options['instanceOf'] || null;\n this.predicate = options['predicate'] || null;\n this.represent = options['represent'] || null;\n this.defaultStyle = options['defaultStyle'] || null;\n this.styleAliases = compileStyleAliases(options['styleAliases'] || null);\n\n if (YAML_NODE_KINDS.indexOf(this.kind) === -1) {\n throw new YAMLException('Unknown kind \"' + this.kind + '\" is specified for \"' + tag + '\" YAML type.');\n }\n}\n\nmodule.exports = Type;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC90eXBlLmpzPzg3MmEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIsb0JBQW9CLG1CQUFPLENBQUMsRUFBYTs7QUFFekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBLDhEQUE4RCxhQUFhO0FBQzNFLGtFQUFrRSxhQUFhO0FBQy9FO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiMTAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBZQU1MRXhjZXB0aW9uID0gcmVxdWlyZSgnLi9leGNlcHRpb24nKTtcblxudmFyIFRZUEVfQ09OU1RSVUNUT1JfT1BUSU9OUyA9IFtcbiAgJ2tpbmQnLFxuICAncmVzb2x2ZScsXG4gICdjb25zdHJ1Y3QnLFxuICAnaW5zdGFuY2VPZicsXG4gICdwcmVkaWNhdGUnLFxuICAncmVwcmVzZW50JyxcbiAgJ2RlZmF1bHRTdHlsZScsXG4gICdzdHlsZUFsaWFzZXMnXG5dO1xuXG52YXIgWUFNTF9OT0RFX0tJTkRTID0gW1xuICAnc2NhbGFyJyxcbiAgJ3NlcXVlbmNlJyxcbiAgJ21hcHBpbmcnXG5dO1xuXG5mdW5jdGlvbiBjb21waWxlU3R5bGVBbGlhc2VzKG1hcCkge1xuICB2YXIgcmVzdWx0ID0ge307XG5cbiAgaWYgKG1hcCAhPT0gbnVsbCkge1xuICAgIE9iamVjdC5rZXlzKG1hcCkuZm9yRWFjaChmdW5jdGlvbiAoc3R5bGUpIHtcbiAgICAgIG1hcFtzdHlsZV0uZm9yRWFjaChmdW5jdGlvbiAoYWxpYXMpIHtcbiAgICAgICAgcmVzdWx0W1N0cmluZyhhbGlhcyldID0gc3R5bGU7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIFR5cGUodGFnLCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gIE9iamVjdC5rZXlzKG9wdGlvbnMpLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgICBpZiAoVFlQRV9DT05TVFJVQ1RPUl9PUFRJT05TLmluZGV4T2YobmFtZSkgPT09IC0xKSB7XG4gICAgICB0aHJvdyBuZXcgWUFNTEV4Y2VwdGlvbignVW5rbm93biBvcHRpb24gXCInICsgbmFtZSArICdcIiBpcyBtZXQgaW4gZGVmaW5pdGlvbiBvZiBcIicgKyB0YWcgKyAnXCIgWUFNTCB0eXBlLicpO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gVE9ETzogQWRkIHRhZyBmb3JtYXQgY2hlY2suXG4gIHRoaXMudGFnICAgICAgICAgID0gdGFnO1xuICB0aGlzLmtpbmQgICAgICAgICA9IG9wdGlvbnNbJ2tpbmQnXSAgICAgICAgIHx8IG51bGw7XG4gIHRoaXMucmVzb2x2ZSAgICAgID0gb3B0aW9uc1sncmVzb2x2ZSddICAgICAgfHwgZnVuY3Rpb24gKCkgeyByZXR1cm4gdHJ1ZTsgfTtcbiAgdGhpcy5jb25zdHJ1Y3QgICAgPSBvcHRpb25zWydjb25zdHJ1Y3QnXSAgICB8fCBmdW5jdGlvbiAoZGF0YSkgeyByZXR1cm4gZGF0YTsgfTtcbiAgdGhpcy5pbnN0YW5jZU9mICAgPSBvcHRpb25zWydpbnN0YW5jZU9mJ10gICB8fCBudWxsO1xuICB0aGlzLnByZWRpY2F0ZSAgICA9IG9wdGlvbnNbJ3ByZWRpY2F0ZSddICAgIHx8IG51bGw7XG4gIHRoaXMucmVwcmVzZW50ICAgID0gb3B0aW9uc1sncmVwcmVzZW50J10gICAgfHwgbnVsbDtcbiAgdGhpcy5kZWZhdWx0U3R5bGUgPSBvcHRpb25zWydkZWZhdWx0U3R5bGUnXSB8fCBudWxsO1xuICB0aGlzLnN0eWxlQWxpYXNlcyA9IGNvbXBpbGVTdHlsZUFsaWFzZXMob3B0aW9uc1snc3R5bGVBbGlhc2VzJ10gfHwgbnVsbCk7XG5cbiAgaWYgKFlBTUxfTk9ERV9LSU5EUy5pbmRleE9mKHRoaXMua2luZCkgPT09IC0xKSB7XG4gICAgdGhyb3cgbmV3IFlBTUxFeGNlcHRpb24oJ1Vua25vd24ga2luZCBcIicgKyB0aGlzLmtpbmQgKyAnXCIgaXMgc3BlY2lmaWVkIGZvciBcIicgKyB0YWcgKyAnXCIgWUFNTCB0eXBlLicpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gVHlwZTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///10\n");
/***/ }),
/***/ 116:
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("// Standard YAML's Failsafe schema.\n// http://www.yaml.org/spec/1.2/spec.html#id2802346\n\n\n\n\n\nvar Schema = __webpack_require__(60);\n\n\nmodule.exports = new Schema({\n explicit: [\n __webpack_require__(211),\n __webpack_require__(212),\n __webpack_require__(213)\n ]\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC9zY2hlbWEvZmFpbHNhZmUuanM/ZDk4OCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBOzs7QUFHYTs7O0FBR2IsYUFBYSxtQkFBTyxDQUFDLEVBQVc7OztBQUdoQztBQUNBO0FBQ0EsSUFBSSxtQkFBTyxDQUFDLEdBQWE7QUFDekIsSUFBSSxtQkFBTyxDQUFDLEdBQWE7QUFDekIsSUFBSSxtQkFBTyxDQUFDLEdBQWE7QUFDekI7QUFDQSxDQUFDIiwiZmlsZSI6IjExNi5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIFN0YW5kYXJkIFlBTUwncyBGYWlsc2FmZSBzY2hlbWEuXG4vLyBodHRwOi8vd3d3LnlhbWwub3JnL3NwZWMvMS4yL3NwZWMuaHRtbCNpZDI4MDIzNDZcblxuXG4ndXNlIHN0cmljdCc7XG5cblxudmFyIFNjaGVtYSA9IHJlcXVpcmUoJy4uL3NjaGVtYScpO1xuXG5cbm1vZHVsZS5leHBvcnRzID0gbmV3IFNjaGVtYSh7XG4gIGV4cGxpY2l0OiBbXG4gICAgcmVxdWlyZSgnLi4vdHlwZS9zdHInKSxcbiAgICByZXF1aXJlKCcuLi90eXBlL3NlcScpLFxuICAgIHJlcXVpcmUoJy4uL3R5cGUvbWFwJylcbiAgXVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///116\n");
/***/ }),
/***/ 119:
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("/*!\n * vue-client-only v2.0.0\n * (c) 2019-present egoist <[email protected]>\n * Released under the MIT License.\n */\n\n\nvar index = {\n name: 'ClientOnly',\n functional: true,\n props: {\n placeholder: String,\n placeholderTag: {\n type: String,\n default: 'div'\n }\n },\n render: function render(h, ref) {\n var parent = ref.parent;\n var slots = ref.slots;\n var props = ref.props;\n\n var ref$1 = slots();\n var defaultSlot = ref$1.default; if ( defaultSlot === void 0 ) defaultSlot = [];\n var placeholderSlot = ref$1.placeholder;\n\n if (parent._isMounted) {\n return defaultSlot\n }\n\n parent.$once('hook:mounted', function () {\n parent.$forceUpdate();\n });\n\n if (props.placeholderTag && (props.placeholder || placeholderSlot)) {\n return h(\n props.placeholderTag,\n {\n class: ['client-only-placeholder']\n },\n props.placeholder || placeholderSlot\n )\n }\n\n // Return a placeholder element for each child in the default slot\n // Or if no children return a single placeholder\n return defaultSlot.length > 0 ? defaultSlot.map(function () { return h(false); }) : h(false)\n }\n};\n\nmodule.exports = index;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdnVlLWNsaWVudC1vbmx5L2Rpc3QvdnVlLWNsaWVudC1vbmx5LmNvbW1vbi5qcz84ZTI2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxvQ0FBb0M7QUFDcEM7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxpRUFBaUUsaUJBQWlCLEVBQUU7QUFDcEY7QUFDQTs7QUFFQSIsImZpbGUiOiIxMTkuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIHZ1ZS1jbGllbnQtb25seSB2Mi4wLjBcbiAqIChjKSAyMDE5LXByZXNlbnQgZWdvaXN0IDwweDE0Mjg1N0BnbWFpbC5jb20+XG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4gKi9cbid1c2Ugc3RyaWN0JztcblxudmFyIGluZGV4ID0ge1xuICBuYW1lOiAnQ2xpZW50T25seScsXG4gIGZ1bmN0aW9uYWw6IHRydWUsXG4gIHByb3BzOiB7XG4gICAgcGxhY2Vob2xkZXI6IFN0cmluZyxcbiAgICBwbGFjZWhvbGRlclRhZzoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJ2RpdidcbiAgICB9XG4gIH0sXG4gIHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyKGgsIHJlZikge1xuICAgIHZhciBwYXJlbnQgPSByZWYucGFyZW50O1xuICAgIHZhciBzbG90cyA9IHJlZi5zbG90cztcbiAgICB2YXIgcHJvcHMgPSByZWYucHJvcHM7XG5cbiAgICB2YXIgcmVmJDEgPSBzbG90cygpO1xuICAgIHZhciBkZWZhdWx0U2xvdCA9IHJlZiQxLmRlZmF1bHQ7IGlmICggZGVmYXVsdFNsb3QgPT09IHZvaWQgMCApIGRlZmF1bHRTbG90ID0gW107XG4gICAgdmFyIHBsYWNlaG9sZGVyU2xvdCA9IHJlZiQxLnBsYWNlaG9sZGVyO1xuXG4gICAgaWYgKHBhcmVudC5faXNNb3VudGVkKSB7XG4gICAgICByZXR1cm4gZGVmYXVsdFNsb3RcbiAgICB9XG5cbiAgICBwYXJlbnQuJG9uY2UoJ2hvb2s6bW91bnRlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHBhcmVudC4kZm9yY2VVcGRhdGUoKTtcbiAgICB9KTtcblxuICAgIGlmIChwcm9wcy5wbGFjZWhvbGRlclRhZyAmJiAocHJvcHMucGxhY2Vob2xkZXIgfHwgcGxhY2Vob2xkZXJTbG90KSkge1xuICAgICAgcmV0dXJuIGgoXG4gICAgICAgIHByb3BzLnBsYWNlaG9sZGVyVGFnLFxuICAgICAgICB7XG4gICAgICAgICAgY2xhc3M6IFsnY2xpZW50LW9ubHktcGxhY2Vob2xkZXInXVxuICAgICAgICB9LFxuICAgICAgICBwcm9wcy5wbGFjZWhvbGRlciB8fCBwbGFjZWhvbGRlclNsb3RcbiAgICAgIClcbiAgICB9XG5cbiAgICAvLyBSZXR1cm4gYSBwbGFjZWhvbGRlciBlbGVtZW50IGZvciBlYWNoIGNoaWxkIGluIHRoZSBkZWZhdWx0IHNsb3RcbiAgICAvLyBPciBpZiBubyBjaGlsZHJlbiByZXR1cm4gYSBzaW5nbGUgcGxhY2Vob2xkZXJcbiAgICByZXR1cm4gZGVmYXVsdFNsb3QubGVuZ3RoID4gMCA/IGRlZmF1bHRTbG90Lm1hcChmdW5jdGlvbiAoKSB7IHJldHVybiBoKGZhbHNlKTsgfSkgOiBoKGZhbHNlKVxuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGluZGV4O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///119\n");
/***/ }),
/***/ 12:
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"g\", function() { return createSimpleFunctional; });\n/* unused harmony export directiveConfig */\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return addOnceEventListener; });\n/* unused harmony export passiveSupported */\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return addPassiveEventListener; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"k\", function() { return getNestedValue; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"h\", function() { return deepEqual; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"l\", function() { return getObjectValueByPath; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"m\", function() { return getPropertyFromItem; });\n/* unused harmony export createRange */\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"p\", function() { return getZIndex; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"i\", function() { return escapeHTML; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"j\", function() { return filterObjectOnKeys; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"f\", function() { return convertToUnit; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"q\", function() { return kebabCase; });\n/* unused harmony export isObject */\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"r\", function() { return keyCodes; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"v\", function() { return remapInternalIcon; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"s\", function() { return keys; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"c\", function() { return camelize; });\n/* unused harmony export arrayDiff */\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"w\", function() { return upperFirst; });\n/* unused harmony export groupItems */\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"x\", function() { return wrapInArray; });\n/* unused harmony export sortItems */\n/* unused harmony export defaultFilter */\n/* unused harmony export searchItems */\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"o\", function() { return getSlotType; });\n/* unused harmony export debounce */\n/* unused harmony export throttle */\n/* unused harmony export getPrefixedScopedSlots */\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"n\", function() { return getSlot; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"e\", function() { return clamp; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"u\", function() { return padEnd; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"d\", function() { return chunk; });\n/* unused harmony export humanReadableFileSize */\n/* unused harmony export camelizeObjectKeys */\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"t\", function() { return mergeDeep; });\n/* unused harmony export fillArray */\n/* harmony import */ var core_js_modules_es7_object_get_own_property_descriptors__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(36);\n/* harmony import */ var core_js_modules_es7_object_get_own_property_descriptors__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es7_object_get_own_property_descriptors__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var core_js_modules_es6_symbol__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(23);\n/* harmony import */ var core_js_modules_es6_symbol__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es6_symbol__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var core_js_modules_es6_array_fill__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(237);\n/* harmony import */ var core_js_modules_es6_array_fill__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es6_array_fill__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var core_js_modules_es6_string_repeat__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(91);\n/* harmony import */ var core_js_modules_es6_string_repeat__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es6_string_repeat__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var core_js_modules_es6_function_name__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(24);\n/* harmony import */ var core_js_modules_es6_function_name__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es6_function_name__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var core_js_modules_es6_regexp_to_string__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(13);\n/* harmony import */ var core_js_modules_es6_regexp_to_string__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es6_regexp_to_string__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var core_js_modules_es6_date_to_string__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(14);\n/* harmony import */ var core_js_modules_es6_date_to_string__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es6_date_to_string__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(21);\n/* harmony import */ var core_js_modules_es6_string_starts_with__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(64);\n/* harmony import */ var core_js_modules_es6_string_starts_with__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es6_string_starts_with__WEBPACK_IMPORTED_MODULE_8__);\n/* harmony import */ var core_js_modules_es6_object_freeze__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(148);\n/* harmony import */ var core_js_modules_es6_object_freeze__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es6_object_freeze__WEBPACK_IMPORTED_MODULE_9__);\n/* harmony import */ var _babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(27);\n/* harmony import */ var core_js_modules_es6_number_constructor__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(163);\n/* harmony import */ var core_js_modules_es6_number_constructor__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es6_number_constructor__WEBPACK_IMPORTED_MODULE_11__);\n/* harmony import */ var core_js_modules_es6_string_iterator__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(37);\n/* harmony import */ var core_js_modules_es6_string_iterator__WEBPACK_IMPORTED_MODULE_12___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es6_string_iterator__WEBPACK_IMPORTED_MODULE_12__);\n/* harmony import */ var core_js_modules_es6_array_from__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(38);\n/* harmony import */ var core_js_modules_es6_array_from__WEBPACK_IMPORTED_MODULE_13___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es6_array_from__WEBPACK_IMPORTED_MODULE_13__);\n/* harmony import */ var core_js_modules_es6_regexp_split__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(50);\n/* harmony import */ var core_js_modules_es6_regexp_split__WEBPACK_IMPORTED_MODULE_14___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es6_regexp_split__WEBPACK_IMPORTED_MODULE_14__);\n/* harmony import */ var core_js_modules_web_dom_iterable__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(16);\n/* harmony import */ var core_js_modules_web_dom_iterable__WEBPACK_IMPORTED_MODULE_15___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_dom_iterable__WEBPACK_IMPORTED_MODULE_15__);\n/* harmony import */ var core_js_modules_es6_object_to_string__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(3);\n/* harmony import */ var core_js_modules_es6_object_to_string__WEBPACK_IMPORTED_MODULE_16___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es6_object_to_string__WEBPACK_IMPORTED_MODULE_16__);\n/* harmony import */ var core_js_modules_es6_object_keys__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(31);\n/* harmony import */ var core_js_modules_es6_object_keys__WEBPACK_IMPORTED_MODULE_17___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es6_object_keys__WEBPACK_IMPORTED_MODULE_17__);\n/* harmony import */ var _babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(9);\n/* harmony import */ var core_js_modules_es6_regexp_replace__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(39);\n/* harmony import */ var core_js_modules_es6_regexp_replace__WEBPACK_IMPORTED_MODULE_19___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es6_regexp_replace__WEBPACK_IMPORTED_MODULE_19__);\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(0);\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (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 = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { Object(_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_18__[/* default */ \"a\"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\n\nfunction createSimpleFunctional(c) {\n var el = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'div';\n var name = arguments.length > 2 ? arguments[2] : undefined;\n return vue__WEBPACK_IMPORTED_MODULE_20__[/* default */ \"a\"].extend({\n name: name || c.replace(/__/g, '-'),\n functional: true,\n render: function render(h, _ref) {\n var data = _ref.data,\n children = _ref.children;\n data.staticClass = \"\".concat(c, \" \").concat(data.staticClass || '').trim();\n return h(el, data, children);\n }\n });\n}\nfunction directiveConfig(binding) {\n var defaults = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n return _objectSpread(_objectSpread(_objectSpread({}, defaults), binding.modifiers), {}, {\n value: binding.arg\n }, binding.value || {});\n}\nfunction addOnceEventListener(el, eventName, cb) {\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n\n var once = function once(event) {\n cb(event);\n el.removeEventListener(eventName, once, options);\n };\n\n el.addEventListener(eventName, once, options);\n}\nvar passiveSupported = false;\n\ntry {\n if (typeof window !== 'undefined') {\n var testListenerOpts = Object.defineProperty({}, 'passive', {\n get: function get() {\n passiveSupported = true;\n }\n });\n window.addEventListener('testListener', testListenerOpts, testListenerOpts);\n window.removeEventListener('testListener', testListenerOpts, testListenerOpts);\n }\n} catch (e) {\n console.warn(e);\n}\n\n\nfunction addPassiveEventListener(el, event, cb, options) {\n el.addEventListener(event, cb, passiveSupported ? options : false);\n}\nfunction getNestedValue(obj, path, fallback) {\n var last = path.length - 1;\n if (last < 0) return obj === undefined ? fallback : obj;\n\n for (var i = 0; i < last; i++) {\n if (obj == null) {\n return fallback;\n }\n\n obj = obj[path[i]];\n }\n\n if (obj == null) return fallback;\n return obj[path[last]] === undefined ? fallback : obj[path[last]];\n}\nfunction deepEqual(a, b) {\n if (a === b) return true;\n\n if (a instanceof Date && b instanceof Date) {\n // If the values are Date, they were convert to timestamp with getTime and compare it\n if (a.getTime() !== b.getTime()) return false;\n }\n\n if (a !== Object(a) || b !== Object(b)) {\n // If the values aren't objects, they were already checked for equality\n return false;\n }\n\n var props = Object.keys(a);\n\n if (props.length !== Object.keys(b).length) {\n // Different number of props, don't bother to check\n return false;\n }\n\n return props.every(function (p) {\n return deepEqual(a[p], b[p]);\n });\n}\nfunction getObjectValueByPath(obj, path, fallback) {\n // credit: http://stackoverflow.com/questions/6491463/accessing-nested-javascript-objects-with-string-key#comment55278413_6491621\n if (obj == null || !path || typeof path !== 'string') return fallback;\n if (obj[path] !== undefined) return obj[path];\n path = path.replace(/\\[(\\w+)\\]/g, '.$1'); // convert indexes to properties\n\n path = path.replace(/^\\./, ''); // strip a leading dot\n\n return getNestedValue(obj, path.split('.'), fallback);\n}\nfunction getPropertyFromItem(item, property, fallback) {\n if (property == null) return item === undefined ? fallback : item;\n if (item !== Object(item)) return fallback === undefined ? item : fallback;\n if (typeof property === 'string') return getObjectValueByPath(item, property, fallback);\n if (Array.isArray(property)) return getNestedValue(item, property, fallback);\n if (typeof property !== 'function') return fallback;\n var value = property(item, fallback);\n return typeof value === 'undefined' ? fallback : value;\n}\nfunction createRange(length) {\n return Array.from({\n length: length\n }, function (v, k) {\n return k;\n });\n}\nfunction getZIndex(el) {\n if (!el || el.nodeType !== Node.ELEMENT_NODE) return 0;\n var index = +window.getComputedStyle(el).getPropertyValue('z-index');\n if (!index) return getZIndex(el.parentNode);\n return index;\n}\nvar tagsToReplace = {\n '&': '&',\n '<': '<',\n '>': '>'\n};\nfunction escapeHTML(str) {\n return str.replace(/[&<>]/g, function (tag) {\n return tagsToReplace[tag] || tag;\n });\n}\nfunction filterObjectOnKeys(obj, keys) {\n var filtered = {};\n\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n\n if (typeof obj[key] !== 'undefined') {\n filtered[key] = obj[key];\n }\n }\n\n return filtered;\n}\nfunction convertToUnit(str) {\n var unit = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'px';\n\n if (str == null || str === '') {\n return undefined;\n } else if (isNaN(+str)) {\n return String(str);\n } else {\n return \"\".concat(Number(str)).concat(unit);\n }\n}\nfunction kebabCase(str) {\n return (str || '').replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();\n}\nfunction isObject(obj) {\n return obj !== null && Object(_babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_10__[/* default */ \"a\"])(obj) === 'object';\n} // KeyboardEvent.keyCode aliases\n\nvar keyCodes = Object.freeze({\n enter: 13,\n tab: 9,\n delete: 46,\n esc: 27,\n space: 32,\n up: 38,\n down: 40,\n left: 37,\n right: 39,\n end: 35,\n home: 36,\n del: 46,\n backspace: 8,\n insert: 45,\n pageup: 33,\n pagedown: 34\n}); // This remaps internal names like '$cancel' or '$vuetify.icons.cancel'\n// to the current name or component for that icon.\n\nfunction remapInternalIcon(vm, iconName) {\n if (!iconName.startsWith('$')) {\n return iconName;\n } // Get the target icon name\n\n\n var iconPath = \"$vuetify.icons.values.\".concat(iconName.split('$').pop().split('.').pop()); // Now look up icon indirection name,\n // e.g. '$vuetify.icons.values.cancel'\n\n return getObjectValueByPath(vm, iconPath, iconName);\n}\nfunction keys(o) {\n return Object.keys(o);\n}\n/**\n * Camelize a hyphen-delimited string.\n */\n\nvar camelizeRE = /-(\\w)/g;\nvar camelize = function camelize(str) {\n return str.replace(camelizeRE, function (_, c) {\n return c ? c.toUpperCase() : '';\n });\n};\n/**\n * Returns the set difference of B and A, i.e. the set of elements in B but not in A\n */\n\nfunction arrayDiff(a, b) {\n var diff = [];\n\n for (var i = 0; i < b.length; i++) {\n if (a.indexOf(b[i]) < 0) diff.push(b[i]);\n }\n\n return diff;\n}\n/**\n * Makes the first character of a string uppercase\n */\n\nfunction upperFirst(str) {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\nfunction groupItems(items, groupBy, groupDesc) {\n var key = groupBy[0];\n var groups = [];\n var current = null;\n\n for (var i = 0; i < items.length; i++) {\n var item = items[i];\n var val = getObjectValueByPath(item, key);\n\n if (current !== val) {\n current = val;\n groups.push({\n name: val,\n items: []\n });\n }\n\n groups[groups.length - 1].items.push(item);\n }\n\n return groups;\n}\nfunction wrapInArray(v) {\n return v != null ? Array.isArray(v) ? v : [v] : [];\n}\nfunction sortItems(items, sortBy, sortDesc, locale, customSorters) {\n if (sortBy === null || !sortBy.length) return items;\n var stringCollator = new Intl.Collator(locale, {\n sensitivity: 'accent',\n usage: 'sort'\n });\n return items.sort(function (a, b) {\n for (var i = 0; i < sortBy.length; i++) {\n var sortKey = sortBy[i];\n var sortA = getObjectValueByPath(a, sortKey);\n var sortB = getObjectValueByPath(b, sortKey);\n\n if (sortDesc[i]) {\n var _ref2 = [sortB, sortA];\n sortA = _ref2[0];\n sortB = _ref2[1];\n }\n\n if (customSorters && customSorters[sortKey]) {\n var customResult = customSorters[sortKey](sortA, sortB);\n if (!customResult) continue;\n return customResult;\n } // Check if both cannot be evaluated\n\n\n if (sortA === null && sortB === null) {\n continue;\n }\n\n var _map = [sortA, sortB].map(function (s) {\n return (s || '').toString().toLocaleLowerCase();\n });\n\n var _map2 = Object(_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_7__[/* default */ \"a\"])(_map, 2);\n\n sortA = _map2[0];\n sortB = _map2[1];\n\n if (sortA !== sortB) {\n if (!isNaN(sortA) && !isNaN(sortB)) return Number(sortA) - Number(sortB);\n return stringCollator.compare(sortA, sortB);\n }\n }\n\n return 0;\n });\n}\nfunction defaultFilter(value, search, item) {\n return value != null && search != null && typeof value !== 'boolean' && value.toString().toLocaleLowerCase().indexOf(search.toLocaleLowerCase()) !== -1;\n}\nfunction searchItems(items, search) {\n if (!search) return items;\n search = search.toString().toLowerCase();\n if (search.trim() === '') return items;\n return items.filter(function (item) {\n return Object.keys(item).some(function (key) {\n return defaultFilter(getObjectValueByPath(item, key), search, item);\n });\n });\n}\n/**\n * Returns:\n * - 'normal' for old style slots - ``\n * - 'scoped' for old style scoped slots (``) or bound v-slot (`#default=\"data\"`)\n * - 'v-slot' for unbound v-slot (`#default`) - only if the third param is true, otherwise counts as scoped\n */\n\nfunction getSlotType(vm, name, split) {\n if (vm.$slots[name] && vm.$scopedSlots[name] && vm.$scopedSlots[name].name) {\n return split ? 'v-slot' : 'scoped';\n }\n\n if (vm.$slots[name]) return 'normal';\n if (vm.$scopedSlots[name]) return 'scoped';\n}\nfunction debounce(fn, delay) {\n var timeoutId = 0;\n return function () {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n clearTimeout(timeoutId);\n timeoutId = setTimeout(function () {\n return fn.apply(void 0, args);\n }, delay);\n };\n}\nfunction throttle(fn, limit) {\n var throttling = false;\n return function () {\n if (!throttling) {\n throttling = true;\n setTimeout(function () {\n return throttling = false;\n }, limit);\n return fn.apply(void 0, arguments);\n }\n };\n}\nfunction getPrefixedScopedSlots(prefix, scopedSlots) {\n return Object.keys(scopedSlots).filter(function (k) {\n return k.startsWith(prefix);\n }).reduce(function (obj, k) {\n obj[k.replace(prefix, '')] = scopedSlots[k];\n return obj;\n }, {});\n}\nfunction getSlot(vm) {\n var name = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'default';\n var data = arguments.length > 2 ? arguments[2] : undefined;\n var optional = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n\n if (vm.$scopedSlots[name]) {\n return vm.$scopedSlots[name](data instanceof Function ? data() : data);\n } else if (vm.$slots[name] && (!data || optional)) {\n return vm.$slots[name];\n }\n\n return undefined;\n}\nfunction clamp(value) {\n var min = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var max = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;\n return Math.max(min, Math.min(max, value));\n}\nfunction padEnd(str, length) {\n var char = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '0';\n return str + char.repeat(Math.max(0, length - str.length));\n}\nfunction chunk(str) {\n var size = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n var chunked = [];\n var index = 0;\n\n while (index < str.length) {\n chunked.push(str.substr(index, size));\n index += size;\n }\n\n return chunked;\n}\nfunction humanReadableFileSize(bytes) {\n var binary = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n var base = binary ? 1024 : 1000;\n\n if (bytes < base) {\n return \"\".concat(bytes, \" B\");\n }\n\n var prefix = binary ? ['Ki', 'Mi', 'Gi'] : ['k', 'M', 'G'];\n var unit = -1;\n\n while (Math.abs(bytes) >= base && unit < prefix.length - 1) {\n bytes /= base;\n ++unit;\n }\n\n return \"\".concat(bytes.toFixed(1), \" \").concat(prefix[unit], \"B\");\n}\nfunction camelizeObjectKeys(obj) {\n if (!obj) return {};\n return Object.keys(obj).reduce(function (o, key) {\n o[camelize(key)] = obj[key];\n return o;\n }, {});\n}\nfunction mergeDeep() {\n var source = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var target = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n for (var key in target) {\n var sourceProperty = source[key];\n var targetProperty = target[key]; // Only continue deep merging if\n // both properties are objects\n\n if (isObject(sourceProperty) && isObject(targetProperty)) {\n source[key] = mergeDeep(sourceProperty, targetProperty);\n continue;\n }\n\n source[key] = targetProperty;\n }\n\n return source;\n}\nfunction fillArray(length, obj) {\n return Array(length).fill(obj);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vc3JjL3V0aWwvaGVscGVycy50cz82ZWJmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBS00sbUNBR1M7QUFBQSxNQURiLEVBQ2EsdUVBSFQsS0FHUztBQUFBLE1BSFQsSUFHUztBQUViLFNBQU8sb0RBQUcsQ0FBSCxPQUFXO0FBQ2hCLFFBQUksRUFBRSxJQUFJLElBQUksQ0FBQyxDQUFELGVBREUsR0FDRixDQURFO0FBR2hCLGNBQVUsRUFITTtBQUtoQixVQUxnQixrQkFLVixDQUxVLFFBS2E7QUFBQSxVQUFsQixJQUFrQixRQUFsQixJQUFrQjtBQUFBLFVBQVYsUUFBVSxRQUFWLFFBQVU7QUFDM0IsVUFBSSxDQUFKLGNBQW9CLFVBQUcsQ0FBSCxjQUFRLElBQUksQ0FBSixlQUFULEVBQUMsRUFBcEIsSUFBb0IsRUFBcEI7QUFFQSxhQUFPLENBQUMsV0FBUixRQUFRLENBQVI7QUFDRDtBQVRlLEdBQVgsQ0FBUDtBQVdEO0FBR0ssa0NBQWdFO0FBQUEsTUFBYixRQUFhLHVFQUFoRSxFQUFnRTtBQUNwRSx1REFBTyxRQUFQLEdBRUssT0FBTyxDQUZMLFNBQVA7QUFHRSxTQUFLLEVBQUUsT0FBTyxDQUhUO0FBQVAsS0FJTSxPQUFPLENBQVAsU0FBSixFQUpGO0FBTUQ7QUFFSyxpREFJOEM7QUFBQSxNQUFsRCxPQUFrRCx1RUFKOUMsS0FJOEM7O0FBRWxELE1BQUksSUFBSSxHQUFJLFNBQVIsSUFBUSxNQUFELEVBQWlCO0FBQzFCLE1BQUUsQ0FBRixLQUFFLENBQUY7QUFDQSxNQUFFLENBQUY7QUFGRjs7QUFLQSxJQUFFLENBQUY7QUFDRDtBQUVELElBQUksZ0JBQWdCLEdBQXBCOztBQUNBLElBQUk7QUFDRixNQUFJLGtCQUFKLGFBQW1D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QUFDQTs7QUFDQSxRQUNFLFFBQVEsQ0FBUixjQUFRLENBQVIsSUFDQSxRQUFRLENBRlYsY0FFVSxDQUZWLEVBR0U7QUFDQSxZQUFNLENBQU4sR0FBTSxDQUFOLEdBQWMsU0FBUyxpQkFBdkIsY0FBdUIsQ0FBdkI7QUFFQTtBQUNEOztBQUVELFVBQU0sQ0FBTixHQUFNLENBQU47QUFDRDs7QUFFRDtBQUNEO0FBRUssZ0NBQThDO0FBQ2xELFNBQU8sS0FBSyxDQUFMLE1BQUssQ0FBTCxNQUFQLEdBQU8sQ0FBUDtBQUNEIiwiZmlsZSI6IjEyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFZ1ZSBmcm9tICd2dWUnXG5pbXBvcnQgeyBWTm9kZSwgVk5vZGVEaXJlY3RpdmUgfSBmcm9tICd2dWUvdHlwZXMnXG5pbXBvcnQgeyBWdWV0aWZ5SWNvbiB9IGZyb20gJ3Z1ZXRpZnkvdHlwZXMvc2VydmljZXMvaWNvbnMnXG5pbXBvcnQgeyBEYXRhVGFibGVDb21wYXJlRnVuY3Rpb24sIFNlbGVjdEl0ZW1LZXksIEl0ZW1Hcm91cCB9IGZyb20gJ3Z1ZXRpZnkvdHlwZXMnXG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTaW1wbGVGdW5jdGlvbmFsIChcbiAgYzogc3RyaW5nLFxuICBlbCA9ICdkaXYnLFxuICBuYW1lPzogc3RyaW5nXG4pIHtcbiAgcmV0dXJuIFZ1ZS5leHRlbmQoe1xuICAgIG5hbWU6IG5hbWUgfHwgYy5yZXBsYWNlKC9fXy9nLCAnLScpLFxuXG4gICAgZnVuY3Rpb25hbDogdHJ1ZSxcblxuICAgIHJlbmRlciAoaCwgeyBkYXRhLCBjaGlsZHJlbiB9KTogVk5vZGUge1xuICAgICAgZGF0YS5zdGF0aWNDbGFzcyA9IChgJHtjfSAke2RhdGEuc3RhdGljQ2xhc3MgfHwgJyd9YCkudHJpbSgpXG5cbiAgICAgIHJldHVybiBoKGVsLCBkYXRhLCBjaGlsZHJlbilcbiAgICB9LFxuICB9KVxufVxuXG5leHBvcnQgdHlwZSBCaW5kaW5nQ29uZmlnID0gUGljazxWTm9kZURpcmVjdGl2ZSwgJ2FyZycgfCAnbW9kaWZpZXJzJyB8ICd2YWx1ZSc+XG5leHBvcnQgZnVuY3Rpb24gZGlyZWN0aXZlQ29uZmlnIChiaW5kaW5nOiBCaW5kaW5nQ29uZmlnLCBkZWZhdWx0cyA9IHt9KTogVk5vZGVEaXJlY3RpdmUge1xuICByZXR1cm4ge1xuICAgIC4uLmRlZmF1bHRzLFxuICAgIC4uLmJpbmRpbmcubW9kaWZpZXJzLFxuICAgIHZhbHVlOiBiaW5kaW5nLmFyZyxcbiAgICAuLi4oYmluZGluZy52YWx1ZSB8fCB7fSksXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZE9uY2VFdmVudExpc3RlbmVyIChcbiAgZWw6IEV2ZW50VGFyZ2V0LFxuICBldmVudE5hbWU6IHN0cmluZyxcbiAgY2I6IChldmVudDogRXZlbnQpID0+IHZvaWQsXG4gIG9wdGlvbnM6IGJvb2xlYW4gfCBBZGRFdmVudExpc3RlbmVyT3B0aW9ucyA9IGZhbHNlXG4pOiB2b2lkIHtcbiAgdmFyIG9uY2UgPSAoZXZlbnQ6IEV2ZW50KSA9PiB7XG4gICAgY2IoZXZlbnQpXG4gICAgZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIG9uY2UsIG9wdGlvbnMpXG4gIH1cblxuICBlbC5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgb25jZSwgb3B0aW9ucylcbn1cblxubGV0IHBhc3NpdmVTdXBwb3J0ZWQgPSBmYWxzZVxudHJ5IHtcbiAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgY29uc3QgdGVzdExpc3RlbmVyT3B0cyA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgJ3Bhc3NpdmUnLCB7XG4gICAgICBnZXQ6ICgpID0+IHtcbiAgICAgICAgcGFzc2l2ZVN1cHBvcnRlZCA9IHRydWVcbiAgICAgIH0sXG4gICAgfSlcblxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCd0ZXN0TGlzdGVuZXInLCB0ZXN0TGlzdGVuZXJPcHRzLCB0ZXN0TGlzdGVuZXJPcHRzKVxuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCd0ZXN0TGlzdGVuZXInLCB0ZXN0TGlzdGVuZXJPcHRzLCB0ZXN0TGlzdGVuZXJPcHRzKVxuICB9XG59IGNhdGNoIChlKSB7IGNvbnNvbGUud2FybihlKSB9XG5leHBvcnQgeyBwYXNzaXZlU3VwcG9ydGVkIH1cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZFBhc3NpdmVFdmVudExpc3RlbmVyIChcbiAgZWw6IEV2ZW50VGFyZ2V0LFxuICBldmVudDogc3RyaW5nLFxuICBjYjogRXZlbnRIYW5kbGVyTm9uTnVsbCB8ICgoKSA9PiB2b2lkKSxcbiAgb3B0aW9uczoge31cbik6IHZvaWQge1xuICBlbC5hZGRFdmVudExpc3RlbmVyKGV2ZW50LCBjYiwgcGFzc2l2ZVN1cHBvcnRlZCA/IG9wdGlvbnMgOiBmYWxzZSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE5lc3RlZFZhbHVlIChvYmo6IGFueSwgcGF0aDogKHN0cmluZyB8IG51bWJlcilbXSwgZmFsbGJhY2s/OiBhbnkpOiBhbnkge1xuICBjb25zdCBsYXN0ID0gcGF0aC5sZW5ndGggLSAxXG5cbiAgaWYgKGxhc3QgPCAwKSByZXR1cm4gb2JqID09PSB1bmRlZmluZWQgPyBmYWxsYmFjayA6IG9ialxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGFzdDsgaSsrKSB7XG4gICAgaWYgKG9iaiA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gZmFsbGJhY2tcbiAgICB9XG4gICAgb2JqID0gb2JqW3BhdGhbaV1dXG4gIH1cblxuICBpZiAob2JqID09IG51bGwpIHJldHVybiBmYWxsYmFja1xuXG4gIHJldHVybiBvYmpbcGF0aFtsYXN0XV0gPT09IHVuZGVmaW5lZCA/IGZhbGxiYWNrIDogb2JqW3BhdGhbbGFzdF1dXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWVwRXF1YWwgKGE6IGFueSwgYjogYW55KTogYm9vbGVhbiB7XG4gIGlmIChhID09PSBiKSByZXR1cm4gdHJ1ZVxuXG4gIGlmIChhIGluc3RhbmNlb2YgRGF0ZSAmJiBiIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgIC8vIElmIHRoZSB2YWx1ZXMgYXJlIERhdGUsIHRoZXkgd2VyZSBjb252ZXJ0IHRvIHRpbWVzdGFtcCB3aXRoIGdldFRpbWUgYW5kIGNvbXBhcmUgaXRcbiAgICBpZiAoYS5nZXRUaW1lKCkgIT09IGIuZ2V0VGltZSgpKSByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGlmIChhICE9PSBPYmplY3QoYSkgfHwgYiAhPT0gT2JqZWN0KGIpKSB7XG4gICAgLy8gSWYgdGhlIHZhbHVlcyBhcmVuJ3Qgb2JqZWN0cywgdGhleSB3ZXJlIGFscmVhZHkgY2hlY2tlZCBmb3IgZXF1YWxpdHlcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGNvbnN0IHByb3BzID0gT2JqZWN0LmtleXMoYSlcblxuICBpZiAocHJvcHMubGVuZ3RoICE9PSBPYmplY3Qua2V5cyhiKS5sZW5ndGgpIHtcbiAgICAvLyBEaWZmZXJlbnQgbnVtYmVyIG9mIHByb3BzLCBkb24ndCBib3RoZXIgdG8gY2hlY2tcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIHJldHVybiBwcm9wcy5ldmVyeShwID0+IGRlZXBFcXVhbChhW3BdLCBiW3BdKSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE9iamVjdFZhbHVlQnlQYXRoIChvYmo6IGFueSwgcGF0aDogc3RyaW5nLCBmYWxsYmFjaz86IGFueSk6IGFueSB7XG4gIC8vIGNyZWRpdDogaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy82NDkxNDYzL2FjY2Vzc2luZy1uZXN0ZWQtamF2YXNjcmlwdC1vYmplY3RzLXdpdGgtc3RyaW5nLWtleSNjb21tZW50NTUyNzg0MTNfNjQ5MTYyMVxuICBpZiAob2JqID09IG51bGwgfHwgIXBhdGggfHwgdHlwZW9mIHBhdGggIT09ICdzdHJpbmcnKSByZXR1cm4gZmFsbGJhY2tcbiAgaWYgKG9ialtwYXRoXSAhPT0gdW5kZWZpbmVkKSByZXR1cm4gb2JqW3BhdGhdXG4gIHBhdGggPSBwYXRoLnJlcGxhY2UoL1xcWyhcXHcrKVxcXS9nLCAnLiQxJykgLy8gY29udmVydCBpbmRleGVzIHRvIHByb3BlcnRpZXNcbiAgcGF0aCA9IHBhdGgucmVwbGFjZSgvXlxcLi8sICcnKSAvLyBzdHJpcCBhIGxlYWRpbmcgZG90XG4gIHJldHVybiBnZXROZXN0ZWRWYWx1ZShvYmosIHBhdGguc3BsaXQoJy4nKSwgZmFsbGJhY2spXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQcm9wZXJ0eUZyb21JdGVtIChcbiAgaXRlbTogb2JqZWN0LFxuICBwcm9wZXJ0eTogU2VsZWN0SXRlbUtleSxcbiAgZmFsbGJhY2s/OiBhbnlcbik6IGFueSB7XG4gIGlmIChwcm9wZXJ0eSA9PSBudWxsKSByZXR1cm4gaXRlbSA9PT0gdW5kZWZpbmVkID8gZmFsbGJhY2sgOiBpdGVtXG5cbiAgaWYgKGl0ZW0gIT09IE9iamVjdChpdGVtKSkgcmV0dXJuIGZhbGxiYWNrID09PSB1bmRlZmluZWQgPyBpdGVtIDogZmFsbGJhY2tcblxuICBpZiAodHlwZW9mIHByb3BlcnR5ID09PSAnc3RyaW5nJykgcmV0dXJuIGdldE9iamVjdFZhbHVlQnlQYXRoKGl0ZW0sIHByb3BlcnR5LCBmYWxsYmFjaylcblxuICBpZiAoQXJyYXkuaXNBcnJheShwcm9wZXJ0eSkpIHJldHVybiBnZXROZXN0ZWRWYWx1ZShpdGVtLCBwcm9wZXJ0eSwgZmFsbGJhY2spXG5cbiAgaWYgKHR5cGVvZiBwcm9wZXJ0eSAhPT0gJ2Z1bmN0aW9uJykgcmV0dXJuIGZhbGxiYWNrXG5cbiAgY29uc3QgdmFsdWUgPSBwcm9wZXJ0eShpdGVtLCBmYWxsYmFjaylcblxuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJyA/IGZhbGxiYWNrIDogdmFsdWVcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJhbmdlIChsZW5ndGg6IG51bWJlcik6IG51bWJlcltdIHtcbiAgcmV0dXJuIEFycmF5LmZyb20oeyBsZW5ndGggfSwgKHYsIGspID0+IGspXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRaSW5kZXggKGVsPzogRWxlbWVudCB8IG51bGwpOiBudW1iZXIge1xuICBpZiAoIWVsIHx8IGVsLm5vZGVUeXBlICE9PSBOb2RlLkVMRU1FTlRfTk9ERSkgcmV0dXJuIDBcblxuICBjb25zdCBpbmRleCA9ICt3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbCkuZ2V0UHJvcGVydHlWYWx1ZSgnei1pbmRleCcpXG5cbiAgaWYgKCFpbmRleCkgcmV0dXJuIGdldFpJbmRleChlbC5wYXJlbnROb2RlIGFzIEVsZW1lbnQpXG4gIHJldHVybiBpbmRleFxufVxuXG5jb25zdCB0YWdzVG9SZXBsYWNlID0ge1xuICAnJic6ICcmYW1wOycsXG4gICc8JzogJyZsdDsnLFxuICAnPic6ICcmZ3Q7Jyxcbn0gYXMgYW55XG5cbmV4cG9ydCBmdW5jdGlvbiBlc2NhcGVIVE1MIChzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBzdHIucmVwbGFjZSgvWyY8Pl0vZywgdGFnID0+IHRhZ3NUb1JlcGxhY2VbdGFnXSB8fCB0YWcpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXJPYmplY3RPbktleXM8VCwgSyBleHRlbmRzIGtleW9mIFQ+IChvYmo6IFQsIGtleXM6IEtbXSk6IHsgW04gaW4gS106IFRbTl0gfSB7XG4gIGNvbnN0IGZpbHRlcmVkID0ge30gYXMgeyBbTiBpbiBLXTogVFtOXSB9XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3Qga2V5ID0ga2V5c1tpXVxuICAgIGlmICh0eXBlb2Ygb2JqW2tleV0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBmaWx0ZXJlZFtrZXldID0gb2JqW2tleV1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmlsdGVyZWRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRUb1VuaXQgKHN0cjogc3RyaW5nIHwgbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZCwgdW5pdCA9ICdweCcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAoc3RyID09IG51bGwgfHwgc3RyID09PSAnJykge1xuICAgIHJldHVybiB1bmRlZmluZWRcbiAgfSBlbHNlIGlmIChpc05hTigrc3RyISkpIHtcbiAgICByZXR1cm4gU3RyaW5nKHN0cilcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gYCR7TnVtYmVyKHN0cil9JHt1bml0fWBcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24ga2ViYWJDYXNlIChzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiAoc3RyIHx8ICcnKS5yZXBsYWNlKC8oW2Etel0pKFtBLVpdKS9nLCAnJDEtJDInKS50b0xvd2VyQ2FzZSgpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc09iamVjdCAob2JqOiBhbnkpOiBvYmogaXMgb2JqZWN0IHtcbiAgcmV0dXJuIG9iaiAhPT0gbnVsbCAmJiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0J1xufVxuXG4vLyBLZXlib2FyZEV2ZW50LmtleUNvZGUgYWxpYXNlc1xuZXhwb3J0IGNvbnN0IGtleUNvZGVzID0gT2JqZWN0LmZyZWV6ZSh7XG4gIGVudGVyOiAxMyxcbiAgdGFiOiA5LFxuICBkZWxldGU6IDQ2LFxuICBlc2M6IDI3LFxuICBzcGFjZTogMzIsXG4gIHVwOiAzOCxcbiAgZG93bjogNDAsXG4gIGxlZnQ6IDM3LFxuICByaWdodDogMzksXG4gIGVuZDogMzUsXG4gIGhvbWU6IDM2LFxuICBkZWw6IDQ2LFxuICBiYWNrc3BhY2U6IDgsXG4gIGluc2VydDogNDUsXG4gIHBhZ2V1cDogMzMsXG4gIHBhZ2Vkb3duOiAzNCxcbn0pXG5cbi8vIFRoaXMgcmVtYXBzIGludGVybmFsIG5hbWVzIGxpa2UgJyRjYW5jZWwnIG9yICckdnVldGlmeS5pY29ucy5jYW5jZWwnXG4vLyB0byB0aGUgY3VycmVudCBuYW1lIG9yIGNvbXBvbmVudCBmb3IgdGhhdCBpY29uLlxuZXhwb3J0IGZ1bmN0aW9uIHJlbWFwSW50ZXJuYWxJY29uICh2bTogVnVlLCBpY29uTmFtZTogc3RyaW5nKTogVnVldGlmeUljb24ge1xuICBpZiAoIWljb25OYW1lLnN0YXJ0c1dpdGgoJyQnKSkge1xuICAgIHJldHVybiBpY29uTmFtZVxuICB9XG5cbiAgLy8gR2V0IHRoZSB0YXJnZXQgaWNvbiBuYW1lXG4gIGNvbnN0IGljb25QYXRoID0gYCR2dWV0aWZ5Lmljb25zLnZhbHVlcy4ke2ljb25OYW1lLnNwbGl0KCckJykucG9wKCkhLnNwbGl0KCcuJykucG9wKCl9YFxuXG4gIC8vIE5vdyBsb29rIHVwIGljb24gaW5kaXJlY3Rpb24gbmFtZSxcbiAgLy8gZS5nLiAnJHZ1ZXRpZnkuaWNvbnMudmFsdWVzLmNhbmNlbCdcbiAgcmV0dXJuIGdldE9iamVjdFZhbHVlQnlQYXRoKHZtLCBpY29uUGF0aCwgaWNvbk5hbWUpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBrZXlzPE8+IChvOiBPKSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhvKSBhcyAoa2V5b2YgTylbXVxufVxuXG4vKipcbiAqIENhbWVsaXplIGEgaHlwaGVuLWRlbGltaXRlZCBzdHJpbmcuXG4gKi9cbmNvbnN0IGNhbWVsaXplUkUgPSAvLShcXHcpL2dcbmV4cG9ydCBjb25zdCBjYW1lbGl6ZSA9IChzdHI6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIHJldHVybiBzdHIucmVwbGFjZShjYW1lbGl6ZVJFLCAoXywgYykgPT4gYyA/IGMudG9VcHBlckNhc2UoKSA6ICcnKVxufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIHNldCBkaWZmZXJlbmNlIG9mIEIgYW5kIEEsIGkuZS4gdGhlIHNldCBvZiBlbGVtZW50cyBpbiBCIGJ1dCBub3QgaW4gQVxuICovXG5leHBvcnQgZnVuY3Rpb24gYXJyYXlEaWZmIChhOiBhbnlbXSwgYjogYW55W10pOiBhbnlbXSB7XG4gIGNvbnN0IGRpZmY6IGFueVtdID0gW11cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBiLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGEuaW5kZXhPZihiW2ldKSA8IDApIGRpZmYucHVzaChiW2ldKVxuICB9XG4gIHJldHVybiBkaWZmXG59XG5cbi8qKlxuICogTWFrZXMgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiBhIHN0cmluZyB1cHBlcmNhc2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwcGVyRmlyc3QgKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHN0ci5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHN0ci5zbGljZSgxKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ3JvdXBJdGVtczxUIGV4dGVuZHMgYW55ID0gYW55PiAoXG4gIGl0ZW1zOiBUW10sXG4gIGdyb3VwQnk6IHN0cmluZ1tdLFxuICBncm91cERlc2M6IGJvb2xlYW5bXVxuKTogSXRlbUdyb3VwPFQ+W10ge1xuICBjb25zdCBrZXkgPSBncm91cEJ5WzBdXG4gIGNvbnN0IGdyb3VwczogSXRlbUdyb3VwPFQ+W10gPSBbXVxuICBsZXQgY3VycmVudCA9IG51bGxcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGl0ZW0gPSBpdGVtc1tpXVxuICAgIGNvbnN0IHZhbCA9IGdldE9iamVjdFZhbHVlQnlQYXRoKGl0ZW0sIGtleSlcbiAgICBpZiAoY3VycmVudCAhPT0gdmFsKSB7XG4gICAgICBjdXJyZW50ID0gdmFsXG4gICAgICBncm91cHMucHVzaCh7XG4gICAgICAgIG5hbWU6IHZhbCxcbiAgICAgICAgaXRlbXM6IFtdLFxuICAgICAgfSlcbiAgICB9XG4gICAgZ3JvdXBzW2dyb3Vwcy5sZW5ndGggLSAxXS5pdGVtcy5wdXNoKGl0ZW0pXG4gIH1cbiAgcmV0dXJuIGdyb3Vwc1xufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JhcEluQXJyYXk8VD4gKHY6IFQgfCBUW10gfCBudWxsIHwgdW5kZWZpbmVkKTogVFtdIHsgcmV0dXJuIHYgIT0gbnVsbCA/IEFycmF5LmlzQXJyYXkodikgPyB2IDogW3ZdIDogW10gfVxuXG5leHBvcnQgZnVuY3Rpb24gc29ydEl0ZW1zPFQgZXh0ZW5kcyBhbnkgPSBhbnk+IChcbiAgaXRlbXM6IFRbXSxcbiAgc29ydEJ5OiBzdHJpbmdbXSxcbiAgc29ydERlc2M6IGJvb2xlYW5bXSxcbiAgbG9jYWxlOiBzdHJpbmcsXG4gIGN1c3RvbVNvcnRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBEYXRhVGFibGVDb21wYXJlRnVuY3Rpb248VD4+XG4pOiBUW10ge1xuICBpZiAoc29ydEJ5ID09PSBudWxsIHx8ICFzb3J0QnkubGVuZ3RoKSByZXR1cm4gaXRlbXNcbiAgY29uc3Qgc3RyaW5nQ29sbGF0b3IgPSBuZXcgSW50bC5Db2xsYXRvcihsb2NhbGUsIHsgc2Vuc2l0aXZpdHk6ICdhY2NlbnQnLCB1c2FnZTogJ3NvcnQnIH0pXG5cbiAgcmV0dXJuIGl0ZW1zLnNvcnQoKGEsIGIpID0+IHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNvcnRCeS5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qgc29ydEtleSA9IHNvcnRCeVtpXVxuXG4gICAgICBsZXQgc29ydEEgPSBnZXRPYmplY3RWYWx1ZUJ5UGF0aChhLCBzb3J0S2V5KVxuICAgICAgbGV0IHNvcnRCID0gZ2V0T2JqZWN0VmFsdWVCeVBhdGgoYiwgc29ydEtleSlcblxuICAgICAgaWYgKHNvcnREZXNjW2ldKSB7XG4gICAgICAgIFtzb3J0QSwgc29ydEJdID0gW3NvcnRCLCBzb3J0QV1cbiAgICAgIH1cblxuICAgICAgaWYgKGN1c3RvbVNvcnRlcnMgJiYgY3VzdG9tU29ydGVyc1tzb3J0S2V5XSkge1xuICAgICAgICBjb25zdCBjdXN0b21SZXN1bHQgPSBjdXN0b21Tb3J0ZXJzW3NvcnRLZXldKHNvcnRBLCBzb3J0QilcblxuICAgICAgICBpZiAoIWN1c3RvbVJlc3VsdCkgY29udGludWVcblxuICAgICAgICByZXR1cm4gY3VzdG9tUmVzdWx0XG4gICAgICB9XG5cbiAgICAgIC8vIENoZWNrIGlmIGJvdGggY2Fubm90IGJlIGV2YWx1YXRlZFxuICAgICAgaWYgKHNvcnRBID09PSBudWxsICYmIHNvcnRCID09PSBudWxsKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIFtzb3J0QSwgc29ydEJdID0gW3NvcnRBLCBzb3J0Ql0ubWFwKHMgPT4gKHMgfHwgJycpLnRvU3RyaW5nKCkudG9Mb2NhbGVMb3dlckNhc2UoKSlcblxuICAgICAgaWYgKHNvcnRBICE9PSBzb3J0Qikge1xuICAgICAgICBpZiAoIWlzTmFOKHNvcnRBKSAmJiAhaXNOYU4oc29ydEIpKSByZXR1cm4gTnVtYmVyKHNvcnRBKSAtIE51bWJlcihzb3J0QilcbiAgICAgICAgcmV0dXJuIHN0cmluZ0NvbGxhdG9yLmNvbXBhcmUoc29ydEEsIHNvcnRCKVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAwXG4gIH0pXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWZhdWx0RmlsdGVyICh2YWx1ZTogYW55LCBzZWFyY2g6IHN0cmluZyB8IG51bGwsIGl0ZW06IGFueSkge1xuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJlxuICAgIHNlYXJjaCAhPSBudWxsICYmXG4gICAgdHlwZW9mIHZhbHVlICE9PSAnYm9vbGVhbicgJiZcbiAgICB2YWx1ZS50b1N0cmluZygpLnRvTG9jYWxlTG93ZXJDYXNlKCkuaW5kZXhPZihzZWFyY2gudG9Mb2NhbGVMb3dlckNhc2UoKSkgIT09IC0xXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZWFyY2hJdGVtczxUIGV4dGVuZHMgYW55ID0gYW55PiAoaXRlbXM6IFRbXSwgc2VhcmNoOiBzdHJpbmcpOiBUW10ge1xuICBpZiAoIXNlYXJjaCkgcmV0dXJuIGl0ZW1zXG4gIHNlYXJjaCA9IHNlYXJjaC50b1N0cmluZygpLnRvTG93ZXJDYXNlKClcbiAgaWYgKHNlYXJjaC50cmltKCkgPT09ICcnKSByZXR1cm4gaXRlbXNcblxuICByZXR1cm4gaXRlbXMuZmlsdGVyKChpdGVtOiBhbnkpID0+IE9iamVjdC5rZXlzKGl0ZW0pLnNvbWUoa2V5ID0+IGRlZmF1bHRGaWx0ZXIoZ2V0T2JqZWN0VmFsdWVCeVBhdGgoaXRlbSwga2V5KSwgc2VhcmNoLCBpdGVtKSkpXG59XG5cbi8qKlxuICogUmV0dXJuczpcbiAqICAtICdub3JtYWwnIGZvciBvbGQgc3R5bGUgc2xvdHMgLSBgPHRlbXBsYXRlIHNsb3Q9XCJkZWZhdWx0XCI+YFxuICogIC0gJ3Njb3BlZCcgZm9yIG9sZCBzdHlsZSBzY29wZWQgc2xvdHMgKGA8dGVtcGxhdGUgc2xvdD1cImRlZmF1bHRcIiBzbG90LXNjb3BlPVwiZGF0YVwiPmApIG9yIGJvdW5kIHYtc2xvdCAoYCNkZWZhdWx0PVwiZGF0YVwiYClcbiAqICAtICd2LXNsb3QnIGZvciB1bmJvdW5kIHYtc2xvdCAoYCNkZWZhdWx0YCkgLSBvbmx5IGlmIHRoZSB0aGlyZCBwYXJhbSBpcyB0cnVlLCBvdGhlcndpc2UgY291bnRzIGFzIHNjb3BlZFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2xvdFR5cGU8VCBleHRlbmRzIGJvb2xlYW4gPSBmYWxzZT4gKHZtOiBWdWUsIG5hbWU6IHN0cmluZywgc3BsaXQ/OiBUKTogKFQgZXh0ZW5kcyB0cnVlID8gJ3Ytc2xvdCcgOiBuZXZlcikgfCAnbm9ybWFsJyB8ICdzY29wZWQnIHwgdm9pZCB7XG4gIGlmICh2bS4kc2xvdHNbbmFtZV0gJiYgdm0uJHNjb3BlZFNsb3RzW25hbWVdICYmICh2bS4kc2NvcGVkU2xvdHNbbmFtZV0gYXMgYW55KS5uYW1lKSB7XG4gICAgcmV0dXJuIHNwbGl0ID8gJ3Ytc2xvdCcgYXMgYW55IDogJ3Njb3BlZCdcbiAgfVxuICBpZiAodm0uJHNsb3RzW25hbWVdKSByZXR1cm4gJ25vcm1hbCdcbiAgaWYgKHZtLiRzY29wZWRTbG90c1tuYW1lXSkgcmV0dXJuICdzY29wZWQnXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWJvdW5jZSAoZm46IEZ1bmN0aW9uLCBkZWxheTogbnVtYmVyKSB7XG4gIGxldCB0aW1lb3V0SWQgPSAwIGFzIGFueVxuICByZXR1cm4gKC4uLmFyZ3M6IGFueVtdKSA9PiB7XG4gICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZClcbiAgICB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IGZuKC4uLmFyZ3MpLCBkZWxheSlcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdGhyb3R0bGU8VCBleHRlbmRzICguLi5hcmdzOiBhbnlbXSkgPT4gYW55PiAoZm46IFQsIGxpbWl0OiBudW1iZXIpIHtcbiAgbGV0IHRocm90dGxpbmcgPSBmYWxzZVxuICByZXR1cm4gKC4uLmFyZ3M6IFBhcmFtZXRlcnM8VD4pOiB2b2lkIHwgUmV0dXJuVHlwZTxUPiA9PiB7XG4gICAgaWYgKCF0aHJvdHRsaW5nKSB7XG4gICAgICB0aHJvdHRsaW5nID0gdHJ1ZVxuICAgICAgc2V0VGltZW91dCgoKSA9PiB0aHJvdHRsaW5nID0gZmFsc2UsIGxpbWl0KVxuICAgICAgcmV0dXJuIGZuKC4uLmFyZ3MpXG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQcmVmaXhlZFNjb3BlZFNsb3RzIChwcmVmaXg6IHN0cmluZywgc2NvcGVkU2xvdHM6IGFueSkge1xuICByZXR1cm4gT2JqZWN0LmtleXMoc2NvcGVkU2xvdHMpLmZpbHRlcihrID0+IGsuc3RhcnRzV2l0aChwcmVmaXgpKS5yZWR1Y2UoKG9iajogYW55LCBrOiBzdHJpbmcpID0+IHtcbiAgICBvYmpbay5yZXBsYWNlKHByZWZpeCwgJycpXSA9IHNjb3BlZFNsb3RzW2tdXG4gICAgcmV0dXJuIG9ialxuICB9LCB7fSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNsb3QgKHZtOiBWdWUsIG5hbWUgPSAnZGVmYXVsdCcsIGRhdGE/OiBvYmplY3QgfCAoKCkgPT4gb2JqZWN0KSwgb3B0aW9uYWwgPSBmYWxzZSkge1xuICBpZiAodm0uJHNjb3BlZFNsb3RzW25hbWVdKSB7XG4gICAgcmV0dXJuIHZtLiRzY29wZWRTbG90c1tuYW1lXSEoZGF0YSBpbnN0YW5jZW9mIEZ1bmN0aW9uID8gZGF0YSgpIDogZGF0YSlcbiAgfSBlbHNlIGlmICh2bS4kc2xvdHNbbmFtZV0gJiYgKCFkYXRhIHx8IG9wdGlvbmFsKSkge1xuICAgIHJldHVybiB2bS4kc2xvdHNbbmFtZV1cbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbGFtcCAodmFsdWU6IG51bWJlciwgbWluID0gMCwgbWF4ID0gMSkge1xuICByZXR1cm4gTWF0aC5tYXgobWluLCBNYXRoLm1pbihtYXgsIHZhbHVlKSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhZEVuZCAoc3RyOiBzdHJpbmcsIGxlbmd0aDogbnVtYmVyLCBjaGFyID0gJzAnKSB7XG4gIHJldHVybiBzdHIgKyBjaGFyLnJlcGVhdChNYXRoLm1heCgwLCBsZW5ndGggLSBzdHIubGVuZ3RoKSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNodW5rIChzdHI6IHN0cmluZywgc2l6ZSA9IDEpIHtcbiAgY29uc3QgY2h1bmtlZDogc3RyaW5nW10gPSBbXVxuICBsZXQgaW5kZXggPSAwXG4gIHdoaWxlIChpbmRleCA8IHN0ci5sZW5ndGgpIHtcbiAgICBjaHVua2VkLnB1c2goc3RyLnN1YnN0cihpbmRleCwgc2l6ZSkpXG4gICAgaW5kZXggKz0gc2l6ZVxuICB9XG4gIHJldHVybiBjaHVua2VkXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBodW1hblJlYWRhYmxlRmlsZVNpemUgKGJ5dGVzOiBudW1iZXIsIGJpbmFyeSA9IGZhbHNlKTogc3RyaW5nIHtcbiAgY29uc3QgYmFzZSA9IGJpbmFyeSA/IDEwMjQgOiAxMDAwXG4gIGlmIChieXRlcyA8IGJhc2UpIHtcbiAgICByZXR1cm4gYCR7Ynl0ZXN9IEJgXG4gIH1cblxuICBjb25zdCBwcmVmaXggPSBiaW5hcnkgPyBbJ0tpJywgJ01pJywgJ0dpJ10gOiBbJ2snLCAnTScsICdHJ11cbiAgbGV0IHVuaXQgPSAtMVxuICB3aGlsZSAoTWF0aC5hYnMoYnl0ZXMpID49IGJhc2UgJiYgdW5pdCA8IHByZWZpeC5sZW5ndGggLSAxKSB7XG4gICAgYnl0ZXMgLz0gYmFzZVxuICAgICsrdW5pdFxuICB9XG4gIHJldHVybiBgJHtieXRlcy50b0ZpeGVkKDEpfSAke3ByZWZpeFt1bml0XX1CYFxufVxuXG5leHBvcnQgZnVuY3Rpb24gY2FtZWxpemVPYmplY3RLZXlzIChvYmo6IFJlY29yZDxzdHJpbmcsIGFueT4gfCBudWxsIHwgdW5kZWZpbmVkKSB7XG4gIGlmICghb2JqKSByZXR1cm4ge31cblxuICByZXR1cm4gT2JqZWN0LmtleXMob2JqKS5yZWR1Y2UoKG86IGFueSwga2V5OiBzdHJpbmcpID0+IHtcbiAgICBvW2NhbWVsaXplKGtleSldID0gb2JqW2tleV1cbiAgICByZXR1cm4gb1xuICB9LCB7fSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlRGVlcCAoXG4gIHNvdXJjZTogRGljdGlvbmFyeTxhbnk+ID0ge30sXG4gIHRhcmdldDogRGljdGlvbmFyeTxhbnk+ID0ge31cbikge1xuICBmb3IgKGNvbnN0IGtleSBpbiB0YXJnZXQpIHtcbiAgICBjb25zdCBzb3VyY2VQcm9wZXJ0eSA9IHNvdXJjZVtrZXldXG4gICAgY29uc3QgdGFyZ2V0UHJvcGVydHkgPSB0YXJnZXRba2V5XVxuXG4gICAgLy8gT25seSBjb250aW51ZSBkZWVwIG1lcmdpbmcgaWZcbiAgICAvLyBib3RoIHByb3BlcnRpZXMgYXJlIG9iamVjdHNcbiAgICBpZiAoXG4gICAgICBpc09iamVjdChzb3VyY2VQcm9wZXJ0eSkgJiZcbiAgICAgIGlzT2JqZWN0KHRhcmdldFByb3BlcnR5KVxuICAgICkge1xuICAgICAgc291cmNlW2tleV0gPSBtZXJnZURlZXAoc291cmNlUHJvcGVydHksIHRhcmdldFByb3BlcnR5KVxuXG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIHNvdXJjZVtrZXldID0gdGFyZ2V0UHJvcGVydHlcbiAgfVxuXG4gIHJldHVybiBzb3VyY2Vcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbGxBcnJheTxUPiAobGVuZ3RoOiBudW1iZXIsIG9iajogVCkge1xuICByZXR1cm4gQXJyYXkobGVuZ3RoKS5maWxsKG9iailcbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///12\n");
/***/ }),
/***/ 120:
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return mixins; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(0);\n/* eslint-disable max-len, import/export, no-use-before-define */\n\nfunction mixins() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return vue__WEBPACK_IMPORTED_MODULE_0__[/* default */ \"a\"].extend({\n mixins: args\n });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vc3JjL3V0aWwvbWl4aW5zLnRzPzFjMzMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQ0E7QUFJYyxrQkFBMkM7QUFBQSxvQ0FBM0MsSUFBMkM7QUFBM0MsUUFBMkM7QUFBQTs7QUFDdkQsU0FBTyxtREFBRyxDQUFILE9BQVc7QUFBRSxVQUFNLEVBQUU7QUFBVixHQUFYLENBQVA7QUFDRCIsImZpbGUiOiIxMjAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBpbXBvcnQvZXhwb3J0LCBuby11c2UtYmVmb3JlLWRlZmluZSAqL1xuaW1wb3J0IFZ1ZSwgeyBWdWVDb25zdHJ1Y3RvciB9IGZyb20gJ3Z1ZSdcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbWl4aW5zPFQgZXh0ZW5kcyBWdWVDb25zdHJ1Y3RvcltdPiAoLi4uYXJnczogVCk6IEV4dHJhY3RWdWU8VD4gZXh0ZW5kcyBpbmZlciBWID8gViBleHRlbmRzIFZ1ZSA/IFZ1ZUNvbnN0cnVjdG9yPFY+IDogbmV2ZXIgOiBuZXZlclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbWl4aW5zPFQgZXh0ZW5kcyBWdWU+ICguLi5hcmdzOiBWdWVDb25zdHJ1Y3RvcltdKTogVnVlQ29uc3RydWN0b3I8VD5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG1peGlucyAoLi4uYXJnczogVnVlQ29uc3RydWN0b3JbXSk6IFZ1ZUNvbnN0cnVjdG9yIHtcbiAgcmV0dXJuIFZ1ZS5leHRlbmQoeyBtaXhpbnM6IGFyZ3MgfSlcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBpbnN0YW5jZSB0eXBlIGZyb20gYSBWdWVDb25zdHJ1Y3RvclxuICogVXNlZnVsIGZvciBhZGRpbmcgdHlwZXMgd2hlbiB1c2luZyBtaXhpbnMoKS5leHRlbmQoKVxuICovXG5leHBvcnQgdHlwZSBFeHRyYWN0VnVlPFQgZXh0ZW5kcyBWdWVDb25zdHJ1Y3RvciB8IFZ1ZUNvbnN0cnVjdG9yW10+ID0gVCBleHRlbmRzIChpbmZlciBVKVtdXG4gID8gVW5pb25Ub0ludGVyc2VjdGlvbjxcbiAgICBVIGV4dGVuZHMgVnVlQ29uc3RydWN0b3I8aW5mZXIgVj4gPyBWIDogbmV2ZXJcbiAgPlxuICA6IFQgZXh0ZW5kcyBWdWVDb25zdHJ1Y3RvcjxpbmZlciBWPiA/IFYgOiBuZXZlclxuXG50eXBlIFVuaW9uVG9JbnRlcnNlY3Rpb248VT4gPVxuICAoVSBleHRlbmRzIGFueSA/IChrOiBVKSA9PiB2b2lkIDogbmV2ZXIpIGV4dGVuZHMgKChrOiBpbmZlciBJKSA9PiB2b2lkKSA/IEkgOiBuZXZlclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///120\n");
/***/ }),
/***/ 121:
/***/ (function(module, exports) {
eval("// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).\n// This module is a runtime utility for cleaner component module output and will\n// be included in the final webpack user bundle.\n\nmodule.exports = function installComponents (component, components) {\n var options = typeof component.exports === 'function'\n ? component.exports.extendOptions\n : component.options\n\n if (typeof component.exports === 'function') {\n options.components = component.exports.options.components\n }\n\n options.components = options.components || {}\n\n for (var i in components) {\n options.components[i] = options.components[i] || components[i]\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdnVldGlmeS1sb2FkZXIvbGliL3J1bnRpbWUvaW5zdGFsbENvbXBvbmVudHMuanM/NjU0NCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjEyMS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIElNUE9SVEFOVDogRG8gTk9UIHVzZSBFUzIwMTUgZmVhdHVyZXMgaW4gdGhpcyBmaWxlIChleGNlcHQgZm9yIG1vZHVsZXMpLlxuLy8gVGhpcyBtb2R1bGUgaXMgYSBydW50aW1lIHV0aWxpdHkgZm9yIGNsZWFuZXIgY29tcG9uZW50IG1vZHVsZSBvdXRwdXQgYW5kIHdpbGxcbi8vIGJlIGluY2x1ZGVkIGluIHRoZSBmaW5hbCB3ZWJwYWNrIHVzZXIgYnVuZGxlLlxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGluc3RhbGxDb21wb25lbnRzIChjb21wb25lbnQsIGNvbXBvbmVudHMpIHtcbiAgdmFyIG9wdGlvbnMgPSB0eXBlb2YgY29tcG9uZW50LmV4cG9ydHMgPT09ICdmdW5jdGlvbidcbiAgICA/IGNvbXBvbmVudC5leHBvcnRzLmV4dGVuZE9wdGlvbnNcbiAgICA6IGNvbXBvbmVudC5vcHRpb25zXG5cbiAgaWYgKHR5cGVvZiBjb21wb25lbnQuZXhwb3J0cyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIG9wdGlvbnMuY29tcG9uZW50cyA9IGNvbXBvbmVudC5leHBvcnRzLm9wdGlvbnMuY29tcG9uZW50c1xuICB9XG5cbiAgb3B0aW9ucy5jb21wb25lbnRzID0gb3B0aW9ucy5jb21wb25lbnRzIHx8IHt9XG5cbiAgZm9yICh2YXIgaSBpbiBjb21wb25lbnRzKSB7XG4gICAgb3B0aW9ucy5jb21wb25lbnRzW2ldID0gb3B0aW9ucy5jb21wb25lbnRzW2ldIHx8IGNvbXBvbmVudHNbaV1cbiAgfVxufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///121\n");
/***/ }),
/***/ 122:
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return functionalThemeClasses; });\n/* harmony import */ var core_js_modules_es7_object_get_own_property_descriptors__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(36);\n/* harmony import */ var core_js_modules_es7_object_get_own_property_descriptors__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es7_object_get_own_property_descriptors__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var core_js_modules_es6_symbol__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(23);\n/* harmony import */ var core_js_modules_es6_symbol__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es6_symbol__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var core_js_modules_web_dom_iterable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(16);\n/* harmony import */ var core_js_modules_web_dom_iterable__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_dom_iterable__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var core_js_modules_es6_object_to_string__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(3);\n/* harmony import */ var core_js_modules_es6_object_to_string__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es6_object_to_string__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var core_js_modules_es6_object_keys__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(31);\n/* harmony import */ var core_js_modules_es6_object_keys__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es6_object_keys__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(9);\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(0);\n\n\n\n\n\n\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (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 = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { Object(_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_5__[/* default */ \"a\"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\n\nfunction functionalThemeClasses(context) {\n var vm = _objectSpread(_objectSpread({}, context.props), context.injections);\n\n var isDark = Themeable.options.computed.isDark.call(vm);\n return Themeable.options.computed.themeClasses.call({\n isDark: isDark\n });\n}\n/* @vue/component */\n\nvar Themeable = vue__WEBPACK_IMPORTED_MODULE_6__[/* default */ \"a\"].extend().extend({\n name: 'themeable',\n provide: function provide() {\n return {\n theme: this.themeableProvide\n };\n },\n inject: {\n theme: {\n default: {\n isDark: false\n }\n }\n },\n props: {\n dark: {\n type: Boolean,\n default: null\n },\n light: {\n type: Boolean,\n default: null\n }\n },\n data: function data() {\n return {\n themeableProvide: {\n isDark: false\n }\n };\n },\n computed: {\n appIsDark: function appIsDark() {\n return this.$vuetify.theme.dark || false;\n },\n isDark: function isDark() {\n if (this.dark === true) {\n // explicitly dark\n return true;\n } else if (this.light === true) {\n // explicitly light\n return false;\n } else {\n // inherit from parent, or default false if there is none\n return this.theme.isDark;\n }\n },\n themeClasses: function themeClasses() {\n return {\n 'theme--dark': this.isDark,\n 'theme--light': !this.isDark\n };\n },\n\n /** Used by menus and dialogs, inherits from v-app instead of the parent */\n rootIsDark: function rootIsDark() {\n if (this.dark === true) {\n // explicitly dark\n return true;\n } else if (this.light === true) {\n // explicitly light\n return false;\n } else {\n // inherit from v-app\n return this.appIsDark;\n }\n },\n rootThemeClasses: function rootThemeClasses() {\n return {\n 'theme--dark': this.rootIsDark,\n 'theme--light': !this.rootIsDark\n };\n }\n },\n watch: {\n isDark: {\n handler: function handler(newVal, oldVal) {\n if (newVal !== oldVal) {\n this.themeableProvide.isDark = this.isDark;\n }\n },\n immediate: true\n }\n }\n});\n/* harmony default export */ __webpack_exports__[\"a\"] = (Themeable);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vc3JjL21peGlucy90aGVtZWFibGUvaW5kZXgudHM/YThhYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQVVNLHlDQUF3RDtBQUM1RCxNQUFNLEVBQUUsbUNBQ0gsT0FBTyxDQURELEtBQUgsR0FFSCxPQUFPLENBQUMsVUFGTCxDQUFSOztBQUlBLE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBVCw2QkFBZixFQUFlLENBQWY7QUFDQSxTQUFPLFNBQVMsQ0FBVCxtQ0FBNkM7QUFBRTtBQUFGLEdBQTdDLENBQVA7QUFDRDtBQUVEOztBQUNBLElBQU0sU0FBUyxHQUFHLG1EQUFHLENBQUgsZ0JBQStCO0FBQy9DLE1BQUksRUFEMkM7QUFHL0MsU0FIK0MscUJBR3hDO0FBQ0wsV0FBTztBQUNMLFdBQUssRUFBRSxLQUFLO0FBRFAsS0FBUDtBQUo2QztBQVMvQyxRQUFNLEVBQUU7QUFDTixTQUFLLEVBQUU7QUFDTCxhQUFPLEVBQUU7QUFDUCxjQUFNLEVBQUU7QUFERDtBQURKO0FBREQsR0FUdUM7QUFpQi9DLE9BQUssRUFBRTtBQUNMLFFBQUksRUFBRTtBQUNKLFVBQUksRUFEQTtBQUVKLGFBQU8sRUFBRTtBQUZMLEtBREQ7QUFLTCxTQUFLLEVBQUU7QUFDTCxVQUFJLEVBREM7QUFFTCxhQUFPLEVBQUU7QUFGSjtBQUxGLEdBakJ3QztBQTRCL0MsTUE1QitDLGtCQTRCM0M7QUFDRixXQUFPO0FBQ0wsc0JBQWdCLEVBQUU7QUFDaEIsY0FBTSxFQUFFO0FBRFE7QUFEYixLQUFQO0FBN0I2QztBQW9DL0MsVUFBUSxFQUFFO0FBQ1IsYUFEUSx1QkFDQztBQUNQLGFBQU8sNEJBQVA7QUFGTTtBQUlSLFVBSlEsb0JBSUY7QUFDSixVQUFJLGNBQUosTUFBd0I7QUFDdEI7QUFDQTtBQUZGLGFBR08sSUFBSSxlQUFKLE1BQXlCO0FBQzlCO0FBQ0E7QUFGSyxhQUdBO0FBQ0w7QUFDQSxlQUFPLFdBQVA7QUFDRDtBQWRLO0FBZ0JSLGdCQWhCUSwwQkFnQkk7QUFDVixhQUFPO0FBQ0wsdUJBQWUsS0FEVjtBQUVMLHdCQUFnQixDQUFDLEtBQUs7QUFGakIsT0FBUDtBQWpCTTs7QUFzQlI7QUFDQSxjQXZCUSx3QkF1QkU7QUFDUixVQUFJLGNBQUosTUFBd0I7QUFDdEI7QUFDQTtBQUZGLGFBR08sSUFBSSxlQUFKLE1BQXlCO0FBQzlCO0FBQ0E7QUFGSyxhQUdBO0FBQ0w7QUFDQSxlQUFPLEtBQVA7QUFDRDtBQWpDSztBQW1DUixvQkFuQ1EsOEJBbUNRO0FBQ2QsYUFBTztBQUNMLHVCQUFlLEtBRFY7QUFFTCx3QkFBZ0IsQ0FBQyxLQUFLO0FBRmpCLE9BQVA7QUFJRDtBQXhDTyxHQXBDcUM7QUErRS9DLE9BQUssRUFBRTtBQUNMLFVBQU0sRUFBRTtBQUNOLGFBRE0sbUJBQ0MsTUFERCxFQUNDLE1BREQsRUFDaUI7QUFDckIsWUFBSSxNQUFNLEtBQVYsUUFBdUI7QUFDckIseUNBQStCLEtBQS9CO0FBQ0Q7QUFKRztBQU1OLGVBQVMsRUFBRTtBQU5MO0FBREg7QUEvRXdDLENBQS9CLENBQWxCO0FBMkZBIiwiZmlsZSI6IjEyMi5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBWdWUgZnJvbSAndnVlJ1xuaW1wb3J0IHsgUHJvcFR5cGUsIFJlbmRlckNvbnRleHQgfSBmcm9tICd2dWUvdHlwZXMvb3B0aW9ucydcblxuLyogZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZS1iZWZvcmUtZGVmaW5lICovXG5pbnRlcmZhY2UgVGhlbWVhYmxlIGV4dGVuZHMgVnVlIHtcbiAgdGhlbWU6IHtcbiAgICBpc0Rhcms6IGJvb2xlYW5cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZnVuY3Rpb25hbFRoZW1lQ2xhc3NlcyAoY29udGV4dDogUmVuZGVyQ29udGV4dCk6IG9iamVjdCB7XG4gIGNvbnN0IHZtID0ge1xuICAgIC4uLmNvbnRleHQucHJvcHMsXG4gICAgLi4uY29udGV4dC5pbmplY3Rpb25zLFxuICB9XG4gIGNvbnN0IGlzRGFyayA9IFRoZW1lYWJsZS5vcHRpb25zLmNvbXB1dGVkLmlzRGFyay5jYWxsKHZtKVxuICByZXR1cm4gVGhlbWVhYmxlLm9wdGlvbnMuY29tcHV0ZWQudGhlbWVDbGFzc2VzLmNhbGwoeyBpc0RhcmsgfSlcbn1cblxuLyogQHZ1ZS9jb21wb25lbnQgKi9cbmNvbnN0IFRoZW1lYWJsZSA9IFZ1ZS5leHRlbmQ8VGhlbWVhYmxlPigpLmV4dGVuZCh7XG4gIG5hbWU6ICd0aGVtZWFibGUnLFxuXG4gIHByb3ZpZGUgKCk6IG9iamVjdCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRoZW1lOiB0aGlzLnRoZW1lYWJsZVByb3ZpZGUsXG4gICAgfVxuICB9LFxuXG4gIGluamVjdDoge1xuICAgIHRoZW1lOiB7XG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIGlzRGFyazogZmFsc2UsXG4gICAgICB9LFxuICAgIH0sXG4gIH0sXG5cbiAgcHJvcHM6IHtcbiAgICBkYXJrOiB7XG4gICAgICB0eXBlOiBCb29sZWFuIGFzIFByb3BUeXBlPGJvb2xlYW4gfCBudWxsPixcbiAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgfSxcbiAgICBsaWdodDoge1xuICAgICAgdHlwZTogQm9vbGVhbiBhcyBQcm9wVHlwZTxib29sZWFuIHwgbnVsbD4sXG4gICAgICBkZWZhdWx0OiBudWxsLFxuICAgIH0sXG4gIH0sXG5cbiAgZGF0YSAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRoZW1lYWJsZVByb3ZpZGU6IHtcbiAgICAgICAgaXNEYXJrOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgYXBwSXNEYXJrICgpOiBib29sZWFuIHtcbiAgICAgIHJldHVybiB0aGlzLiR2dWV0aWZ5LnRoZW1lLmRhcmsgfHwgZmFsc2VcbiAgICB9LFxuICAgIGlzRGFyayAoKTogYm9vbGVhbiB7XG4gICAgICBpZiAodGhpcy5kYXJrID09PSB0cnVlKSB7XG4gICAgICAgIC8vIGV4cGxpY2l0bHkgZGFya1xuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfSBlbHNlIGlmICh0aGlzLmxpZ2h0ID09PSB0cnVlKSB7XG4gICAgICAgIC8vIGV4cGxpY2l0bHkgbGlnaHRcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBpbmhlcml0IGZyb20gcGFyZW50LCBvciBkZWZhdWx0IGZhbHNlIGlmIHRoZXJlIGlzIG5vbmVcbiAgICAgICAgcmV0dXJuIHRoaXMudGhlbWUuaXNEYXJrXG4gICAgICB9XG4gICAgfSxcbiAgICB0aGVtZUNsYXNzZXMgKCk6IG9iamVjdCB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAndGhlbWUtLWRhcmsnOiB0aGlzLmlzRGFyayxcbiAgICAgICAgJ3RoZW1lLS1saWdodCc6ICF0aGlzLmlzRGFyayxcbiAgICAgIH1cbiAgICB9LFxuICAgIC8qKiBVc2VkIGJ5IG1lbnVzIGFuZCBkaWFsb2dzLCBpbmhlcml0cyBmcm9tIHYtYXBwIGluc3RlYWQgb2YgdGhlIHBhcmVudCAqL1xuICAgIHJvb3RJc0RhcmsgKCk6IGJvb2xlYW4ge1xuICAgICAgaWYgKHRoaXMuZGFyayA9PT0gdHJ1ZSkge1xuICAgICAgICAvLyBleHBsaWNpdGx5IGRhcmtcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5saWdodCA9PT0gdHJ1ZSkge1xuICAgICAgICAvLyBleHBsaWNpdGx5IGxpZ2h0XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gaW5oZXJpdCBmcm9tIHYtYXBwXG4gICAgICAgIHJldHVybiB0aGlzLmFwcElzRGFya1xuICAgICAgfVxuICAgIH0sXG4gICAgcm9vdFRoZW1lQ2xhc3NlcyAoKTogRGljdGlvbmFyeTxib29sZWFuPiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAndGhlbWUtLWRhcmsnOiB0aGlzLnJvb3RJc0RhcmssXG4gICAgICAgICd0aGVtZS0tbGlnaHQnOiAhdGhpcy5yb290SXNEYXJrLFxuICAgICAgfVxuICAgIH0sXG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICBpc0Rhcms6IHtcbiAgICAgIGhhbmRsZXIgKG5ld1ZhbCwgb2xkVmFsKSB7XG4gICAgICAgIGlmIChuZXdWYWwgIT09IG9sZFZhbCkge1xuICAgICAgICAgIHRoaXMudGhlbWVhYmxlUHJvdmlkZS5pc0RhcmsgPSB0aGlzLmlzRGFya1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgaW1tZWRpYXRlOiB0cnVlLFxuICAgIH0sXG4gIH0sXG59KVxuXG5leHBvcnQgZGVmYXVsdCBUaGVtZWFibGVcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///122\n");
/***/ }),
/***/ 146:
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("// Standard YAML's Core schema.\n// http://www.yaml.org/spec/1.2/spec.html#id2804923\n//\n// NOTE: JS-YAML does not support schema-specific tag resolution restrictions.\n// So, Core schema has no distinctions from JSON schema is JS-YAML.\n\n\n\n\n\nvar Schema = __webpack_require__(60);\n\n\nmodule.exports = new Schema({\n include: [\n __webpack_require__(147)\n ]\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC9zY2hlbWEvY29yZS5qcz80NTI4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdhOzs7QUFHYixhQUFhLG1CQUFPLENBQUMsRUFBVzs7O0FBR2hDO0FBQ0E7QUFDQSxJQUFJLG1CQUFPLENBQUMsR0FBUTtBQUNwQjtBQUNBLENBQUMiLCJmaWxlIjoiMTQ2LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gU3RhbmRhcmQgWUFNTCdzIENvcmUgc2NoZW1hLlxuLy8gaHR0cDovL3d3dy55YW1sLm9yZy9zcGVjLzEuMi9zcGVjLmh0bWwjaWQyODA0OTIzXG4vL1xuLy8gTk9URTogSlMtWUFNTCBkb2VzIG5vdCBzdXBwb3J0IHNjaGVtYS1zcGVjaWZpYyB0YWcgcmVzb2x1dGlvbiByZXN0cmljdGlvbnMuXG4vLyBTbywgQ29yZSBzY2hlbWEgaGFzIG5vIGRpc3RpbmN0aW9ucyBmcm9tIEpTT04gc2NoZW1hIGlzIEpTLVlBTUwuXG5cblxuJ3VzZSBzdHJpY3QnO1xuXG5cbnZhciBTY2hlbWEgPSByZXF1aXJlKCcuLi9zY2hlbWEnKTtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IG5ldyBTY2hlbWEoe1xuICBpbmNsdWRlOiBbXG4gICAgcmVxdWlyZSgnLi9qc29uJylcbiAgXVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///146\n");
/***/ }),
/***/ 147:
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("// Standard YAML's JSON schema.\n// http://www.yaml.org/spec/1.2/spec.html#id2803231\n//\n// NOTE: JS-YAML does not support schema-specific tag resolution restrictions.\n// So, this schema is not such strict as defined in the YAML specification.\n// It allows numbers in binary notaion, use `Null` and `NULL` as `null`, etc.\n\n\n\n\n\nvar Schema = __webpack_require__(60);\n\n\nmodule.exports = new Schema({\n include: [\n __webpack_require__(116)\n ],\n implicit: [\n __webpack_require__(214),\n __webpack_require__(215),\n __webpack_require__(216),\n __webpack_require__(217)\n ]\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC9zY2hlbWEvanNvbi5qcz9mOTUzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR2E7OztBQUdiLGFBQWEsbUJBQU8sQ0FBQyxFQUFXOzs7QUFHaEM7QUFDQTtBQUNBLElBQUksbUJBQU8sQ0FBQyxHQUFZO0FBQ3hCO0FBQ0E7QUFDQSxJQUFJLG1CQUFPLENBQUMsR0FBYztBQUMxQixJQUFJLG1CQUFPLENBQUMsR0FBYztBQUMxQixJQUFJLG1CQUFPLENBQUMsR0FBYTtBQUN6QixJQUFJLG1CQUFPLENBQUMsR0FBZTtBQUMzQjtBQUNBLENBQUMiLCJmaWxlIjoiMTQ3LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gU3RhbmRhcmQgWUFNTCdzIEpTT04gc2NoZW1hLlxuLy8gaHR0cDovL3d3dy55YW1sLm9yZy9zcGVjLzEuMi9zcGVjLmh0bWwjaWQyODAzMjMxXG4vL1xuLy8gTk9URTogSlMtWUFNTCBkb2VzIG5vdCBzdXBwb3J0IHNjaGVtYS1zcGVjaWZpYyB0YWcgcmVzb2x1dGlvbiByZXN0cmljdGlvbnMuXG4vLyBTbywgdGhpcyBzY2hlbWEgaXMgbm90IHN1Y2ggc3RyaWN0IGFzIGRlZmluZWQgaW4gdGhlIFlBTUwgc3BlY2lmaWNhdGlvbi5cbi8vIEl0IGFsbG93cyBudW1iZXJzIGluIGJpbmFyeSBub3RhaW9uLCB1c2UgYE51bGxgIGFuZCBgTlVMTGAgYXMgYG51bGxgLCBldGMuXG5cblxuJ3VzZSBzdHJpY3QnO1xuXG5cbnZhciBTY2hlbWEgPSByZXF1aXJlKCcuLi9zY2hlbWEnKTtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IG5ldyBTY2hlbWEoe1xuICBpbmNsdWRlOiBbXG4gICAgcmVxdWlyZSgnLi9mYWlsc2FmZScpXG4gIF0sXG4gIGltcGxpY2l0OiBbXG4gICAgcmVxdWlyZSgnLi4vdHlwZS9udWxsJyksXG4gICAgcmVxdWlyZSgnLi4vdHlwZS9ib29sJyksXG4gICAgcmVxdWlyZSgnLi4vdHlwZS9pbnQnKSxcbiAgICByZXF1aXJlKCcuLi90eXBlL2Zsb2F0JylcbiAgXVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///147\n");
/***/ }),
/***/ 158:
/***/ (function(__webpack_module__, __webpack_exports__, __webpack_require__) {
"use strict";
eval("/* harmony default export */ __webpack_exports__[\"a\"] = (function(e,n){return n=n||{},new Promise(function(t,r){var s=new XMLHttpRequest,o=[],u=[],i={},a=function(){return{ok:2==(s.status/100|0),statusText:s.statusText,status:s.status,url:s.responseURL,text:function(){return Promise.resolve(s.responseText)},json:function(){return Promise.resolve(JSON.parse(s.responseText))},blob:function(){return Promise.resolve(new Blob([s.response]))},clone:a,headers:{keys:function(){return o},entries:function(){return u},get:function(e){return i[e.toLowerCase()]},has:function(e){return e.toLowerCase()in i}}}};for(var l in s.open(n.method||\"get\",e,!0),s.onload=function(){s.getAllResponseHeaders().replace(/^(.*?):[^\\S\\n]*([\\s\\S]*?)$/gm,function(e,n,t){o.push(n=n.toLowerCase()),u.push([n,t]),i[n]=i[n]?i[n]+\",\"+t:t}),t(a())},s.onerror=r,s.withCredentials=\"include\"==n.credentials,n.headers)s.setRequestHeader(l,n.headers[l]);s.send(n.body||null)})});\n//# sourceMappingURL=unfetch.mjs.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5mZXRjaC9kaXN0L3VuZmV0Y2gubWpzPzliZjEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWUsdUVBQWMsY0FBYywyQkFBMkIsdUNBQXVDLGNBQWMsT0FBTyxpR0FBaUcsdUNBQXVDLGlCQUFpQixtREFBbUQsaUJBQWlCLCtDQUErQyxrQkFBa0IsZ0JBQWdCLFNBQVMsb0JBQW9CLFNBQVMsaUJBQWlCLDBCQUEwQixpQkFBaUIsK0JBQStCLDhEQUE4RCxpRkFBaUYsK0RBQStELFNBQVMscUdBQXFHLHFCQUFxQixFQUFFO0FBQ3A0QiIsImZpbGUiOiIxNTguanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihlLG4pe3JldHVybiBuPW58fHt9LG5ldyBQcm9taXNlKGZ1bmN0aW9uKHQscil7dmFyIHM9bmV3IFhNTEh0dHBSZXF1ZXN0LG89W10sdT1bXSxpPXt9LGE9ZnVuY3Rpb24oKXtyZXR1cm57b2s6Mj09KHMuc3RhdHVzLzEwMHwwKSxzdGF0dXNUZXh0OnMuc3RhdHVzVGV4dCxzdGF0dXM6cy5zdGF0dXMsdXJsOnMucmVzcG9uc2VVUkwsdGV4dDpmdW5jdGlvbigpe3JldHVybiBQcm9taXNlLnJlc29sdmUocy5yZXNwb25zZVRleHQpfSxqc29uOmZ1bmN0aW9uKCl7cmV0dXJuIFByb21pc2UucmVzb2x2ZShKU09OLnBhcnNlKHMucmVzcG9uc2VUZXh0KSl9LGJsb2I6ZnVuY3Rpb24oKXtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5ldyBCbG9iKFtzLnJlc3BvbnNlXSkpfSxjbG9uZTphLGhlYWRlcnM6e2tleXM6ZnVuY3Rpb24oKXtyZXR1cm4gb30sZW50cmllczpmdW5jdGlvbigpe3JldHVybiB1fSxnZXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGlbZS50b0xvd2VyQ2FzZSgpXX0saGFzOmZ1bmN0aW9uKGUpe3JldHVybiBlLnRvTG93ZXJDYXNlKClpbiBpfX19fTtmb3IodmFyIGwgaW4gcy5vcGVuKG4ubWV0aG9kfHxcImdldFwiLGUsITApLHMub25sb2FkPWZ1bmN0aW9uKCl7cy5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKS5yZXBsYWNlKC9eKC4qPyk6W15cXFNcXG5dKihbXFxzXFxTXSo/KSQvZ20sZnVuY3Rpb24oZSxuLHQpe28ucHVzaChuPW4udG9Mb3dlckNhc2UoKSksdS5wdXNoKFtuLHRdKSxpW25dPWlbbl0/aVtuXStcIixcIit0OnR9KSx0KGEoKSl9LHMub25lcnJvcj1yLHMud2l0aENyZWRlbnRpYWxzPVwiaW5jbHVkZVwiPT1uLmNyZWRlbnRpYWxzLG4uaGVhZGVycylzLnNldFJlcXVlc3RIZWFkZXIobCxuLmhlYWRlcnNbbF0pO3Muc2VuZChuLmJvZHl8fG51bGwpfSl9XG4vLyMgc291cmNlTWFwcGluZ1VSTD11bmZldGNoLm1qcy5tYXBcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///158\n");
/***/ }),
/***/ 160:
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nvar isMergeableObject = function isMergeableObject(value) {\n\treturn isNonNullObject(value)\n\t\t&& !isSpecial(value)\n};\n\nfunction isNonNullObject(value) {\n\treturn !!value && typeof value === 'object'\n}\n\nfunction isSpecial(value) {\n\tvar stringValue = Object.prototype.toString.call(value);\n\n\treturn stringValue === '[object RegExp]'\n\t\t|| stringValue === '[object Date]'\n\t\t|| isReactElement(value)\n}\n\n// see https://github.com/facebook/react/blob/b5ac963fb791d1298e7f396236383bc955f916c1/src/isomorphic/classic/element/ReactElement.js#L21-L25\nvar canUseSymbol = typeof Symbol === 'function' && Symbol.for;\nvar REACT_ELEMENT_TYPE = canUseSymbol ? Symbol.for('react.element') : 0xeac7;\n\nfunction isReactElement(value) {\n\treturn value.$$typeof === REACT_ELEMENT_TYPE\n}\n\nfunction emptyTarget(val) {\n\treturn Array.isArray(val) ? [] : {}\n}\n\nfunction cloneUnlessOtherwiseSpecified(value, options) {\n\treturn (options.clone !== false && options.isMergeableObject(value))\n\t\t? deepmerge(emptyTarget(value), value, options)\n\t\t: value\n}\n\nfunction defaultArrayMerge(target, source, options) {\n\treturn target.concat(source).map(function(element) {\n\t\treturn cloneUnlessOtherwiseSpecified(element, options)\n\t})\n}\n\nfunction getMergeFunction(key, options) {\n\tif (!options.customMerge) {\n\t\treturn deepmerge\n\t}\n\tvar customMerge = options.customMerge(key);\n\treturn typeof customMerge === 'function' ? customMerge : deepmerge\n}\n\nfunction getEnumerableOwnPropertySymbols(target) {\n\treturn Object.getOwnPropertySymbols\n\t\t? Object.getOwnPropertySymbols(target).filter(function(symbol) {\n\t\t\treturn target.propertyIsEnumerable(symbol)\n\t\t})\n\t\t: []\n}\n\nfunction getKeys(target) {\n\treturn Object.keys(target).concat(getEnumerableOwnPropertySymbols(target))\n}\n\nfunction propertyIsOnObject(object, property) {\n\ttry {\n\t\treturn property in object\n\t} catch(_) {\n\t\treturn false\n\t}\n}\n\n// Protects from prototype poisoning and unexpected merging up the prototype chain.\nfunction propertyIsUnsafe(target, key) {\n\treturn propertyIsOnObject(target, key) // Properties are safe to merge if they don't exist in the target yet,\n\t\t&& !(Object.hasOwnProperty.call(target, key) // unsafe if they exist up the prototype chain,\n\t\t\t&& Object.propertyIsEnumerable.call(target, key)) // and also unsafe if they're nonenumerable.\n}\n\nfunction mergeObject(target, source, options) {\n\tvar destination = {};\n\tif (options.isMergeableObject(target)) {\n\t\tgetKeys(target).forEach(function(key) {\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(target[key], options);\n\t\t});\n\t}\n\tgetKeys(source).forEach(function(key) {\n\t\tif (propertyIsUnsafe(target, key)) {\n\t\t\treturn\n\t\t}\n\n\t\tif (propertyIsOnObject(target, key) && options.isMergeableObject(source[key])) {\n\t\t\tdestination[key] = getMergeFunction(key, options)(target[key], source[key], options);\n\t\t} else {\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(source[key], options);\n\t\t}\n\t});\n\treturn destination\n}\n\nfunction deepmerge(target, source, options) {\n\toptions = options || {};\n\toptions.arrayMerge = options.arrayMerge || defaultArrayMerge;\n\toptions.isMergeableObject = options.isMergeableObject || isMergeableObject;\n\t// cloneUnlessOtherwiseSpecified is added to `options` so that custom arrayMerge()\n\t// implementations can use it. The caller may not replace it.\n\toptions.cloneUnlessOtherwiseSpecified = cloneUnlessOtherwiseSpecified;\n\n\tvar sourceIsArray = Array.isArray(source);\n\tvar targetIsArray = Array.isArray(target);\n\tvar sourceAndTargetTypesMatch = sourceIsArray === targetIsArray;\n\n\tif (!sourceAndTargetTypesMatch) {\n\t\treturn cloneUnlessOtherwiseSpecified(source, options)\n\t} else if (sourceIsArray) {\n\t\treturn options.arrayMerge(target, source, options)\n\t} else {\n\t\treturn mergeObject(target, source, options)\n\t}\n}\n\ndeepmerge.all = function deepmergeAll(array, options) {\n\tif (!Array.isArray(array)) {\n\t\tthrow new Error('first argument should be an array')\n\t}\n\n\treturn array.reduce(function(prev, next) {\n\t\treturn deepmerge(prev, next, options)\n\t}, {})\n};\n\nvar deepmerge_1 = deepmerge;\n\nmodule.exports = deepmerge_1;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZGVlcG1lcmdlL2Rpc3QvY2pzLmpzPzNjNGUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsRUFBRSxJQUFJO0FBQ047O0FBRUE7O0FBRUEiLCJmaWxlIjoiMTYwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaXNNZXJnZWFibGVPYmplY3QgPSBmdW5jdGlvbiBpc01lcmdlYWJsZU9iamVjdCh2YWx1ZSkge1xuXHRyZXR1cm4gaXNOb25OdWxsT2JqZWN0KHZhbHVlKVxuXHRcdCYmICFpc1NwZWNpYWwodmFsdWUpXG59O1xuXG5mdW5jdGlvbiBpc05vbk51bGxPYmplY3QodmFsdWUpIHtcblx0cmV0dXJuICEhdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0J1xufVxuXG5mdW5jdGlvbiBpc1NwZWNpYWwodmFsdWUpIHtcblx0dmFyIHN0cmluZ1ZhbHVlID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKTtcblxuXHRyZXR1cm4gc3RyaW5nVmFsdWUgPT09ICdbb2JqZWN0IFJlZ0V4cF0nXG5cdFx0fHwgc3RyaW5nVmFsdWUgPT09ICdbb2JqZWN0IERhdGVdJ1xuXHRcdHx8IGlzUmVhY3RFbGVtZW50KHZhbHVlKVxufVxuXG4vLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2Jsb2IvYjVhYzk2M2ZiNzkxZDEyOThlN2YzOTYyMzYzODNiYzk1NWY5MTZjMS9zcmMvaXNvbW9ycGhpYy9jbGFzc2ljL2VsZW1lbnQvUmVhY3RFbGVtZW50LmpzI0wyMS1MMjVcbnZhciBjYW5Vc2VTeW1ib2wgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5mb3I7XG52YXIgUkVBQ1RfRUxFTUVOVF9UWVBFID0gY2FuVXNlU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuZWxlbWVudCcpIDogMHhlYWM3O1xuXG5mdW5jdGlvbiBpc1JlYWN0RWxlbWVudCh2YWx1ZSkge1xuXHRyZXR1cm4gdmFsdWUuJCR0eXBlb2YgPT09IFJFQUNUX0VMRU1FTlRfVFlQRVxufVxuXG5mdW5jdGlvbiBlbXB0eVRhcmdldCh2YWwpIHtcblx0cmV0dXJuIEFycmF5LmlzQXJyYXkodmFsKSA/IFtdIDoge31cbn1cblxuZnVuY3Rpb24gY2xvbmVVbmxlc3NPdGhlcndpc2VTcGVjaWZpZWQodmFsdWUsIG9wdGlvbnMpIHtcblx0cmV0dXJuIChvcHRpb25zLmNsb25lICE9PSBmYWxzZSAmJiBvcHRpb25zLmlzTWVyZ2VhYmxlT2JqZWN0KHZhbHVlKSlcblx0XHQ/IGRlZXBtZXJnZShlbXB0eVRhcmdldCh2YWx1ZSksIHZhbHVlLCBvcHRpb25zKVxuXHRcdDogdmFsdWVcbn1cblxuZnVuY3Rpb24gZGVmYXVsdEFycmF5TWVyZ2UodGFyZ2V0LCBzb3VyY2UsIG9wdGlvbnMpIHtcblx0cmV0dXJuIHRhcmdldC5jb25jYXQoc291cmNlKS5tYXAoZnVuY3Rpb24oZWxlbWVudCkge1xuXHRcdHJldHVybiBjbG9uZVVubGVzc090aGVyd2lzZVNwZWNpZmllZChlbGVtZW50LCBvcHRpb25zKVxuXHR9KVxufVxuXG5mdW5jdGlvbiBnZXRNZXJnZUZ1bmN0aW9uKGtleSwgb3B0aW9ucykge1xuXHRpZiAoIW9wdGlvbnMuY3VzdG9tTWVyZ2UpIHtcblx0XHRyZXR1cm4gZGVlcG1lcmdlXG5cdH1cblx0dmFyIGN1c3RvbU1lcmdlID0gb3B0aW9ucy5jdXN0b21NZXJnZShrZXkpO1xuXHRyZXR1cm4gdHlwZW9mIGN1c3RvbU1lcmdlID09PSAnZnVuY3Rpb24nID8gY3VzdG9tTWVyZ2UgOiBkZWVwbWVyZ2Vcbn1cblxuZnVuY3Rpb24gZ2V0RW51bWVyYWJsZU93blByb3BlcnR5U3ltYm9scyh0YXJnZXQpIHtcblx0cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHNcblx0XHQ/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModGFyZ2V0KS5maWx0ZXIoZnVuY3Rpb24oc3ltYm9sKSB7XG5cdFx0XHRyZXR1cm4gdGFyZ2V0LnByb3BlcnR5SXNFbnVtZXJhYmxlKHN5bWJvbClcblx0XHR9KVxuXHRcdDogW11cbn1cblxuZnVuY3Rpb24gZ2V0S2V5cyh0YXJnZXQpIHtcblx0cmV0dXJuIE9iamVjdC5rZXlzKHRhcmdldCkuY29uY2F0KGdldEVudW1lcmFibGVPd25Qcm9wZXJ0eVN5bWJvbHModGFyZ2V0KSlcbn1cblxuZnVuY3Rpb24gcHJvcGVydHlJc09uT2JqZWN0KG9iamVjdCwgcHJvcGVydHkpIHtcblx0dHJ5IHtcblx0XHRyZXR1cm4gcHJvcGVydHkgaW4gb2JqZWN0XG5cdH0gY2F0Y2goXykge1xuXHRcdHJldHVybiBmYWxzZVxuXHR9XG59XG5cbi8vIFByb3RlY3RzIGZyb20gcHJvdG90eXBlIHBvaXNvbmluZyBhbmQgdW5leHBlY3RlZCBtZXJnaW5nIHVwIHRoZSBwcm90b3R5cGUgY2hhaW4uXG5mdW5jdGlvbiBwcm9wZXJ0eUlzVW5zYWZlKHRhcmdldCwga2V5KSB7XG5cdHJldHVybiBwcm9wZXJ0eUlzT25PYmplY3QodGFyZ2V0LCBrZXkpIC8vIFByb3BlcnRpZXMgYXJlIHNhZmUgdG8gbWVyZ2UgaWYgdGhleSBkb24ndCBleGlzdCBpbiB0aGUgdGFyZ2V0IHlldCxcblx0XHQmJiAhKE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRhcmdldCwga2V5KSAvLyB1bnNhZmUgaWYgdGhleSBleGlzdCB1cCB0aGUgcHJvdG90eXBlIGNoYWluLFxuXHRcdFx0JiYgT2JqZWN0LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwodGFyZ2V0LCBrZXkpKSAvLyBhbmQgYWxzbyB1bnNhZmUgaWYgdGhleSdyZSBub25lbnVtZXJhYmxlLlxufVxuXG5mdW5jdGlvbiBtZXJnZU9iamVjdCh0YXJnZXQsIHNvdXJjZSwgb3B0aW9ucykge1xuXHR2YXIgZGVzdGluYXRpb24gPSB7fTtcblx0aWYgKG9wdGlvbnMuaXNNZXJnZWFibGVPYmplY3QodGFyZ2V0KSkge1xuXHRcdGdldEtleXModGFyZ2V0KS5mb3JFYWNoKGZ1bmN0aW9uKGtleSkge1xuXHRcdFx0ZGVzdGluYXRpb25ba2V5XSA9IGNsb25lVW5sZXNzT3RoZXJ3aXNlU3BlY2lmaWVkKHRhcmdldFtrZXldLCBvcHRpb25zKTtcblx0XHR9KTtcblx0fVxuXHRnZXRLZXlzKHNvdXJjZSkuZm9yRWFjaChmdW5jdGlvbihrZXkpIHtcblx0XHRpZiAocHJvcGVydHlJc1Vuc2FmZSh0YXJnZXQsIGtleSkpIHtcblx0XHRcdHJldHVyblxuXHRcdH1cblxuXHRcdGlmIChwcm9wZXJ0eUlzT25PYmplY3QodGFyZ2V0LCBrZXkpICYmIG9wdGlvbnMuaXNNZXJnZWFibGVPYmplY3Qoc291cmNlW2tleV0pKSB7XG5cdFx0XHRkZXN0aW5hdGlvbltrZXldID0gZ2V0TWVyZ2VGdW5jdGlvbihrZXksIG9wdGlvbnMpKHRhcmdldFtrZXldLCBzb3VyY2Vba2V5XSwgb3B0aW9ucyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGRlc3RpbmF0aW9uW2tleV0gPSBjbG9uZVVubGVzc090aGVyd2lzZVNwZWNpZmllZChzb3VyY2Vba2V5XSwgb3B0aW9ucyk7XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIGRlc3RpbmF0aW9uXG59XG5cbmZ1bmN0aW9uIGRlZXBtZXJnZSh0YXJnZXQsIHNvdXJjZSwgb3B0aW9ucykge1xuXHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblx0b3B0aW9ucy5hcnJheU1lcmdlID0gb3B0aW9ucy5hcnJheU1lcmdlIHx8IGRlZmF1bHRBcnJheU1lcmdlO1xuXHRvcHRpb25zLmlzTWVyZ2VhYmxlT2JqZWN0ID0gb3B0aW9ucy5pc01lcmdlYWJsZU9iamVjdCB8fCBpc01lcmdlYWJsZU9iamVjdDtcblx0Ly8gY2xvbmVVbmxlc3NPdGhlcndpc2VTcGVjaWZpZWQgaXMgYWRkZWQgdG8gYG9wdGlvbnNgIHNvIHRoYXQgY3VzdG9tIGFycmF5TWVyZ2UoKVxuXHQvLyBpbXBsZW1lbnRhdGlvbnMgY2FuIHVzZSBpdC4gVGhlIGNhbGxlciBtYXkgbm90IHJlcGxhY2UgaXQuXG5cdG9wdGlvbnMuY2xvbmVVbmxlc3NPdGhlcndpc2VTcGVjaWZpZWQgPSBjbG9uZVVubGVzc090aGVyd2lzZVNwZWNpZmllZDtcblxuXHR2YXIgc291cmNlSXNBcnJheSA9IEFycmF5LmlzQXJyYXkoc291cmNlKTtcblx0dmFyIHRhcmdldElzQXJyYXkgPSBBcnJheS5pc0FycmF5KHRhcmdldCk7XG5cdHZhciBzb3VyY2VBbmRUYXJnZXRUeXBlc01hdGNoID0gc291cmNlSXNBcnJheSA9PT0gdGFyZ2V0SXNBcnJheTtcblxuXHRpZiAoIXNvdXJjZUFuZFRhcmdldFR5cGVzTWF0Y2gpIHtcblx0XHRyZXR1cm4gY2xvbmVVbmxlc3NPdGhlcndpc2VTcGVjaWZpZWQoc291cmNlLCBvcHRpb25zKVxuXHR9IGVsc2UgaWYgKHNvdXJjZUlzQXJyYXkpIHtcblx0XHRyZXR1cm4gb3B0aW9ucy5hcnJheU1lcmdlKHRhcmdldCwgc291cmNlLCBvcHRpb25zKVxuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBtZXJnZU9iamVjdCh0YXJnZXQsIHNvdXJjZSwgb3B0aW9ucylcblx0fVxufVxuXG5kZWVwbWVyZ2UuYWxsID0gZnVuY3Rpb24gZGVlcG1lcmdlQWxsKGFycmF5LCBvcHRpb25zKSB7XG5cdGlmICghQXJyYXkuaXNBcnJheShhcnJheSkpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ2ZpcnN0IGFyZ3VtZW50IHNob3VsZCBiZSBhbiBhcnJheScpXG5cdH1cblxuXHRyZXR1cm4gYXJyYXkucmVkdWNlKGZ1bmN0aW9uKHByZXYsIG5leHQpIHtcblx0XHRyZXR1cm4gZGVlcG1lcmdlKHByZXYsIG5leHQsIG9wdGlvbnMpXG5cdH0sIHt9KVxufTtcblxudmFyIGRlZXBtZXJnZV8xID0gZGVlcG1lcmdlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGRlZXBtZXJnZV8xO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///160\n");
/***/ }),
/***/ 161:
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nfunction isObject(val) {\n return val !== null && typeof val === 'object';\n} // Base function to apply defaults\n\n\nfunction _defu(baseObj, defaults, merger) {\n if (!isObject(defaults)) {\n return _defu(baseObj, {}, merger);\n }\n\n var obj = Object.assign({}, defaults);\n\n for (var key in baseObj) {\n if (key === '__proto__' || key === 'constructor') {\n continue;\n }\n\n var val = baseObj[key];\n\n if (val === null) {\n continue;\n }\n\n if (merger && merger(obj, key, val)) {\n continue;\n }\n\n if (Array.isArray(val) && Array.isArray(obj[key])) {\n obj[key] = obj[key].concat(val);\n } else if (isObject(val) && isObject(obj[key])) {\n obj[key] = _defu(val, obj[key], merger);\n } else {\n obj[key] = val;\n }\n }\n\n return obj;\n} // Create defu wrapper with optional merger and multi arg support\n\n\nfunction extend(merger) {\n return function () {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return args.reduce(function (p, c) {\n return _defu(p, c, merger);\n }, {});\n };\n} // Basic version\n\n\nvar defu = extend(); // Custom version with function merge support\n\ndefu.fn = extend(function (obj, key, currentValue) {\n if (typeof obj[key] !== 'undefined' && typeof currentValue === 'function') {\n obj[key] = currentValue(obj[key]);\n return true;\n }\n}); // Custom version with function merge support only for defined arrays\n\ndefu.arrayFn = extend(function (obj, key, currentValue) {\n if (Array.isArray(obj[key]) && typeof currentValue === 'function') {\n obj[key] = currentValue(obj[key]);\n return true;\n }\n}); // Support user extending\n\ndefu.extend = extend;\n\nmodule.exports = defu;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZGVmdS9kaXN0L2RlZnUuanM/YzkzOSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EsQ0FBQzs7O0FBR0Q7QUFDQTtBQUNBLDRCQUE0QjtBQUM1Qjs7QUFFQSw0QkFBNEI7O0FBRTVCO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOzs7QUFHRDtBQUNBO0FBQ0EsdUVBQXVFLGFBQWE7QUFDcEY7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSyxJQUFJO0FBQ1Q7QUFDQSxDQUFDOzs7QUFHRCxvQkFBb0I7O0FBRXBCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLEVBQUU7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsRUFBRTs7QUFFSDs7QUFFQSIsImZpbGUiOiIxNjEuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmZ1bmN0aW9uIGlzT2JqZWN0KHZhbCkge1xuICByZXR1cm4gdmFsICE9PSBudWxsICYmIHR5cGVvZiB2YWwgPT09ICdvYmplY3QnO1xufSAvLyBCYXNlIGZ1bmN0aW9uIHRvIGFwcGx5IGRlZmF1bHRzXG5cblxuZnVuY3Rpb24gX2RlZnUoYmFzZU9iaiwgZGVmYXVsdHMsIG1lcmdlcikge1xuICBpZiAoIWlzT2JqZWN0KGRlZmF1bHRzKSkge1xuICAgIHJldHVybiBfZGVmdShiYXNlT2JqLCB7fSwgbWVyZ2VyKTtcbiAgfVxuXG4gIHZhciBvYmogPSBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0cyk7XG5cbiAgZm9yICh2YXIga2V5IGluIGJhc2VPYmopIHtcbiAgICBpZiAoa2V5ID09PSAnX19wcm90b19fJyB8fCBrZXkgPT09ICdjb25zdHJ1Y3RvcicpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHZhciB2YWwgPSBiYXNlT2JqW2tleV07XG5cbiAgICBpZiAodmFsID09PSBudWxsKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAobWVyZ2VyICYmIG1lcmdlcihvYmosIGtleSwgdmFsKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSAmJiBBcnJheS5pc0FycmF5KG9ialtrZXldKSkge1xuICAgICAgb2JqW2tleV0gPSBvYmpba2V5XS5jb25jYXQodmFsKTtcbiAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KHZhbCkgJiYgaXNPYmplY3Qob2JqW2tleV0pKSB7XG4gICAgICBvYmpba2V5XSA9IF9kZWZ1KHZhbCwgb2JqW2tleV0sIG1lcmdlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9ialtrZXldID0gdmFsO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvYmo7XG59IC8vIENyZWF0ZSBkZWZ1IHdyYXBwZXIgd2l0aCBvcHRpb25hbCBtZXJnZXIgYW5kIG11bHRpIGFyZyBzdXBwb3J0XG5cblxuZnVuY3Rpb24gZXh0ZW5kKG1lcmdlcikge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXJncy5yZWR1Y2UoZnVuY3Rpb24gKHAsIGMpIHtcbiAgICAgIHJldHVybiBfZGVmdShwLCBjLCBtZXJnZXIpO1xuICAgIH0sIHt9KTtcbiAgfTtcbn0gLy8gQmFzaWMgdmVyc2lvblxuXG5cbnZhciBkZWZ1ID0gZXh0ZW5kKCk7IC8vIEN1c3RvbSB2ZXJzaW9uIHdpdGggZnVuY3Rpb24gbWVyZ2Ugc3VwcG9ydFxuXG5kZWZ1LmZuID0gZXh0ZW5kKGZ1bmN0aW9uIChvYmosIGtleSwgY3VycmVudFZhbHVlKSB7XG4gIGlmICh0eXBlb2Ygb2JqW2tleV0gIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBjdXJyZW50VmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICBvYmpba2V5XSA9IGN1cnJlbnRWYWx1ZShvYmpba2V5XSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn0pOyAvLyBDdXN0b20gdmVyc2lvbiB3aXRoIGZ1bmN0aW9uIG1lcmdlIHN1cHBvcnQgb25seSBmb3IgZGVmaW5lZCBhcnJheXNcblxuZGVmdS5hcnJheUZuID0gZXh0ZW5kKGZ1bmN0aW9uIChvYmosIGtleSwgY3VycmVudFZhbHVlKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KG9ialtrZXldKSAmJiB0eXBlb2YgY3VycmVudFZhbHVlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgb2JqW2tleV0gPSBjdXJyZW50VmFsdWUob2JqW2tleV0pO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59KTsgLy8gU3VwcG9ydCB1c2VyIGV4dGVuZGluZ1xuXG5kZWZ1LmV4dGVuZCA9IGV4dGVuZDtcblxubW9kdWxlLmV4cG9ydHMgPSBkZWZ1O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///161\n");
/***/ }),
/***/ 165:
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("/* WEBPACK VAR INJECTION */(function(global) {/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\n/* eslint-disable no-proto */\n\n\n\nvar base64 = __webpack_require__(221)\nvar ieee754 = __webpack_require__(222)\nvar isArray = __webpack_require__(223)\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Use Object implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * Due to various browser bugs, sometimes the Object implementation will be used even\n * when the browser supports typed arrays.\n *\n * Note:\n *\n * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,\n * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.\n *\n * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.\n *\n * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of\n * incorrect length in some situations.\n\n * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they\n * get the Object implementation, which is slower but behaves correctly.\n */\nBuffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined\n ? global.TYPED_ARRAY_SUPPORT\n : typedArraySupport()\n\n/*\n * Export kMaxLength after typed array support is determined.\n */\nexports.kMaxLength = kMaxLength()\n\nfunction typedArraySupport () {\n try {\n var arr = new Uint8Array(1)\n arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}\n return arr.foo() === 42 && // typed array instances can be augmented\n typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`\n arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`\n } catch (e) {\n return false\n }\n}\n\nfunction kMaxLength () {\n return Buffer.TYPED_ARRAY_SUPPORT\n ? 0x7fffffff\n : 0x3fffffff\n}\n\nfunction createBuffer (that, length) {\n if (kMaxLength() < length) {\n throw new RangeError('Invalid typed array length')\n }\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = new Uint8Array(length)\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n if (that === null) {\n that = new Buffer(length)\n }\n that.length = length\n }\n\n return that\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {\n return new Buffer(arg, encodingOrOffset, length)\n }\n\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new Error(\n 'If encoding is specified then the first argument must be a string'\n )\n }\n return allocUnsafe(this, arg)\n }\n return from(this, arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\n// TODO: Legacy, not needed anymore. Remove in next major version.\nBuffer._augment = function (arr) {\n arr.__proto__ = Buffer.prototype\n return arr\n}\n\nfunction from (that, value, encodingOrOffset, length) {\n if (typeof value === 'number') {\n throw new TypeError('\"value\" argument must not be a number')\n }\n\n if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {\n return fromArrayBuffer(that, value, encodingOrOffset, length)\n }\n\n if (typeof value === 'string') {\n return fromString(that, value, encodingOrOffset)\n }\n\n return fromObject(that, value)\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(null, value, encodingOrOffset, length)\n}\n\nif (Buffer.TYPED_ARRAY_SUPPORT) {\n Buffer.prototype.__proto__ = Uint8Array.prototype\n Buffer.__proto__ = Uint8Array\n if (typeof Symbol !== 'undefined' && Symbol.species &&\n Buffer[Symbol.species] === Buffer) {\n // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97\n Object.defineProperty(Buffer, Symbol.species, {\n value: null,\n configurable: true\n })\n }\n}\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be a number')\n } else if (size < 0) {\n throw new RangeError('\"size\" argument must not be negative')\n }\n}\n\nfunction alloc (that, size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(that, size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpretted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(that, size).fill(fill, encoding)\n : createBuffer(that, size).fill(fill)\n }\n return createBuffer(that, size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(null, size, fill, encoding)\n}\n\nfunction allocUnsafe (that, size) {\n assertSize(size)\n that = createBuffer(that, size < 0 ? 0 : checked(size) | 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) {\n for (var i = 0; i < size; ++i) {\n that[i] = 0\n }\n }\n return that\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(null, size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(null, size)\n}\n\nfunction fromString (that, string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('\"encoding\" must be a valid string encoding')\n }\n\n var length = byteLength(string, encoding) | 0\n that = createBuffer(that, length)\n\n var actual = that.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n that = that.slice(0, actual)\n }\n\n return that\n}\n\nfunction fromArrayLike (that, array) {\n var length = array.length < 0 ? 0 : checked(array.length) | 0\n that = createBuffer(that, length)\n for (var i = 0; i < length; i += 1) {\n that[i] = array[i] & 255\n }\n return that\n}\n\nfunction fromArrayBuffer (that, array, byteOffset, length) {\n array.byteLength // this throws if `array` is not a valid ArrayBuffer\n\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\\'offset\\' is out of bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\\'length\\' is out of bounds')\n }\n\n if (byteOffset === undefined && length === undefined) {\n array = new Uint8Array(array)\n } else if (length === undefined) {\n array = new Uint8Array(array, byteOffset)\n } else {\n array = new Uint8Array(array, byteOffset, length)\n }\n\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = array\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n that = fromArrayLike(that, array)\n }\n return that\n}\n\nfunction fromObject (that, obj) {\n if (Buffer.isBuffer(obj)) {\n var len = checked(obj.length) | 0\n that = createBuffer(that, len)\n\n if (that.length === 0) {\n return that\n }\n\n obj.copy(that, 0, 0, len)\n return that\n }\n\n if (obj) {\n if ((typeof ArrayBuffer !== 'undefined' &&\n obj.buffer instanceof ArrayBuffer) || 'length' in obj) {\n if (typeof obj.length !== 'number' || isnan(obj.length)) {\n return createBuffer(that, 0)\n }\n return fromArrayLike(that, obj)\n }\n\n if (obj.type === 'Buffer' && isArray(obj.data)) {\n return fromArrayLike(that, obj.data)\n }\n }\n\n throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')\n}\n\nfunction checked (length) {\n // Note: cannot use `length < kMaxLength()` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= kMaxLength()) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + kMaxLength().toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return !!(b != null && b._isBuffer)\n}\n\nBuffer.compare = function compare (a, b) {\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError('Arguments must be Buffers')\n }\n\n if (a === b) return 0\n\n var x = a.length\n var y = b.length\n\n for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n var i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n var buffer = Buffer.allocUnsafe(length)\n var pos = 0\n for (i = 0; i < list.length; ++i) {\n var buf = list[i]\n if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n buf.copy(buffer, pos)\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&\n (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n string = '' + string\n }\n\n var len = string.length\n if (len === 0) return 0\n\n // Use a for loop to avoid recursion\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n case undefined:\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) return utf8ToBytes(string).length // assume utf8\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n var loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coersion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect\n// Buffer instances.\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n var i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n var len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (var i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n var len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (var i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n var len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (var i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n var length = this.length | 0\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n var str = ''\n var max = exports.INSPECT_MAX_BYTES\n if (this.length > 0) {\n str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')\n if (this.length > max) str += ' ... '\n }\n return ''\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (!Buffer.isBuffer(target)) {\n throw new TypeError('Argument must be a Buffer')\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n var x = thisEnd - thisStart\n var y = end - start\n var len = Math.min(x, y)\n\n var thisCopy = this.slice(thisStart, thisEnd)\n var targetCopy = target.slice(start, end)\n\n for (var i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (isNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (Buffer.TYPED_ARRAY_SUPPORT &&\n typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n var indexSize = 1\n var arrLength = arr.length\n var valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n var i\n if (dir) {\n var foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n var found = true\n for (var j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n var remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n // must be an even number of digits\n var strLen = string.length\n if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n for (var i = 0; i < length; ++i) {\n var parsed = parseInt(string.substr(i * 2, 2), 16)\n if (isNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction latin1Write (buf, string, offset, length) {\n return asciiWrite(buf, string, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset | 0\n if (isFinite(length)) {\n length = length | 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n // legacy write(string, encoding, offset, length) - remove in v0.13\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n var remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n return asciiWrite(this, string, offset, length)\n\n case 'latin1':\n case 'binary':\n return latin1Write(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n var res = []\n\n var i = start\n while (i < end) {\n var firstByte = buf[i]\n var codePoint = null\n var bytesPerSequence = (firstByte > 0xEF) ? 4\n : (firstByte > 0xDF) ? 3\n : (firstByte > 0xBF) ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n var secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n var len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n var res = ''\n var i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n var len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n var out = ''\n for (var i = start; i < end; ++i) {\n out += toHex(buf[i])\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n var bytes = buf.slice(start, end)\n var res = ''\n for (var i = 0; i < bytes.length; i += 2) {\n res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n var len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n var newBuf\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n newBuf = this.subarray(start, end)\n newBuf.__proto__ = Buffer.prototype\n } else {\n var sliceLen = end - start\n newBuf = new Buffer(sliceLen, undefined)\n for (var i = 0; i < sliceLen; ++i) {\n newBuf[i] = this[i + start]\n }\n }\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n var val = this[offset + --byteLength]\n var mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var i = byteLength\n var mul = 1\n var val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var mul = 1\n var i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var i = byteLength - 1\n var mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nfunction objectWriteUInt16 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {\n buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>\n (littleEndian ? i : 1 - i) * 8\n }\n}\n\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nfunction objectWriteUInt32 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffffffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {\n buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff\n }\n}\n\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = 0\n var mul = 1\n var sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = byteLength - 1\n var mul = 1\n var sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n var len = end - start\n var i\n\n if (this === target && start < targetStart && targetStart < end) {\n // descending copy from end\n for (i = len - 1; i >= 0; --i) {\n target[i + targetStart] = this[i + start]\n }\n } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {\n // ascending copy from start\n for (i = 0; i < len; ++i) {\n target[i + targetStart] = this[i + start]\n }\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, start + len),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (val.length === 1) {\n var code = val.charCodeAt(0)\n if (code < 256) {\n val = code\n }\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n } else if (typeof val === 'number') {\n val = val & 255\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n var i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n var bytes = Buffer.isBuffer(val)\n ? val\n : utf8ToBytes(new Buffer(val, encoding).toString())\n var len = bytes.length\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+\\/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = stringtrim(str).replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction stringtrim (str) {\n if (str.trim) return str.trim()\n return str.replace(/^\\s+|\\s+$/g, '')\n}\n\nfunction toHex (n) {\n if (n < 16) return '0' + n.toString(16)\n return n.toString(16)\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n var codePoint\n var length = string.length\n var leadSurrogate = null\n var bytes = []\n\n for (var i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n var c, hi, lo\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n for (var i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\nfunction isnan (val) {\n return val !== val // eslint-disable-line no-self-compare\n}\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(52)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYnVmZmVyL2luZGV4LmpzP2I2MzkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRVk7O0FBRVosYUFBYSxtQkFBTyxDQUFDLEdBQVc7QUFDaEMsY0FBYyxtQkFBTyxDQUFDLEdBQVM7QUFDL0IsY0FBYyxtQkFBTyxDQUFDLEdBQVM7O0FBRS9CO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsbURBQW1EO0FBQ3hFO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsVUFBVTtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsWUFBWTtBQUM3QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMEJBQTBCO0FBQzFCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLHVDQUF1QyxTQUFTO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsaUJBQWlCO0FBQ2hDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsYUFBYSxpQkFBaUI7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLFNBQVM7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixTQUFTO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixTQUFTO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0RBQWdELEVBQUU7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsaUJBQWlCLFNBQVM7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlDQUF5QztBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLGVBQWU7QUFDdkM7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0Esd0JBQXdCLFFBQVE7QUFDaEM7QUFDQSxxQkFBcUIsZUFBZTtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsWUFBWTtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEscUJBQXFCLFNBQVM7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHFCQUFxQixTQUFTO0FBQzlCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLHFCQUFxQixTQUFTO0FBQzlCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixrQkFBa0I7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLG1CQUFtQixjQUFjO0FBQ2pDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx1REFBdUQsT0FBTztBQUM5RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsdURBQXVELE9BQU87QUFDOUQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsa0JBQWtCO0FBQ2xCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EscUJBQXFCLFFBQVE7QUFDN0I7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLGVBQWUsU0FBUztBQUN4QjtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLG1CQUFtQixTQUFTO0FBQzVCO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGlCQUFpQjtBQUNoQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlCQUFpQixZQUFZO0FBQzdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxpQkFBaUIsZ0JBQWdCO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLGdCQUFnQjtBQUNqQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxpQkFBaUIsWUFBWTtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsImZpbGUiOiIxNjUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIFRoZSBidWZmZXIgbW9kdWxlIGZyb20gbm9kZS5qcywgZm9yIHRoZSBicm93c2VyLlxuICpcbiAqIEBhdXRob3IgICBGZXJvc3MgQWJvdWtoYWRpamVoIDxodHRwOi8vZmVyb3NzLm9yZz5cbiAqIEBsaWNlbnNlICBNSVRcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tcHJvdG8gKi9cblxuJ3VzZSBzdHJpY3QnXG5cbnZhciBiYXNlNjQgPSByZXF1aXJlKCdiYXNlNjQtanMnKVxudmFyIGllZWU3NTQgPSByZXF1aXJlKCdpZWVlNzU0JylcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnaXNhcnJheScpXG5cbmV4cG9ydHMuQnVmZmVyID0gQnVmZmVyXG5leHBvcnRzLlNsb3dCdWZmZXIgPSBTbG93QnVmZmVyXG5leHBvcnRzLklOU1BFQ1RfTUFYX0JZVEVTID0gNTBcblxuLyoqXG4gKiBJZiBgQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlRgOlxuICogICA9PT0gdHJ1ZSAgICBVc2UgVWludDhBcnJheSBpbXBsZW1lbnRhdGlvbiAoZmFzdGVzdClcbiAqICAgPT09IGZhbHNlICAgVXNlIE9iamVjdCBpbXBsZW1lbnRhdGlvbiAobW9zdCBjb21wYXRpYmxlLCBldmVuIElFNilcbiAqXG4gKiBCcm93c2VycyB0aGF0IHN1cHBvcnQgdHlwZWQgYXJyYXlzIGFyZSBJRSAxMCssIEZpcmVmb3ggNCssIENocm9tZSA3KywgU2FmYXJpIDUuMSssXG4gKiBPcGVyYSAxMS42KywgaU9TIDQuMisuXG4gKlxuICogRHVlIHRvIHZhcmlvdXMgYnJvd3NlciBidWdzLCBzb21ldGltZXMgdGhlIE9iamVjdCBpbXBsZW1lbnRhdGlvbiB3aWxsIGJlIHVzZWQgZXZlblxuICogd2hlbiB0aGUgYnJvd3NlciBzdXBwb3J0cyB0eXBlZCBhcnJheXMuXG4gKlxuICogTm90ZTpcbiAqXG4gKiAgIC0gRmlyZWZveCA0LTI5IGxhY2tzIHN1cHBvcnQgZm9yIGFkZGluZyBuZXcgcHJvcGVydGllcyB0byBgVWludDhBcnJheWAgaW5zdGFuY2VzLFxuICogICAgIFNlZTogaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njk1NDM4LlxuICpcbiAqICAgLSBDaHJvbWUgOS0xMCBpcyBtaXNzaW5nIHRoZSBgVHlwZWRBcnJheS5wcm90b3R5cGUuc3ViYXJyYXlgIGZ1bmN0aW9uLlxuICpcbiAqICAgLSBJRTEwIGhhcyBhIGJyb2tlbiBgVHlwZWRBcnJheS5wcm90b3R5cGUuc3ViYXJyYXlgIGZ1bmN0aW9uIHdoaWNoIHJldHVybnMgYXJyYXlzIG9mXG4gKiAgICAgaW5jb3JyZWN0IGxlbmd0aCBpbiBzb21lIHNpdHVhdGlvbnMuXG5cbiAqIFdlIGRldGVjdCB0aGVzZSBidWdneSBicm93c2VycyBhbmQgc2V0IGBCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVGAgdG8gYGZhbHNlYCBzbyB0aGV5XG4gKiBnZXQgdGhlIE9iamVjdCBpbXBsZW1lbnRhdGlvbiwgd2hpY2ggaXMgc2xvd2VyIGJ1dCBiZWhhdmVzIGNvcnJlY3RseS5cbiAqL1xuQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQgPSBnbG9iYWwuVFlQRURfQVJSQVlfU1VQUE9SVCAhPT0gdW5kZWZpbmVkXG4gID8gZ2xvYmFsLlRZUEVEX0FSUkFZX1NVUFBPUlRcbiAgOiB0eXBlZEFycmF5U3VwcG9ydCgpXG5cbi8qXG4gKiBFeHBvcnQga01heExlbmd0aCBhZnRlciB0eXBlZCBhcnJheSBzdXBwb3J0IGlzIGRldGVybWluZWQuXG4gKi9cbmV4cG9ydHMua01heExlbmd0aCA9IGtNYXhMZW5ndGgoKVxuXG5mdW5jdGlvbiB0eXBlZEFycmF5U3VwcG9ydCAoKSB7XG4gIHRyeSB7XG4gICAgdmFyIGFyciA9IG5ldyBVaW50OEFycmF5KDEpXG4gICAgYXJyLl9fcHJvdG9fXyA9IHtfX3Byb3RvX186IFVpbnQ4QXJyYXkucHJvdG90eXBlLCBmb286IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDQyIH19XG4gICAgcmV0dXJuIGFyci5mb28oKSA9PT0gNDIgJiYgLy8gdHlwZWQgYXJyYXkgaW5zdGFuY2VzIGNhbiBiZSBhdWdtZW50ZWRcbiAgICAgICAgdHlwZW9mIGFyci5zdWJhcnJheSA9PT0gJ2Z1bmN0aW9uJyAmJiAvLyBjaHJvbWUgOS0xMCBsYWNrIGBzdWJhcnJheWBcbiAgICAgICAgYXJyLnN1YmFycmF5KDEsIDEpLmJ5dGVMZW5ndGggPT09IDAgLy8gaWUxMCBoYXMgYnJva2VuIGBzdWJhcnJheWBcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbmZ1bmN0aW9uIGtNYXhMZW5ndGggKCkge1xuICByZXR1cm4gQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlRcbiAgICA/IDB4N2ZmZmZmZmZcbiAgICA6IDB4M2ZmZmZmZmZcbn1cblxuZnVuY3Rpb24gY3JlYXRlQnVmZmVyICh0aGF0LCBsZW5ndGgpIHtcbiAgaWYgKGtNYXhMZW5ndGgoKSA8IGxlbmd0aCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbnZhbGlkIHR5cGVkIGFycmF5IGxlbmd0aCcpXG4gIH1cbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgLy8gUmV0dXJuIGFuIGF1Z21lbnRlZCBgVWludDhBcnJheWAgaW5zdGFuY2UsIGZvciBiZXN0IHBlcmZvcm1hbmNlXG4gICAgdGhhdCA9IG5ldyBVaW50OEFycmF5KGxlbmd0aClcbiAgICB0aGF0Ll9fcHJvdG9fXyA9IEJ1ZmZlci5wcm90b3R5cGVcbiAgfSBlbHNlIHtcbiAgICAvLyBGYWxsYmFjazogUmV0dXJuIGFuIG9iamVjdCBpbnN0YW5jZSBvZiB0aGUgQnVmZmVyIGNsYXNzXG4gICAgaWYgKHRoYXQgPT09IG51bGwpIHtcbiAgICAgIHRoYXQgPSBuZXcgQnVmZmVyKGxlbmd0aClcbiAgICB9XG4gICAgdGhhdC5sZW5ndGggPSBsZW5ndGhcbiAgfVxuXG4gIHJldHVybiB0aGF0XG59XG5cbi8qKlxuICogVGhlIEJ1ZmZlciBjb25zdHJ1Y3RvciByZXR1cm5zIGluc3RhbmNlcyBvZiBgVWludDhBcnJheWAgdGhhdCBoYXZlIHRoZWlyXG4gKiBwcm90b3R5cGUgY2hhbmdlZCB0byBgQnVmZmVyLnByb3RvdHlwZWAuIEZ1cnRoZXJtb3JlLCBgQnVmZmVyYCBpcyBhIHN1YmNsYXNzIG9mXG4gKiBgVWludDhBcnJheWAsIHNvIHRoZSByZXR1cm5lZCBpbnN0YW5jZXMgd2lsbCBoYXZlIGFsbCB0aGUgbm9kZSBgQnVmZmVyYCBtZXRob2RzXG4gKiBhbmQgdGhlIGBVaW50OEFycmF5YCBtZXRob2RzLiBTcXVhcmUgYnJhY2tldCBub3RhdGlvbiB3b3JrcyBhcyBleHBlY3RlZCAtLSBpdFxuICogcmV0dXJucyBhIHNpbmdsZSBvY3RldC5cbiAqXG4gKiBUaGUgYFVpbnQ4QXJyYXlgIHByb3RvdHlwZSByZW1haW5zIHVubW9kaWZpZWQuXG4gKi9cblxuZnVuY3Rpb24gQnVmZmVyIChhcmcsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCkge1xuICBpZiAoIUJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUICYmICEodGhpcyBpbnN0YW5jZW9mIEJ1ZmZlcikpIHtcbiAgICByZXR1cm4gbmV3IEJ1ZmZlcihhcmcsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbiAgfVxuXG4gIC8vIENvbW1vbiBjYXNlLlxuICBpZiAodHlwZW9mIGFyZyA9PT0gJ251bWJlcicpIHtcbiAgICBpZiAodHlwZW9mIGVuY29kaW5nT3JPZmZzZXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdJZiBlbmNvZGluZyBpcyBzcGVjaWZpZWQgdGhlbiB0aGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZydcbiAgICAgIClcbiAgICB9XG4gICAgcmV0dXJuIGFsbG9jVW5zYWZlKHRoaXMsIGFyZylcbiAgfVxuICByZXR1cm4gZnJvbSh0aGlzLCBhcmcsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbn1cblxuQnVmZmVyLnBvb2xTaXplID0gODE5MiAvLyBub3QgdXNlZCBieSB0aGlzIGltcGxlbWVudGF0aW9uXG5cbi8vIFRPRE86IExlZ2FjeSwgbm90IG5lZWRlZCBhbnltb3JlLiBSZW1vdmUgaW4gbmV4dCBtYWpvciB2ZXJzaW9uLlxuQnVmZmVyLl9hdWdtZW50ID0gZnVuY3Rpb24gKGFycikge1xuICBhcnIuX19wcm90b19fID0gQnVmZmVyLnByb3RvdHlwZVxuICByZXR1cm4gYXJyXG59XG5cbmZ1bmN0aW9uIGZyb20gKHRoYXQsIHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcInZhbHVlXCIgYXJndW1lbnQgbXVzdCBub3QgYmUgYSBudW1iZXInKVxuICB9XG5cbiAgaWYgKHR5cGVvZiBBcnJheUJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcgJiYgdmFsdWUgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikge1xuICAgIHJldHVybiBmcm9tQXJyYXlCdWZmZXIodGhhdCwgdmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbiAgfVxuXG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGZyb21TdHJpbmcodGhhdCwgdmFsdWUsIGVuY29kaW5nT3JPZmZzZXQpXG4gIH1cblxuICByZXR1cm4gZnJvbU9iamVjdCh0aGF0LCB2YWx1ZSlcbn1cblxuLyoqXG4gKiBGdW5jdGlvbmFsbHkgZXF1aXZhbGVudCB0byBCdWZmZXIoYXJnLCBlbmNvZGluZykgYnV0IHRocm93cyBhIFR5cGVFcnJvclxuICogaWYgdmFsdWUgaXMgYSBudW1iZXIuXG4gKiBCdWZmZXIuZnJvbShzdHJbLCBlbmNvZGluZ10pXG4gKiBCdWZmZXIuZnJvbShhcnJheSlcbiAqIEJ1ZmZlci5mcm9tKGJ1ZmZlcilcbiAqIEJ1ZmZlci5mcm9tKGFycmF5QnVmZmVyWywgYnl0ZU9mZnNldFssIGxlbmd0aF1dKVxuICoqL1xuQnVmZmVyLmZyb20gPSBmdW5jdGlvbiAodmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gZnJvbShudWxsLCB2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxufVxuXG5pZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgQnVmZmVyLnByb3RvdHlwZS5fX3Byb3RvX18gPSBVaW50OEFycmF5LnByb3RvdHlwZVxuICBCdWZmZXIuX19wcm90b19fID0gVWludDhBcnJheVxuICBpZiAodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnNwZWNpZXMgJiZcbiAgICAgIEJ1ZmZlcltTeW1ib2wuc3BlY2llc10gPT09IEJ1ZmZlcikge1xuICAgIC8vIEZpeCBzdWJhcnJheSgpIGluIEVTMjAxNi4gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZmVyb3NzL2J1ZmZlci9wdWxsLzk3XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEJ1ZmZlciwgU3ltYm9sLnNwZWNpZXMsIHtcbiAgICAgIHZhbHVlOiBudWxsLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSlcbiAgfVxufVxuXG5mdW5jdGlvbiBhc3NlcnRTaXplIChzaXplKSB7XG4gIGlmICh0eXBlb2Ygc2l6ZSAhPT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcInNpemVcIiBhcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyJylcbiAgfSBlbHNlIGlmIChzaXplIDwgMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdcInNpemVcIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBuZWdhdGl2ZScpXG4gIH1cbn1cblxuZnVuY3Rpb24gYWxsb2MgKHRoYXQsIHNpemUsIGZpbGwsIGVuY29kaW5nKSB7XG4gIGFzc2VydFNpemUoc2l6ZSlcbiAgaWYgKHNpemUgPD0gMCkge1xuICAgIHJldHVybiBjcmVhdGVCdWZmZXIodGhhdCwgc2l6ZSlcbiAgfVxuICBpZiAoZmlsbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgLy8gT25seSBwYXkgYXR0ZW50aW9uIHRvIGVuY29kaW5nIGlmIGl0J3MgYSBzdHJpbmcuIFRoaXNcbiAgICAvLyBwcmV2ZW50cyBhY2NpZGVudGFsbHkgc2VuZGluZyBpbiBhIG51bWJlciB0aGF0IHdvdWxkXG4gICAgLy8gYmUgaW50ZXJwcmV0dGVkIGFzIGEgc3RhcnQgb2Zmc2V0LlxuICAgIHJldHVybiB0eXBlb2YgZW5jb2RpbmcgPT09ICdzdHJpbmcnXG4gICAgICA/IGNyZWF0ZUJ1ZmZlcih0aGF0LCBzaXplKS5maWxsKGZpbGwsIGVuY29kaW5nKVxuICAgICAgOiBjcmVhdGVCdWZmZXIodGhhdCwgc2l6ZSkuZmlsbChmaWxsKVxuICB9XG4gIHJldHVybiBjcmVhdGVCdWZmZXIodGhhdCwgc2l6ZSlcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IGZpbGxlZCBCdWZmZXIgaW5zdGFuY2UuXG4gKiBhbGxvYyhzaXplWywgZmlsbFssIGVuY29kaW5nXV0pXG4gKiovXG5CdWZmZXIuYWxsb2MgPSBmdW5jdGlvbiAoc2l6ZSwgZmlsbCwgZW5jb2RpbmcpIHtcbiAgcmV0dXJuIGFsbG9jKG51bGwsIHNpemUsIGZpbGwsIGVuY29kaW5nKVxufVxuXG5mdW5jdGlvbiBhbGxvY1Vuc2FmZSAodGhhdCwgc2l6ZSkge1xuICBhc3NlcnRTaXplKHNpemUpXG4gIHRoYXQgPSBjcmVhdGVCdWZmZXIodGhhdCwgc2l6ZSA8IDAgPyAwIDogY2hlY2tlZChzaXplKSB8IDApXG4gIGlmICghQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNpemU7ICsraSkge1xuICAgICAgdGhhdFtpXSA9IDBcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRoYXRcbn1cblxuLyoqXG4gKiBFcXVpdmFsZW50IHRvIEJ1ZmZlcihudW0pLCBieSBkZWZhdWx0IGNyZWF0ZXMgYSBub24temVyby1maWxsZWQgQnVmZmVyIGluc3RhbmNlLlxuICogKi9cbkJ1ZmZlci5hbGxvY1Vuc2FmZSA9IGZ1bmN0aW9uIChzaXplKSB7XG4gIHJldHVybiBhbGxvY1Vuc2FmZShudWxsLCBzaXplKVxufVxuLyoqXG4gKiBFcXVpdmFsZW50IHRvIFNsb3dCdWZmZXIobnVtKSwgYnkgZGVmYXVsdCBjcmVhdGVzIGEgbm9uLXplcm8tZmlsbGVkIEJ1ZmZlciBpbnN0YW5jZS5cbiAqL1xuQnVmZmVyLmFsbG9jVW5zYWZlU2xvdyA9IGZ1bmN0aW9uIChzaXplKSB7XG4gIHJldHVybiBhbGxvY1Vuc2FmZShudWxsLCBzaXplKVxufVxuXG5mdW5jdGlvbiBmcm9tU3RyaW5nICh0aGF0LCBzdHJpbmcsIGVuY29kaW5nKSB7XG4gIGlmICh0eXBlb2YgZW5jb2RpbmcgIT09ICdzdHJpbmcnIHx8IGVuY29kaW5nID09PSAnJykge1xuICAgIGVuY29kaW5nID0gJ3V0ZjgnXG4gIH1cblxuICBpZiAoIUJ1ZmZlci5pc0VuY29kaW5nKGVuY29kaW5nKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wiZW5jb2RpbmdcIiBtdXN0IGJlIGEgdmFsaWQgc3RyaW5nIGVuY29kaW5nJylcbiAgfVxuXG4gIHZhciBsZW5ndGggPSBieXRlTGVuZ3RoKHN0cmluZywgZW5jb2RpbmcpIHwgMFxuICB0aGF0ID0gY3JlYXRlQnVmZmVyKHRoYXQsIGxlbmd0aClcblxuICB2YXIgYWN0dWFsID0gdGhhdC53cml0ZShzdHJpbmcsIGVuY29kaW5nKVxuXG4gIGlmIChhY3R1YWwgIT09IGxlbmd0aCkge1xuICAgIC8vIFdyaXRpbmcgYSBoZXggc3RyaW5nLCBmb3IgZXhhbXBsZSwgdGhhdCBjb250YWlucyBpbnZhbGlkIGNoYXJhY3RlcnMgd2lsbFxuICAgIC8vIGNhdXNlIGV2ZXJ5dGhpbmcgYWZ0ZXIgdGhlIGZpcnN0IGludmFsaWQgY2hhcmFjdGVyIHRvIGJlIGlnbm9yZWQuIChlLmcuXG4gICAgLy8gJ2FieHhjZCcgd2lsbCBiZSB0cmVhdGVkIGFzICdhYicpXG4gICAgdGhhdCA9IHRoYXQuc2xpY2UoMCwgYWN0dWFsKVxuICB9XG5cbiAgcmV0dXJuIHRoYXRcbn1cblxuZnVuY3Rpb24gZnJvbUFycmF5TGlrZSAodGhhdCwgYXJyYXkpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCA8IDAgPyAwIDogY2hlY2tlZChhcnJheS5sZW5ndGgpIHwgMFxuICB0aGF0ID0gY3JlYXRlQnVmZmVyKHRoYXQsIGxlbmd0aClcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkgKz0gMSkge1xuICAgIHRoYXRbaV0gPSBhcnJheVtpXSAmIDI1NVxuICB9XG4gIHJldHVybiB0aGF0XG59XG5cbmZ1bmN0aW9uIGZyb21BcnJheUJ1ZmZlciAodGhhdCwgYXJyYXksIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICBhcnJheS5ieXRlTGVuZ3RoIC8vIHRoaXMgdGhyb3dzIGlmIGBhcnJheWAgaXMgbm90IGEgdmFsaWQgQXJyYXlCdWZmZXJcblxuICBpZiAoYnl0ZU9mZnNldCA8IDAgfHwgYXJyYXkuYnl0ZUxlbmd0aCA8IGJ5dGVPZmZzZXQpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignXFwnb2Zmc2V0XFwnIGlzIG91dCBvZiBib3VuZHMnKVxuICB9XG5cbiAgaWYgKGFycmF5LmJ5dGVMZW5ndGggPCBieXRlT2Zmc2V0ICsgKGxlbmd0aCB8fCAwKSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdcXCdsZW5ndGhcXCcgaXMgb3V0IG9mIGJvdW5kcycpXG4gIH1cblxuICBpZiAoYnl0ZU9mZnNldCA9PT0gdW5kZWZpbmVkICYmIGxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgYXJyYXkgPSBuZXcgVWludDhBcnJheShhcnJheSlcbiAgfSBlbHNlIGlmIChsZW5ndGggPT09IHVuZGVmaW5lZCkge1xuICAgIGFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXksIGJ5dGVPZmZzZXQpXG4gIH0gZWxzZSB7XG4gICAgYXJyYXkgPSBuZXcgVWludDhBcnJheShhcnJheSwgYnl0ZU9mZnNldCwgbGVuZ3RoKVxuICB9XG5cbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgLy8gUmV0dXJuIGFuIGF1Z21lbnRlZCBgVWludDhBcnJheWAgaW5zdGFuY2UsIGZvciBiZXN0IHBlcmZvcm1hbmNlXG4gICAgdGhhdCA9IGFycmF5XG4gICAgdGhhdC5fX3Byb3RvX18gPSBCdWZmZXIucHJvdG90eXBlXG4gIH0gZWxzZSB7XG4gICAgLy8gRmFsbGJhY2s6IFJldHVybiBhbiBvYmplY3QgaW5zdGFuY2Ugb2YgdGhlIEJ1ZmZlciBjbGFzc1xuICAgIHRoYXQgPSBmcm9tQXJyYXlMaWtlKHRoYXQsIGFycmF5KVxuICB9XG4gIHJldHVybiB0aGF0XG59XG5cbmZ1bmN0aW9uIGZyb21PYmplY3QgKHRoYXQsIG9iaikge1xuICBpZiAoQnVmZmVyLmlzQnVmZmVyKG9iaikpIHtcbiAgICB2YXIgbGVuID0gY2hlY2tlZChvYmoubGVuZ3RoKSB8IDBcbiAgICB0aGF0ID0gY3JlYXRlQnVmZmVyKHRoYXQsIGxlbilcblxuICAgIGlmICh0aGF0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHRoYXRcbiAgICB9XG5cbiAgICBvYmouY29weSh0aGF0LCAwLCAwLCBsZW4pXG4gICAgcmV0dXJuIHRoYXRcbiAgfVxuXG4gIGlmIChvYmopIHtcbiAgICBpZiAoKHR5cGVvZiBBcnJheUJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgb2JqLmJ1ZmZlciBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB8fCAnbGVuZ3RoJyBpbiBvYmopIHtcbiAgICAgIGlmICh0eXBlb2Ygb2JqLmxlbmd0aCAhPT0gJ251bWJlcicgfHwgaXNuYW4ob2JqLmxlbmd0aCkpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUJ1ZmZlcih0aGF0LCAwKVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZyb21BcnJheUxpa2UodGhhdCwgb2JqKVxuICAgIH1cblxuICAgIGlmIChvYmoudHlwZSA9PT0gJ0J1ZmZlcicgJiYgaXNBcnJheShvYmouZGF0YSkpIHtcbiAgICAgIHJldHVybiBmcm9tQXJyYXlMaWtlKHRoYXQsIG9iai5kYXRhKVxuICAgIH1cbiAgfVxuXG4gIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcsIEJ1ZmZlciwgQXJyYXlCdWZmZXIsIEFycmF5LCBvciBhcnJheS1saWtlIG9iamVjdC4nKVxufVxuXG5mdW5jdGlvbiBjaGVja2VkIChsZW5ndGgpIHtcbiAgLy8gTm90ZTogY2Fubm90IHVzZSBgbGVuZ3RoIDwga01heExlbmd0aCgpYCBoZXJlIGJlY2F1c2UgdGhhdCBmYWlscyB3aGVuXG4gIC8vIGxlbmd0aCBpcyBOYU4gKHdoaWNoIGlzIG90aGVyd2lzZSBjb2VyY2VkIHRvIHplcm8uKVxuICBpZiAobGVuZ3RoID49IGtNYXhMZW5ndGgoKSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdBdHRlbXB0IHRvIGFsbG9jYXRlIEJ1ZmZlciBsYXJnZXIgdGhhbiBtYXhpbXVtICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICdzaXplOiAweCcgKyBrTWF4TGVuZ3RoKCkudG9TdHJpbmcoMTYpICsgJyBieXRlcycpXG4gIH1cbiAgcmV0dXJuIGxlbmd0aCB8IDBcbn1cblxuZnVuY3Rpb24gU2xvd0J1ZmZlciAobGVuZ3RoKSB7XG4gIGlmICgrbGVuZ3RoICE9IGxlbmd0aCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGVxZXFlcVxuICAgIGxlbmd0aCA9IDBcbiAgfVxuICByZXR1cm4gQnVmZmVyLmFsbG9jKCtsZW5ndGgpXG59XG5cbkJ1ZmZlci5pc0J1ZmZlciA9IGZ1bmN0aW9uIGlzQnVmZmVyIChiKSB7XG4gIHJldHVybiAhIShiICE9IG51bGwgJiYgYi5faXNCdWZmZXIpXG59XG5cbkJ1ZmZlci5jb21wYXJlID0gZnVuY3Rpb24gY29tcGFyZSAoYSwgYikge1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihhKSB8fCAhQnVmZmVyLmlzQnVmZmVyKGIpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnRzIG11c3QgYmUgQnVmZmVycycpXG4gIH1cblxuICBpZiAoYSA9PT0gYikgcmV0dXJuIDBcblxuICB2YXIgeCA9IGEubGVuZ3RoXG4gIHZhciB5ID0gYi5sZW5ndGhcblxuICBmb3IgKHZhciBpID0gMCwgbGVuID0gTWF0aC5taW4oeCwgeSk7IGkgPCBsZW47ICsraSkge1xuICAgIGlmIChhW2ldICE9PSBiW2ldKSB7XG4gICAgICB4ID0gYVtpXVxuICAgICAgeSA9IGJbaV1cbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgaWYgKHggPCB5KSByZXR1cm4gLTFcbiAgaWYgKHkgPCB4KSByZXR1cm4gMVxuICByZXR1cm4gMFxufVxuXG5CdWZmZXIuaXNFbmNvZGluZyA9IGZ1bmN0aW9uIGlzRW5jb2RpbmcgKGVuY29kaW5nKSB7XG4gIHN3aXRjaCAoU3RyaW5nKGVuY29kaW5nKS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgY2FzZSAnaGV4JzpcbiAgICBjYXNlICd1dGY4JzpcbiAgICBjYXNlICd1dGYtOCc6XG4gICAgY2FzZSAnYXNjaWknOlxuICAgIGNhc2UgJ2xhdGluMSc6XG4gICAgY2FzZSAnYmluYXJ5JzpcbiAgICBjYXNlICdiYXNlNjQnOlxuICAgIGNhc2UgJ3VjczInOlxuICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICBjYXNlICd1dGYxNmxlJzpcbiAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG5CdWZmZXIuY29uY2F0ID0gZnVuY3Rpb24gY29uY2F0IChsaXN0LCBsZW5ndGgpIHtcbiAgaWYgKCFpc0FycmF5KGxpc3QpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJsaXN0XCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJylcbiAgfVxuXG4gIGlmIChsaXN0Lmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBCdWZmZXIuYWxsb2MoMClcbiAgfVxuXG4gIHZhciBpXG4gIGlmIChsZW5ndGggPT09IHVuZGVmaW5lZCkge1xuICAgIGxlbmd0aCA9IDBcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7ICsraSkge1xuICAgICAgbGVuZ3RoICs9IGxpc3RbaV0ubGVuZ3RoXG4gICAgfVxuICB9XG5cbiAgdmFyIGJ1ZmZlciA9IEJ1ZmZlci5hbGxvY1Vuc2FmZShsZW5ndGgpXG4gIHZhciBwb3MgPSAwXG4gIGZvciAoaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgKytpKSB7XG4gICAgdmFyIGJ1ZiA9IGxpc3RbaV1cbiAgICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihidWYpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImxpc3RcIiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKVxuICAgIH1cbiAgICBidWYuY29weShidWZmZXIsIHBvcylcbiAgICBwb3MgKz0gYnVmLmxlbmd0aFxuICB9XG4gIHJldHVybiBidWZmZXJcbn1cblxuZnVuY3Rpb24gYnl0ZUxlbmd0aCAoc3RyaW5nLCBlbmNvZGluZykge1xuICBpZiAoQnVmZmVyLmlzQnVmZmVyKHN0cmluZykpIHtcbiAgICByZXR1cm4gc3RyaW5nLmxlbmd0aFxuICB9XG4gIGlmICh0eXBlb2YgQXJyYXlCdWZmZXIgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBBcnJheUJ1ZmZlci5pc1ZpZXcgPT09ICdmdW5jdGlvbicgJiZcbiAgICAgIChBcnJheUJ1ZmZlci5pc1ZpZXcoc3RyaW5nKSB8fCBzdHJpbmcgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikpIHtcbiAgICByZXR1cm4gc3RyaW5nLmJ5dGVMZW5ndGhcbiAgfVxuICBpZiAodHlwZW9mIHN0cmluZyAhPT0gJ3N0cmluZycpIHtcbiAgICBzdHJpbmcgPSAnJyArIHN0cmluZ1xuICB9XG5cbiAgdmFyIGxlbiA9IHN0cmluZy5sZW5ndGhcbiAgaWYgKGxlbiA9PT0gMCkgcmV0dXJuIDBcblxuICAvLyBVc2UgYSBmb3IgbG9vcCB0byBhdm9pZCByZWN1cnNpb25cbiAgdmFyIGxvd2VyZWRDYXNlID0gZmFsc2VcbiAgZm9yICg7Oykge1xuICAgIHN3aXRjaCAoZW5jb2RpbmcpIHtcbiAgICAgIGNhc2UgJ2FzY2lpJzpcbiAgICAgIGNhc2UgJ2xhdGluMSc6XG4gICAgICBjYXNlICdiaW5hcnknOlxuICAgICAgICByZXR1cm4gbGVuXG4gICAgICBjYXNlICd1dGY4JzpcbiAgICAgIGNhc2UgJ3V0Zi04JzpcbiAgICAgIGNhc2UgdW5kZWZpbmVkOlxuICAgICAgICByZXR1cm4gdXRmOFRvQnl0ZXMoc3RyaW5nKS5sZW5ndGhcbiAgICAgIGNhc2UgJ3VjczInOlxuICAgICAgY2FzZSAndWNzLTInOlxuICAgICAgY2FzZSAndXRmMTZsZSc6XG4gICAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICAgIHJldHVybiBsZW4gKiAyXG4gICAgICBjYXNlICdoZXgnOlxuICAgICAgICByZXR1cm4gbGVuID4+PiAxXG4gICAgICBjYXNlICdiYXNlNjQnOlxuICAgICAgICByZXR1cm4gYmFzZTY0VG9CeXRlcyhzdHJpbmcpLmxlbmd0aFxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKGxvd2VyZWRDYXNlKSByZXR1cm4gdXRmOFRvQnl0ZXMoc3RyaW5nKS5sZW5ndGggLy8gYXNzdW1lIHV0ZjhcbiAgICAgICAgZW5jb2RpbmcgPSAoJycgKyBlbmNvZGluZykudG9Mb3dlckNhc2UoKVxuICAgICAgICBsb3dlcmVkQ2FzZSA9IHRydWVcbiAgICB9XG4gIH1cbn1cbkJ1ZmZlci5ieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aFxuXG5mdW5jdGlvbiBzbG93VG9TdHJpbmcgKGVuY29kaW5nLCBzdGFydCwgZW5kKSB7XG4gIHZhciBsb3dlcmVkQ2FzZSA9IGZhbHNlXG5cbiAgLy8gTm8gbmVlZCB0byB2ZXJpZnkgdGhhdCBcInRoaXMubGVuZ3RoIDw9IE1BWF9VSU5UMzJcIiBzaW5jZSBpdCdzIGEgcmVhZC1vbmx5XG4gIC8vIHByb3BlcnR5IG9mIGEgdHlwZWQgYXJyYXkuXG5cbiAgLy8gVGhpcyBiZWhhdmVzIG5laXRoZXIgbGlrZSBTdHJpbmcgbm9yIFVpbnQ4QXJyYXkgaW4gdGhhdCB3ZSBzZXQgc3RhcnQvZW5kXG4gIC8vIHRvIHRoZWlyIHVwcGVyL2xvd2VyIGJvdW5kcyBpZiB0aGUgdmFsdWUgcGFzc2VkIGlzIG91dCBvZiByYW5nZS5cbiAgLy8gdW5kZWZpbmVkIGlzIGhhbmRsZWQgc3BlY2lhbGx5IGFzIHBlciBFQ01BLTI2MiA2dGggRWRpdGlvbixcbiAgLy8gU2VjdGlvbiAxMy4zLjMuNyBSdW50aW1lIFNlbWFudGljczogS2V5ZWRCaW5kaW5nSW5pdGlhbGl6YXRpb24uXG4gIGlmIChzdGFydCA9PT0gdW5kZWZpbmVkIHx8IHN0YXJ0IDwgMCkge1xuICAgIHN0YXJ0ID0gMFxuICB9XG4gIC8vIFJldHVybiBlYXJseSBpZiBzdGFydCA+IHRoaXMubGVuZ3RoLiBEb25lIGhlcmUgdG8gcHJldmVudCBwb3RlbnRpYWwgdWludDMyXG4gIC8vIGNvZXJjaW9uIGZhaWwgYmVsb3cuXG4gIGlmIChzdGFydCA+IHRoaXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuICcnXG4gIH1cblxuICBpZiAoZW5kID09PSB1bmRlZmluZWQgfHwgZW5kID4gdGhpcy5sZW5ndGgpIHtcbiAgICBlbmQgPSB0aGlzLmxlbmd0aFxuICB9XG5cbiAgaWYgKGVuZCA8PSAwKSB7XG4gICAgcmV0dXJuICcnXG4gIH1cblxuICAvLyBGb3JjZSBjb2Vyc2lvbiB0byB1aW50MzIuIFRoaXMgd2lsbCBhbHNvIGNvZXJjZSBmYWxzZXkvTmFOIHZhbHVlcyB0byAwLlxuICBlbmQgPj4+PSAwXG4gIHN0YXJ0ID4+Pj0gMFxuXG4gIGlmIChlbmQgPD0gc3RhcnQpIHtcbiAgICByZXR1cm4gJydcbiAgfVxuXG4gIGlmICghZW5jb2RpbmcpIGVuY29kaW5nID0gJ3V0ZjgnXG5cbiAgd2hpbGUgKHRydWUpIHtcbiAgICBzd2l0Y2ggKGVuY29kaW5nKSB7XG4gICAgICBjYXNlICdoZXgnOlxuICAgICAgICByZXR1cm4gaGV4U2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAndXRmOCc6XG4gICAgICBjYXNlICd1dGYtOCc6XG4gICAgICAgIHJldHVybiB1dGY4U2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAnYXNjaWknOlxuICAgICAgICByZXR1cm4gYXNjaWlTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICdsYXRpbjEnOlxuICAgICAgY2FzZSAnYmluYXJ5JzpcbiAgICAgICAgcmV0dXJuIGxhdGluMVNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICAgIHJldHVybiBiYXNlNjRTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICd1Y3MyJzpcbiAgICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgICByZXR1cm4gdXRmMTZsZVNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChsb3dlcmVkQ2FzZSkgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5rbm93biBlbmNvZGluZzogJyArIGVuY29kaW5nKVxuICAgICAgICBlbmNvZGluZyA9IChlbmNvZGluZyArICcnKS50b0xvd2VyQ2FzZSgpXG4gICAgICAgIGxvd2VyZWRDYXNlID0gdHJ1ZVxuICAgIH1cbiAgfVxufVxuXG4vLyBUaGUgcHJvcGVydHkgaXMgdXNlZCBieSBgQnVmZmVyLmlzQnVmZmVyYCBhbmQgYGlzLWJ1ZmZlcmAgKGluIFNhZmFyaSA1LTcpIHRvIGRldGVjdFxuLy8gQnVmZmVyIGluc3RhbmNlcy5cbkJ1ZmZlci5wcm90b3R5cGUuX2lzQnVmZmVyID0gdHJ1ZVxuXG5mdW5jdGlvbiBzd2FwIChiLCBuLCBtKSB7XG4gIHZhciBpID0gYltuXVxuICBiW25dID0gYlttXVxuICBiW21dID0gaVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnN3YXAxNiA9IGZ1bmN0aW9uIHN3YXAxNiAoKSB7XG4gIHZhciBsZW4gPSB0aGlzLmxlbmd0aFxuICBpZiAobGVuICUgMiAhPT0gMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMTYtYml0cycpXG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkgKz0gMikge1xuICAgIHN3YXAodGhpcywgaSwgaSArIDEpXG4gIH1cbiAgcmV0dXJuIHRoaXNcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5zd2FwMzIgPSBmdW5jdGlvbiBzd2FwMzIgKCkge1xuICB2YXIgbGVuID0gdGhpcy5sZW5ndGhcbiAgaWYgKGxlbiAlIDQgIT09IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDMyLWJpdHMnKVxuICB9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpICs9IDQpIHtcbiAgICBzd2FwKHRoaXMsIGksIGkgKyAzKVxuICAgIHN3YXAodGhpcywgaSArIDEsIGkgKyAyKVxuICB9XG4gIHJldHVybiB0aGlzXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuc3dhcDY0ID0gZnVuY3Rpb24gc3dhcDY0ICgpIHtcbiAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoXG4gIGlmIChsZW4gJSA4ICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0J1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA2NC1iaXRzJylcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSArPSA4KSB7XG4gICAgc3dhcCh0aGlzLCBpLCBpICsgNylcbiAgICBzd2FwKHRoaXMsIGkgKyAxLCBpICsgNilcbiAgICBzd2FwKHRoaXMsIGkgKyAyLCBpICsgNSlcbiAgICBzd2FwKHRoaXMsIGkgKyAzLCBpICsgNClcbiAgfVxuICByZXR1cm4gdGhpc1xufVxuXG5CdWZmZXIucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcgKCkge1xuICB2YXIgbGVuZ3RoID0gdGhpcy5sZW5ndGggfCAwXG4gIGlmIChsZW5ndGggPT09IDApIHJldHVybiAnJ1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHV0ZjhTbGljZSh0aGlzLCAwLCBsZW5ndGgpXG4gIHJldHVybiBzbG93VG9TdHJpbmcuYXBwbHkodGhpcywgYXJndW1lbnRzKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLmVxdWFscyA9IGZ1bmN0aW9uIGVxdWFscyAoYikge1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihiKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlcicpXG4gIGlmICh0aGlzID09PSBiKSByZXR1cm4gdHJ1ZVxuICByZXR1cm4gQnVmZmVyLmNvbXBhcmUodGhpcywgYikgPT09IDBcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5pbnNwZWN0ID0gZnVuY3Rpb24gaW5zcGVjdCAoKSB7XG4gIHZhciBzdHIgPSAnJ1xuICB2YXIgbWF4ID0gZXhwb3J0cy5JTlNQRUNUX01BWF9CWVRFU1xuICBpZiAodGhpcy5sZW5ndGggPiAwKSB7XG4gICAgc3RyID0gdGhpcy50b1N0cmluZygnaGV4JywgMCwgbWF4KS5tYXRjaCgvLnsyfS9nKS5qb2luKCcgJylcbiAgICBpZiAodGhpcy5sZW5ndGggPiBtYXgpIHN0ciArPSAnIC4uLiAnXG4gIH1cbiAgcmV0dXJuICc8QnVmZmVyICcgKyBzdHIgKyAnPidcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5jb21wYXJlID0gZnVuY3Rpb24gY29tcGFyZSAodGFyZ2V0LCBzdGFydCwgZW5kLCB0aGlzU3RhcnQsIHRoaXNFbmQpIHtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIodGFyZ2V0KSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXInKVxuICB9XG5cbiAgaWYgKHN0YXJ0ID09PSB1bmRlZmluZWQpIHtcbiAgICBzdGFydCA9IDBcbiAgfVxuICBpZiAoZW5kID09PSB1bmRlZmluZWQpIHtcbiAgICBlbmQgPSB0YXJnZXQgPyB0YXJnZXQubGVuZ3RoIDogMFxuICB9XG4gIGlmICh0aGlzU3RhcnQgPT09IHVuZGVmaW5lZCkge1xuICAgIHRoaXNTdGFydCA9IDBcbiAgfVxuICBpZiAodGhpc0VuZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhpc0VuZCA9IHRoaXMubGVuZ3RoXG4gIH1cblxuICBpZiAoc3RhcnQgPCAwIHx8IGVuZCA+IHRhcmdldC5sZW5ndGggfHwgdGhpc1N0YXJ0IDwgMCB8fCB0aGlzRW5kID4gdGhpcy5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignb3V0IG9mIHJhbmdlIGluZGV4JylcbiAgfVxuXG4gIGlmICh0aGlzU3RhcnQgPj0gdGhpc0VuZCAmJiBzdGFydCA+PSBlbmQpIHtcbiAgICByZXR1cm4gMFxuICB9XG4gIGlmICh0aGlzU3RhcnQgPj0gdGhpc0VuZCkge1xuICAgIHJldHVybiAtMVxuICB9XG4gIGlmIChzdGFydCA+PSBlbmQpIHtcbiAgICByZXR1cm4gMVxuICB9XG5cbiAgc3RhcnQgPj4+PSAwXG4gIGVuZCA+Pj49IDBcbiAgdGhpc1N0YXJ0ID4+Pj0gMFxuICB0aGlzRW5kID4+Pj0gMFxuXG4gIGlmICh0aGlzID09PSB0YXJnZXQpIHJldHVybiAwXG5cbiAgdmFyIHggPSB0aGlzRW5kIC0gdGhpc1N0YXJ0XG4gIHZhciB5ID0gZW5kIC0gc3RhcnRcbiAgdmFyIGxlbiA9IE1hdGgubWluKHgsIHkpXG5cbiAgdmFyIHRoaXNDb3B5ID0gdGhpcy5zbGljZSh0aGlzU3RhcnQsIHRoaXNFbmQpXG4gIHZhciB0YXJnZXRDb3B5ID0gdGFyZ2V0LnNsaWNlKHN0YXJ0LCBlbmQpXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkge1xuICAgIGlmICh0aGlzQ29weVtpXSAhPT0gdGFyZ2V0Q29weVtpXSkge1xuICAgICAgeCA9IHRoaXNDb3B5W2ldXG4gICAgICB5ID0gdGFyZ2V0Q29weVtpXVxuICAgICAgYnJlYWtcbiAgICB9XG4gIH1cblxuICBpZiAoeCA8IHkpIHJldHVybiAtMVxuICBpZiAoeSA8IHgpIHJldHVybiAxXG4gIHJldHVybiAwXG59XG5cbi8vIEZpbmRzIGVpdGhlciB0aGUgZmlyc3QgaW5kZXggb2YgYHZhbGAgaW4gYGJ1ZmZlcmAgYXQgb2Zmc2V0ID49IGBieXRlT2Zmc2V0YCxcbi8vIE9SIHRoZSBsYXN0IGluZGV4IG9mIGB2YWxgIGluIGBidWZmZXJgIGF0IG9mZnNldCA8PSBgYnl0ZU9mZnNldGAuXG4vL1xuLy8gQXJndW1lbnRzOlxuLy8gLSBidWZmZXIgLSBhIEJ1ZmZlciB0byBzZWFyY2hcbi8vIC0gdmFsIC0gYSBzdHJpbmcsIEJ1ZmZlciwgb3IgbnVtYmVyXG4vLyAtIGJ5dGVPZmZzZXQgLSBhbiBpbmRleCBpbnRvIGBidWZmZXJgOyB3aWxsIGJlIGNsYW1wZWQgdG8gYW4gaW50MzJcbi8vIC0gZW5jb2RpbmcgLSBhbiBvcHRpb25hbCBlbmNvZGluZywgcmVsZXZhbnQgaXMgdmFsIGlzIGEgc3RyaW5nXG4vLyAtIGRpciAtIHRydWUgZm9yIGluZGV4T2YsIGZhbHNlIGZvciBsYXN0SW5kZXhPZlxuZnVuY3Rpb24gYmlkaXJlY3Rpb25hbEluZGV4T2YgKGJ1ZmZlciwgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZGlyKSB7XG4gIC8vIEVtcHR5IGJ1ZmZlciBtZWFucyBubyBtYXRjaFxuICBpZiAoYnVmZmVyLmxlbmd0aCA9PT0gMCkgcmV0dXJuIC0xXG5cbiAgLy8gTm9ybWFsaXplIGJ5dGVPZmZzZXRcbiAgaWYgKHR5cGVvZiBieXRlT2Zmc2V0ID09PSAnc3RyaW5nJykge1xuICAgIGVuY29kaW5nID0gYnl0ZU9mZnNldFxuICAgIGJ5dGVPZmZzZXQgPSAwXG4gIH0gZWxzZSBpZiAoYnl0ZU9mZnNldCA+IDB4N2ZmZmZmZmYpIHtcbiAgICBieXRlT2Zmc2V0ID0gMHg3ZmZmZmZmZlxuICB9IGVsc2UgaWYgKGJ5dGVPZmZzZXQgPCAtMHg4MDAwMDAwMCkge1xuICAgIGJ5dGVPZmZzZXQgPSAtMHg4MDAwMDAwMFxuICB9XG4gIGJ5dGVPZmZzZXQgPSArYnl0ZU9mZnNldCAgLy8gQ29lcmNlIHRvIE51bWJlci5cbiAgaWYgKGlzTmFOKGJ5dGVPZmZzZXQpKSB7XG4gICAgLy8gYnl0ZU9mZnNldDogaXQgaXQncyB1bmRlZmluZWQsIG51bGwsIE5hTiwgXCJmb29cIiwgZXRjLCBzZWFyY2ggd2hvbGUgYnVmZmVyXG4gICAgYnl0ZU9mZnNldCA9IGRpciA/IDAgOiAoYnVmZmVyLmxlbmd0aCAtIDEpXG4gIH1cblxuICAvLyBOb3JtYWxpemUgYnl0ZU9mZnNldDogbmVnYXRpdmUgb2Zmc2V0cyBzdGFydCBmcm9tIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlclxuICBpZiAoYnl0ZU9mZnNldCA8IDApIGJ5dGVPZmZzZXQgPSBidWZmZXIubGVuZ3RoICsgYnl0ZU9mZnNldFxuICBpZiAoYnl0ZU9mZnNldCA+PSBidWZmZXIubGVuZ3RoKSB7XG4gICAgaWYgKGRpcikgcmV0dXJuIC0xXG4gICAgZWxzZSBieXRlT2Zmc2V0ID0gYnVmZmVyLmxlbmd0aCAtIDFcbiAgfSBlbHNlIGlmIChieXRlT2Zmc2V0IDwgMCkge1xuICAgIGlmIChkaXIpIGJ5dGVPZmZzZXQgPSAwXG4gICAgZWxzZSByZXR1cm4gLTFcbiAgfVxuXG4gIC8vIE5vcm1hbGl6ZSB2YWxcbiAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XG4gICAgdmFsID0gQnVmZmVyLmZyb20odmFsLCBlbmNvZGluZylcbiAgfVxuXG4gIC8vIEZpbmFsbHksIHNlYXJjaCBlaXRoZXIgaW5kZXhPZiAoaWYgZGlyIGlzIHRydWUpIG9yIGxhc3RJbmRleE9mXG4gIGlmIChCdWZmZXIuaXNCdWZmZXIodmFsKSkge1xuICAgIC8vIFNwZWNpYWwgY2FzZTogbG9va2luZyBmb3IgZW1wdHkgc3RyaW5nL2J1ZmZlciBhbHdheXMgZmFpbHNcbiAgICBpZiAodmFsLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuICAgIHJldHVybiBhcnJheUluZGV4T2YoYnVmZmVyLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBkaXIpXG4gIH0gZWxzZSBpZiAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicpIHtcbiAgICB2YWwgPSB2YWwgJiAweEZGIC8vIFNlYXJjaCBmb3IgYSBieXRlIHZhbHVlIFswLTI1NV1cbiAgICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQgJiZcbiAgICAgICAgdHlwZW9mIFVpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2YgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGlmIChkaXIpIHtcbiAgICAgICAgcmV0dXJuIFVpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbChidWZmZXIsIHZhbCwgYnl0ZU9mZnNldClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBVaW50OEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZi5jYWxsKGJ1ZmZlciwgdmFsLCBieXRlT2Zmc2V0KVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYXJyYXlJbmRleE9mKGJ1ZmZlciwgWyB2YWwgXSwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGRpcilcbiAgfVxuXG4gIHRocm93IG5ldyBUeXBlRXJyb3IoJ3ZhbCBtdXN0IGJlIHN0cmluZywgbnVtYmVyIG9yIEJ1ZmZlcicpXG59XG5cbmZ1bmN0aW9uIGFycmF5SW5kZXhPZiAoYXJyLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBkaXIpIHtcbiAgdmFyIGluZGV4U2l6ZSA9IDFcbiAgdmFyIGFyckxlbmd0aCA9IGFyci5sZW5ndGhcbiAgdmFyIHZhbExlbmd0aCA9IHZhbC5sZW5ndGhcblxuICBpZiAoZW5jb2RpbmcgIT09IHVuZGVmaW5lZCkge1xuICAgIGVuY29kaW5nID0gU3RyaW5nKGVuY29kaW5nKS50b0xvd2VyQ2FzZSgpXG4gICAgaWYgKGVuY29kaW5nID09PSAndWNzMicgfHwgZW5jb2RpbmcgPT09ICd1Y3MtMicgfHxcbiAgICAgICAgZW5jb2RpbmcgPT09ICd1dGYxNmxlJyB8fCBlbmNvZGluZyA9PT0gJ3V0Zi0xNmxlJykge1xuICAgICAgaWYgKGFyci5sZW5ndGggPCAyIHx8IHZhbC5sZW5ndGggPCAyKSB7XG4gICAgICAgIHJldHVybiAtMVxuICAgICAgfVxuICAgICAgaW5kZXhTaXplID0gMlxuICAgICAgYXJyTGVuZ3RoIC89IDJcbiAgICAgIHZhbExlbmd0aCAvPSAyXG4gICAgICBieXRlT2Zmc2V0IC89IDJcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiByZWFkIChidWYsIGkpIHtcbiAgICBpZiAoaW5kZXhTaXplID09PSAxKSB7XG4gICAgICByZXR1cm4gYnVmW2ldXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBidWYucmVhZFVJbnQxNkJFKGkgKiBpbmRleFNpemUpXG4gICAgfVxuICB9XG5cbiAgdmFyIGlcbiAgaWYgKGRpcikge1xuICAgIHZhciBmb3VuZEluZGV4ID0gLTFcbiAgICBmb3IgKGkgPSBieXRlT2Zmc2V0OyBpIDwgYXJyTGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChyZWFkKGFyciwgaSkgPT09IHJlYWQodmFsLCBmb3VuZEluZGV4ID09PSAtMSA/IDAgOiBpIC0gZm91bmRJbmRleCkpIHtcbiAgICAgICAgaWYgKGZvdW5kSW5kZXggPT09IC0xKSBmb3VuZEluZGV4ID0gaVxuICAgICAgICBpZiAoaSAtIGZvdW5kSW5kZXggKyAxID09PSB2YWxMZW5ndGgpIHJldHVybiBmb3VuZEluZGV4ICogaW5kZXhTaXplXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoZm91bmRJbmRleCAhPT0gLTEpIGkgLT0gaSAtIGZvdW5kSW5kZXhcbiAgICAgICAgZm91bmRJbmRleCA9IC0xXG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmIChieXRlT2Zmc2V0ICsgdmFsTGVuZ3RoID4gYXJyTGVuZ3RoKSBieXRlT2Zmc2V0ID0gYXJyTGVuZ3RoIC0gdmFsTGVuZ3RoXG4gICAgZm9yIChpID0gYnl0ZU9mZnNldDsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIHZhciBmb3VuZCA9IHRydWVcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdmFsTGVuZ3RoOyBqKyspIHtcbiAgICAgICAgaWYgKHJlYWQoYXJyLCBpICsgaikgIT09IHJlYWQodmFsLCBqKSkge1xuICAgICAgICAgIGZvdW5kID0gZmFsc2VcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZm91bmQpIHJldHVybiBpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIC0xXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuaW5jbHVkZXMgPSBmdW5jdGlvbiBpbmNsdWRlcyAodmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZykge1xuICByZXR1cm4gdGhpcy5pbmRleE9mKHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpICE9PSAtMVxufVxuXG5CdWZmZXIucHJvdG90eXBlLmluZGV4T2YgPSBmdW5jdGlvbiBpbmRleE9mICh2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nKSB7XG4gIHJldHVybiBiaWRpcmVjdGlvbmFsSW5kZXhPZih0aGlzLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCB0cnVlKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLmxhc3RJbmRleE9mID0gZnVuY3Rpb24gbGFzdEluZGV4T2YgKHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpIHtcbiAgcmV0dXJuIGJpZGlyZWN0aW9uYWxJbmRleE9mKHRoaXMsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGZhbHNlKVxufVxuXG5mdW5jdGlvbiBoZXhXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIG9mZnNldCA9IE51bWJlcihvZmZzZXQpIHx8IDBcbiAgdmFyIHJlbWFpbmluZyA9IGJ1Zi5sZW5ndGggLSBvZmZzZXRcbiAgaWYgKCFsZW5ndGgpIHtcbiAgICBsZW5ndGggPSByZW1haW5pbmdcbiAgfSBlbHNlIHtcbiAgICBsZW5ndGggPSBOdW1iZXIobGVuZ3RoKVxuICAgIGlmIChsZW5ndGggPiByZW1haW5pbmcpIHtcbiAgICAgIGxlbmd0aCA9IHJlbWFpbmluZ1xuICAgIH1cbiAgfVxuXG4gIC8vIG11c3QgYmUgYW4gZXZlbiBudW1iZXIgb2YgZGlnaXRzXG4gIHZhciBzdHJMZW4gPSBzdHJpbmcubGVuZ3RoXG4gIGlmIChzdHJMZW4gJSAyICE9PSAwKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIGhleCBzdHJpbmcnKVxuXG4gIGlmIChsZW5ndGggPiBzdHJMZW4gLyAyKSB7XG4gICAgbGVuZ3RoID0gc3RyTGVuIC8gMlxuICB9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICB2YXIgcGFyc2VkID0gcGFyc2VJbnQoc3RyaW5nLnN1YnN0cihpICogMiwgMiksIDE2KVxuICAgIGlmIChpc05hTihwYXJzZWQpKSByZXR1cm4gaVxuICAgIGJ1ZltvZmZzZXQgKyBpXSA9IHBhcnNlZFxuICB9XG4gIHJldHVybiBpXG59XG5cbmZ1bmN0aW9uIHV0ZjhXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBibGl0QnVmZmVyKHV0ZjhUb0J5dGVzKHN0cmluZywgYnVmLmxlbmd0aCAtIG9mZnNldCksIGJ1Ziwgb2Zmc2V0LCBsZW5ndGgpXG59XG5cbmZ1bmN0aW9uIGFzY2lpV3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gYmxpdEJ1ZmZlcihhc2NpaVRvQnl0ZXMoc3RyaW5nKSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuZnVuY3Rpb24gbGF0aW4xV3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gYXNjaWlXcml0ZShidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG59XG5cbmZ1bmN0aW9uIGJhc2U2NFdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIoYmFzZTY0VG9CeXRlcyhzdHJpbmcpLCBidWYsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5mdW5jdGlvbiB1Y3MyV3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gYmxpdEJ1ZmZlcih1dGYxNmxlVG9CeXRlcyhzdHJpbmcsIGJ1Zi5sZW5ndGggLSBvZmZzZXQpLCBidWYsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24gd3JpdGUgKHN0cmluZywgb2Zmc2V0LCBsZW5ndGgsIGVuY29kaW5nKSB7XG4gIC8vIEJ1ZmZlciN3cml0ZShzdHJpbmcpXG4gIGlmIChvZmZzZXQgPT09IHVuZGVmaW5lZCkge1xuICAgIGVuY29kaW5nID0gJ3V0ZjgnXG4gICAgbGVuZ3RoID0gdGhpcy5sZW5ndGhcbiAgICBvZmZzZXQgPSAwXG4gIC8vIEJ1ZmZlciN3cml0ZShzdHJpbmcsIGVuY29kaW5nKVxuICB9IGVsc2UgaWYgKGxlbmd0aCA9PT0gdW5kZWZpbmVkICYmIHR5cGVvZiBvZmZzZXQgPT09ICdzdHJpbmcnKSB7XG4gICAgZW5jb2RpbmcgPSBvZmZzZXRcbiAgICBsZW5ndGggPSB0aGlzLmxlbmd0aFxuICAgIG9mZnNldCA9IDBcbiAgLy8gQnVmZmVyI3dyaXRlKHN0cmluZywgb2Zmc2V0WywgbGVuZ3RoXVssIGVuY29kaW5nXSlcbiAgfSBlbHNlIGlmIChpc0Zpbml0ZShvZmZzZXQpKSB7XG4gICAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICAgIGlmIChpc0Zpbml0ZShsZW5ndGgpKSB7XG4gICAgICBsZW5ndGggPSBsZW5ndGggfCAwXG4gICAgICBpZiAoZW5jb2RpbmcgPT09IHVuZGVmaW5lZCkgZW5jb2RpbmcgPSAndXRmOCdcbiAgICB9IGVsc2Uge1xuICAgICAgZW5jb2RpbmcgPSBsZW5ndGhcbiAgICAgIGxlbmd0aCA9IHVuZGVmaW5lZFxuICAgIH1cbiAgLy8gbGVnYWN5IHdyaXRlKHN0cmluZywgZW5jb2RpbmcsIG9mZnNldCwgbGVuZ3RoKSAtIHJlbW92ZSBpbiB2MC4xM1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdCdWZmZXIud3JpdGUoc3RyaW5nLCBlbmNvZGluZywgb2Zmc2V0WywgbGVuZ3RoXSkgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCdcbiAgICApXG4gIH1cblxuICB2YXIgcmVtYWluaW5nID0gdGhpcy5sZW5ndGggLSBvZmZzZXRcbiAgaWYgKGxlbmd0aCA9PT0gdW5kZWZpbmVkIHx8IGxlbmd0aCA+IHJlbWFpbmluZykgbGVuZ3RoID0gcmVtYWluaW5nXG5cbiAgaWYgKChzdHJpbmcubGVuZ3RoID4gMCAmJiAobGVuZ3RoIDwgMCB8fCBvZmZzZXQgPCAwKSkgfHwgb2Zmc2V0ID4gdGhpcy5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQXR0ZW1wdCB0byB3cml0ZSBvdXRzaWRlIGJ1ZmZlciBib3VuZHMnKVxuICB9XG5cbiAgaWYgKCFlbmNvZGluZykgZW5jb2RpbmcgPSAndXRmOCdcblxuICB2YXIgbG93ZXJlZENhc2UgPSBmYWxzZVxuICBmb3IgKDs7KSB7XG4gICAgc3dpdGNoIChlbmNvZGluZykge1xuICAgICAgY2FzZSAnaGV4JzpcbiAgICAgICAgcmV0dXJuIGhleFdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ3V0ZjgnOlxuICAgICAgY2FzZSAndXRmLTgnOlxuICAgICAgICByZXR1cm4gdXRmOFdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ2FzY2lpJzpcbiAgICAgICAgcmV0dXJuIGFzY2lpV3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAnbGF0aW4xJzpcbiAgICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgICAgIHJldHVybiBsYXRpbjFXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICdiYXNlNjQnOlxuICAgICAgICAvLyBXYXJuaW5nOiBtYXhMZW5ndGggbm90IHRha2VuIGludG8gYWNjb3VudCBpbiBiYXNlNjRXcml0ZVxuICAgICAgICByZXR1cm4gYmFzZTY0V3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAndWNzMic6XG4gICAgICBjYXNlICd1Y3MtMic6XG4gICAgICBjYXNlICd1dGYxNmxlJzpcbiAgICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgICAgcmV0dXJuIHVjczJXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAobG93ZXJlZENhc2UpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmNvZGluZylcbiAgICAgICAgZW5jb2RpbmcgPSAoJycgKyBlbmNvZGluZykudG9Mb3dlckNhc2UoKVxuICAgICAgICBsb3dlcmVkQ2FzZSA9IHRydWVcbiAgICB9XG4gIH1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiB0b0pTT04gKCkge1xuICByZXR1cm4ge1xuICAgIHR5cGU6ICdCdWZmZXInLFxuICAgIGRhdGE6IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuX2FyciB8fCB0aGlzLCAwKVxuICB9XG59XG5cbmZ1bmN0aW9uIGJhc2U2NFNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgaWYgKHN0YXJ0ID09PSAwICYmIGVuZCA9PT0gYnVmLmxlbmd0aCkge1xuICAgIHJldHVybiBiYXNlNjQuZnJvbUJ5dGVBcnJheShidWYpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGJhc2U2NC5mcm9tQnl0ZUFycmF5KGJ1Zi5zbGljZShzdGFydCwgZW5kKSlcbiAgfVxufVxuXG5mdW5jdGlvbiB1dGY4U2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICBlbmQgPSBNYXRoLm1pbihidWYubGVuZ3RoLCBlbmQpXG4gIHZhciByZXMgPSBbXVxuXG4gIHZhciBpID0gc3RhcnRcbiAgd2hpbGUgKGkgPCBlbmQpIHtcbiAgICB2YXIgZmlyc3RCeXRlID0gYnVmW2ldXG4gICAgdmFyIGNvZGVQb2ludCA9IG51bGxcbiAgICB2YXIgYnl0ZXNQZXJTZXF1ZW5jZSA9IChmaXJzdEJ5dGUgPiAweEVGKSA/IDRcbiAgICAgIDogKGZpcnN0Qnl0ZSA+IDB4REYpID8gM1xuICAgICAgOiAoZmlyc3RCeXRlID4gMHhCRikgPyAyXG4gICAgICA6IDFcblxuICAgIGlmIChpICsgYnl0ZXNQZXJTZXF1ZW5jZSA8PSBlbmQpIHtcbiAgICAgIHZhciBzZWNvbmRCeXRlLCB0aGlyZEJ5dGUsIGZvdXJ0aEJ5dGUsIHRlbXBDb2RlUG9pbnRcblxuICAgICAgc3dpdGNoIChieXRlc1BlclNlcXVlbmNlKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBpZiAoZmlyc3RCeXRlIDwgMHg4MCkge1xuICAgICAgICAgICAgY29kZVBvaW50ID0gZmlyc3RCeXRlXG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBzZWNvbmRCeXRlID0gYnVmW2kgKyAxXVxuICAgICAgICAgIGlmICgoc2Vjb25kQnl0ZSAmIDB4QzApID09PSAweDgwKSB7XG4gICAgICAgICAgICB0ZW1wQ29kZVBvaW50ID0gKGZpcnN0Qnl0ZSAmIDB4MUYpIDw8IDB4NiB8IChzZWNvbmRCeXRlICYgMHgzRilcbiAgICAgICAgICAgIGlmICh0ZW1wQ29kZVBvaW50ID4gMHg3Rikge1xuICAgICAgICAgICAgICBjb2RlUG9pbnQgPSB0ZW1wQ29kZVBvaW50XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBzZWNvbmRCeXRlID0gYnVmW2kgKyAxXVxuICAgICAgICAgIHRoaXJkQnl0ZSA9IGJ1ZltpICsgMl1cbiAgICAgICAgICBpZiAoKHNlY29uZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCAmJiAodGhpcmRCeXRlICYgMHhDMCkgPT09IDB4ODApIHtcbiAgICAgICAgICAgIHRlbXBDb2RlUG9pbnQgPSAoZmlyc3RCeXRlICYgMHhGKSA8PCAweEMgfCAoc2Vjb25kQnl0ZSAmIDB4M0YpIDw8IDB4NiB8ICh0aGlyZEJ5dGUgJiAweDNGKVxuICAgICAgICAgICAgaWYgKHRlbXBDb2RlUG9pbnQgPiAweDdGRiAmJiAodGVtcENvZGVQb2ludCA8IDB4RDgwMCB8fCB0ZW1wQ29kZVBvaW50ID4gMHhERkZGKSkge1xuICAgICAgICAgICAgICBjb2RlUG9pbnQgPSB0ZW1wQ29kZVBvaW50XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICBzZWNvbmRCeXRlID0gYnVmW2kgKyAxXVxuICAgICAgICAgIHRoaXJkQnl0ZSA9IGJ1ZltpICsgMl1cbiAgICAgICAgICBmb3VydGhCeXRlID0gYnVmW2kgKyAzXVxuICAgICAgICAgIGlmICgoc2Vjb25kQnl0ZSAmIDB4QzApID09PSAweDgwICYmICh0aGlyZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCAmJiAoZm91cnRoQnl0ZSAmIDB4QzApID09PSAweDgwKSB7XG4gICAgICAgICAgICB0ZW1wQ29kZVBvaW50ID0gKGZpcnN0Qnl0ZSAmIDB4RikgPDwgMHgxMiB8IChzZWNvbmRCeXRlICYgMHgzRikgPDwgMHhDIHwgKHRoaXJkQnl0ZSAmIDB4M0YpIDw8IDB4NiB8IChmb3VydGhCeXRlICYgMHgzRilcbiAgICAgICAgICAgIGlmICh0ZW1wQ29kZVBvaW50ID4gMHhGRkZGICYmIHRlbXBDb2RlUG9pbnQgPCAweDExMDAwMCkge1xuICAgICAgICAgICAgICBjb2RlUG9pbnQgPSB0ZW1wQ29kZVBvaW50XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjb2RlUG9pbnQgPT09IG51bGwpIHtcbiAgICAgIC8vIHdlIGRpZCBub3QgZ2VuZXJhdGUgYSB2YWxpZCBjb2RlUG9pbnQgc28gaW5zZXJ0IGFcbiAgICAgIC8vIHJlcGxhY2VtZW50IGNoYXIgKFUrRkZGRCkgYW5kIGFkdmFuY2Ugb25seSAxIGJ5dGVcbiAgICAgIGNvZGVQb2ludCA9IDB4RkZGRFxuICAgICAgYnl0ZXNQZXJTZXF1ZW5jZSA9IDFcbiAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA+IDB4RkZGRikge1xuICAgICAgLy8gZW5jb2RlIHRvIHV0ZjE2IChzdXJyb2dhdGUgcGFpciBkYW5jZSlcbiAgICAgIGNvZGVQb2ludCAtPSAweDEwMDAwXG4gICAgICByZXMucHVzaChjb2RlUG9pbnQgPj4+IDEwICYgMHgzRkYgfCAweEQ4MDApXG4gICAgICBjb2RlUG9pbnQgPSAweERDMDAgfCBjb2RlUG9pbnQgJiAweDNGRlxuICAgIH1cblxuICAgIHJlcy5wdXNoKGNvZGVQb2ludClcbiAgICBpICs9IGJ5dGVzUGVyU2VxdWVuY2VcbiAgfVxuXG4gIHJldHVybiBkZWNvZGVDb2RlUG9pbnRzQXJyYXkocmVzKVxufVxuXG4vLyBCYXNlZCBvbiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8yMjc0NzI3Mi82ODA3NDIsIHRoZSBicm93c2VyIHdpdGhcbi8vIHRoZSBsb3dlc3QgbGltaXQgaXMgQ2hyb21lLCB3aXRoIDB4MTAwMDAgYXJncy5cbi8vIFdlIGdvIDEgbWFnbml0dWRlIGxlc3MsIGZvciBzYWZldHlcbnZhciBNQVhfQVJHVU1FTlRTX0xFTkdUSCA9IDB4MTAwMFxuXG5mdW5jdGlvbiBkZWNvZGVDb2RlUG9pbnRzQXJyYXkgKGNvZGVQb2ludHMpIHtcbiAgdmFyIGxlbiA9IGNvZGVQb2ludHMubGVuZ3RoXG4gIGlmIChsZW4gPD0gTUFYX0FSR1VNRU5UU19MRU5HVEgpIHtcbiAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsIGNvZGVQb2ludHMpIC8vIGF2b2lkIGV4dHJhIHNsaWNlKClcbiAgfVxuXG4gIC8vIERlY29kZSBpbiBjaHVua3MgdG8gYXZvaWQgXCJjYWxsIHN0YWNrIHNpemUgZXhjZWVkZWRcIi5cbiAgdmFyIHJlcyA9ICcnXG4gIHZhciBpID0gMFxuICB3aGlsZSAoaSA8IGxlbikge1xuICAgIHJlcyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFxuICAgICAgU3RyaW5nLFxuICAgICAgY29kZVBvaW50cy5zbGljZShpLCBpICs9IE1BWF9BUkdVTUVOVFNfTEVOR1RIKVxuICAgIClcbiAgfVxuICByZXR1cm4gcmVzXG59XG5cbmZ1bmN0aW9uIGFzY2lpU2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICB2YXIgcmV0ID0gJydcbiAgZW5kID0gTWF0aC5taW4oYnVmLmxlbmd0aCwgZW5kKVxuXG4gIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKSB7XG4gICAgcmV0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnVmW2ldICYgMHg3RilcbiAgfVxuICByZXR1cm4gcmV0XG59XG5cbmZ1bmN0aW9uIGxhdGluMVNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIHJldCA9ICcnXG4gIGVuZCA9IE1hdGgubWluKGJ1Zi5sZW5ndGgsIGVuZClcblxuICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7ICsraSkge1xuICAgIHJldCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ1ZltpXSlcbiAgfVxuICByZXR1cm4gcmV0XG59XG5cbmZ1bmN0aW9uIGhleFNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGxlbiA9IGJ1Zi5sZW5ndGhcblxuICBpZiAoIXN0YXJ0IHx8IHN0YXJ0IDwgMCkgc3RhcnQgPSAwXG4gIGlmICghZW5kIHx8IGVuZCA8IDAgfHwgZW5kID4gbGVuKSBlbmQgPSBsZW5cblxuICB2YXIgb3V0ID0gJydcbiAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHtcbiAgICBvdXQgKz0gdG9IZXgoYnVmW2ldKVxuICB9XG4gIHJldHVybiBvdXRcbn1cblxuZnVuY3Rpb24gdXRmMTZsZVNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGJ5dGVzID0gYnVmLnNsaWNlKHN0YXJ0LCBlbmQpXG4gIHZhciByZXMgPSAnJ1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGJ5dGVzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgcmVzICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnl0ZXNbaV0gKyBieXRlc1tpICsgMV0gKiAyNTYpXG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG5CdWZmZXIucHJvdG90eXBlLnNsaWNlID0gZnVuY3Rpb24gc2xpY2UgKHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoXG4gIHN0YXJ0ID0gfn5zdGFydFxuICBlbmQgPSBlbmQgPT09IHVuZGVmaW5lZCA/IGxlbiA6IH5+ZW5kXG5cbiAgaWYgKHN0YXJ0IDwgMCkge1xuICAgIHN0YXJ0ICs9IGxlblxuICAgIGlmIChzdGFydCA8IDApIHN0YXJ0ID0gMFxuICB9IGVsc2UgaWYgKHN0YXJ0ID4gbGVuKSB7XG4gICAgc3RhcnQgPSBsZW5cbiAgfVxuXG4gIGlmIChlbmQgPCAwKSB7XG4gICAgZW5kICs9IGxlblxuICAgIGlmIChlbmQgPCAwKSBlbmQgPSAwXG4gIH0gZWxzZSBpZiAoZW5kID4gbGVuKSB7XG4gICAgZW5kID0gbGVuXG4gIH1cblxuICBpZiAoZW5kIDwgc3RhcnQpIGVuZCA9IHN0YXJ0XG5cbiAgdmFyIG5ld0J1ZlxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICBuZXdCdWYgPSB0aGlzLnN1YmFycmF5KHN0YXJ0LCBlbmQpXG4gICAgbmV3QnVmLl9fcHJvdG9fXyA9IEJ1ZmZlci5wcm90b3R5cGVcbiAgfSBlbHNlIHtcbiAgICB2YXIgc2xpY2VMZW4gPSBlbmQgLSBzdGFydFxuICAgIG5ld0J1ZiA9IG5ldyBCdWZmZXIoc2xpY2VMZW4sIHVuZGVmaW5lZClcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNsaWNlTGVuOyArK2kpIHtcbiAgICAgIG5ld0J1ZltpXSA9IHRoaXNbaSArIHN0YXJ0XVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXdCdWZcbn1cblxuLypcbiAqIE5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgYnVmZmVyIGlzbid0IHRyeWluZyB0byB3cml0ZSBvdXQgb2YgYm91bmRzLlxuICovXG5mdW5jdGlvbiBjaGVja09mZnNldCAob2Zmc2V0LCBleHQsIGxlbmd0aCkge1xuICBpZiAoKG9mZnNldCAlIDEpICE9PSAwIHx8IG9mZnNldCA8IDApIHRocm93IG5ldyBSYW5nZUVycm9yKCdvZmZzZXQgaXMgbm90IHVpbnQnKVxuICBpZiAob2Zmc2V0ICsgZXh0ID4gbGVuZ3RoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignVHJ5aW5nIHRvIGFjY2VzcyBiZXlvbmQgYnVmZmVyIGxlbmd0aCcpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnRMRSA9IGZ1bmN0aW9uIHJlYWRVSW50TEUgKG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCBieXRlTGVuZ3RoLCB0aGlzLmxlbmd0aClcblxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXRdXG4gIHZhciBtdWwgPSAxXG4gIHZhciBpID0gMFxuICB3aGlsZSAoKytpIDwgYnl0ZUxlbmd0aCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHZhbCArPSB0aGlzW29mZnNldCArIGldICogbXVsXG4gIH1cblxuICByZXR1cm4gdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnRCRSA9IGZ1bmN0aW9uIHJlYWRVSW50QkUgKG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCB8IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIGNoZWNrT2Zmc2V0KG9mZnNldCwgYnl0ZUxlbmd0aCwgdGhpcy5sZW5ndGgpXG4gIH1cblxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXQgKyAtLWJ5dGVMZW5ndGhdXG4gIHZhciBtdWwgPSAxXG4gIHdoaWxlIChieXRlTGVuZ3RoID4gMCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHZhbCArPSB0aGlzW29mZnNldCArIC0tYnl0ZUxlbmd0aF0gKiBtdWxcbiAgfVxuXG4gIHJldHVybiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDggPSBmdW5jdGlvbiByZWFkVUludDggKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAxLCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIHRoaXNbb2Zmc2V0XVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50MTZMRSA9IGZ1bmN0aW9uIHJlYWRVSW50MTZMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDIsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gdGhpc1tvZmZzZXRdIHwgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgOClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDE2QkUgPSBmdW5jdGlvbiByZWFkVUludDE2QkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAyLCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuICh0aGlzW29mZnNldF0gPDwgOCkgfCB0aGlzW29mZnNldCArIDFdXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQzMkxFID0gZnVuY3Rpb24gcmVhZFVJbnQzMkxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG5cbiAgcmV0dXJuICgodGhpc1tvZmZzZXRdKSB8XG4gICAgICAodGhpc1tvZmZzZXQgKyAxXSA8PCA4KSB8XG4gICAgICAodGhpc1tvZmZzZXQgKyAyXSA8PCAxNikpICtcbiAgICAgICh0aGlzW29mZnNldCArIDNdICogMHgxMDAwMDAwKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50MzJCRSA9IGZ1bmN0aW9uIHJlYWRVSW50MzJCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuXG4gIHJldHVybiAodGhpc1tvZmZzZXRdICogMHgxMDAwMDAwKSArXG4gICAgKCh0aGlzW29mZnNldCArIDFdIDw8IDE2KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMl0gPDwgOCkgfFxuICAgIHRoaXNbb2Zmc2V0ICsgM10pXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludExFID0gZnVuY3Rpb24gcmVhZEludExFIChvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgYnl0ZUxlbmd0aCwgdGhpcy5sZW5ndGgpXG5cbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0XVxuICB2YXIgbXVsID0gMVxuICB2YXIgaSA9IDBcbiAgd2hpbGUgKCsraSA8IGJ5dGVMZW5ndGggJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyBpXSAqIG11bFxuICB9XG4gIG11bCAqPSAweDgwXG5cbiAgaWYgKHZhbCA+PSBtdWwpIHZhbCAtPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aClcblxuICByZXR1cm4gdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludEJFID0gZnVuY3Rpb24gcmVhZEludEJFIChvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgYnl0ZUxlbmd0aCwgdGhpcy5sZW5ndGgpXG5cbiAgdmFyIGkgPSBieXRlTGVuZ3RoXG4gIHZhciBtdWwgPSAxXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldCArIC0taV1cbiAgd2hpbGUgKGkgPiAwICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdmFsICs9IHRoaXNbb2Zmc2V0ICsgLS1pXSAqIG11bFxuICB9XG4gIG11bCAqPSAweDgwXG5cbiAgaWYgKHZhbCA+PSBtdWwpIHZhbCAtPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aClcblxuICByZXR1cm4gdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDggPSBmdW5jdGlvbiByZWFkSW50OCAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDEsIHRoaXMubGVuZ3RoKVxuICBpZiAoISh0aGlzW29mZnNldF0gJiAweDgwKSkgcmV0dXJuICh0aGlzW29mZnNldF0pXG4gIHJldHVybiAoKDB4ZmYgLSB0aGlzW29mZnNldF0gKyAxKSAqIC0xKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQxNkxFID0gZnVuY3Rpb24gcmVhZEludDE2TEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAyLCB0aGlzLmxlbmd0aClcbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0XSB8ICh0aGlzW29mZnNldCArIDFdIDw8IDgpXG4gIHJldHVybiAodmFsICYgMHg4MDAwKSA/IHZhbCB8IDB4RkZGRjAwMDAgOiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50MTZCRSA9IGZ1bmN0aW9uIHJlYWRJbnQxNkJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMiwgdGhpcy5sZW5ndGgpXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldCArIDFdIHwgKHRoaXNbb2Zmc2V0XSA8PCA4KVxuICByZXR1cm4gKHZhbCAmIDB4ODAwMCkgPyB2YWwgfCAweEZGRkYwMDAwIDogdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDMyTEUgPSBmdW5jdGlvbiByZWFkSW50MzJMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuXG4gIHJldHVybiAodGhpc1tvZmZzZXRdKSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgOCkgfFxuICAgICh0aGlzW29mZnNldCArIDJdIDw8IDE2KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgM10gPDwgMjQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDMyQkUgPSBmdW5jdGlvbiByZWFkSW50MzJCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuXG4gIHJldHVybiAodGhpc1tvZmZzZXRdIDw8IDI0KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgMTYpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAyXSA8PCA4KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgM10pXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEZsb2F0TEUgPSBmdW5jdGlvbiByZWFkRmxvYXRMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gaWVlZTc1NC5yZWFkKHRoaXMsIG9mZnNldCwgdHJ1ZSwgMjMsIDQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEZsb2F0QkUgPSBmdW5jdGlvbiByZWFkRmxvYXRCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gaWVlZTc1NC5yZWFkKHRoaXMsIG9mZnNldCwgZmFsc2UsIDIzLCA0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWREb3VibGVMRSA9IGZ1bmN0aW9uIHJlYWREb3VibGVMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDgsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gaWVlZTc1NC5yZWFkKHRoaXMsIG9mZnNldCwgdHJ1ZSwgNTIsIDgpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZERvdWJsZUJFID0gZnVuY3Rpb24gcmVhZERvdWJsZUJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgOCwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiBpZWVlNzU0LnJlYWQodGhpcywgb2Zmc2V0LCBmYWxzZSwgNTIsIDgpXG59XG5cbmZ1bmN0aW9uIGNoZWNrSW50IChidWYsIHZhbHVlLCBvZmZzZXQsIGV4dCwgbWF4LCBtaW4pIHtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYnVmKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJidWZmZXJcIiBhcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIGluc3RhbmNlJylcbiAgaWYgKHZhbHVlID4gbWF4IHx8IHZhbHVlIDwgbWluKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignXCJ2YWx1ZVwiIGFyZ3VtZW50IGlzIG91dCBvZiBib3VuZHMnKVxuICBpZiAob2Zmc2V0ICsgZXh0ID4gYnVmLmxlbmd0aCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0luZGV4IG91dCBvZiByYW5nZScpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50TEUgPSBmdW5jdGlvbiB3cml0ZVVJbnRMRSAodmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCB8IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIHZhciBtYXhCeXRlcyA9IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoKSAtIDFcbiAgICBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBtYXhCeXRlcywgMClcbiAgfVxuXG4gIHZhciBtdWwgPSAxXG4gIHZhciBpID0gMFxuICB0aGlzW29mZnNldF0gPSB2YWx1ZSAmIDB4RkZcbiAgd2hpbGUgKCsraSA8IGJ5dGVMZW5ndGggJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB0aGlzW29mZnNldCArIGldID0gKHZhbHVlIC8gbXVsKSAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBvZmZzZXQgKyBieXRlTGVuZ3RoXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50QkUgPSBmdW5jdGlvbiB3cml0ZVVJbnRCRSAodmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCB8IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIHZhciBtYXhCeXRlcyA9IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoKSAtIDFcbiAgICBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBtYXhCeXRlcywgMClcbiAgfVxuXG4gIHZhciBpID0gYnl0ZUxlbmd0aCAtIDFcbiAgdmFyIG11bCA9IDFcbiAgdGhpc1tvZmZzZXQgKyBpXSA9IHZhbHVlICYgMHhGRlxuICB3aGlsZSAoLS1pID49IDAgJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB0aGlzW29mZnNldCArIGldID0gKHZhbHVlIC8gbXVsKSAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBvZmZzZXQgKyBieXRlTGVuZ3RoXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50OCA9IGZ1bmN0aW9uIHdyaXRlVUludDggKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMSwgMHhmZiwgMClcbiAgaWYgKCFCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkgdmFsdWUgPSBNYXRoLmZsb29yKHZhbHVlKVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICByZXR1cm4gb2Zmc2V0ICsgMVxufVxuXG5mdW5jdGlvbiBvYmplY3RXcml0ZVVJbnQxNiAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4pIHtcbiAgaWYgKHZhbHVlIDwgMCkgdmFsdWUgPSAweGZmZmYgKyB2YWx1ZSArIDFcbiAgZm9yICh2YXIgaSA9IDAsIGogPSBNYXRoLm1pbihidWYubGVuZ3RoIC0gb2Zmc2V0LCAyKTsgaSA8IGo7ICsraSkge1xuICAgIGJ1ZltvZmZzZXQgKyBpXSA9ICh2YWx1ZSAmICgweGZmIDw8ICg4ICogKGxpdHRsZUVuZGlhbiA/IGkgOiAxIC0gaSkpKSkgPj4+XG4gICAgICAobGl0dGxlRW5kaWFuID8gaSA6IDEgLSBpKSAqIDhcbiAgfVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDE2TEUgPSBmdW5jdGlvbiB3cml0ZVVJbnQxNkxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDB4ZmZmZiwgMClcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiA4KVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDE2KHRoaXMsIHZhbHVlLCBvZmZzZXQsIHRydWUpXG4gIH1cbiAgcmV0dXJuIG9mZnNldCArIDJcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQxNkJFID0gZnVuY3Rpb24gd3JpdGVVSW50MTZCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAyLCAweGZmZmYsIDApXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSA+Pj4gOClcbiAgICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlICYgMHhmZilcbiAgfSBlbHNlIHtcbiAgICBvYmplY3RXcml0ZVVJbnQxNih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSlcbiAgfVxuICByZXR1cm4gb2Zmc2V0ICsgMlxufVxuXG5mdW5jdGlvbiBvYmplY3RXcml0ZVVJbnQzMiAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4pIHtcbiAgaWYgKHZhbHVlIDwgMCkgdmFsdWUgPSAweGZmZmZmZmZmICsgdmFsdWUgKyAxXG4gIGZvciAodmFyIGkgPSAwLCBqID0gTWF0aC5taW4oYnVmLmxlbmd0aCAtIG9mZnNldCwgNCk7IGkgPCBqOyArK2kpIHtcbiAgICBidWZbb2Zmc2V0ICsgaV0gPSAodmFsdWUgPj4+IChsaXR0bGVFbmRpYW4gPyBpIDogMyAtIGkpICogOCkgJiAweGZmXG4gIH1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQzMkxFID0gZnVuY3Rpb24gd3JpdGVVSW50MzJMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCA0LCAweGZmZmZmZmZmLCAwKVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldCArIDNdID0gKHZhbHVlID4+PiAyNClcbiAgICB0aGlzW29mZnNldCArIDJdID0gKHZhbHVlID4+PiAxNilcbiAgICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiA4KVxuICAgIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0V3JpdGVVSW50MzIodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSlcbiAgfVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDMyQkUgPSBmdW5jdGlvbiB3cml0ZVVJbnQzMkJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDQsIDB4ZmZmZmZmZmYsIDApXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSA+Pj4gMjQpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gMTYpXG4gICAgdGhpc1tvZmZzZXQgKyAyXSA9ICh2YWx1ZSA+Pj4gOClcbiAgICB0aGlzW29mZnNldCArIDNdID0gKHZhbHVlICYgMHhmZilcbiAgfSBlbHNlIHtcbiAgICBvYmplY3RXcml0ZVVJbnQzMih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSlcbiAgfVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50TEUgPSBmdW5jdGlvbiB3cml0ZUludExFICh2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICB2YXIgbGltaXQgPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aCAtIDEpXG5cbiAgICBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBsaW1pdCAtIDEsIC1saW1pdClcbiAgfVxuXG4gIHZhciBpID0gMFxuICB2YXIgbXVsID0gMVxuICB2YXIgc3ViID0gMFxuICB0aGlzW29mZnNldF0gPSB2YWx1ZSAmIDB4RkZcbiAgd2hpbGUgKCsraSA8IGJ5dGVMZW5ndGggJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICBpZiAodmFsdWUgPCAwICYmIHN1YiA9PT0gMCAmJiB0aGlzW29mZnNldCArIGkgLSAxXSAhPT0gMCkge1xuICAgICAgc3ViID0gMVxuICAgIH1cbiAgICB0aGlzW29mZnNldCArIGldID0gKCh2YWx1ZSAvIG11bCkgPj4gMCkgLSBzdWIgJiAweEZGXG4gIH1cblxuICByZXR1cm4gb2Zmc2V0ICsgYnl0ZUxlbmd0aFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50QkUgPSBmdW5jdGlvbiB3cml0ZUludEJFICh2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICB2YXIgbGltaXQgPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aCAtIDEpXG5cbiAgICBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBsaW1pdCAtIDEsIC1saW1pdClcbiAgfVxuXG4gIHZhciBpID0gYnl0ZUxlbmd0aCAtIDFcbiAgdmFyIG11bCA9IDFcbiAgdmFyIHN1YiA9IDBcbiAgdGhpc1tvZmZzZXQgKyBpXSA9IHZhbHVlICYgMHhGRlxuICB3aGlsZSAoLS1pID49IDAgJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICBpZiAodmFsdWUgPCAwICYmIHN1YiA9PT0gMCAmJiB0aGlzW29mZnNldCArIGkgKyAxXSAhPT0gMCkge1xuICAgICAgc3ViID0gMVxuICAgIH1cbiAgICB0aGlzW29mZnNldCArIGldID0gKCh2YWx1ZSAvIG11bCkgPj4gMCkgLSBzdWIgJiAweEZGXG4gIH1cblxuICByZXR1cm4gb2Zmc2V0ICsgYnl0ZUxlbmd0aFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50OCA9IGZ1bmN0aW9uIHdyaXRlSW50OCAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAxLCAweDdmLCAtMHg4MClcbiAgaWYgKCFCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkgdmFsdWUgPSBNYXRoLmZsb29yKHZhbHVlKVxuICBpZiAodmFsdWUgPCAwKSB2YWx1ZSA9IDB4ZmYgKyB2YWx1ZSArIDFcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgcmV0dXJuIG9mZnNldCArIDFcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDE2TEUgPSBmdW5jdGlvbiB3cml0ZUludDE2TEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMiwgMHg3ZmZmLCAtMHg4MDAwKVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDgpXG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0V3JpdGVVSW50MTYodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSlcbiAgfVxuICByZXR1cm4gb2Zmc2V0ICsgMlxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50MTZCRSA9IGZ1bmN0aW9uIHdyaXRlSW50MTZCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAyLCAweDdmZmYsIC0weDgwMDApXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSA+Pj4gOClcbiAgICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlICYgMHhmZilcbiAgfSBlbHNlIHtcbiAgICBvYmplY3RXcml0ZVVJbnQxNih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSlcbiAgfVxuICByZXR1cm4gb2Zmc2V0ICsgMlxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50MzJMRSA9IGZ1bmN0aW9uIHdyaXRlSW50MzJMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCA0LCAweDdmZmZmZmZmLCAtMHg4MDAwMDAwMClcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiA4KVxuICAgIHRoaXNbb2Zmc2V0ICsgMl0gPSAodmFsdWUgPj4+IDE2KVxuICAgIHRoaXNbb2Zmc2V0ICsgM10gPSAodmFsdWUgPj4+IDI0KVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDMyKHRoaXMsIHZhbHVlLCBvZmZzZXQsIHRydWUpXG4gIH1cbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDMyQkUgPSBmdW5jdGlvbiB3cml0ZUludDMyQkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgNCwgMHg3ZmZmZmZmZiwgLTB4ODAwMDAwMDApXG4gIGlmICh2YWx1ZSA8IDApIHZhbHVlID0gMHhmZmZmZmZmZiArIHZhbHVlICsgMVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgPj4+IDI0KVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDE2KVxuICAgIHRoaXNbb2Zmc2V0ICsgMl0gPSAodmFsdWUgPj4+IDgpXG4gICAgdGhpc1tvZmZzZXQgKyAzXSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0V3JpdGVVSW50MzIodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UpXG4gIH1cbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuZnVuY3Rpb24gY2hlY2tJRUVFNzU0IChidWYsIHZhbHVlLCBvZmZzZXQsIGV4dCwgbWF4LCBtaW4pIHtcbiAgaWYgKG9mZnNldCArIGV4dCA+IGJ1Zi5sZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbmRleCBvdXQgb2YgcmFuZ2UnKVxuICBpZiAob2Zmc2V0IDwgMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0luZGV4IG91dCBvZiByYW5nZScpXG59XG5cbmZ1bmN0aW9uIHdyaXRlRmxvYXQgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuLCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgY2hlY2tJRUVFNzU0KGJ1ZiwgdmFsdWUsIG9mZnNldCwgNCwgMy40MDI4MjM0NjYzODUyODg2ZSszOCwgLTMuNDAyODIzNDY2Mzg1Mjg4NmUrMzgpXG4gIH1cbiAgaWVlZTc1NC53cml0ZShidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgMjMsIDQpXG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVGbG9hdExFID0gZnVuY3Rpb24gd3JpdGVGbG9hdExFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICByZXR1cm4gd3JpdGVGbG9hdCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlLCBub0Fzc2VydClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUZsb2F0QkUgPSBmdW5jdGlvbiB3cml0ZUZsb2F0QkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHJldHVybiB3cml0ZUZsb2F0KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGZhbHNlLCBub0Fzc2VydClcbn1cblxuZnVuY3Rpb24gd3JpdGVEb3VibGUgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuLCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgY2hlY2tJRUVFNzU0KGJ1ZiwgdmFsdWUsIG9mZnNldCwgOCwgMS43OTc2OTMxMzQ4NjIzMTU3RSszMDgsIC0xLjc5NzY5MzEzNDg2MjMxNTdFKzMwOClcbiAgfVxuICBpZWVlNzU0LndyaXRlKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuLCA1MiwgOClcbiAgcmV0dXJuIG9mZnNldCArIDhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZURvdWJsZUxFID0gZnVuY3Rpb24gd3JpdGVEb3VibGVMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgcmV0dXJuIHdyaXRlRG91YmxlKHRoaXMsIHZhbHVlLCBvZmZzZXQsIHRydWUsIG5vQXNzZXJ0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRG91YmxlQkUgPSBmdW5jdGlvbiB3cml0ZURvdWJsZUJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICByZXR1cm4gd3JpdGVEb3VibGUodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UsIG5vQXNzZXJ0KVxufVxuXG4vLyBjb3B5KHRhcmdldEJ1ZmZlciwgdGFyZ2V0U3RhcnQ9MCwgc291cmNlU3RhcnQ9MCwgc291cmNlRW5kPWJ1ZmZlci5sZW5ndGgpXG5CdWZmZXIucHJvdG90eXBlLmNvcHkgPSBmdW5jdGlvbiBjb3B5ICh0YXJnZXQsIHRhcmdldFN0YXJ0LCBzdGFydCwgZW5kKSB7XG4gIGlmICghc3RhcnQpIHN0YXJ0ID0gMFxuICBpZiAoIWVuZCAmJiBlbmQgIT09IDApIGVuZCA9IHRoaXMubGVuZ3RoXG4gIGlmICh0YXJnZXRTdGFydCA+PSB0YXJnZXQubGVuZ3RoKSB0YXJnZXRTdGFydCA9IHRhcmdldC5sZW5ndGhcbiAgaWYgKCF0YXJnZXRTdGFydCkgdGFyZ2V0U3RhcnQgPSAwXG4gIGlmIChlbmQgPiAwICYmIGVuZCA8IHN0YXJ0KSBlbmQgPSBzdGFydFxuXG4gIC8vIENvcHkgMCBieXRlczsgd2UncmUgZG9uZVxuICBpZiAoZW5kID09PSBzdGFydCkgcmV0dXJuIDBcbiAgaWYgKHRhcmdldC5sZW5ndGggPT09IDAgfHwgdGhpcy5sZW5ndGggPT09IDApIHJldHVybiAwXG5cbiAgLy8gRmF0YWwgZXJyb3IgY29uZGl0aW9uc1xuICBpZiAodGFyZ2V0U3RhcnQgPCAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3RhcmdldFN0YXJ0IG91dCBvZiBib3VuZHMnKVxuICB9XG4gIGlmIChzdGFydCA8IDAgfHwgc3RhcnQgPj0gdGhpcy5sZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdzb3VyY2VTdGFydCBvdXQgb2YgYm91bmRzJylcbiAgaWYgKGVuZCA8IDApIHRocm93IG5ldyBSYW5nZUVycm9yKCdzb3VyY2VFbmQgb3V0IG9mIGJvdW5kcycpXG5cbiAgLy8gQXJlIHdlIG9vYj9cbiAgaWYgKGVuZCA+IHRoaXMubGVuZ3RoKSBlbmQgPSB0aGlzLmxlbmd0aFxuICBpZiAodGFyZ2V0Lmxlbmd0aCAtIHRhcmdldFN0YXJ0IDwgZW5kIC0gc3RhcnQpIHtcbiAgICBlbmQgPSB0YXJnZXQubGVuZ3RoIC0gdGFyZ2V0U3RhcnQgKyBzdGFydFxuICB9XG5cbiAgdmFyIGxlbiA9IGVuZCAtIHN0YXJ0XG4gIHZhciBpXG5cbiAgaWYgKHRoaXMgPT09IHRhcmdldCAmJiBzdGFydCA8IHRhcmdldFN0YXJ0ICYmIHRhcmdldFN0YXJ0IDwgZW5kKSB7XG4gICAgLy8gZGVzY2VuZGluZyBjb3B5IGZyb20gZW5kXG4gICAgZm9yIChpID0gbGVuIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgIHRhcmdldFtpICsgdGFyZ2V0U3RhcnRdID0gdGhpc1tpICsgc3RhcnRdXG4gICAgfVxuICB9IGVsc2UgaWYgKGxlbiA8IDEwMDAgfHwgIUJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgLy8gYXNjZW5kaW5nIGNvcHkgZnJvbSBzdGFydFxuICAgIGZvciAoaSA9IDA7IGkgPCBsZW47ICsraSkge1xuICAgICAgdGFyZ2V0W2kgKyB0YXJnZXRTdGFydF0gPSB0aGlzW2kgKyBzdGFydF1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgVWludDhBcnJheS5wcm90b3R5cGUuc2V0LmNhbGwoXG4gICAgICB0YXJnZXQsXG4gICAgICB0aGlzLnN1YmFycmF5KHN0YXJ0LCBzdGFydCArIGxlbiksXG4gICAgICB0YXJnZXRTdGFydFxuICAgIClcbiAgfVxuXG4gIHJldHVybiBsZW5cbn1cblxuLy8gVXNhZ2U6XG4vLyAgICBidWZmZXIuZmlsbChudW1iZXJbLCBvZmZzZXRbLCBlbmRdXSlcbi8vICAgIGJ1ZmZlci5maWxsKGJ1ZmZlclssIG9mZnNldFssIGVuZF1dKVxuLy8gICAgYnVmZmVyLmZpbGwoc3RyaW5nWywgb2Zmc2V0WywgZW5kXV1bLCBlbmNvZGluZ10pXG5CdWZmZXIucHJvdG90eXBlLmZpbGwgPSBmdW5jdGlvbiBmaWxsICh2YWwsIHN0YXJ0LCBlbmQsIGVuY29kaW5nKSB7XG4gIC8vIEhhbmRsZSBzdHJpbmcgY2FzZXM6XG4gIGlmICh0eXBlb2YgdmFsID09PSAnc3RyaW5nJykge1xuICAgIGlmICh0eXBlb2Ygc3RhcnQgPT09ICdzdHJpbmcnKSB7XG4gICAgICBlbmNvZGluZyA9IHN0YXJ0XG4gICAgICBzdGFydCA9IDBcbiAgICAgIGVuZCA9IHRoaXMubGVuZ3RoXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZW5kID09PSAnc3RyaW5nJykge1xuICAgICAgZW5jb2RpbmcgPSBlbmRcbiAgICAgIGVuZCA9IHRoaXMubGVuZ3RoXG4gICAgfVxuICAgIGlmICh2YWwubGVuZ3RoID09PSAxKSB7XG4gICAgICB2YXIgY29kZSA9IHZhbC5jaGFyQ29kZUF0KDApXG4gICAgICBpZiAoY29kZSA8IDI1Nikge1xuICAgICAgICB2YWwgPSBjb2RlXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChlbmNvZGluZyAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBlbmNvZGluZyAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2VuY29kaW5nIG11c3QgYmUgYSBzdHJpbmcnKVxuICAgIH1cbiAgICBpZiAodHlwZW9mIGVuY29kaW5nID09PSAnc3RyaW5nJyAmJiAhQnVmZmVyLmlzRW5jb2RpbmcoZW5jb2RpbmcpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmtub3duIGVuY29kaW5nOiAnICsgZW5jb2RpbmcpXG4gICAgfVxuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWwgPT09ICdudW1iZXInKSB7XG4gICAgdmFsID0gdmFsICYgMjU1XG4gIH1cblxuICAvLyBJbnZhbGlkIHJhbmdlcyBhcmUgbm90IHNldCB0byBhIGRlZmF1bHQsIHNvIGNhbiByYW5nZSBjaGVjayBlYXJseS5cbiAgaWYgKHN0YXJ0IDwgMCB8fCB0aGlzLmxlbmd0aCA8IHN0YXJ0IHx8IHRoaXMubGVuZ3RoIDwgZW5kKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ091dCBvZiByYW5nZSBpbmRleCcpXG4gIH1cblxuICBpZiAoZW5kIDw9IHN0YXJ0KSB7XG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIHN0YXJ0ID0gc3RhcnQgPj4+IDBcbiAgZW5kID0gZW5kID09PSB1bmRlZmluZWQgPyB0aGlzLmxlbmd0aCA6IGVuZCA+Pj4gMFxuXG4gIGlmICghdmFsKSB2YWwgPSAwXG5cbiAgdmFyIGlcbiAgaWYgKHR5cGVvZiB2YWwgPT09ICdudW1iZXInKSB7XG4gICAgZm9yIChpID0gc3RhcnQ7IGkgPCBlbmQ7ICsraSkge1xuICAgICAgdGhpc1tpXSA9IHZhbFxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB2YXIgYnl0ZXMgPSBCdWZmZXIuaXNCdWZmZXIodmFsKVxuICAgICAgPyB2YWxcbiAgICAgIDogdXRmOFRvQnl0ZXMobmV3IEJ1ZmZlcih2YWwsIGVuY29kaW5nKS50b1N0cmluZygpKVxuICAgIHZhciBsZW4gPSBieXRlcy5sZW5ndGhcbiAgICBmb3IgKGkgPSAwOyBpIDwgZW5kIC0gc3RhcnQ7ICsraSkge1xuICAgICAgdGhpc1tpICsgc3RhcnRdID0gYnl0ZXNbaSAlIGxlbl1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGhpc1xufVxuXG4vLyBIRUxQRVIgRlVOQ1RJT05TXG4vLyA9PT09PT09PT09PT09PT09XG5cbnZhciBJTlZBTElEX0JBU0U2NF9SRSA9IC9bXitcXC8wLTlBLVphLXotX10vZ1xuXG5mdW5jdGlvbiBiYXNlNjRjbGVhbiAoc3RyKSB7XG4gIC8vIE5vZGUgc3RyaXBzIG91dCBpbnZhbGlkIGNoYXJhY3RlcnMgbGlrZSBcXG4gYW5kIFxcdCBmcm9tIHRoZSBzdHJpbmcsIGJhc2U2NC1qcyBkb2VzIG5vdFxuICBzdHIgPSBzdHJpbmd0cmltKHN0cikucmVwbGFjZShJTlZBTElEX0JBU0U2NF9SRSwgJycpXG4gIC8vIE5vZGUgY29udmVydHMgc3RyaW5ncyB3aXRoIGxlbmd0aCA8IDIgdG8gJydcbiAgaWYgKHN0ci5sZW5ndGggPCAyKSByZXR1cm4gJydcbiAgLy8gTm9kZSBhbGxvd3MgZm9yIG5vbi1wYWRkZWQgYmFzZTY0IHN0cmluZ3MgKG1pc3NpbmcgdHJhaWxpbmcgPT09KSwgYmFzZTY0LWpzIGRvZXMgbm90XG4gIHdoaWxlIChzdHIubGVuZ3RoICUgNCAhPT0gMCkge1xuICAgIHN0ciA9IHN0ciArICc9J1xuICB9XG4gIHJldHVybiBzdHJcbn1cblxuZnVuY3Rpb24gc3RyaW5ndHJpbSAoc3RyKSB7XG4gIGlmIChzdHIudHJpbSkgcmV0dXJuIHN0ci50cmltKClcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKC9eXFxzK3xcXHMrJC9nLCAnJylcbn1cblxuZnVuY3Rpb24gdG9IZXggKG4pIHtcbiAgaWYgKG4gPCAxNikgcmV0dXJuICcwJyArIG4udG9TdHJpbmcoMTYpXG4gIHJldHVybiBuLnRvU3RyaW5nKDE2KVxufVxuXG5mdW5jdGlvbiB1dGY4VG9CeXRlcyAoc3RyaW5nLCB1bml0cykge1xuICB1bml0cyA9IHVuaXRzIHx8IEluZmluaXR5XG4gIHZhciBjb2RlUG9pbnRcbiAgdmFyIGxlbmd0aCA9IHN0cmluZy5sZW5ndGhcbiAgdmFyIGxlYWRTdXJyb2dhdGUgPSBudWxsXG4gIHZhciBieXRlcyA9IFtdXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgIGNvZGVQb2ludCA9IHN0cmluZy5jaGFyQ29kZUF0KGkpXG5cbiAgICAvLyBpcyBzdXJyb2dhdGUgY29tcG9uZW50XG4gICAgaWYgKGNvZGVQb2ludCA+IDB4RDdGRiAmJiBjb2RlUG9pbnQgPCAweEUwMDApIHtcbiAgICAgIC8vIGxhc3QgY2hhciB3YXMgYSBsZWFkXG4gICAgICBpZiAoIWxlYWRTdXJyb2dhdGUpIHtcbiAgICAgICAgLy8gbm8gbGVhZCB5ZXRcbiAgICAgICAgaWYgKGNvZGVQb2ludCA+IDB4REJGRikge1xuICAgICAgICAgIC8vIHVuZXhwZWN0ZWQgdHJhaWxcbiAgICAgICAgICBpZiAoKHVuaXRzIC09IDMpID4gLTEpIGJ5dGVzLnB1c2goMHhFRiwgMHhCRiwgMHhCRClcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9IGVsc2UgaWYgKGkgKyAxID09PSBsZW5ndGgpIHtcbiAgICAgICAgICAvLyB1bnBhaXJlZCBsZWFkXG4gICAgICAgICAgaWYgKCh1bml0cyAtPSAzKSA+IC0xKSBieXRlcy5wdXNoKDB4RUYsIDB4QkYsIDB4QkQpXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHZhbGlkIGxlYWRcbiAgICAgICAgbGVhZFN1cnJvZ2F0ZSA9IGNvZGVQb2ludFxuXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIC8vIDIgbGVhZHMgaW4gYSByb3dcbiAgICAgIGlmIChjb2RlUG9pbnQgPCAweERDMDApIHtcbiAgICAgICAgaWYgKCh1bml0cyAtPSAzKSA+IC0xKSBieXRlcy5wdXNoKDB4RUYsIDB4QkYsIDB4QkQpXG4gICAgICAgIGxlYWRTdXJyb2dhdGUgPSBjb2RlUG9pbnRcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgLy8gdmFsaWQgc3Vycm9nYXRlIHBhaXJcbiAgICAgIGNvZGVQb2ludCA9IChsZWFkU3Vycm9nYXRlIC0gMHhEODAwIDw8IDEwIHwgY29kZVBvaW50IC0gMHhEQzAwKSArIDB4MTAwMDBcbiAgICB9IGVsc2UgaWYgKGxlYWRTdXJyb2dhdGUpIHtcbiAgICAgIC8vIHZhbGlkIGJtcCBjaGFyLCBidXQgbGFzdCBjaGFyIHdhcyBhIGxlYWRcbiAgICAgIGlmICgodW5pdHMgLT0gMykgPiAtMSkgYnl0ZXMucHVzaCgweEVGLCAweEJGLCAweEJEKVxuICAgIH1cblxuICAgIGxlYWRTdXJyb2dhdGUgPSBudWxsXG5cbiAgICAvLyBlbmNvZGUgdXRmOFxuICAgIGlmIChjb2RlUG9pbnQgPCAweDgwKSB7XG4gICAgICBpZiAoKHVuaXRzIC09IDEpIDwgMCkgYnJlYWtcbiAgICAgIGJ5dGVzLnB1c2goY29kZVBvaW50KVxuICAgIH0gZWxzZSBpZiAoY29kZVBvaW50IDwgMHg4MDApIHtcbiAgICAgIGlmICgodW5pdHMgLT0gMikgPCAwKSBicmVha1xuICAgICAgYnl0ZXMucHVzaChcbiAgICAgICAgY29kZVBvaW50ID4+IDB4NiB8IDB4QzAsXG4gICAgICAgIGNvZGVQb2ludCAmIDB4M0YgfCAweDgwXG4gICAgICApXG4gICAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPCAweDEwMDAwKSB7XG4gICAgICBpZiAoKHVuaXRzIC09IDMpIDwgMCkgYnJlYWtcbiAgICAgIGJ5dGVzLnB1c2goXG4gICAgICAgIGNvZGVQb2ludCA+PiAweEMgfCAweEUwLFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHg2ICYgMHgzRiB8IDB4ODAsXG4gICAgICAgIGNvZGVQb2ludCAmIDB4M0YgfCAweDgwXG4gICAgICApXG4gICAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPCAweDExMDAwMCkge1xuICAgICAgaWYgKCh1bml0cyAtPSA0KSA8IDApIGJyZWFrXG4gICAgICBieXRlcy5wdXNoKFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHgxMiB8IDB4RjAsXG4gICAgICAgIGNvZGVQb2ludCA+PiAweEMgJiAweDNGIHwgMHg4MCxcbiAgICAgICAgY29kZVBvaW50ID4+IDB4NiAmIDB4M0YgfCAweDgwLFxuICAgICAgICBjb2RlUG9pbnQgJiAweDNGIHwgMHg4MFxuICAgICAgKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgY29kZSBwb2ludCcpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGJ5dGVzXG59XG5cbmZ1bmN0aW9uIGFzY2lpVG9CeXRlcyAoc3RyKSB7XG4gIHZhciBieXRlQXJyYXkgPSBbXVxuICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7ICsraSkge1xuICAgIC8vIE5vZGUncyBjb2RlIHNlZW1zIHRvIGJlIGRvaW5nIHRoaXMgYW5kIG5vdCAmIDB4N0YuLlxuICAgIGJ5dGVBcnJheS5wdXNoKHN0ci5jaGFyQ29kZUF0KGkpICYgMHhGRilcbiAgfVxuICByZXR1cm4gYnl0ZUFycmF5XG59XG5cbmZ1bmN0aW9uIHV0ZjE2bGVUb0J5dGVzIChzdHIsIHVuaXRzKSB7XG4gIHZhciBjLCBoaSwgbG9cbiAgdmFyIGJ5dGVBcnJheSA9IFtdXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgKytpKSB7XG4gICAgaWYgKCh1bml0cyAtPSAyKSA8IDApIGJyZWFrXG5cbiAgICBjID0gc3RyLmNoYXJDb2RlQXQoaSlcbiAgICBoaSA9IGMgPj4gOFxuICAgIGxvID0gYyAlIDI1NlxuICAgIGJ5dGVBcnJheS5wdXNoKGxvKVxuICAgIGJ5dGVBcnJheS5wdXNoKGhpKVxuICB9XG5cbiAgcmV0dXJuIGJ5dGVBcnJheVxufVxuXG5mdW5jdGlvbiBiYXNlNjRUb0J5dGVzIChzdHIpIHtcbiAgcmV0dXJuIGJhc2U2NC50b0J5dGVBcnJheShiYXNlNjRjbGVhbihzdHIpKVxufVxuXG5mdW5jdGlvbiBibGl0QnVmZmVyIChzcmMsIGRzdCwgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgIGlmICgoaSArIG9mZnNldCA+PSBkc3QubGVuZ3RoKSB8fCAoaSA+PSBzcmMubGVuZ3RoKSkgYnJlYWtcbiAgICBkc3RbaSArIG9mZnNldF0gPSBzcmNbaV1cbiAgfVxuICByZXR1cm4gaVxufVxuXG5mdW5jdGlvbiBpc25hbiAodmFsKSB7XG4gIHJldHVybiB2YWwgIT09IHZhbCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXNlbGYtY29tcGFyZVxufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///165\n");
/***/ }),
/***/ 170:
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\n\nvar yaml = __webpack_require__(208);\n\n\nmodule.exports = yaml;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvanMteWFtbC9pbmRleC5qcz82NTFlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhOzs7QUFHYixXQUFXLG1CQUFPLENBQUMsR0FBa0I7OztBQUdyQyIsImZpbGUiOiIxNzAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cblxudmFyIHlhbWwgPSByZXF1aXJlKCcuL2xpYi9qcy15YW1sLmpzJyk7XG5cblxubW9kdWxlLmV4cG9ydHMgPSB5YW1sO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///170\n");
/***/ }),
/***/ 197:
/***/ (function(module, exports, __webpack_require__) {
eval("// style-loader: Adds some css to the DOM by adding a \");\n }\n }, {\n key: \"initTheme\",\n value: function initTheme(root) {\n var _this3 = this;\n\n // Only watch for reactivity on client side\n if (typeof document === 'undefined') return; // If we get here somehow, ensure\n // existing instance is removed\n\n if (this.unwatch) {\n this.unwatch();\n this.unwatch = null;\n } // TODO: Update to use RFC if merged\n // https://github.com/vuejs/rfcs/blob/advanced-reactivity-api/active-rfcs/0000-advanced-reactivity-api.md\n\n\n root.$once('hook:created', function () {\n var obs = vue_runtime_esm[\"a\" /* default */].observable({\n themes: _this3.themes\n });\n _this3.unwatch = root.$watch(function () {\n return obs.themes;\n }, function () {\n return _this3.applyTheme();\n }, {\n deep: true\n });\n });\n this.applyTheme();\n }\n }, {\n key: \"css\",\n set: function set(val) {\n if (this.vueMeta) {\n if (this.isVueMeta23) {\n this.applyVueMeta23();\n }\n\n return;\n }\n\n this.checkOrCreateStyleElement() && (this.styleEl.innerHTML = val);\n }\n }, {\n key: \"dark\",\n set: function set(val) {\n var oldDark = this.isDark;\n this.isDark = val; // Only apply theme after dark\n // has already been set before\n\n oldDark != null && this.applyTheme();\n },\n get: function get() {\n return Boolean(this.isDark);\n }\n }, {\n key: \"currentTheme\",\n get: function get() {\n var target = this.dark ? 'dark' : 'light';\n return this.themes[target];\n }\n }, {\n key: \"generatedStyles\",\n get: function get() {\n var theme = this.parsedTheme;\n /* istanbul ignore next */\n\n var options = this.options || {};\n var css;\n\n if (options.themeCache != null) {\n css = options.themeCache.get(theme);\n /* istanbul ignore if */\n\n if (css != null) return css;\n }\n\n css = genStyles(theme, options.customProperties);\n\n if (options.minifyTheme != null) {\n css = options.minifyTheme(css);\n }\n\n if (options.themeCache != null) {\n options.themeCache.set(theme, css);\n }\n\n return css;\n }\n }, {\n key: \"parsedTheme\",\n get: function get() {\n return parse(this.currentTheme || {}, undefined, Object(helpers[\"k\" /* getNestedValue */])(this.options, ['variations'], true));\n } // Is using v2.3 of vue-meta\n // https://github.com/nuxt/vue-meta/releases/tag/v2.3.0\n\n }, {\n key: \"isVueMeta23\",\n get: function get() {\n return typeof this.vueMeta.addApp === 'function';\n }\n }]);\n\n return Theme;\n}(service_Service);\ntheme_Theme.property = 'theme';\n// CONCATENATED MODULE: ./node_modules/vuetify/lib/framework.js\n\n\n\n\n // Services\n\n\n\nvar framework_Vuetify = /*#__PURE__*/function () {\n function Vuetify() {\n var userPreset = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n Object(classCallCheck[\"a\" /* default */])(this, Vuetify);\n\n this.framework = {\n isHydrating: false\n };\n this.installed = [];\n this.preset = {};\n this.userPreset = {};\n this.userPreset = userPreset;\n this.use(presets_Presets);\n this.use(application_Application);\n this.use(breakpoint_Breakpoint);\n this.use(goto_Goto);\n this.use(icons_Icons);\n this.use(lang_Lang);\n this.use(theme_Theme);\n } // Called on the new vuetify instance\n // bootstrap in install beforeCreate\n // Exposes ssrContext if available\n\n\n Object(createClass[\"a\" /* default */])(Vuetify, [{\n key: \"init\",\n value: function init(root, ssrContext) {\n var _this = this;\n\n this.installed.forEach(function (property) {\n var service = _this.framework[property];\n service.framework = _this.framework;\n service.init(root, ssrContext);\n }); // rtl is not installed and\n // will never be called by\n // the init process\n\n this.framework.rtl = Boolean(this.preset.rtl);\n } // Instantiate a VuetifyService\n\n }, {\n key: \"use\",\n value: function use(Service) {\n var property = Service.property;\n if (this.installed.includes(property)) return; // TODO maybe a specific type for arg 2?\n\n this.framework[property] = new Service(this.preset, this);\n this.installed.push(property);\n }\n }]);\n\n return Vuetify;\n}();\n\n\nframework_Vuetify.install = install;\nframework_Vuetify.installed = false;\nframework_Vuetify.version = \"2.3.10\";\nframework_Vuetify.config = {\n silent: false\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vc3JjL2luc3RhbGwudHM/Nzc0NCIsIndlYnBhY2s6Ly8vLi4vLi4vc3JjL2xvY2FsZS9lbi50cz80OTYyIiwid2VicGFjazovLy8uLi8uLi8uLi9zcmMvcHJlc2V0cy9kZWZhdWx0L2luZGV4LnRzP2ZiZjUiLCJ3ZWJwYWNrOi8vLy4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9zZXJ2aWNlL2luZGV4LnRzP2UyYjEiLCJ3ZWJwYWNrOi8vLy4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9wcmVzZXRzL2luZGV4LnRzP2Y5OGYiLCJ3ZWJwYWNrOi8vLy4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9hcHBsaWNhdGlvbi9pbmRleC50cz9hMmJkIiwid2VicGFjazovLy8uLi8uLi8uLi9zcmMvc2VydmljZXMvYnJlYWtwb2ludC9pbmRleC50cz80YTRkIiwid2VicGFjazovLy8uLi8uLi8uLi9zcmMvc2VydmljZXMvZ290by9lYXNpbmctcGF0dGVybnMudHM/MDQ4MiIsIndlYnBhY2s6Ly8vLi4vLi4vLi4vc3JjL3NlcnZpY2VzL2dvdG8vdXRpbC50cz85NDNiIiwid2VicGFjazovLy8uLi8uLi8uLi9zcmMvc2VydmljZXMvZ290by9pbmRleC50cz8xZDBkIiwid2VicGFjazovLy8uLi8uLi8uLi8uLi9zcmMvc2VydmljZXMvaWNvbnMvcHJlc2V0cy9tZGktc3ZnLnRzP2UwNjMiLCJ3ZWJwYWNrOi8vLy4uLy4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9pY29ucy9wcmVzZXRzL21kLnRzPzJkYjgiLCJ3ZWJwYWNrOi8vLy4uLy4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9pY29ucy9wcmVzZXRzL21kaS50cz81MDVmIiwid2VicGFjazovLy8uLi8uLi8uLi8uLi9zcmMvc2VydmljZXMvaWNvbnMvcHJlc2V0cy9mYS50cz82MDJkIiwid2VicGFjazovLy8uLi8uLi8uLi8uLi9zcmMvc2VydmljZXMvaWNvbnMvcHJlc2V0cy9mYTQudHM/MTIzYSIsIndlYnBhY2s6Ly8vLi4vLi4vLi4vLi4vc3JjL3NlcnZpY2VzL2ljb25zL3ByZXNldHMvZmEtc3ZnLnRzP2U2OGUiLCJ3ZWJwYWNrOi8vLy4uLy4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9pY29ucy9wcmVzZXRzL2luZGV4LnRzPzFjYTgiLCJ3ZWJwYWNrOi8vLy4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9pY29ucy9pbmRleC50cz84YTA0Iiwid2VicGFjazovLy8uLi8uLi8uLi9zcmMvc2VydmljZXMvbGFuZy9pbmRleC50cz9hNWM5Iiwid2VicGFjazovLy8uLi8uLi8uLi9zcmMvdXRpbC9jb2xvci90cmFuc2Zvcm1DSUVMQUIudHM/Y2Y3OSIsIndlYnBhY2s6Ly8vLi4vLi4vLi4vc3JjL3NlcnZpY2VzL3RoZW1lL3V0aWxzLnRzPzIyNWUiLCJ3ZWJwYWNrOi8vLy4uLy4uLy4uL3NyYy9zZXJ2aWNlcy90aGVtZS9pbmRleC50cz9jZWI2Iiwid2VicGFjazovLy8uLi9zcmMvZnJhbWV3b3JrLnRzP2JiYmQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBRUE7QUFFTSxzQkFBb0U7QUFBQSxNQUE1QixJQUE0Qix1RUFBcEUsRUFBb0U7QUFDeEUsTUFBSyxPQUFlLENBQXBCLFdBQWdDO0FBQy9CLFNBQWUsQ0FBZjs7QUFFRCxNQUFJLGtDQUFNLEtBQVYsS0FBb0I7QUFDbEIsMkNBQVksQ0FBWiwwSkFBWSxDQUFaO0FBQ0Q7O0FBRUQsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFKLGNBQW5CO0FBQ0EsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFKLGNBQW5COztBQUVBLE9BQUssSUFBTCxvQkFBK0I7QUFDN0IsUUFBTSxTQUFTLEdBQUcsVUFBVSxDQUE1QixJQUE0QixDQUE1QjtBQUVBLE9BQUcsQ0FBSDtBQUNEOztBQUVELEdBQUMsd0NBQTRDO0FBQzNDLG9CQUFnQjtBQUNkLFdBQUssSUFBTCxtQkFBOEI7QUFDNUIsWUFBTSxTQUFTLEdBQUcsVUFBVSxDQUE1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ImltcG9ydCBPdXJWdWUsIHsgVnVlQ29uc3RydWN0b3IgfSBmcm9tICd2dWUnXG5pbXBvcnQgeyBWdWV0aWZ5VXNlT3B0aW9ucyB9IGZyb20gJ3Z1ZXRpZnkvdHlwZXMnXG5pbXBvcnQgeyBjb25zb2xlRXJyb3IgfSBmcm9tICcuL3V0aWwvY29uc29sZSdcblxuZXhwb3J0IGZ1bmN0aW9uIGluc3RhbGwgKFZ1ZTogVnVlQ29uc3RydWN0b3IsIGFyZ3M6IFZ1ZXRpZnlVc2VPcHRpb25zID0ge30pIHtcbiAgaWYgKChpbnN0YWxsIGFzIGFueSkuaW5zdGFsbGVkKSByZXR1cm5cbiAgKGluc3RhbGwgYXMgYW55KS5pbnN0YWxsZWQgPSB0cnVlXG5cbiAgaWYgKE91clZ1ZSAhPT0gVnVlKSB7XG4gICAgY29uc29sZUVycm9yKCdNdWx0aXBsZSBpbnN0YW5jZXMgb2YgVnVlIGRldGVjdGVkXFxuU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS92dWV0aWZ5anMvdnVldGlmeS9pc3N1ZXMvNDA2OFxcblxcbklmIHlvdVxcJ3JlIHNlZWluZyBcIiRhdHRycyBpcyByZWFkb25seVwiLCBpdFxcJ3MgY2F1c2VkIGJ5IHRoaXMnKVxuICB9XG5cbiAgY29uc3QgY29tcG9uZW50cyA9IGFyZ3MuY29tcG9uZW50cyB8fCB7fVxuICBjb25zdCBkaXJlY3RpdmVzID0gYXJncy5kaXJlY3RpdmVzIHx8IHt9XG5cbiAgZm9yIChjb25zdCBuYW1lIGluIGRpcmVjdGl2ZXMpIHtcbiAgICBjb25zdCBkaXJlY3RpdmUgPSBkaXJlY3RpdmVzW25hbWVdXG5cbiAgICBWdWUuZGlyZWN0aXZlKG5hbWUsIGRpcmVjdGl2ZSlcbiAgfVxuXG4gIChmdW5jdGlvbiByZWdpc3RlckNvbXBvbmVudHMgKGNvbXBvbmVudHM6IGFueSkge1xuICAgIGlmIChjb21wb25lbnRzKSB7XG4gICAgICBmb3IgKGNvbnN0IGtleSBpbiBjb21wb25lbnRzKSB7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IGNvbXBvbmVudHNba2V5XVxuICAgICAgICBpZiAoY29tcG9uZW50ICYmICFyZWdpc3RlckNvbXBvbmVudHMoY29tcG9uZW50LiRfdnVldGlmeV9zdWJjb21wb25lbnRzKSkge1xuICAgICAgICAgIFZ1ZS5jb21wb25lbnQoa2V5LCBjb21wb25lbnQgYXMgdHlwZW9mIFZ1ZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlXG4gIH0pKGNvbXBvbmVudHMpXG5cbiAgLy8gVXNlZCB0byBhdm9pZCBtdWx0aXBsZSBtaXhpbnMgYmVpbmcgc2V0dXBcbiAgLy8gd2hlbiBpbiBkZXYgbW9kZSBhbmQgaG90IG1vZHVsZSByZWxvYWRcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS9pc3N1ZXMvNTA4OSNpc3N1ZWNvbW1lbnQtMjg0MjYwMTExXG4gIGlmIChWdWUuJF92dWV0aWZ5X2luc3RhbGxlZCkgcmV0dXJuXG4gIFZ1ZS4kX3Z1ZXRpZnlfaW5zdGFsbGVkID0gdHJ1ZVxuXG4gIFZ1ZS5taXhpbih7XG4gICAgYmVmb3JlQ3JlYXRlICgpIHtcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLiRvcHRpb25zIGFzIGFueVxuXG4gICAgICBpZiAob3B0aW9ucy52dWV0aWZ5KSB7XG4gICAgICAgIG9wdGlvbnMudnVldGlmeS5pbml0KHRoaXMsIHRoaXMuJHNzckNvbnRleHQpXG4gICAgICAgIHRoaXMuJHZ1ZXRpZnkgPSBWdWUub2JzZXJ2YWJsZShvcHRpb25zLnZ1ZXRpZnkuZnJhbWV3b3JrKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy4kdnVldGlmeSA9IChvcHRpb25zLnBhcmVudCAmJiBvcHRpb25zLnBhcmVudC4kdnVldGlmeSkgfHwgdGhpc1xuICAgICAgfVxuICAgIH0sXG4gICAgYmVmb3JlTW91bnQgKCkge1xuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgaWYgKHRoaXMuJG9wdGlvbnMudnVldGlmeSAmJiB0aGlzLiRlbCAmJiB0aGlzLiRlbC5oYXNBdHRyaWJ1dGUoJ2RhdGEtc2VydmVyLXJlbmRlcmVkJykpIHtcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICB0aGlzLiR2dWV0aWZ5LmlzSHlkcmF0aW5nID0gdHJ1ZVxuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIHRoaXMuJHZ1ZXRpZnkuYnJlYWtwb2ludC51cGRhdGUodHJ1ZSlcbiAgICAgIH1cbiAgICB9LFxuICAgIG1vdW50ZWQgKCkge1xuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgaWYgKHRoaXMuJG9wdGlvbnMudnVldGlmeSAmJiB0aGlzLiR2dWV0aWZ5LmlzSHlkcmF0aW5nKSB7XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgdGhpcy4kdnVldGlmeS5pc0h5ZHJhdGluZyA9IGZhbHNlXG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgdGhpcy4kdnVldGlmeS5icmVha3BvaW50LnVwZGF0ZSgpXG4gICAgICB9XG4gICAgfSxcbiAgfSlcbn1cbiIsImV4cG9ydCBkZWZhdWx0IHtcbiAgYmFkZ2U6ICdCYWRnZScsXG4gIGNsb3NlOiAnQ2xvc2UnLFxuICBkYXRhSXRlcmF0b3I6IHtcbiAgICBub1Jlc3VsdHNUZXh0OiAnTm8gbWF0Y2hpbmcgcmVjb3JkcyBmb3VuZCcsXG4gICAgbG9hZGluZ1RleHQ6ICdMb2FkaW5nIGl0ZW1zLi4uJyxcbiAgfSxcbiAgZGF0YVRhYmxlOiB7XG4gICAgaXRlbXNQZXJQYWdlVGV4dDogJ1Jvd3MgcGVyIHBhZ2U6JyxcbiAgICBhcmlhTGFiZWw6IHtcbiAgICAgIHNvcnREZXNjZW5kaW5nOiAnU29ydGVkIGRlc2NlbmRpbmcuJyxcbiAgICAgIHNvcnRBc2NlbmRpbmc6ICdTb3J0ZWQgYXNjZW5kaW5nLicsXG4gICAgICBzb3J0Tm9uZTogJ05vdCBzb3J0ZWQuJyxcbiAgICAgIGFjdGl2YXRlTm9uZTogJ0FjdGl2YXRlIHRvIHJlbW92ZSBzb3J0aW5nLicsXG4gICAgICBhY3RpdmF0ZURlc2NlbmRpbmc6ICdBY3RpdmF0ZSB0byBzb3J0IGRlc2NlbmRpbmcuJyxcbiAgICAgIGFjdGl2YXRlQXNjZW5kaW5nOiAnQWN0aXZhdGUgdG8gc29ydCBhc2NlbmRpbmcuJyxcbiAgICB9LFxuICAgIHNvcnRCeTogJ1NvcnQgYnknLFxuICB9LFxuICBkYXRhRm9vdGVyOiB7XG4gICAgaXRlbXNQZXJQYWdlVGV4dDogJ0l0ZW1zIHBlciBwYWdlOicsXG4gICAgaXRlbXNQZXJQYWdlQWxsOiAnQWxsJyxcbiAgICBuZXh0UGFnZTogJ05leHQgcGFnZScsXG4gICAgcHJldlBhZ2U6ICdQcmV2aW91cyBwYWdlJyxcbiAgICBmaXJzdFBhZ2U6ICdGaXJzdCBwYWdlJyxcbiAgICBsYXN0UGFnZTogJ0xhc3QgcGFnZScsXG4gICAgcGFnZVRleHQ6ICd7MH0tezF9IG9mIHsyfScsXG4gIH0sXG4gIGRhdGVQaWNrZXI6IHtcbiAgICBpdGVtc1NlbGVjdGVkOiAnezB9IHNlbGVjdGVkJyxcbiAgICBuZXh0TW9udGhBcmlhTGFiZWw6ICdOZXh0IG1vbnRoJyxcbiAgICBuZXh0WWVhckFyaWFMYWJlbDogJ05leHQgeWVhcicsXG4gICAgcHJldk1vbnRoQXJpYUxhYmVsOiAnUHJldmlvdXMgbW9udGgnLFxuICAgIHByZXZZZWFyQXJpYUxhYmVsOiAnUHJldmlvdXMgeWVhcicsXG4gIH0sXG4gIG5vRGF0YVRleHQ6ICdObyBkYXRhIGF2YWlsYWJsZScsXG4gIGNhcm91c2VsOiB7XG4gICAgcHJldjogJ1ByZXZpb3VzIHZpc3VhbCcsXG4gICAgbmV4dDogJ05leHQgdmlzdWFsJyxcbiAgICBhcmlhTGFiZWw6IHtcbiAgICAgIGRlbGltaXRlcjogJ0Nhcm91c2VsIHNsaWRlIHswfSBvZiB7MX0nLFxuICAgIH0sXG4gIH0sXG4gIGNhbGVuZGFyOiB7XG4gICAgbW9yZUV2ZW50czogJ3swfSBtb3JlJyxcbiAgfSxcbiAgZmlsZUlucHV0OiB7XG4gICAgY291bnRlcjogJ3swfSBmaWxlcycsXG4gICAgY291bnRlclNpemU6ICd7MH0gZmlsZXMgKHsxfSBpbiB0b3RhbCknLFxuICB9LFxuICB0aW1lUGlja2VyOiB7XG4gICAgYW06ICdBTScsXG4gICAgcG06ICdQTScsXG4gIH0sXG4gIHBhZ2luYXRpb246IHtcbiAgICBhcmlhTGFiZWw6IHtcbiAgICAgIHdyYXBwZXI6ICdQYWdpbmF0aW9uIE5hdmlnYXRpb24nLFxuICAgICAgbmV4dDogJ05leHQgcGFnZScsXG4gICAgICBwcmV2aW91czogJ1ByZXZpb3VzIHBhZ2UnLFxuICAgICAgcGFnZTogJ0dvdG8gUGFnZSB7MH0nLFxuICAgICAgY3VycmVudFBhZ2U6ICdDdXJyZW50IFBhZ2UsIFBhZ2UgezB9JyxcbiAgICB9LFxuICB9LFxufVxuIiwiLy8gU3R5bGVzXG5pbXBvcnQgJy4uLy4uL3N0eWxlcy9tYWluLnNhc3MnXG5cbi8vIExvY2FsZVxuaW1wb3J0IHsgZW4gfSBmcm9tICcuLi8uLi9sb2NhbGUnXG5cbi8vIEljb25zXG4vLyBUT0RPOiBFbmFibGUgZm9yIHYzXG4vLyBpbXBvcnQgbWRpIGZyb20gJy4uLy4uL3NlcnZpY2VzL2ljb25zL3ByZXNldHMvbWRpJ1xuXG4vLyBUeXBlc1xuaW1wb3J0IHsgVnVldGlmeVByZXNldCB9IGZyb20gJ3Z1ZXRpZnkvdHlwZXMvc2VydmljZXMvcHJlc2V0cydcblxuZXhwb3J0IGNvbnN0IHByZXNldDogVnVldGlmeVByZXNldCA9IHtcbiAgYnJlYWtwb2ludDoge1xuICAgIC8vIFRPRE86IHVwZGF0ZSB0byBNRDIgc3BlYyBpbiB2MyAtIDEyODBcbiAgICBtb2JpbGVCcmVha3BvaW50OiAxMjY0LFxuICAgIHNjcm9sbEJhcldpZHRoOiAxNixcbiAgICB0aHJlc2hvbGRzOiB7XG4gICAgICB4czogNjAwLFxuICAgICAgc206IDk2MCxcbiAgICAgIG1kOiAxMjgwLFxuICAgICAgbGc6IDE5MjAsXG4gICAgfSxcbiAgfSxcbiAgaWNvbnM6IHtcbiAgICAvLyBUT0RPOiByZW1vdmUgdjNcbiAgICBpY29uZm9udDogJ21kaScsXG4gICAgdmFsdWVzOiB7fSxcbiAgfSxcbiAgbGFuZzoge1xuICAgIGN1cnJlbnQ6ICdlbicsXG4gICAgbG9jYWxlczogeyBlbiB9LFxuICAgIC8vIERlZmF1bHQgdHJhbnNsYXRvciBleGlzdHMgaW4gbGFuZyBzZXJ2aWNlXG4gICAgdDogdW5kZWZpbmVkIGFzIGFueSxcbiAgfSxcbiAgcnRsOiBmYWxzZSxcbiAgdGhlbWU6IHtcbiAgICBkYXJrOiBmYWxzZSxcbiAgICBkZWZhdWx0OiAnbGlnaHQnLFxuICAgIGRpc2FibGU6IGZhbHNlLFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIGNzcE5vbmNlOiB1bmRlZmluZWQsXG4gICAgICBjdXN0b21Qcm9wZXJ0aWVzOiB1bmRlZmluZWQsXG4gICAgICBtaW5pZnlUaGVtZTogdW5kZWZpbmVkLFxuICAgICAgdGhlbWVDYWNoZTogdW5kZWZpbmVkLFxuICAgICAgdmFyaWF0aW9uczogdHJ1ZSxcbiAgICB9LFxuICAgIHRoZW1lczoge1xuICAgICAgbGlnaHQ6IHtcbiAgICAgICAgcHJpbWFyeTogJyMxOTc2RDInLFxuICAgICAgICBzZWNvbmRhcnk6ICcjNDI0MjQyJyxcbiAgICAgICAgYWNjZW50OiAnIzgyQjFGRicsXG4gICAgICAgIGVycm9yOiAnI0ZGNTI1MicsXG4gICAgICAgIGluZm86ICcjMjE5NkYzJyxcbiAgICAgICAgc3VjY2VzczogJyM0Q0FGNTAnLFxuICAgICAgICB3YXJuaW5nOiAnI0ZCOEMwMCcsXG4gICAgICB9LFxuICAgICAgZGFyazoge1xuICAgICAgICBwcmltYXJ5OiAnIzIxOTZGMycsXG4gICAgICAgIHNlY29uZGFyeTogJyM0MjQyNDInLFxuICAgICAgICBhY2NlbnQ6ICcjRkY0MDgxJyxcbiAgICAgICAgZXJyb3I6ICcjRkY1MjUyJyxcbiAgICAgICAgaW5mbzogJyMyMTk2RjMnLFxuICAgICAgICBzdWNjZXNzOiAnIzRDQUY1MCcsXG4gICAgICAgIHdhcm5pbmc6ICcjRkI4QzAwJyxcbiAgICAgIH0sXG4gICAgfSxcbiAgfSxcbn1cbiIsIi8vIENvbnRyYWN0c1xuaW1wb3J0IHsgVnVldGlmeVNlcnZpY2VDb250cmFjdCB9IGZyb20gJ3Z1ZXRpZnkvdHlwZXMvc2VydmljZXMvaW5kZXgnXG5cbi8vIFR5cGVzXG5pbXBvcnQgVnVlIGZyb20gJ3Z1ZSdcblxuZXhwb3J0IGNsYXNzIFNlcnZpY2UgaW1wbGVtZW50cyBWdWV0aWZ5U2VydmljZUNvbnRyYWN0IHtcbiAgZnJhbWV3b3JrID0ge31cblxuICBpbml0IChyb290OiBWdWUsIHNzckNvbnRleHQ/OiBvYmplY3QpIHt9XG59XG4iLCIvLyBQcmVzZXRcbmltcG9ydCB7IHByZXNldCBhcyBQcmVzZXQgfSBmcm9tICcuLi8uLi9wcmVzZXRzL2RlZmF1bHQnXG5cbi8vIFV0aWxpdGllc1xuaW1wb3J0IHsgY29uc29sZVdhcm4gfSBmcm9tICcuLi8uLi91dGlsL2NvbnNvbGUnXG5pbXBvcnQgeyBtZXJnZURlZXAgfSBmcm9tICcuLi8uLi91dGlsL2hlbHBlcnMnXG5cbi8vIFR5cGVzXG5pbXBvcnQgRnJhbWV3b3JrIGZyb20gJ3Z1ZXRpZnkvdHlwZXMnXG5pbXBvcnQgeyBTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZSdcbmltcG9ydCB7XG4gIFVzZXJWdWV0aWZ5UHJlc2V0LFxuICBWdWV0aWZ5UHJlc2V0LFxufSBmcm9tICd2dWV0aWZ5L3R5cGVzL3NlcnZpY2VzL3ByZXNldHMnXG5cbmV4cG9ydCBjbGFzcyBQcmVzZXRzIGV4dGVuZHMgU2VydmljZSB7XG4gIHN0YXRpYyBwcm9wZXJ0eTogJ3ByZXNldHMnID0gJ3ByZXNldHMnXG5cbiAgY29uc3RydWN0b3IgKFxuICAgIHBhcmVudFByZXNldDogUGFydGlhbDxVc2VyVnVldGlmeVByZXNldD4sXG4gICAgcGFyZW50OiBJbnN0YW5jZVR5cGU8dHlwZW9mIEZyYW1ld29yaz4sXG4gICkge1xuICAgIHN1cGVyKClcblxuICAgIC8vIFRoZSBkZWZhdWx0IHByZXNldFxuICAgIGNvbnN0IGRlZmF1bHRQcmVzZXQgPSBtZXJnZURlZXAoe30sIFByZXNldClcbiAgICAvLyBUaGUgdXNlciBwcm92aWRlZCBwcmVzZXRcbiAgICBjb25zdCB7IHVzZXJQcmVzZXQgfSA9IHBhcmVudFxuICAgIC8vIFRoZSB1c2VyIHByb3ZpZGVkIGdsb2JhbCBwcmVzZXRcbiAgICBjb25zdCB7XG4gICAgICBwcmVzZXQ6IGdsb2JhbFByZXNldCA9IHt9LFxuICAgICAgLi4ucHJlc2V0XG4gICAgfSA9IHVzZXJQcmVzZXRcblxuICAgIGlmIChnbG9iYWxQcmVzZXQucHJlc2V0ICE9IG51bGwpIHtcbiAgICAgIGNvbnNvbGVXYXJuKCdHbG9iYWwgcHJlc2V0cyBkbyBub3Qgc3VwcG9ydCB0aGUgKipwcmVzZXQqKiBvcHRpb24sIGl0IGNhbiBiZSBzYWZlbHkgb21pdHRlZCcpXG4gICAgfVxuXG4gICAgcGFyZW50LnByZXNldCA9IG1lcmdlRGVlcChcbiAgICAgIG1lcmdlRGVlcChkZWZhdWx0UHJlc2V0LCBnbG9iYWxQcmVzZXQpLFxuICAgICAgcHJlc2V0XG4gICAgKSBhcyBWdWV0aWZ5UHJlc2V0XG4gIH1cbn1cbiIsIi8vIEV4dGVuc2lvbnNcbmltcG9ydCB7IFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlJ1xuXG4vLyBUeXBlc1xuaW1wb3J0IHsgVGFyZ2V0UHJvcFZhbHVlcywgVGFyZ2V0UHJvcCwgQXBwbGljYXRpb24gYXMgSUFwcGxpY2F0aW9uIH0gZnJvbSAndnVldGlmeS90eXBlcy9zZXJ2aWNlcy9hcHBsaWNhdGlvbidcblxuZXhwb3J0IGNsYXNzIEFwcGxpY2F0aW9uIGV4dGVuZHMgU2VydmljZSBpbXBsZW1lbnRzIElBcHBsaWNhdGlvbiB7XG4gIHN0YXRpYyBwcm9wZXJ0eTogJ2FwcGxpY2F0aW9uJyA9ICdhcHBsaWNhdGlvbidcblxuICBiYXIgPSAwXG5cbiAgdG9wID0gMFxuXG4gIGxlZnQgPSAwXG5cbiAgaW5zZXRGb290ZXIgPSAwXG5cbiAgcmlnaHQgPSAwXG5cbiAgYm90dG9tID0gMFxuXG4gIGZvb3RlciA9IDBcblxuICBhcHBsaWNhdGlvbjogRGljdGlvbmFyeTxUYXJnZXRQcm9wVmFsdWVzPiA9IHtcbiAgICBiYXI6IHt9LFxuICAgIHRvcDoge30sXG4gICAgbGVmdDoge30sXG4gICAgaW5zZXRGb290ZXI6IHt9LFxuICAgIHJpZ2h0OiB7fSxcbiAgICBib3R0b206IHt9LFxuICAgIGZvb3Rlcjoge30sXG4gIH1cblxuICByZWdpc3RlciAoXG4gICAgdWlkOiBudW1iZXIsXG4gICAgbG9jYXRpb246IFRhcmdldFByb3AsXG4gICAgc2l6ZTogbnVtYmVyXG4gICkge1xuICAgIHRoaXMuYXBwbGljYXRpb25bbG9jYXRpb25dID0geyBbdWlkXTogc2l6ZSB9XG5cbiAgICB0aGlzLnVwZGF0ZShsb2NhdGlvbilcbiAgfVxuXG4gIHVucmVnaXN0ZXIgKHVpZDogbnVtYmVyLCBsb2NhdGlvbjogVGFyZ2V0UHJvcCkge1xuICAgIGlmICh0aGlzLmFwcGxpY2F0aW9uW2xvY2F0aW9uXVt1aWRdID09IG51bGwpIHJldHVyblxuXG4gICAgZGVsZXRlIHRoaXMuYXBwbGljYXRpb25bbG9jYXRpb25dW3VpZF1cbiAgICB0aGlzLnVwZGF0ZShsb2NhdGlvbilcbiAgfVxuXG4gIHVwZGF0ZSAobG9jYXRpb246IFRhcmdldFByb3ApIHtcbiAgICB0aGlzW2xvY2F0aW9uXSA9IE9iamVjdC52YWx1ZXModGhpcy5hcHBsaWNhdGlvbltsb2NhdGlvbl0pXG4gICAgICAucmVkdWNlKChhY2M6IG51bWJlciwgY3VyOiBudW1iZXIpOiBudW1iZXIgPT4gKGFjYyArIGN1ciksIDApXG4gIH1cbn1cbiIsIi8vIEV4dGVuc2lvbnNcbmltcG9ydCB7IFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlJ1xuXG4vLyBUeXBlc1xuaW1wb3J0IHsgVnVldGlmeVByZXNldCB9IGZyb20gJ3Z1ZXRpZnkvdHlwZXMvc2VydmljZXMvcHJlc2V0cydcbmltcG9ydCB7IEJyZWFrcG9pbnQgYXMgSUJyZWFrcG9pbnQgfSBmcm9tICd2dWV0aWZ5L3R5cGVzL3NlcnZpY2VzL2JyZWFrcG9pbnQnXG5cbmV4cG9ydCBjbGFzcyBCcmVha3BvaW50IGV4dGVuZHMgU2VydmljZSBpbXBsZW1lbnRzIElCcmVha3BvaW50IHtcbiAgcHVibGljIHN0YXRpYyBwcm9wZXJ0eTogJ2JyZWFrcG9pbnQnID0gJ2JyZWFrcG9pbnQnXG5cbiAgLy8gUHVibGljXG4gIHB1YmxpYyB4cyA9IGZhbHNlXG5cbiAgcHVibGljIHNtID0gZmFsc2VcblxuICBwdWJsaWMgbWQgPSBmYWxzZVxuXG4gIHB1YmxpYyBsZyA9IGZhbHNlXG5cbiAgcHVibGljIHhsID0gZmFsc2VcblxuICBwdWJsaWMgeHNPbmx5ID0gZmFsc2VcblxuICBwdWJsaWMgc21Pbmx5ID0gZmFsc2VcblxuICBwdWJsaWMgc21BbmREb3duID0gZmFsc2VcblxuICBwdWJsaWMgc21BbmRVcCA9IGZhbHNlXG5cbiAgcHVibGljIG1kT25seSA9IGZhbHNlXG5cbiAgcHVibGljIG1kQW5kRG93biA9IGZhbHNlXG5cbiAgcHVibGljIG1kQW5kVXAgPSBmYWxzZVxuXG4gIHB1YmxpYyBsZ09ubHkgPSBmYWxzZVxuXG4gIHB1YmxpYyBsZ0FuZERvd24gPSBmYWxzZVxuXG4gIHB1YmxpYyBsZ0FuZFVwID0gZmFsc2VcblxuICBwdWJsaWMgeGxPbmx5ID0gZmFsc2VcblxuICAvLyBWYWx1ZSBpcyB4cyB0byBtYXRjaCB2Mi54IGZ1bmN0aW9uYWxpdHlcbiAgcHVibGljIG5hbWU6IElCcmVha3BvaW50WyduYW1lJ10gPSAneHMnXG5cbiAgcHVibGljIGhlaWdodCA9IDBcblxuICBwdWJsaWMgd2lkdGggPSAwXG5cbiAgLy8gVE9ETzogQWRkIGZ1bmN0aW9uYWxpdHkgdG8gZGV0ZWN0IHRoaXMgZHluYW1pY2FsbHkgaW4gdjNcbiAgLy8gVmFsdWUgaXMgdHJ1ZSB0byBtYXRjaCB2Mi54IGZ1bmN0aW9uYWxpdHlcbiAgcHVibGljIG1vYmlsZSA9IHRydWVcblxuICBwdWJsaWMgbW9iaWxlQnJlYWtwb2ludDogSUJyZWFrcG9pbnRbJ21vYmlsZUJyZWFrcG9pbnQnXVxuXG4gIHB1YmxpYyB0aHJlc2hvbGRzOiBJQnJlYWtwb2ludFsndGhyZXNob2xkcyddXG5cbiAgcHVibGljIHNjcm9sbEJhcldpZHRoOiBJQnJlYWtwb2ludFsnc2Nyb2xsQmFyV2lkdGgnXVxuXG4gIHByaXZhdGUgcmVzaXplVGltZW91dCA9IDBcblxuICBjb25zdHJ1Y3RvciAocHJlc2V0OiBWdWV0aWZ5UHJlc2V0KSB7XG4gICAgc3VwZXIoKVxuXG4gICAgY29uc3Qge1xuICAgICAgbW9iaWxlQnJlYWtwb2ludCxcbiAgICAgIHNjcm9sbEJhcldpZHRoLFxuICAgICAgdGhyZXNob2xkcyxcbiAgICB9ID0gcHJlc2V0W0JyZWFrcG9pbnQucHJvcGVydHldXG5cbiAgICB0aGlzLm1vYmlsZUJyZWFrcG9pbnQgPSBtb2JpbGVCcmVha3BvaW50XG4gICAgdGhpcy5zY3JvbGxCYXJXaWR0aCA9IHNjcm9sbEJhcldpZHRoXG4gICAgdGhpcy50aHJlc2hvbGRzID0gdGhyZXNob2xkc1xuICB9XG5cbiAgcHVibGljIGluaXQgKCkge1xuICAgIHRoaXMudXBkYXRlKClcblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykgcmV0dXJuXG5cbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICdyZXNpemUnLFxuICAgICAgdGhpcy5vblJlc2l6ZS5iaW5kKHRoaXMpLFxuICAgICAgeyBwYXNzaXZlOiB0cnVlIH1cbiAgICApXG4gIH1cblxuICAvKiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LXN0YXRlbWVudHMgKi9cbiAgcHVibGljIHVwZGF0ZSAoc3NyID0gZmFsc2UpIHtcbiAgICBjb25zdCBoZWlnaHQgPSBzc3IgPyAwIDogdGhpcy5nZXRDbGllbnRIZWlnaHQoKVxuICAgIGNvbnN0IHdpZHRoID0gc3NyID8gMCA6IHRoaXMuZ2V0Q2xpZW50V2lkdGgoKVxuXG4gICAgY29uc3QgeHMgPSB3aWR0aCA8IHRoaXMudGhyZXNob2xkcy54c1xuICAgIGNvbnN0IHNtID0gd2lkdGggPCB0aGlzLnRocmVzaG9sZHMuc20gJiYgIXhzXG4gICAgY29uc3QgbWQgPSB3aWR0aCA8ICh0aGlzLnRocmVzaG9sZHMubWQgLSB0aGlzLnNjcm9sbEJhcldpZHRoKSAmJiAhKHNtIHx8IHhzKVxuICAgIGNvbnN0IGxnID0gd2lkdGggPCAodGhpcy50aHJlc2hvbGRzLmxnIC0gdGhpcy5zY3JvbGxCYXJXaWR0aCkgJiYgIShtZCB8fCBzbSB8fCB4cylcbiAgICBjb25zdCB4bCA9IHdpZHRoID49ICh0aGlzLnRocmVzaG9sZHMubGcgLSB0aGlzLnNjcm9sbEJhcldpZHRoKVxuXG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHRcbiAgICB0aGlzLndpZHRoID0gd2lkdGhcblxuICAgIHRoaXMueHMgPSB4c1xuICAgIHRoaXMuc20gPSBzbVxuICAgIHRoaXMubWQgPSBtZFxuICAgIHRoaXMubGcgPSBsZ1xuICAgIHRoaXMueGwgPSB4bFxuXG4gICAgdGhpcy54c09ubHkgPSB4c1xuICAgIHRoaXMuc21Pbmx5ID0gc21cbiAgICB0aGlzLnNtQW5kRG93biA9ICh4cyB8fCBzbSkgJiYgIShtZCB8fCBsZyB8fCB4bClcbiAgICB0aGlzLnNtQW5kVXAgPSAheHMgJiYgKHNtIHx8IG1kIHx8IGxnIHx8IHhsKVxuICAgIHRoaXMubWRPbmx5ID0gbWRcbiAgICB0aGlzLm1kQW5kRG93biA9ICh4cyB8fCBzbSB8fCBtZCkgJiYgIShsZyB8fCB4bClcbiAgICB0aGlzLm1kQW5kVXAgPSAhKHhzIHx8IHNtKSAmJiAobWQgfHwgbGcgfHwgeGwpXG4gICAgdGhpcy5sZ09ubHkgPSBsZ1xuICAgIHRoaXMubGdBbmREb3duID0gKHhzIHx8IHNtIHx8IG1kIHx8IGxnKSAmJiAheGxcbiAgICB0aGlzLmxnQW5kVXAgPSAhKHhzIHx8IHNtIHx8IG1kKSAmJiAobGcgfHwgeGwpXG4gICAgdGhpcy54bE9ubHkgPSB4bFxuXG4gICAgc3dpdGNoICh0cnVlKSB7XG4gICAgICBjYXNlICh4cyk6XG4gICAgICAgIHRoaXMubmFtZSA9ICd4cydcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgKHNtKTpcbiAgICAgICAgdGhpcy5uYW1lID0gJ3NtJ1xuICAgICAgICBicmVha1xuICAgICAgY2FzZSAobWQpOlxuICAgICAgICB0aGlzLm5hbWUgPSAnbWQnXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlIChsZyk6XG4gICAgICAgIHRoaXMubmFtZSA9ICdsZydcbiAgICAgICAgYnJlYWtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRoaXMubmFtZSA9ICd4bCdcbiAgICAgICAgYnJlYWtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHRoaXMubW9iaWxlQnJlYWtwb2ludCA9PT0gJ251bWJlcicpIHtcbiAgICAgIHRoaXMubW9iaWxlID0gd2lkdGggPCBwYXJzZUludCh0aGlzLm1vYmlsZUJyZWFrcG9pbnQsIDEwKVxuXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBicmVha3BvaW50cyA9IHtcbiAgICAgIHhzOiAwLFxuICAgICAgc206IDEsXG4gICAgICBtZDogMixcbiAgICAgIGxnOiAzLFxuICAgICAgeGw6IDQsXG4gICAgfSBhcyBjb25zdFxuXG4gICAgY29uc3QgY3VycmVudCA9IGJyZWFrcG9pbnRzW3RoaXMubmFtZV1cbiAgICBjb25zdCBtYXggPSBicmVha3BvaW50c1t0aGlzLm1vYmlsZUJyZWFrcG9pbnRdXG5cbiAgICB0aGlzLm1vYmlsZSA9IGN1cnJlbnQgPD0gbWF4XG4gIH1cblxuICBwcml2YXRlIG9uUmVzaXplICgpIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy5yZXNpemVUaW1lb3V0KVxuXG4gICAgLy8gQWRkZWQgZGVib3VuY2UgdG8gbWF0Y2ggd2hhdFxuICAgIC8vIHYtcmVzaXplIHVzZWQgdG8gZG8gYnV0IHdhc1xuICAgIC8vIHJlbW92ZWQgZHVlIHRvIGEgbWVtb3J5IGxlYWtcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdnVldGlmeWpzL3Z1ZXRpZnkvcHVsbC8yOTk3XG4gICAgdGhpcy5yZXNpemVUaW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQodGhpcy51cGRhdGUuYmluZCh0aGlzKSwgMjAwKVxuICB9XG5cbiAgLy8gQ3Jvc3MtYnJvd3NlciBzdXBwb3J0IGFzIGRlc2NyaWJlZCBpbjpcbiAgLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTI0ODA4MVxuICBwcml2YXRlIGdldENsaWVudFdpZHRoICgpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAodHlwZW9mIGRvY3VtZW50ID09PSAndW5kZWZpbmVkJykgcmV0dXJuIDAgLy8gU1NSXG4gICAgcmV0dXJuIE1hdGgubWF4KFxuICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50IS5jbGllbnRXaWR0aCxcbiAgICAgIHdpbmRvdy5pbm5lcldpZHRoIHx8IDBcbiAgICApXG4gIH1cblxuICBwcml2YXRlIGdldENsaWVudEhlaWdodCAoKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybiAwIC8vIFNTUlxuICAgIHJldHVybiBNYXRoLm1heChcbiAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCEuY2xpZW50SGVpZ2h0LFxuICAgICAgd2luZG93LmlubmVySGVpZ2h0IHx8IDBcbiAgICApXG4gIH1cbn1cbiIsImV4cG9ydCB0eXBlIEVhc2luZ0Z1bmN0aW9uID0gKHQ6IG51bWJlcikgPT4gbnVtYmVyXG5cbi8vIGxpbmVhclxuZXhwb3J0IGNvbnN0IGxpbmVhciA9ICh0OiBudW1iZXIpID0+IHRcbi8vIGFjY2VsZXJhdGluZyBmcm9tIHplcm8gdmVsb2NpdHlcbmV4cG9ydCBjb25zdCBlYXNlSW5RdWFkID0gKHQ6IG51bWJlcikgPT4gdCAqKiAyXG4vLyBkZWNlbGVyYXRpbmcgdG8gemVybyB2ZWxvY2l0eVxuZXhwb3J0IGNvbnN0IGVhc2VPdXRRdWFkID0gKHQ6IG51bWJlcikgPT4gdCAqICgyIC0gdClcbi8vIGFjY2VsZXJhdGlvbiB1bnRpbCBoYWxmd2F5LCB0aGVuIGRlY2VsZXJhdGlvblxuZXhwb3J0IGNvbnN0IGVhc2VJbk91dFF1YWQgPSAodDogbnVtYmVyKSA9PiAodCA8IDAuNSA/IDIgKiB0ICoqIDIgOiAtMSArICg0IC0gMiAqIHQpICogdClcbi8vIGFjY2VsZXJhdGluZyBmcm9tIHplcm8gdmVsb2NpdHlcbmV4cG9ydCBjb25zdCBlYXNlSW5DdWJpYyA9ICh0OiBudW1iZXIpID0+IHQgKiogM1xuLy8gZGVjZWxlcmF0aW5nIHRvIHplcm8gdmVsb2NpdHlcbmV4cG9ydCBjb25zdCBlYXNlT3V0Q3ViaWMgPSAodDogbnVtYmVyKSA9PiAtLXQgKiogMyArIDFcbi8vIGFjY2VsZXJhdGlvbiB1bnRpbCBoYWxmd2F5LCB0aGVuIGRlY2VsZXJhdGlvblxuZXhwb3J0IGNvbnN0IGVhc2VJbk91dEN1YmljID0gKHQ6IG51bWJlcikgPT4gdCA8IDAuNSA/IDQgKiB0ICoqIDMgOiAodCAtIDEpICogKDIgKiB0IC0gMikgKiAoMiAqIHQgLSAyKSArIDFcbi8vIGFjY2VsZXJhdGluZyBmcm9tIHplcm8gdmVsb2NpdHlcbmV4cG9ydCBjb25zdCBlYXNlSW5RdWFydCA9ICh0OiBudW1iZXIpID0+IHQgKiogNFxuLy8gZGVjZWxlcmF0aW5nIHRvIHplcm8gdmVsb2NpdHlcbmV4cG9ydCBjb25zdCBlYXNlT3V0UXVhcnQgPSAodDogbnVtYmVyKSA9PiAxIC0gLS10ICoqIDRcbi8vIGFjY2VsZXJhdGlvbiB1bnRpbCBoYWxmd2F5LCB0aGVuIGRlY2VsZXJhdGlvblxuZXhwb3J0IGNvbnN0IGVhc2VJbk91dFF1YXJ0ID0gKHQ6IG51bWJlcikgPT4gKHQgPCAwLjUgPyA4ICogdCAqIHQgKiB0ICogdCA6IDEgLSA4ICogLS10ICogdCAqIHQgKiB0KVxuLy8gYWNjZWxlcmF0aW5nIGZyb20gemVybyB2ZWxvY2l0eVxuZXhwb3J0IGNvbnN0IGVhc2VJblF1aW50ID0gKHQ6IG51bWJlcikgPT4gdCAqKiA1XG4vLyBkZWNlbGVyYXRpbmcgdG8gemVybyB2ZWxvY2l0eVxuZXhwb3J0IGNvbnN0IGVhc2VPdXRRdWludCA9ICh0OiBudW1iZXIpID0+IDEgKyAtLXQgKiogNVxuLy8gYWNjZWxlcmF0aW9uIHVudGlsIGhhbGZ3YXksIHRoZW4gZGVjZWxlcmF0aW9uXG5leHBvcnQgY29uc3QgZWFzZUluT3V0UXVpbnQgPSAodDogbnVtYmVyKSA9PiB0IDwgMC41ID8gMTYgKiB0ICoqIDUgOiAxICsgMTYgKiAtLXQgKiogNVxuIiwiaW1wb3J0IFZ1ZSBmcm9tICd2dWUnXG5cbi8vIFJldHVybiB0YXJnZXQncyBjdW11bGF0aXZlIG9mZnNldCBmcm9tIHRoZSB0b3BcbmV4cG9ydCBmdW5jdGlvbiBnZXRPZmZzZXQgKHRhcmdldDogYW55KTogbnVtYmVyIHtcbiAgaWYgKHR5cGVvZiB0YXJnZXQgPT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIHRhcmdldFxuICB9XG5cbiAgbGV0IGVsID0gJCh0YXJnZXQpXG4gIGlmICghZWwpIHtcbiAgICB0aHJvdyB0eXBlb2YgdGFyZ2V0ID09PSAnc3RyaW5nJ1xuICAgICAgPyBuZXcgRXJyb3IoYFRhcmdldCBlbGVtZW50IFwiJHt0YXJnZXR9XCIgbm90IGZvdW5kLmApXG4gICAgICA6IG5ldyBUeXBlRXJyb3IoYFRhcmdldCBtdXN0IGJlIGEgTnVtYmVyL1NlbGVjdG9yL0hUTUxFbGVtZW50L1Z1ZUNvbXBvbmVudCwgcmVjZWl2ZWQgJHt0eXBlKHRhcmdldCl9IGluc3RlYWQuYClcbiAgfVxuXG4gIGxldCB0b3RhbE9mZnNldCA9IDBcbiAgd2hpbGUgKGVsKSB7XG4gICAgdG90YWxPZmZzZXQgKz0gZWwub2Zmc2V0VG9wXG4gICAgZWwgPSBlbC5vZmZzZXRQYXJlbnQgYXMgSFRNTEVsZW1lbnRcbiAgfVxuXG4gIHJldHVybiB0b3RhbE9mZnNldFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29udGFpbmVyIChjb250YWluZXI6IGFueSk6IEhUTUxFbGVtZW50IHtcbiAgY29uc3QgZWwgPSAkKGNvbnRhaW5lcilcblxuICBpZiAoZWwpIHJldHVybiBlbFxuXG4gIHRocm93IHR5cGVvZiBjb250YWluZXIgPT09ICdzdHJpbmcnXG4gICAgPyBuZXcgRXJyb3IoYENvbnRhaW5lciBlbGVtZW50IFwiJHtjb250YWluZXJ9XCIgbm90IGZvdW5kLmApXG4gICAgOiBuZXcgVHlwZUVycm9yKGBDb250YWluZXIgbXVzdCBiZSBhIFNlbGVjdG9yL0hUTUxFbGVtZW50L1Z1ZUNvbXBvbmVudCwgcmVjZWl2ZWQgJHt0eXBlKGNvbnRhaW5lcil9IGluc3RlYWQuYClcbn1cblxuZnVuY3Rpb24gdHlwZSAoZWw6IGFueSkge1xuICByZXR1cm4gZWwgPT0gbnVsbCA/IGVsIDogZWwuY29uc3RydWN0b3IubmFtZVxufVxuXG5mdW5jdGlvbiAkIChlbDogYW55KTogSFRNTEVsZW1lbnQgfCBudWxsIHtcbiAgaWYgKHR5cGVvZiBlbCA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MRWxlbWVudD4oZWwpXG4gIH0gZWxzZSBpZiAoZWwgJiYgZWwuX2lzVnVlKSB7XG4gICAgcmV0dXJuIChlbCBhcyBWdWUpLiRlbCBhcyBIVE1MRWxlbWVudFxuICB9IGVsc2UgaWYgKGVsIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcbiAgICByZXR1cm4gZWxcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG59XG4iLCIvLyBFeHRlbnNpb25zXG5pbXBvcnQgeyBTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZSdcblxuLy8gVXRpbGl0aWVzXG5pbXBvcnQgKiBhcyBlYXNpbmdQYXR0ZXJucyBmcm9tICcuL2Vhc2luZy1wYXR0ZXJucydcbmltcG9ydCB7XG4gIGdldENvbnRhaW5lcixcbiAgZ2V0T2Zmc2V0LFxufSBmcm9tICcuL3V0aWwnXG5cbi8vIFR5cGVzXG5pbXBvcnQgeyBHb1RvT3B0aW9ucywgVnVldGlmeUdvVG9UYXJnZXQgfSBmcm9tICd2dWV0aWZ5L3R5cGVzL3NlcnZpY2VzL2dvdG8nXG5cbmltcG9ydCB7IFZ1ZXRpZnlTZXJ2aWNlQ29udHJhY3QgfSBmcm9tICd2dWV0aWZ5L3R5cGVzL3NlcnZpY2VzJ1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnb1RvIChcbiAgX3RhcmdldDogVnVldGlmeUdvVG9UYXJnZXQsXG4gIF9zZXR0aW5nczogUGFydGlhbDxHb1RvT3B0aW9ucz4gPSB7fVxuKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgY29uc3Qgc2V0dGluZ3M6IEdvVG9PcHRpb25zID0ge1xuICAgIGNvbnRhaW5lcjogKGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQgYXMgSFRNTEVsZW1lbnQgfCBudWxsKSB8fCBkb2N1bWVudC5ib2R5IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxcbiAgICBkdXJhdGlvbjogNTAwLFxuICAgIG9mZnNldDogMCxcbiAgICBlYXNpbmc6ICdlYXNlSW5PdXRDdWJpYycsXG4gICAgYXBwT2Zmc2V0OiB0cnVlLFxuICAgIC4uLl9zZXR0aW5ncyxcbiAgfVxuICBjb25zdCBjb250YWluZXIgPSBnZXRDb250YWluZXIoc2V0dGluZ3MuY29udGFpbmVyKVxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gIGlmIChzZXR0aW5ncy5hcHBPZmZzZXQgJiYgZ29Uby5mcmFtZXdvcmsuYXBwbGljYXRpb24pIHtcbiAgICBjb25zdCBpc0RyYXdlciA9IGNvbnRhaW5lci5jbGFzc0xpc3QuY29udGFpbnMoJ3YtbmF2aWdhdGlvbi1kcmF3ZXInKVxuICAgIGNvbnN0IGlzQ2xpcHBlZCA9IGNvbnRhaW5lci5jbGFzc0xpc3QuY29udGFpbnMoJ3YtbmF2aWdhdGlvbi1kcmF3ZXItLWNsaXBwZWQnKVxuICAgIGNvbnN0IHsgYmFyLCB0b3AgfSA9IGdvVG8uZnJhbWV3b3JrLmFwcGxpY2F0aW9uIGFzIGFueVxuXG4gICAgc2V0dGluZ3Mub2Zmc2V0ICs9IGJhclxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKCFpc0RyYXdlciB8fCBpc0NsaXBwZWQpIHNldHRpbmdzLm9mZnNldCArPSB0b3BcbiAgfVxuXG4gIGNvbnN0IHN0YXJ0VGltZSA9IHBlcmZvcm1hbmNlLm5vdygpXG5cbiAgbGV0IHRhcmdldExvY2F0aW9uOiBudW1iZXJcbiAgaWYgKHR5cGVvZiBfdGFyZ2V0ID09PSAnbnVtYmVyJykge1xuICAgIHRhcmdldExvY2F0aW9uID0gZ2V0T2Zmc2V0KF90YXJnZXQpIC0gc2V0dGluZ3Mub2Zmc2V0IVxuICB9IGVsc2Uge1xuICAgIHRhcmdldExvY2F0aW9uID0gZ2V0T2Zmc2V0KF90YXJnZXQpIC0gZ2V0T2Zmc2V0KGNvbnRhaW5lcikgLSBzZXR0aW5ncy5vZmZzZXQhXG4gIH1cblxuICBjb25zdCBzdGFydExvY2F0aW9uID0gY29udGFpbmVyLnNjcm9sbFRvcFxuICBpZiAodGFyZ2V0TG9jYXRpb24gPT09IHN0YXJ0TG9jYXRpb24pIHJldHVybiBQcm9taXNlLnJlc29sdmUodGFyZ2V0TG9jYXRpb24pXG5cbiAgY29uc3QgZWFzZSA9IHR5cGVvZiBzZXR0aW5ncy5lYXNpbmcgPT09ICdmdW5jdGlvbidcbiAgICA/IHNldHRpbmdzLmVhc2luZ1xuICAgIDogZWFzaW5nUGF0dGVybnNbc2V0dGluZ3MuZWFzaW5nIV1cbiAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgaWYgKCFlYXNlKSB0aHJvdyBuZXcgVHlwZUVycm9yKGBFYXNpbmcgZnVuY3Rpb24gXCIke3NldHRpbmdzLmVhc2luZ31cIiBub3QgZm91bmQuYClcblxuICAvLyBDYW5ub3QgYmUgdGVzdGVkIHByb3Blcmx5IGluIGpzZG9tXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpwcm9taXNlLW11c3QtY29tcGxldGVcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uIHN0ZXAgKGN1cnJlbnRUaW1lOiBudW1iZXIpIHtcbiAgICBjb25zdCB0aW1lRWxhcHNlZCA9IGN1cnJlbnRUaW1lIC0gc3RhcnRUaW1lXG4gICAgY29uc3QgcHJvZ3Jlc3MgPSBNYXRoLmFicyhzZXR0aW5ncy5kdXJhdGlvbiA/IE1hdGgubWluKHRpbWVFbGFwc2VkIC8gc2V0dGluZ3MuZHVyYXRpb24sIDEpIDogMSlcblxuICAgIGNvbnRhaW5lci5zY3JvbGxUb3AgPSBNYXRoLmZsb29yKHN0YXJ0TG9jYXRpb24gKyAodGFyZ2V0TG9jYXRpb24gLSBzdGFydExvY2F0aW9uKSAqIGVhc2UocHJvZ3Jlc3MpKVxuXG4gICAgY29uc3QgY2xpZW50SGVpZ2h0ID0gY29udGFpbmVyID09PSBkb2N1bWVudC5ib2R5ID8gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCA6IGNvbnRhaW5lci5jbGllbnRIZWlnaHRcbiAgICBpZiAocHJvZ3Jlc3MgPT09IDEgfHwgY2xpZW50SGVpZ2h0ICsgY29udGFpbmVyLnNjcm9sbFRvcCA9PT0gY29udGFpbmVyLnNjcm9sbEhlaWdodCkge1xuICAgICAgcmV0dXJuIHJlc29sdmUodGFyZ2V0TG9jYXRpb24pXG4gICAgfVxuXG4gICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHN0ZXApXG4gIH0pKVxufVxuXG5nb1RvLmZyYW1ld29yayA9IHt9IGFzIFJlY29yZDxzdHJpbmcsIFZ1ZXRpZnlTZXJ2aWNlQ29udHJhY3Q+XG5nb1RvLmluaXQgPSAoKSA9PiB7fVxuXG5leHBvcnQgY2xhc3MgR290byBleHRlbmRzIFNlcnZpY2Uge1xuICBwdWJsaWMgc3RhdGljIHByb3BlcnR5OiAnZ29UbycgPSAnZ29UbydcblxuICBjb25zdHJ1Y3RvciAoKSB7XG4gICAgc3VwZXIoKVxuXG4gICAgcmV0dXJuIGdvVG9cbiAgfVxufVxuIiwiaW1wb3J0IHsgVnVldGlmeUljb25zIH0gZnJvbSAndnVldGlmeS90eXBlcy9zZXJ2aWNlcy9pY29ucydcblxuY29uc3QgaWNvbnM6IFZ1ZXRpZnlJY29ucyA9IHtcbiAgY29tcGxldGU6ICdNMjEsN0w5LDE5TDMuNSwxMy41TDQuOTEsMTIuMDlMOSwxNi4xN0wxOS41OSw1LjU5TDIxLDdaJyxcbiAgY2FuY2VsOiAnTTEyLDJDMTcuNTMsMiAyMiw2LjQ3IDIyLDEyQzIyLDE3LjUzIDE3LjUzLDIyIDEyLDIyQzYuNDcsMjIgMiwxNy41MyAyLDEyQzIsNi40NyA2LjQ3LDIgMTIsMk0xNS41OSw3TDEyLDEwLjU5TDguNDEsN0w3LDguNDFMMTAuNTksMTJMNywxNS41OUw4LjQxLDE3TDEyLDEzLjQxTDE1LjU5LDE3TDE3LDE1LjU5TDEzLjQxLDEyTDE3LDguNDFMMTUuNTksN1onLFxuICBjbG9zZTogJ00xOSw2LjQxTDE3LjU5LDVMMTIsMTAuNTlMNi40MSw1TDUsNi40MUwxMC41OSwxMkw1LDE3LjU5TDYuNDEsMTlMMTIsMTMuNDFMMTcuNTksMTlMMTksMTcuNTlMMTMuNDEsMTJMMTksNi40MVonLFxuICBkZWxldGU6ICdNMTIsMkMxNy41MywyIDIyLDYuNDcgMjIsMTJDMjIsMTcuNTMgMTcuNTMsMjIgMTIsMjJDNi40NywyMiAyLDE3LjUzIDIsMTJDMiw2LjQ3IDYuNDcsMiAxMiwyTTE1LjU5LDdMMTIsMTAuNTlMOC40MSw3TDcsOC40MUwxMC41OSwxMkw3LDE1LjU5TDguNDEsMTdMMTIsMTMuNDFMMTUuNTksMTdMMTcsMTUuNTlMMTMuNDEsMTJMMTcsOC40MUwxNS41OSw3WicsIC8vIGRlbGV0ZSAoZS5nLiB2LWNoaXAgY2xvc2UpXG4gIGNsZWFyOiAnTTE5LDYuNDFMMTcuNTksNUwxMiwxMC41OUw2LjQxLDVMNSw2LjQxTDEwLjU5LDEyTDUsMTcuNTlMNi40MSwxOUwxMiwxMy40MUwxNy41OSwxOUwxOSwxNy41OUwxMy40MSwxMkwxOSw2LjQxWicsXG4gIHN1Y2Nlc3M6ICdNMTIsMkMxNy41MiwyIDIyLDYuNDggMjIsMTJDMjIsMTcuNTIgMTcuNTIsMjIgMTIsMjJDNi40OCwyMiAyLDE3LjUyIDIsMTJDMiw2LjQ4IDYuNDgsMiAxMiwyTTExLDE2LjVMMTgsOS41TDE2LjU5LDguMDlMMTEsMTMuNjdMNy45MSwxMC41OUw2LjUsMTJMMTEsMTYuNVonLFxuICBpbmZvOiAnTTEzLDlIMTFWN0gxM00xMywxN0gxMVYxMUgxM00xMiwyQzYuNDgsMiAyLDYuNDggMiwxMkMyLDE3LjUyIDYuNDgsMjIgMTIsMjJDMTcuNTIsMjIgMjIsMTcuNTIgMjIsMTJDMjIsNi40OCAxNy41MiwyIDEyLDJaJyxcbiAgd2FybmluZzogJ00xMSw0LjVIMTNWMTUuNUgxMVY0LjVNMTMsMTcuNVYxOS41SDExVjE3LjVIMTNaJyxcbiAgZXJyb3I6ICdNMTMsMTRIMTFWMTBIMTNNMTMsMThIMTFWMTZIMTNNMSwyMUgyM0wxMiwyTDEsMjFaJyxcbiAgcHJldjogJ00xNS40MSwxNi41OEwxMC44MywxMkwxNS40MSw3LjQxTDE0LDZMOCwxMkwxNCwxOEwxNS40MSwxNi41OFonLFxuICBuZXh0OiAnTTguNTksMTYuNThMMTMuMTcsMTJMOC41OSw3LjQxTDEwLDZMMTYsMTJMMTAsMThMOC41OSwxNi41OFonLFxuICBjaGVja2JveE9uOiAnTTEwLDE3TDUsMTJMNi40MSwxMC41OEwxMCwxNC4xN0wxNy41OSw2LjU4TDE5LDhNMTksM0g1QzMuODksMyAzLDMuODkgMyw1VjE5QzMsMjAuMSAzLjksMjEgNSwyMUgxOUMyMC4xLDIxIDIxLDIwLjEgMjEsMTlWNUMyMSwzLjg5IDIwLjEsMyAxOSwzWicsXG4gIGNoZWNrYm94T2ZmOiAnTTE5LDNINUMzLjg5LDMgMywzLjg5IDMsNVYxOUMzLDIwLjEgMy45LDIxIDUsMjFIMTlDMjAuMSwyMSAyMSwyMC4xIDIxLDE5VjVDMjEsMy44OSAyMC4xLDMgMTksM00xOSw1VjE5SDVWNUgxOVonLFxuICBjaGVja2JveEluZGV0ZXJtaW5hdGU6ICdNMTcsMTNIN1YxMUgxN00xOSwzSDVDMy44OSwzIDMsMy44OSAzLDVWMTlDMywyMC4xIDMuOSwyMSA1LDIxSDE5QzIwLjEsMjEgMjEsMjAuMSAyMSwxOVY1QzIxLDMuODkgMjAuMSwzIDE5LDNaJyxcbiAgZGVsaW1pdGVyOiAnTTEyLDJDNi40OCwyIDIsNi40OCAyLDEyQzIsMTcuNTIgNi40OCwyMiAxMiwyMkMxNy41MiwyMiAyMiwxNy41MiAyMiwxMkMyMiw2LjQ4IDE3LjUyLDIgMTIsMlonLCAvLyBmb3IgY2Fyb3VzZWxcbiAgc29ydDogJ00xMywyMEgxMVY4TDUuNSwxMy41TDQuMDgsMTIuMDhMMTIsNC4xNkwxOS45MiwxMi4wOEwxOC41LDEzLjVMMTMsOFYyMFonLFxuICBleHBhbmQ6ICdNNy40MSw4LjU4TDEyLDEzLjE3TDE2LjU5LDguNThMMTgsMTBMMTIsMTZMNiwxMEw3LjQxLDguNThaJyxcbiAgbWVudTogJ00zLDZIMjFWOEgzVjZNMywxMUgyMVYxM0gzVjExTTMsMTZIMjFWMThIM1YxNlonLFxuICBzdWJncm91cDogJ003LDEwTDEyLDE1TDE3LDEwSDdaJyxcbiAgZHJvcGRvd246ICdNNywxMEwxMiwxNUwxNywxMEg3WicsXG4gIHJhZGlvT246ICdNMTIsMjBDNy41OCwyMCA0LDE2LjQyIDQsMTJDNCw3LjU4IDcuNTgsNCAxMiw0QzE2LjQyLDQgMjAsNy41OCAyMCwxMkMyMCwxNi40MiAxNi40MiwyMCAxMiwyME0xMiwyQzYuNDgsMiAyLDYuNDggMiwxMkMyLDE3LjUyIDYuNDgsMjIgMTIsMjJDMTcuNTIsMjIgMjIsMTcuNTIgMjIsMTJDMjIsNi40OCAxNy41MiwyIDEyLDJNMTIsN0M5LjI0LDcgNyw5LjI0IDcsMTJDNywxNC43NiA5LjI0LDE3IDEyLDE3QzE0Ljc2LDE3IDE3LDE0Ljc2IDE3LDEyQzE3LDkuMjQgMTQuNzYsNyAxMiw3WicsXG4gIHJhZGlvT2ZmOiAnTTEyLDIwQzcuNTgsMjAgNCwxNi40MiA0LDEyQzQsNy41OCA3LjU4LDQgMTIsNEMxNi40Miw0IDIwLDcuNTggMjAsMTJDMjAsMTYuNDIgMTYuNDIsMjAgMTIsMjBNMTIsMkM2LjQ4LDIgMiw2LjQ4IDIsMTJDMiwxNy41MiA2LjQ4LDIyIDEyLDIyQzE3LjUyLDIyIDIyLDE3LjUyIDIyLDEyQzIyLDYuNDggMTcuNTIsMiAxMiwyWicsXG4gIGVkaXQ6ICdNMjAuNzEsNy4wNEMyMS4xLDYuNjUgMjEuMSw2IDIwLjcxLDUuNjNMMTguMzcsMy4yOUMxOCwyLjkgMTcuMzUsMi45IDE2Ljk2LDMuMjlMMTUuMTIsNS4xMkwxOC44Nyw4Ljg3TTMsMTcuMjVWMjFINi43NUwxNy44MSw5LjkzTDE0LjA2LDYuMThMMywxNy4yNVonLFxuICByYXRpbmdFbXB0eTogJ00xMiwxNS4zOUw4LjI0LDE3LjY2TDkuMjMsMTMuMzhMNS45MSwxMC41TDEwLjI5LDEwLjEzTDEyLDYuMDlMMTMuNzEsMTAuMTNMMTguMDksMTAuNUwxNC43NywxMy4zOEwxNS43NiwxNy42Nk0yMiw5LjI0TDE0LjgxLDguNjNMMTIsMkw5LjE5LDguNjNMMiw5LjI0TDcuNDUsMTMuOTdMNS44MiwyMUwxMiwxNy4yN0wxOC4xOCwyMUwxNi41NCwxMy45N0wyMiw5LjI0WicsXG4gIHJhdGluZ0Z1bGw6ICdNMTIsMTcuMjdMMTguMTgsMjFMMTYuNTQsMTMuOTdMMjIsOS4yNEwxNC44MSw4LjYyTDEyLDJMOS4xOSw4LjYyTDIsOS4yNEw3LjQ1LDEzLjk3TDUuODIsMjFMMTIsMTcuMjdaJyxcbiAgcmF0aW5nSGFsZjogJ00xMiwxNS40VjYuMUwxMy43MSwxMC4xM0wxOC4wOSwxMC41TDE0Ljc3LDEzLjM5TDE1Ljc2LDE3LjY3TTIyLDkuMjRMMTQuODEsOC42M0wxMiwyTDkuMTksOC42M0wyLDkuMjRMNy40NSwxMy45N0w1LjgyLDIxTDEyLDE3LjI3TDE4LjE4LDIxTDE2LjU0LDEzLjk3TDIyLDkuMjRaJyxcbiAgbG9hZGluZzogJ00xOSw4TDE1LDEySDE4QzE4LDE1LjMxIDE1LjMxLDE4IDEyLDE4QzExLDE4IDEwLjAzLDE3Ljc1IDkuMiwxNy4zTDcuNzQsMTguNzZDOC45NywxOS41NCAxMC40MywyMCAxMiwyMEMxNi40MiwyMCAyMCwxNi40MiAyMCwxMkgyM002LDEyQzYsOC42OSA4LjY5LDYgMTIsNkMxMyw2IDEzLjk3LDYuMjUgMTQuOCw2LjdMMTYuMjYsNS4yNEMxNS4wMyw0LjQ2IDEzLjU3LDQgMTIsNEM3LjU4LDQgNCw3LjU4IDQsMTJIMUw1LDE2TDksMTInLFxuICBmaXJzdDogJ00xOC40MSwxNi41OUwxMy44MiwxMkwxOC40MSw3LjQxTDE3LDZMMTEsMTJMMTcsMThMMTguNDEsMTYuNTlNNiw2SDhWMThINlY2WicsXG4gIGxhc3Q6ICdNNS41OSw3LjQxTDEwLjE4LDEyTDUuNTksMTYuNTlMNywxOEwxMywxMkw3LDZMNS41OSw3LjQxTTE2LDZIMThWMThIMTZWNlonLFxuICB1bmZvbGQ6ICdNMTIsMTguMTdMOC44MywxNUw3LjQyLDE2LjQxTDEyLDIxTDE2LjU5LDE2LjQxTDE1LjE3LDE1TTEyLDUuODNMMTUuMTcsOUwxNi41OCw3LjU5TDEyLDNMNy40MSw3LjU5TDguODMsOUwxMiw1LjgzWicsXG4gIGZpbGU6ICdNMTYuNSw2VjE3LjVDMTYuNSwxOS43MSAxNC43MSwyMS41IDEyLjUsMjEuNUMxMC4yOSwyMS41IDguNSwxOS43MSA4LjUsMTcuNVY1QzguNSwzLjYyIDkuNjIsMi41IDExLDIuNUMxMi4zOCwyLjUgMTMuNSwzLjYyIDEzLjUsNVYxNS41QzEzLjUsMTYuMDUgMTMuMDUsMTYuNSAxMi41LDE2LjVDMTEuOTUsMTYuNSAxMS41LDE2LjA1IDExLjUsMTUuNVY2SDEwVjE1LjVDMTAsMTYuODggMTEuMTIsMTggMTIuNSwxOEMxMy44OCwxOCAxNSwxNi44OCAxNSwxNS41VjVDMTUsMi43OSAxMy4yMSwxIDExLDFDOC43OSwxIDcsMi43OSA3LDVWMTcuNUM3LDIwLjU0IDkuNDYsMjMgMTIuNSwyM0MxNS41NCwyMyAxOCwyMC41NCAxOCwxNy41VjZIMTYuNVonLFxuICBwbHVzOiAnTTE5LDEzSDEzVjE5SDExVjEzSDVWMTFIMTFWNUgxM1YxMUgxOVYxM1onLFxuICBtaW51czogJ00xOSwxM0g1VjExSDE5VjEzWicsXG59XG5cbmV4cG9ydCBkZWZhdWx0IGljb25zXG4iLCJpbXBvcnQgeyBWdWV0aWZ5SWNvbnMgfSBmcm9tICd2dWV0aWZ5L3R5cGVzL3NlcnZpY2VzL2ljb25zJ1xuXG5jb25zdCBpY29uczogVnVldGlmeUljb25zID0ge1xuICBjb21wbGV0ZTogJ2NoZWNrJyxcbiAgY2FuY2VsOiAnY2FuY2VsJyxcbiAgY2xvc2U6ICdjbG9zZScsXG4gIGRlbGV0ZTogJ2NhbmNlbCcsIC8vIGRlbGV0ZSAoZS5nLiB2LWNoaXAgY2xvc2UpXG4gIGNsZWFyOiAnY2xlYXInLFxuICBzdWNjZXNzOiAnY2hlY2tfY2lyY2xlJyxcbiAgaW5mbzogJ2luZm8nLFxuICB3YXJuaW5nOiAncHJpb3JpdHlfaGlnaCcsXG4gIGVycm9yOiAnd2FybmluZycsXG4gIHByZXY6ICdjaGV2cm9uX2xlZnQnLFxuICBuZXh0OiAnY2hldnJvbl9yaWdodCcsXG4gIGNoZWNrYm94T246ICdjaGVja19ib3gnLFxuICBjaGVja2JveE9mZjogJ2NoZWNrX2JveF9vdXRsaW5lX2JsYW5rJyxcbiAgY2hlY2tib3hJbmRldGVybWluYXRlOiAnaW5kZXRlcm1pbmF0ZV9jaGVja19ib3gnLFxuICBkZWxpbWl0ZXI6ICdmaWJlcl9tYW51YWxfcmVjb3JkJywgLy8gZm9yIGNhcm91c2VsXG4gIHNvcnQ6ICdhcnJvd191cHdhcmQnLFxuICBleHBhbmQ6ICdrZXlib2FyZF9hcnJvd19kb3duJyxcbiAgbWVudTogJ21lbnUnLFxuICBzdWJncm91cDogJ2Fycm93X2Ryb3BfZG93bicsXG4gIGRyb3Bkb3duOiAnYXJyb3dfZHJvcF9kb3duJyxcbiAgcmFkaW9PbjogJ3JhZGlvX2J1dHRvbl9jaGVja2VkJyxcbiAgcmFkaW9PZmY6ICdyYWRpb19idXR0b25fdW5jaGVja2VkJyxcbiAgZWRpdDogJ2VkaXQnLFxuICByYXRpbmdFbXB0eTogJ3N0YXJfYm9yZGVyJyxcbiAgcmF0aW5nRnVsbDogJ3N0YXInLFxuICByYXRpbmdIYWxmOiAnc3Rhcl9oYWxmJyxcbiAgbG9hZGluZzogJ2NhY2hlZCcsXG4gIGZpcnN0OiAnZmlyc3RfcGFnZScsXG4gIGxhc3Q6ICdsYXN0X3BhZ2UnLFxuICB1bmZvbGQ6ICd1bmZvbGRfbW9yZScsXG4gIGZpbGU6ICdhdHRhY2hfZmlsZScsXG4gIHBsdXM6ICdhZGQnLFxuICBtaW51czogJ3JlbW92ZScsXG59XG5cbmV4cG9ydCBkZWZhdWx0IGljb25zXG4iLCJpbXBvcnQgeyBWdWV0aWZ5SWNvbnMgfSBmcm9tICd2dWV0aWZ5L3R5cGVzL3NlcnZpY2VzL2ljb25zJ1xuXG5jb25zdCBpY29uczogVnVldGlmeUljb25zID0ge1xuICBjb21wbGV0ZTogJ21kaS1jaGVjaycsXG4gIGNhbmNlbDogJ21kaS1jbG9zZS1jaXJjbGUnLFxuICBjbG9zZTogJ21kaS1jbG9zZScsXG4gIGRlbGV0ZTogJ21kaS1jbG9zZS1jaXJjbGUnLCAvLyBkZWxldGUgKGUuZy4gdi1jaGlwIGNsb3NlKVxuICBjbGVhcjogJ21kaS1jbG9zZScsXG4gIHN1Y2Nlc3M6ICdtZGktY2hlY2stY2lyY2xlJyxcbiAgaW5mbzogJ21kaS1pbmZvcm1hdGlvbicsXG4gIHdhcm5pbmc6ICdtZGktZXhjbGFtYXRpb24nLFxuICBlcnJvcjogJ21kaS1hbGVydCcsXG4gIHByZXY6ICdtZGktY2hldnJvbi1sZWZ0JyxcbiAgbmV4dDogJ21kaS1jaGV2cm9uLXJpZ2h0JyxcbiAgY2hlY2tib3hPbjogJ21kaS1jaGVja2JveC1tYXJrZWQnLFxuICBjaGVja2JveE9mZjogJ21kaS1jaGVja2JveC1ibGFuay1vdXRsaW5lJyxcbiAgY2hlY2tib3hJbmRldGVybWluYXRlOiAnbWRpLW1pbnVzLWJveCcsXG4gIGRlbGltaXRlcjogJ21kaS1jaXJjbGUnLCAvLyBmb3IgY2Fyb3VzZWxcbiAgc29ydDogJ21kaS1hcnJvdy11cCcsXG4gIGV4cGFuZDogJ21kaS1jaGV2cm9uLWRvd24nLFxuICBtZW51OiAnbWRpLW1lbnUnLFxuICBzdWJncm91cDogJ21kaS1tZW51LWRvd24nLFxuICBkcm9wZG93bjogJ21kaS1tZW51LWRvd24nLFxuICByYWRpb09uOiAnbWRpLXJhZGlvYm94LW1hcmtlZCcsXG4gIHJhZGlvT2ZmOiAnbWRpLXJhZGlvYm94LWJsYW5rJyxcbiAgZWRpdDogJ21kaS1wZW5jaWwnLFxuICByYXRpbmdFbXB0eTogJ21kaS1zdGFyLW91dGxpbmUnLFxuICByYXRpbmdGdWxsOiAnbWRpLXN0YXInLFxuICByYXRpbmdIYWxmOiAnbWRpLXN0YXItaGFsZicsXG4gIGxvYWRpbmc6ICdtZGktY2FjaGVkJyxcbiAgZmlyc3Q6ICdtZGktcGFnZS1maXJzdCcsXG4gIGxhc3Q6ICdtZGktcGFnZS1sYXN0JyxcbiAgdW5mb2xkOiAnbWRpLXVuZm9sZC1tb3JlLWhvcml6b250YWwnLFxuICBmaWxlOiAnbWRpLXBhcGVyY2xpcCcsXG4gIHBsdXM6ICdtZGktcGx1cycsXG4gIG1pbnVzOiAnbWRpLW1pbnVzJyxcbn1cblxuZXhwb3J0IGRlZmF1bHQgaWNvbnNcbiIsImltcG9ydCB7IFZ1ZXRpZnlJY29ucyB9IGZyb20gJ3Z1ZXRpZnkvdHlwZXMvc2VydmljZXMvaWNvbnMnXG5cbmNvbnN0IGljb25zOiBWdWV0aWZ5SWNvbnMgPSB7XG4gIGNvbXBsZXRlOiAnZmFzIGZhLWNoZWNrJyxcbiAgY2FuY2VsOiAnZmFzIGZhLXRpbWVzLWNpcmNsZScsXG4gIGNsb3NlOiAnZmFzIGZhLXRpbWVzJyxcbiAgZGVsZXRlOiAnZmFzIGZhLXRpbWVzLWNpcmNsZScsIC8vIGRlbGV0ZSAoZS5nLiB2LWNoaXAgY2xvc2UpXG4gIGNsZWFyOiAnZmFzIGZhLXRpbWVzLWNpcmNsZScsIC8vIGRlbGV0ZSAoZS5nLiB2LWNoaXAgY2xvc2UpXG4gIHN1Y2Nlc3M6ICdmYXMgZmEtY2hlY2stY2lyY2xlJyxcbiAgaW5mbzogJ2ZhcyBmYS1pbmZvLWNpcmNsZScsXG4gIHdhcm5pbmc6ICdmYXMgZmEtZXhjbGFtYXRpb24nLFxuICBlcnJvcjogJ2ZhcyBmYS1leGNsYW1hdGlvbi10cmlhbmdsZScsXG4gIHByZXY6ICdmYXMgZmEtY2hldnJvbi1sZWZ0JyxcbiAgbmV4dDogJ2ZhcyBmYS1jaGV2cm9uLXJpZ2h0JyxcbiAgY2hlY2tib3hPbjogJ2ZhcyBmYS1jaGVjay1zcXVhcmUnLFxuICBjaGVja2JveE9mZjogJ2ZhciBmYS1zcXVhcmUnLCAvLyBub3RlICdmYXInXG4gIGNoZWNrYm94SW5kZXRlcm1pbmF0ZTogJ2ZhcyBmYS1taW51cy1zcXVhcmUnLFxuICBkZWxpbWl0ZXI6ICdmYXMgZmEtY2lyY2xlJywgLy8gZm9yIGNhcm91c2VsXG4gIHNvcnQ6ICdmYXMgZmEtc29ydC11cCcsXG4gIGV4cGFuZDogJ2ZhcyBmYS1jaGV2cm9uLWRvd24nLFxuICBtZW51OiAnZmFzIGZhLWJhcnMnLFxuICBzdWJncm91cDogJ2ZhcyBmYS1jYXJldC1kb3duJyxcbiAgZHJvcGRvd246ICdmYXMgZmEtY2FyZXQtZG93bicsXG4gIHJhZGlvT246ICdmYXIgZmEtZG90LWNpcmNsZScsXG4gIHJhZGlvT2ZmOiAnZmFyIGZhLWNpcmNsZScsXG4gIGVkaXQ6ICdmYXMgZmEtZWRpdCcsXG4gIHJhdGluZ0VtcHR5OiAnZmFyIGZhLXN0YXInLFxuICByYXRpbmdGdWxsOiAnZmFzIGZhLXN0YXInLFxuICByYXRpbmdIYWxmOiAnZmFzIGZhLXN0YXItaGFsZicsXG4gIGxvYWRpbmc6ICdmYXMgZmEtc3luYycsXG4gIGZpcnN0OiAnZmFzIGZhLXN0ZXAtYmFja3dhcmQnLFxuICBsYXN0OiAnZmFzIGZhLXN0ZXAtZm9yd2FyZCcsXG4gIHVuZm9sZDogJ2ZhcyBmYS1hcnJvd3MtYWx0LXYnLFxuICBmaWxlOiAnZmFzIGZhLXBhcGVyY2xpcCcsXG4gIHBsdXM6ICdmYXMgZmEtcGx1cycsXG4gIG1pbnVzOiAnZmFzIGZhLW1pbnVzJyxcbn1cblxuZXhwb3J0IGRlZmF1bHQgaWNvbnNcbiIsImltcG9ydCB7IFZ1ZXRpZnlJY29ucyB9IGZyb20gJ3Z1ZXRpZnkvdHlwZXMvc2VydmljZXMvaWNvbnMnXG5cbmNvbnN0IGljb25zOiBWdWV0aWZ5SWNvbnMgPSB7XG4gIGNvbXBsZXRlOiAnZmEgZmEtY2hlY2snLFxuICBjYW5jZWw6ICdmYSBmYS10aW1lcy1jaXJjbGUnLFxuICBjbG9zZTogJ2ZhIGZhLXRpbWVzJyxcbiAgZGVsZXRlOiAnZmEgZmEtdGltZXMtY2lyY2xlJywgLy8gZGVsZXRlIChlLmcuIHYtY2hpcCBjbG9zZSlcbiAgY2xlYXI6ICdmYSBmYS10aW1lcy1jaXJjbGUnLCAvLyBkZWxldGUgKGUuZy4gdi1jaGlwIGNsb3NlKVxuICBzdWNjZXNzOiAnZmEgZmEtY2hlY2stY2lyY2xlJyxcbiAgaW5mbzogJ2ZhIGZhLWluZm8tY2lyY2xlJyxcbiAgd2FybmluZzogJ2ZhIGZhLWV4Y2xhbWF0aW9uJyxcbiAgZXJyb3I6ICdmYSBmYS1leGNsYW1hdGlvbi10cmlhbmdsZScsXG4gIHByZXY6ICdmYSBmYS1jaGV2cm9uLWxlZnQnLFxuICBuZXh0OiAnZmEgZmEtY2hldnJvbi1yaWdodCcsXG4gIGNoZWNrYm94T246ICdmYSBmYS1jaGVjay1zcXVhcmUnLFxuICBjaGVja2JveE9mZjogJ2ZhIGZhLXNxdWFyZS1vJyxcbiAgY2hlY2tib3hJbmRldGVybWluYXRlOiAnZmEgZmEtbWludXMtc3F1YXJlJyxcbiAgZGVsaW1pdGVyOiAnZmEgZmEtY2lyY2xlJywgLy8gZm9yIGNhcm91c2VsXG4gIHNvcnQ6ICdmYSBmYS1zb3J0LXVwJyxcbiAgZXhwYW5kOiAnZmEgZmEtY2hldnJvbi1kb3duJyxcbiAgbWVudTogJ2ZhIGZhLWJhcnMnLFxuICBzdWJncm91cDogJ2ZhIGZhLWNhcmV0LWRvd24nLFxuICBkcm9wZG93bjogJ2ZhIGZhLWNhcmV0LWRvd24nLFxuICByYWRpb09uOiAnZmEgZmEtZG90LWNpcmNsZS1vJyxcbiAgcmFkaW9PZmY6ICdmYSBmYS1jaXJjbGUtbycsXG4gIGVkaXQ6ICdmYSBmYS1wZW5jaWwnLFxuICByYXRpbmdFbXB0eTogJ2ZhIGZhLXN0YXItbycsXG4gIHJhdGluZ0Z1bGw6ICdmYSBmYS1zdGFyJyxcbiAgcmF0aW5nSGFsZjogJ2ZhIGZhLXN0YXItaGFsZi1vJyxcbiAgbG9hZGluZzogJ2ZhIGZhLXJlZnJlc2gnLFxuICBmaXJzdDogJ2ZhIGZhLXN0ZXAtYmFja3dhcmQnLFxuICBsYXN0OiAnZmEgZmEtc3RlcC1mb3J3YXJkJyxcbiAgdW5mb2xkOiAnZmEgZmEtYW5nbGUtZG91YmxlLWRvd24nLFxuICBmaWxlOiAnZmEgZmEtcGFwZXJjbGlwJyxcbiAgcGx1czogJ2ZhIGZhLXBsdXMnLFxuICBtaW51czogJ2ZhIGZhLW1pbnVzJyxcbn1cblxuZXhwb3J0IGRlZmF1bHQgaWNvbnNcbiIsImltcG9ydCB7IFZ1ZXRpZnlJY29ucyB9IGZyb20gJ3Z1ZXRpZnkvdHlwZXMvc2VydmljZXMvaWNvbnMnXG5pbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICd2dWUnXG5pbXBvcnQgaWNvbnMgZnJvbSAnLi9mYSdcblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRUb0NvbXBvbmVudERlY2xhcmF0aW9ucyAoXG4gIGNvbXBvbmVudDogQ29tcG9uZW50IHwgc3RyaW5nLFxuICBpY29uU2V0OiBWdWV0aWZ5SWNvbnMsXG4pIHtcbiAgY29uc3QgcmVzdWx0OiBQYXJ0aWFsPFZ1ZXRpZnlJY29ucz4gPSB7fVxuXG4gIGZvciAoY29uc3Qga2V5IGluIGljb25TZXQpIHtcbiAgICByZXN1bHRba2V5XSA9IHtcbiAgICAgIGNvbXBvbmVudCxcbiAgICAgIHByb3BzOiB7XG4gICAgICAgIGljb246IChpY29uU2V0W2tleV0gYXMgc3RyaW5nKS5zcGxpdCgnIGZhLScpLFxuICAgICAgfSxcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0IGFzIFZ1ZXRpZnlJY29uc1xufVxuXG5leHBvcnQgZGVmYXVsdCBjb252ZXJ0VG9Db21wb25lbnREZWNsYXJhdGlvbnMoJ2ZvbnQtYXdlc29tZS1pY29uJywgaWNvbnMpXG4iLCJpbXBvcnQgbWRpU3ZnIGZyb20gJy4vbWRpLXN2ZydcbmltcG9ydCBtZCBmcm9tICcuL21kJ1xuaW1wb3J0IG1kaSBmcm9tICcuL21kaSdcbmltcG9ydCBmYSBmcm9tICcuL2ZhJ1xuaW1wb3J0IGZhNCBmcm9tICcuL2ZhNCdcbmltcG9ydCBmYVN2ZyBmcm9tICcuL2ZhLXN2ZydcblxuZXhwb3J0IGRlZmF1bHQgT2JqZWN0LmZyZWV6ZSh7XG4gIG1kaVN2ZyxcbiAgbWQsXG4gIG1kaSxcbiAgZmEsXG4gIGZhNCxcbiAgZmFTdmcsXG59KVxuIiwiLy8gRXh0ZW5zaW9uc1xuaW1wb3J0IHsgU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2UnXG5cbi8vIFV0aWxpdGllc1xuaW1wb3J0IHsgbWVyZ2VEZWVwIH0gZnJvbSAnLi4vLi4vdXRpbC9oZWxwZXJzJ1xuXG4vLyBUeXBlc1xuaW1wb3J0IHsgVnVldGlmeVByZXNldCB9IGZyb20gJ3Z1ZXRpZnkvdHlwZXMvc2VydmljZXMvcHJlc2V0cydcbmltcG9ydCB7IEljb25zIGFzIElJY29ucyB9IGZyb20gJ3Z1ZXRpZnkvdHlwZXMvc2VydmljZXMvaWNvbnMnXG5cbi8vIFByZXNldHNcbmltcG9ydCBwcmVzZXRzIGZyb20gJy4vcHJlc2V0cydcblxuZXhwb3J0IGNsYXNzIEljb25zIGV4dGVuZHMgU2VydmljZSBpbXBsZW1lbnRzIElJY29ucyB7XG4gIHN0YXRpYyBwcm9wZXJ0eTogJ2ljb25zJyA9ICdpY29ucydcblxuICBwdWJsaWMgaWNvbmZvbnQ6IElJY29uc1snaWNvbmZvbnQnXVxuXG4gIHB1YmxpYyB2YWx1ZXM6IElJY29uc1sndmFsdWVzJ11cblxuICBjb25zdHJ1Y3RvciAocHJlc2V0OiBWdWV0aWZ5UHJlc2V0KSB7XG4gICAgc3VwZXIoKVxuXG4gICAgY29uc3Qge1xuICAgICAgaWNvbmZvbnQsXG4gICAgICB2YWx1ZXMsXG4gICAgfSA9IHByZXNldFtJY29ucy5wcm9wZXJ0eV1cblxuICAgIHRoaXMuaWNvbmZvbnQgPSBpY29uZm9udFxuICAgIHRoaXMudmFsdWVzID0gbWVyZ2VEZWVwKFxuICAgICAgcHJlc2V0c1tpY29uZm9udF0sXG4gICAgICB2YWx1ZXNcbiAgICApIGFzIElJY29uc1sndmFsdWVzJ11cbiAgfVxufVxuIiwiLy8gRXh0ZW5zaW9uc1xuaW1wb3J0IHsgU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2UnXG5cbi8vIFV0aWxpdGllc1xuaW1wb3J0IHsgZ2V0T2JqZWN0VmFsdWVCeVBhdGggfSBmcm9tICcuLi8uLi91dGlsL2hlbHBlcnMnXG5pbXBvcnQgeyBjb25zb2xlRXJyb3IsIGNvbnNvbGVXYXJuIH0gZnJvbSAnLi4vLi4vdXRpbC9jb25zb2xlJ1xuXG4vLyBUeXBlc1xuaW1wb3J0IHsgVnVldGlmeVByZXNldCB9IGZyb20gJ3Z1ZXRpZnkvdHlwZXMvc2VydmljZXMvcHJlc2V0cydcbmltcG9ydCB7XG4gIFZ1ZXRpZnlMb2NhbGUsXG4gIExhbmcgYXMgSUxhbmcsXG59IGZyb20gJ3Z1ZXRpZnkvdHlwZXMvc2VydmljZXMvbGFuZydcblxuY29uc3QgTEFOR19QUkVGSVggPSAnJHZ1ZXRpZnkuJ1xuY29uc3QgZmFsbGJhY2sgPSBTeW1ib2woJ0xhbmcgZmFsbGJhY2snKVxuXG5mdW5jdGlvbiBnZXRUcmFuc2xhdGlvbiAoXG4gIGxvY2FsZTogVnVldGlmeUxvY2FsZSxcbiAga2V5OiBzdHJpbmcsXG4gIHVzaW5nRGVmYXVsdCA9IGZhbHNlLFxuICBkZWZhdWx0TG9jYWxlOiBWdWV0aWZ5TG9jYWxlXG4pOiBzdHJpbmcge1xuICBjb25zdCBzaG9ydEtleSA9IGtleS5yZXBsYWNlKExBTkdfUFJFRklYLCAnJylcbiAgbGV0IHRyYW5zbGF0aW9uID0gZ2V0T2JqZWN0VmFsdWVCeVBhdGgobG9jYWxlLCBzaG9ydEtleSwgZmFsbGJhY2spIGFzIHN0cmluZyB8IHR5cGVvZiBmYWxsYmFja1xuXG4gIGlmICh0cmFuc2xhdGlvbiA9PT0gZmFsbGJhY2spIHtcbiAgICBpZiAodXNpbmdEZWZhdWx0KSB7XG4gICAgICBjb25zb2xlRXJyb3IoYFRyYW5zbGF0aW9uIGtleSBcIiR7c2hvcnRLZXl9XCIgbm90IGZvdW5kIGluIGZhbGxiYWNrYClcbiAgICAgIHRyYW5zbGF0aW9uID0ga2V5XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGVXYXJuKGBUcmFuc2xhdGlvbiBrZXkgXCIke3Nob3J0S2V5fVwiIG5vdCBmb3VuZCwgZmFsbGluZyBiYWNrIHRvIGRlZmF1bHRgKVxuICAgICAgdHJhbnNsYXRpb24gPSBnZXRUcmFuc2xhdGlvbihkZWZhdWx0TG9jYWxlLCBrZXksIHRydWUsIGRlZmF1bHRMb2NhbGUpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRyYW5zbGF0aW9uXG59XG5cbmV4cG9ydCBjbGFzcyBMYW5nIGV4dGVuZHMgU2VydmljZSBpbXBsZW1lbnRzIElMYW5nIHtcbiAgc3RhdGljIHByb3BlcnR5OiAnbGFuZycgPSAnbGFuZydcblxuICBwdWJsaWMgY3VycmVudDogSUxhbmdbJ2N1cnJlbnQnXVxuXG4gIHB1YmxpYyBkZWZhdWx0TG9jYWxlID0gJ2VuJ1xuXG4gIHB1YmxpYyBsb2NhbGVzOiBJTGFuZ1snbG9jYWxlcyddXG5cbiAgcHJpdmF0ZSB0cmFuc2xhdG9yOiBJTGFuZ1sndCddXG5cbiAgY29uc3RydWN0b3IgKHByZXNldDogVnVldGlmeVByZXNldCkge1xuICAgIHN1cGVyKClcblxuICAgIGNvbnN0IHtcbiAgICAgIGN1cnJlbnQsXG4gICAgICBsb2NhbGVzLFxuICAgICAgdCxcbiAgICB9ID0gcHJlc2V0W0xhbmcucHJvcGVydHldXG5cbiAgICB0aGlzLmN1cnJlbnQgPSBjdXJyZW50XG4gICAgdGhpcy5sb2NhbGVzID0gbG9jYWxlc1xuICAgIHRoaXMudHJhbnNsYXRvciA9IHQgfHwgdGhpcy5kZWZhdWx0VHJhbnNsYXRvclxuICB9XG5cbiAgcHVibGljIGN1cnJlbnRMb2NhbGUgKGtleTogc3RyaW5nKSB7XG4gICAgY29uc3QgdHJhbnNsYXRpb24gPSB0aGlzLmxvY2FsZXNbdGhpcy5jdXJyZW50XVxuICAgIGNvbnN0IGRlZmF1bHRMb2NhbGUgPSB0aGlzLmxvY2FsZXNbdGhpcy5kZWZhdWx0TG9jYWxlXVxuXG4gICAgcmV0dXJuIGdldFRyYW5zbGF0aW9uKHRyYW5zbGF0aW9uLCBrZXksIGZhbHNlLCBkZWZhdWx0TG9jYWxlKVxuICB9XG5cbiAgcHVibGljIHQgKGtleTogc3RyaW5nLCAuLi5wYXJhbXM6IGFueVtdKSB7XG4gICAgaWYgKCFrZXkuc3RhcnRzV2l0aChMQU5HX1BSRUZJWCkpIHJldHVybiB0aGlzLnJlcGxhY2Uoa2V5LCBwYXJhbXMpXG5cbiAgICByZXR1cm4gdGhpcy50cmFuc2xhdG9yKGtleSwgLi4ucGFyYW1zKVxuICB9XG5cbiAgcHJpdmF0ZSBkZWZhdWx0VHJhbnNsYXRvciAoa2V5OiBzdHJpbmcsIC4uLnBhcmFtczogYW55W10pIHtcbiAgICByZXR1cm4gdGhpcy5yZXBsYWNlKHRoaXMuY3VycmVudExvY2FsZShrZXkpLCBwYXJhbXMpXG4gIH1cblxuICBwcml2YXRlIHJlcGxhY2UgKHN0cjogc3RyaW5nLCBwYXJhbXM6IGFueVtdKSB7XG4gICAgcmV0dXJuIHN0ci5yZXBsYWNlKC9cXHsoXFxkKylcXH0vZywgKG1hdGNoOiBzdHJpbmcsIGluZGV4OiBzdHJpbmcpID0+IHtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICByZXR1cm4gU3RyaW5nKHBhcmFtc1sraW5kZXhdKVxuICAgIH0pXG4gIH1cbn1cbiIsImltcG9ydCB7IFhZWiwgTEFCIH0gZnJvbSAnLi4vY29sb3JVdGlscydcblxuY29uc3QgZGVsdGEgPSAwLjIwNjg5NjU1MTcyNDEzNzkzIC8vIDbDtzI5XG5cbmNvbnN0IGNpZWxhYkZvcndhcmRUcmFuc2Zvcm0gPSAodDogbnVtYmVyKTogbnVtYmVyID0+IChcbiAgdCA+IGRlbHRhICoqIDNcbiAgICA/IE1hdGguY2JydCh0KVxuICAgIDogKHQgLyAoMyAqIGRlbHRhICoqIDIpKSArIDQgLyAyOVxuKVxuXG5jb25zdCBjaWVsYWJSZXZlcnNlVHJhbnNmb3JtID0gKHQ6IG51bWJlcik6IG51bWJlciA9PiAoXG4gIHQgPiBkZWx0YVxuICAgID8gdCAqKiAzXG4gICAgOiAoMyAqIGRlbHRhICoqIDIpICogKHQgLSA0IC8gMjkpXG4pXG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9tWFlaICh4eXo6IFhZWik6IExBQiB7XG4gIGNvbnN0IHRyYW5zZm9ybSA9IGNpZWxhYkZvcndhcmRUcmFuc2Zvcm1cbiAgY29uc3QgdHJhbnNmb3JtZWRZID0gdHJhbnNmb3JtKHh5elsxXSlcblxuICByZXR1cm4gW1xuICAgIDExNiAqIHRyYW5zZm9ybWVkWSAtIDE2LFxuICAgIDUwMCAqICh0cmFuc2Zvcm0oeHl6WzBdIC8gMC45NTA0NykgLSB0cmFuc2Zvcm1lZFkpLFxuICAgIDIwMCAqICh0cmFuc2Zvcm1lZFkgLSB0cmFuc2Zvcm0oeHl6WzJdIC8gMS4wODg4MykpLFxuICBdXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b1hZWiAobGFiOiBMQUIpOiBYWVoge1xuICBjb25zdCB0cmFuc2Zvcm0gPSBjaWVsYWJSZXZlcnNlVHJhbnNmb3JtXG4gIGNvbnN0IExuID0gKGxhYlswXSArIDE2KSAvIDExNlxuICByZXR1cm4gW1xuICAgIHRyYW5zZm9ybShMbiArIGxhYlsxXSAvIDUwMCkgKiAwLjk1MDQ3LFxuICAgIHRyYW5zZm9ybShMbiksXG4gICAgdHJhbnNmb3JtKExuIC0gbGFiWzJdIC8gMjAwKSAqIDEuMDg4ODMsXG4gIF1cbn1cbiIsImltcG9ydCB7IGNvbG9yVG9JbnQsIGludFRvSGV4LCBjb2xvclRvSGV4LCBDb2xvckludCB9IGZyb20gJy4uLy4uL3V0aWwvY29sb3JVdGlscydcbmltcG9ydCAqIGFzIHNSR0IgZnJvbSAnLi4vLi4vdXRpbC9jb2xvci90cmFuc2Zvcm1TUkdCJ1xuaW1wb3J0ICogYXMgTEFCIGZyb20gJy4uLy4uL3V0aWwvY29sb3IvdHJhbnNmb3JtQ0lFTEFCJ1xuaW1wb3J0IHtcbiAgVnVldGlmeVBhcnNlZFRoZW1lLFxuICBWdWV0aWZ5VGhlbWVJdGVtLFxufSBmcm9tICd2dWV0aWZ5L3R5cGVzL3NlcnZpY2VzL3RoZW1lJ1xuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2UgKFxuICB0aGVtZTogUmVjb3JkPHN0cmluZywgVnVldGlmeVRoZW1lSXRlbT4sXG4gIGlzSXRlbSA9IGZhbHNlLFxuICB2YXJpYXRpb25zID0gdHJ1ZSxcbik6IFZ1ZXRpZnlQYXJzZWRUaGVtZSB7XG4gIGNvbnN0IHsgYW5jaG9yLCAuLi52YXJpYW50IH0gPSB0aGVtZVxuICBjb25zdCBjb2xvcnMgPSBPYmplY3Qua2V5cyh2YXJpYW50KVxuICBjb25zdCBwYXJzZWRUaGVtZTogYW55ID0ge31cblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbG9ycy5sZW5ndGg7ICsraSkge1xuICAgIGNvbnN0IG5hbWUgPSBjb2xvcnNbaV1cbiAgICBjb25zdCB2YWx1ZSA9IHRoZW1lW25hbWVdXG5cbiAgICBpZiAodmFsdWUgPT0gbnVsbCkgY29udGludWVcblxuICAgIGlmICghdmFyaWF0aW9ucykge1xuICAgICAgcGFyc2VkVGhlbWVbbmFtZV0gPSB7IGJhc2U6IGludFRvSGV4KGNvbG9yVG9JbnQodmFsdWUpKSB9XG4gICAgfSBlbHNlIGlmIChpc0l0ZW0pIHtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICBpZiAobmFtZSA9PT0gJ2Jhc2UnIHx8IG5hbWUuc3RhcnRzV2l0aCgnbGlnaHRlbicpIHx8IG5hbWUuc3RhcnRzV2l0aCgnZGFya2VuJykpIHtcbiAgICAgICAgcGFyc2VkVGhlbWVbbmFtZV0gPSBjb2xvclRvSGV4KHZhbHVlKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgcGFyc2VkVGhlbWVbbmFtZV0gPSBwYXJzZSh2YWx1ZSwgdHJ1ZSwgdmFyaWF0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgcGFyc2VkVGhlbWVbbmFtZV0gPSBnZW5WYXJpYXRpb25zKG5hbWUsIGNvbG9yVG9JbnQodmFsdWUpKVxuICAgIH1cbiAgfVxuXG4gIGlmICghaXNJdGVtKSB7XG4gICAgcGFyc2VkVGhlbWUuYW5jaG9yID0gYW5jaG9yIHx8IHBhcnNlZFRoZW1lLmJhc2UgfHwgcGFyc2VkVGhlbWUucHJpbWFyeS5iYXNlXG4gIH1cblxuICByZXR1cm4gcGFyc2VkVGhlbWVcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZSB0aGUgQ1NTIGZvciBhIGJhc2UgY29sb3IgKC5wcmltYXJ5KVxuICovXG5jb25zdCBnZW5CYXNlQ29sb3IgPSAobmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgcmV0dXJuIGBcbi52LWFwcGxpY2F0aW9uIC4ke25hbWV9IHtcbiAgYmFja2dyb3VuZC1jb2xvcjogJHt2YWx1ZX0gIWltcG9ydGFudDtcbiAgYm9yZGVyLWNvbG9yOiAke3ZhbHVlfSAhaW1wb3J0YW50O1xufVxuLnYtYXBwbGljYXRpb24gLiR7bmFtZX0tLXRleHQge1xuICBjb2xvcjogJHt2YWx1ZX0gIWltcG9ydGFudDtcbiAgY2FyZXQtY29sb3I6ICR7dmFsdWV9ICFpbXBvcnRhbnQ7XG59YFxufVxuXG4vKipcbiAqIEdlbmVyYXRlIHRoZSBDU1MgZm9yIGEgdmFyaWFudCBjb2xvciAoLnByaW1hcnkuZGFya2VuLTIpXG4gKi9cbmNvbnN0IGdlblZhcmlhbnRDb2xvciA9IChuYW1lOiBzdHJpbmcsIHZhcmlhbnQ6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIGNvbnN0IFt0eXBlLCBuXSA9IHZhcmlhbnQuc3BsaXQoLyhcXGQpLywgMilcbiAgcmV0dXJuIGBcbi52LWFwcGxpY2F0aW9uIC4ke25hbWV9LiR7dHlwZX0tJHtufSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICR7dmFsdWV9ICFpbXBvcnRhbnQ7XG4gIGJvcmRlci1jb2xvcjogJHt2YWx1ZX0gIWltcG9ydGFudDtcbn1cbi52LWFwcGxpY2F0aW9uIC4ke25hbWV9LS10ZXh0LnRleHQtLSR7dHlwZX0tJHtufSB7XG4gIGNvbG9yOiAke3ZhbHVlfSAhaW1wb3J0YW50O1xuICBjYXJldC1jb2xvcjogJHt2YWx1ZX0gIWltcG9ydGFudDtcbn1gXG59XG5cbmNvbnN0IGdlbkNvbG9yVmFyaWFibGVOYW1lID0gKG5hbWU6IHN0cmluZywgdmFyaWFudCA9ICdiYXNlJyk6IHN0cmluZyA9PiBgLS12LSR7bmFtZX0tJHt2YXJpYW50fWBcblxuY29uc3QgZ2VuQ29sb3JWYXJpYWJsZSA9IChuYW1lOiBzdHJpbmcsIHZhcmlhbnQgPSAnYmFzZScpOiBzdHJpbmcgPT4gYHZhcigke2dlbkNvbG9yVmFyaWFibGVOYW1lKG5hbWUsIHZhcmlhbnQpfSlgXG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5TdHlsZXMgKHRoZW1lOiBWdWV0aWZ5UGFyc2VkVGhlbWUsIGNzc1ZhciA9IGZhbHNlKTogc3RyaW5nIHtcbiAgY29uc3QgeyBhbmNob3IsIC4uLnZhcmlhbnQgfSA9IHRoZW1lXG4gIGNvbnN0IGNvbG9ycyA9IE9iamVjdC5rZXlzKHZhcmlhbnQpXG5cbiAgaWYgKCFjb2xvcnMubGVuZ3RoKSByZXR1cm4gJydcblxuICBsZXQgdmFyaWFibGVzQ3NzID0gJydcbiAgbGV0IGNzcyA9ICcnXG5cbiAgY29uc3QgYUNvbG9yID0gY3NzVmFyID8gZ2VuQ29sb3JWYXJpYWJsZSgnYW5jaG9yJykgOiBhbmNob3JcbiAgY3NzICs9IGAudi1hcHBsaWNhdGlvbiBhIHsgY29sb3I6ICR7YUNvbG9yfTsgfWBcbiAgY3NzVmFyICYmICh2YXJpYWJsZXNDc3MgKz0gYCAgJHtnZW5Db2xvclZhcmlhYmxlTmFtZSgnYW5jaG9yJyl9OiAke2FuY2hvcn07XFxuYClcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbG9ycy5sZW5ndGg7ICsraSkge1xuICAgIGNvbnN0IG5hbWUgPSBjb2xvcnNbaV1cbiAgICBjb25zdCB2YWx1ZSA9IHRoZW1lW25hbWVdXG5cbiAgICBjc3MgKz0gZ2VuQmFzZUNvbG9yKG5hbWUsIGNzc1ZhciA/IGdlbkNvbG9yVmFyaWFibGUobmFtZSkgOiB2YWx1ZS5iYXNlKVxuICAgIGNzc1ZhciAmJiAodmFyaWFibGVzQ3NzICs9IGAgICR7Z2VuQ29sb3JWYXJpYWJsZU5hbWUobmFtZSl9OiAke3ZhbHVlLmJhc2V9O1xcbmApXG5cbiAgICBjb25zdCB2YXJpYW50cyA9IE9iamVjdC5rZXlzKHZhbHVlKVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmFyaWFudHMubGVuZ3RoOyArK2kpIHtcbiAgICAgIGNvbnN0IHZhcmlhbnQgPSB2YXJpYW50c1tpXVxuICAgICAgY29uc3QgdmFyaWFudFZhbHVlID0gdmFsdWVbdmFyaWFudF1cbiAgICAgIGlmICh2YXJpYW50ID09PSAnYmFzZScpIGNvbnRpbnVlXG5cbiAgICAgIGNzcyArPSBnZW5WYXJpYW50Q29sb3IobmFtZSwgdmFyaWFudCwgY3NzVmFyID8gZ2VuQ29sb3JWYXJpYWJsZShuYW1lLCB2YXJpYW50KSA6IHZhcmlhbnRWYWx1ZSlcbiAgICAgIGNzc1ZhciAmJiAodmFyaWFibGVzQ3NzICs9IGAgICR7Z2VuQ29sb3JWYXJpYWJsZU5hbWUobmFtZSwgdmFyaWFudCl9OiAke3ZhcmlhbnRWYWx1ZX07XFxuYClcbiAgICB9XG4gIH1cblxuICBpZiAoY3NzVmFyKSB7XG4gICAgdmFyaWFibGVzQ3NzID0gYDpyb290IHtcXG4ke3ZhcmlhYmxlc0Nzc319XFxuXFxuYFxuICB9XG5cbiAgcmV0dXJuIHZhcmlhYmxlc0NzcyArIGNzc1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2VuVmFyaWF0aW9ucyAobmFtZTogc3RyaW5nLCB2YWx1ZTogQ29sb3JJbnQpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgY29uc3QgdmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgIGJhc2U6IGludFRvSGV4KHZhbHVlKSxcbiAgfVxuXG4gIGZvciAobGV0IGkgPSA1OyBpID4gMDsgLS1pKSB7XG4gICAgdmFsdWVzW2BsaWdodGVuJHtpfWBdID0gaW50VG9IZXgobGlnaHRlbih2YWx1ZSwgaSkpXG4gIH1cblxuICBmb3IgKGxldCBpID0gMTsgaSA8PSA0OyArK2kpIHtcbiAgICB2YWx1ZXNbYGRhcmtlbiR7aX1gXSA9IGludFRvSGV4KGRhcmtlbih2YWx1ZSwgaSkpXG4gIH1cblxuICByZXR1cm4gdmFsdWVzXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsaWdodGVuICh2YWx1ZTogQ29sb3JJbnQsIGFtb3VudDogbnVtYmVyKTogQ29sb3JJbnQge1xuICBjb25zdCBsYWIgPSBMQUIuZnJvbVhZWihzUkdCLnRvWFlaKHZhbHVlKSlcbiAgbGFiWzBdID0gbGFiWzBdICsgYW1vdW50ICogMTBcbiAgcmV0dXJuIHNSR0IuZnJvbVhZWihMQUIudG9YWVoobGFiKSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRhcmtlbiAodmFsdWU6IENvbG9ySW50LCBhbW91bnQ6IG51bWJlcik6IENvbG9ySW50IHtcbiAgY29uc3QgbGFiID0gTEFCLmZyb21YWVooc1JHQi50b1hZWih2YWx1ZSkpXG4gIGxhYlswXSA9IGxhYlswXSAtIGFtb3VudCAqIDEwXG4gIHJldHVybiBzUkdCLmZyb21YWVooTEFCLnRvWFlaKGxhYikpXG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBuby1tdWx0aS1zcGFjZXMgKi9cbi8vIEV4dGVuc2lvbnNcbmltcG9ydCB7IFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlJ1xuXG4vLyBVdGlsaXRpZXNcbmltcG9ydCAqIGFzIFRoZW1lVXRpbHMgZnJvbSAnLi91dGlscydcbmltcG9ydCB7IGdldE5lc3RlZFZhbHVlIH0gZnJvbSAnLi4vLi4vdXRpbC9oZWxwZXJzJ1xuXG4vLyBUeXBlc1xuaW1wb3J0IFZ1ZSBmcm9tICd2dWUnXG5pbXBvcnQgeyBWdWV0aWZ5UHJlc2V0IH0gZnJvbSAndnVldGlmeS90eXBlcy9zZXJ2aWNlcy9wcmVzZXRzJ1xuaW1wb3J0IHtcbiAgVnVldGlmeVBhcnNlZFRoZW1lLFxuICBWdWV0aWZ5VGhlbWVzLFxuICBWdWV0aWZ5VGhlbWVWYXJpYW50LFxuICBUaGVtZSBhcyBJVGhlbWUsXG59IGZyb20gJ3Z1ZXRpZnkvdHlwZXMvc2VydmljZXMvdGhlbWUnXG5cbmV4cG9ydCBjbGFzcyBUaGVtZSBleHRlbmRzIFNlcnZpY2Uge1xuICBzdGF0aWMgcHJvcGVydHk6ICd0aGVtZScgPSAndGhlbWUnXG5cbiAgcHVibGljIGRpc2FibGVkID0gZmFsc2VcblxuICBwdWJsaWMgb3B0aW9uczogSVRoZW1lWydvcHRpb25zJ11cblxuICBwdWJsaWMgc3R5bGVFbD86IEhUTUxTdHlsZUVsZW1lbnRcblxuICBwdWJsaWMgdGhlbWVzOiBWdWV0aWZ5VGhlbWVzXG5cbiAgcHVibGljIGRlZmF1bHRzOiBWdWV0aWZ5VGhlbWVzXG5cbiAgcHJpdmF0ZSBpc0RhcmsgPSBudWxsIGFzIGJvb2xlYW4gfCBudWxsXG5cbiAgcHJpdmF0ZSB1bndhdGNoID0gbnVsbCBhcyAoKCkgPT4gdm9pZCkgfCBudWxsXG5cbiAgcHJpdmF0ZSB2dWVNZXRhID0gbnVsbCBhcyBhbnkgfCBudWxsXG5cbiAgY29uc3RydWN0b3IgKHByZXNldDogVnVldGlmeVByZXNldCkge1xuICAgIHN1cGVyKClcblxuICAgIGNvbnN0IHtcbiAgICAgIGRhcmssXG4gICAgICBkaXNhYmxlLFxuICAgICAgb3B0aW9ucyxcbiAgICAgIHRoZW1lcyxcbiAgICB9ID0gcHJlc2V0W1RoZW1lLnByb3BlcnR5XVxuXG4gICAgdGhpcy5kYXJrID0gQm9vbGVhbihkYXJrKVxuICAgIHRoaXMuZGVmYXVsdHMgPSB0aGlzLnRoZW1lcyA9IHRoZW1lc1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnNcblxuICAgIGlmIChkaXNhYmxlKSB7XG4gICAgICB0aGlzLmRpc2FibGVkID0gdHJ1ZVxuXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLnRoZW1lcyA9IHtcbiAgICAgIGRhcms6IHRoaXMuZmlsbFZhcmlhbnQodGhlbWVzLmRhcmssIHRydWUpLFxuICAgICAgbGlnaHQ6IHRoaXMuZmlsbFZhcmlhbnQodGhlbWVzLmxpZ2h0LCBmYWxzZSksXG4gICAgfVxuICB9XG5cbiAgLy8gV2hlbiBzZXR0aW5nIGNzcywgY2hlY2sgZm9yIGVsZW1lbnRcbiAgLy8gYW5kIGFwcGx5IG5ldyB2YWx1ZXNcbiAgc2V0IGNzcyAodmFsOiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy52dWVNZXRhKSB7XG4gICAgICBpZiAodGhpcy5pc1Z1ZU1ldGEyMykge1xuICAgICAgICB0aGlzLmFwcGx5VnVlTWV0YTIzKClcbiAgICAgIH1cbiAgICAgIHJldHVyblxuICAgIH1cbiAgICB0aGlzLmNoZWNrT3JDcmVhdGVTdHlsZUVsZW1lbnQoKSAmJiAodGhpcy5zdHlsZUVsIS5pbm5lckhUTUwgPSB2YWwpXG4gIH1cblxuICBzZXQgZGFyayAodmFsOiBib29sZWFuKSB7XG4gICAgY29uc3Qgb2xkRGFyayA9IHRoaXMuaXNEYXJrXG5cbiAgICB0aGlzLmlzRGFyayA9IHZhbFxuICAgIC8vIE9ubHkgYXBwbHkgdGhlbWUgYWZ0ZXIgZGFya1xuICAgIC8vIGhhcyBhbHJlYWR5IGJlZW4gc2V0IGJlZm9yZVxuICAgIG9sZERhcmsgIT0gbnVsbCAmJiB0aGlzLmFwcGx5VGhlbWUoKVxuICB9XG5cbiAgZ2V0IGRhcmsgKCkge1xuICAgIHJldHVybiBCb29sZWFuKHRoaXMuaXNEYXJrKVxuICB9XG5cbiAgLy8gQXBwbHkgY3VycmVudCB0aGVtZSBkZWZhdWx0XG4gIC8vIG9ubHkgY2FsbGVkIG9uIGNsaWVudCBzaWRlXG4gIHB1YmxpYyBhcHBseVRoZW1lICgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkgcmV0dXJuIHRoaXMuY2xlYXJDc3MoKVxuXG4gICAgdGhpcy5jc3MgPSB0aGlzLmdlbmVyYXRlZFN0eWxlc1xuICB9XG5cbiAgcHVibGljIGNsZWFyQ3NzICgpOiB2b2lkIHtcbiAgICB0aGlzLmNzcyA9ICcnXG4gIH1cblxuICAvLyBJbml0aWFsaXplIHRoZW1lIGZvciBTU1IgYW5kIFNQQVxuICAvLyBBdHRhY2ggdG8gc3NyQ29udGV4dCBoZWFkIG9yXG4gIC8vIGFwcGx5IG5ldyB0aGVtZSB0byBkb2N1bWVudFxuICBwdWJsaWMgaW5pdCAocm9vdDogVnVlLCBzc3JDb250ZXh0PzogYW55KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHJldHVyblxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAoKHJvb3QgYXMgYW55KS4kbWV0YSkge1xuICAgICAgdGhpcy5pbml0VnVlTWV0YShyb290KVxuICAgIH0gZWxzZSBpZiAoc3NyQ29udGV4dCkge1xuICAgICAgdGhpcy5pbml0U1NSKHNzckNvbnRleHQpXG4gICAgfVxuXG4gICAgdGhpcy5pbml0VGhlbWUocm9vdClcbiAgfVxuXG4gIC8vIEFsbG93cyBmb3IgeW91IHRvIHNldCB0YXJnZXQgdGhlbWVcbiAgcHVibGljIHNldFRoZW1lICh0aGVtZTogJ2xpZ2h0JyB8ICdkYXJrJywgdmFsdWU6IG9iamVjdCkge1xuICAgIHRoaXMudGhlbWVzW3RoZW1lXSA9IE9iamVjdC5hc3NpZ24odGhpcy50aGVtZXNbdGhlbWVdLCB2YWx1ZSlcbiAgICB0aGlzLmFwcGx5VGhlbWUoKVxuICB9XG5cbiAgLy8gUmVzZXQgdGhlbWUgZGVmYXVsdHNcbiAgcHVibGljIHJlc2V0VGhlbWVzICgpIHtcbiAgICB0aGlzLnRoZW1lcy5saWdodCA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuZGVmYXVsdHMubGlnaHQpXG4gICAgdGhpcy50aGVtZXMuZGFyayA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuZGVmYXVsdHMuZGFyaylcbiAgICB0aGlzLmFwcGx5VGhlbWUoKVxuICB9XG5cbiAgLy8gQ2hlY2sgZm9yIGV4aXN0ZW5jZSBvZiBzdHlsZSBlbGVtZW50XG4gIHByaXZhdGUgY2hlY2tPckNyZWF0ZVN0eWxlRWxlbWVudCAoKTogYm9vbGVhbiB7XG4gICAgdGhpcy5zdHlsZUVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Z1ZXRpZnktdGhlbWUtc3R5bGVzaGVldCcpIGFzIEhUTUxTdHlsZUVsZW1lbnRcblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgaWYgKHRoaXMuc3R5bGVFbCkgcmV0dXJuIHRydWVcblxuICAgIHRoaXMuZ2VuU3R5bGVFbGVtZW50KCkgLy8gSWYgZG9lc24ndCBoYXZlIGl0LCBjcmVhdGUgaXRcblxuICAgIHJldHVybiBCb29sZWFuKHRoaXMuc3R5bGVFbClcbiAgfVxuXG4gIHByaXZhdGUgZmlsbFZhcmlhbnQgKFxuICAgIHRoZW1lOiBQYXJ0aWFsPFZ1ZXRpZnlUaGVtZVZhcmlhbnQ+ID0ge30sXG4gICAgZGFyazogYm9vbGVhblxuICApOiBWdWV0aWZ5VGhlbWVWYXJpYW50IHtcbiAgICBjb25zdCBkZWZhdWx0VGhlbWUgPSB0aGlzLnRoZW1lc1tkYXJrID8gJ2RhcmsnIDogJ2xpZ2h0J11cblxuICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LFxuICAgICAgZGVmYXVsdFRoZW1lLFxuICAgICAgdGhlbWVcbiAgICApXG4gIH1cblxuICAvLyBHZW5lcmF0ZSB0aGUgc3R5bGUgZWxlbWVudFxuICAvLyBpZiBhcHBsaWNhYmxlXG4gIHByaXZhdGUgZ2VuU3R5bGVFbGVtZW50ICgpOiB2b2lkIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAodHlwZW9mIGRvY3VtZW50ID09PSAndW5kZWZpbmVkJykgcmV0dXJuXG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIHRoaXMuc3R5bGVFbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJylcbiAgICB0aGlzLnN0eWxlRWwudHlwZSA9ICd0ZXh0L2NzcydcbiAgICB0aGlzLnN0eWxlRWwuaWQgPSAndnVldGlmeS10aGVtZS1zdHlsZXNoZWV0J1xuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5jc3BOb25jZSkge1xuICAgICAgdGhpcy5zdHlsZUVsLnNldEF0dHJpYnV0ZSgnbm9uY2UnLCB0aGlzLm9wdGlvbnMuY3NwTm9uY2UpXG4gICAgfVxuXG4gICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZCh0aGlzLnN0eWxlRWwpXG4gIH1cblxuICBwcml2YXRlIGluaXRWdWVNZXRhIChyb290OiBhbnkpIHtcbiAgICB0aGlzLnZ1ZU1ldGEgPSByb290LiRtZXRhKClcbiAgICBpZiAodGhpcy5pc1Z1ZU1ldGEyMykge1xuICAgICAgLy8gdnVlLW1ldGEgbmVlZHMgdG8gYXBwbHkgYWZ0ZXIgbW91bnRlZCgpXG4gICAgICByb290LiRuZXh0VGljaygoKSA9PiB7XG4gICAgICAgIHRoaXMuYXBwbHlWdWVNZXRhMjMoKVxuICAgICAgfSlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IG1ldGFLZXlOYW1lID0gdHlwZW9mIHRoaXMudnVlTWV0YS5nZXRPcHRpb25zID09PSAnZnVuY3Rpb24nID8gdGhpcy52dWVNZXRhLmdldE9wdGlvbnMoKS5rZXlOYW1lIDogJ21ldGFJbmZvJ1xuICAgIGNvbnN0IG1ldGFJbmZvID0gcm9vdC4kb3B0aW9uc1ttZXRhS2V5TmFtZV0gfHwge31cblxuICAgIHJvb3QuJG9wdGlvbnNbbWV0YUtleU5hbWVdID0gKCkgPT4ge1xuICAgICAgbWV0YUluZm8uc3R5bGUgPSBtZXRhSW5mby5zdHlsZSB8fCBbXVxuXG4gICAgICBjb25zdCB2dWV0aWZ5U3R5bGVzaGVldCA9IG1ldGFJbmZvLnN0eWxlLmZpbmQoKHM6IGFueSkgPT4gcy5pZCA9PT0gJ3Z1ZXRpZnktdGhlbWUtc3R5bGVzaGVldCcpXG5cbiAgICAgIGlmICghdnVldGlmeVN0eWxlc2hlZXQpIHtcbiAgICAgICAgbWV0YUluZm8uc3R5bGUucHVzaCh7XG4gICAgICAgICAgY3NzVGV4dDogdGhpcy5nZW5lcmF0ZWRTdHlsZXMsXG4gICAgICAgICAgdHlwZTogJ3RleHQvY3NzJyxcbiAgICAgICAgICBpZDogJ3Z1ZXRpZnktdGhlbWUtc3R5bGVzaGVldCcsXG4gICAgICAgICAgbm9uY2U6ICh0aGlzLm9wdGlvbnMgfHwge30pLmNzcE5vbmNlLFxuICAgICAgICB9KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdnVldGlmeVN0eWxlc2hlZXQuY3NzVGV4dCA9IHRoaXMuZ2VuZXJhdGVkU3R5bGVzXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBtZXRhSW5mb1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlWdWVNZXRhMjMgKCkge1xuICAgIGNvbnN0IHsgc2V0IH0gPSB0aGlzLnZ1ZU1ldGEuYWRkQXBwKCd2dWV0aWZ5JylcblxuICAgIHNldCh7XG4gICAgICBzdHlsZTogW3tcbiAgICAgICAgY3NzVGV4dDogdGhpcy5nZW5lcmF0ZWRTdHlsZXMsXG4gICAgICAgIHR5cGU6ICd0ZXh0L2NzcycsXG4gICAgICAgIGlkOiAndnVldGlmeS10aGVtZS1zdHlsZXNoZWV0JyxcbiAgICAgICAgbm9uY2U6IHRoaXMub3B0aW9ucy5jc3BOb25jZSxcbiAgICAgIH1dLFxuICAgIH0pXG4gIH1cblxuICBwcml2YXRlIGluaXRTU1IgKHNzckNvbnRleHQ/OiBhbnkpIHtcbiAgICAvLyBTU1JcbiAgICBjb25zdCBub25jZSA9IHRoaXMub3B0aW9ucy5jc3BOb25jZSA/IGAgbm9uY2U9XCIke3RoaXMub3B0aW9ucy5jc3BOb25jZX1cImAgOiAnJ1xuICAgIHNzckNvbnRleHQuaGVhZCA9IHNzckNvbnRleHQuaGVhZCB8fCAnJ1xuICAgIHNzckNvbnRleHQuaGVhZCArPSBgPHN0eWxlIHR5cGU9XCJ0ZXh0L2Nzc1wiIGlkPVwidnVldGlmeS10aGVtZS1zdHlsZXNoZWV0XCIke25vbmNlfT4ke3RoaXMuZ2VuZXJhdGVkU3R5bGVzfTwvc3R5bGU+YFxuICB9XG5cbiAgcHJpdmF0ZSBpbml0VGhlbWUgKHJvb3Q6IFZ1ZSkge1xuICAgIC8vIE9ubHkgd2F0Y2ggZm9yIHJlYWN0aXZpdHkgb24gY2xpZW50IHNpZGVcbiAgICBpZiAodHlwZW9mIGRvY3VtZW50ID09PSAndW5kZWZpbmVkJykgcmV0dXJuXG5cbiAgICAvLyBJZiB3ZSBnZXQgaGVyZSBzb21laG93LCBlbnN1cmVcbiAgICAvLyBleGlzdGluZyBpbnN0YW5jZSBpcyByZW1vdmVkXG4gICAgaWYgKHRoaXMudW53YXRjaCkge1xuICAgICAgdGhpcy51bndhdGNoKClcbiAgICAgIHRoaXMudW53YXRjaCA9IG51bGxcbiAgICB9XG5cbiAgICAvLyBUT0RPOiBVcGRhdGUgdG8gdXNlIFJGQyBpZiBtZXJnZWRcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvcmZjcy9ibG9iL2FkdmFuY2VkLXJlYWN0aXZpdHktYXBpL2FjdGl2ZS1yZmNzLzAwMDAtYWR2YW5jZWQtcmVhY3Rpdml0eS1hcGkubWRcbiAgICByb290LiRvbmNlKCdob29rOmNyZWF0ZWQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBvYnMgPSBWdWUub2JzZXJ2YWJsZSh7IHRoZW1lczogdGhpcy50aGVtZXMgfSlcbiAgICAgIHRoaXMudW53YXRjaCA9IHJvb3QuJHdhdGNoKCgpID0+IG9icy50aGVtZXMsICgpID0+IHRoaXMuYXBwbHlUaGVtZSgpLCB7IGRlZXA6IHRydWUgfSlcbiAgICB9KVxuICAgIHRoaXMuYXBwbHlUaGVtZSgpXG4gIH1cblxuICBnZXQgY3VycmVudFRoZW1lICgpIHtcbiAgICBjb25zdCB0YXJnZXQgPSB0aGlzLmRhcmsgPyAnZGFyaycgOiAnbGlnaHQnXG5cbiAgICByZXR1cm4gdGhpcy50aGVtZXNbdGFyZ2V0XVxuICB9XG5cbiAgZ2V0IGdlbmVyYXRlZFN0eWxlcyAoKTogc3RyaW5nIHtcbiAgICBjb25zdCB0aGVtZSA9IHRoaXMucGFyc2VkVGhlbWVcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMgfHwge31cbiAgICBsZXQgY3NzXG5cbiAgICBpZiAob3B0aW9ucy50aGVtZUNhY2hlICE9IG51bGwpIHtcbiAgICAgIGNzcyA9IG9wdGlvbnMudGhlbWVDYWNoZS5nZXQodGhlbWUpXG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgIGlmIChjc3MgIT0gbnVsbCkgcmV0dXJuIGNzc1xuICAgIH1cblxuICAgIGNzcyA9IFRoZW1lVXRpbHMuZ2VuU3R5bGVzKHRoZW1lLCBvcHRpb25zLmN1c3RvbVByb3BlcnRpZXMpXG5cbiAgICBpZiAob3B0aW9ucy5taW5pZnlUaGVtZSAhPSBudWxsKSB7XG4gICAgICBjc3MgPSBvcHRpb25zLm1pbmlmeVRoZW1lKGNzcylcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy50aGVtZUNhY2hlICE9IG51bGwpIHtcbiAgICAgIG9wdGlvbnMudGhlbWVDYWNoZS5zZXQodGhlbWUsIGNzcylcbiAgICB9XG5cbiAgICByZXR1cm4gY3NzXG4gIH1cblxuICBnZXQgcGFyc2VkVGhlbWUgKCk6IFZ1ZXRpZnlQYXJzZWRUaGVtZSB7XG4gICAgcmV0dXJuIFRoZW1lVXRpbHMucGFyc2UoXG4gICAgICB0aGlzLmN1cnJlbnRUaGVtZSB8fCB7fSxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIGdldE5lc3RlZFZhbHVlKHRoaXMub3B0aW9ucywgWyd2YXJpYXRpb25zJ10sIHRydWUpXG4gICAgKVxuICB9XG5cbiAgLy8gSXMgdXNpbmcgdjIuMyBvZiB2dWUtbWV0YVxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vbnV4dC92dWUtbWV0YS9yZWxlYXNlcy90YWcvdjIuMy4wXG4gIHByaXZhdGUgZ2V0IGlzVnVlTWV0YTIzICgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHlwZW9mIHRoaXMudnVlTWV0YS5hZGRBcHAgPT09ICdmdW5jdGlvbidcbiAgfVxufVxuIiwiaW1wb3J0IHsgaW5zdGFsbCB9IGZyb20gJy4vaW5zdGFsbCdcblxuLy8gVHlwZXNcbmltcG9ydCBWdWUgZnJvbSAndnVlJ1xuaW1wb3J0IHtcbiAgVXNlclZ1ZXRpZnlQcmVzZXQsXG4gIFZ1ZXRpZnlQcmVzZXQsXG59IGZyb20gJ3Z1ZXRpZnkvdHlwZXMvc2VydmljZXMvcHJlc2V0cydcbmltcG9ydCB7XG4gIFZ1ZXRpZnlTZXJ2aWNlLFxuICBWdWV0aWZ5U2VydmljZUNvbnRyYWN0LFxufSBmcm9tICd2dWV0aWZ5L3R5cGVzL3NlcnZpY2VzJ1xuXG4vLyBTZXJ2aWNlc1xuaW1wb3J0ICogYXMgc2VydmljZXMgZnJvbSAnLi9zZXJ2aWNlcydcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVnVldGlmeSB7XG4gIHN0YXRpYyBpbnN0YWxsID0gaW5zdGFsbFxuXG4gIHN0YXRpYyBpbnN0YWxsZWQgPSBmYWxzZVxuXG4gIHN0YXRpYyB2ZXJzaW9uID0gX19WVUVUSUZZX1ZFUlNJT05fX1xuXG4gIHN0YXRpYyBjb25maWcgPSB7XG4gICAgc2lsZW50OiBmYWxzZSxcbiAgfVxuXG4gIHB1YmxpYyBmcmFtZXdvcms6IERpY3Rpb25hcnk8VnVldGlmeVNlcnZpY2VDb250cmFjdD4gPSB7XG4gICAgaXNIeWRyYXRpbmc6IGZhbHNlLFxuICB9IGFzIGFueVxuXG4gIHB1YmxpYyBpbnN0YWxsZWQ6IHN0cmluZ1tdID0gW11cblxuICBwdWJsaWMgcHJlc2V0ID0ge30gYXMgVnVldGlmeVByZXNldFxuXG4gIHB1YmxpYyB1c2VyUHJlc2V0OiBVc2VyVnVldGlmeVByZXNldCA9IHt9XG5cbiAgY29uc3RydWN0b3IgKHVzZXJQcmVzZXQ6IFVzZXJWdWV0aWZ5UHJlc2V0ID0ge30pIHtcbiAgICB0aGlzLnVzZXJQcmVzZXQgPSB1c2VyUHJlc2V0XG5cbiAgICB0aGlzLnVzZShzZXJ2aWNlcy5QcmVzZXRzKVxuICAgIHRoaXMudXNlKHNlcnZpY2VzLkFwcGxpY2F0aW9uKVxuICAgIHRoaXMudXNlKHNlcnZpY2VzLkJyZWFrcG9pbnQpXG4gICAgdGhpcy51c2Uoc2VydmljZXMuR290bylcbiAgICB0aGlzLnVzZShzZXJ2aWNlcy5JY29ucylcbiAgICB0aGlzLnVzZShzZXJ2aWNlcy5MYW5nKVxuICAgIHRoaXMudXNlKHNlcnZpY2VzLlRoZW1lKVxuICB9XG5cbiAgLy8gQ2FsbGVkIG9uIHRoZSBuZXcgdnVldGlmeSBpbnN0YW5jZVxuICAvLyBib290c3RyYXAgaW4gaW5zdGFsbCBiZWZvcmVDcmVhdGVcbiAgLy8gRXhwb3NlcyBzc3JDb250ZXh0IGlmIGF2YWlsYWJsZVxuICBpbml0IChyb290OiBWdWUsIHNzckNvbnRleHQ/OiBvYmplY3QpIHtcbiAgICB0aGlzLmluc3RhbGxlZC5mb3JFYWNoKHByb3BlcnR5ID0+IHtcbiAgICAgIGNvbnN0IHNlcnZpY2UgPSB0aGlzLmZyYW1ld29ya1twcm9wZXJ0eV1cblxuICAgICAgc2VydmljZS5mcmFtZXdvcmsgPSB0aGlzLmZyYW1ld29ya1xuXG4gICAgICBzZXJ2aWNlLmluaXQocm9vdCwgc3NyQ29udGV4dClcbiAgICB9KVxuXG4gICAgLy8gcnRsIGlzIG5vdCBpbnN0YWxsZWQgYW5kXG4gICAgLy8gd2lsbCBuZXZlciBiZSBjYWxsZWQgYnlcbiAgICAvLyB0aGUgaW5pdCBwcm9jZXNzXG4gICAgdGhpcy5mcmFtZXdvcmsucnRsID0gQm9vbGVhbih0aGlzLnByZXNldC5ydGwpIGFzIGFueVxuICB9XG5cbiAgLy8gSW5zdGFudGlhdGUgYSBWdWV0aWZ5U2VydmljZVxuICB1c2UgKFNlcnZpY2U6IFZ1ZXRpZnlTZXJ2aWNlKSB7XG4gICAgY29uc3QgcHJvcGVydHkgPSBTZXJ2aWNlLnByb3BlcnR5XG5cbiAgICBpZiAodGhpcy5pbnN0YWxsZWQuaW5jbHVkZXMocHJvcGVydHkpKSByZXR1cm5cblxuICAgIC8vIFRPRE8gbWF5YmUgYSBzcGVjaWZpYyB0eXBlIGZvciBhcmcgMj9cbiAgICB0aGlzLmZyYW1ld29ya1twcm9wZXJ0eV0gPSBuZXcgU2VydmljZSh0aGlzLnByZXNldCwgdGhpcyBhcyBhbnkpXG4gICAgdGhpcy5pbnN0YWxsZWQucHVzaChwcm9wZXJ0eSlcbiAgfVxufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///76\n");
/***/ }),
/***/ 92:
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("// JS-YAML's default schema for `load` function.\n// It is not described in the YAML specification.\n//\n// This schema is based on JS-YAML's default safe schema and includes\n// JavaScript-specific types: !!js/undefined, !!js/regexp and !!js/function.\n//\n// Also this schema is used as default base schema at `Schema.create` function.\n\n\n\n\n\nvar Schema = __webpack_require__(60);\n\n\nmodule.exports = Schema.DEFAULT = new Schema({\n include: [\n __webpack_require__(75)\n ],\n explicit: [\n __webpack_require__(227),\n __webpack_require__(228),\n __webpack_require__(229)\n ]\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC9zY2hlbWEvZGVmYXVsdF9mdWxsLmpzPzU2ZDMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdhOzs7QUFHYixhQUFhLG1CQUFPLENBQUMsRUFBVzs7O0FBR2hDO0FBQ0E7QUFDQSxJQUFJLG1CQUFPLENBQUMsRUFBZ0I7QUFDNUI7QUFDQTtBQUNBLElBQUksbUJBQU8sQ0FBQyxHQUFzQjtBQUNsQyxJQUFJLG1CQUFPLENBQUMsR0FBbUI7QUFDL0IsSUFBSSxtQkFBTyxDQUFDLEdBQXFCO0FBQ2pDO0FBQ0EsQ0FBQyIsImZpbGUiOiI5Mi5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEpTLVlBTUwncyBkZWZhdWx0IHNjaGVtYSBmb3IgYGxvYWRgIGZ1bmN0aW9uLlxuLy8gSXQgaXMgbm90IGRlc2NyaWJlZCBpbiB0aGUgWUFNTCBzcGVjaWZpY2F0aW9uLlxuLy9cbi8vIFRoaXMgc2NoZW1hIGlzIGJhc2VkIG9uIEpTLVlBTUwncyBkZWZhdWx0IHNhZmUgc2NoZW1hIGFuZCBpbmNsdWRlc1xuLy8gSmF2YVNjcmlwdC1zcGVjaWZpYyB0eXBlczogISFqcy91bmRlZmluZWQsICEhanMvcmVnZXhwIGFuZCAhIWpzL2Z1bmN0aW9uLlxuLy9cbi8vIEFsc28gdGhpcyBzY2hlbWEgaXMgdXNlZCBhcyBkZWZhdWx0IGJhc2Ugc2NoZW1hIGF0IGBTY2hlbWEuY3JlYXRlYCBmdW5jdGlvbi5cblxuXG4ndXNlIHN0cmljdCc7XG5cblxudmFyIFNjaGVtYSA9IHJlcXVpcmUoJy4uL3NjaGVtYScpO1xuXG5cbm1vZHVsZS5leHBvcnRzID0gU2NoZW1hLkRFRkFVTFQgPSBuZXcgU2NoZW1hKHtcbiAgaW5jbHVkZTogW1xuICAgIHJlcXVpcmUoJy4vZGVmYXVsdF9zYWZlJylcbiAgXSxcbiAgZXhwbGljaXQ6IFtcbiAgICByZXF1aXJlKCcuLi90eXBlL2pzL3VuZGVmaW5lZCcpLFxuICAgIHJlcXVpcmUoJy4uL3R5cGUvanMvcmVnZXhwJyksXG4gICAgcmVxdWlyZSgnLi4vdHlwZS9qcy9mdW5jdGlvbicpXG4gIF1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///92\n");
/***/ })
}]);
© 2015 - 2025 Weber Informatics LLC | Privacy Policy